]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: mt76: mt7996: Fix mt7996_mcu_sta_ba wcid configuration
authorLorenzo Bianconi <lorenzo@kernel.org>
Tue, 8 Jul 2025 07:12:05 +0000 (09:12 +0200)
committerFelix Fietkau <nbd@nbd.name>
Mon, 15 Sep 2025 07:47:38 +0000 (09:47 +0200)
Fix the wcid pointer used in mt7996_mcu_sta_ba routine to properly
support MLO scenario.

Fixes: 98686cd21624c ("wifi: mt76: mt7996: add driver for MediaTek Wi-Fi 7 (802.11be) devices")
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Link: https://patch.msgid.link/20250708-mt7996-mlo-fixes-v2-v1-2-f2682818a8a3@kernel.org
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7996/main.c
drivers/net/wireless/mediatek/mt76/mt7996/mcu.c
drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h

index 35fdd3104f216ce345c76af8ca7ebbc6b0a0715f..e4a1b05ddfee83d8ce3465af0eabb81ec18c9a43 100644 (file)
@@ -1335,11 +1335,13 @@ mt7996_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
                case IEEE80211_AMPDU_RX_START:
                        mt76_rx_aggr_start(&dev->mt76, &msta_link->wcid, tid,
                                           ssn, params->buf_size);
-                       ret = mt7996_mcu_add_rx_ba(dev, params, link, true);
+                       ret = mt7996_mcu_add_rx_ba(dev, params, link,
+                                                  msta_link, true);
                        break;
                case IEEE80211_AMPDU_RX_STOP:
                        mt76_rx_aggr_stop(&dev->mt76, &msta_link->wcid, tid);
-                       ret = mt7996_mcu_add_rx_ba(dev, params, link, false);
+                       ret = mt7996_mcu_add_rx_ba(dev, params, link,
+                                                  msta_link, false);
                        break;
                case IEEE80211_AMPDU_TX_OPERATIONAL:
                        mtxq->aggr = true;
index 0be03eb3cf46135b661acf03aa11b682c815657b..e6db3e0b2ffdaf1633da1bafc77e27d923661e0b 100644 (file)
@@ -1149,9 +1149,8 @@ int mt7996_mcu_set_timing(struct mt7996_phy *phy, struct ieee80211_vif *vif,
 static int
 mt7996_mcu_sta_ba(struct mt7996_dev *dev, struct mt76_vif_link *mvif,
                  struct ieee80211_ampdu_params *params,
-                 bool enable, bool tx)
+                 struct mt76_wcid *wcid, bool enable, bool tx)
 {
-       struct mt76_wcid *wcid = (struct mt76_wcid *)params->sta->drv_priv;
        struct sta_rec_ba_uni *ba;
        struct sk_buff *skb;
        struct tlv *tlv;
@@ -1185,14 +1184,17 @@ int mt7996_mcu_add_tx_ba(struct mt7996_dev *dev,
        if (enable && !params->amsdu)
                msta_link->wcid.amsdu = false;
 
-       return mt7996_mcu_sta_ba(dev, &link->mt76, params, enable, true);
+       return mt7996_mcu_sta_ba(dev, &link->mt76, params, &msta_link->wcid,
+                                enable, true);
 }
 
 int mt7996_mcu_add_rx_ba(struct mt7996_dev *dev,
                         struct ieee80211_ampdu_params *params,
-                        struct mt7996_vif_link *link, bool enable)
+                        struct mt7996_vif_link *link,
+                        struct mt7996_sta_link *msta_link, bool enable)
 {
-       return mt7996_mcu_sta_ba(dev, &link->mt76, params, enable, false);
+       return mt7996_mcu_sta_ba(dev, &link->mt76, params, &msta_link->wcid,
+                                enable, false);
 }
 
 static void
index 8509d508e1e19c077d05e03d813b496c668d0682..bbd4679edc9d315de99e8a747f31b843b795b64a 100644 (file)
@@ -608,7 +608,8 @@ int mt7996_mcu_add_tx_ba(struct mt7996_dev *dev,
                         struct mt7996_sta_link *msta_link, bool enable);
 int mt7996_mcu_add_rx_ba(struct mt7996_dev *dev,
                         struct ieee80211_ampdu_params *params,
-                        struct mt7996_vif_link *link, bool enable);
+                        struct mt7996_vif_link *link,
+                        struct mt7996_sta_link *msta_link, bool enable);
 int mt7996_mcu_update_bss_color(struct mt7996_dev *dev,
                                struct mt76_vif_link *mlink,
                                struct cfg80211_he_bss_color *he_bss_color);