]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: ath12k: use arsta instead of sta
authorSriram R <quic_srirrama@quicinc.com>
Thu, 21 Nov 2024 15:58:02 +0000 (17:58 +0200)
committerKalle Valo <quic_kvalo@quicinc.com>
Mon, 25 Nov 2024 17:02:55 +0000 (19:02 +0200)
Currently, struct ieee80211_sta (sta) is used for many WMI and mac80211 ops but
for multi link station, driver should use struct ath12k_link_sta (arsta)
instead of sta. Add changes to use arsta object for WMI commands and other
mac80211 ops.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1
Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3

Signed-off-by: Sriram R <quic_srirrama@quicinc.com>
Signed-off-by: Harshitha Prem <quic_hprem@quicinc.com>
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
Link: https://patch.msgid.link/20241121155806.1862733-5-kvalo@kernel.org
drivers/net/wireless/ath/ath12k/mac.c

index d92a5e0afe2e4fe39894269410cb7dab548520a9..01932aeab4f34e3f455ad9e8c9f48ff2dc39e047 100644 (file)
@@ -1771,7 +1771,7 @@ static void ath12k_peer_assoc_h_basic(struct ath12k *ar,
        else
                aid = sta->aid;
 
-       ether_addr_copy(arg->peer_mac, sta->addr);
+       ether_addr_copy(arg->peer_mac, arsta->addr);
        arg->vdev_id = arvif->vdev_id;
        arg->peer_associd = aid;
        arg->auth_flag = true;
@@ -2163,7 +2163,7 @@ static void ath12k_peer_assoc_h_vht(struct ath12k *ar,
        arg->tx_max_mcs_nss = 0xFF;
 
        ath12k_dbg(ar->ab, ATH12K_DBG_MAC, "mac vht peer %pM max_mpdu %d flags 0x%x\n",
-                  sta->addr, arg->peer_max_mpdu, arg->peer_flags);
+                  arsta->addr, arg->peer_max_mpdu, arg->peer_flags);
 
        /* TODO: rxnss_override */
 }
