]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: rtw89: refactor STA related func ahead for MLO
authorZong-Zhe Yang <kevin_yang@realtek.com>
Mon, 16 Sep 2024 05:31:57 +0000 (13:31 +0800)
committerPing-Ke Shih <pkshih@realtek.com>
Tue, 24 Sep 2024 01:18:59 +0000 (09:18 +0800)
Refactor STA related functions, e.g. add/assoc/disassoc/disconnect/remove
to separate most link stuffs into sub-functions for MLO reuse.

Signed-off-by: Zong-Zhe Yang <kevin_yang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20240916053158.47350-7-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/core.c
drivers/net/wireless/realtek/rtw89/core.h
drivers/net/wireless/realtek/rtw89/fw.c
drivers/net/wireless/realtek/rtw89/fw.h
drivers/net/wireless/realtek/rtw89/mac.c
drivers/net/wireless/realtek/rtw89/mac.h
drivers/net/wireless/realtek/rtw89/mac80211.c
drivers/net/wireless/realtek/rtw89/mac_be.c
drivers/net/wireless/realtek/rtw89/phy.c
drivers/net/wireless/realtek/rtw89/phy.h
drivers/net/wireless/realtek/rtw89/wow.c

index c6d3b8fd98b65178c64d1bb24d616b01e406c6a3..8d2cca0b0a18dd4096a95af5471b7447428a222d 100644 (file)
@@ -2746,8 +2746,8 @@ skip_ba_work:
        spin_unlock_bh(&rtwdev->ba_lock);
 }
 
