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