wifi: rtw88: refine reserved page flow for AP mode
authorPo-Hao Huang <phhuang@realtek.com>
Fri, 14 Apr 2023 12:13:00 +0000 (20:13 +0800)
committerKalle Valo <kvalo@kernel.org>
Thu, 20 Apr 2023 12:33:47 +0000 (15:33 +0300)
Only gather reserved pages from AP interface after it has started. Or
else ieee80211_beacon_get_*() returns NULL and causes other VIFs'
reserved pages fail to download. Update location of current reserved page
after beacon renews so offsets changed by beacon can be recognized.

Signed-off-by: Po-Hao Huang <phhuang@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/20230414121300.17900-1-pkshih@realtek.com
drivers/net/wireless/realtek/rtw88/fw.c
drivers/net/wireless/realtek/rtw88/mac80211.c

index 82295ac..049473a 100644 (file)
@@ -1393,6 +1393,10 @@ static void rtw_build_rsvd_page_iter(void *data, u8 *mac,
        struct rtw_vif *rtwvif = (struct rtw_vif *)vif->drv_priv;
        struct rtw_rsvd_page *rsvd_pkt;
 
+       /* AP not yet started, don't gather its rsvd pages */
+       if (vif->type == NL80211_IFTYPE_AP && !rtwdev->ap_active)
+               return;
+
        list_for_each_entry(rsvd_pkt, &rtwvif->rsvd_page_list, vif_list) {
                if (rsvd_pkt->type == RSVD_BEACON)
                        list_add(&rsvd_pkt->build_list,
@@ -1614,6 +1618,7 @@ void rtw_fw_update_beacon_work(struct work_struct *work)
 
        mutex_lock(&rtwdev->mutex);
        rtw_fw_download_rsvd_page(rtwdev);
+       rtw_send_rsvd_page_h2c(rtwdev);
        mutex_unlock(&rtwdev->mutex);
 }
 
index 1ced57b..dbd40a2 100644 (file)
@@ -417,6 +417,7 @@ static void rtw_ops_bss_info_changed(struct ieee80211_hw *hw,
        if (changed & BSS_CHANGED_BEACON) {
                rtw_set_dtim_period(rtwdev, conf->dtim_period);
                rtw_fw_download_rsvd_page(rtwdev);
+               rtw_send_rsvd_page_h2c(rtwdev);
        }
 
        if (changed & BSS_CHANGED_BEACON_ENABLED) {