mt76: connac: move mt76_connac2_mac_add_txs_skb in connac module
authorLorenzo Bianconi <lorenzo@kernel.org>
Tue, 7 Jun 2022 09:28:41 +0000 (11:28 +0200)
committerFelix Fietkau <nbd@nbd.name>
Mon, 11 Jul 2022 11:40:01 +0000 (13:40 +0200)
Move mt76_connac2_mac_add_txs_skb in mt76-connac module since it is
shared between connac2 devices (mt7921 and mt7915)

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 a9d7a26..6b8d6c5 100644 (file)
@@ -250,5 +250,8 @@ void mt76_connac2_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi,
                                 struct sk_buff *skb, struct mt76_wcid *wcid,
                                 struct ieee80211_key_conf *key, int pid,
                                 u32 changed);
+bool mt76_connac2_mac_add_txs_skb(struct mt76_dev *dev, struct mt76_wcid *wcid,
+                                 int pid, __le32 *txs_data,
+                                 struct mt76_sta_stats *stats);
 
 #endif /* __MT76_CONNAC_H */
index 0ea7955..3f2680b 100644 (file)
@@ -399,3 +399,125 @@ void mt76_connac2_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi,
        }
 }
 EXPORT_SYMBOL_GPL(mt76_connac2_mac_write_txwi);
+
+bool mt76_connac2_mac_add_txs_skb(struct mt76_dev *dev, struct mt76_wcid *wcid,
+                                 int pid, __le32 *txs_data,
+                                 struct mt76_sta_stats *stats)
+{
+       struct ieee80211_supported_band *sband;
+       struct mt76_phy *mphy;
+       struct ieee80211_tx_info *info;
+       struct sk_buff_head list;
+       struct rate_info rate = {};
+       struct sk_buff *skb;
+       bool cck = false;
+       u32 txrate, txs, mode;
+
+       mt76_tx_status_lock(dev, &list);
+       skb = mt76_tx_status_skb_get(dev, wcid, pid, &list);
+       if (!skb)
+               goto out;
+
+       txs = le32_to_cpu(txs_data[0]);
+
+       info = IEEE80211_SKB_CB(skb);
+       if (!(txs & MT_TXS0_ACK_ERROR_MASK))
+               info->flags |= IEEE80211_TX_STAT_ACK;
+
+       info->status.ampdu_len = 1;
+       info->status.ampdu_ack_len = !!(info->flags &
+                                       IEEE80211_TX_STAT_ACK);
+
+       info->status.rates[0].idx = -1;
+
+       txrate = FIELD_GET(MT_TXS0_TX_RATE, txs);
+
+       rate.mcs = FIELD_GET(MT_TX_RATE_IDX, txrate);
+       rate.nss = FIELD_GET(MT_TX_RATE_NSS, txrate) + 1;
+
+       if (rate.nss - 1 < ARRAY_SIZE(stats->tx_nss))
+               stats->tx_nss[rate.nss - 1]++;
+       if (rate.mcs < ARRAY_SIZE(stats->tx_mcs))
+               stats->tx_mcs[rate.mcs]++;
+
+       mode = FIELD_GET(MT_TX_RATE_MODE, txrate);
+       switch (mode) {
+       case MT_PHY_TYPE_CCK:
+               cck = true;
+               fallthrough;
+       case MT_PHY_TYPE_OFDM:
+               mphy = &dev->phy;
+               if (wcid->ext_phy && dev->phy2)
+                       mphy = dev->phy2;
+
+               if (mphy->chandef.chan->band == NL80211_BAND_5GHZ)
+                       sband = &mphy->sband_5g.sband;
+               else if (mphy->chandef.chan->band == NL80211_BAND_6GHZ)
+                       sband = &mphy->sband_6g.sband;
+               else
+                       sband = &mphy->sband_2g.sband;
+
+               rate.mcs = mt76_get_rate(mphy->dev, sband, rate.mcs, cck);
+               rate.legacy = sband->bitrates[rate.mcs].bitrate;
+               break;
+       case MT_PHY_TYPE_HT:
+       case MT_PHY_TYPE_HT_GF:
+               if (rate.mcs > 31)
+                       goto out;
+
+               rate.flags = RATE_INFO_FLAGS_MCS;
+               if (wcid->rate.flags & RATE_INFO_FLAGS_SHORT_GI)
+                       rate.flags |= RATE_INFO_FLAGS_SHORT_GI;
+               break;
+       case MT_PHY_TYPE_VHT:
+               if (rate.mcs > 9)
+                       goto out;
+
+               rate.flags = RATE_INFO_FLAGS_VHT_MCS;
+               break;
+       case MT_PHY_TYPE_HE_SU:
+       case MT_PHY_TYPE_HE_EXT_SU:
+       case MT_PHY_TYPE_HE_TB:
+       case MT_PHY_TYPE_HE_MU:
+               if (rate.mcs > 11)
+                       goto out;
+
+               rate.he_gi = wcid->rate.he_gi;
+               rate.he_dcm = FIELD_GET(MT_TX_RATE_DCM, txrate);
+               rate.flags = RATE_INFO_FLAGS_HE_MCS;
+               break;
+       default:
+               goto out;
+       }
+
+       stats->tx_mode[mode]++;
+
+       switch (FIELD_GET(MT_TXS0_BW, txs)) {
+       case IEEE80211_STA_RX_BW_160:
+               rate.bw = RATE_INFO_BW_160;
+               stats->tx_bw[3]++;
+               break;
+       case IEEE80211_STA_RX_BW_80:
+               rate.bw = RATE_INFO_BW_80;
+               stats->tx_bw[2]++;
+               break;
+       case IEEE80211_STA_RX_BW_40:
+               rate.bw = RATE_INFO_BW_40;
+               stats->tx_bw[1]++;
+               break;
+       default:
+               rate.bw = RATE_INFO_BW_20;
+               stats->tx_bw[0]++;
+               break;
+       }
+       wcid->rate = rate;
+
+out:
+       if (skb)
+               mt76_tx_status_skb_done(dev, skb, &list);
+
+       mt76_tx_status_unlock(dev, &list);
+
+       return !!skb;
+}
+EXPORT_SYMBOL_GPL(mt76_connac2_mac_add_txs_skb);
index 932dfe0..428c4fd 100644 (file)
@@ -1345,128 +1345,6 @@ mt7915_mac_tx_free_v0(struct mt7915_dev *dev, void *data, int len)
        mt7915_mac_tx_free_done(dev, &free_list, wake);
 }
 