@@ -2459,7 +2459,7 @@ static void ath12k_peer_assoc_h_qos(struct ath12k *ar,
        }
 
        ath12k_dbg(ar->ab, ATH12K_DBG_MAC, "mac peer %pM qos %d\n",
-                  sta->addr, arg->qos_flag);
+                  arsta->addr, arg->qos_flag);
 }
 
 static int ath12k_peer_assoc_qos_ap(struct ath12k *ar,
@@ -2499,26 +2499,26 @@ static int ath12k_peer_assoc_qos_ap(struct ath12k *ar,
 
        arg.param = WMI_AP_PS_PEER_PARAM_UAPSD;
        arg.value = uapsd;
-       ret = ath12k_wmi_send_set_ap_ps_param_cmd(ar, sta->addr, &arg);
+       ret = ath12k_wmi_send_set_ap_ps_param_cmd(ar, arsta->addr, &arg);
        if (ret)
                goto err;
 
        arg.param = WMI_AP_PS_PEER_PARAM_MAX_SP;
        arg.value = max_sp;
-       ret = ath12k_wmi_send_set_ap_ps_param_cmd(ar, sta->addr, &arg);
+       ret = ath12k_wmi_send_set_ap_ps_param_cmd(ar, arsta->addr, &arg);
        if (ret)
                goto err;
 
        /* TODO: revisit during testing */
        arg.param = WMI_AP_PS_PEER_PARAM_SIFS_RESP_FRMTYPE;
        arg.value = DISABLE_SIFS_RESPONSE_TRIGGER;
-       ret = ath12k_wmi_send_set_ap_ps_param_cmd(ar, sta->addr, &arg);
+       ret = ath12k_wmi_send_set_ap_ps_param_cmd(ar, arsta->addr, &arg);
        if (ret)
                goto err;
 
        arg.param = WMI_AP_PS_PEER_PARAM_SIFS_RESP_UAPSD;
        arg.value = DISABLE_SIFS_RESPONSE_TRIGGER;
-       ret = ath12k_wmi_send_set_ap_ps_param_cmd(ar, sta->addr, &arg);
+       ret = ath12k_wmi_send_set_ap_ps_param_cmd(ar, arsta->addr, &arg);
        if (ret)
                goto err;
 
@@ -2705,7 +2705,7 @@ static void ath12k_peer_assoc_h_phymode(struct ath12k *ar,
        }
 
        ath12k_dbg(ar->ab, ATH12K_DBG_MAC, "mac peer %pM phymode %s\n",
-                  sta->addr, ath12k_mac_phymode_str(phymode));
+                  arsta->addr, ath12k_mac_phymode_str(phymode));
 
        arg->peer_phymode = phymode;
        WARN_ON(phymode == MODE_UNKNOWN);
@@ -4295,7 +4295,7 @@ static int ath12k_mac_set_key(struct ath12k *ar, enum set_key_cmd cmd,
                return 1;
 
        if (sta)
-               peer_addr = sta->addr;
+               peer_addr = arsta->addr;
        else if (ahvif->vdev_type == WMI_VDEV_TYPE_STA)
                peer_addr = vif->bss_conf.bssid;
        else
@@ -4526,7 +4526,6 @@ ath12k_mac_set_peer_vht_fixed_rate(struct ath12k_link_vif *arvif,
                                   const struct cfg80211_bitrate_mask *mask,
                                   enum nl80211_band band)
 {
-       struct ieee80211_sta *sta = ath12k_ahsta_to_sta(arsta->ahsta);
        struct ath12k *ar = arvif->ar;
        u8 vht_rate, nss;
        u32 rate_code;
@@ -4545,24 +4544,24 @@ ath12k_mac_set_peer_vht_fixed_rate(struct ath12k_link_vif *arvif,
 
        if (!nss) {
                ath12k_warn(ar->ab, "No single VHT Fixed rate found to set for %pM",
-                           sta->addr);
+                           arsta->addr);
                return -EINVAL;
        }
 
        ath12k_dbg(ar->ab, ATH12K_DBG_MAC,
                   "Setting Fixed VHT Rate for peer %pM. Device will not switch to any other selected rates",
-                  sta->addr);
+                  arsta->addr);
 
        rate_code = ATH12K_HW_RATE_CODE(vht_rate, nss - 1,
                                        WMI_RATE_PREAMBLE_VHT);
-       ret = ath12k_wmi_set_peer_param(ar, sta->addr,
+       ret = ath12k_wmi_set_peer_param(ar, arsta->addr,
                                        arvif->vdev_id,
                                        WMI_PEER_PARAM_FIXED_RATE,
                                        rate_code);
        if (ret)
                ath12k_warn(ar->ab,
                            "failed to update STA %pM Fixed Rate %d: %d\n",
-                            sta->addr, rate_code, ret);
+                            arsta->addr, rate_code, ret);
 
        return ret;
 }
@@ -4580,12 +4579,16 @@ static int ath12k_mac_station_assoc(struct ath12k *ar,
        enum nl80211_band band;
        struct cfg80211_bitrate_mask *mask;
        u8 num_vht_rates;
+       u8 link_id = arvif->link_id;
 
        lockdep_assert_wiphy(ath12k_ar_to_hw(ar)->wiphy);
 
        if (WARN_ON(ath12k_mac_vif_link_chan(vif, arvif->link_id, &def)))
                return -EPERM;
 
+       if (WARN_ON(!rcu_access_pointer(sta->link[link_id])))
+               return -EINVAL;
+
        band = def.chan->band;
        mask = &arvif->bitrate_mask;
 
@@ -4599,13 +4602,13 @@ static int ath12k_mac_station_assoc(struct ath12k *ar,
        ret = ath12k_wmi_send_peer_assoc_cmd(ar, &peer_arg);
        if (ret) {
                ath12k_warn(ar->ab, "failed to run peer assoc for STA %pM vdev %i: %d\n",
-                           sta->addr, arvif->vdev_id, ret);
+                           arsta->addr, arvif->vdev_id, ret);
                return ret;
        }
 
        if (!wait_for_completion_timeout(&ar->peer_assoc_done, 1 * HZ)) {
                ath12k_warn(ar->ab, "failed to get peer assoc conf event for %pM vdev %i\n",
-                           sta->addr, arvif->vdev_id);
+                           arsta->addr, arvif->vdev_id);
                return -ETIMEDOUT;
        }
 
@@ -4629,7 +4632,7 @@ static int ath12k_mac_station_assoc(struct ath12k *ar,
        if (reassoc)
                return 0;
 
-       ret = ath12k_setup_peer_smps(ar, arvif, sta->addr,
+       ret = ath12k_setup_peer_smps(ar, arvif, arsta->addr,
                                     &sta->deflink.ht_cap,
                                     &sta->deflink.he_6ghz_capa);
        if (ret) {
@@ -4649,7 +4652,7 @@ static int ath12k_mac_station_assoc(struct ath12k *ar,
                ret = ath12k_peer_assoc_qos_ap(ar, arvif, arsta);
                if (ret) {
                        ath12k_warn(ar->ab, "failed to set qos params for STA %pM for vdev %i: %d\n",
-                                   sta->addr, arvif->vdev_id, ret);
+                                   arsta->addr, arvif->vdev_id, ret);
                        return ret;
                }
        }
@@ -4732,65 +4735,65 @@ static void ath12k_sta_rc_update_wk(struct wiphy *wiphy, struct wiphy_work *wk)
                         * WMI_PEER_CHWIDTH
                         */
                        ath12k_dbg(ar->ab, ATH12K_DBG_MAC, "mac bandwidth upgrade for sta %pM new %d old %d\n",
-                                  sta->addr, bw, bw_prev);
-                       err = ath12k_wmi_set_peer_param(ar, sta->addr,
+                                  arsta->addr, bw, bw_prev);
+                       err = ath12k_wmi_set_peer_param(ar, arsta->addr,
                                                        arvif->vdev_id, WMI_PEER_PHYMODE,
                                                        peer_phymode);
                        if (err) {
                                ath12k_warn(ar->ab, "failed to update STA %pM to peer phymode %d: %d\n",
-                                           sta->addr, peer_phymode, err);
+                                           arsta->addr, peer_phymode, err);
                                return;
                        }
-                       err = ath12k_wmi_set_peer_param(ar, sta->addr,
+                       err = ath12k_wmi_set_peer_param(ar, arsta->addr,
                                                        arvif->vdev_id, WMI_PEER_CHWIDTH,
                                                        bw);
                        if (err)
                                ath12k_warn(ar->ab, "failed to update STA %pM to peer bandwidth %d: %d\n",
-                                           sta->addr, bw, err);
+                                           arsta->addr, bw, err);
                } else {
                        /* When we downgrade bandwidth this will conflict with phymode
                         * and cause to trigger firmware crash. In this case we send
                         * WMI_PEER_CHWIDTH followed by WMI_PEER_PHYMODE
                         */
                        ath12k_dbg(ar->ab, ATH12K_DBG_MAC, "mac bandwidth downgrade for sta %pM new %d old %d\n",
-                                  sta->addr, bw, bw_prev);
-                       err = ath12k_wmi_set_peer_param(ar, sta->addr,
+                                  arsta->addr, bw, bw_prev);
+                       err = ath12k_wmi_set_peer_param(ar, arsta->addr,
                                                        arvif->vdev_id, WMI_PEER_CHWIDTH,
                                                        bw);
                        if (err) {
                                ath12k_warn(ar->ab, "failed to update STA %pM peer to bandwidth %d: %d\n",
-                                           sta->addr, bw, err);
+                                           arsta->addr, bw, err);
                                return;
                        }
-                       err = ath12k_wmi_set_peer_param(ar, sta->addr,
+                       err = ath12k_wmi_set_peer_param(ar, arsta->addr,
                                                        arvif->vdev_id, WMI_PEER_PHYMODE,
                                                        peer_phymode);
                        if (err)
                                ath12k_warn(ar->ab, "failed to update STA %pM to peer phymode %d: %d\n",
-                                           sta->addr, peer_phymode, err);
+                                           arsta->addr, peer_phymode, err);
                }
        }
 
        if (changed & IEEE80211_RC_NSS_CHANGED) {
                ath12k_dbg(ar->ab, ATH12K_DBG_MAC, "mac update sta %pM nss %d\n",
-                          sta->addr, nss);
+                          arsta->addr, nss);
 
