wifi: rtw89: set the correct mac_id for management frames
authorKuan-Chung Chen <damon.chen@realtek.com>
Fri, 6 Jan 2023 12:15:17 +0000 (20:15 +0800)
committerKalle Valo <kvalo@kernel.org>
Mon, 16 Jan 2023 13:37:42 +0000 (15:37 +0200)
The mac_id of management frames should follow rtwvif->mac_id or
rtwsta->mac_id. Add this patch to set the correct mac_id and
prevent unexpected behavior.

Signed-off-by: Kuan-Chung Chen <damon.chen@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/20230106121517.19841-2-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/core.c

index 27f7a1860c9d088142784a94aa387ac7212b2c9c..4cf4a81ed4f797a83078f8fb4a8bd24acb9af2fb 100644 (file)
@@ -512,6 +512,21 @@ static u16 rtw89_core_get_mgmt_rate(struct rtw89_dev *rtwdev,
        return __ffs(vif->bss_conf.basic_rates) + lowest_rate;
 }
 
+static u8 rtw89_core_tx_get_mac_id(struct rtw89_dev *rtwdev,
+                                  struct rtw89_core_tx_request *tx_req)
+{
+       struct ieee80211_vif *vif = tx_req->vif;
+       struct rtw89_vif *rtwvif = (struct rtw89_vif *)vif->drv_priv;
+       struct ieee80211_sta *sta = tx_req->sta;
+       struct rtw89_sta *rtwsta;
+
+       if (!sta)
+               return rtwvif->mac_id;
+
+       rtwsta = (struct rtw89_sta *)sta->drv_priv;
+       return rtwsta->mac_id;
+}
+
 static void
 rtw89_core_tx_update_mgmt_info(struct rtw89_dev *rtwdev,
                               struct rtw89_core_tx_request *tx_req)
@@ -528,6 +543,7 @@ rtw89_core_tx_update_mgmt_info(struct rtw89_dev *rtwdev,
        desc_info->qsel = qsel;
        desc_info->ch_dma = ch_dma;
        desc_info->port = desc_info->hiq ? rtwvif->port : 0;
+       desc_info->mac_id = rtw89_core_tx_get_mac_id(rtwdev, tx_req);
        desc_info->hw_ssn_sel = RTW89_MGMT_HW_SSN_SEL;
        desc_info->hw_seq_mode = RTW89_MGMT_HW_SEQ_MODE;
 
@@ -670,21 +686,6 @@ desc_bk:
        desc_info->bk = true;
 }
 
-static u8 rtw89_core_tx_get_mac_id(struct rtw89_dev *rtwdev,
-                                  struct rtw89_core_tx_request *tx_req)
-{
-       struct ieee80211_vif *vif = tx_req->vif;
-       struct rtw89_vif *rtwvif = (struct rtw89_vif *)vif->drv_priv;
-       struct ieee80211_sta *sta = tx_req->sta;
-       struct rtw89_sta *rtwsta;
-
-       if (!sta)
-               return rtwvif->mac_id;
-
-       rtwsta = (struct rtw89_sta *)sta->drv_priv;
-       return rtwsta->mac_id;
-}
-
 static void
 rtw89_core_tx_update_data_info(struct rtw89_dev *rtwdev,
                               struct rtw89_core_tx_request *tx_req)