-static void rtw89_core_free_sta_pending_ba(struct rtw89_dev *rtwdev,
-                                          struct ieee80211_sta *sta)
+void rtw89_core_free_sta_pending_ba(struct rtw89_dev *rtwdev,
+                                   struct ieee80211_sta *sta)
 {
        struct rtw89_txq *rtwtxq, *tmp;
 
@@ -2761,8 +2761,8 @@ static void rtw89_core_free_sta_pending_ba(struct rtw89_dev *rtwdev,
        spin_unlock_bh(&rtwdev->ba_lock);
 }
 
-static void rtw89_core_free_sta_pending_forbid_ba(struct rtw89_dev *rtwdev,
-                                                 struct ieee80211_sta *sta)
+void rtw89_core_free_sta_pending_forbid_ba(struct rtw89_dev *rtwdev,
+                                          struct ieee80211_sta *sta)
 {
        struct rtw89_txq *rtwtxq, *tmp;
 
@@ -2778,8 +2778,8 @@ static void rtw89_core_free_sta_pending_forbid_ba(struct rtw89_dev *rtwdev,
        spin_unlock_bh(&rtwdev->ba_lock);
 }
 
-static void rtw89_core_free_sta_pending_roc_tx(struct rtw89_dev *rtwdev,
-                                              struct ieee80211_sta *sta)
+void rtw89_core_free_sta_pending_roc_tx(struct rtw89_dev *rtwdev,
+                                       struct ieee80211_sta *sta)
 {
        struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
        struct sk_buff *skb, *tmp;
@@ -3525,26 +3525,19 @@ void rtw89_vif_type_mapping(struct rtw89_vif_link *rtwvif_link, bool assoc)
        }
 }
 
-int rtw89_core_sta_add(struct rtw89_dev *rtwdev,
-                      struct ieee80211_vif *vif,
-                      struct ieee80211_sta *sta)
+int rtw89_core_sta_link_add(struct rtw89_dev *rtwdev,
+                           struct rtw89_vif_link *rtwvif_link,
+                           struct rtw89_sta_link *rtwsta_link)
 {
-       struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
-       struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
+       struct ieee80211_vif *vif = rtwvif_to_vif(rtwvif_link);
+       struct ieee80211_sta *sta = rtwsta_to_sta(rtwsta_link);
        struct rtw89_hal *hal = &rtwdev->hal;
        u8 ant_num = hal->ant_diversity ? 2 : rtwdev->chip->rf_path_num;
        int i;
        int ret;
 
-       rtwsta_link->rtwdev = rtwdev;
-       rtwsta_link->rtwvif_link = rtwvif_link;
        rtwsta_link->prev_rssi = 0;
        INIT_LIST_HEAD(&rtwsta_link->ba_cam_list);
-       skb_queue_head_init(&rtwsta_link->roc_queue);
-
-       for (i = 0; i < ARRAY_SIZE(sta->txq); i++)
-               rtw89_core_txq_init(rtwdev, sta->txq[i]);
-
        ewma_rssi_init(&rtwsta_link->avg_rssi);
        ewma_snr_init(&rtwsta_link->avg_snr);
        ewma_evm_init(&rtwsta_link->evm_1ss);
@@ -3555,9 +3548,6 @@ int rtw89_core_sta_add(struct rtw89_dev *rtwdev,
        }
 
        if (vif->type == NL80211_IFTYPE_STATION && !sta->tdls) {
-               /* for station mode, assign the mac_id from itself */
-               rtwsta_link->mac_id = rtwvif_link->mac_id;
-
                /* must do rtw89_reg_6ghz_recalc() before rfk channel */
                ret = rtw89_reg_6ghz_recalc(rtwdev, rtwvif_link, true);
                if (ret)
@@ -3567,13 +3557,8 @@ int rtw89_core_sta_add(struct rtw89_dev *rtwdev,
                                         BTC_ROLE_MSTS_STA_CONN_START);
                rtw89_chip_rfk_channel(rtwdev, rtwvif_link);
        } else if (vif->type == NL80211_IFTYPE_AP || sta->tdls) {
-               rtwsta_link->mac_id = rtw89_acquire_mac_id(rtwdev);
-               if (rtwsta_link->mac_id == RTW89_MAX_MAC_ID_NUM)
-                       return -ENOSPC;
-
                ret = rtw89_mac_set_macid_pause(rtwdev, rtwsta_link->mac_id, false);
                if (ret) {
-                       rtw89_release_mac_id(rtwdev, rtwsta_link->mac_id);
                        rtw89_warn(rtwdev, "failed to send h2c macid pause\n");
                        return ret;
                }
@@ -3581,7 +3566,6 @@ int rtw89_core_sta_add(struct rtw89_dev *rtwdev,
                ret = rtw89_fw_h2c_role_maintain(rtwdev, rtwvif_link, rtwsta_link,
                                                 RTW89_ROLE_CREATE);
                if (ret) {
-                       rtw89_release_mac_id(rtwdev, rtwsta_link->mac_id);
                        rtw89_warn(rtwdev, "failed to send h2c role info\n");
                        return ret;
                }
@@ -3593,44 +3577,33 @@ int rtw89_core_sta_add(struct rtw89_dev *rtwdev,
                ret = rtw89_chip_h2c_default_dmac_tbl(rtwdev, rtwvif_link, rtwsta_link);
                if (ret)
                        return ret;
-
-               rtw89_queue_chanctx_change(rtwdev, RTW89_CHANCTX_REMOTE_STA_CHANGE);
        }
 
        return 0;
 }
 
-int rtw89_core_sta_disassoc(struct rtw89_dev *rtwdev,
-                           struct ieee80211_vif *vif,
-                           struct ieee80211_sta *sta)
+int rtw89_core_sta_link_disassoc(struct rtw89_dev *rtwdev,
+                                struct rtw89_vif_link *rtwvif_link,
+                                struct rtw89_sta_link *rtwsta_link)
 {
-       struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
-       struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
+       struct ieee80211_vif *vif = rtwvif_to_vif(rtwvif_link);
 
        if (vif->type == NL80211_IFTYPE_STATION)
-               rtw89_fw_h2c_set_bcn_fltr_cfg(rtwdev, vif, false);
-
-       rtwdev->total_sta_assoc--;
-       if (sta->tdls)
-               rtwvif_link->tdls_peer--;
-       rtwsta_link->disassoc = true;
+               rtw89_fw_h2c_set_bcn_fltr_cfg(rtwdev, rtwvif_link, false);
 
        return 0;
 }
 
-int rtw89_core_sta_disconnect(struct rtw89_dev *rtwdev,
-                             struct ieee80211_vif *vif,
-                             struct ieee80211_sta *sta)
+int rtw89_core_sta_link_disconnect(struct rtw89_dev *rtwdev,
+                                  struct rtw89_vif_link *rtwvif_link,
+                                  struct rtw89_sta_link *rtwsta_link)
 {
-       struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
-       struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
+       struct ieee80211_vif *vif = rtwvif_to_vif(rtwvif_link);
+       struct ieee80211_sta *sta = rtwsta_to_sta(rtwsta_link);
        int ret;
 
-       rtw89_mac_bf_monitor_calc(rtwdev, sta, true);
-       rtw89_mac_bf_disassoc(rtwdev, vif, sta);
-       rtw89_core_free_sta_pending_ba(rtwdev, sta);
-       rtw89_core_free_sta_pending_forbid_ba(rtwdev, sta);
-       rtw89_core_free_sta_pending_roc_tx(rtwdev, sta);
+       rtw89_mac_bf_monitor_calc(rtwdev, rtwsta_link, true);
+       rtw89_mac_bf_disassoc(rtwdev, rtwvif_link, rtwsta_link);
 
        if (vif->type == NL80211_IFTYPE_AP || sta->tdls)
                rtw89_cam_deinit_addr_cam(rtwdev, &rtwsta_link->addr_cam);
@@ -3642,7 +3615,7 @@ int rtw89_core_sta_disconnect(struct rtw89_dev *rtwdev,
                rtw89_fw_release_general_pkt_list_vif(rtwdev, rtwvif_link, true);
        }
 
-       ret = rtw89_chip_h2c_assoc_cmac_tbl(rtwdev, vif, sta);
+       ret = rtw89_chip_h2c_assoc_cmac_tbl(rtwdev, rtwvif_link, rtwsta_link);
        if (ret) {
                rtw89_warn(rtwdev, "failed to send h2c cmac table\n");
                return ret;
@@ -3664,12 +3637,12 @@ int rtw89_core_sta_disconnect(struct rtw89_dev *rtwdev,
        return ret;
 }
 
-int rtw89_core_sta_assoc(struct rtw89_dev *rtwdev,
-                        struct ieee80211_vif *vif,
-                        struct ieee80211_sta *sta)
+int rtw89_core_sta_link_assoc(struct rtw89_dev *rtwdev,
+                             struct rtw89_vif_link *rtwvif_link,
+                             struct rtw89_sta_link *rtwsta_link)
 {
-       struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
-       struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
+       struct ieee80211_vif *vif = rtwvif_to_vif(rtwvif_link);
+       struct ieee80211_sta *sta = rtwsta_to_sta(rtwsta_link);
        struct rtw89_bssid_cam_entry *bssid_cam = rtw89_get_bssid_cam_of(rtwvif_link,
                                                                         rtwsta_link);
        const struct rtw89_chan *chan = rtw89_chan_get(rtwdev,
@@ -3701,7 +3674,7 @@ int rtw89_core_sta_assoc(struct rtw89_dev *rtwdev,
                }
        }
 
-       ret = rtw89_chip_h2c_assoc_cmac_tbl(rtwdev, vif, sta);
+       ret = rtw89_chip_h2c_assoc_cmac_tbl(rtwdev, rtwvif_link, rtwsta_link);
        if (ret) {
                rtw89_warn(rtwdev, "failed to send h2c cmac table\n");
                return ret;
@@ -3720,12 +3693,9 @@ int rtw89_core_sta_assoc(struct rtw89_dev *rtwdev,
                return ret;
        }
 
-       rtwdev->total_sta_assoc++;
-       if (sta->tdls)
-               rtwvif_link->tdls_peer++;
-       rtw89_phy_ra_assoc(rtwdev, sta);
-       rtw89_mac_bf_assoc(rtwdev, vif, sta);
-       rtw89_mac_bf_monitor_calc(rtwdev, sta, false);
+       rtw89_phy_ra_assoc(rtwdev, rtwsta_link);
+       rtw89_mac_bf_assoc(rtwdev, rtwvif_link, rtwsta_link);
+       rtw89_mac_bf_monitor_calc(rtwdev, rtwsta_link, false);
 
        if (vif->type == NL80211_IFTYPE_STATION && !sta->tdls) {
                struct ieee80211_bss_conf *bss_conf;
@@ -3750,18 +3720,18 @@ int rtw89_core_sta_assoc(struct rtw89_dev *rtwdev,
                        return ret;
                }
 
-               rtw89_fw_h2c_set_bcn_fltr_cfg(rtwdev, vif, true);
+               rtw89_fw_h2c_set_bcn_fltr_cfg(rtwdev, rtwvif_link, true);
        }
 
        return ret;
 }
 
-int rtw89_core_sta_remove(struct rtw89_dev *rtwdev,
-                         struct ieee80211_vif *vif,
-                         struct ieee80211_sta *sta)
+int rtw89_core_sta_link_remove(struct rtw89_dev *rtwdev,
+                              struct rtw89_vif_link *rtwvif_link,
+                              struct rtw89_sta_link *rtwsta_link)
 {
-       struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
-       struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
+       struct ieee80211_vif *vif = rtwvif_to_vif(rtwvif_link);
+       struct ieee80211_sta *sta = rtwsta_to_sta(rtwsta_link);
        int ret;
 
        if (vif->type == NL80211_IFTYPE_STATION && !sta->tdls) {
@@ -3769,16 +3739,12 @@ int rtw89_core_sta_remove(struct rtw89_dev *rtwdev,
                rtw89_btc_ntfy_role_info(rtwdev, rtwvif_link, rtwsta_link,
                                         BTC_ROLE_MSTS_STA_DIS_CONN);
        } else if (vif->type == NL80211_IFTYPE_AP || sta->tdls) {
-               rtw89_release_mac_id(rtwdev, rtwsta_link->mac_id);
-
                ret = rtw89_fw_h2c_role_maintain(rtwdev, rtwvif_link, rtwsta_link,
                                                 RTW89_ROLE_REMOVE);
                if (ret) {
                        rtw89_warn(rtwdev, "failed to send h2c role info\n");
                        return ret;
                }
-
-               rtw89_queue_chanctx_change(rtwdev, RTW89_CHANCTX_REMOTE_STA_CHANGE);
        }
 
        return 0;
index 102fb6eba4275a0cdbbecfbe4b507adaf8f7c4d7..1d3b987d66ad0e8ec9a16bc65c20e07acbd67332 100644 (file)
@@ -3656,8 +3656,8 @@ struct rtw89_chip_ops {
                                    struct rtw89_vif_link *rtwvif_link,
                                    struct rtw89_sta_link *rtwsta_link);
        int (*h2c_assoc_cmac_tbl)(struct rtw89_dev *rtwdev,
-                                 struct ieee80211_vif *vif,
-                                 struct ieee80211_sta *sta);
+                                 struct rtw89_vif_link *rtwvif_link,
+                                 struct rtw89_sta_link *rtwsta_link);
        int (*h2c_ampdu_cmac_tbl)(struct rtw89_dev *rtwdev,
                                  struct ieee80211_vif *vif,
                                  struct ieee80211_sta *sta);
@@ -6657,21 +6657,21 @@ void rtw89_core_napi_start(struct rtw89_dev *rtwdev);
 void rtw89_core_napi_stop(struct rtw89_dev *rtwdev);
 int rtw89_core_napi_init(struct rtw89_dev *rtwdev);
 void rtw89_core_napi_deinit(struct rtw89_dev *rtwdev);
-int rtw89_core_sta_add(struct rtw89_dev *rtwdev,
-                      struct ieee80211_vif *vif,
-                      struct ieee80211_sta *sta);
-int rtw89_core_sta_assoc(struct rtw89_dev *rtwdev,
-                        struct ieee80211_vif *vif,
-                        struct ieee80211_sta *sta);
-int rtw89_core_sta_disassoc(struct rtw89_dev *rtwdev,
-                           struct ieee80211_vif *vif,
-                           struct ieee80211_sta *sta);
-int rtw89_core_sta_disconnect(struct rtw89_dev *rtwdev,
-                             struct ieee80211_vif *vif,
-                             struct ieee80211_sta *sta);
-int rtw89_core_sta_remove(struct rtw89_dev *rtwdev,
-                         struct ieee80211_vif *vif,
-                         struct ieee80211_sta *sta);
+int rtw89_core_sta_link_add(struct rtw89_dev *rtwdev,
+                           struct rtw89_vif_link *rtwvif_link,
+                           struct rtw89_sta_link *rtwsta_link);
+int rtw89_core_sta_link_assoc(struct rtw89_dev *rtwdev,
+                             struct rtw89_vif_link *rtwvif_link,
+                             struct rtw89_sta_link *rtwsta_link);
+int rtw89_core_sta_link_disassoc(struct rtw89_dev *rtwdev,
+                                struct rtw89_vif_link *rtwvif_link,
+                                struct rtw89_sta_link *rtwsta_link);
+int rtw89_core_sta_link_disconnect(struct rtw89_dev *rtwdev,
+                                  struct rtw89_vif_link *rtwvif_link,
+                                  struct rtw89_sta_link *rtwsta_link);
+int rtw89_core_sta_link_remove(struct rtw89_dev *rtwdev,
+                              struct rtw89_vif_link *rtwvif_link,
+                              struct rtw89_sta_link *rtwsta_link);
 void rtw89_core_set_tid_config(struct rtw89_dev *rtwdev,
                               struct ieee80211_sta *sta,
                               struct cfg80211_tid_config *tid_config);
@@ -6703,6 +6703,12 @@ int rtw89_core_acquire_sta_ba_entry(struct rtw89_dev *rtwdev,
 int rtw89_core_release_sta_ba_entry(struct rtw89_dev *rtwdev,
                                    struct rtw89_sta_link *rtwsta_link, u8 tid,
                                    u8 *cam_idx);
+void rtw89_core_free_sta_pending_ba(struct rtw89_dev *rtwdev,
+                                   struct ieee80211_sta *sta);
+void rtw89_core_free_sta_pending_forbid_ba(struct rtw89_dev *rtwdev,
+                                          struct ieee80211_sta *sta);
+void rtw89_core_free_sta_pending_roc_tx(struct rtw89_dev *rtwdev,
+                                       struct ieee80211_sta *sta);
 void rtw89_vif_type_mapping(struct rtw89_vif_link *rtwvif_link, bool assoc);
 int rtw89_chip_info_setup(struct rtw89_dev *rtwdev);
 void rtw89_chip_cfg_txpwr_ul_tb_offset(struct rtw89_dev *rtwdev,
index b1bf5f0e78f7c5b605703ac2f4f008168e6cd985..56f67f77b496a89e8594c7f64f128dbc5ace1195 100644 (file)
@@ -2832,12 +2832,11 @@ static void __get_sta_he_pkt_padding(struct rtw89_dev *rtwdev,
 }
 
 int rtw89_fw_h2c_assoc_cmac_tbl(struct rtw89_dev *rtwdev,
-                               struct ieee80211_vif *vif,
-                               struct ieee80211_sta *sta)
+                               struct rtw89_vif_link *rtwvif_link,
+                               struct rtw89_sta_link *rtwsta_link)
 {
+       struct ieee80211_vif *vif = rtwvif_to_vif(rtwvif_link);
        const struct rtw89_chip_info *chip = rtwdev->chip;
-       struct rtw89_sta_link *rtwsta_link = sta_to_rtwsta_safe(sta);
-       struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
        const struct rtw89_chan *chan = rtw89_chan_get(rtwdev,
                                                       rtwvif_link->chanctx_idx);
        struct ieee80211_link_sta *link_sta;
@@ -2980,11 +2979,10 @@ static void __get_sta_eht_pkt_padding(struct rtw89_dev *rtwdev,
 }
 
 int rtw89_fw_h2c_assoc_cmac_tbl_g7(struct rtw89_dev *rtwdev,
-                                  struct ieee80211_vif *vif,
-                                  struct ieee80211_sta *sta)
+                                  struct rtw89_vif_link *rtwvif_link,
+                                  struct rtw89_sta_link *rtwsta_link)
 {
-       struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
-       struct rtw89_sta_link *rtwsta_link = sta_to_rtwsta_safe(sta);
+       struct ieee80211_vif *vif = rtwvif_to_vif(rtwvif_link);
        const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, rtwvif_link->chanctx_idx);
        u8 mac_id = rtwsta_link ? rtwsta_link->mac_id : rtwvif_link->mac_id;
        struct rtw89_h2c_cctlinfo_ud_g7 *h2c;
@@ -3789,10 +3787,9 @@ fail:
 }
 
 int rtw89_fw_h2c_set_bcn_fltr_cfg(struct rtw89_dev *rtwdev,
-                                 struct ieee80211_vif *vif,
+                                 struct rtw89_vif_link *rtwvif_link,
                                  bool connect)
 {
-       struct rtw89_vif_link *rtwvif_link = vif_to_rtwvif_safe(vif);
        struct ieee80211_bss_conf *bss_conf;
        s32 thold = RTW89_DEFAULT_CQM_THOLD;
        u32 hyst = RTW89_DEFAULT_CQM_HYST;
index 896993d24c5b732eb64fe49d6b858134c1da36e4..c4239bb943e1493cd4e3e82e287f493ec5bbd3b5 100644 (file)
@@ -4468,11 +4468,11 @@ int rtw89_fw_h2c_default_dmac_tbl_v2(struct rtw89_dev *rtwdev,
                                     struct rtw89_vif_link *rtwvif_link,
                                     struct rtw89_sta_link *rtwsta_link);
 int rtw89_fw_h2c_assoc_cmac_tbl(struct rtw89_dev *rtwdev,
-                               struct ieee80211_vif *vif,
-                               struct ieee80211_sta *sta);
+                               struct rtw89_vif_link *rtwvif_link,
+                               struct rtw89_sta_link *rtwsta_link);
 int rtw89_fw_h2c_assoc_cmac_tbl_g7(struct rtw89_dev *rtwdev,
-                                  struct ieee80211_vif *vif,
-                                  struct ieee80211_sta *sta);
+                                  struct rtw89_vif_link *rtwvif_link,
+                                  struct rtw89_sta_link *rtwsta_link);
 int rtw89_fw_h2c_ampdu_cmac_tbl_g7(struct rtw89_dev *rtwdev,
                                   struct ieee80211_vif *vif,
                                   struct ieee80211_sta *sta);
@@ -4507,7 +4507,7 @@ int rtw89_fw_h2c_set_edca(struct rtw89_dev *rtwdev, struct rtw89_vif_link *rtwvi
                          u8 ac, u32 val);
 int rtw89_fw_h2c_set_ofld_cfg(struct rtw89_dev *rtwdev);
 int rtw89_fw_h2c_set_bcn_fltr_cfg(struct rtw89_dev *rtwdev,
-                                 struct ieee80211_vif *vif,
+                                 struct rtw89_vif_link *rtwvif_link,
                                  bool connect);
 int rtw89_fw_h2c_rssi_offload(struct rtw89_dev *rtwdev,
                              struct rtw89_rx_phy_ppdu *phy_ppdu);
@@ -4709,12 +4709,12 @@ static inline int rtw89_chip_h2c_update_beacon(struct rtw89_dev *rtwdev,
 }
 
 static inline int rtw89_chip_h2c_assoc_cmac_tbl(struct rtw89_dev *rtwdev,
-                                               struct ieee80211_vif *vif,
-                                               struct ieee80211_sta *sta)
+                                               struct rtw89_vif_link *rtwvif_link,
+                                               struct rtw89_sta_link *rtwsta_link)
 {
        const struct rtw89_chip_info *chip = rtwdev->chip;
 
-       return chip->ops->h2c_assoc_cmac_tbl(rtwdev, vif, sta);
+       return chip->ops->h2c_assoc_cmac_tbl(rtwdev, rtwvif_link, rtwsta_link);
 }
 
 static inline int rtw89_chip_h2c_ampdu_cmac_tbl(struct rtw89_dev *rtwdev,
index a7b89a25d7c46327f09eaa42ede6d0e2b43e1003..28cc4885105a55a93503a09d3eb49f0bf83ed338 100644 (file)
@@ -4877,7 +4877,7 @@ rtw89_mac_bcn_fltr_rpt(struct rtw89_dev *rtwdev, struct rtw89_vif_link *rtwvif_l
                if (!rtwdev->scanning && !rtwvif_link->offchan)
                        ieee80211_connection_loss(vif);
                else
-                       rtw89_fw_h2c_set_bcn_fltr_cfg(rtwdev, vif, true);
+                       rtw89_fw_h2c_set_bcn_fltr_cfg(rtwdev, rtwvif_link, true);
                return;
        case RTW89_BCN_FLTR_NOTIFY:
                nl_event = NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH;
@@ -5969,11 +5969,9 @@ static int rtw89_mac_init_bfee_ax(struct rtw89_dev *rtwdev, u8 mac_idx)
 }
 
 static int rtw89_mac_set_csi_para_reg_ax(struct rtw89_dev *rtwdev,
-                                        struct ieee80211_vif *vif,
-                                        struct ieee80211_sta *sta)
+                                        struct rtw89_vif_link *rtwvif_link,
+                                        struct rtw89_sta_link *rtwsta_link)
 {
-       struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
-       struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
        u8 nc = 1, nr = 3, ng = 0, cb = 1, cs = 1, ldpc_en = 1, stbc_en = 1;
        struct ieee80211_link_sta *link_sta;
        u8 mac_idx = rtwvif_link->mac_idx;
@@ -6036,11 +6034,9 @@ static int rtw89_mac_set_csi_para_reg_ax(struct rtw89_dev *rtwdev,
 }
 
 static int rtw89_mac_csi_rrsc_ax(struct rtw89_dev *rtwdev,
-                                struct ieee80211_vif *vif,
-                                struct ieee80211_sta *sta)
+                                struct rtw89_vif_link *rtwvif_link,
+                                struct rtw89_sta_link *rtwsta_link)
 {
-       struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
-       struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
        u32 rrsc = BIT(RTW89_MAC_BF_RRSC_6M) | BIT(RTW89_MAC_BF_RRSC_24M);
        struct ieee80211_link_sta *link_sta;
        u8 mac_idx = rtwvif_link->mac_idx;
@@ -6084,11 +6080,9 @@ static int rtw89_mac_csi_rrsc_ax(struct rtw89_dev *rtwdev,
 }
 
 static void rtw89_mac_bf_assoc_ax(struct rtw89_dev *rtwdev,
-                                 struct ieee80211_vif *vif,
-                                 struct ieee80211_sta *sta)
+                                 struct rtw89_vif_link *rtwvif_link,
+                                 struct rtw89_sta_link *rtwsta_link)
 {
-       struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
-       struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
        struct ieee80211_link_sta *link_sta;
        bool has_beamformer_cap;
 
@@ -6103,16 +6097,15 @@ static void rtw89_mac_bf_assoc_ax(struct rtw89_dev *rtwdev,
                rtw89_debug(rtwdev, RTW89_DBG_BF,
                            "initialize bfee for new association\n");
                rtw89_mac_init_bfee_ax(rtwdev, rtwvif_link->mac_idx);
-               rtw89_mac_set_csi_para_reg_ax(rtwdev, vif, sta);
-               rtw89_mac_csi_rrsc_ax(rtwdev, vif, sta);
+               rtw89_mac_set_csi_para_reg_ax(rtwdev, rtwvif_link, rtwsta_link);
+               rtw89_mac_csi_rrsc_ax(rtwdev, rtwvif_link, rtwsta_link);
        }
 }
 
-void rtw89_mac_bf_disassoc(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif,
-                          struct ieee80211_sta *sta)
+void rtw89_mac_bf_disassoc(struct rtw89_dev *rtwdev,
+                          struct rtw89_vif_link *rtwvif_link,
+                          struct rtw89_sta_link *rtwsta_link)
 {
-       struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
-
        rtw89_mac_bfee_ctrl(rtwdev, rtwvif_link->mac_idx, false);
 }
 
@@ -6146,7 +6139,7 @@ void rtw89_mac_bf_set_gid_table(struct rtw89_dev *rtwdev, struct ieee80211_vif *
 
 struct rtw89_mac_bf_monitor_iter_data {
        struct rtw89_dev *rtwdev;
-       struct ieee80211_sta *down_sta;
+       struct rtw89_sta_link *down_rtwsta_link;
        int count;
 };
 
@@ -6156,11 +6149,11 @@ void rtw89_mac_bf_monitor_calc_iter(void *data, struct ieee80211_sta *sta)
        struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
        struct rtw89_mac_bf_monitor_iter_data *iter_data =
                                (struct rtw89_mac_bf_monitor_iter_data *)data;
-       struct ieee80211_sta *down_sta = iter_data->down_sta;
+       struct rtw89_sta_link *down_rtwsta_link = iter_data->down_rtwsta_link;
        struct ieee80211_link_sta *link_sta;
        int *count = &iter_data->count;
 
-       if (down_sta == sta)
+       if (down_rtwsta_link == rtwsta_link)
                return;
 
        rcu_read_lock();
@@ -6173,12 +6166,13 @@ void rtw89_mac_bf_monitor_calc_iter(void *data, struct ieee80211_sta *sta)
 }
 
 void rtw89_mac_bf_monitor_calc(struct rtw89_dev *rtwdev,
-                              struct ieee80211_sta *sta, bool disconnect)
+                              struct rtw89_sta_link *rtwsta_link,
+                              bool disconnect)
 {
        struct rtw89_mac_bf_monitor_iter_data data;
 
        data.rtwdev = rtwdev;
-       data.down_sta = disconnect ? sta : NULL;
+       data.down_rtwsta_link = disconnect ? rtwsta_link : NULL;
        data.count = 0;
        ieee80211_iterate_stations_atomic(rtwdev->hw,
                                          rtw89_mac_bf_monitor_calc_iter,
index f2a31cba226e973b96fccff7faf9147c4bc1fc8a..b781b823496f6966e3155125de49c82b586b575c 100644 (file)
@@ -951,8 +951,9 @@ struct rtw89_mac_gen_def {
        void (*dmac_func_pre_en)(struct rtw89_dev *rtwdev);
        void (*dle_func_en)(struct rtw89_dev *rtwdev, bool enable);
        void (*dle_clk_en)(struct rtw89_dev *rtwdev, bool enable);
-       void (*bf_assoc)(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif,
-                        struct ieee80211_sta *sta);
+       void (*bf_assoc)(struct rtw89_dev *rtwdev,
+                        struct rtw89_vif_link *rtwvif_link,
+                        struct rtw89_sta_link *rtwsta_link);
 
        int (*typ_fltr_opt)(struct rtw89_dev *rtwdev,
                            enum rtw89_machdr_frame_type type,
@@ -1259,21 +1260,24 @@ void rtw89_mac_power_mode_change(struct rtw89_dev *rtwdev, bool enter);
 void rtw89_mac_notify_wake(struct rtw89_dev *rtwdev);
 
 static inline
-void rtw89_mac_bf_assoc(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif,
-                       struct ieee80211_sta *sta)
+void rtw89_mac_bf_assoc(struct rtw89_dev *rtwdev,
+                       struct rtw89_vif_link *rtwvif_link,
+                       struct rtw89_sta_link *rtwsta_link)
 {
        const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def;
 
        if (mac->bf_assoc)
-               mac->bf_assoc(rtwdev, vif, sta);
+               mac->bf_assoc(rtwdev, rtwvif_link, rtwsta_link);
 }
 
-void rtw89_mac_bf_disassoc(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif,
-                          struct ieee80211_sta *sta);
+void rtw89_mac_bf_disassoc(struct rtw89_dev *rtwdev,
+                          struct rtw89_vif_link *rtwvif_link,
+                          struct rtw89_sta_link *rtwsta_link);
 void rtw89_mac_bf_set_gid_table(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif,
                                struct ieee80211_bss_conf *conf);
 void rtw89_mac_bf_monitor_calc(struct rtw89_dev *rtwdev,
-                              struct ieee80211_sta *sta, bool disconnect);
+                              struct rtw89_sta_link *rtwsta_link,
+                              bool disconnect);
 void _rtw89_mac_bf_monitor_track(struct rtw89_dev *rtwdev);
 void rtw89_mac_bfee_ctrl(struct rtw89_dev *rtwdev, u8 mac_idx, bool en);
 int rtw89_mac_vif_init(struct rtw89_dev *rtwdev, struct rtw89_vif_link *rtwvif_link);
index d3fad66e56cd817be9575f26f38b8db94565e6c1..fc05ad1b799bf1a3b81be3190d5a3f469c914261 100644 (file)
@@ -456,10 +456,140 @@ static void rtw89_conf_tx(struct rtw89_dev *rtwdev,
                __rtw89_conf_tx(rtwdev, rtwvif_link, ac);
 }
 
+static int __rtw89_ops_sta_add(struct rtw89_dev *rtwdev,
+                              struct ieee80211_vif *vif,
+                              struct ieee80211_sta *sta)
+{
+       struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
+       struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
+       bool acquire_macid = false;
+       u8 macid;
+       int ret;
+       int i;
+
+       if (vif->type == NL80211_IFTYPE_STATION && !sta->tdls) {
+               /* for station mode, assign the mac_id from itself */
+               macid = rtwvif_link->mac_id;
+       } else {
+               macid = rtw89_acquire_mac_id(rtwdev);
+               if (macid == RTW89_MAX_MAC_ID_NUM)
+                       return -ENOSPC;
+
+               acquire_macid = true;
+       }
+
+       rtwsta_link->rtwdev = rtwdev;
+       rtwsta_link->rtwvif_link = rtwvif_link;
+       rtwsta_link->mac_id = macid;
+
+       for (i = 0; i < ARRAY_SIZE(sta->txq); i++)
+               rtw89_core_txq_init(rtwdev, sta->txq[i]);
+
+       skb_queue_head_init(&rtwsta_link->roc_queue);
+
+       ret = rtw89_core_sta_link_add(rtwdev, rtwvif_link, rtwsta_link);
+       if (ret)
+               goto err;
+
+       if (vif->type == NL80211_IFTYPE_AP || sta->tdls)
+               rtw89_queue_chanctx_change(rtwdev, RTW89_CHANCTX_REMOTE_STA_CHANGE);
+
+       return 0;
+
+err:
+       if (acquire_macid)
+               rtw89_release_mac_id(rtwdev, macid);
+
+       return ret;
+}
+
+static int __rtw89_ops_sta_assoc(struct rtw89_dev *rtwdev,
+                                struct ieee80211_vif *vif,
+                                struct ieee80211_sta *sta,
+                                bool station_mode)
+{
+       struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
+       struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
+       int ret;
+
+       if (station_mode)
+               rtw89_vif_type_mapping(rtwvif_link, true);
+
+       ret = rtw89_core_sta_link_assoc(rtwdev, rtwvif_link, rtwsta_link);
+       if (ret)
+               return ret;
+
+       rtwdev->total_sta_assoc++;
+       if (sta->tdls)
+               rtwvif_link->tdls_peer++;
+
+       return 0;
+}
+
+static int __rtw89_ops_sta_disassoc(struct rtw89_dev *rtwdev,
+                                   struct ieee80211_vif *vif,
+                                   struct ieee80211_sta *sta)
+{
+       struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
+       struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
+       int ret;
+
+       ret = rtw89_core_sta_link_disassoc(rtwdev, rtwvif_link, rtwsta_link);
+       if (ret)
+               return ret;
+
+       rtwsta_link->disassoc = true;
+
+       rtwdev->total_sta_assoc--;
+       if (sta->tdls)
+               rtwvif_link->tdls_peer--;
+
+       return 0;
+}
+
+static int __rtw89_ops_sta_disconnect(struct rtw89_dev *rtwdev,
+                                     struct ieee80211_vif *vif,
+                                     struct ieee80211_sta *sta)
+{
+       struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
+       struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
+       int ret;
+
+       rtw89_core_free_sta_pending_ba(rtwdev, sta);
+       rtw89_core_free_sta_pending_forbid_ba(rtwdev, sta);
+       rtw89_core_free_sta_pending_roc_tx(rtwdev, sta);
+
+       ret = rtw89_core_sta_link_disconnect(rtwdev, rtwvif_link, rtwsta_link);
+       if (ret)
+               return ret;
+
+       return 0;
+}
+
+static int __rtw89_ops_sta_remove(struct rtw89_dev *rtwdev,
+                                 struct ieee80211_vif *vif,
+                                 struct ieee80211_sta *sta)
+{
+       struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
+       struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
+       u8 macid = rtwsta_link->mac_id;
+       int ret;
+
+       ret = rtw89_core_sta_link_remove(rtwdev, rtwvif_link, rtwsta_link);
+       if (ret)
+               return ret;
+
+       if (vif->type == NL80211_IFTYPE_AP || sta->tdls) {
+               rtw89_release_mac_id(rtwdev, macid);
+               rtw89_queue_chanctx_change(rtwdev, RTW89_CHANCTX_REMOTE_STA_CHANGE);
+       }
+
+       return 0;
+}
+
 static void rtw89_station_mode_sta_assoc(struct rtw89_dev *rtwdev,
                                         struct ieee80211_vif *vif)
 {
-       struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
        struct ieee80211_sta *sta;
 
        if (vif->type != NL80211_IFTYPE_STATION)
@@ -471,9 +601,7 @@ static void rtw89_station_mode_sta_assoc(struct rtw89_dev *rtwdev,
                return;
        }
 
-       rtw89_vif_type_mapping(rtwvif_link, true);
-
-       rtw89_core_sta_assoc(rtwdev, vif, sta);
+       __rtw89_ops_sta_assoc(rtwdev, vif, sta, true);
 }
 
 static void __rtw89_ops_bss_link_assoc(struct rtw89_dev *rtwdev,
@@ -552,7 +680,7 @@ static void rtw89_ops_link_info_changed(struct ieee80211_hw *hw,
                rtw89_core_update_p2p_ps(rtwdev, rtwvif_link, conf);
 
        if (changed & BSS_CHANGED_CQM)
-               rtw89_fw_h2c_set_bcn_fltr_cfg(rtwdev, vif, true);
+               rtw89_fw_h2c_set_bcn_fltr_cfg(rtwdev, rtwvif_link, true);
 
        if (changed & BSS_CHANGED_TPE)
                rtw89_reg_6ghz_recalc(rtwdev, rtwvif_link, true);
@@ -582,7 +710,7 @@ static int rtw89_ops_start_ap(struct ieee80211_hw *hw,
        ether_addr_copy(rtwvif_link->bssid, link_conf->bssid);
        rtw89_cam_bssid_changed(rtwdev, rtwvif_link);
        rtw89_mac_port_update(rtwdev, rtwvif_link);
-       rtw89_chip_h2c_assoc_cmac_tbl(rtwdev, vif, NULL);
+       rtw89_chip_h2c_assoc_cmac_tbl(rtwdev, rtwvif_link, NULL);
        rtw89_fw_h2c_role_maintain(rtwdev, rtwvif_link, NULL, RTW89_ROLE_TYPE_CHANGE);
        rtw89_fw_h2c_join_info(rtwdev, rtwvif_link, NULL, true);
        rtw89_fw_h2c_cam(rtwdev, rtwvif_link, NULL, NULL);
@@ -603,7 +731,7 @@ void rtw89_ops_stop_ap(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 
        mutex_lock(&rtwdev->mutex);
        rtw89_mac_stop_ap(rtwdev, rtwvif_link);
-       rtw89_chip_h2c_assoc_cmac_tbl(rtwdev, vif, NULL);
+       rtw89_chip_h2c_assoc_cmac_tbl(rtwdev, rtwvif_link, NULL);
        rtw89_fw_h2c_join_info(rtwdev, rtwvif_link, NULL, true);
        mutex_unlock(&rtwdev->mutex);
 }
@@ -647,26 +775,26 @@ static int __rtw89_ops_sta_state(struct ieee80211_hw *hw,
 
        if (old_state == IEEE80211_STA_NOTEXIST &&
            new_state == IEEE80211_STA_NONE)
-               return rtw89_core_sta_add(rtwdev, vif, sta);
+               return __rtw89_ops_sta_add(rtwdev, vif, sta);
 
        if (old_state == IEEE80211_STA_AUTH &&
            new_state == IEEE80211_STA_ASSOC) {
                if (vif->type == NL80211_IFTYPE_STATION && !sta->tdls)
                        return 0; /* defer to bss_info_changed to have vif info */
-               return rtw89_core_sta_assoc(rtwdev, vif, sta);
+               return __rtw89_ops_sta_assoc(rtwdev, vif, sta, false);
        }
 
        if (old_state == IEEE80211_STA_ASSOC &&
            new_state == IEEE80211_STA_AUTH)
-               return rtw89_core_sta_disassoc(rtwdev, vif, sta);
+               return __rtw89_ops_sta_disassoc(rtwdev, vif, sta);
 
        if (old_state == IEEE80211_STA_AUTH &&
            new_state == IEEE80211_STA_NONE)
-               return rtw89_core_sta_disconnect(rtwdev, vif, sta);
+               return __rtw89_ops_sta_disconnect(rtwdev, vif, sta);
 
        if (old_state == IEEE80211_STA_NONE &&
            new_state == IEEE80211_STA_NOTEXIST)
-               return rtw89_core_sta_remove(rtwdev, vif, sta);
+               return __rtw89_ops_sta_remove(rtwdev, vif, sta);
 
        return 0;
 }
index 184a014a56bfee28301608347ac15ecc479e0178..f22eaa83297fb47359fed5340afda5049e2bfbd0 100644 (file)
@@ -2091,11 +2091,9 @@ static int rtw89_mac_init_bfee_be(struct rtw89_dev *rtwdev, u8 mac_idx)
 }
 
 static int rtw89_mac_set_csi_para_reg_be(struct rtw89_dev *rtwdev,
-                                        struct ieee80211_vif *vif,
-                                        struct ieee80211_sta *sta)
+                                        struct rtw89_vif_link *rtwvif_link,
+                                        struct rtw89_sta_link *rtwsta_link)
 {
-       struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
-       struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
        u8 nc = 1, nr = 3, ng = 0, cb = 1, cs = 1, ldpc_en = 1, stbc_en = 1;
        struct ieee80211_link_sta *link_sta;
        u8 mac_idx = rtwvif_link->mac_idx;
@@ -2162,11 +2160,9 @@ static int rtw89_mac_set_csi_para_reg_be(struct rtw89_dev *rtwdev,
 }
 
 static int rtw89_mac_csi_rrsc_be(struct rtw89_dev *rtwdev,
-                                struct ieee80211_vif *vif,
-                                struct ieee80211_sta *sta)
+                                struct rtw89_vif_link *rtwvif_link,
+                                struct rtw89_sta_link *rtwsta_link)
 {
-       struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
-       struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
        u32 rrsc = BIT(RTW89_MAC_BF_RRSC_6M) | BIT(RTW89_MAC_BF_RRSC_24M);
        struct ieee80211_link_sta *link_sta;
        u8 mac_idx = rtwvif_link->mac_idx;
@@ -2210,11 +2206,9 @@ static int rtw89_mac_csi_rrsc_be(struct rtw89_dev *rtwdev,
 }
 
 static void rtw89_mac_bf_assoc_be(struct rtw89_dev *rtwdev,
-                                 struct ieee80211_vif *vif,
-                                 struct ieee80211_sta *sta)
+                                 struct rtw89_vif_link *rtwvif_link,
+                                 struct rtw89_sta_link *rtwsta_link)
 {
-       struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
-       struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
        struct ieee80211_link_sta *link_sta;
        bool has_beamformer_cap;
 
@@ -2229,8 +2223,8 @@ static void rtw89_mac_bf_assoc_be(struct rtw89_dev *rtwdev,
                rtw89_debug(rtwdev, RTW89_DBG_BF,
                            "initialize bfee for new association\n");
                rtw89_mac_init_bfee_be(rtwdev, rtwvif_link->mac_idx);
-               rtw89_mac_set_csi_para_reg_be(rtwdev, vif, sta);
-               rtw89_mac_csi_rrsc_be(rtwdev, vif, sta);
+               rtw89_mac_set_csi_para_reg_be(rtwdev, rtwvif_link, rtwsta_link);
+               rtw89_mac_csi_rrsc_be(rtwdev, rtwvif_link, rtwsta_link);
        }
 }
 
index 3cc5e94058b4ec2038881b2a64cb89022782fce4..8f1f2c7f2c541219f2ace6d3631520e1011c7632 100644 (file)
@@ -637,9 +637,8 @@ void rtw89_phy_ra_update(struct rtw89_dev *rtwdev)
                                          rtwdev);
 }
 
-void rtw89_phy_ra_assoc(struct rtw89_dev *rtwdev, struct ieee80211_sta *sta)
+void rtw89_phy_ra_assoc(struct rtw89_dev *rtwdev, struct rtw89_sta_link *rtwsta_link)
 {
-       struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
        struct rtw89_vif_link *rtwvif_link = rtwsta_link->rtwvif_link;
        struct ieee80211_vif *vif = rtwvif_to_vif(rtwvif_link);
        struct rtw89_ra_info *ra = &rtwsta_link->ra;
index 310ef0570e7ad6991c504bff3357c694d7e04c20..727b69c45a52783e2e755d8a7f24410dc1650b19 100644 (file)
@@ -892,7 +892,7 @@ void rtw89_phy_set_txpwr_limit_ru(struct rtw89_dev *rtwdev,
        phy->set_txpwr_limit_ru(rtwdev, chan, phy_idx);
 }
 
-void rtw89_phy_ra_assoc(struct rtw89_dev *rtwdev, struct ieee80211_sta *sta);
+void rtw89_phy_ra_assoc(struct rtw89_dev *rtwdev, struct rtw89_sta_link *rtwsta_link);
 void rtw89_phy_ra_update(struct rtw89_dev *rtwdev);
 void rtw89_phy_ra_update_sta(struct rtw89_dev *rtwdev, struct ieee80211_sta *sta,
                             u32 changed);
index 20b776ae634eadbca2bd2005acab6dddeb7a8fcd..97b527d04ad716be9b15dd82aac8a035040c516c 100644 (file)
@@ -1240,7 +1240,7 @@ static int rtw89_wow_swap_fw(struct rtw89_dev *rtwdev, bool wow)
                return ret;
        }
 
-       ret = rtw89_chip_h2c_assoc_cmac_tbl(rtwdev, wow_vif, wow_sta);
+       ret = rtw89_chip_h2c_assoc_cmac_tbl(rtwdev, rtwvif_link, rtwsta_link);
        if (ret) {
                rtw89_warn(rtwdev, "failed to send h2c assoc cmac tbl\n");
                return ret;
@@ -1267,7 +1267,7 @@ static int rtw89_wow_swap_fw(struct rtw89_dev *rtwdev, bool wow)
                        rtw89_warn(rtwdev, "failed to send h2c general packet\n");
                        return ret;
                }
-               rtw89_phy_ra_assoc(rtwdev, wow_sta);
+               rtw89_phy_ra_assoc(rtwdev, rtwsta_link);
                rtw89_phy_set_bss_color(rtwdev, rtwvif_link);
                rtw89_chip_cfg_txpwr_ul_tb_offset(rtwdev, rtwvif_link);
        }
@@ -1374,13 +1374,14 @@ static int rtw89_wow_disable_trx_post(struct rtw89_dev *rtwdev)
 {
        struct rtw89_wow_param *rtw_wow = &rtwdev->wow;
        struct ieee80211_vif *vif = rtw_wow->wow_vif;
+       struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
        int ret;
 
        ret = rtw89_mac_cfg_ppdu_status(rtwdev, RTW89_MAC_0, true);
        if (ret)
                rtw89_err(rtwdev, "cfg ppdu status\n");
 
-       rtw89_fw_h2c_set_bcn_fltr_cfg(rtwdev, vif, true);
+       rtw89_fw_h2c_set_bcn_fltr_cfg(rtwdev, rtwvif_link, true);
 
        return ret;
 }