diff options
author | Ching-Te Ku <ku920601@realtek.com> | 2020-10-30 13:55:06 +0800 |
---|---|---|
committer | Kalle Valo <kvalo@codeaurora.org> | 2020-11-07 17:50:23 +0200 |
commit | 842280da81a95b7bd2804eb77fa8750e189c93e0 (patch) | |
tree | b13414f17a48b56a8cb4fb96e2faf44ca0fc3180 /drivers/net/wireless/realtek/rtw88/coex.c | |
parent | rtlwifi: Fix non-canonical address access issues (diff) | |
download | linux-dev-842280da81a95b7bd2804eb77fa8750e189c93e0.tar.xz linux-dev-842280da81a95b7bd2804eb77fa8750e189c93e0.zip |
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: Ching-Te Ku <ku920601@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20201030055506.6560-1-pkshih@realtek.com
Diffstat (limited to 'drivers/net/wireless/realtek/rtw88/coex.c')
-rw-r--r-- | drivers/net/wireless/realtek/rtw88/coex.c | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/drivers/net/wireless/realtek/rtw88/coex.c b/drivers/net/wireless/realtek/rtw88/coex.c index aa08fd7d9fcd..51eef8d0a8e5 100644 --- a/drivers/net/wireless/realtek/rtw88/coex.c +++ b/drivers/net/wireless/realtek/rtw88/coex.c @@ -1470,11 +1470,17 @@ static void rtw_coex_action_bt_hid(struct rtw_dev *rtwdev) } else { /* for 4/18 HID */ if (coex_stat->bt_418_hid_exist && - coex_stat->wl_gl_busy) + coex_stat->wl_gl_busy) { 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; - tdma_case = 4; + tdma_case = 4; + } } } } else { @@ -2388,6 +2394,23 @@ void rtw_coex_bt_info_notify(struct rtw_dev *rtwdev, u8 *buf, u8 length) 4 * HZ); } 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; if (coex_stat->cnt_bt[COEX_CNT_BT_RETRY] >= 1) 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) 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)) 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) coex_stat->bt_hid_exist ? (coex_stat->bt_ble_exist ? "HID(RCU)," : coex_stat->bt_hid_slot >= 2 ? "HID(4/18)" : + coex_stat->bt_ble_hid_exist ? "HID(BLE)" : "HID(2/18),") : "", coex_stat->bt_pan_exist ? coex_stat->bt_opp_exist ? "OPP," : "PAN," : "", |