-static bool
-mt7915_mac_add_txs_skb(struct mt7915_dev *dev, struct mt76_wcid *wcid, int pid,
-                      __le32 *txs_data, struct mt76_sta_stats *stats)
-{
-       struct ieee80211_supported_band *sband;
-       struct mt76_dev *mdev = &dev->mt76;
-       struct mt76_phy *mphy;
-       struct ieee80211_tx_info *info;
-       struct sk_buff_head list;
-       struct rate_info rate = {};
-       struct sk_buff *skb;
-       bool cck = false;
-       u32 txrate, txs, mode;
-
-       mt76_tx_status_lock(mdev, &list);
-       skb = mt76_tx_status_skb_get(mdev, wcid, pid, &list);
-       if (!skb)
-               goto out_no_skb;
-
-       txs = le32_to_cpu(txs_data[0]);
-
-       info = IEEE80211_SKB_CB(skb);
-       if (!(txs & MT_TXS0_ACK_ERROR_MASK))
-               info->flags |= IEEE80211_TX_STAT_ACK;
-
-       info->status.ampdu_len = 1;
-       info->status.ampdu_ack_len = !!(info->flags &
-                                       IEEE80211_TX_STAT_ACK);
-
-       info->status.rates[0].idx = -1;
-
-       txrate = FIELD_GET(MT_TXS0_TX_RATE, txs);
-
-       rate.mcs = FIELD_GET(MT_TX_RATE_IDX, txrate);
-       rate.nss = FIELD_GET(MT_TX_RATE_NSS, txrate) + 1;
-
-       if (rate.nss - 1 < ARRAY_SIZE(stats->tx_nss))
-               stats->tx_nss[rate.nss - 1]++;
-       if (rate.mcs < ARRAY_SIZE(stats->tx_mcs))
-               stats->tx_mcs[rate.mcs]++;
-
-       mode = FIELD_GET(MT_TX_RATE_MODE, txrate);
-       switch (mode) {
-       case MT_PHY_TYPE_CCK:
-               cck = true;
-               fallthrough;
-       case MT_PHY_TYPE_OFDM:
-               mphy = &dev->mphy;
-               if (wcid->ext_phy && dev->mt76.phy2)
-                       mphy = dev->mt76.phy2;
-
-               if (mphy->chandef.chan->band == NL80211_BAND_5GHZ)
-                       sband = &mphy->sband_5g.sband;
-               else if (mphy->chandef.chan->band == NL80211_BAND_6GHZ)
-                       sband = &mphy->sband_6g.sband;
-               else
-                       sband = &mphy->sband_2g.sband;
-
-               rate.mcs = mt76_get_rate(mphy->dev, sband, rate.mcs, cck);
-               rate.legacy = sband->bitrates[rate.mcs].bitrate;
-               break;
-       case MT_PHY_TYPE_HT:
-       case MT_PHY_TYPE_HT_GF:
-               if (rate.mcs > 31)
-                       goto out;
-
-               rate.flags = RATE_INFO_FLAGS_MCS;
-               if (wcid->rate.flags & RATE_INFO_FLAGS_SHORT_GI)
-                       rate.flags |= RATE_INFO_FLAGS_SHORT_GI;
-               break;
-       case MT_PHY_TYPE_VHT:
-               if (rate.mcs > 9)
-                       goto out;
-
-               rate.flags = RATE_INFO_FLAGS_VHT_MCS;
-               break;
-       case MT_PHY_TYPE_HE_SU:
-       case MT_PHY_TYPE_HE_EXT_SU:
-       case MT_PHY_TYPE_HE_TB:
-       case MT_PHY_TYPE_HE_MU:
-               if (rate.mcs > 11)
-                       goto out;
-
-               rate.he_gi = wcid->rate.he_gi;
-               rate.he_dcm = FIELD_GET(MT_TX_RATE_DCM, txrate);
-               rate.flags = RATE_INFO_FLAGS_HE_MCS;
-               break;
-       default:
-               goto out;
-       }
-
-       stats->tx_mode[mode]++;
-
-       switch (FIELD_GET(MT_TXS0_BW, txs)) {
-       case IEEE80211_STA_RX_BW_160:
-               rate.bw = RATE_INFO_BW_160;
-               stats->tx_bw[3]++;
-               break;
-       case IEEE80211_STA_RX_BW_80:
-               rate.bw = RATE_INFO_BW_80;
-               stats->tx_bw[2]++;
-               break;
-       case IEEE80211_STA_RX_BW_40:
-               rate.bw = RATE_INFO_BW_40;
-               stats->tx_bw[1]++;
-               break;
-       default:
-               rate.bw = RATE_INFO_BW_20;
-               stats->tx_bw[0]++;
-               break;
-       }
-       wcid->rate = rate;
-
-out:
-       mt76_tx_status_skb_done(mdev, skb, &list);
-
-out_no_skb:
-       mt76_tx_status_unlock(mdev, &list);
-
-       return !!skb;
-}
-
 static void mt7915_mac_add_txs(struct mt7915_dev *dev, void *data)
 {
        struct mt7915_sta *msta = NULL;
@@ -1495,8 +1373,8 @@ static void mt7915_mac_add_txs(struct mt7915_dev *dev, void *data)
 
        msta = container_of(wcid, struct mt7915_sta, wcid);
 
-       mt7915_mac_add_txs_skb(dev, wcid, pid, txs_data, &msta->stats);
-
+       mt76_connac2_mac_add_txs_skb(&dev->mt76, wcid, pid, txs_data,
+                                    &msta->stats);
        if (!wcid->sta)
                goto out;
 
index ae1dafc..ccaf4d5 100644 (file)
@@ -833,123 +833,6 @@ void mt7921_tx_check_aggr(struct ieee80211_sta *sta, __le32 *txwi)
 }
 EXPORT_SYMBOL_GPL(mt7921_tx_check_aggr);
 
