mt76: mt7915: rely on mt76_connac_mcu_wtbl_ht_tlv
authorLorenzo Bianconi <lorenzo@kernel.org>
Thu, 23 Dec 2021 12:07:40 +0000 (13:07 +0100)
committerFelix Fietkau <nbd@nbd.name>
Thu, 3 Feb 2022 12:57:57 +0000 (13:57 +0100)
Rely on mt76_connac_mcu_wtbl_ht_tlv routine and
remove duplicated code.

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h
drivers/net/wireless/mediatek/mt76/mt7915/mcu.c

index 45c16f5f39a97bad313414566957581795bda30e..2bb8eb8048831117be775fba3845bfbe1fec704d 100644 (file)
@@ -918,7 +918,7 @@ mt7615_mcu_wtbl_sta_add(struct mt7615_phy *phy, struct ieee80211_vif *vif,
                                                 NULL, wtbl_hdr);
                if (sta)
                        mt76_connac_mcu_wtbl_ht_tlv(&dev->mt76, wskb, sta,
-                                                   NULL, wtbl_hdr);
+                                                   NULL, wtbl_hdr, true);
                mt76_connac_mcu_wtbl_hdr_trans_tlv(wskb, vif, &msta->wcid,
                                                   NULL, wtbl_hdr);
        }