-               err = ath12k_wmi_set_peer_param(ar, sta->addr, arvif->vdev_id,
+               err = ath12k_wmi_set_peer_param(ar, arsta->addr, arvif->vdev_id,
                                                WMI_PEER_NSS, nss);
                if (err)
                        ath12k_warn(ar->ab, "failed to update STA %pM nss %d: %d\n",
-                                   sta->addr, nss, err);
+                                   arsta->addr, nss, err);
        }
 
        if (changed & IEEE80211_RC_SMPS_CHANGED) {
                ath12k_dbg(ar->ab, ATH12K_DBG_MAC, "mac update sta %pM smps %d\n",
-                          sta->addr, smps);
+                          arsta->addr, smps);
 
-               err = ath12k_wmi_set_peer_param(ar, sta->addr, arvif->vdev_id,
+               err = ath12k_wmi_set_peer_param(ar, arsta->addr, arvif->vdev_id,
                                                WMI_PEER_MIMO_PS_STATE, smps);
                if (err)
                        ath12k_warn(ar->ab, "failed to update STA %pM smps %d: %d\n",
-                                   sta->addr, smps, err);
+                                   arsta->addr, smps, err);
        }
 
        if (changed & IEEE80211_RC_SUPP_RATES_CHANGED) {
@@ -4823,11 +4826,11 @@ static void ath12k_sta_rc_update_wk(struct wiphy *wiphy, struct wiphy_work *wk)
                        err = ath12k_wmi_send_peer_assoc_cmd(ar, &peer_arg);
                        if (err)
                                ath12k_warn(ar->ab, "failed to run peer assoc for STA %pM vdev %i: %d\n",
-                                           sta->addr, arvif->vdev_id, err);
+                                           arsta->addr, arvif->vdev_id, err);
 
                        if (!wait_for_completion_timeout(&ar->peer_assoc_done, 1 * HZ))
                                ath12k_warn(ar->ab, "failed to get peer assoc conf event for %pM vdev %i\n",
-                                           sta->addr, arvif->vdev_id);
+                                           arsta->addr, arvif->vdev_id);
                }
        }
 }
