blob: 27ed002f49937bb3e381a2181e92a1d3de373775 [file] [log] [blame]
developer8eb72a32023-03-30 08:32:07 +08001From a1d426d8bb909612b66c31d450fd717177862d2f Mon Sep 17 00:00:00 2001
developer1413c882023-02-15 00:01:06 +08002From: Bo Jiao <Bo.Jiao@mediatek.com>
developer3e0400f2023-02-10 08:32:03 +08003Date: Sun, 25 Dec 2022 22:43:46 +0800
developer8eb72a32023-03-30 08:32:07 +08004Subject: [PATCH 101/102] mac80211: mtk: add rate duration for EHT rate.
developer3e0400f2023-02-10 08:32:03 +08005
6---
developer3e0400f2023-02-10 08:32:03 +08007 net/mac80211/airtime.c | 349 ++++++++++++++++++++++++++++++++++++++++-
developer1413c882023-02-15 00:01:06 +08008 1 file changed, 346 insertions(+), 3 deletions(-)
developer3e0400f2023-02-10 08:32:03 +08009
developer3e0400f2023-02-10 08:32:03 +080010diff --git a/net/mac80211/airtime.c b/net/mac80211/airtime.c
11index e8ebd34..b1de6d0 100644
12--- a/net/mac80211/airtime.c
13+++ b/net/mac80211/airtime.c
14@@ -55,10 +55,21 @@
15 #define HE_DURATION_S(shift, streams, gi, bps) \
16 (HE_DURATION(streams, gi, bps) >> shift)
17
18+/* Transmit duration for the raw data part of an average sized packet */
19+#define EHT_GI_08 HE_GI_08
20+#define EHT_GI_16 HE_GI_16
21+#define EHT_GI_32 HE_GI_32
22+
23+#define EHT_DURATION(streams, gi, bps) \
24+ HE_DURATION(streams, gi, bps)
25+#define EHT_DURATION_S(shift, streams, gi, bps) \
26+ HE_DURATION_S(shift, streams, gi, bps)
27+
28 #define BW_20 0
29 #define BW_40 1
30 #define BW_80 2
31 #define BW_160 3
32+#define BW_320 4
33
34 /*
35 * Define group sort order: HT40 -> SGI -> #streams
36@@ -68,17 +79,26 @@
37 #define IEEE80211_VHT_STREAM_GROUPS 8 /* BW(=4) * SGI(=2) */
38
39 #define IEEE80211_HE_MAX_STREAMS 8
40+#define IEEE80211_HE_STREAM_GROUPS 12 /* BW(=4) * GI(=3) */
41+
42+#define IEEE80211_EHT_MAX_STREAMS 16
43+#define IEEE80211_EHT_STREAM_GROUPS 15 /* BW(=5) * GI(=3) */
44
45 #define IEEE80211_HT_GROUPS_NB (IEEE80211_MAX_STREAMS * \
46 IEEE80211_HT_STREAM_GROUPS)
47 #define IEEE80211_VHT_GROUPS_NB (IEEE80211_MAX_STREAMS * \
48 IEEE80211_VHT_STREAM_GROUPS)
49+#define IEEE80211_HE_GROUPS_NB (IEEE80211_HE_MAX_STREAMS * \
50+ IEEE80211_HE_STREAM_GROUPS)
51+#define IEEE80211_EHT_GROUPS_NB (IEEE80211_EHT_MAX_STREAMS * \
52+ IEEE80211_EHT_STREAM_GROUPS)
53
54 #define IEEE80211_HT_GROUP_0 0
55 #define IEEE80211_VHT_GROUP_0 (IEEE80211_HT_GROUP_0 + IEEE80211_HT_GROUPS_NB)
56 #define IEEE80211_HE_GROUP_0 (IEEE80211_VHT_GROUP_0 + IEEE80211_VHT_GROUPS_NB)
57+#define IEEE80211_EHT_GROUP_0 (IEEE80211_HE_GROUP_0 + IEEE80211_HE_GROUPS_NB)
58
59-#define MCS_GROUP_RATES 12
60+#define MCS_GROUP_RATES 14
61
62 #define HT_GROUP_IDX(_streams, _sgi, _ht40) \
63 IEEE80211_HT_GROUP_0 + \
64@@ -203,6 +223,59 @@
65 #define HE_GROUP(_streams, _gi, _bw) \
66 __HE_GROUP(_streams, _gi, _bw, \
67 HE_GROUP_SHIFT(_streams, _gi, _bw))
68+
69+#define EHT_BW2VBPS(_bw, r5, r4, r3, r2, r1) \
70+ (_bw == BW_320 ? r5 : _bw == BW_160 ? r4 : _bw == BW_80 ? r3 : _bw == BW_40 ? r2 : r1)
71+
72+#define EHT_GROUP_IDX(_streams, _gi, _bw) \
73+ (IEEE80211_EHT_GROUP_0 + \
74+ IEEE80211_EHT_MAX_STREAMS * 3 * (_bw) + \
75+ IEEE80211_EHT_MAX_STREAMS * (_gi) + \
76+ (_streams) - 1)
77+
78+#define __EHT_GROUP(_streams, _gi, _bw, _s) \
79+ [EHT_GROUP_IDX(_streams, _gi, _bw)] = { \
80+ .shift = _s, \
81+ .duration = { \
82+ EHT_DURATION_S(_s, _streams, _gi, \
83+ EHT_BW2VBPS(_bw, 1960, 979, 489, 230, 115)), \
84+ EHT_DURATION_S(_s, _streams, _gi, \
85+ EHT_BW2VBPS(_bw, 3920, 1958, 979, 475, 230)), \
86+ EHT_DURATION_S(_s, _streams, _gi, \
87+ EHT_BW2VBPS(_bw, 5880, 2937, 1468, 705, 345)), \
88+ EHT_DURATION_S(_s, _streams, _gi, \
89+ EHT_BW2VBPS(_bw, 7840, 3916, 1958, 936, 475)), \
90+ EHT_DURATION_S(_s, _streams, _gi, \
91+ EHT_BW2VBPS(_bw, 11760, 5875, 2937, 1411, 705)), \
92+ EHT_DURATION_S(_s, _streams, _gi, \
93+ EHT_BW2VBPS(_bw, 15680, 7833, 3916, 1872, 936)), \
94+ EHT_DURATION_S(_s, _streams, _gi, \
95+ EHT_BW2VBPS(_bw, 17640, 8827, 4406, 2102, 1051)), \
96+ EHT_DURATION_S(_s, _streams, _gi, \
97+ EHT_BW2VBPS(_bw, 19600, 9806, 4896, 2347, 1166)), \
98+ EHT_DURATION_S(_s, _streams, _gi, \
99+ EHT_BW2VBPS(_bw, 23520, 11764, 5875, 2808, 1411)), \
100+ EHT_DURATION_S(_s, _streams, _gi, \
101+ EHT_BW2VBPS(_bw, 26133, 13060, 6523, 3124, 1555)), \
102+ EHT_DURATION_S(_s, _streams, _gi, \
103+ EHT_BW2VBPS(_bw, 29400, 14702, 7344, 3513, 1756)), \
104+ EHT_DURATION_S(_s, _streams, _gi, \
105+ EHT_BW2VBPS(_bw, 32666, 16329, 8164, 3902, 1944)), \
106+ EHT_DURATION_S(_s, _streams, _gi, \
107+ EHT_BW2VBPS(_bw, 35280, 17640, 8820, 4212, 2106)), \
108+ EHT_DURATION_S(_s, _streams, _gi, \
109+ EHT_BW2VBPS(_bw, 39200, 19600, 9800, 4680, 2340)) \
110+ } \
111+}
112+
113+#define EHT_GROUP_SHIFT(_streams, _gi, _bw) \
114+ GROUP_SHIFT(EHT_DURATION(_streams, _gi, \
115+ EHT_BW2VBPS(_bw, 1960, 979, 489, 230, 115)))
116+
117+#define EHT_GROUP(_streams, _gi, _bw) \
118+ __EHT_GROUP(_streams, _gi, _bw, \
119+ EHT_GROUP_SHIFT(_streams, _gi, _bw))
120+
121 struct mcs_group {
122 u8 shift;
123 u16 duration[MCS_GROUP_RATES];
124@@ -376,6 +449,262 @@ static const struct mcs_group airtime_mcs_groups[] = {
125 HE_GROUP(6, HE_GI_32, BW_160),
126 HE_GROUP(7, HE_GI_32, BW_160),
127 HE_GROUP(8, HE_GI_32, BW_160),
128+
129+ /* EHT */
130+ EHT_GROUP( 1, EHT_GI_08, BW_20),
131+ EHT_GROUP( 2, EHT_GI_08, BW_20),
132+ EHT_GROUP( 3, EHT_GI_08, BW_20),
133+ EHT_GROUP( 4, EHT_GI_08, BW_20),
134+ EHT_GROUP( 5, EHT_GI_08, BW_20),
135+ EHT_GROUP( 6, EHT_GI_08, BW_20),
136+ EHT_GROUP( 7, EHT_GI_08, BW_20),
137+ EHT_GROUP( 8, EHT_GI_08, BW_20),
138+ EHT_GROUP( 9, EHT_GI_08, BW_20),
139+ EHT_GROUP(10, EHT_GI_08, BW_20),
140+ EHT_GROUP(11, EHT_GI_08, BW_20),
141+ EHT_GROUP(12, EHT_GI_08, BW_20),
142+ EHT_GROUP(13, EHT_GI_08, BW_20),
143+ EHT_GROUP(14, EHT_GI_08, BW_20),
144+ EHT_GROUP(15, EHT_GI_08, BW_20),
145+ EHT_GROUP(16, EHT_GI_08, BW_20),
146+
147+ EHT_GROUP( 1, EHT_GI_16, BW_20),
148+ EHT_GROUP( 2, EHT_GI_16, BW_20),
149+ EHT_GROUP( 3, EHT_GI_16, BW_20),
150+ EHT_GROUP( 4, EHT_GI_16, BW_20),
151+ EHT_GROUP( 5, EHT_GI_16, BW_20),
152+ EHT_GROUP( 6, EHT_GI_16, BW_20),
153+ EHT_GROUP( 7, EHT_GI_16, BW_20),
154+ EHT_GROUP( 8, EHT_GI_16, BW_20),
155+ EHT_GROUP( 9, EHT_GI_16, BW_20),
156+ EHT_GROUP(10, EHT_GI_16, BW_20),
157+ EHT_GROUP(11, EHT_GI_16, BW_20),
158+ EHT_GROUP(12, EHT_GI_16, BW_20),
159+ EHT_GROUP(13, EHT_GI_16, BW_20),
160+ EHT_GROUP(14, EHT_GI_16, BW_20),
161+ EHT_GROUP(15, EHT_GI_16, BW_20),
162+ EHT_GROUP(16, EHT_GI_16, BW_20),
163+
164+ EHT_GROUP( 1, EHT_GI_32, BW_20),
165+ EHT_GROUP( 2, EHT_GI_32, BW_20),
166+ EHT_GROUP( 3, EHT_GI_32, BW_20),
167+ EHT_GROUP( 4, EHT_GI_32, BW_20),
168+ EHT_GROUP( 5, EHT_GI_32, BW_20),
169+ EHT_GROUP( 6, EHT_GI_32, BW_20),
170+ EHT_GROUP( 7, EHT_GI_32, BW_20),
171+ EHT_GROUP( 8, EHT_GI_32, BW_20),
172+ EHT_GROUP( 9, EHT_GI_32, BW_20),
173+ EHT_GROUP(10, EHT_GI_32, BW_20),
174+ EHT_GROUP(11, EHT_GI_32, BW_20),
175+ EHT_GROUP(12, EHT_GI_32, BW_20),
176+ EHT_GROUP(13, EHT_GI_32, BW_20),
177+ EHT_GROUP(14, EHT_GI_32, BW_20),
178+ EHT_GROUP(15, EHT_GI_32, BW_20),
179+ EHT_GROUP(16, EHT_GI_32, BW_20),
180+
181+ EHT_GROUP( 1, EHT_GI_08, BW_40),
182+ EHT_GROUP( 2, EHT_GI_08, BW_40),
183+ EHT_GROUP( 3, EHT_GI_08, BW_40),
184+ EHT_GROUP( 4, EHT_GI_08, BW_40),
185+ EHT_GROUP( 5, EHT_GI_08, BW_40),
186+ EHT_GROUP( 6, EHT_GI_08, BW_40),
187+ EHT_GROUP( 7, EHT_GI_08, BW_40),
188+ EHT_GROUP( 8, EHT_GI_08, BW_40),
189+ EHT_GROUP( 9, EHT_GI_08, BW_40),
190+ EHT_GROUP(10, EHT_GI_08, BW_40),
191+ EHT_GROUP(11, EHT_GI_08, BW_40),
192+ EHT_GROUP(12, EHT_GI_08, BW_40),
193+ EHT_GROUP(13, EHT_GI_08, BW_40),
194+ EHT_GROUP(14, EHT_GI_08, BW_40),
195+ EHT_GROUP(15, EHT_GI_08, BW_40),
196+ EHT_GROUP(16, EHT_GI_08, BW_40),
197+
198+ EHT_GROUP( 1, EHT_GI_16, BW_40),
199+ EHT_GROUP( 2, EHT_GI_16, BW_40),
200+ EHT_GROUP( 3, EHT_GI_16, BW_40),
201+ EHT_GROUP( 4, EHT_GI_16, BW_40),
202+ EHT_GROUP( 5, EHT_GI_16, BW_40),
203+ EHT_GROUP( 6, EHT_GI_16, BW_40),
204+ EHT_GROUP( 7, EHT_GI_16, BW_40),
205+ EHT_GROUP( 8, EHT_GI_16, BW_40),
206+ EHT_GROUP( 9, EHT_GI_16, BW_40),
207+ EHT_GROUP(10, EHT_GI_16, BW_40),
208+ EHT_GROUP(11, EHT_GI_16, BW_40),
209+ EHT_GROUP(12, EHT_GI_16, BW_40),
210+ EHT_GROUP(13, EHT_GI_16, BW_40),
211+ EHT_GROUP(14, EHT_GI_16, BW_40),
212+ EHT_GROUP(15, EHT_GI_16, BW_40),
213+ EHT_GROUP(16, EHT_GI_16, BW_40),
214+
215+ EHT_GROUP( 1, EHT_GI_32, BW_40),
216+ EHT_GROUP( 2, EHT_GI_32, BW_40),
217+ EHT_GROUP( 3, EHT_GI_32, BW_40),
218+ EHT_GROUP( 4, EHT_GI_32, BW_40),
219+ EHT_GROUP( 5, EHT_GI_32, BW_40),
220+ EHT_GROUP( 6, EHT_GI_32, BW_40),
221+ EHT_GROUP( 7, EHT_GI_32, BW_40),
222+ EHT_GROUP( 8, EHT_GI_32, BW_40),
223+ EHT_GROUP( 9, EHT_GI_32, BW_40),
224+ EHT_GROUP(10, EHT_GI_32, BW_40),
225+ EHT_GROUP(11, EHT_GI_32, BW_40),
226+ EHT_GROUP(12, EHT_GI_32, BW_40),
227+ EHT_GROUP(13, EHT_GI_32, BW_40),
228+ EHT_GROUP(14, EHT_GI_32, BW_40),
229+ EHT_GROUP(15, EHT_GI_32, BW_40),
230+ EHT_GROUP(16, EHT_GI_32, BW_40),
231+
232+ EHT_GROUP( 1, EHT_GI_08, BW_80),
233+ EHT_GROUP( 2, EHT_GI_08, BW_80),
234+ EHT_GROUP( 3, EHT_GI_08, BW_80),
235+ EHT_GROUP( 4, EHT_GI_08, BW_80),
236+ EHT_GROUP( 5, EHT_GI_08, BW_80),
237+ EHT_GROUP( 6, EHT_GI_08, BW_80),
238+ EHT_GROUP( 7, EHT_GI_08, BW_80),
239+ EHT_GROUP( 8, EHT_GI_08, BW_80),
240+ EHT_GROUP( 9, EHT_GI_08, BW_80),
241+ EHT_GROUP(10, EHT_GI_08, BW_80),
242+ EHT_GROUP(11, EHT_GI_08, BW_80),
243+ EHT_GROUP(12, EHT_GI_08, BW_80),
244+ EHT_GROUP(13, EHT_GI_08, BW_80),
245+ EHT_GROUP(14, EHT_GI_08, BW_80),
246+ EHT_GROUP(15, EHT_GI_08, BW_80),
247+ EHT_GROUP(16, EHT_GI_08, BW_80),
248+
249+ EHT_GROUP( 1, EHT_GI_16, BW_80),
250+ EHT_GROUP( 2, EHT_GI_16, BW_80),
251+ EHT_GROUP( 3, EHT_GI_16, BW_80),
252+ EHT_GROUP( 4, EHT_GI_16, BW_80),
253+ EHT_GROUP( 5, EHT_GI_16, BW_80),
254+ EHT_GROUP( 6, EHT_GI_16, BW_80),
255+ EHT_GROUP( 7, EHT_GI_16, BW_80),
256+ EHT_GROUP( 8, EHT_GI_16, BW_80),
257+ EHT_GROUP( 9, EHT_GI_16, BW_80),
258+ EHT_GROUP(10, EHT_GI_16, BW_80),
259+ EHT_GROUP(11, EHT_GI_16, BW_80),
260+ EHT_GROUP(12, EHT_GI_16, BW_80),
261+ EHT_GROUP(13, EHT_GI_16, BW_80),
262+ EHT_GROUP(14, EHT_GI_16, BW_80),
263+ EHT_GROUP(15, EHT_GI_16, BW_80),
264+ EHT_GROUP(16, EHT_GI_16, BW_80),
265+
266+ EHT_GROUP( 1, EHT_GI_32, BW_80),
267+ EHT_GROUP( 2, EHT_GI_32, BW_80),
268+ EHT_GROUP( 3, EHT_GI_32, BW_80),
269+ EHT_GROUP( 4, EHT_GI_32, BW_80),
270+ EHT_GROUP( 5, EHT_GI_32, BW_80),
271+ EHT_GROUP( 6, EHT_GI_32, BW_80),
272+ EHT_GROUP( 7, EHT_GI_32, BW_80),
273+ EHT_GROUP( 8, EHT_GI_32, BW_80),
274+ EHT_GROUP( 9, EHT_GI_32, BW_80),
275+ EHT_GROUP(10, EHT_GI_32, BW_80),
276+ EHT_GROUP(11, EHT_GI_32, BW_80),
277+ EHT_GROUP(12, EHT_GI_32, BW_80),
278+ EHT_GROUP(13, EHT_GI_32, BW_80),
279+ EHT_GROUP(14, EHT_GI_32, BW_80),
280+ EHT_GROUP(15, EHT_GI_32, BW_80),
281+ EHT_GROUP(16, EHT_GI_32, BW_80),
282+
283+ EHT_GROUP( 1, EHT_GI_08, BW_160),
284+ EHT_GROUP( 2, EHT_GI_08, BW_160),
285+ EHT_GROUP( 3, EHT_GI_08, BW_160),
286+ EHT_GROUP( 4, EHT_GI_08, BW_160),
287+ EHT_GROUP( 5, EHT_GI_08, BW_160),
288+ EHT_GROUP( 6, EHT_GI_08, BW_160),
289+ EHT_GROUP( 7, EHT_GI_08, BW_160),
290+ EHT_GROUP( 8, EHT_GI_08, BW_160),
291+ EHT_GROUP( 9, EHT_GI_08, BW_160),
292+ EHT_GROUP(10, EHT_GI_08, BW_160),
293+ EHT_GROUP(11, EHT_GI_08, BW_160),
294+ EHT_GROUP(12, EHT_GI_08, BW_160),
295+ EHT_GROUP(13, EHT_GI_08, BW_160),
296+ EHT_GROUP(14, EHT_GI_08, BW_160),
297+ EHT_GROUP(15, EHT_GI_08, BW_160),
298+ EHT_GROUP(16, EHT_GI_08, BW_160),
299+
300+ EHT_GROUP( 1, EHT_GI_16, BW_160),
301+ EHT_GROUP( 2, EHT_GI_16, BW_160),
302+ EHT_GROUP( 3, EHT_GI_16, BW_160),
303+ EHT_GROUP( 4, EHT_GI_16, BW_160),
304+ EHT_GROUP( 5, EHT_GI_16, BW_160),
305+ EHT_GROUP( 6, EHT_GI_16, BW_160),
306+ EHT_GROUP( 7, EHT_GI_16, BW_160),
307+ EHT_GROUP( 8, EHT_GI_16, BW_160),
308+ EHT_GROUP( 9, EHT_GI_16, BW_160),
309+ EHT_GROUP(10, EHT_GI_16, BW_160),
310+ EHT_GROUP(11, EHT_GI_16, BW_160),
311+ EHT_GROUP(12, EHT_GI_16, BW_160),
312+ EHT_GROUP(13, EHT_GI_16, BW_160),
313+ EHT_GROUP(14, EHT_GI_16, BW_160),
314+ EHT_GROUP(15, EHT_GI_16, BW_160),
315+ EHT_GROUP(16, EHT_GI_16, BW_160),
316+
317+ EHT_GROUP( 1, EHT_GI_32, BW_160),
318+ EHT_GROUP( 2, EHT_GI_32, BW_160),
319+ EHT_GROUP( 3, EHT_GI_32, BW_160),
320+ EHT_GROUP( 4, EHT_GI_32, BW_160),
321+ EHT_GROUP( 5, EHT_GI_32, BW_160),
322+ EHT_GROUP( 6, EHT_GI_32, BW_160),
323+ EHT_GROUP( 7, EHT_GI_32, BW_160),
324+ EHT_GROUP( 8, EHT_GI_32, BW_160),
325+ EHT_GROUP( 9, EHT_GI_32, BW_160),
326+ EHT_GROUP(10, EHT_GI_32, BW_160),
327+ EHT_GROUP(11, EHT_GI_32, BW_160),
328+ EHT_GROUP(12, EHT_GI_32, BW_160),
329+ EHT_GROUP(13, EHT_GI_32, BW_160),
330+ EHT_GROUP(14, EHT_GI_32, BW_160),
331+ EHT_GROUP(15, EHT_GI_32, BW_160),
332+ EHT_GROUP(16, EHT_GI_32, BW_160),
333+
334+ EHT_GROUP( 1, EHT_GI_08, BW_320),
335+ EHT_GROUP( 2, EHT_GI_08, BW_320),
336+ EHT_GROUP( 3, EHT_GI_08, BW_320),
337+ EHT_GROUP( 4, EHT_GI_08, BW_320),
338+ EHT_GROUP( 5, EHT_GI_08, BW_320),
339+ EHT_GROUP( 6, EHT_GI_08, BW_320),
340+ EHT_GROUP( 7, EHT_GI_08, BW_320),
341+ EHT_GROUP( 8, EHT_GI_08, BW_320),
342+ EHT_GROUP( 9, EHT_GI_08, BW_320),
343+ EHT_GROUP(10, EHT_GI_08, BW_320),
344+ EHT_GROUP(11, EHT_GI_08, BW_320),
345+ EHT_GROUP(12, EHT_GI_08, BW_320),
346+ EHT_GROUP(13, EHT_GI_08, BW_320),
347+ EHT_GROUP(14, EHT_GI_08, BW_320),
348+ EHT_GROUP(15, EHT_GI_08, BW_320),
349+ EHT_GROUP(16, EHT_GI_08, BW_320),
350+
351+ EHT_GROUP( 1, EHT_GI_16, BW_320),
352+ EHT_GROUP( 2, EHT_GI_16, BW_320),
353+ EHT_GROUP( 3, EHT_GI_16, BW_320),
354+ EHT_GROUP( 4, EHT_GI_16, BW_320),
355+ EHT_GROUP( 5, EHT_GI_16, BW_320),
356+ EHT_GROUP( 6, EHT_GI_16, BW_320),
357+ EHT_GROUP( 7, EHT_GI_16, BW_320),
358+ EHT_GROUP( 8, EHT_GI_16, BW_320),
359+ EHT_GROUP( 9, EHT_GI_16, BW_320),
360+ EHT_GROUP(10, EHT_GI_16, BW_320),
361+ EHT_GROUP(11, EHT_GI_16, BW_320),
362+ EHT_GROUP(12, EHT_GI_16, BW_320),
363+ EHT_GROUP(13, EHT_GI_16, BW_320),
364+ EHT_GROUP(14, EHT_GI_16, BW_320),
365+ EHT_GROUP(15, EHT_GI_16, BW_320),
366+ EHT_GROUP(16, EHT_GI_16, BW_320),
367+
368+ EHT_GROUP( 1, EHT_GI_32, BW_320),
369+ EHT_GROUP( 2, EHT_GI_32, BW_320),
370+ EHT_GROUP( 3, EHT_GI_32, BW_320),
371+ EHT_GROUP( 4, EHT_GI_32, BW_320),
372+ EHT_GROUP( 5, EHT_GI_32, BW_320),
373+ EHT_GROUP( 6, EHT_GI_32, BW_320),
374+ EHT_GROUP( 7, EHT_GI_32, BW_320),
375+ EHT_GROUP( 8, EHT_GI_32, BW_320),
376+ EHT_GROUP( 9, EHT_GI_32, BW_320),
377+ EHT_GROUP(10, EHT_GI_32, BW_320),
378+ EHT_GROUP(11, EHT_GI_32, BW_320),
379+ EHT_GROUP(12, EHT_GI_32, BW_320),
380+ EHT_GROUP(13, EHT_GI_32, BW_320),
381+ EHT_GROUP(14, EHT_GI_32, BW_320),
382+ EHT_GROUP(15, EHT_GI_32, BW_320),
383+ EHT_GROUP(16, EHT_GI_32, BW_320),
384 };
385
386 static u32
387@@ -422,6 +751,9 @@ static u32 ieee80211_get_rate_duration(struct ieee80211_hw *hw,
388 case RATE_INFO_BW_160:
389 bw = BW_160;
390 break;
391+ case RATE_INFO_BW_320:
392+ bw = BW_320;
393+ break;
394 default:
395 WARN_ON_ONCE(1);
396 return 0;
397@@ -443,11 +775,20 @@ static u32 ieee80211_get_rate_duration(struct ieee80211_hw *hw,
398 idx = status->rate_idx;
399 group = HE_GROUP_IDX(streams, status->he_gi, bw);
400 break;
401+ case RX_ENC_EHT:
402+ streams = status->nss;
403+ idx = status->rate_idx;
404+ group = EHT_GROUP_IDX(streams, status->he_gi, bw);
405+ break;
406 default:
407 WARN_ON_ONCE(1);
408 return 0;
409 }
410
411+ if (WARN_ON_ONCE((status->encoding != RX_ENC_EHT && streams > 8) ||
412+ (status->encoding == RX_ENC_EHT && streams > 16)))
413+ return 0;
414+
415 if (WARN_ON_ONCE((status->encoding != RX_ENC_HE && streams > 4) ||
416 (status->encoding == RX_ENC_HE && streams > 8)))
417 return 0;
418@@ -517,7 +858,9 @@ static bool ieee80211_fill_rate_info(struct ieee80211_hw *hw,
419 stat->nss = ri->nss;
420 stat->rate_idx = ri->mcs;
421
422- if (ri->flags & RATE_INFO_FLAGS_HE_MCS)
423+ if (ri->flags & RATE_INFO_FLAGS_EHT_MCS)
424+ stat->encoding = RX_ENC_EHT;
425+ else if (ri->flags & RATE_INFO_FLAGS_HE_MCS)
426 stat->encoding = RX_ENC_HE;
427 else if (ri->flags & RATE_INFO_FLAGS_VHT_MCS)
428 stat->encoding = RX_ENC_VHT;
429@@ -529,7 +872,7 @@ static bool ieee80211_fill_rate_info(struct ieee80211_hw *hw,
430 if (ri->flags & RATE_INFO_FLAGS_SHORT_GI)
431 stat->enc_flags |= RX_ENC_FLAG_SHORT_GI;
432
433- stat->he_gi = ri->he_gi;
434+ stat->he_gi = (ri->flags & RATE_INFO_FLAGS_EHT_MCS) ? ri->eht_gi : ri->he_gi;
435
436 if (stat->encoding != RX_ENC_LEGACY)
437 return true;
438--
developer8eb72a32023-03-30 08:32:07 +08004392.18.0
developer3e0400f2023-02-10 08:32:03 +0800440