• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Indices for 802.11 a/b/g/n/ac 1-3 chain symmetric transmit rates
3  *
4  * Copyright (C) 1999-2019, Broadcom.
5  *
6  *      Unless you and Broadcom execute a separate written software license
7  * agreement governing use of this software, this software is licensed to you
8  * under the terms of the GNU General Public License version 2 (the "GPL"),
9  * available at http://www.broadcom.com/licenses/GPLv2.php, with the
10  * following added to such license:
11  *
12  *      As a special exception, the copyright holders of this software give you
13  * permission to link this software with independent modules, and to copy and
14  * distribute the resulting executable under terms of your choice, provided that
15  * you also meet, for each linked independent module, the terms and conditions
16  * of the license of that module.  An independent module is a module which is
17  * not derived from this software.  The special exception does not apply to any
18  * modifications of the software.
19  *
20  *      Notwithstanding the above, under no circumstances may you combine this
21  * software in any way with any other Broadcom software provided under a license
22  * other than the GPL, without Broadcom's express prior written consent.
23  *
24  *
25  * <<Broadcom-WL-IPTag/Open:>>
26  *
27  * $Id: bcmwifi_rates.h 697006 2017-05-01 19:13:40Z $
28  */
29 
30 #ifndef _bcmwifi_rates_h_
31 #define _bcmwifi_rates_h_
32 
33 #include <typedefs.h>
34 
35 #ifdef __cplusplus
36 extern "C" {
37 #endif /* __cplusplus */
38 
39 #define WL_RATESET_SZ_DSSS 4
40 #define WL_RATESET_SZ_OFDM 8
41 #define WL_RATESET_SZ_VHT_MCS 10
42 #define WL_RATESET_SZ_VHT_MCS_P 12 /* 10 VHT rates + 2 proprietary rates */
43 #define WL_RATESET_SZ_HE_MCS 12    /* 12 HE rates (mcs 0-11) */
44 
45 #define WL_RATESET_SZ_HT_MCS 8
46 
47 #define WL_RATESET_SZ_HT_IOCTL                                                 \
48     8 /* MAC histogram, compatibility with wl utility */
49 
50 #define WL_TX_CHAINS_MAX 4
51 
52 #define WL_RATE_DISABLED                                                       \
53     (-128) /* Power value corresponding to unsupported rate */
54 
55 /* Transmit channel bandwidths */
56 typedef enum wl_tx_bw {
57     WL_TX_BW_20,
58     WL_TX_BW_40,
59     WL_TX_BW_80,
60     WL_TX_BW_20IN40,
61     WL_TX_BW_20IN80,
62     WL_TX_BW_40IN80,
63     WL_TX_BW_160,
64     WL_TX_BW_20IN160,
65     WL_TX_BW_40IN160,
66     WL_TX_BW_80IN160,
67     WL_TX_BW_ALL,
68     WL_TX_BW_8080,
69     WL_TX_BW_8080CHAN2,
70     WL_TX_BW_20IN8080,
71     WL_TX_BW_40IN8080,
72     WL_TX_BW_80IN8080,
73     WL_TX_BW_2P5,
74     WL_TX_BW_5,
75     WL_TX_BW_10
76 } wl_tx_bw_t;
77 
78 /*
79  * Transmit modes.
80  * Not all modes are listed here, only those required for disambiguation. e.g.
81  * SPEXP is not listed
82  */
83 typedef enum wl_tx_mode {
84     WL_TX_MODE_NONE,
85     WL_TX_MODE_STBC,
86     WL_TX_MODE_CDD,
87     WL_TX_MODE_TXBF,
88     WL_NUM_TX_MODES
89 } wl_tx_mode_t;
90 
91 /* Number of transmit chains */
92 typedef enum wl_tx_chains {
93     WL_TX_CHAINS_1 = 1,
94     WL_TX_CHAINS_2,
95     WL_TX_CHAINS_3,
96     WL_TX_CHAINS_4
97 } wl_tx_chains_t;
98 
99 /* Number of transmit streams */
100 typedef enum wl_tx_nss {
101     WL_TX_NSS_1 = 1,
102     WL_TX_NSS_2,
103     WL_TX_NSS_3,
104     WL_TX_NSS_4
105 } wl_tx_nss_t;
106 
107 /* This enum maps each rate to a CLM index */
108 
109 typedef enum clm_rates {
110     /************
111      * 1 chain  *
112      ************
113      */
114 
115     /* 1 Stream */
116     WL_RATE_1X1_DSSS_1 = 0,
117     WL_RATE_1X1_DSSS_2 = 1,
118     WL_RATE_1X1_DSSS_5_5 = 2,
119     WL_RATE_1X1_DSSS_11 = 3,
120 
121     WL_RATE_1X1_OFDM_6 = 4,
122     WL_RATE_1X1_OFDM_9 = 5,
123     WL_RATE_1X1_OFDM_12 = 6,
124     WL_RATE_1X1_OFDM_18 = 7,
125     WL_RATE_1X1_OFDM_24 = 8,
126     WL_RATE_1X1_OFDM_36 = 9,
127     WL_RATE_1X1_OFDM_48 = 10,
128     WL_RATE_1X1_OFDM_54 = 11,
129 
130     WL_RATE_1X1_MCS0 = 12,
131     WL_RATE_1X1_MCS1 = 13,
132     WL_RATE_1X1_MCS2 = 14,
133     WL_RATE_1X1_MCS3 = 15,
134     WL_RATE_1X1_MCS4 = 16,
135     WL_RATE_1X1_MCS5 = 17,
136     WL_RATE_1X1_MCS6 = 18,
137     WL_RATE_1X1_MCS7 = 19,
138     WL_RATE_P_1X1_MCS87 = 20,
139     WL_RATE_P_1X1_MCS88 = 21,
140 
141     WL_RATE_1X1_VHT0SS1 = 12,
142     WL_RATE_1X1_VHT1SS1 = 13,
143     WL_RATE_1X1_VHT2SS1 = 14,
144     WL_RATE_1X1_VHT3SS1 = 15,
145     WL_RATE_1X1_VHT4SS1 = 16,
146     WL_RATE_1X1_VHT5SS1 = 17,
147     WL_RATE_1X1_VHT6SS1 = 18,
148     WL_RATE_1X1_VHT7SS1 = 19,
149     WL_RATE_1X1_VHT8SS1 = 20,
150     WL_RATE_1X1_VHT9SS1 = 21,
151     WL_RATE_P_1X1_VHT10SS1 = 22,
152     WL_RATE_P_1X1_VHT11SS1 = 23,
153 
154     /************
155      * 2 chains *
156      ************
157      */
158 
159     /* 1 Stream expanded + 1 */
160     WL_RATE_1X2_DSSS_1 = 24,
161     WL_RATE_1X2_DSSS_2 = 25,
162     WL_RATE_1X2_DSSS_5_5 = 26,
163     WL_RATE_1X2_DSSS_11 = 27,
164 
165     WL_RATE_1X2_CDD_OFDM_6 = 28,
166     WL_RATE_1X2_CDD_OFDM_9 = 29,
167     WL_RATE_1X2_CDD_OFDM_12 = 30,
168     WL_RATE_1X2_CDD_OFDM_18 = 31,
169     WL_RATE_1X2_CDD_OFDM_24 = 32,
170     WL_RATE_1X2_CDD_OFDM_36 = 33,
171     WL_RATE_1X2_CDD_OFDM_48 = 34,
172     WL_RATE_1X2_CDD_OFDM_54 = 35,
173 
174     WL_RATE_1X2_CDD_MCS0 = 36,
175     WL_RATE_1X2_CDD_MCS1 = 37,
176     WL_RATE_1X2_CDD_MCS2 = 38,
177     WL_RATE_1X2_CDD_MCS3 = 39,
178     WL_RATE_1X2_CDD_MCS4 = 40,
179     WL_RATE_1X2_CDD_MCS5 = 41,
180     WL_RATE_1X2_CDD_MCS6 = 42,
181     WL_RATE_1X2_CDD_MCS7 = 43,
182     WL_RATE_P_1X2_CDD_MCS87 = 44,
183     WL_RATE_P_1X2_CDD_MCS88 = 45,
184 
185     WL_RATE_1X2_VHT0SS1 = 36,
186     WL_RATE_1X2_VHT1SS1 = 37,
187     WL_RATE_1X2_VHT2SS1 = 38,
188     WL_RATE_1X2_VHT3SS1 = 39,
189     WL_RATE_1X2_VHT4SS1 = 40,
190     WL_RATE_1X2_VHT5SS1 = 41,
191     WL_RATE_1X2_VHT6SS1 = 42,
192     WL_RATE_1X2_VHT7SS1 = 43,
193     WL_RATE_1X2_VHT8SS1 = 44,
194     WL_RATE_1X2_VHT9SS1 = 45,
195     WL_RATE_P_1X2_VHT10SS1 = 46,
196     WL_RATE_P_1X2_VHT11SS1 = 47,
197 
198     /* 2 Streams */
199     WL_RATE_2X2_STBC_MCS0 = 48,
200     WL_RATE_2X2_STBC_MCS1 = 49,
201     WL_RATE_2X2_STBC_MCS2 = 50,
202     WL_RATE_2X2_STBC_MCS3 = 51,
203     WL_RATE_2X2_STBC_MCS4 = 52,
204     WL_RATE_2X2_STBC_MCS5 = 53,
205     WL_RATE_2X2_STBC_MCS6 = 54,
206     WL_RATE_2X2_STBC_MCS7 = 55,
207     WL_RATE_P_2X2_STBC_MCS87 = 56,
208     WL_RATE_P_2X2_STBC_MCS88 = 57,
209 
210     WL_RATE_2X2_STBC_VHT0SS1 = 48,
211     WL_RATE_2X2_STBC_VHT1SS1 = 49,
212     WL_RATE_2X2_STBC_VHT2SS1 = 50,
213     WL_RATE_2X2_STBC_VHT3SS1 = 51,
214     WL_RATE_2X2_STBC_VHT4SS1 = 52,
215     WL_RATE_2X2_STBC_VHT5SS1 = 53,
216     WL_RATE_2X2_STBC_VHT6SS1 = 54,
217     WL_RATE_2X2_STBC_VHT7SS1 = 55,
218     WL_RATE_2X2_STBC_VHT8SS1 = 56,
219     WL_RATE_2X2_STBC_VHT9SS1 = 57,
220     WL_RATE_P_2X2_STBC_VHT10SS1 = 58,
221     WL_RATE_P_2X2_STBC_VHT11SS1 = 59,
222 
223     WL_RATE_2X2_SDM_MCS8 = 60,
224     WL_RATE_2X2_SDM_MCS9 = 61,
225     WL_RATE_2X2_SDM_MCS10 = 62,
226     WL_RATE_2X2_SDM_MCS11 = 63,
227     WL_RATE_2X2_SDM_MCS12 = 64,
228     WL_RATE_2X2_SDM_MCS13 = 65,
229     WL_RATE_2X2_SDM_MCS14 = 66,
230     WL_RATE_2X2_SDM_MCS15 = 67,
231     WL_RATE_P_2X2_SDM_MCS99 = 68,
232     WL_RATE_P_2X2_SDM_MCS100 = 69,
233 
234     WL_RATE_2X2_VHT0SS2 = 60,
235     WL_RATE_2X2_VHT1SS2 = 61,
236     WL_RATE_2X2_VHT2SS2 = 62,
237     WL_RATE_2X2_VHT3SS2 = 63,
238     WL_RATE_2X2_VHT4SS2 = 64,
239     WL_RATE_2X2_VHT5SS2 = 65,
240     WL_RATE_2X2_VHT6SS2 = 66,
241     WL_RATE_2X2_VHT7SS2 = 67,
242     WL_RATE_2X2_VHT8SS2 = 68,
243     WL_RATE_2X2_VHT9SS2 = 69,
244     WL_RATE_P_2X2_VHT10SS2 = 70,
245     WL_RATE_P_2X2_VHT11SS2 = 71,
246 
247     /****************************
248      * TX Beamforming, 2 chains *
249      ****************************
250      */
251 
252     /* 1 Stream expanded + 1 */
253     WL_RATE_1X2_TXBF_OFDM_6 = 72,
254     WL_RATE_1X2_TXBF_OFDM_9 = 73,
255     WL_RATE_1X2_TXBF_OFDM_12 = 74,
256     WL_RATE_1X2_TXBF_OFDM_18 = 75,
257     WL_RATE_1X2_TXBF_OFDM_24 = 76,
258     WL_RATE_1X2_TXBF_OFDM_36 = 77,
259     WL_RATE_1X2_TXBF_OFDM_48 = 78,
260     WL_RATE_1X2_TXBF_OFDM_54 = 79,
261 
262     WL_RATE_1X2_TXBF_MCS0 = 80,
263     WL_RATE_1X2_TXBF_MCS1 = 81,
264     WL_RATE_1X2_TXBF_MCS2 = 82,
265     WL_RATE_1X2_TXBF_MCS3 = 83,
266     WL_RATE_1X2_TXBF_MCS4 = 84,
267     WL_RATE_1X2_TXBF_MCS5 = 85,
268     WL_RATE_1X2_TXBF_MCS6 = 86,
269     WL_RATE_1X2_TXBF_MCS7 = 87,
270     WL_RATE_P_1X2_TXBF_MCS87 = 88,
271     WL_RATE_P_1X2_TXBF_MCS88 = 89,
272 
273     WL_RATE_1X2_TXBF_VHT0SS1 = 80,
274     WL_RATE_1X2_TXBF_VHT1SS1 = 81,
275     WL_RATE_1X2_TXBF_VHT2SS1 = 82,
276     WL_RATE_1X2_TXBF_VHT3SS1 = 83,
277     WL_RATE_1X2_TXBF_VHT4SS1 = 84,
278     WL_RATE_1X2_TXBF_VHT5SS1 = 85,
279     WL_RATE_1X2_TXBF_VHT6SS1 = 86,
280     WL_RATE_1X2_TXBF_VHT7SS1 = 87,
281     WL_RATE_1X2_TXBF_VHT8SS1 = 88,
282     WL_RATE_1X2_TXBF_VHT9SS1 = 89,
283     WL_RATE_P_1X2_TXBF_VHT10SS1 = 90,
284     WL_RATE_P_1X2_TXBF_VHT11SS1 = 91,
285 
286     /* 2 Streams */
287     WL_RATE_2X2_TXBF_SDM_MCS8 = 92,
288     WL_RATE_2X2_TXBF_SDM_MCS9 = 93,
289     WL_RATE_2X2_TXBF_SDM_MCS10 = 94,
290     WL_RATE_2X2_TXBF_SDM_MCS11 = 95,
291     WL_RATE_2X2_TXBF_SDM_MCS12 = 96,
292     WL_RATE_2X2_TXBF_SDM_MCS13 = 97,
293     WL_RATE_2X2_TXBF_SDM_MCS14 = 98,
294     WL_RATE_2X2_TXBF_SDM_MCS15 = 99,
295     WL_RATE_P_2X2_TXBF_SDM_MCS99 = 100,
296     WL_RATE_P_2X2_TXBF_SDM_MCS100 = 101,
297 
298     WL_RATE_2X2_TXBF_VHT0SS2 = 92,
299     WL_RATE_2X2_TXBF_VHT1SS2 = 93,
300     WL_RATE_2X2_TXBF_VHT2SS2 = 94,
301     WL_RATE_2X2_TXBF_VHT3SS2 = 95,
302     WL_RATE_2X2_TXBF_VHT4SS2 = 96,
303     WL_RATE_2X2_TXBF_VHT5SS2 = 97,
304     WL_RATE_2X2_TXBF_VHT6SS2 = 98,
305     WL_RATE_2X2_TXBF_VHT7SS2 = 99,
306     WL_RATE_2X2_TXBF_VHT8SS2 = 100,
307     WL_RATE_2X2_TXBF_VHT9SS2 = 101,
308     WL_RATE_P_2X2_TXBF_VHT10SS2 = 102,
309     WL_RATE_P_2X2_TXBF_VHT11SS2 = 103,
310 
311     /************
312      * 3 chains *
313      ************
314      */
315 
316     /* 1 Stream expanded + 2 */
317     WL_RATE_1X3_DSSS_1 = 104,
318     WL_RATE_1X3_DSSS_2 = 105,
319     WL_RATE_1X3_DSSS_5_5 = 106,
320     WL_RATE_1X3_DSSS_11 = 107,
321 
322     WL_RATE_1X3_CDD_OFDM_6 = 108,
323     WL_RATE_1X3_CDD_OFDM_9 = 109,
324     WL_RATE_1X3_CDD_OFDM_12 = 110,
325     WL_RATE_1X3_CDD_OFDM_18 = 111,
326     WL_RATE_1X3_CDD_OFDM_24 = 112,
327     WL_RATE_1X3_CDD_OFDM_36 = 113,
328     WL_RATE_1X3_CDD_OFDM_48 = 114,
329     WL_RATE_1X3_CDD_OFDM_54 = 115,
330 
331     WL_RATE_1X3_CDD_MCS0 = 116,
332     WL_RATE_1X3_CDD_MCS1 = 117,
333     WL_RATE_1X3_CDD_MCS2 = 118,
334     WL_RATE_1X3_CDD_MCS3 = 119,
335     WL_RATE_1X3_CDD_MCS4 = 120,
336     WL_RATE_1X3_CDD_MCS5 = 121,
337     WL_RATE_1X3_CDD_MCS6 = 122,
338     WL_RATE_1X3_CDD_MCS7 = 123,
339     WL_RATE_P_1X3_CDD_MCS87 = 124,
340     WL_RATE_P_1X3_CDD_MCS88 = 125,
341 
342     WL_RATE_1X3_VHT0SS1 = 116,
343     WL_RATE_1X3_VHT1SS1 = 117,
344     WL_RATE_1X3_VHT2SS1 = 118,
345     WL_RATE_1X3_VHT3SS1 = 119,
346     WL_RATE_1X3_VHT4SS1 = 120,
347     WL_RATE_1X3_VHT5SS1 = 121,
348     WL_RATE_1X3_VHT6SS1 = 122,
349     WL_RATE_1X3_VHT7SS1 = 123,
350     WL_RATE_1X3_VHT8SS1 = 124,
351     WL_RATE_1X3_VHT9SS1 = 125,
352     WL_RATE_P_1X3_VHT10SS1 = 126,
353     WL_RATE_P_1X3_VHT11SS1 = 127,
354 
355     /* 2 Streams expanded + 1 */
356     WL_RATE_2X3_STBC_MCS0 = 128,
357     WL_RATE_2X3_STBC_MCS1 = 129,
358     WL_RATE_2X3_STBC_MCS2 = 130,
359     WL_RATE_2X3_STBC_MCS3 = 131,
360     WL_RATE_2X3_STBC_MCS4 = 132,
361     WL_RATE_2X3_STBC_MCS5 = 133,
362     WL_RATE_2X3_STBC_MCS6 = 134,
363     WL_RATE_2X3_STBC_MCS7 = 135,
364     WL_RATE_P_2X3_STBC_MCS87 = 136,
365     WL_RATE_P_2X3_STBC_MCS88 = 137,
366 
367     WL_RATE_2X3_STBC_VHT0SS1 = 128,
368     WL_RATE_2X3_STBC_VHT1SS1 = 129,
369     WL_RATE_2X3_STBC_VHT2SS1 = 130,
370     WL_RATE_2X3_STBC_VHT3SS1 = 131,
371     WL_RATE_2X3_STBC_VHT4SS1 = 132,
372     WL_RATE_2X3_STBC_VHT5SS1 = 133,
373     WL_RATE_2X3_STBC_VHT6SS1 = 134,
374     WL_RATE_2X3_STBC_VHT7SS1 = 135,
375     WL_RATE_2X3_STBC_VHT8SS1 = 136,
376     WL_RATE_2X3_STBC_VHT9SS1 = 137,
377     WL_RATE_P_2X3_STBC_VHT10SS1 = 138,
378     WL_RATE_P_2X3_STBC_VHT11SS1 = 139,
379 
380     WL_RATE_2X3_SDM_MCS8 = 140,
381     WL_RATE_2X3_SDM_MCS9 = 141,
382     WL_RATE_2X3_SDM_MCS10 = 142,
383     WL_RATE_2X3_SDM_MCS11 = 143,
384     WL_RATE_2X3_SDM_MCS12 = 144,
385     WL_RATE_2X3_SDM_MCS13 = 145,
386     WL_RATE_2X3_SDM_MCS14 = 146,
387     WL_RATE_2X3_SDM_MCS15 = 147,
388     WL_RATE_P_2X3_SDM_MCS99 = 148,
389     WL_RATE_P_2X3_SDM_MCS100 = 149,
390 
391     WL_RATE_2X3_VHT0SS2 = 140,
392     WL_RATE_2X3_VHT1SS2 = 141,
393     WL_RATE_2X3_VHT2SS2 = 142,
394     WL_RATE_2X3_VHT3SS2 = 143,
395     WL_RATE_2X3_VHT4SS2 = 144,
396     WL_RATE_2X3_VHT5SS2 = 145,
397     WL_RATE_2X3_VHT6SS2 = 146,
398     WL_RATE_2X3_VHT7SS2 = 147,
399     WL_RATE_2X3_VHT8SS2 = 148,
400     WL_RATE_2X3_VHT9SS2 = 149,
401     WL_RATE_P_2X3_VHT10SS2 = 150,
402     WL_RATE_P_2X3_VHT11SS2 = 151,
403 
404     /* 3 Streams */
405     WL_RATE_3X3_SDM_MCS16 = 152,
406     WL_RATE_3X3_SDM_MCS17 = 153,
407     WL_RATE_3X3_SDM_MCS18 = 154,
408     WL_RATE_3X3_SDM_MCS19 = 155,
409     WL_RATE_3X3_SDM_MCS20 = 156,
410     WL_RATE_3X3_SDM_MCS21 = 157,
411     WL_RATE_3X3_SDM_MCS22 = 158,
412     WL_RATE_3X3_SDM_MCS23 = 159,
413     WL_RATE_P_3X3_SDM_MCS101 = 160,
414     WL_RATE_P_3X3_SDM_MCS102 = 161,
415 
416     WL_RATE_3X3_VHT0SS3 = 152,
417     WL_RATE_3X3_VHT1SS3 = 153,
418     WL_RATE_3X3_VHT2SS3 = 154,
419     WL_RATE_3X3_VHT3SS3 = 155,
420     WL_RATE_3X3_VHT4SS3 = 156,
421     WL_RATE_3X3_VHT5SS3 = 157,
422     WL_RATE_3X3_VHT6SS3 = 158,
423     WL_RATE_3X3_VHT7SS3 = 159,
424     WL_RATE_3X3_VHT8SS3 = 160,
425     WL_RATE_3X3_VHT9SS3 = 161,
426     WL_RATE_P_3X3_VHT10SS3 = 162,
427     WL_RATE_P_3X3_VHT11SS3 = 163,
428 
429     /****************************
430      * TX Beamforming, 3 chains *
431      ****************************
432      */
433 
434     /* 1 Stream expanded + 2 */
435     WL_RATE_1X3_TXBF_OFDM_6 = 164,
436     WL_RATE_1X3_TXBF_OFDM_9 = 165,
437     WL_RATE_1X3_TXBF_OFDM_12 = 166,
438     WL_RATE_1X3_TXBF_OFDM_18 = 167,
439     WL_RATE_1X3_TXBF_OFDM_24 = 168,
440     WL_RATE_1X3_TXBF_OFDM_36 = 169,
441     WL_RATE_1X3_TXBF_OFDM_48 = 170,
442     WL_RATE_1X3_TXBF_OFDM_54 = 171,
443 
444     WL_RATE_1X3_TXBF_MCS0 = 172,
445     WL_RATE_1X3_TXBF_MCS1 = 173,
446     WL_RATE_1X3_TXBF_MCS2 = 174,
447     WL_RATE_1X3_TXBF_MCS3 = 175,
448     WL_RATE_1X3_TXBF_MCS4 = 176,
449     WL_RATE_1X3_TXBF_MCS5 = 177,
450     WL_RATE_1X3_TXBF_MCS6 = 178,
451     WL_RATE_1X3_TXBF_MCS7 = 179,
452     WL_RATE_P_1X3_TXBF_MCS87 = 180,
453     WL_RATE_P_1X3_TXBF_MCS88 = 181,
454 
455     WL_RATE_1X3_TXBF_VHT0SS1 = 172,
456     WL_RATE_1X3_TXBF_VHT1SS1 = 173,
457     WL_RATE_1X3_TXBF_VHT2SS1 = 174,
458     WL_RATE_1X3_TXBF_VHT3SS1 = 175,
459     WL_RATE_1X3_TXBF_VHT4SS1 = 176,
460     WL_RATE_1X3_TXBF_VHT5SS1 = 177,
461     WL_RATE_1X3_TXBF_VHT6SS1 = 178,
462     WL_RATE_1X3_TXBF_VHT7SS1 = 179,
463     WL_RATE_1X3_TXBF_VHT8SS1 = 180,
464     WL_RATE_1X3_TXBF_VHT9SS1 = 181,
465     WL_RATE_P_1X3_TXBF_VHT10SS1 = 182,
466     WL_RATE_P_1X3_TXBF_VHT11SS1 = 183,
467 
468     /* 2 Streams expanded + 1 */
469     WL_RATE_2X3_TXBF_SDM_MCS8 = 184,
470     WL_RATE_2X3_TXBF_SDM_MCS9 = 185,
471     WL_RATE_2X3_TXBF_SDM_MCS10 = 186,
472     WL_RATE_2X3_TXBF_SDM_MCS11 = 187,
473     WL_RATE_2X3_TXBF_SDM_MCS12 = 188,
474     WL_RATE_2X3_TXBF_SDM_MCS13 = 189,
475     WL_RATE_2X3_TXBF_SDM_MCS14 = 190,
476     WL_RATE_2X3_TXBF_SDM_MCS15 = 191,
477     WL_RATE_P_2X3_TXBF_SDM_MCS99 = 192,
478     WL_RATE_P_2X3_TXBF_SDM_MCS100 = 193,
479 
480     WL_RATE_2X3_TXBF_VHT0SS2 = 184,
481     WL_RATE_2X3_TXBF_VHT1SS2 = 185,
482     WL_RATE_2X3_TXBF_VHT2SS2 = 186,
483     WL_RATE_2X3_TXBF_VHT3SS2 = 187,
484     WL_RATE_2X3_TXBF_VHT4SS2 = 188,
485     WL_RATE_2X3_TXBF_VHT5SS2 = 189,
486     WL_RATE_2X3_TXBF_VHT6SS2 = 190,
487     WL_RATE_2X3_TXBF_VHT7SS2 = 191,
488     WL_RATE_2X3_TXBF_VHT8SS2 = 192,
489     WL_RATE_2X3_TXBF_VHT9SS2 = 193,
490     WL_RATE_P_2X3_TXBF_VHT10SS2 = 194,
491     WL_RATE_P_2X3_TXBF_VHT11SS2 = 195,
492 
493     /* 3 Streams */
494     WL_RATE_3X3_TXBF_SDM_MCS16 = 196,
495     WL_RATE_3X3_TXBF_SDM_MCS17 = 197,
496     WL_RATE_3X3_TXBF_SDM_MCS18 = 198,
497     WL_RATE_3X3_TXBF_SDM_MCS19 = 199,
498     WL_RATE_3X3_TXBF_SDM_MCS20 = 200,
499     WL_RATE_3X3_TXBF_SDM_MCS21 = 201,
500     WL_RATE_3X3_TXBF_SDM_MCS22 = 202,
501     WL_RATE_3X3_TXBF_SDM_MCS23 = 203,
502     WL_RATE_P_3X3_TXBF_SDM_MCS101 = 204,
503     WL_RATE_P_3X3_TXBF_SDM_MCS102 = 205,
504 
505     WL_RATE_3X3_TXBF_VHT0SS3 = 196,
506     WL_RATE_3X3_TXBF_VHT1SS3 = 197,
507     WL_RATE_3X3_TXBF_VHT2SS3 = 198,
508     WL_RATE_3X3_TXBF_VHT3SS3 = 199,
509     WL_RATE_3X3_TXBF_VHT4SS3 = 200,
510     WL_RATE_3X3_TXBF_VHT5SS3 = 201,
511     WL_RATE_3X3_TXBF_VHT6SS3 = 202,
512     WL_RATE_3X3_TXBF_VHT7SS3 = 203,
513     WL_RATE_3X3_TXBF_VHT8SS3 = 204,
514     WL_RATE_3X3_TXBF_VHT9SS3 = 205,
515     WL_RATE_P_3X3_TXBF_VHT10SS3 = 206,
516     WL_RATE_P_3X3_TXBF_VHT11SS3 = 207,
517 
518     /************
519      * 4 chains *
520      ************
521      */
522 
523     /* 1 Stream expanded + 3 */
524     WL_RATE_1X4_DSSS_1 = 208,
525     WL_RATE_1X4_DSSS_2 = 209,
526     WL_RATE_1X4_DSSS_5_5 = 210,
527     WL_RATE_1X4_DSSS_11 = 211,
528 
529     WL_RATE_1X4_CDD_OFDM_6 = 212,
530     WL_RATE_1X4_CDD_OFDM_9 = 213,
531     WL_RATE_1X4_CDD_OFDM_12 = 214,
532     WL_RATE_1X4_CDD_OFDM_18 = 215,
533     WL_RATE_1X4_CDD_OFDM_24 = 216,
534     WL_RATE_1X4_CDD_OFDM_36 = 217,
535     WL_RATE_1X4_CDD_OFDM_48 = 218,
536     WL_RATE_1X4_CDD_OFDM_54 = 219,
537 
538     WL_RATE_1X4_CDD_MCS0 = 220,
539     WL_RATE_1X4_CDD_MCS1 = 221,
540     WL_RATE_1X4_CDD_MCS2 = 222,
541     WL_RATE_1X4_CDD_MCS3 = 223,
542     WL_RATE_1X4_CDD_MCS4 = 224,
543     WL_RATE_1X4_CDD_MCS5 = 225,
544     WL_RATE_1X4_CDD_MCS6 = 226,
545     WL_RATE_1X4_CDD_MCS7 = 227,
546     WL_RATE_P_1X4_CDD_MCS87 = 228,
547     WL_RATE_P_1X4_CDD_MCS88 = 229,
548 
549     WL_RATE_1X4_VHT0SS1 = 220,
550     WL_RATE_1X4_VHT1SS1 = 221,
551     WL_RATE_1X4_VHT2SS1 = 222,
552     WL_RATE_1X4_VHT3SS1 = 223,
553     WL_RATE_1X4_VHT4SS1 = 224,
554     WL_RATE_1X4_VHT5SS1 = 225,
555     WL_RATE_1X4_VHT6SS1 = 226,
556     WL_RATE_1X4_VHT7SS1 = 227,
557     WL_RATE_1X4_VHT8SS1 = 228,
558     WL_RATE_1X4_VHT9SS1 = 229,
559     WL_RATE_P_1X4_VHT10SS1 = 230,
560     WL_RATE_P_1X4_VHT11SS1 = 231,
561 
562     /* 2 Streams expanded + 2 */
563     WL_RATE_2X4_STBC_MCS0 = 232,
564     WL_RATE_2X4_STBC_MCS1 = 233,
565     WL_RATE_2X4_STBC_MCS2 = 234,
566     WL_RATE_2X4_STBC_MCS3 = 235,
567     WL_RATE_2X4_STBC_MCS4 = 236,
568     WL_RATE_2X4_STBC_MCS5 = 237,
569     WL_RATE_2X4_STBC_MCS6 = 238,
570     WL_RATE_2X4_STBC_MCS7 = 239,
571     WL_RATE_P_2X4_STBC_MCS87 = 240,
572     WL_RATE_P_2X4_STBC_MCS88 = 241,
573 
574     WL_RATE_2X4_STBC_VHT0SS1 = 232,
575     WL_RATE_2X4_STBC_VHT1SS1 = 233,
576     WL_RATE_2X4_STBC_VHT2SS1 = 234,
577     WL_RATE_2X4_STBC_VHT3SS1 = 235,
578     WL_RATE_2X4_STBC_VHT4SS1 = 236,
579     WL_RATE_2X4_STBC_VHT5SS1 = 237,
580     WL_RATE_2X4_STBC_VHT6SS1 = 238,
581     WL_RATE_2X4_STBC_VHT7SS1 = 239,
582     WL_RATE_2X4_STBC_VHT8SS1 = 240,
583     WL_RATE_2X4_STBC_VHT9SS1 = 241,
584     WL_RATE_P_2X4_STBC_VHT10SS1 = 242,
585     WL_RATE_P_2X4_STBC_VHT11SS1 = 243,
586 
587     WL_RATE_2X4_SDM_MCS8 = 244,
588     WL_RATE_2X4_SDM_MCS9 = 245,
589     WL_RATE_2X4_SDM_MCS10 = 246,
590     WL_RATE_2X4_SDM_MCS11 = 247,
591     WL_RATE_2X4_SDM_MCS12 = 248,
592     WL_RATE_2X4_SDM_MCS13 = 249,
593     WL_RATE_2X4_SDM_MCS14 = 250,
594     WL_RATE_2X4_SDM_MCS15 = 251,
595     WL_RATE_P_2X4_SDM_MCS99 = 252,
596     WL_RATE_P_2X4_SDM_MCS100 = 253,
597 
598     WL_RATE_2X4_VHT0SS2 = 244,
599     WL_RATE_2X4_VHT1SS2 = 245,
600     WL_RATE_2X4_VHT2SS2 = 246,
601     WL_RATE_2X4_VHT3SS2 = 247,
602     WL_RATE_2X4_VHT4SS2 = 248,
603     WL_RATE_2X4_VHT5SS2 = 249,
604     WL_RATE_2X4_VHT6SS2 = 250,
605     WL_RATE_2X4_VHT7SS2 = 251,
606     WL_RATE_2X4_VHT8SS2 = 252,
607     WL_RATE_2X4_VHT9SS2 = 253,
608     WL_RATE_P_2X4_VHT10SS2 = 254,
609     WL_RATE_P_2X4_VHT11SS2 = 255,
610 
611     /* 3 Streams expanded + 1 */
612     WL_RATE_3X4_SDM_MCS16 = 256,
613     WL_RATE_3X4_SDM_MCS17 = 257,
614     WL_RATE_3X4_SDM_MCS18 = 258,
615     WL_RATE_3X4_SDM_MCS19 = 259,
616     WL_RATE_3X4_SDM_MCS20 = 260,
617     WL_RATE_3X4_SDM_MCS21 = 261,
618     WL_RATE_3X4_SDM_MCS22 = 262,
619     WL_RATE_3X4_SDM_MCS23 = 263,
620     WL_RATE_P_3X4_SDM_MCS101 = 264,
621     WL_RATE_P_3X4_SDM_MCS102 = 265,
622 
623     WL_RATE_3X4_VHT0SS3 = 256,
624     WL_RATE_3X4_VHT1SS3 = 257,
625     WL_RATE_3X4_VHT2SS3 = 258,
626     WL_RATE_3X4_VHT3SS3 = 259,
627     WL_RATE_3X4_VHT4SS3 = 260,
628     WL_RATE_3X4_VHT5SS3 = 261,
629     WL_RATE_3X4_VHT6SS3 = 262,
630     WL_RATE_3X4_VHT7SS3 = 263,
631     WL_RATE_3X4_VHT8SS3 = 264,
632     WL_RATE_3X4_VHT9SS3 = 265,
633     WL_RATE_P_3X4_VHT10SS3 = 266,
634     WL_RATE_P_3X4_VHT11SS3 = 267,
635 
636     /* 4 Streams */
637     WL_RATE_4X4_SDM_MCS24 = 268,
638     WL_RATE_4X4_SDM_MCS25 = 269,
639     WL_RATE_4X4_SDM_MCS26 = 270,
640     WL_RATE_4X4_SDM_MCS27 = 271,
641     WL_RATE_4X4_SDM_MCS28 = 272,
642     WL_RATE_4X4_SDM_MCS29 = 273,
643     WL_RATE_4X4_SDM_MCS30 = 274,
644     WL_RATE_4X4_SDM_MCS31 = 275,
645     WL_RATE_P_4X4_SDM_MCS103 = 276,
646     WL_RATE_P_4X4_SDM_MCS104 = 277,
647 
648     WL_RATE_4X4_VHT0SS4 = 268,
649     WL_RATE_4X4_VHT1SS4 = 269,
650     WL_RATE_4X4_VHT2SS4 = 270,
651     WL_RATE_4X4_VHT3SS4 = 271,
652     WL_RATE_4X4_VHT4SS4 = 272,
653     WL_RATE_4X4_VHT5SS4 = 273,
654     WL_RATE_4X4_VHT6SS4 = 274,
655     WL_RATE_4X4_VHT7SS4 = 275,
656     WL_RATE_4X4_VHT8SS4 = 276,
657     WL_RATE_4X4_VHT9SS4 = 277,
658     WL_RATE_P_4X4_VHT10SS4 = 278,
659     WL_RATE_P_4X4_VHT11SS4 = 279,
660 
661     /****************************
662      * TX Beamforming, 4 chains *
663      ****************************
664      */
665 
666     /* 1 Stream expanded + 3 */
667     WL_RATE_1X4_TXBF_OFDM_6 = 280,
668     WL_RATE_1X4_TXBF_OFDM_9 = 281,
669     WL_RATE_1X4_TXBF_OFDM_12 = 282,
670     WL_RATE_1X4_TXBF_OFDM_18 = 283,
671     WL_RATE_1X4_TXBF_OFDM_24 = 284,
672     WL_RATE_1X4_TXBF_OFDM_36 = 285,
673     WL_RATE_1X4_TXBF_OFDM_48 = 286,
674     WL_RATE_1X4_TXBF_OFDM_54 = 287,
675 
676     WL_RATE_1X4_TXBF_MCS0 = 288,
677     WL_RATE_1X4_TXBF_MCS1 = 289,
678     WL_RATE_1X4_TXBF_MCS2 = 290,
679     WL_RATE_1X4_TXBF_MCS3 = 291,
680     WL_RATE_1X4_TXBF_MCS4 = 292,
681     WL_RATE_1X4_TXBF_MCS5 = 293,
682     WL_RATE_1X4_TXBF_MCS6 = 294,
683     WL_RATE_1X4_TXBF_MCS7 = 295,
684     WL_RATE_P_1X4_TXBF_MCS87 = 296,
685     WL_RATE_P_1X4_TXBF_MCS88 = 297,
686 
687     WL_RATE_1X4_TXBF_VHT0SS1 = 288,
688     WL_RATE_1X4_TXBF_VHT1SS1 = 289,
689     WL_RATE_1X4_TXBF_VHT2SS1 = 290,
690     WL_RATE_1X4_TXBF_VHT3SS1 = 291,
691     WL_RATE_1X4_TXBF_VHT4SS1 = 292,
692     WL_RATE_1X4_TXBF_VHT5SS1 = 293,
693     WL_RATE_1X4_TXBF_VHT6SS1 = 294,
694     WL_RATE_1X4_TXBF_VHT7SS1 = 295,
695     WL_RATE_1X4_TXBF_VHT8SS1 = 296,
696     WL_RATE_1X4_TXBF_VHT9SS1 = 297,
697     WL_RATE_P_1X4_TXBF_VHT10SS1 = 298,
698     WL_RATE_P_1X4_TXBF_VHT11SS1 = 299,
699 
700     /* 2 Streams expanded + 2 */
701     WL_RATE_2X4_TXBF_SDM_MCS8 = 300,
702     WL_RATE_2X4_TXBF_SDM_MCS9 = 301,
703     WL_RATE_2X4_TXBF_SDM_MCS10 = 302,
704     WL_RATE_2X4_TXBF_SDM_MCS11 = 303,
705     WL_RATE_2X4_TXBF_SDM_MCS12 = 304,
706     WL_RATE_2X4_TXBF_SDM_MCS13 = 305,
707     WL_RATE_2X4_TXBF_SDM_MCS14 = 306,
708     WL_RATE_2X4_TXBF_SDM_MCS15 = 307,
709     WL_RATE_P_2X4_TXBF_SDM_MCS99 = 308,
710     WL_RATE_P_2X4_TXBF_SDM_MCS100 = 309,
711 
712     WL_RATE_2X4_TXBF_VHT0SS2 = 300,
713     WL_RATE_2X4_TXBF_VHT1SS2 = 301,
714     WL_RATE_2X4_TXBF_VHT2SS2 = 302,
715     WL_RATE_2X4_TXBF_VHT3SS2 = 303,
716     WL_RATE_2X4_TXBF_VHT4SS2 = 304,
717     WL_RATE_2X4_TXBF_VHT5SS2 = 305,
718     WL_RATE_2X4_TXBF_VHT6SS2 = 306,
719     WL_RATE_2X4_TXBF_VHT7SS2 = 307,
720     WL_RATE_2X4_TXBF_VHT8SS2 = 308,
721     WL_RATE_2X4_TXBF_VHT9SS2 = 309,
722     WL_RATE_P_2X4_TXBF_VHT10SS2 = 310,
723     WL_RATE_P_2X4_TXBF_VHT11SS2 = 311,
724 
725     /* 3 Streams expanded + 1 */
726     WL_RATE_3X4_TXBF_SDM_MCS16 = 312,
727     WL_RATE_3X4_TXBF_SDM_MCS17 = 313,
728     WL_RATE_3X4_TXBF_SDM_MCS18 = 314,
729     WL_RATE_3X4_TXBF_SDM_MCS19 = 315,
730     WL_RATE_3X4_TXBF_SDM_MCS20 = 316,
731     WL_RATE_3X4_TXBF_SDM_MCS21 = 317,
732     WL_RATE_3X4_TXBF_SDM_MCS22 = 318,
733     WL_RATE_3X4_TXBF_SDM_MCS23 = 319,
734     WL_RATE_P_3X4_TXBF_SDM_MCS101 = 320,
735     WL_RATE_P_3X4_TXBF_SDM_MCS102 = 321,
736 
737     WL_RATE_3X4_TXBF_VHT0SS3 = 312,
738     WL_RATE_3X4_TXBF_VHT1SS3 = 313,
739     WL_RATE_3X4_TXBF_VHT2SS3 = 314,
740     WL_RATE_3X4_TXBF_VHT3SS3 = 315,
741     WL_RATE_3X4_TXBF_VHT4SS3 = 316,
742     WL_RATE_3X4_TXBF_VHT5SS3 = 317,
743     WL_RATE_3X4_TXBF_VHT6SS3 = 318,
744     WL_RATE_3X4_TXBF_VHT7SS3 = 319,
745     WL_RATE_P_3X4_TXBF_VHT8SS3 = 320,
746     WL_RATE_P_3X4_TXBF_VHT9SS3 = 321,
747     WL_RATE_P_3X4_TXBF_VHT10SS3 = 322,
748     WL_RATE_P_3X4_TXBF_VHT11SS3 = 323,
749 
750     /* 4 Streams */
751     WL_RATE_4X4_TXBF_SDM_MCS24 = 324,
752     WL_RATE_4X4_TXBF_SDM_MCS25 = 325,
753     WL_RATE_4X4_TXBF_SDM_MCS26 = 326,
754     WL_RATE_4X4_TXBF_SDM_MCS27 = 327,
755     WL_RATE_4X4_TXBF_SDM_MCS28 = 328,
756     WL_RATE_4X4_TXBF_SDM_MCS29 = 329,
757     WL_RATE_4X4_TXBF_SDM_MCS30 = 330,
758     WL_RATE_4X4_TXBF_SDM_MCS31 = 331,
759     WL_RATE_P_4X4_TXBF_SDM_MCS103 = 332,
760     WL_RATE_P_4X4_TXBF_SDM_MCS104 = 333,
761 
762     WL_RATE_4X4_TXBF_VHT0SS4 = 324,
763     WL_RATE_4X4_TXBF_VHT1SS4 = 325,
764     WL_RATE_4X4_TXBF_VHT2SS4 = 326,
765     WL_RATE_4X4_TXBF_VHT3SS4 = 327,
766     WL_RATE_4X4_TXBF_VHT4SS4 = 328,
767     WL_RATE_4X4_TXBF_VHT5SS4 = 329,
768     WL_RATE_4X4_TXBF_VHT6SS4 = 330,
769     WL_RATE_4X4_TXBF_VHT7SS4 = 331,
770     WL_RATE_P_4X4_TXBF_VHT8SS4 = 332,
771     WL_RATE_P_4X4_TXBF_VHT9SS4 = 333,
772     WL_RATE_P_4X4_TXBF_VHT10SS4 = 334,
773     WL_RATE_P_4X4_TXBF_VHT11SS4 = 335
774 } clm_rates_t;
775 
776 /* Number of rate codes */
777 #define WL_NUMRATES 336
778 
779 /* MCS rates */
780 #define WLC_MAX_VHT_MCS 11 /**< Std VHT MCS 0-9 plus prop VHT MCS 10-11 */
781 #define WLC_MAX_HE_MCS 11  /**< Std HE MCS 0-11 */
782 
783 /* Convert encoded rate value in plcp header to numerical rates in 500 KHz
784  * increments */
785 #define OFDM_PHY2MAC_RATE(rlpt) plcp_ofdm_rate_tbl[(rlpt)&0x7]
786 #define CCK_PHY2MAC_RATE(signal) ((signal) / 5)
787 
788 /* given a proprietary MCS, get number of spatial streams */
789 #define GET_PROPRIETARY_11N_MCS_NSS(mcs) (1 + ((mcs)-85) / 8)
790 
791 #define GET_11N_MCS_NSS(mcs)                                                   \
792     ((mcs) < 32 ? (1 + ((mcs) / 8))                                            \
793                 : ((mcs) == 32 ? 1 : GET_PROPRIETARY_11N_MCS_NSS(mcs)))
794 
795 #define IS_PROPRIETARY_11N_MCS(mcs) FALSE
796 #define IS_PROPRIETARY_11N_SS_MCS(mcs)                                         \
797     FALSE /**< is proprietary HT single stream MCS */
798 
799 /* Store HE mcs map for all NSS in a compact form:
800  *
801  * bit[0:2] mcs code for NSS 1
802  * bit[3:5] mcs code for NSS 2
803  * ...
804  * bit[21:23] mcs code for NSS 8
805  */
806 
807 /**
808  * 3 bits are used for encoding each NSS mcs map (HE MCS MAP is 24 bits)
809  */
810 #define HE_CAP_MCS_CODE_NONE 7
811 
812 /* macros to access above compact format */
813 #define HE_CAP_MCS_NSS_SET_MASK 0x00ffffff /* Field is to be 24 bits long */
814 #define HE_CAP_MCS_NSS_GET_SS_IDX(nss) (((nss)-1) * HE_CAP_MCS_CODE_SIZE)
815 #define HE_CAP_MCS_NSS_GET_MCS(nss, mcs_nss_map)                               \
816     (((mcs_nss_map) >> HE_CAP_MCS_NSS_GET_SS_IDX(nss)) & HE_CAP_MCS_CODE_MASK)
817 #define HE_CAP_MCS_NSS_SET_MCS(nss, mcs_code, mcs_nss_map)                     \
818     do {                                                                       \
819         (mcs_nss_map) &=                                                       \
820             (~(HE_CAP_MCS_CODE_MASK << HE_CAP_MCS_NSS_GET_SS_IDX(nss)));       \
821         (mcs_nss_map) |= (((mcs_code)&HE_CAP_MCS_CODE_MASK)                    \
822                           << HE_CAP_MCS_NSS_GET_SS_IDX(nss));                  \
823         (mcs_nss_map) &= (HE_CAP_MCS_NSS_SET_MASK);                            \
824     } while (0)
825 
826 extern const uint8 plcp_ofdm_rate_tbl[];
827 
828 uint8 wf_get_single_stream_mcs(uint mcs);
829 
830 uint8 wf_vht_plcp_to_rate(uint8 *plcp);
831 uint wf_mcs_to_rate(uint mcs, uint nss, uint bw, int sgi);
832 uint wf_he_mcs_to_rate(uint mcs, uint nss, uint bw, uint gi, bool dcm);
833 uint wf_mcs_to_Ndbps(uint mcs, uint nss, uint bw);
834 #ifdef __cplusplus
835 }
836 #endif /* __cplusplus */
837 
838 #endif /* _bcmwifi_rates_h_ */
839