mt76: mt7615: fix sta ampdu factor for VHT
authorFelix Fietkau <nbd@nbd.name>
Mon, 20 Apr 2020 13:49:35 +0000 (15:49 +0200)
committerFelix Fietkau <nbd@nbd.name>
Tue, 12 May 2020 17:52:32 +0000 (19:52 +0200)
If VHT has a larger A-MPDU size limit, pass it to the MCU via the wtbl_ht
TLV element.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c

index e4baee37cac1d4b122bfc3505e263ca0ccbe56b9..1d1b2a7b43250af760d952d865775e6206a2d712 100644 (file)
@@ -924,11 +924,10 @@ mt7615_mcu_wtbl_ht_tlv(struct sk_buff *skb, struct ieee80211_sta *sta,
                       void *sta_wtbl, void *wtbl_tlv)
 {
        struct tlv *tlv;
+       struct wtbl_ht *ht = NULL;
        u32 flags = 0;
 
        if (sta->ht_cap.ht_supported) {
-               struct wtbl_ht *ht;
-
                tlv = mt7615_mcu_add_nested_tlv(skb, WTBL_HT, sizeof(*ht),
                                                wtbl_tlv, sta_wtbl);
                ht = (struct wtbl_ht *)tlv;
@@ -945,6 +944,7 @@ mt7615_mcu_wtbl_ht_tlv(struct sk_buff *skb, struct ieee80211_sta *sta,
 
        if (sta->vht_cap.vht_supported) {
                struct wtbl_vht *vht;
+               u8 af;
 
                tlv = mt7615_mcu_add_nested_tlv(skb, WTBL_VHT, sizeof(*vht),
                                                wtbl_tlv, sta_wtbl);
@@ -952,6 +952,13 @@ mt7615_mcu_wtbl_ht_tlv(struct sk_buff *skb, struct ieee80211_sta *sta,
                vht->ldpc = sta->vht_cap.cap & IEEE80211_VHT_CAP_RXLDPC,
                vht->vht = 1;
 
+               af = (sta->vht_cap.cap &
+                     IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK) >>
+                     IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_SHIFT;
+
+               if (ht)
+                   ht->af = max(ht->af, af);
+
                if (sta->vht_cap.cap & IEEE80211_VHT_CAP_SHORT_GI_80)
                        flags |= MT_WTBL_W5_SHORT_GI_80;
                if (sta->vht_cap.cap & IEEE80211_VHT_CAP_SHORT_GI_160)