mt76: mt7915: update max_mpdu_size in mt7915_mcu_sta_amsdu_tlv()
authorPeter Chiu <chui-hao.chiu@mediatek.com>
Wed, 26 Jan 2022 04:50:34 +0000 (12:50 +0800)
committerFelix Fietkau <nbd@nbd.name>
Thu, 3 Feb 2022 12:58:00 +0000 (13:58 +0100)
The maximum max_mpdu_size of mt7915 is 7991, whereas mt7916 can
support 11454.

Reviewed-by: Ryder Lee <ryder.lee@mediatek.com>
Signed-off-by: Peter Chiu <chui-hao.chiu@mediatek.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7915/mcu.c

index 887469e1dea1d73a62383ceac834da250d35eaf7..e31eed6591f1c393128e44b2b561ab7feccfb277 100644 (file)
@@ -978,8 +978,8 @@ mt7915_mcu_sta_vht_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)
 }
 
 static void
-mt7915_mcu_sta_amsdu_tlv(struct sk_buff *skb, struct ieee80211_vif *vif,
-                        struct ieee80211_sta *sta)
+mt7915_mcu_sta_amsdu_tlv(struct mt7915_dev *dev, struct sk_buff *skb,
+                        struct ieee80211_vif *vif, struct ieee80211_sta *sta)
 {
        struct mt7915_sta *msta = (struct mt7915_sta *)sta->drv_priv;
        struct sta_rec_amsdu *amsdu;
@@ -996,9 +996,24 @@ mt7915_mcu_sta_amsdu_tlv(struct sk_buff *skb, struct ieee80211_vif *vif,
        amsdu = (struct sta_rec_amsdu *)tlv;
        amsdu->max_amsdu_num = 8;
        amsdu->amsdu_en = true;
-       amsdu->max_mpdu_size = sta->max_amsdu_len >=
-                              IEEE80211_MAX_MPDU_LEN_VHT_7991;
        msta->wcid.amsdu = true;
+
+       switch (sta->max_amsdu_len) {
+       case IEEE80211_MAX_MPDU_LEN_VHT_11454:
+               if (!is_mt7915(&dev->mt76)) {
+                       amsdu->max_mpdu_size =
+                               IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_11454;
+                       return;
+               }
+               fallthrough;
+       case IEEE80211_MAX_MPDU_LEN_HT_7935:
+       case IEEE80211_MAX_MPDU_LEN_VHT_7991:
+               amsdu->max_mpdu_size = IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_7991;
+               return;
+       default:
+               amsdu->max_mpdu_size = IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_3895;
+               return;
+       }
 }
 
 static int
@@ -1680,7 +1695,7 @@ int mt7915_mcu_add_sta(struct mt7915_dev *dev, struct ieee80211_vif *vif,
 
        if (sta && sta->ht_cap.ht_supported) {
                /* starec amsdu */
-               mt7915_mcu_sta_amsdu_tlv(skb, vif, sta);
+               mt7915_mcu_sta_amsdu_tlv(dev, skb, vif, sta);
                /* starec he */
                mt7915_mcu_sta_he_tlv(skb, sta, vif);
                /* starec muru */