]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: rtw89: mcc: update entire plan when courtesy config changes
authorZong-Zhe Yang <kevin_yang@realtek.com>
Tue, 22 Apr 2025 01:46:17 +0000 (09:46 +0800)
committerPing-Ke Shih <pkshih@realtek.com>
Mon, 28 Apr 2025 06:38:49 +0000 (14:38 +0800)
MCC has a courtesy mechanism which allows one role to use another's
duration in a given cycle. Courtesy mechanism will be enabled when
one role has a not perfect duration. Otherwise, not. When MCC updates,
duration of each role will be re-calculated. And then, the new courtesy
config might be different from the old one. However, to change courtesy
config, the entire MCC plan requires to be renewed when MCC updates.

Signed-off-by: Zong-Zhe Yang <kevin_yang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20250422014620.18421-10-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/chan.c

index 530f8c52efe8c45fe41b0a4a629140568da409f3..ac88f51c679b42dd778837d53882e782b5580ee0 100644 (file)
@@ -2142,6 +2142,7 @@ static int rtw89_mcc_update(struct rtw89_dev *rtwdev)
        struct rtw89_mcc_info *mcc = &rtwdev->mcc;
        struct rtw89_mcc_config *config = &mcc->config;
        struct rtw89_mcc_config old_cfg = *config;
+       bool courtesy_changed;
        bool sync_changed;
        int ret;
 
@@ -2154,8 +2155,15 @@ static int rtw89_mcc_update(struct rtw89_dev *rtwdev)
        if (ret)
                return ret;
 
+       if (memcmp(&old_cfg.pattern.courtesy, &config->pattern.courtesy,
+                  sizeof(old_cfg.pattern.courtesy)) == 0)
+               courtesy_changed = false;
+       else
+               courtesy_changed = true;
+
        if (old_cfg.pattern.plan != RTW89_MCC_PLAN_NO_BT ||
-           config->pattern.plan != RTW89_MCC_PLAN_NO_BT) {
+           config->pattern.plan != RTW89_MCC_PLAN_NO_BT ||
+           courtesy_changed) {
                if (rtw89_concurrent_via_mrc(rtwdev))
                        ret = __mrc_fw_start(rtwdev, true);
                else