wifi: mt76: mt7996: add eht rx rate support
authorShayne Chen <shayne.chen@mediatek.com>
Fri, 3 Mar 2023 08:35:52 +0000 (16:35 +0800)
committerFelix Fietkau <nbd@nbd.name>
Mon, 17 Apr 2023 14:08:47 +0000 (16:08 +0200)
Add support to report eht rx rate.
Note that extended fields for eht in mt76_rx_status will make the struct
size exceed the cb size, so make nss and band share the same u8.

Signed-off-by: Shayne Chen <shayne.chen@mediatek.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mac80211.c
drivers/net/wireless/mediatek/mt76/mt76.h
drivers/net/wireless/mediatek/mt76/mt7996/mac.c

index 87902f4..e53166f 100644 (file)
@@ -1067,9 +1067,14 @@ mt76_rx_convert(struct mt76_dev *dev, struct sk_buff *skb,
        status->enc_flags = mstat.enc_flags;
        status->encoding = mstat.encoding;
        status->bw = mstat.bw;
-       status->he_ru = mstat.he_ru;
-       status->he_gi = mstat.he_gi;
-       status->he_dcm = mstat.he_dcm;
+       if (status->encoding == RX_ENC_EHT) {
+               status->eht.ru = mstat.eht.ru;
+               status->eht.gi = mstat.eht.gi;
+       } else {
+               status->he_ru = mstat.he_ru;
+               status->he_gi = mstat.he_gi;
+               status->he_dcm = mstat.he_dcm;
+       }
        status->rate_idx = mstat.rate_idx;
        status->nss = mstat.nss;
        status->band = mstat.band;
index 183b0fc..c3d1313 100644 (file)
@@ -621,12 +621,22 @@ struct mt76_rx_status {
        u16 freq;
        u32 flag;
        u8 enc_flags;
-       u8 encoding:2, bw:3, he_ru:3;
-       u8 he_gi:2, he_dcm:1;
+       u8 encoding:3, bw:4;
+       union {
+               struct {
+                       u8 he_ru:3;
+                       u8 he_gi:2;
+                       u8 he_dcm:1;
+               };
+               struct {
+                       u8 ru:4;
+                       u8 gi:2;
+               } eht;
+       };
+
        u8 amsdu:1, first_amsdu:1, last_amsdu:1;
        u8 rate_idx;
-       u8 nss;
-       u8 band;
+       u8 nss:5, band:3;
        s8 signal;
        u8 chains;
        s8 chain_signal[IEEE80211_MAX_CHAINS];
index 3c3506c..d811b4e 100644 (file)
@@ -572,11 +572,12 @@ mt7996_mac_fill_rx_rate(struct mt7996_dev *dev,
        case MT_PHY_TYPE_EHT_SU:
        case MT_PHY_TYPE_EHT_TRIG:
        case MT_PHY_TYPE_EHT_MU:
-               /* TODO: currently report rx rate with HE rate */
                status->nss = nss;
-               status->encoding = RX_ENC_HE;
-               bw = min_t(int, bw, IEEE80211_STA_RX_BW_160);
-               i = min_t(int, i & 0xf, 11);
+               status->encoding = RX_ENC_EHT;
+               i &= GENMASK(3, 0);
+
+               if (gi <= NL80211_RATE_INFO_EHT_GI_3_2)
+                       status->eht.gi = gi;
                break;
        default:
                return -EINVAL;