@@ -4908,7 +4911,7 @@ static void ath12k_mac_station_post_remove(struct ath12k *ar,
 
        spin_lock_bh(&ar->ab->base_lock);
 
-       peer = ath12k_peer_find(ar->ab, arvif->vdev_id, sta->addr);
+       peer = ath12k_peer_find(ar->ab, arvif->vdev_id, arsta->addr);
        if (peer && peer->sta == sta) {
                ath12k_warn(ar->ab, "Found peer entry %pM n vdev %i after it was supposedly removed\n",
                            vif->addr, arvif->vdev_id);
@@ -4963,27 +4966,26 @@ static int ath12k_mac_station_authorize(struct ath12k *ar,
 {
        struct ath12k_peer *peer;
        struct ieee80211_vif *vif = ath12k_ahvif_to_vif(arvif->ahvif);
-       struct ieee80211_sta *sta = ath12k_ahsta_to_sta(arsta->ahsta);
        int ret;
 
        lockdep_assert_wiphy(ath12k_ar_to_hw(ar)->wiphy);
 
        spin_lock_bh(&ar->ab->base_lock);
 
-       peer = ath12k_peer_find(ar->ab, arvif->vdev_id, sta->addr);
+       peer = ath12k_peer_find(ar->ab, arvif->vdev_id, arsta->addr);
        if (peer)
                peer->is_authorized = true;
 
        spin_unlock_bh(&ar->ab->base_lock);
 
        if (vif->type == NL80211_IFTYPE_STATION && arvif->is_up) {
-               ret = ath12k_wmi_set_peer_param(ar, sta->addr,
+               ret = ath12k_wmi_set_peer_param(ar, arsta->addr,
                                                arvif->vdev_id,
                                                WMI_PEER_AUTHORIZE,
                                                1);
                if (ret) {
                        ath12k_warn(ar->ab, "Unable to authorize peer %pM vdev %d: %d\n",
-                                   sta->addr, arvif->vdev_id, ret);
+                                   arsta->addr, arvif->vdev_id, ret);
                        return ret;
                }
        }
@@ -5014,15 +5016,15 @@ static int ath12k_mac_station_remove(struct ath12k *ar,
        if (sta->mlo)
                return ret;
 
-       ath12k_dp_peer_cleanup(ar, arvif->vdev_id, sta->addr);
+       ath12k_dp_peer_cleanup(ar, arvif->vdev_id, arsta->addr);
 
-       ret = ath12k_peer_delete(ar, arvif->vdev_id, sta->addr);
+       ret = ath12k_peer_delete(ar, arvif->vdev_id, arsta->addr);
        if (ret)
                ath12k_warn(ar->ab, "Failed to delete peer: %pM for VDEV: %d\n",
-                           sta->addr, arvif->vdev_id);
+                           arsta->addr, arvif->vdev_id);
        else
                ath12k_dbg(ar->ab, ATH12K_DBG_MAC, "Removed peer: %pM for VDEV: %d\n",
-                          sta->addr, arvif->vdev_id);
+                          arsta->addr, arvif->vdev_id);
 
        ath12k_mac_station_post_remove(ar, arvif, arsta);
 
@@ -5040,7 +5042,7 @@ static int ath12k_mac_station_add(struct ath12k *ar,
        struct ath12k_base *ab = ar->ab;
        struct ieee80211_vif *vif = ath12k_ahvif_to_vif(arvif->ahvif);
        struct ieee80211_sta *sta = ath12k_ahsta_to_sta(arsta->ahsta);
-       struct ath12k_wmi_peer_create_arg peer_param;
+       struct ath12k_wmi_peer_create_arg peer_param = {0};
        int ret;
 
        lockdep_assert_wiphy(ath12k_ar_to_hw(ar)->wiphy);
@@ -5065,28 +5067,28 @@ static int ath12k_mac_station_add(struct ath12k *ar,
        ret = ath12k_peer_create(ar, arvif, sta, &peer_param);
        if (ret) {
                ath12k_warn(ab, "Failed to add peer: %pM for VDEV: %d\n",
-                           sta->addr, arvif->vdev_id);
+                           arsta->addr, arvif->vdev_id);
                goto free_peer;
        }
 
        ath12k_dbg(ab, ATH12K_DBG_MAC, "Added peer: %pM for VDEV: %d\n",
-                  sta->addr, arvif->vdev_id);
+                  arsta->addr, arvif->vdev_id);
 
        if (ieee80211_vif_is_mesh(vif)) {
-               ret = ath12k_wmi_set_peer_param(ar, sta->addr,
+               ret = ath12k_wmi_set_peer_param(ar, arsta->addr,
                                                arvif->vdev_id,
                                                WMI_PEER_USE_4ADDR, 1);
                if (ret) {
                        ath12k_warn(ab, "failed to STA %pM 4addr capability: %d\n",
-                                   sta->addr, ret);
+                                   arsta->addr, ret);
                        goto free_peer;
                }
        }
 
-       ret = ath12k_dp_peer_setup(ar, arvif->vdev_id, sta->addr);
+       ret = ath12k_dp_peer_setup(ar, arvif->vdev_id, arsta->addr);
        if (ret) {
                ath12k_warn(ab, "failed to setup dp for peer %pM on vdev %i (%d)\n",
-                           sta->addr, arvif->vdev_id, ret);
+                           arsta->addr, arvif->vdev_id, ret);
                goto free_peer;
        }
 
@@ -5103,7 +5105,7 @@ static int ath12k_mac_station_add(struct ath12k *ar,
        return 0;
 
 free_peer:
-       ath12k_peer_delete(ar, arvif->vdev_id, sta->addr);
+       ath12k_peer_delete(ar, arvif->vdev_id, arsta->addr);
 dec_num_station:
        ath12k_mac_dec_num_stations(arvif, arsta);
 exit:
@@ -5175,6 +5177,8 @@ static int ath12k_mac_assign_link_sta(struct ath12k_hw *ah,
        ahsta->links_map |= BIT(arsta->link_id);
        arsta->arvif = arvif;
        arsta->ahsta = ahsta;
+       ahsta->ahvif = ahvif;
+
        wiphy_work_init(&arsta->update_wk, ath12k_sta_rc_update_wk);
 
        rcu_assign_pointer(ahsta->link[link_id], arsta);
@@ -5250,7 +5254,7 @@ static int ath12k_mac_handle_link_sta_state(struct ieee80211_hw *hw,
                ret = ath12k_mac_station_add(ar, arvif, arsta);
                if (ret)
                        ath12k_warn(ar->ab, "Failed to add station: %pM for VDEV: %d\n",
-                                   sta->addr, arvif->vdev_id);
+                                   arsta->addr, arvif->vdev_id);
 
        /* IEEE80211_STA_AUTH -> IEEE80211_STA_ASSOC: Send station assoc command for
         * peer associated to AP/Mesh/ADHOC vif type.
@@ -5263,7 +5267,7 @@ static int ath12k_mac_handle_link_sta_state(struct ieee80211_hw *hw,
                ret = ath12k_mac_station_assoc(ar, arvif, arsta, false);
                if (ret)
                        ath12k_warn(ar->ab, "Failed to associate station: %pM\n",
-                                   sta->addr);
+                                   arsta->addr);
 
                spin_lock_bh(&ar->data_lock);
 
@@ -5280,7 +5284,7 @@ static int ath12k_mac_handle_link_sta_state(struct ieee80211_hw *hw,
                ret = ath12k_mac_station_authorize(ar, arvif, arsta);
                if (ret)
                        ath12k_warn(ar->ab, "Failed to authorize station: %pM\n",
-                                   sta->addr);
+                                   arsta->addr);
 
        /* IEEE80211_STA_AUTHORIZED -> IEEE80211_STA_ASSOC: station may be in removal,
         * deauthorize it.
@@ -5300,7 +5304,7 @@ static int ath12k_mac_handle_link_sta_state(struct ieee80211_hw *hw,
                ret = ath12k_mac_station_disassoc(ar, arvif, arsta);
                if (ret)
                        ath12k_warn(ar->ab, "Failed to disassociate station: %pM\n",
-                                   sta->addr);
+                                   arsta->addr);
        }
 
 exit:
@@ -5413,16 +5417,22 @@ static int ath12k_mac_op_sta_set_txpwr(struct ieee80211_hw *hw,
                                       struct ieee80211_vif *vif,
                                       struct ieee80211_sta *sta)
 {
-       struct ath12k_hw *ah = ath12k_hw_to_ah(hw);
+       struct ath12k_sta *ahsta = ath12k_sta_to_ahsta(sta);
        struct ath12k *ar;
        struct ath12k_vif *ahvif = ath12k_vif_to_ahvif(vif);
        struct ath12k_link_vif *arvif;
+       struct ath12k_link_sta *arsta;
+       u8 link_id;
        int ret;
        s16 txpwr;
 
        lockdep_assert_wiphy(hw->wiphy);
 
-       arvif = &ahvif->deflink;
+       /* TODO: use link id from mac80211 once that's implemented */
+       link_id = 0;
+
+       arvif = wiphy_dereference(hw->wiphy, ahvif->link[link_id]);
+       arsta = wiphy_dereference(hw->wiphy, ahsta->link[link_id]);
 
        if (sta->deflink.txpwr.type == NL80211_TX_POWER_AUTOMATIC) {
                txpwr = 0;
@@ -5439,9 +5449,9 @@ static int ath12k_mac_op_sta_set_txpwr(struct ieee80211_hw *hw,
                goto out;
        }
 
-       ar = ath12k_ah_to_ar(ah, 0);
+       ar = arvif->ar;
 
-       ret = ath12k_wmi_set_peer_param(ar, sta->addr, arvif->vdev_id,
+       ret = ath12k_wmi_set_peer_param(ar, arsta->addr, arvif->vdev_id,
                                        WMI_PEER_USE_FIXED_PWR, txpwr);
        if (ret) {
                ath12k_warn(ar->ab, "failed to set tx power for station ret: %d\n",
@@ -5494,12 +5504,12 @@ static void ath12k_mac_op_sta_rc_update(struct ieee80211_hw *hw,
        }
        spin_lock_bh(&ar->ab->base_lock);
 
-       peer = ath12k_peer_find(ar->ab, arvif->vdev_id, sta->addr);
+       peer = ath12k_peer_find(ar->ab, arvif->vdev_id, arsta->addr);
        if (!peer) {
                spin_unlock_bh(&ar->ab->base_lock);
                rcu_read_unlock();
                ath12k_warn(ar->ab, "mac sta rc update failed to find peer %pM on vdev %i\n",
-                           sta->addr, arvif->vdev_id);
+                           arsta->addr, arvif->vdev_id);
                return;
        }
 
@@ -5507,7 +5517,7 @@ static void ath12k_mac_op_sta_rc_update(struct ieee80211_hw *hw,
 
        ath12k_dbg(ar->ab, ATH12K_DBG_MAC,
                   "mac sta rc update for %pM changed %08x bw %d nss %d smps %d\n",
-                  sta->addr, changed, sta->deflink.bandwidth, sta->deflink.rx_nss,
+                  arsta->addr, changed, sta->deflink.bandwidth, sta->deflink.rx_nss,
                   sta->deflink.smps_mode);
 
        spin_lock_bh(&ar->data_lock);
@@ -5537,7 +5547,7 @@ static void ath12k_mac_op_sta_rc_update(struct ieee80211_hw *hw,
                        break;
                default:
                        ath12k_warn(ar->ab, "Invalid smps %d in sta rc update for %pM\n",
-                                   sta->deflink.smps_mode, sta->addr);
+                                   sta->deflink.smps_mode, arsta->addr);
                        smps = WMI_PEER_SMPS_PS_NONE;
                        break;
                }
@@ -9121,14 +9131,14 @@ static void ath12k_mac_disable_peer_fixed_rate(void *data,
        if (arsta->arvif != arvif)
                return;
 
-       ret = ath12k_wmi_set_peer_param(ar, sta->addr,
+       ret = ath12k_wmi_set_peer_param(ar, arsta->addr,
                                        arvif->vdev_id,
                                        WMI_PEER_PARAM_FIXED_RATE,
                                        WMI_FIXED_RATE_NONE);
        if (ret)
                ath12k_warn(ar->ab,
                            "failed to disable peer fixed rate for STA %pM ret %d\n",
-                           sta->addr, ret);
+                           arsta->addr, ret);
 }
 
 static int