Commit 2622d7d8 authored by Ping-Ke Shih's avatar Ping-Ke Shih Committed by Kalle Valo

rtlwifi: btcoex: 23b 1ant: TDMA duration for ACL busy

BT ACL is a special case, so we create a routine to deal this case.
Signed-off-by: default avatarPing-Ke Shih <pkshih@realtek.com>
Signed-off-by: default avatarLarry Finger <Larry.Finger@lwfinger.net>
Cc: Yan-Hsuan Chuang <yhchuang@realtek.com>
Cc: Birming Chiu <birming@realtek.com>
Cc: Shaofu <shaofu@realtek.com>
Cc: Steven Ting <steventing@realtek.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent 2d446a56
...@@ -1124,6 +1124,11 @@ void btc8723b1ant_tdma_dur_adj_for_acl(struct btc_coexist *btcoexist, ...@@ -1124,6 +1124,11 @@ void btc8723b1ant_tdma_dur_adj_for_acl(struct btc_coexist *btcoexist,
/* acquire the BT TRx retry count from BT_Info byte2 */ /* acquire the BT TRx retry count from BT_Info byte2 */
retry_count = coex_sta->bt_retry_cnt; retry_count = coex_sta->bt_retry_cnt;
bt_info_ext = coex_sta->bt_info_ext; bt_info_ext = coex_sta->bt_info_ext;
if ((coex_sta->low_priority_tx) > 1050 ||
(coex_sta->low_priority_rx) > 1250)
retry_count++;
result = 0; result = 0;
wait_count++; wait_count++;
/* no retry in the last 2-second duration */ /* no retry in the last 2-second duration */
...@@ -1135,6 +1140,9 @@ void btc8723b1ant_tdma_dur_adj_for_acl(struct btc_coexist *btcoexist, ...@@ -1135,6 +1140,9 @@ void btc8723b1ant_tdma_dur_adj_for_acl(struct btc_coexist *btcoexist,
dn = 0; dn = 0;
if (up >= n) { if (up >= n) {
/* if retry count during continuous n*2 seconds
* is 0, enlarge WiFi duration
*/
wait_count = 0; wait_count = 0;
n = 3; n = 3;
up = 0; up = 0;
...@@ -1144,6 +1152,7 @@ void btc8723b1ant_tdma_dur_adj_for_acl(struct btc_coexist *btcoexist, ...@@ -1144,6 +1152,7 @@ void btc8723b1ant_tdma_dur_adj_for_acl(struct btc_coexist *btcoexist,
"[BTCoex], Increase wifi duration!!\n"); "[BTCoex], Increase wifi duration!!\n");
} }
} else if (retry_count <= 3) { } else if (retry_count <= 3) {
/* <=3 retry in the last 2-second duration */
up--; up--;
dn++; dn++;
...@@ -1151,12 +1160,20 @@ void btc8723b1ant_tdma_dur_adj_for_acl(struct btc_coexist *btcoexist, ...@@ -1151,12 +1160,20 @@ void btc8723b1ant_tdma_dur_adj_for_acl(struct btc_coexist *btcoexist,
up = 0; up = 0;
if (dn == 2) { if (dn == 2) {
/* if continuous 2 retry count(every 2 seconds)
* >0 and < 3, reduce WiFi duration
*/
if (wait_count <= 2) if (wait_count <= 2)
/* avoid loop between the two levels */
m++; m++;
else else
m = 1; m = 1;
if (m >= 20) if (m >= 20)
/* maximum of m = 20 ' will recheck if
* need to adjust wifi duration in
* maximum time interval 120 seconds
*/
m = 20; m = 20;
n = 3 * m; n = 3 * m;
...@@ -1168,12 +1185,20 @@ void btc8723b1ant_tdma_dur_adj_for_acl(struct btc_coexist *btcoexist, ...@@ -1168,12 +1185,20 @@ void btc8723b1ant_tdma_dur_adj_for_acl(struct btc_coexist *btcoexist,
"[BTCoex], Decrease wifi duration for retryCounter<3!!\n"); "[BTCoex], Decrease wifi duration for retryCounter<3!!\n");
} }
} else { } else {
/* retry count > 3, once retry count > 3, to reduce
* WiFi duration
*/
if (wait_count == 1) if (wait_count == 1)
/* to avoid loop between the two levels */
m++; m++;
else else
m = 1; m = 1;
if (m >= 20) if (m >= 20)
/* maximum of m = 20 ' will recheck if need to
* adjust wifi duration in maximum time interval
* 120 seconds
*/
m = 20; m = 20;
n = 3 * m; n = 3 * m;
...@@ -1186,13 +1211,7 @@ void btc8723b1ant_tdma_dur_adj_for_acl(struct btc_coexist *btcoexist, ...@@ -1186,13 +1211,7 @@ void btc8723b1ant_tdma_dur_adj_for_acl(struct btc_coexist *btcoexist,
} }
if (result == -1) { if (result == -1) {
if ((BT_INFO_8723B_1ANT_A2DP_BASIC_RATE(bt_info_ext)) && if (coex_dm->cur_ps_tdma == 1) {
((coex_dm->cur_ps_tdma == 1) ||
(coex_dm->cur_ps_tdma == 2))) {
halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC,
true, 9);
coex_dm->ps_tdma_du_adj_type = 9;
} else if (coex_dm->cur_ps_tdma == 1) {
halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC, halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC,
true, 2); true, 2);
coex_dm->ps_tdma_du_adj_type = 2; coex_dm->ps_tdma_du_adj_type = 2;
...@@ -1206,13 +1225,7 @@ void btc8723b1ant_tdma_dur_adj_for_acl(struct btc_coexist *btcoexist, ...@@ -1206,13 +1225,7 @@ void btc8723b1ant_tdma_dur_adj_for_acl(struct btc_coexist *btcoexist,
coex_dm->ps_tdma_du_adj_type = 11; coex_dm->ps_tdma_du_adj_type = 11;
} }
} else if (result == 1) { } else if (result == 1) {
if ((BT_INFO_8723B_1ANT_A2DP_BASIC_RATE(bt_info_ext)) && if (coex_dm->cur_ps_tdma == 11) {
((coex_dm->cur_ps_tdma == 1) ||
(coex_dm->cur_ps_tdma == 2))) {
halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC,
true, 9);
coex_dm->ps_tdma_du_adj_type = 9;
} else if (coex_dm->cur_ps_tdma == 11) {
halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC, halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC,
true, 9); true, 9);
coex_dm->ps_tdma_du_adj_type = 9; coex_dm->ps_tdma_du_adj_type = 9;
...@@ -1225,11 +1238,6 @@ void btc8723b1ant_tdma_dur_adj_for_acl(struct btc_coexist *btcoexist, ...@@ -1225,11 +1238,6 @@ void btc8723b1ant_tdma_dur_adj_for_acl(struct btc_coexist *btcoexist,
true, 1); true, 1);
coex_dm->ps_tdma_du_adj_type = 1; coex_dm->ps_tdma_du_adj_type = 1;
} }
} else {
/* if busy / idle change */
RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
"[BTCoex],********* TDMA(on, %d) ********\n",
coex_dm->cur_ps_tdma);
} }
if (coex_dm->cur_ps_tdma != 1 && coex_dm->cur_ps_tdma != 2 && if (coex_dm->cur_ps_tdma != 1 && coex_dm->cur_ps_tdma != 2 &&
...@@ -1448,12 +1456,12 @@ static void halbtc8723b1ant_action_wifi_connected_bt_acl_busy( ...@@ -1448,12 +1456,12 @@ static void halbtc8723b1ant_action_wifi_connected_bt_acl_busy(
halbtc8723b1ant_coex_table_with_type(btcoexist, halbtc8723b1ant_coex_table_with_type(btcoexist,
NORMAL_EXEC, 2); NORMAL_EXEC, 2);
coex_dm->auto_tdma_adjust = false; coex_dm->auto_tdma_adjust = false;
} else { /* for low BT RSSI */ } else {
halbtc8723b1ant_ps_tdma(btcoexist, NORMAL_EXEC, btc8723b1ant_tdma_dur_adj_for_acl(btcoexist,
true, 11); wifi_status);
halbtc8723b1ant_coex_table_with_type(btcoexist, halbtc8723b1ant_coex_table_with_type(btcoexist,
NORMAL_EXEC, 1); NORMAL_EXEC, 1);
coex_dm->auto_tdma_adjust = false; coex_dm->auto_tdma_adjust = true;
} }
} else if (bt_link_info->hid_exist && } else if (bt_link_info->hid_exist &&
bt_link_info->a2dp_exist) { /* HID + A2DP */ bt_link_info->a2dp_exist) { /* HID + A2DP */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment