mt76: connac: move mt76_connac2_mac_fill_rx_rate in connac module
authorLorenzo Bianconi <lorenzo@kernel.org>
Wed, 8 Jun 2022 17:30:31 +0000 (19:30 +0200)
committerFelix Fietkau <nbd@nbd.name>
Mon, 11 Jul 2022 11:40:02 +0000 (13:40 +0200)
Rely on mt76_connac2_mac_fill_rx_rate routine in mt7921 driver.

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt76_connac.h
drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c
drivers/net/wireless/mediatek/mt76/mt7915/mac.c
drivers/net/wireless/mediatek/mt76/mt7921/mac.c

index 27ab1f2..a9927dc 100644 (file)
@@ -258,5 +258,9 @@ void mt76_connac2_mac_decode_he_radiotap(struct mt76_dev *dev,
                                         __le32 *rxv, u32 mode);
 int mt76_connac2_reverse_frag0_hdr_trans(struct ieee80211_vif *vif,
                                         struct sk_buff *skb, u16 hdr_offset);
+int mt76_connac2_mac_fill_rx_rate(struct mt76_dev *dev,
+                                 struct mt76_rx_status *status,
+                                 struct ieee80211_supported_band *sband,
+                                 __le32 *rxv, u8 *mode);
 
 #endif /* __MT76_CONNAC_H */
index 6ac1ac3..6aa02ac 100644 (file)
@@ -784,3 +784,108 @@ int mt76_connac2_reverse_frag0_hdr_trans(struct ieee80211_vif *vif,
        return 0;
 }
 EXPORT_SYMBOL_GPL(mt76_connac2_reverse_frag0_hdr_trans);
+
+int mt76_connac2_mac_fill_rx_rate(struct mt76_dev *dev,
+                                 struct mt76_rx_status *status,
+                                 struct ieee80211_supported_band *sband,
+                                 __le32 *rxv, u8 *mode)
+{
+       u32 v0, v2;
+       u8 stbc, gi, bw, dcm, nss;
+       int i, idx;
+       bool cck = false;
+
+       v0 = le32_to_cpu(rxv[0]);
+       v2 = le32_to_cpu(rxv[2]);
+
+       idx = i = FIELD_GET(MT_PRXV_TX_RATE, v0);
+       nss = FIELD_GET(MT_PRXV_NSTS, v0) + 1;
+
+       if (!is_mt7915(dev)) {
+               stbc = FIELD_GET(MT_PRXV_HT_STBC, v0);
+               gi = FIELD_GET(MT_PRXV_HT_SGI, v0);
+               *mode = FIELD_GET(MT_PRXV_TX_MODE, v0);
+               if (is_mt7921(dev))
+                       dcm = !!(idx & MT_PRXV_TX_DCM);
+               else
+                       dcm = FIELD_GET(MT_PRXV_DCM, v0);
+               bw = FIELD_GET(MT_PRXV_FRAME_MODE, v0);
+       } else {
+               stbc = FIELD_GET(MT_CRXV_HT_STBC, v2);
+               gi = FIELD_GET(MT_CRXV_HT_SHORT_GI, v2);
+               *mode = FIELD_GET(MT_CRXV_TX_MODE, v2);
+               dcm = !!(idx & GENMASK(3, 0) & MT_PRXV_TX_DCM);
+               bw = FIELD_GET(MT_CRXV_FRAME_MODE, v2);
+       }
+
+       switch (*mode) {
+       case MT_PHY_TYPE_CCK:
+               cck = true;
+               fallthrough;
+       case MT_PHY_TYPE_OFDM:
+               i = mt76_get_rate(dev, sband, i, cck);
+               break;
+       case MT_PHY_TYPE_HT_GF:
+       case MT_PHY_TYPE_HT:
+               status->encoding = RX_ENC_HT;
+               if (gi)
+                       status->enc_flags |= RX_ENC_FLAG_SHORT_GI;
+               if (i > 31)
+                       return -EINVAL;
+               break;
+       case MT_PHY_TYPE_VHT:
+               status->nss = nss;
+               status->encoding = RX_ENC_VHT;
+               if (gi)
+                       status->enc_flags |= RX_ENC_FLAG_SHORT_GI;
+               if (i > 11)
+                       return -EINVAL;
+               break;
+       case MT_PHY_TYPE_HE_MU:
+       case MT_PHY_TYPE_HE_SU:
+       case MT_PHY_TYPE_HE_EXT_SU:
+       case MT_PHY_TYPE_HE_TB:
+               status->nss = nss;
+               status->encoding = RX_ENC_HE;
+               i &= GENMASK(3, 0);
+
+               if (gi <= NL80211_RATE_INFO_HE_GI_3_2)
+                       status->he_gi = gi;
+
+               status->he_dcm = dcm;
+               break;
+       default:
+               return -EINVAL;
+       }
+       status->rate_idx = i;
+
+       switch (bw) {
+       case IEEE80211_STA_RX_BW_20:
+               break;
+       case IEEE80211_STA_RX_BW_40:
+               if (*mode & MT_PHY_TYPE_HE_EXT_SU &&
+                   (idx & MT_PRXV_TX_ER_SU_106T)) {
+                       status->bw = RATE_INFO_BW_HE_RU;
+                       status->he_ru =
+                               NL80211_RATE_INFO_HE_RU_ALLOC_106;
+               } else {
+                       status->bw = RATE_INFO_BW_40;
+               }
+               break;
+       case IEEE80211_STA_RX_BW_80:
+               status->bw = RATE_INFO_BW_80;
+               break;
+       case IEEE80211_STA_RX_BW_160:
+               status->bw = RATE_INFO_BW_160;
+               break;
+       default:
+               return -EINVAL;
+       }
+
+       status->enc_flags |= RX_ENC_FLAG_STBC_MASK * stbc;
+       if (*mode < MT_PHY_TYPE_HE_SU && gi)
+               status->enc_flags |= RX_ENC_FLAG_SHORT_GI;
+
+       return 0;
+}
+EXPORT_SYMBOL_GPL(mt76_connac2_mac_fill_rx_rate);
index 1d83f87..a575a44 100644 (file)
@@ -214,108 +214,6 @@ static void mt7915_mac_sta_poll(struct mt7915_dev *dev)
        rcu_read_unlock();
 }
 
