1/*
2 * Indices for 802.11 a/b/g/n/ac 1-3 chain symmetric transmit rates
3 *
4 * Copyright (C) 2015, Broadcom Corporation. All Rights Reserved.
5 *
6 * Permission to use, copy, modify, and/or distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
13 * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
15 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
16 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 *
18 * $Id: bcmwifi_rates.h 5187 2012-06-29 06:17:50Z $
19 */
20
21#ifndef _bcmwifi_rates_h_
22#define _bcmwifi_rates_h_
23
24#ifdef __cplusplus
25extern "C" {
26#endif /* __cplusplus */
27
28
29#define WL_RATESET_SZ_DSSS		4
30#define WL_RATESET_SZ_OFDM		8
31#define WL_RATESET_SZ_HT_MCS	8
32#define WL_RATESET_SZ_VHT_MCS	10
33
34#define WL_TX_CHAINS_MAX	3
35
36#define WL_RATE_DISABLED		(-128) /* Power value corresponding to unsupported rate */
37
38/* Transmit channel bandwidths */
39typedef enum wl_tx_bw {
40	WL_TX_BW_20,
41	WL_TX_BW_40,
42	WL_TX_BW_80,
43	WL_TX_BW_20IN40,
44	WL_TX_BW_20IN80,
45	WL_TX_BW_40IN80,
46	WL_TX_BW_160,
47	WL_TX_BW_20IN160,
48	WL_TX_BW_40IN160,
49	WL_TX_BW_80IN160,
50	WL_TX_BW_ALL,
51	WL_TX_BW_8080,
52	WL_TX_BW_8080CHAN2,
53	WL_TX_BW_20IN8080,
54	WL_TX_BW_40IN8080,
55	WL_TX_BW_80IN8080
56} wl_tx_bw_t;
57
58
59/*
60 * Transmit modes.
61 * Not all modes are listed here, only those required for disambiguation. e.g. SPEXP is not listed
62 */
63typedef enum wl_tx_mode {
64	WL_TX_MODE_NONE,
65	WL_TX_MODE_STBC,
66	WL_TX_MODE_CDD,
67	WL_TX_MODE_TXBF,
68	WL_NUM_TX_MODES
69} wl_tx_mode_t;
70
71
72/* Number of transmit chains */
73typedef enum wl_tx_chains {
74	WL_TX_CHAINS_1 = 1,
75	WL_TX_CHAINS_2,
76	WL_TX_CHAINS_3
77} wl_tx_chains_t;
78
79
80/* Number of transmit streams */
81typedef enum wl_tx_nss {
82	WL_TX_NSS_1 = 1,
83	WL_TX_NSS_2,
84	WL_TX_NSS_3
85} wl_tx_nss_t;
86
87
88typedef enum clm_rates {
89	/************
90	* 1 chain  *
91	************
92	*/
93
94	/* 1 Stream */
95	WL_RATE_1X1_DSSS_1         = 0,
96	WL_RATE_1X1_DSSS_2         = 1,
97	WL_RATE_1X1_DSSS_5_5       = 2,
98	WL_RATE_1X1_DSSS_11        = 3,
99
100	WL_RATE_1X1_OFDM_6         = 4,
101	WL_RATE_1X1_OFDM_9         = 5,
102	WL_RATE_1X1_OFDM_12        = 6,
103	WL_RATE_1X1_OFDM_18        = 7,
104	WL_RATE_1X1_OFDM_24        = 8,
105	WL_RATE_1X1_OFDM_36        = 9,
106	WL_RATE_1X1_OFDM_48        = 10,
107	WL_RATE_1X1_OFDM_54        = 11,
108
109	WL_RATE_1X1_MCS0           = 12,
110	WL_RATE_1X1_MCS1           = 13,
111	WL_RATE_1X1_MCS2           = 14,
112	WL_RATE_1X1_MCS3           = 15,
113	WL_RATE_1X1_MCS4           = 16,
114	WL_RATE_1X1_MCS5           = 17,
115	WL_RATE_1X1_MCS6           = 18,
116	WL_RATE_1X1_MCS7           = 19,
117
118	WL_RATE_1X1_VHT0SS1        = 12,
119	WL_RATE_1X1_VHT1SS1        = 13,
120	WL_RATE_1X1_VHT2SS1        = 14,
121	WL_RATE_1X1_VHT3SS1        = 15,
122	WL_RATE_1X1_VHT4SS1        = 16,
123	WL_RATE_1X1_VHT5SS1        = 17,
124	WL_RATE_1X1_VHT6SS1        = 18,
125	WL_RATE_1X1_VHT7SS1        = 19,
126	WL_RATE_1X1_VHT8SS1        = 20,
127	WL_RATE_1X1_VHT9SS1        = 21,
128
129
130	/************
131	* 2 chains *
132	************
133	*/
134
135	/* 1 Stream expanded + 1 */
136	WL_RATE_1X2_DSSS_1         = 22,
137	WL_RATE_1X2_DSSS_2         = 23,
138	WL_RATE_1X2_DSSS_5_5       = 24,
139	WL_RATE_1X2_DSSS_11        = 25,
140
141	WL_RATE_1X2_CDD_OFDM_6     = 26,
142	WL_RATE_1X2_CDD_OFDM_9     = 27,
143	WL_RATE_1X2_CDD_OFDM_12    = 28,
144	WL_RATE_1X2_CDD_OFDM_18    = 29,
145	WL_RATE_1X2_CDD_OFDM_24    = 30,
146	WL_RATE_1X2_CDD_OFDM_36    = 31,
147	WL_RATE_1X2_CDD_OFDM_48    = 32,
148	WL_RATE_1X2_CDD_OFDM_54    = 33,
149
150	WL_RATE_1X2_CDD_MCS0       = 34,
151	WL_RATE_1X2_CDD_MCS1       = 35,
152	WL_RATE_1X2_CDD_MCS2       = 36,
153	WL_RATE_1X2_CDD_MCS3       = 37,
154	WL_RATE_1X2_CDD_MCS4       = 38,
155	WL_RATE_1X2_CDD_MCS5       = 39,
156	WL_RATE_1X2_CDD_MCS6       = 40,
157	WL_RATE_1X2_CDD_MCS7       = 41,
158
159	WL_RATE_1X2_VHT0SS1        = 34,
160	WL_RATE_1X2_VHT1SS1        = 35,
161	WL_RATE_1X2_VHT2SS1        = 36,
162	WL_RATE_1X2_VHT3SS1        = 37,
163	WL_RATE_1X2_VHT4SS1        = 38,
164	WL_RATE_1X2_VHT5SS1        = 39,
165	WL_RATE_1X2_VHT6SS1        = 40,
166	WL_RATE_1X2_VHT7SS1        = 41,
167	WL_RATE_1X2_VHT8SS1        = 42,
168	WL_RATE_1X2_VHT9SS1        = 43,
169
170	/* 2 Streams */
171	WL_RATE_2X2_STBC_MCS0      = 44,
172	WL_RATE_2X2_STBC_MCS1      = 45,
173	WL_RATE_2X2_STBC_MCS2      = 46,
174	WL_RATE_2X2_STBC_MCS3      = 47,
175	WL_RATE_2X2_STBC_MCS4      = 48,
176	WL_RATE_2X2_STBC_MCS5      = 49,
177	WL_RATE_2X2_STBC_MCS6      = 50,
178	WL_RATE_2X2_STBC_MCS7      = 51,
179
180	WL_RATE_2X2_STBC_VHT0SS1   = 44,
181	WL_RATE_2X2_STBC_VHT1SS1   = 45,
182	WL_RATE_2X2_STBC_VHT2SS1   = 46,
183	WL_RATE_2X2_STBC_VHT3SS1   = 47,
184	WL_RATE_2X2_STBC_VHT4SS1   = 48,
185	WL_RATE_2X2_STBC_VHT5SS1   = 49,
186	WL_RATE_2X2_STBC_VHT6SS1   = 50,
187	WL_RATE_2X2_STBC_VHT7SS1   = 51,
188	WL_RATE_2X2_STBC_VHT8SS1   = 52,
189	WL_RATE_2X2_STBC_VHT9SS1   = 53,
190
191	WL_RATE_2X2_SDM_MCS8       = 54,
192	WL_RATE_2X2_SDM_MCS9       = 55,
193	WL_RATE_2X2_SDM_MCS10      = 56,
194	WL_RATE_2X2_SDM_MCS11      = 57,
195	WL_RATE_2X2_SDM_MCS12      = 58,
196	WL_RATE_2X2_SDM_MCS13      = 59,
197	WL_RATE_2X2_SDM_MCS14      = 60,
198	WL_RATE_2X2_SDM_MCS15      = 61,
199
200	WL_RATE_2X2_VHT0SS2        = 54,
201	WL_RATE_2X2_VHT1SS2        = 55,
202	WL_RATE_2X2_VHT2SS2        = 56,
203	WL_RATE_2X2_VHT3SS2        = 57,
204	WL_RATE_2X2_VHT4SS2        = 58,
205	WL_RATE_2X2_VHT5SS2        = 59,
206	WL_RATE_2X2_VHT6SS2        = 60,
207	WL_RATE_2X2_VHT7SS2        = 61,
208	WL_RATE_2X2_VHT8SS2        = 62,
209	WL_RATE_2X2_VHT9SS2        = 63,
210
211	/************
212	* 3 chains *
213	************
214	*/
215
216	/* 1 Stream expanded + 2 */
217	WL_RATE_1X3_DSSS_1         = 64,
218	WL_RATE_1X3_DSSS_2         = 65,
219	WL_RATE_1X3_DSSS_5_5       = 66,
220	WL_RATE_1X3_DSSS_11        = 67,
221
222	WL_RATE_1X3_CDD_OFDM_6     = 68,
223	WL_RATE_1X3_CDD_OFDM_9     = 69,
224	WL_RATE_1X3_CDD_OFDM_12    = 70,
225	WL_RATE_1X3_CDD_OFDM_18    = 71,
226	WL_RATE_1X3_CDD_OFDM_24    = 72,
227	WL_RATE_1X3_CDD_OFDM_36    = 73,
228	WL_RATE_1X3_CDD_OFDM_48    = 74,
229	WL_RATE_1X3_CDD_OFDM_54    = 75,
230
231	WL_RATE_1X3_CDD_MCS0       = 76,
232	WL_RATE_1X3_CDD_MCS1       = 77,
233	WL_RATE_1X3_CDD_MCS2       = 78,
234	WL_RATE_1X3_CDD_MCS3       = 79,
235	WL_RATE_1X3_CDD_MCS4       = 80,
236	WL_RATE_1X3_CDD_MCS5       = 81,
237	WL_RATE_1X3_CDD_MCS6       = 82,
238	WL_RATE_1X3_CDD_MCS7       = 83,
239
240	WL_RATE_1X3_VHT0SS1        = 76,
241	WL_RATE_1X3_VHT1SS1        = 77,
242	WL_RATE_1X3_VHT2SS1        = 78,
243	WL_RATE_1X3_VHT3SS1        = 79,
244	WL_RATE_1X3_VHT4SS1        = 80,
245	WL_RATE_1X3_VHT5SS1        = 81,
246	WL_RATE_1X3_VHT6SS1        = 82,
247	WL_RATE_1X3_VHT7SS1        = 83,
248	WL_RATE_1X3_VHT8SS1        = 84,
249	WL_RATE_1X3_VHT9SS1        = 85,
250
251	/* 2 Streams expanded + 1 */
252	WL_RATE_2X3_STBC_MCS0      = 86,
253	WL_RATE_2X3_STBC_MCS1      = 87,
254	WL_RATE_2X3_STBC_MCS2      = 88,
255	WL_RATE_2X3_STBC_MCS3      = 89,
256	WL_RATE_2X3_STBC_MCS4      = 90,
257	WL_RATE_2X3_STBC_MCS5      = 91,
258	WL_RATE_2X3_STBC_MCS6      = 92,
259	WL_RATE_2X3_STBC_MCS7      = 93,
260
261	WL_RATE_2X3_STBC_VHT0SS1   = 86,
262	WL_RATE_2X3_STBC_VHT1SS1   = 87,
263	WL_RATE_2X3_STBC_VHT2SS1   = 88,
264	WL_RATE_2X3_STBC_VHT3SS1   = 89,
265	WL_RATE_2X3_STBC_VHT4SS1   = 90,
266	WL_RATE_2X3_STBC_VHT5SS1   = 91,
267	WL_RATE_2X3_STBC_VHT6SS1   = 92,
268	WL_RATE_2X3_STBC_VHT7SS1   = 93,
269	WL_RATE_2X3_STBC_VHT8SS1   = 94,
270	WL_RATE_2X3_STBC_VHT9SS1   = 95,
271
272	WL_RATE_2X3_SDM_MCS8       = 96,
273	WL_RATE_2X3_SDM_MCS9       = 97,
274	WL_RATE_2X3_SDM_MCS10      = 98,
275	WL_RATE_2X3_SDM_MCS11      = 99,
276	WL_RATE_2X3_SDM_MCS12      = 100,
277	WL_RATE_2X3_SDM_MCS13      = 101,
278	WL_RATE_2X3_SDM_MCS14      = 102,
279	WL_RATE_2X3_SDM_MCS15      = 103,
280
281	WL_RATE_2X3_VHT0SS2        = 96,
282	WL_RATE_2X3_VHT1SS2        = 97,
283	WL_RATE_2X3_VHT2SS2        = 98,
284	WL_RATE_2X3_VHT3SS2        = 99,
285	WL_RATE_2X3_VHT4SS2        = 100,
286	WL_RATE_2X3_VHT5SS2        = 101,
287	WL_RATE_2X3_VHT6SS2        = 102,
288	WL_RATE_2X3_VHT7SS2        = 103,
289	WL_RATE_2X3_VHT8SS2        = 104,
290	WL_RATE_2X3_VHT9SS2        = 105,
291
292	/* 3 Streams */
293	WL_RATE_3X3_SDM_MCS16      = 106,
294	WL_RATE_3X3_SDM_MCS17      = 107,
295	WL_RATE_3X3_SDM_MCS18      = 108,
296	WL_RATE_3X3_SDM_MCS19      = 109,
297	WL_RATE_3X3_SDM_MCS20      = 110,
298	WL_RATE_3X3_SDM_MCS21      = 111,
299	WL_RATE_3X3_SDM_MCS22      = 112,
300	WL_RATE_3X3_SDM_MCS23      = 113,
301
302	WL_RATE_3X3_VHT0SS3        = 106,
303	WL_RATE_3X3_VHT1SS3        = 107,
304	WL_RATE_3X3_VHT2SS3        = 108,
305	WL_RATE_3X3_VHT3SS3        = 109,
306	WL_RATE_3X3_VHT4SS3        = 110,
307	WL_RATE_3X3_VHT5SS3        = 111,
308	WL_RATE_3X3_VHT6SS3        = 112,
309	WL_RATE_3X3_VHT7SS3        = 113,
310	WL_RATE_3X3_VHT8SS3        = 114,
311	WL_RATE_3X3_VHT9SS3        = 115,
312
313
314	/****************************
315	 * TX Beamforming, 2 chains *
316	 ****************************
317	 */
318
319	/* 1 Stream expanded + 1 */
320
321	WL_RATE_1X2_TXBF_OFDM_6    = 116,
322	WL_RATE_1X2_TXBF_OFDM_9    = 117,
323	WL_RATE_1X2_TXBF_OFDM_12   = 118,
324	WL_RATE_1X2_TXBF_OFDM_18   = 119,
325	WL_RATE_1X2_TXBF_OFDM_24   = 120,
326	WL_RATE_1X2_TXBF_OFDM_36   = 121,
327	WL_RATE_1X2_TXBF_OFDM_48   = 122,
328	WL_RATE_1X2_TXBF_OFDM_54   = 123,
329
330	WL_RATE_1X2_TXBF_MCS0      = 124,
331	WL_RATE_1X2_TXBF_MCS1      = 125,
332	WL_RATE_1X2_TXBF_MCS2      = 126,
333	WL_RATE_1X2_TXBF_MCS3      = 127,
334	WL_RATE_1X2_TXBF_MCS4      = 128,
335	WL_RATE_1X2_TXBF_MCS5      = 129,
336	WL_RATE_1X2_TXBF_MCS6      = 130,
337	WL_RATE_1X2_TXBF_MCS7      = 131,
338
339	WL_RATE_1X2_TXBF_VHT0SS1   = 124,
340	WL_RATE_1X2_TXBF_VHT1SS1   = 125,
341	WL_RATE_1X2_TXBF_VHT2SS1   = 126,
342	WL_RATE_1X2_TXBF_VHT3SS1   = 127,
343	WL_RATE_1X2_TXBF_VHT4SS1   = 128,
344	WL_RATE_1X2_TXBF_VHT5SS1   = 129,
345	WL_RATE_1X2_TXBF_VHT6SS1   = 130,
346	WL_RATE_1X2_TXBF_VHT7SS1   = 131,
347	WL_RATE_1X2_TXBF_VHT8SS1   = 132,
348	WL_RATE_1X2_TXBF_VHT9SS1   = 133,
349
350	/* 2 Streams */
351
352	WL_RATE_2X2_TXBF_SDM_MCS8  = 134,
353	WL_RATE_2X2_TXBF_SDM_MCS9  = 135,
354	WL_RATE_2X2_TXBF_SDM_MCS10 = 136,
355	WL_RATE_2X2_TXBF_SDM_MCS11 = 137,
356	WL_RATE_2X2_TXBF_SDM_MCS12 = 138,
357	WL_RATE_2X2_TXBF_SDM_MCS13 = 139,
358	WL_RATE_2X2_TXBF_SDM_MCS14 = 140,
359	WL_RATE_2X2_TXBF_SDM_MCS15 = 141,
360
361	WL_RATE_2X2_TXBF_VHT0SS2   = 134,
362	WL_RATE_2X2_TXBF_VHT1SS2   = 135,
363	WL_RATE_2X2_TXBF_VHT2SS2   = 136,
364	WL_RATE_2X2_TXBF_VHT3SS2   = 137,
365	WL_RATE_2X2_TXBF_VHT4SS2   = 138,
366	WL_RATE_2X2_TXBF_VHT5SS2   = 139,
367	WL_RATE_2X2_TXBF_VHT6SS2   = 140,
368	WL_RATE_2X2_TXBF_VHT7SS2   = 141,
369
370
371	/****************************
372	 * TX Beamforming, 3 chains *
373	 ****************************
374	 */
375
376	/* 1 Stream expanded + 2 */
377
378	WL_RATE_1X3_TXBF_OFDM_6    = 142,
379	WL_RATE_1X3_TXBF_OFDM_9    = 143,
380	WL_RATE_1X3_TXBF_OFDM_12   = 144,
381	WL_RATE_1X3_TXBF_OFDM_18   = 145,
382	WL_RATE_1X3_TXBF_OFDM_24   = 146,
383	WL_RATE_1X3_TXBF_OFDM_36   = 147,
384	WL_RATE_1X3_TXBF_OFDM_48   = 148,
385	WL_RATE_1X3_TXBF_OFDM_54   = 149,
386
387	WL_RATE_1X3_TXBF_MCS0      = 150,
388	WL_RATE_1X3_TXBF_MCS1      = 151,
389	WL_RATE_1X3_TXBF_MCS2      = 152,
390	WL_RATE_1X3_TXBF_MCS3      = 153,
391	WL_RATE_1X3_TXBF_MCS4      = 154,
392	WL_RATE_1X3_TXBF_MCS5      = 155,
393	WL_RATE_1X3_TXBF_MCS6      = 156,
394	WL_RATE_1X3_TXBF_MCS7      = 157,
395
396	WL_RATE_1X3_TXBF_VHT0SS1   = 150,
397	WL_RATE_1X3_TXBF_VHT1SS1   = 151,
398	WL_RATE_1X3_TXBF_VHT2SS1   = 152,
399	WL_RATE_1X3_TXBF_VHT3SS1   = 153,
400	WL_RATE_1X3_TXBF_VHT4SS1   = 154,
401	WL_RATE_1X3_TXBF_VHT5SS1   = 155,
402	WL_RATE_1X3_TXBF_VHT6SS1   = 156,
403	WL_RATE_1X3_TXBF_VHT7SS1   = 157,
404	WL_RATE_1X3_TXBF_VHT8SS1   = 158,
405	WL_RATE_1X3_TXBF_VHT9SS1   = 159,
406
407	/* 2 Streams expanded + 1 */
408
409	WL_RATE_2X3_TXBF_SDM_MCS8  = 160,
410	WL_RATE_2X3_TXBF_SDM_MCS9  = 161,
411	WL_RATE_2X3_TXBF_SDM_MCS10 = 162,
412	WL_RATE_2X3_TXBF_SDM_MCS11 = 163,
413	WL_RATE_2X3_TXBF_SDM_MCS12 = 164,
414	WL_RATE_2X3_TXBF_SDM_MCS13 = 165,
415	WL_RATE_2X3_TXBF_SDM_MCS14 = 166,
416	WL_RATE_2X3_TXBF_SDM_MCS15 = 167,
417
418	WL_RATE_2X3_TXBF_VHT0SS2   = 160,
419	WL_RATE_2X3_TXBF_VHT1SS2   = 161,
420	WL_RATE_2X3_TXBF_VHT2SS2   = 162,
421	WL_RATE_2X3_TXBF_VHT3SS2   = 163,
422	WL_RATE_2X3_TXBF_VHT4SS2   = 164,
423	WL_RATE_2X3_TXBF_VHT5SS2   = 165,
424	WL_RATE_2X3_TXBF_VHT6SS2   = 166,
425	WL_RATE_2X3_TXBF_VHT7SS2   = 167,
426	WL_RATE_2X3_TXBF_VHT8SS2   = 168,
427	WL_RATE_2X3_TXBF_VHT9SS2   = 169,
428
429	/* 3 Streams */
430
431	WL_RATE_3X3_TXBF_SDM_MCS16 = 170,
432	WL_RATE_3X3_TXBF_SDM_MCS17 = 171,
433	WL_RATE_3X3_TXBF_SDM_MCS18 = 172,
434	WL_RATE_3X3_TXBF_SDM_MCS19 = 173,
435	WL_RATE_3X3_TXBF_SDM_MCS20 = 174,
436	WL_RATE_3X3_TXBF_SDM_MCS21 = 175,
437	WL_RATE_3X3_TXBF_SDM_MCS22 = 176,
438	WL_RATE_3X3_TXBF_SDM_MCS23 = 177,
439
440	WL_RATE_3X3_TXBF_VHT0SS3   = 170,
441	WL_RATE_3X3_TXBF_VHT1SS3   = 171,
442	WL_RATE_3X3_TXBF_VHT2SS3   = 172,
443	WL_RATE_3X3_TXBF_VHT3SS3   = 173,
444	WL_RATE_3X3_TXBF_VHT4SS3   = 174,
445	WL_RATE_3X3_TXBF_VHT5SS3   = 175,
446	WL_RATE_3X3_TXBF_VHT6SS3   = 176,
447	WL_RATE_3X3_TXBF_VHT7SS3   = 177
448} clm_rates_t;
449
450/* Number of rate codes */
451#define WL_NUMRATES 178
452
453#ifdef __cplusplus
454}
455#endif /* __cplusplus */
456
457#endif /* _bcmwifi_rates_h_ */
458