| From a1d426d8bb909612b66c31d450fd717177862d2f Mon Sep 17 00:00:00 2001 |
| From: Bo Jiao <Bo.Jiao@mediatek.com> |
| Date: Sun, 25 Dec 2022 22:43:46 +0800 |
| Subject: [PATCH 101/102] mac80211: mtk: add rate duration for EHT rate. |
| |
| --- |
| net/mac80211/airtime.c | 349 ++++++++++++++++++++++++++++++++++++++++- |
| 1 file changed, 346 insertions(+), 3 deletions(-) |
| |
| diff --git a/net/mac80211/airtime.c b/net/mac80211/airtime.c |
| index e8ebd34..b1de6d0 100644 |
| --- a/net/mac80211/airtime.c |
| +++ b/net/mac80211/airtime.c |
| @@ -55,10 +55,21 @@ |
| #define HE_DURATION_S(shift, streams, gi, bps) \ |
| (HE_DURATION(streams, gi, bps) >> shift) |
| |
| +/* Transmit duration for the raw data part of an average sized packet */ |
| +#define EHT_GI_08 HE_GI_08 |
| +#define EHT_GI_16 HE_GI_16 |
| +#define EHT_GI_32 HE_GI_32 |
| + |
| +#define EHT_DURATION(streams, gi, bps) \ |
| + HE_DURATION(streams, gi, bps) |
| +#define EHT_DURATION_S(shift, streams, gi, bps) \ |
| + HE_DURATION_S(shift, streams, gi, bps) |
| + |
| #define BW_20 0 |
| #define BW_40 1 |
| #define BW_80 2 |
| #define BW_160 3 |
| +#define BW_320 4 |
| |
| /* |
| * Define group sort order: HT40 -> SGI -> #streams |
| @@ -68,17 +79,26 @@ |
| #define IEEE80211_VHT_STREAM_GROUPS 8 /* BW(=4) * SGI(=2) */ |
| |
| #define IEEE80211_HE_MAX_STREAMS 8 |
| +#define IEEE80211_HE_STREAM_GROUPS 12 /* BW(=4) * GI(=3) */ |
| + |
| +#define IEEE80211_EHT_MAX_STREAMS 16 |
| +#define IEEE80211_EHT_STREAM_GROUPS 15 /* BW(=5) * GI(=3) */ |
| |
| #define IEEE80211_HT_GROUPS_NB (IEEE80211_MAX_STREAMS * \ |
| IEEE80211_HT_STREAM_GROUPS) |
| #define IEEE80211_VHT_GROUPS_NB (IEEE80211_MAX_STREAMS * \ |
| IEEE80211_VHT_STREAM_GROUPS) |
| +#define IEEE80211_HE_GROUPS_NB (IEEE80211_HE_MAX_STREAMS * \ |
| + IEEE80211_HE_STREAM_GROUPS) |
| +#define IEEE80211_EHT_GROUPS_NB (IEEE80211_EHT_MAX_STREAMS * \ |
| + IEEE80211_EHT_STREAM_GROUPS) |
| |
| #define IEEE80211_HT_GROUP_0 0 |
| #define IEEE80211_VHT_GROUP_0 (IEEE80211_HT_GROUP_0 + IEEE80211_HT_GROUPS_NB) |
| #define IEEE80211_HE_GROUP_0 (IEEE80211_VHT_GROUP_0 + IEEE80211_VHT_GROUPS_NB) |
| +#define IEEE80211_EHT_GROUP_0 (IEEE80211_HE_GROUP_0 + IEEE80211_HE_GROUPS_NB) |
| |
| -#define MCS_GROUP_RATES 12 |
| +#define MCS_GROUP_RATES 14 |
| |
| #define HT_GROUP_IDX(_streams, _sgi, _ht40) \ |
| IEEE80211_HT_GROUP_0 + \ |
| @@ -203,6 +223,59 @@ |
| #define HE_GROUP(_streams, _gi, _bw) \ |
| __HE_GROUP(_streams, _gi, _bw, \ |
| HE_GROUP_SHIFT(_streams, _gi, _bw)) |
| + |
| +#define EHT_BW2VBPS(_bw, r5, r4, r3, r2, r1) \ |
| + (_bw == BW_320 ? r5 : _bw == BW_160 ? r4 : _bw == BW_80 ? r3 : _bw == BW_40 ? r2 : r1) |
| + |
| +#define EHT_GROUP_IDX(_streams, _gi, _bw) \ |
| + (IEEE80211_EHT_GROUP_0 + \ |
| + IEEE80211_EHT_MAX_STREAMS * 3 * (_bw) + \ |
| + IEEE80211_EHT_MAX_STREAMS * (_gi) + \ |
| + (_streams) - 1) |
| + |
| +#define __EHT_GROUP(_streams, _gi, _bw, _s) \ |
| + [EHT_GROUP_IDX(_streams, _gi, _bw)] = { \ |
| + .shift = _s, \ |
| + .duration = { \ |
| + EHT_DURATION_S(_s, _streams, _gi, \ |
| + EHT_BW2VBPS(_bw, 1960, 979, 489, 230, 115)), \ |
| + EHT_DURATION_S(_s, _streams, _gi, \ |
| + EHT_BW2VBPS(_bw, 3920, 1958, 979, 475, 230)), \ |
| + EHT_DURATION_S(_s, _streams, _gi, \ |
| + EHT_BW2VBPS(_bw, 5880, 2937, 1468, 705, 345)), \ |
| + EHT_DURATION_S(_s, _streams, _gi, \ |
| + EHT_BW2VBPS(_bw, 7840, 3916, 1958, 936, 475)), \ |
| + EHT_DURATION_S(_s, _streams, _gi, \ |
| + EHT_BW2VBPS(_bw, 11760, 5875, 2937, 1411, 705)), \ |
| + EHT_DURATION_S(_s, _streams, _gi, \ |
| + EHT_BW2VBPS(_bw, 15680, 7833, 3916, 1872, 936)), \ |
| + EHT_DURATION_S(_s, _streams, _gi, \ |
| + EHT_BW2VBPS(_bw, 17640, 8827, 4406, 2102, 1051)), \ |
| + EHT_DURATION_S(_s, _streams, _gi, \ |
| + EHT_BW2VBPS(_bw, 19600, 9806, 4896, 2347, 1166)), \ |
| + EHT_DURATION_S(_s, _streams, _gi, \ |
| + EHT_BW2VBPS(_bw, 23520, 11764, 5875, 2808, 1411)), \ |
| + EHT_DURATION_S(_s, _streams, _gi, \ |
| + EHT_BW2VBPS(_bw, 26133, 13060, 6523, 3124, 1555)), \ |
| + EHT_DURATION_S(_s, _streams, _gi, \ |
| + EHT_BW2VBPS(_bw, 29400, 14702, 7344, 3513, 1756)), \ |
| + EHT_DURATION_S(_s, _streams, _gi, \ |
| + EHT_BW2VBPS(_bw, 32666, 16329, 8164, 3902, 1944)), \ |
| + EHT_DURATION_S(_s, _streams, _gi, \ |
| + EHT_BW2VBPS(_bw, 35280, 17640, 8820, 4212, 2106)), \ |
| + EHT_DURATION_S(_s, _streams, _gi, \ |
| + EHT_BW2VBPS(_bw, 39200, 19600, 9800, 4680, 2340)) \ |
| + } \ |
| +} |
| + |
| +#define EHT_GROUP_SHIFT(_streams, _gi, _bw) \ |
| + GROUP_SHIFT(EHT_DURATION(_streams, _gi, \ |
| + EHT_BW2VBPS(_bw, 1960, 979, 489, 230, 115))) |
| + |
| +#define EHT_GROUP(_streams, _gi, _bw) \ |
| + __EHT_GROUP(_streams, _gi, _bw, \ |
| + EHT_GROUP_SHIFT(_streams, _gi, _bw)) |
| + |
| struct mcs_group { |
| u8 shift; |
| u16 duration[MCS_GROUP_RATES]; |
| @@ -376,6 +449,262 @@ static const struct mcs_group airtime_mcs_groups[] = { |
| HE_GROUP(6, HE_GI_32, BW_160), |
| HE_GROUP(7, HE_GI_32, BW_160), |
| HE_GROUP(8, HE_GI_32, BW_160), |
| + |
| + /* EHT */ |
| + EHT_GROUP( 1, EHT_GI_08, BW_20), |
| + EHT_GROUP( 2, EHT_GI_08, BW_20), |
| + EHT_GROUP( 3, EHT_GI_08, BW_20), |
| + EHT_GROUP( 4, EHT_GI_08, BW_20), |
| + EHT_GROUP( 5, EHT_GI_08, BW_20), |
| + EHT_GROUP( 6, EHT_GI_08, BW_20), |
| + EHT_GROUP( 7, EHT_GI_08, BW_20), |
| + EHT_GROUP( 8, EHT_GI_08, BW_20), |
| + EHT_GROUP( 9, EHT_GI_08, BW_20), |
| + EHT_GROUP(10, EHT_GI_08, BW_20), |
| + EHT_GROUP(11, EHT_GI_08, BW_20), |
| + EHT_GROUP(12, EHT_GI_08, BW_20), |
| + EHT_GROUP(13, EHT_GI_08, BW_20), |
| + EHT_GROUP(14, EHT_GI_08, BW_20), |
| + EHT_GROUP(15, EHT_GI_08, BW_20), |
| + EHT_GROUP(16, EHT_GI_08, BW_20), |
| + |
| + EHT_GROUP( 1, EHT_GI_16, BW_20), |
| + EHT_GROUP( 2, EHT_GI_16, BW_20), |
| + EHT_GROUP( 3, EHT_GI_16, BW_20), |
| + EHT_GROUP( 4, EHT_GI_16, BW_20), |
| + EHT_GROUP( 5, EHT_GI_16, BW_20), |
| + EHT_GROUP( 6, EHT_GI_16, BW_20), |
| + EHT_GROUP( 7, EHT_GI_16, BW_20), |
| + EHT_GROUP( 8, EHT_GI_16, BW_20), |
| + EHT_GROUP( 9, EHT_GI_16, BW_20), |
| + EHT_GROUP(10, EHT_GI_16, BW_20), |
| + EHT_GROUP(11, EHT_GI_16, BW_20), |
| + EHT_GROUP(12, EHT_GI_16, BW_20), |
| + EHT_GROUP(13, EHT_GI_16, BW_20), |
| + EHT_GROUP(14, EHT_GI_16, BW_20), |
| + EHT_GROUP(15, EHT_GI_16, BW_20), |
| + EHT_GROUP(16, EHT_GI_16, BW_20), |
| + |
| + EHT_GROUP( 1, EHT_GI_32, BW_20), |
| + EHT_GROUP( 2, EHT_GI_32, BW_20), |
| + EHT_GROUP( 3, EHT_GI_32, BW_20), |
| + EHT_GROUP( 4, EHT_GI_32, BW_20), |
| + EHT_GROUP( 5, EHT_GI_32, BW_20), |
| + EHT_GROUP( 6, EHT_GI_32, BW_20), |
| + EHT_GROUP( 7, EHT_GI_32, BW_20), |
| + EHT_GROUP( 8, EHT_GI_32, BW_20), |
| + EHT_GROUP( 9, EHT_GI_32, BW_20), |
| + EHT_GROUP(10, EHT_GI_32, BW_20), |
| + EHT_GROUP(11, EHT_GI_32, BW_20), |
| + EHT_GROUP(12, EHT_GI_32, BW_20), |
| + EHT_GROUP(13, EHT_GI_32, BW_20), |
| + EHT_GROUP(14, EHT_GI_32, BW_20), |
| + EHT_GROUP(15, EHT_GI_32, BW_20), |
| + EHT_GROUP(16, EHT_GI_32, BW_20), |
| + |
| + EHT_GROUP( 1, EHT_GI_08, BW_40), |
| + EHT_GROUP( 2, EHT_GI_08, BW_40), |
| + EHT_GROUP( 3, EHT_GI_08, BW_40), |
| + EHT_GROUP( 4, EHT_GI_08, BW_40), |
| + EHT_GROUP( 5, EHT_GI_08, BW_40), |
| + EHT_GROUP( 6, EHT_GI_08, BW_40), |
| + EHT_GROUP( 7, EHT_GI_08, BW_40), |
| + EHT_GROUP( 8, EHT_GI_08, BW_40), |
| + EHT_GROUP( 9, EHT_GI_08, BW_40), |
| + EHT_GROUP(10, EHT_GI_08, BW_40), |
| + EHT_GROUP(11, EHT_GI_08, BW_40), |
| + EHT_GROUP(12, EHT_GI_08, BW_40), |
| + EHT_GROUP(13, EHT_GI_08, BW_40), |
| + EHT_GROUP(14, EHT_GI_08, BW_40), |
| + EHT_GROUP(15, EHT_GI_08, BW_40), |
| + EHT_GROUP(16, EHT_GI_08, BW_40), |
| + |
| + EHT_GROUP( 1, EHT_GI_16, BW_40), |
| + EHT_GROUP( 2, EHT_GI_16, BW_40), |
| + EHT_GROUP( 3, EHT_GI_16, BW_40), |
| + EHT_GROUP( 4, EHT_GI_16, BW_40), |
| + EHT_GROUP( 5, EHT_GI_16, BW_40), |
| + EHT_GROUP( 6, EHT_GI_16, BW_40), |
| + EHT_GROUP( 7, EHT_GI_16, BW_40), |
| + EHT_GROUP( 8, EHT_GI_16, BW_40), |
| + EHT_GROUP( 9, EHT_GI_16, BW_40), |
| + EHT_GROUP(10, EHT_GI_16, BW_40), |
| + EHT_GROUP(11, EHT_GI_16, BW_40), |
| + EHT_GROUP(12, EHT_GI_16, BW_40), |
| + EHT_GROUP(13, EHT_GI_16, BW_40), |
| + EHT_GROUP(14, EHT_GI_16, BW_40), |
| + EHT_GROUP(15, EHT_GI_16, BW_40), |
| + EHT_GROUP(16, EHT_GI_16, BW_40), |
| + |
| + EHT_GROUP( 1, EHT_GI_32, BW_40), |
| + EHT_GROUP( 2, EHT_GI_32, BW_40), |
| + EHT_GROUP( 3, EHT_GI_32, BW_40), |
| + EHT_GROUP( 4, EHT_GI_32, BW_40), |
| + EHT_GROUP( 5, EHT_GI_32, BW_40), |
| + EHT_GROUP( 6, EHT_GI_32, BW_40), |
| + EHT_GROUP( 7, EHT_GI_32, BW_40), |
| + EHT_GROUP( 8, EHT_GI_32, BW_40), |
| + EHT_GROUP( 9, EHT_GI_32, BW_40), |
| + EHT_GROUP(10, EHT_GI_32, BW_40), |
| + EHT_GROUP(11, EHT_GI_32, BW_40), |
| + EHT_GROUP(12, EHT_GI_32, BW_40), |
| + EHT_GROUP(13, EHT_GI_32, BW_40), |
| + EHT_GROUP(14, EHT_GI_32, BW_40), |
| + EHT_GROUP(15, EHT_GI_32, BW_40), |
| + EHT_GROUP(16, EHT_GI_32, BW_40), |
| + |
| + EHT_GROUP( 1, EHT_GI_08, BW_80), |
| + EHT_GROUP( 2, EHT_GI_08, BW_80), |
| + EHT_GROUP( 3, EHT_GI_08, BW_80), |
| + EHT_GROUP( 4, EHT_GI_08, BW_80), |
| + EHT_GROUP( 5, EHT_GI_08, BW_80), |
| + EHT_GROUP( 6, EHT_GI_08, BW_80), |
| + EHT_GROUP( 7, EHT_GI_08, BW_80), |
| + EHT_GROUP( 8, EHT_GI_08, BW_80), |
| + EHT_GROUP( 9, EHT_GI_08, BW_80), |
| + EHT_GROUP(10, EHT_GI_08, BW_80), |
| + EHT_GROUP(11, EHT_GI_08, BW_80), |
| + EHT_GROUP(12, EHT_GI_08, BW_80), |
| + EHT_GROUP(13, EHT_GI_08, BW_80), |
| + EHT_GROUP(14, EHT_GI_08, BW_80), |
| + EHT_GROUP(15, EHT_GI_08, BW_80), |
| + EHT_GROUP(16, EHT_GI_08, BW_80), |
| + |
| + EHT_GROUP( 1, EHT_GI_16, BW_80), |
| + EHT_GROUP( 2, EHT_GI_16, BW_80), |
| + EHT_GROUP( 3, EHT_GI_16, BW_80), |
| + EHT_GROUP( 4, EHT_GI_16, BW_80), |
| + EHT_GROUP( 5, EHT_GI_16, BW_80), |
| + EHT_GROUP( 6, EHT_GI_16, BW_80), |
| + EHT_GROUP( 7, EHT_GI_16, BW_80), |
| + EHT_GROUP( 8, EHT_GI_16, BW_80), |
| + EHT_GROUP( 9, EHT_GI_16, BW_80), |
| + EHT_GROUP(10, EHT_GI_16, BW_80), |
| + EHT_GROUP(11, EHT_GI_16, BW_80), |
| + EHT_GROUP(12, EHT_GI_16, BW_80), |
| + EHT_GROUP(13, EHT_GI_16, BW_80), |
| + EHT_GROUP(14, EHT_GI_16, BW_80), |
| + EHT_GROUP(15, EHT_GI_16, BW_80), |
| + EHT_GROUP(16, EHT_GI_16, BW_80), |
| + |
| + EHT_GROUP( 1, EHT_GI_32, BW_80), |
| + EHT_GROUP( 2, EHT_GI_32, BW_80), |
| + EHT_GROUP( 3, EHT_GI_32, BW_80), |
| + EHT_GROUP( 4, EHT_GI_32, BW_80), |
| + EHT_GROUP( 5, EHT_GI_32, BW_80), |
| + EHT_GROUP( 6, EHT_GI_32, BW_80), |
| + EHT_GROUP( 7, EHT_GI_32, BW_80), |
| + EHT_GROUP( 8, EHT_GI_32, BW_80), |
| + EHT_GROUP( 9, EHT_GI_32, BW_80), |
| + EHT_GROUP(10, EHT_GI_32, BW_80), |
| + EHT_GROUP(11, EHT_GI_32, BW_80), |
| + EHT_GROUP(12, EHT_GI_32, BW_80), |
| + EHT_GROUP(13, EHT_GI_32, BW_80), |
| + EHT_GROUP(14, EHT_GI_32, BW_80), |
| + EHT_GROUP(15, EHT_GI_32, BW_80), |
| + EHT_GROUP(16, EHT_GI_32, BW_80), |
| + |
| + EHT_GROUP( 1, EHT_GI_08, BW_160), |
| + EHT_GROUP( 2, EHT_GI_08, BW_160), |
| + EHT_GROUP( 3, EHT_GI_08, BW_160), |
| + EHT_GROUP( 4, EHT_GI_08, BW_160), |
| + EHT_GROUP( 5, EHT_GI_08, BW_160), |
| + EHT_GROUP( 6, EHT_GI_08, BW_160), |
| + EHT_GROUP( 7, EHT_GI_08, BW_160), |
| + EHT_GROUP( 8, EHT_GI_08, BW_160), |
| + EHT_GROUP( 9, EHT_GI_08, BW_160), |
| + EHT_GROUP(10, EHT_GI_08, BW_160), |
| + EHT_GROUP(11, EHT_GI_08, BW_160), |
| + EHT_GROUP(12, EHT_GI_08, BW_160), |
| + EHT_GROUP(13, EHT_GI_08, BW_160), |
| + EHT_GROUP(14, EHT_GI_08, BW_160), |
| + EHT_GROUP(15, EHT_GI_08, BW_160), |
| + EHT_GROUP(16, EHT_GI_08, BW_160), |
| + |
| + EHT_GROUP( 1, EHT_GI_16, BW_160), |
| + EHT_GROUP( 2, EHT_GI_16, BW_160), |
| + EHT_GROUP( 3, EHT_GI_16, BW_160), |
| + EHT_GROUP( 4, EHT_GI_16, BW_160), |
| + EHT_GROUP( 5, EHT_GI_16, BW_160), |
| + EHT_GROUP( 6, EHT_GI_16, BW_160), |
| + EHT_GROUP( 7, EHT_GI_16, BW_160), |
| + EHT_GROUP( 8, EHT_GI_16, BW_160), |
| + EHT_GROUP( 9, EHT_GI_16, BW_160), |
| + EHT_GROUP(10, EHT_GI_16, BW_160), |
| + EHT_GROUP(11, EHT_GI_16, BW_160), |
| + EHT_GROUP(12, EHT_GI_16, BW_160), |
| + EHT_GROUP(13, EHT_GI_16, BW_160), |
| + EHT_GROUP(14, EHT_GI_16, BW_160), |
| + EHT_GROUP(15, EHT_GI_16, BW_160), |
| + EHT_GROUP(16, EHT_GI_16, BW_160), |
| + |
| + EHT_GROUP( 1, EHT_GI_32, BW_160), |
| + EHT_GROUP( 2, EHT_GI_32, BW_160), |
| + EHT_GROUP( 3, EHT_GI_32, BW_160), |
| + EHT_GROUP( 4, EHT_GI_32, BW_160), |
| + EHT_GROUP( 5, EHT_GI_32, BW_160), |
| + EHT_GROUP( 6, EHT_GI_32, BW_160), |
| + EHT_GROUP( 7, EHT_GI_32, BW_160), |
| + EHT_GROUP( 8, EHT_GI_32, BW_160), |
| + EHT_GROUP( 9, EHT_GI_32, BW_160), |
| + EHT_GROUP(10, EHT_GI_32, BW_160), |
| + EHT_GROUP(11, EHT_GI_32, BW_160), |
| + EHT_GROUP(12, EHT_GI_32, BW_160), |
| + EHT_GROUP(13, EHT_GI_32, BW_160), |
| + EHT_GROUP(14, EHT_GI_32, BW_160), |
| + EHT_GROUP(15, EHT_GI_32, BW_160), |
| + EHT_GROUP(16, EHT_GI_32, BW_160), |
| + |
| + EHT_GROUP( 1, EHT_GI_08, BW_320), |
| + EHT_GROUP( 2, EHT_GI_08, BW_320), |
| + EHT_GROUP( 3, EHT_GI_08, BW_320), |
| + EHT_GROUP( 4, EHT_GI_08, BW_320), |
| + EHT_GROUP( 5, EHT_GI_08, BW_320), |
| + EHT_GROUP( 6, EHT_GI_08, BW_320), |
| + EHT_GROUP( 7, EHT_GI_08, BW_320), |
| + EHT_GROUP( 8, EHT_GI_08, BW_320), |
| + EHT_GROUP( 9, EHT_GI_08, BW_320), |
| + EHT_GROUP(10, EHT_GI_08, BW_320), |
| + EHT_GROUP(11, EHT_GI_08, BW_320), |
| + EHT_GROUP(12, EHT_GI_08, BW_320), |
| + EHT_GROUP(13, EHT_GI_08, BW_320), |
| + EHT_GROUP(14, EHT_GI_08, BW_320), |
| + EHT_GROUP(15, EHT_GI_08, BW_320), |
| + EHT_GROUP(16, EHT_GI_08, BW_320), |
| + |
| + EHT_GROUP( 1, EHT_GI_16, BW_320), |
| + EHT_GROUP( 2, EHT_GI_16, BW_320), |
| + EHT_GROUP( 3, EHT_GI_16, BW_320), |
| + EHT_GROUP( 4, EHT_GI_16, BW_320), |
| + EHT_GROUP( 5, EHT_GI_16, BW_320), |
| + EHT_GROUP( 6, EHT_GI_16, BW_320), |
| + EHT_GROUP( 7, EHT_GI_16, BW_320), |
| + EHT_GROUP( 8, EHT_GI_16, BW_320), |
| + EHT_GROUP( 9, EHT_GI_16, BW_320), |
| + EHT_GROUP(10, EHT_GI_16, BW_320), |
| + EHT_GROUP(11, EHT_GI_16, BW_320), |
| + EHT_GROUP(12, EHT_GI_16, BW_320), |
| + EHT_GROUP(13, EHT_GI_16, BW_320), |
| + EHT_GROUP(14, EHT_GI_16, BW_320), |
| + EHT_GROUP(15, EHT_GI_16, BW_320), |
| + EHT_GROUP(16, EHT_GI_16, BW_320), |
| + |
| + EHT_GROUP( 1, EHT_GI_32, BW_320), |
| + EHT_GROUP( 2, EHT_GI_32, BW_320), |
| + EHT_GROUP( 3, EHT_GI_32, BW_320), |
| + EHT_GROUP( 4, EHT_GI_32, BW_320), |
| + EHT_GROUP( 5, EHT_GI_32, BW_320), |
| + EHT_GROUP( 6, EHT_GI_32, BW_320), |
| + EHT_GROUP( 7, EHT_GI_32, BW_320), |
| + EHT_GROUP( 8, EHT_GI_32, BW_320), |
| + EHT_GROUP( 9, EHT_GI_32, BW_320), |
| + EHT_GROUP(10, EHT_GI_32, BW_320), |
| + EHT_GROUP(11, EHT_GI_32, BW_320), |
| + EHT_GROUP(12, EHT_GI_32, BW_320), |
| + EHT_GROUP(13, EHT_GI_32, BW_320), |
| + EHT_GROUP(14, EHT_GI_32, BW_320), |
| + EHT_GROUP(15, EHT_GI_32, BW_320), |
| + EHT_GROUP(16, EHT_GI_32, BW_320), |
| }; |
| |
| static u32 |
| @@ -422,6 +751,9 @@ static u32 ieee80211_get_rate_duration(struct ieee80211_hw *hw, |
| case RATE_INFO_BW_160: |
| bw = BW_160; |
| break; |
| + case RATE_INFO_BW_320: |
| + bw = BW_320; |
| + break; |
| default: |
| WARN_ON_ONCE(1); |
| return 0; |
| @@ -443,11 +775,20 @@ static u32 ieee80211_get_rate_duration(struct ieee80211_hw *hw, |
| idx = status->rate_idx; |
| group = HE_GROUP_IDX(streams, status->he_gi, bw); |
| break; |
| + case RX_ENC_EHT: |
| + streams = status->nss; |
| + idx = status->rate_idx; |
| + group = EHT_GROUP_IDX(streams, status->he_gi, bw); |
| + break; |
| default: |
| WARN_ON_ONCE(1); |
| return 0; |
| } |
| |
| + if (WARN_ON_ONCE((status->encoding != RX_ENC_EHT && streams > 8) || |
| + (status->encoding == RX_ENC_EHT && streams > 16))) |
| + return 0; |
| + |
| if (WARN_ON_ONCE((status->encoding != RX_ENC_HE && streams > 4) || |
| (status->encoding == RX_ENC_HE && streams > 8))) |
| return 0; |
| @@ -517,7 +858,9 @@ static bool ieee80211_fill_rate_info(struct ieee80211_hw *hw, |
| stat->nss = ri->nss; |
| stat->rate_idx = ri->mcs; |
| |
| - if (ri->flags & RATE_INFO_FLAGS_HE_MCS) |
| + if (ri->flags & RATE_INFO_FLAGS_EHT_MCS) |
| + stat->encoding = RX_ENC_EHT; |
| + else if (ri->flags & RATE_INFO_FLAGS_HE_MCS) |
| stat->encoding = RX_ENC_HE; |
| else if (ri->flags & RATE_INFO_FLAGS_VHT_MCS) |
| stat->encoding = RX_ENC_VHT; |
| @@ -529,7 +872,7 @@ static bool ieee80211_fill_rate_info(struct ieee80211_hw *hw, |
| if (ri->flags & RATE_INFO_FLAGS_SHORT_GI) |
| stat->enc_flags |= RX_ENC_FLAG_SHORT_GI; |
| |
| - stat->he_gi = ri->he_gi; |
| + stat->he_gi = (ri->flags & RATE_INFO_FLAGS_EHT_MCS) ? ri->eht_gi : ri->he_gi; |
| |
| if (stat->encoding != RX_ENC_LEGACY) |
| return true; |
| -- |
| 2.18.0 |
| |