wifi: rtw89: mcc: deal with BT slot change
authorZong-Zhe Yang <kevin_yang@realtek.com>
Fri, 8 Sep 2023 03:11:44 +0000 (11:11 +0800)
committerKalle Valo <kvalo@kernel.org>
Mon, 18 Sep 2023 14:28:46 +0000 (17:28 +0300)
When receiving request of adjusting BT slot from coex. mechanism,
we need to fetch the new BT slot and use the new one to calculate
MCC (multi-channel concurrency) pattern. Then, we update the new
MCC pattern to FW.

Signed-off-by: Zong-Zhe Yang <kevin_yang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20230908031145.20931-8-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/chan.c
drivers/net/wireless/realtek/rtw89/core.c
drivers/net/wireless/realtek/rtw89/core.h

index 6f584a5..2bc9367 100644 (file)
@@ -1646,12 +1646,15 @@ void rtw89_chanctx_work(struct work_struct *work)
                break;
        case RTW89_ENTITY_MODE_MCC:
                if (changed & BIT(RTW89_CHANCTX_BCN_OFFSET_CHANGE) ||
-                   changed & BIT(RTW89_CHANCTX_P2P_PS_CHANGE))
+                   changed & BIT(RTW89_CHANCTX_P2P_PS_CHANGE) ||
+                   changed & BIT(RTW89_CHANCTX_BT_SLOT_CHANGE))
                        update_mcc_pattern = true;
                if (changed & BIT(RTW89_CHANCTX_REMOTE_STA_CHANGE))
                        rtw89_mcc_update_macid_bitmap(rtwdev);
                if (changed & BIT(RTW89_CHANCTX_P2P_PS_CHANGE))
                        rtw89_mcc_update_limit(rtwdev);
+               if (changed & BIT(RTW89_CHANCTX_BT_SLOT_CHANGE))
+                       rtw89_mcc_fill_bt_role(rtwdev);
                if (update_mcc_pattern) {
                        ret = rtw89_mcc_update(rtwdev);
                        if (ret)
index b852c98..42c351a 100644 (file)
@@ -3528,6 +3528,7 @@ void rtw89_core_ntfy_btc_event(struct rtw89_dev *rtwdev, enum rtw89_btc_hmsg eve
                bt_req_len = rtw89_coex_query_bt_req_len(rtwdev, RTW89_PHY_0);
                rtw89_debug(rtwdev, RTW89_DBG_BTC,
                            "coex updates BT req len to %d TU\n", bt_req_len);
+               rtw89_queue_chanctx_change(rtwdev, RTW89_CHANCTX_BT_SLOT_CHANGE);
                break;
        default:
                if (event < NUM_OF_RTW89_BTC_HMSG)
index 4cf11bb..78ba5fd 100644 (file)
@@ -3791,6 +3791,7 @@ enum rtw89_chanctx_changes {
        RTW89_CHANCTX_REMOTE_STA_CHANGE,
        RTW89_CHANCTX_BCN_OFFSET_CHANGE,
        RTW89_CHANCTX_P2P_PS_CHANGE,
+       RTW89_CHANCTX_BT_SLOT_CHANGE,
 
        NUM_OF_RTW89_CHANCTX_CHANGES,
        RTW89_CHANCTX_CHANGE_DFLT = NUM_OF_RTW89_CHANCTX_CHANGES,