-static bool
-mt7921_mac_add_txs_skb(struct mt7921_dev *dev, struct mt76_wcid *wcid, int pid,
-                      __le32 *txs_data)
-{
-       struct mt7921_sta *msta = container_of(wcid, struct mt7921_sta, wcid);
-       struct mt76_sta_stats *stats = &msta->stats;
-       struct ieee80211_supported_band *sband;
-       struct mt76_dev *mdev = &dev->mt76;
-       struct ieee80211_tx_info *info;
-       struct rate_info rate = {};
-       struct sk_buff_head list;
-       u32 txrate, txs, mode;
-       struct sk_buff *skb;
-       bool cck = false;
-
-       mt76_tx_status_lock(mdev, &list);
-       skb = mt76_tx_status_skb_get(mdev, wcid, pid, &list);
-       if (!skb)
-               goto out;
-
-       info = IEEE80211_SKB_CB(skb);
-       txs = le32_to_cpu(txs_data[0]);
-       if (!(txs & MT_TXS0_ACK_ERROR_MASK))
-               info->flags |= IEEE80211_TX_STAT_ACK;
-
-       info->status.ampdu_len = 1;
-       info->status.ampdu_ack_len = !!(info->flags &
-                                       IEEE80211_TX_STAT_ACK);
-
-       info->status.rates[0].idx = -1;
-
-       if (!wcid->sta)
-               goto out;
-
-       txrate = FIELD_GET(MT_TXS0_TX_RATE, txs);
-
-       rate.mcs = FIELD_GET(MT_TX_RATE_IDX, txrate);
-       rate.nss = FIELD_GET(MT_TX_RATE_NSS, txrate) + 1;
-
-       if (rate.nss - 1 < ARRAY_SIZE(stats->tx_nss))
-               stats->tx_nss[rate.nss - 1]++;
-       if (rate.mcs < ARRAY_SIZE(stats->tx_mcs))
-               stats->tx_mcs[rate.mcs]++;
-
-       mode = FIELD_GET(MT_TX_RATE_MODE, txrate);
-       switch (mode) {
-       case MT_PHY_TYPE_CCK:
-               cck = true;
-               fallthrough;
-       case MT_PHY_TYPE_OFDM:
-               if (dev->mphy.chandef.chan->band == NL80211_BAND_5GHZ)
-                       sband = &dev->mphy.sband_5g.sband;
-               else
-                       sband = &dev->mphy.sband_2g.sband;
-
-               rate.mcs = mt76_get_rate(dev->mphy.dev, sband, rate.mcs, cck);
-               rate.legacy = sband->bitrates[rate.mcs].bitrate;
-               break;
-       case MT_PHY_TYPE_HT:
-       case MT_PHY_TYPE_HT_GF:
-               if (rate.mcs > 31)
-                       goto out;
-
-               rate.flags = RATE_INFO_FLAGS_MCS;
-               if (wcid->rate.flags & RATE_INFO_FLAGS_SHORT_GI)
-                       rate.flags |= RATE_INFO_FLAGS_SHORT_GI;
-               break;
-       case MT_PHY_TYPE_VHT:
-               if (rate.mcs > 9)
-                       goto out;
-
-               rate.flags = RATE_INFO_FLAGS_VHT_MCS;
-               break;
-       case MT_PHY_TYPE_HE_SU:
-       case MT_PHY_TYPE_HE_EXT_SU:
-       case MT_PHY_TYPE_HE_TB:
-       case MT_PHY_TYPE_HE_MU:
-               if (rate.mcs > 11)
-                       goto out;
-
-               rate.he_gi = wcid->rate.he_gi;
-               rate.he_dcm = FIELD_GET(MT_TX_RATE_DCM, txrate);
-               rate.flags = RATE_INFO_FLAGS_HE_MCS;
-               break;
-       default:
-               goto out;
-       }
-       stats->tx_mode[mode]++;
-
-       switch (FIELD_GET(MT_TXS0_BW, txs)) {
-       case IEEE80211_STA_RX_BW_160:
-               rate.bw = RATE_INFO_BW_160;
-               stats->tx_bw[3]++;
-               break;
-       case IEEE80211_STA_RX_BW_80:
-               rate.bw = RATE_INFO_BW_80;
-               stats->tx_bw[2]++;
-               break;
-       case IEEE80211_STA_RX_BW_40:
-               rate.bw = RATE_INFO_BW_40;
-               stats->tx_bw[1]++;
-               break;
-       default:
-               rate.bw = RATE_INFO_BW_20;
-               stats->tx_bw[0]++;
-               break;
-       }
-       wcid->rate = rate;
-
-out:
-       if (skb)
-               mt76_tx_status_skb_done(mdev, skb, &list);
-       mt76_tx_status_unlock(mdev, &list);
-
-       return !!skb;
-}
-
 void mt7921_mac_add_txs(struct mt7921_dev *dev, void *data)
 {
        struct mt7921_sta *msta = NULL;
@@ -976,12 +859,13 @@ void mt7921_mac_add_txs(struct mt7921_dev *dev, void *data)
        if (!wcid)
                goto out;
 
-       mt7921_mac_add_txs_skb(dev, wcid, pid, txs_data);
+       msta = container_of(wcid, struct mt7921_sta, wcid);
 
+       mt76_connac2_mac_add_txs_skb(&dev->mt76, wcid, pid, txs_data,
+                                    &msta->stats);
        if (!wcid->sta)
                goto out;
 
-       msta = container_of(wcid, struct mt7921_sta, wcid);
        spin_lock_bh(&dev->sta_poll_lock);
        if (list_empty(&msta->poll_list))
                list_add_tail(&msta->poll_list, &dev->sta_poll_list);