Commit 842280da authored by Ching-Te Ku's avatar Ching-Te Ku Committed by Kalle Valo

rtw88: coex: separate BLE HID profile from BLE profile

BT firmware will report BLE-HID and BLE-RCU in different profile.
We can distinguish the two profile from BT info now.

Add the coexistence for BLE-HID coexistence,
it can make BLE HID work more smoothly.

BLE-HID need to Tx/Rx packet more frequently to respond
user operation, but RCU doesn't.

In the case of RCU coexistence, it will make Wi-Fi have a
higher priority to earn more Wi-Fi throughput.

If BLE-HID go for the same case,
it will make user feel mouse is lagging.

Desired BT firmware BT-COEX version: 0x1c
Desired WL firmware version: 9.9
Signed-off-by: default avatarChing-Te Ku <ku920601@realtek.com>
Signed-off-by: default avatarPing-Ke Shih <pkshih@realtek.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20201030055506.6560-1-pkshih@realtek.com
parent c521d7e0
...@@ -1470,13 +1470,19 @@ static void rtw_coex_action_bt_hid(struct rtw_dev *rtwdev) ...@@ -1470,13 +1470,19 @@ static void rtw_coex_action_bt_hid(struct rtw_dev *rtwdev)
} else { } else {
/* for 4/18 HID */ /* for 4/18 HID */
if (coex_stat->bt_418_hid_exist && if (coex_stat->bt_418_hid_exist &&
coex_stat->wl_gl_busy) coex_stat->wl_gl_busy) {
table_case = 12; table_case = 12;
else tdma_case = 4;
} else if (coex_stat->bt_ble_hid_exist &&
coex_stat->wl_gl_busy) {
table_case = 32;
tdma_case = 9;
} else {
table_case = 10; table_case = 10;
tdma_case = 4; tdma_case = 4;
} }
} }
}
} else { } else {
/* Non-Shared-Ant */ /* Non-Shared-Ant */
if (coex_stat->bt_a2dp_active) { if (coex_stat->bt_a2dp_active) {
...@@ -2388,6 +2394,23 @@ void rtw_coex_bt_info_notify(struct rtw_dev *rtwdev, u8 *buf, u8 length) ...@@ -2388,6 +2394,23 @@ void rtw_coex_bt_info_notify(struct rtw_dev *rtwdev, u8 *buf, u8 length)
4 * HZ); 4 * HZ);
} }
coex_stat->bt_acl_busy = ((coex_stat->bt_info_lb2 & BIT(3)) == BIT(3)); coex_stat->bt_acl_busy = ((coex_stat->bt_info_lb2 & BIT(3)) == BIT(3));
if (coex_stat->bt_info_lb2 & BIT(5)) {
if (coex_stat->bt_info_hb1 & BIT(0)) {
/*BLE HID*/
coex_stat->bt_ble_hid_exist = true;
} else {
coex_stat->bt_ble_hid_exist = false;
}
coex_stat->bt_ble_exist = false;
} else if (coex_stat->bt_info_hb1 & BIT(0)) {
/*RCU*/
coex_stat->bt_ble_hid_exist = false;
coex_stat->bt_ble_exist = true;
} else {
coex_stat->bt_ble_hid_exist = false;
coex_stat->bt_ble_exist = false;
}
coex_stat->cnt_bt[COEX_CNT_BT_RETRY] = coex_stat->bt_info_lb3 & 0xf; coex_stat->cnt_bt[COEX_CNT_BT_RETRY] = coex_stat->bt_info_lb3 & 0xf;
if (coex_stat->cnt_bt[COEX_CNT_BT_RETRY] >= 1) if (coex_stat->cnt_bt[COEX_CNT_BT_RETRY] >= 1)
coex_stat->cnt_bt[COEX_CNT_BT_POPEVENT]++; coex_stat->cnt_bt[COEX_CNT_BT_POPEVENT]++;
...@@ -2422,7 +2445,6 @@ void rtw_coex_bt_info_notify(struct rtw_dev *rtwdev, u8 *buf, u8 length) ...@@ -2422,7 +2445,6 @@ void rtw_coex_bt_info_notify(struct rtw_dev *rtwdev, u8 *buf, u8 length)
coex_stat->bt_rssi = 0; coex_stat->bt_rssi = 0;
} }
coex_stat->bt_ble_exist = ((coex_stat->bt_info_hb1 & BIT(0)) == BIT(0));
if (coex_stat->bt_info_hb1 & BIT(1)) if (coex_stat->bt_info_hb1 & BIT(1))
coex_stat->cnt_bt[COEX_CNT_BT_REINIT]++; coex_stat->cnt_bt[COEX_CNT_BT_REINIT]++;
...@@ -2965,6 +2987,7 @@ void rtw_coex_display_coex_info(struct rtw_dev *rtwdev, struct seq_file *m) ...@@ -2965,6 +2987,7 @@ void rtw_coex_display_coex_info(struct rtw_dev *rtwdev, struct seq_file *m)
coex_stat->bt_hid_exist ? coex_stat->bt_hid_exist ?
(coex_stat->bt_ble_exist ? "HID(RCU)," : (coex_stat->bt_ble_exist ? "HID(RCU)," :
coex_stat->bt_hid_slot >= 2 ? "HID(4/18)" : coex_stat->bt_hid_slot >= 2 ? "HID(4/18)" :
coex_stat->bt_ble_hid_exist ? "HID(BLE)" :
"HID(2/18),") : "", "HID(2/18),") : "",
coex_stat->bt_pan_exist ? coex_stat->bt_opp_exist ? coex_stat->bt_pan_exist ? coex_stat->bt_opp_exist ?
"OPP," : "PAN," : "", "OPP," : "PAN," : "",
......
...@@ -1305,6 +1305,7 @@ struct rtw_coex_stat { ...@@ -1305,6 +1305,7 @@ struct rtw_coex_stat {
bool bt_init_scan; bool bt_init_scan;
bool bt_slave; bool bt_slave;
bool bt_418_hid_exist; bool bt_418_hid_exist;
bool bt_ble_hid_exist;
bool bt_mailbox_reply; bool bt_mailbox_reply;
bool wl_under_lps; bool wl_under_lps;
......
...@@ -1976,7 +1976,10 @@ static const struct coex_table_para table_sant_8723d[] = { ...@@ -1976,7 +1976,10 @@ static const struct coex_table_para table_sant_8723d[] = {
{0x55555555, 0x5a5a5a5a}, {0x55555555, 0x5a5a5a5a},
{0x55555555, 0xaaaaaaaa}, {0x55555555, 0xaaaaaaaa},
{0x55555555, 0x6a6a6a6a}, {0x55555555, 0x6a6a6a6a},
{0x656a656a, 0x656a656a} {0x656a656a, 0x656a656a},
{0x66556aaa, 0x6a5a6aaa}, /* case-30 */
{0xffffffff, 0x5aaa5aaa},
{0x56555555, 0x5a5a5aaa},
}; };
/* Non-Shared-Antenna Coex Table */ /* Non-Shared-Antenna Coex Table */
......
...@@ -2164,7 +2164,10 @@ static const struct coex_table_para table_sant_8822b[] = { ...@@ -2164,7 +2164,10 @@ static const struct coex_table_para table_sant_8822b[] = {
{0x55555555, 0x5a5a5a5a}, {0x55555555, 0x5a5a5a5a},
{0x55555555, 0xaaaaaaaa}, {0x55555555, 0xaaaaaaaa},
{0x55555555, 0x6a5a6a5a}, {0x55555555, 0x6a5a6a5a},
{0x66556655, 0x66556655} {0x66556655, 0x66556655},
{0x66556aaa, 0x6a5a6aaa}, /* case-30 */
{0xffffffff, 0x5aaa5aaa},
{0x56555555, 0x5a5a5aaa},
}; };
/* Non-Shared-Antenna Coex Table */ /* Non-Shared-Antenna Coex Table */
......
...@@ -4006,7 +4006,10 @@ static const struct coex_table_para table_sant_8822c[] = { ...@@ -4006,7 +4006,10 @@ static const struct coex_table_para table_sant_8822c[] = {
{0x55555555, 0x5a5a5a5a}, {0x55555555, 0x5a5a5a5a},
{0x55555555, 0xaaaaaaaa}, {0x55555555, 0xaaaaaaaa},
{0x55555555, 0x6a5a6a5a}, {0x55555555, 0x6a5a6a5a},
{0x66556655, 0x66556655} {0x66556655, 0x66556655},
{0x66556aaa, 0x6a5a6aaa}, /* case-30 */
{0xffffffff, 0x5aaa5aaa},
{0x56555555, 0x5a5a5aaa},
}; };
/* Non-Shared-Antenna Coex Table */ /* Non-Shared-Antenna Coex Table */
...@@ -4337,8 +4340,8 @@ struct rtw_chip_info rtw8822c_hw_spec = { ...@@ -4337,8 +4340,8 @@ struct rtw_chip_info rtw8822c_hw_spec = {
.wowlan_stub = &rtw_wowlan_stub_8822c, .wowlan_stub = &rtw_wowlan_stub_8822c,
.max_sched_scan_ssids = 4, .max_sched_scan_ssids = 4,
#endif #endif
.coex_para_ver = 0x20070217, .coex_para_ver = 0x201029,
.bt_desired_ver = 0x17, .bt_desired_ver = 0x1c,
.scbd_support = true, .scbd_support = true,
.new_scbd10_def = true, .new_scbd10_def = true,
.pstdma_type = COEX_PSTDMA_FORCE_LPSOFF, .pstdma_type = COEX_PSTDMA_FORCE_LPSOFF,
......
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