-static int
-mt7915_mac_fill_rx_rate(struct mt7915_dev *dev,
-                       struct mt76_rx_status *status,
-                       struct ieee80211_supported_band *sband,
-                       __le32 *rxv, u8 *mode)
-{
-       u32 v0, v2;
-       u8 stbc, gi, bw, dcm, nss;
-       int i, idx;
-       bool cck = false;
-
-       v0 = le32_to_cpu(rxv[0]);
-       v2 = le32_to_cpu(rxv[2]);
-
-       idx = i = FIELD_GET(MT_PRXV_TX_RATE, v0);
-       nss = FIELD_GET(MT_PRXV_NSTS, v0) + 1;
-
-       if (!is_mt7915(&dev->mt76)) {
-               stbc = FIELD_GET(MT_PRXV_HT_STBC, v0);
-               gi = FIELD_GET(MT_PRXV_HT_SGI, v0);
-               *mode = FIELD_GET(MT_PRXV_TX_MODE, v0);
-               dcm = FIELD_GET(MT_PRXV_DCM, v0);
-               bw = FIELD_GET(MT_PRXV_FRAME_MODE, v0);
-       } else {
-               stbc = FIELD_GET(MT_CRXV_HT_STBC, v2);
-               gi = FIELD_GET(MT_CRXV_HT_SHORT_GI, v2);
-               *mode = FIELD_GET(MT_CRXV_TX_MODE, v2);
-               dcm = !!(idx & GENMASK(3, 0) & MT_PRXV_TX_DCM);
-               bw = FIELD_GET(MT_CRXV_FRAME_MODE, v2);
-       }
-
-       switch (*mode) {
-       case MT_PHY_TYPE_CCK:
-               cck = true;
-               fallthrough;
-       case MT_PHY_TYPE_OFDM:
-               i = mt76_get_rate(&dev->mt76, sband, i, cck);
-               break;
-       case MT_PHY_TYPE_HT_GF:
-       case MT_PHY_TYPE_HT:
-               status->encoding = RX_ENC_HT;
-               if (gi)
-                       status->enc_flags |= RX_ENC_FLAG_SHORT_GI;
-               if (i > 31)
-                       return -EINVAL;
-               break;
-       case MT_PHY_TYPE_VHT:
-               status->nss = nss;
-               status->encoding = RX_ENC_VHT;
-               if (gi)
-                       status->enc_flags |= RX_ENC_FLAG_SHORT_GI;
-               if (i > 11)
-                       return -EINVAL;
-               break;
-       case MT_PHY_TYPE_HE_MU:
-       case MT_PHY_TYPE_HE_SU:
-       case MT_PHY_TYPE_HE_EXT_SU:
-       case MT_PHY_TYPE_HE_TB:
-               status->nss = nss;
-               status->encoding = RX_ENC_HE;
-               i &= GENMASK(3, 0);
-
-               if (gi <= NL80211_RATE_INFO_HE_GI_3_2)
-                       status->he_gi = gi;
-
-               status->he_dcm = dcm;
-               break;
-       default:
-               return -EINVAL;
-       }
-       status->rate_idx = i;
-
-       switch (bw) {
-       case IEEE80211_STA_RX_BW_20:
-               break;
-       case IEEE80211_STA_RX_BW_40:
-               if (*mode & MT_PHY_TYPE_HE_EXT_SU &&
-                   (idx & MT_PRXV_TX_ER_SU_106T)) {
-                       status->bw = RATE_INFO_BW_HE_RU;
-                       status->he_ru =
-                               NL80211_RATE_INFO_HE_RU_ALLOC_106;
-               } else {
-                       status->bw = RATE_INFO_BW_40;
-               }
-               break;
-       case IEEE80211_STA_RX_BW_80:
-               status->bw = RATE_INFO_BW_80;
-               break;
-       case IEEE80211_STA_RX_BW_160:
-               status->bw = RATE_INFO_BW_160;
-               break;
-       default:
-               return -EINVAL;
-       }
-
-       status->enc_flags |= RX_ENC_FLAG_STBC_MASK * stbc;
-       if (*mode < MT_PHY_TYPE_HE_SU && gi)
-               status->enc_flags |= RX_ENC_FLAG_SHORT_GI;
-
-       return 0;
-}
-
 static int
 mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb)
 {
@@ -508,8 +406,8 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb)
                }
 
                if (!is_mt7915(&dev->mt76) || (rxd1 & MT_RXD1_NORMAL_GROUP_5)) {
-                       ret = mt7915_mac_fill_rx_rate(dev, status, sband, rxv,
-                                                     &mode);
+                       ret = mt76_connac2_mac_fill_rx_rate(&dev->mt76, status,
+                                                           sband, rxv, &mode);
                        if (ret < 0)
                                return ret;
                }
index 5b48a72..b8fe613 100644 (file)
@@ -238,7 +238,7 @@ mt7921_mac_fill_rx(struct mt7921_dev *dev, struct sk_buff *skb)
        struct mt7921_sta *msta;
        u16 seq_ctrl = 0;
        __le16 fc = 0;
-       u32 mode = 0;
+       u8 mode = 0;
        int i, idx;
 
        memset(status, 0, sizeof(*status));
