blob: 28a93cc7b94d5ed11cc28ab9aa2779e1fc83c47c [file] [log] [blame]
From c23474064033e8f22f599b19c0580b045968c831 Mon Sep 17 00:00:00 2001
From: Shayne Chen <shayne.chen@mediatek.com>
Date: Fri, 10 Feb 2023 17:39:23 +0800
Subject: [PATCH 01/29] wifi: mt76: mt7996: add eht rx rate support
Add support to report eht rx rate.
Change-Id: Iee067d891bd634a918c942c2ba90ae72cd40c538
Signed-off-by: Shayne Chen <shayne.chen@mediatek.com>
---
mac80211.c | 11 ++++++++---
mt76.h | 18 ++++++++++++++----
mt7996/mac.c | 9 +++++----
3 files changed, 27 insertions(+), 11 deletions(-)
diff --git a/mac80211.c b/mac80211.c
index 87902f4b..e53166fc 100644
--- a/mac80211.c
+++ b/mac80211.c
@@ -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;
diff --git a/mt76.h b/mt76.h
index 183b0fc5..c3d1313e 100644
--- a/mt76.h
+++ b/mt76.h
@@ -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];
diff --git a/mt7996/mac.c b/mt7996/mac.c
index 3c3506c7..d811b4e0 100644
--- a/mt7996/mac.c
+++ b/mt7996/mac.c
@@ -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;
--
2.39.2