index 769b3da486cc534de858499ea770344cfc542f8b..8d9d9d449175858c5529261624d2c33c1b82bf2d 100644 (file)
@@ -877,7 +877,7 @@ EXPORT_SYMBOL_GPL(mt76_connac_mcu_wtbl_smps_tlv);
 
 void mt76_connac_mcu_wtbl_ht_tlv(struct mt76_dev *dev, struct sk_buff *skb,
                                 struct ieee80211_sta *sta, void *sta_wtbl,
-                                void *wtbl_tlv)
+                                void *wtbl_tlv, bool ldpc)
 {
        struct wtbl_ht *ht = NULL;
        struct tlv *tlv;
@@ -887,7 +887,8 @@ void mt76_connac_mcu_wtbl_ht_tlv(struct mt76_dev *dev, struct sk_buff *skb,
                tlv = mt76_connac_mcu_add_nested_tlv(skb, WTBL_HT, sizeof(*ht),
                                                     wtbl_tlv, sta_wtbl);
                ht = (struct wtbl_ht *)tlv;
-               ht->ldpc = !!(sta->ht_cap.cap & IEEE80211_HT_CAP_LDPC_CODING);
+               ht->ldpc = ldpc &&
+                          !!(sta->ht_cap.cap & IEEE80211_HT_CAP_LDPC_CODING);
                ht->af = sta->ht_cap.ampdu_factor;
                ht->mm = sta->ht_cap.ampdu_density;
                ht->ht = true;
@@ -901,7 +902,8 @@ void mt76_connac_mcu_wtbl_ht_tlv(struct mt76_dev *dev, struct sk_buff *skb,
                                                     sizeof(*vht), wtbl_tlv,
                                                     sta_wtbl);
                vht = (struct wtbl_vht *)tlv;
-               vht->ldpc = !!(sta->vht_cap.cap & IEEE80211_VHT_CAP_RXLDPC);
+               vht->ldpc = ldpc &&
+                           !!(sta->vht_cap.cap & IEEE80211_VHT_CAP_RXLDPC);
                vht->vht = true;
 
                af = FIELD_GET(IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK,
@@ -912,7 +914,7 @@ void mt76_connac_mcu_wtbl_ht_tlv(struct mt76_dev *dev, struct sk_buff *skb,
 
        mt76_connac_mcu_wtbl_smps_tlv(skb, sta, sta_wtbl, wtbl_tlv);
 
-       if (!is_mt7921(dev) && sta->ht_cap.ht_supported) {
+       if (!is_mt7921(dev) && !is_mt7915(dev) && sta->ht_cap.ht_supported) {
                /* sgi */
                u32 msk = MT_WTBL_W5_SHORT_GI_20 | MT_WTBL_W5_SHORT_GI_40 |
                          MT_WTBL_W5_SHORT_GI_80 | MT_WTBL_W5_SHORT_GI_160;
@@ -980,7 +982,7 @@ int mt76_connac_mcu_sta_cmd(struct mt76_phy *phy,
                                                   sta_wtbl, wtbl_hdr);
                if (info->sta)
                        mt76_connac_mcu_wtbl_ht_tlv(dev, skb, info->sta,
-                                                   sta_wtbl, wtbl_hdr);
+                                                   sta_wtbl, wtbl_hdr, true);
        }
 
        return mt76_mcu_skb_send_msg(dev, skb, info->cmd, true);
index 68754f4aa1bbc2541ce8b810770060a5f214a0b6..3b642be4d101c7749b6467a9d74091451e06f4b2 100644 (file)
@@ -1518,7 +1518,7 @@ void mt76_connac_mcu_sta_tlv(struct mt76_phy *mphy, struct sk_buff *skb,
                             u8 rcpi, u8 state);
 void mt76_connac_mcu_wtbl_ht_tlv(struct mt76_dev *dev, struct sk_buff *skb,
                                 struct ieee80211_sta *sta, void *sta_wtbl,
-                                void *wtbl_tlv);
+                                void *wtbl_tlv, bool ldpc);
 void mt76_connac_mcu_wtbl_ba_tlv(struct mt76_dev *dev, struct sk_buff *skb,
                                 struct ieee80211_ampdu_params *params,
                                 bool enable, bool tx, void *sta_wtbl,
index 9794a0383748e218265eeb7a7b6d7b8a43b6a210..c307c79fd80c416acef96c788f5def0d75ff8ea8 100644 (file)
@@ -1022,49 +1022,6 @@ mt7915_mcu_sta_amsdu_tlv(struct sk_buff *skb, struct ieee80211_vif *vif,
        msta->wcid.amsdu = true;
 }
 
-static void
-mt7915_mcu_wtbl_ht_tlv(struct sk_buff *skb, struct ieee80211_vif *vif,
-                      struct ieee80211_sta *sta, void *sta_wtbl,
-                      void *wtbl_tlv)
-{
-       struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-       struct wtbl_ht *ht = NULL;
-       struct tlv *tlv;
-
-       /* wtbl ht */
-       if (sta->ht_cap.ht_supported) {
-               tlv = mt76_connac_mcu_add_nested_tlv(skb, WTBL_HT, sizeof(*ht),
-                                                    wtbl_tlv, sta_wtbl);
-               ht = (struct wtbl_ht *)tlv;
-               ht->ldpc = mvif->cap.ldpc &&
-                          (sta->ht_cap.cap & IEEE80211_HT_CAP_LDPC_CODING);
-               ht->af = sta->ht_cap.ampdu_factor;
-               ht->mm = sta->ht_cap.ampdu_density;
-               ht->ht = true;
-       }
-
-       /* wtbl vht */
-       if (sta->vht_cap.vht_supported) {
-               struct wtbl_vht *vht;
-               u8 af;
-
-               tlv = mt76_connac_mcu_add_nested_tlv(skb, WTBL_VHT,
-                                                    sizeof(*vht), wtbl_tlv,
-                                                    sta_wtbl);
-               vht = (struct wtbl_vht *)tlv;
-               vht->ldpc = mvif->cap.ldpc &&
-                           (sta->vht_cap.cap & IEEE80211_VHT_CAP_RXLDPC);
-               vht->vht = true;
-
-               af = FIELD_GET(IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK,
-                              sta->vht_cap.cap);
-               if (ht)
-                       ht->af = max_t(u8, ht->af, af);
-       }
-
-       mt76_connac_mcu_wtbl_smps_tlv(skb, sta, sta_wtbl, wtbl_tlv);
-}
-
 static void
 mt7915_mcu_wtbl_hdr_trans_tlv(struct sk_buff *skb, struct ieee80211_vif *vif,
                              struct ieee80211_sta *sta,
@@ -1117,7 +1074,8 @@ mt7915_mcu_sta_wtbl_tlv(struct mt7915_dev *dev, struct sk_buff *skb,
        mt7915_mcu_wtbl_hdr_trans_tlv(skb, vif, sta, tlv, wtbl_hdr);
 
        if (sta)
-               mt7915_mcu_wtbl_ht_tlv(skb, vif, sta, tlv, wtbl_hdr);
+               mt76_connac_mcu_wtbl_ht_tlv(&dev->mt76, skb, sta, tlv,
+                                           wtbl_hdr, mvif->cap.ldpc);
 
        return 0;
 }