diff options
author | Zong-Zhe Yang <kevin_yang@realtek.com> | 2020-07-15 10:33:24 +0800 |
---|---|---|
committer | Kalle Valo <kvalo@codeaurora.org> | 2020-07-15 12:14:01 +0300 |
commit | 001a3c902f6f79d23495f70db856465728edbb5b (patch) | |
tree | 3c236d436bb095358b59a1a4eb34ac4f2f70d987 /drivers/net/wireless/realtek/rtw88/coex.h | |
parent | e18696786548244914f36ec3c46ac99c53df99c3 (diff) | |
download | linux-001a3c902f6f79d23495f70db856465728edbb5b.tar.gz |
rtw88: coex: Fix ACL Tx pause during BT inquiry/page.
Add a set of logic with corresponding coexistence parameters to
handle the situation under BT inquiry/page.
We will set PSTDMA while WL-Busy + BT inquiry/page to separate
WL/BT slots. PSTDMA can protect WL data rate and BT performance.
If WL-Busy + BT inquiry/page and there was BT device paired,
We will set the mechanism to 4Slot PSTDMA.
In 4Slot PSTDMA, the paired devices can perform more smoothly
and prevent some issues trigger from insufficient data.
And to avoid A2DP glitch or disconnection, we will adjust ACL
data priority higher than inquiry/page.
In addition, we found sometimes BT inquiry/page still working
last for seconds after BT had notified inquiry/page finished.
It will lead to A2DP glitch cause of ACL data, inquiry/page
priority toggled. To fix the corner, we add a timer to remain
the inquiry/page status.
And we found WL busy/idle threshold is too sensitive,
it will keep switching in some weak network environment and
coexistence mechanism will switch between TDMA and PSTDMA.
The very frequently switching may destroyed not only the
handshake with AP, but BT performance. And it will trigger
some unexpected error.
To prevent the frequently switching, we add a timer to delay
the status change while WL busy switch to idle.
Signed-off-by: Zong-Zhe Yang <kevin_yang@realtek.com>
Signed-off-by: Yan-Hsuan Chuang <yhchuang@realtek.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20200715023324.8600-1-yhchuang@realtek.com
Diffstat (limited to 'drivers/net/wireless/realtek/rtw88/coex.h')
-rw-r--r-- | drivers/net/wireless/realtek/rtw88/coex.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/net/wireless/realtek/rtw88/coex.h b/drivers/net/wireless/realtek/rtw88/coex.h index 4c3a01968f5e..44720fdfc053 100644 --- a/drivers/net/wireless/realtek/rtw88/coex.h +++ b/drivers/net/wireless/realtek/rtw88/coex.h @@ -95,6 +95,7 @@ enum coex_runreason { COEX_RSN_BTINFO = 12, COEX_RSN_LPS = 13, COEX_RSN_WLSTATUS = 14, + COEX_RSN_BTSTATUS = 15, COEX_RSN_MAX }; @@ -362,6 +363,8 @@ void rtw_coex_write_scbd(struct rtw_dev *rtwdev, u16 bitpos, bool set); void rtw_coex_bt_relink_work(struct work_struct *work); void rtw_coex_bt_reenable_work(struct work_struct *work); void rtw_coex_defreeze_work(struct work_struct *work); +void rtw_coex_wl_remain_work(struct work_struct *work); +void rtw_coex_bt_remain_work(struct work_struct *work); void rtw_coex_power_on_setting(struct rtw_dev *rtwdev); void rtw_coex_init_hw_config(struct rtw_dev *rtwdev, bool wifi_only); |