@@ -380,9 +380,8 @@ mt7921_mac_fill_rx(struct mt7921_dev *dev, struct sk_buff *skb)
 
        /* RXD Group 3 - P-RXV */
        if (rxd1 & MT_RXD1_NORMAL_GROUP_3) {
-               u8 stbc, gi;
                u32 v0, v1;
-               bool cck;
+               int ret;
 
                rxv = rxd;
                rxd += 2;
@@ -410,79 +409,10 @@ mt7921_mac_fill_rx(struct mt7921_dev *dev, struct sk_buff *skb)
                                             status->chain_signal[i]);
                }
 
-               stbc = FIELD_GET(MT_PRXV_HT_STBC, v0);
-               gi = FIELD_GET(MT_PRXV_HT_SGI, v0);
-               cck = false;
-
-               idx = i = FIELD_GET(MT_PRXV_TX_RATE, v0);
-               mode = FIELD_GET(MT_PRXV_TX_MODE, v0);
-
-               switch (mode) {
-               case MT_PHY_TYPE_CCK:
-                       cck = true;
-                       fallthrough;
-               case MT_PHY_TYPE_OFDM:
-                       i = mt76_get_rate(&dev->mt76, sband, i, cck);
-                       break;
-               case MT_PHY_TYPE_HT_GF:
-               case MT_PHY_TYPE_HT:
-                       status->encoding = RX_ENC_HT;
-                       if (i > 31)
-                               return -EINVAL;
-                       break;
-               case MT_PHY_TYPE_VHT:
-                       status->nss =
-                               FIELD_GET(MT_PRXV_NSTS, v0) + 1;
-                       status->encoding = RX_ENC_VHT;
-                       if (i > 11)
-                               return -EINVAL;
-                       break;
-               case MT_PHY_TYPE_HE_MU:
-               case MT_PHY_TYPE_HE_SU:
-               case MT_PHY_TYPE_HE_EXT_SU:
-               case MT_PHY_TYPE_HE_TB:
-                       status->nss =
-                               FIELD_GET(MT_PRXV_NSTS, v0) + 1;
-                       status->encoding = RX_ENC_HE;
-                       i &= GENMASK(3, 0);
-
-                       if (gi <= NL80211_RATE_INFO_HE_GI_3_2)
-                               status->he_gi = gi;
-
-                       status->he_dcm = !!(idx & MT_PRXV_TX_DCM);
-                       break;
-               default:
-                       return -EINVAL;
-               }
-
-               status->rate_idx = i;
-
-               switch (FIELD_GET(MT_PRXV_FRAME_MODE, v0)) {
-               case IEEE80211_STA_RX_BW_20:
-                       break;
-               case IEEE80211_STA_RX_BW_40:
-                       if (mode & MT_PHY_TYPE_HE_EXT_SU &&
-                           (idx & MT_PRXV_TX_ER_SU_106T)) {
-                               status->bw = RATE_INFO_BW_HE_RU;
-                               status->he_ru =
-                                       NL80211_RATE_INFO_HE_RU_ALLOC_106;
-                       } else {
-                               status->bw = RATE_INFO_BW_40;
-                       }
-                       break;
-               case IEEE80211_STA_RX_BW_80:
-                       status->bw = RATE_INFO_BW_80;
-                       break;
-               case IEEE80211_STA_RX_BW_160:
-                       status->bw = RATE_INFO_BW_160;
-                       break;
-               default:
-                       return -EINVAL;
-               }
-
-               status->enc_flags |= RX_ENC_FLAG_STBC_MASK * stbc;
-               if (mode < MT_PHY_TYPE_HE_SU && gi)
-                       status->enc_flags |= RX_ENC_FLAG_SHORT_GI;
+               ret = mt76_connac2_mac_fill_rx_rate(&dev->mt76, status, sband,
+                                                   rxv, &mode);
+               if (ret < 0)
+                       return ret;
 
                if (rxd1 & MT_RXD1_NORMAL_GROUP_5) {
                        rxd += 18;