1
2
3
4
5
6#ifndef __iwl_fw_api_rs_h__
7#define __iwl_fw_api_rs_h__
8
9#include "mac.h"
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25enum iwl_tlc_mng_cfg_flags {
26 IWL_TLC_MNG_CFG_FLAGS_STBC_MSK = BIT(0),
27 IWL_TLC_MNG_CFG_FLAGS_LDPC_MSK = BIT(1),
28 IWL_TLC_MNG_CFG_FLAGS_HE_STBC_160MHZ_MSK = BIT(2),
29 IWL_TLC_MNG_CFG_FLAGS_HE_DCM_NSS_1_MSK = BIT(3),
30 IWL_TLC_MNG_CFG_FLAGS_HE_DCM_NSS_2_MSK = BIT(4),
31};
32
33
34
35
36
37
38
39
40
41enum iwl_tlc_mng_cfg_cw {
42 IWL_TLC_MNG_CH_WIDTH_20MHZ,
43 IWL_TLC_MNG_CH_WIDTH_40MHZ,
44 IWL_TLC_MNG_CH_WIDTH_80MHZ,
45 IWL_TLC_MNG_CH_WIDTH_160MHZ,
46 IWL_TLC_MNG_CH_WIDTH_LAST = IWL_TLC_MNG_CH_WIDTH_160MHZ,
47};
48
49
50
51
52
53
54enum iwl_tlc_mng_cfg_chains {
55 IWL_TLC_MNG_CHAIN_A_MSK = BIT(0),
56 IWL_TLC_MNG_CHAIN_B_MSK = BIT(1),
57};
58
59
60
61
62
63
64
65
66
67
68
69
70enum iwl_tlc_mng_cfg_mode {
71 IWL_TLC_MNG_MODE_CCK = 0,
72 IWL_TLC_MNG_MODE_OFDM_NON_HT = IWL_TLC_MNG_MODE_CCK,
73 IWL_TLC_MNG_MODE_NON_HT = IWL_TLC_MNG_MODE_CCK,
74 IWL_TLC_MNG_MODE_HT,
75 IWL_TLC_MNG_MODE_VHT,
76 IWL_TLC_MNG_MODE_HE,
77 IWL_TLC_MNG_MODE_INVALID,
78 IWL_TLC_MNG_MODE_NUM = IWL_TLC_MNG_MODE_INVALID,
79};
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97enum iwl_tlc_mng_ht_rates {
98 IWL_TLC_MNG_HT_RATE_MCS0 = 0,
99 IWL_TLC_MNG_HT_RATE_MCS1,
100 IWL_TLC_MNG_HT_RATE_MCS2,
101 IWL_TLC_MNG_HT_RATE_MCS3,
102 IWL_TLC_MNG_HT_RATE_MCS4,
103 IWL_TLC_MNG_HT_RATE_MCS5,
104 IWL_TLC_MNG_HT_RATE_MCS6,
105 IWL_TLC_MNG_HT_RATE_MCS7,
106 IWL_TLC_MNG_HT_RATE_MCS8,
107 IWL_TLC_MNG_HT_RATE_MCS9,
108 IWL_TLC_MNG_HT_RATE_MCS10,
109 IWL_TLC_MNG_HT_RATE_MCS11,
110 IWL_TLC_MNG_HT_RATE_MAX = IWL_TLC_MNG_HT_RATE_MCS11,
111};
112
113enum IWL_TLC_MNG_NSS {
114 IWL_TLC_NSS_1,
115 IWL_TLC_NSS_2,
116 IWL_TLC_NSS_MAX
117};
118
119enum IWL_TLC_HT_BW_RATES {
120 IWL_TLC_HT_BW_NONE_160,
121 IWL_TLC_HT_BW_160,
122};
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143struct iwl_tlc_config_cmd {
144 u8 sta_id;
145 u8 reserved1[3];
146 u8 max_ch_width;
147 u8 mode;
148 u8 chains;
149 u8 amsdu;
150 __le16 flags;
151 __le16 non_ht_rates;
152 __le16 ht_rates[IWL_TLC_NSS_MAX][2];
153 __le16 max_mpdu_len;
154 u8 sgi_ch_width_supp;
155 u8 reserved2;
156 __le32 max_tx_op;
157} __packed;
158
159
160
161
162
163
164enum iwl_tlc_update_flags {
165 IWL_TLC_NOTIF_FLAG_RATE = BIT(0),
166 IWL_TLC_NOTIF_FLAG_AMSDU = BIT(1),
167};
168
169
170
171
172
173
174
175
176
177
178struct iwl_tlc_update_notif {
179 u8 sta_id;
180 u8 reserved[3];
181 __le32 flags;
182 __le32 rate;
183 __le32 amsdu_size;
184 __le32 amsdu_enabled;
185} __packed;
186
187
188
189
190
191
192enum {
193 IWL_RATE_1M_INDEX = 0,
194 IWL_FIRST_CCK_RATE = IWL_RATE_1M_INDEX,
195 IWL_RATE_2M_INDEX,
196 IWL_RATE_5M_INDEX,
197 IWL_RATE_11M_INDEX,
198 IWL_LAST_CCK_RATE = IWL_RATE_11M_INDEX,
199 IWL_RATE_6M_INDEX,
200 IWL_FIRST_OFDM_RATE = IWL_RATE_6M_INDEX,
201 IWL_RATE_MCS_0_INDEX = IWL_RATE_6M_INDEX,
202 IWL_FIRST_HT_RATE = IWL_RATE_MCS_0_INDEX,
203 IWL_FIRST_VHT_RATE = IWL_RATE_MCS_0_INDEX,
204 IWL_RATE_9M_INDEX,
205 IWL_RATE_12M_INDEX,
206 IWL_RATE_MCS_1_INDEX = IWL_RATE_12M_INDEX,
207 IWL_RATE_18M_INDEX,
208 IWL_RATE_MCS_2_INDEX = IWL_RATE_18M_INDEX,
209 IWL_RATE_24M_INDEX,
210 IWL_RATE_MCS_3_INDEX = IWL_RATE_24M_INDEX,
211 IWL_RATE_36M_INDEX,
212 IWL_RATE_MCS_4_INDEX = IWL_RATE_36M_INDEX,
213 IWL_RATE_48M_INDEX,
214 IWL_RATE_MCS_5_INDEX = IWL_RATE_48M_INDEX,
215 IWL_RATE_54M_INDEX,
216 IWL_RATE_MCS_6_INDEX = IWL_RATE_54M_INDEX,
217 IWL_LAST_NON_HT_RATE = IWL_RATE_54M_INDEX,
218 IWL_RATE_60M_INDEX,
219 IWL_RATE_MCS_7_INDEX = IWL_RATE_60M_INDEX,
220 IWL_LAST_HT_RATE = IWL_RATE_MCS_7_INDEX,
221 IWL_RATE_MCS_8_INDEX,
222 IWL_RATE_MCS_9_INDEX,
223 IWL_LAST_VHT_RATE = IWL_RATE_MCS_9_INDEX,
224 IWL_RATE_MCS_10_INDEX,
225 IWL_RATE_MCS_11_INDEX,
226 IWL_LAST_HE_RATE = IWL_RATE_MCS_11_INDEX,
227 IWL_RATE_COUNT_LEGACY = IWL_LAST_NON_HT_RATE + 1,
228 IWL_RATE_COUNT = IWL_LAST_HE_RATE + 1,
229};
230
231#define IWL_RATE_BIT_MSK(r) BIT(IWL_RATE_##r##M_INDEX)
232
233
234enum {
235 IWL_RATE_6M_PLCP = 13,
236 IWL_RATE_9M_PLCP = 15,
237 IWL_RATE_12M_PLCP = 5,
238 IWL_RATE_18M_PLCP = 7,
239 IWL_RATE_24M_PLCP = 9,
240 IWL_RATE_36M_PLCP = 11,
241 IWL_RATE_48M_PLCP = 1,
242 IWL_RATE_54M_PLCP = 3,
243 IWL_RATE_1M_PLCP = 10,
244 IWL_RATE_2M_PLCP = 20,
245 IWL_RATE_5M_PLCP = 55,
246 IWL_RATE_11M_PLCP = 110,
247 IWL_RATE_INVM_PLCP = -1,
248};
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268#define RATE_MCS_HT_POS 8
269#define RATE_MCS_HT_MSK (1 << RATE_MCS_HT_POS)
270
271
272#define RATE_MCS_CCK_POS 9
273#define RATE_MCS_CCK_MSK (1 << RATE_MCS_CCK_POS)
274
275
276#define RATE_MCS_VHT_POS 26
277#define RATE_MCS_VHT_MSK (1 << RATE_MCS_VHT_POS)
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303#define RATE_HT_MCS_RATE_CODE_MSK 0x7
304#define RATE_HT_MCS_NSS_POS 3
305#define RATE_HT_MCS_NSS_MSK (3 << RATE_HT_MCS_NSS_POS)
306
307
308#define RATE_HT_MCS_GF_POS 10
309#define RATE_HT_MCS_GF_MSK (1 << RATE_HT_MCS_GF_POS)
310
311#define RATE_HT_MCS_INDEX_MSK 0x3f
312
313
314
315
316
317
318
319
320
321
322
323
324#define RATE_VHT_MCS_RATE_CODE_MSK 0xf
325#define RATE_VHT_MCS_NSS_POS 4
326#define RATE_VHT_MCS_NSS_MSK (3 << RATE_VHT_MCS_NSS_POS)
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350#define RATE_LEGACY_RATE_MSK 0xff
351
352
353#define RATE_MCS_HE_POS 10
354#define RATE_MCS_HE_MSK BIT(RATE_MCS_HE_POS)
355
356
357
358
359
360#define RATE_MCS_CHAN_WIDTH_POS 11
361#define RATE_MCS_CHAN_WIDTH_MSK (3 << RATE_MCS_CHAN_WIDTH_POS)
362#define RATE_MCS_CHAN_WIDTH_20 (0 << RATE_MCS_CHAN_WIDTH_POS)
363#define RATE_MCS_CHAN_WIDTH_40 (1 << RATE_MCS_CHAN_WIDTH_POS)
364#define RATE_MCS_CHAN_WIDTH_80 (2 << RATE_MCS_CHAN_WIDTH_POS)
365#define RATE_MCS_CHAN_WIDTH_160 (3 << RATE_MCS_CHAN_WIDTH_POS)
366
367
368#define RATE_MCS_SGI_POS 13
369#define RATE_MCS_SGI_MSK (1 << RATE_MCS_SGI_POS)
370
371
372#define RATE_MCS_ANT_POS 14
373#define RATE_MCS_ANT_A_MSK (1 << RATE_MCS_ANT_POS)
374#define RATE_MCS_ANT_B_MSK (2 << RATE_MCS_ANT_POS)
375#define RATE_MCS_ANT_C_MSK (4 << RATE_MCS_ANT_POS)
376#define RATE_MCS_ANT_AB_MSK (RATE_MCS_ANT_A_MSK | \
377 RATE_MCS_ANT_B_MSK)
378#define RATE_MCS_ANT_ABC_MSK (RATE_MCS_ANT_AB_MSK | \
379 RATE_MCS_ANT_C_MSK)
380#define RATE_MCS_ANT_MSK RATE_MCS_ANT_ABC_MSK
381
382
383#define RATE_MCS_STBC_POS 17
384#define RATE_MCS_STBC_MSK BIT(RATE_MCS_STBC_POS)
385
386
387#define RATE_HE_DUAL_CARRIER_MODE 18
388#define RATE_HE_DUAL_CARRIER_MODE_MSK BIT(RATE_HE_DUAL_CARRIER_MODE)
389
390
391#define RATE_MCS_BF_POS 19
392#define RATE_MCS_BF_MSK (1 << RATE_MCS_BF_POS)
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413#define RATE_MCS_HE_GI_LTF_POS 20
414#define RATE_MCS_HE_GI_LTF_MSK (3 << RATE_MCS_HE_GI_LTF_POS)
415
416
417#define RATE_MCS_HE_TYPE_POS 22
418#define RATE_MCS_HE_TYPE_SU (0 << RATE_MCS_HE_TYPE_POS)
419#define RATE_MCS_HE_TYPE_EXT_SU (1 << RATE_MCS_HE_TYPE_POS)
420#define RATE_MCS_HE_TYPE_MU (2 << RATE_MCS_HE_TYPE_POS)
421#define RATE_MCS_HE_TYPE_TRIG (3 << RATE_MCS_HE_TYPE_POS)
422#define RATE_MCS_HE_TYPE_MSK (3 << RATE_MCS_HE_TYPE_POS)
423
424
425#define RATE_MCS_DUP_POS 24
426#define RATE_MCS_DUP_MSK (3 << RATE_MCS_DUP_POS)
427
428
429#define RATE_MCS_LDPC_POS 27
430#define RATE_MCS_LDPC_MSK (1 << RATE_MCS_LDPC_POS)
431
432
433#define RATE_MCS_HE_106T_POS 28
434#define RATE_MCS_HE_106T_MSK (1 << RATE_MCS_HE_106T_POS)
435
436
437#define RATE_MCS_RTS_REQUIRED_POS (30)
438#define RATE_MCS_RTS_REQUIRED_MSK (0x1 << RATE_MCS_RTS_REQUIRED_POS)
439
440#define RATE_MCS_CTS_REQUIRED_POS (31)
441#define RATE_MCS_CTS_REQUIRED_MSK (0x1 << RATE_MCS_CTS_REQUIRED_POS)
442
443
444
445
446#define LQ_MAX_RETRY_NUM 16
447
448
449
450
451#define LQ_FLAG_USE_RTS_POS 0
452#define LQ_FLAG_USE_RTS_MSK (1 << LQ_FLAG_USE_RTS_POS)
453
454
455#define LQ_FLAG_COLOR_POS 1
456#define LQ_FLAG_COLOR_MSK (7 << LQ_FLAG_COLOR_POS)
457#define LQ_FLAG_COLOR_GET(_f) (((_f) & LQ_FLAG_COLOR_MSK) >>\
458 LQ_FLAG_COLOR_POS)
459#define LQ_FLAGS_COLOR_INC(_c) ((((_c) + 1) << LQ_FLAG_COLOR_POS) &\
460 LQ_FLAG_COLOR_MSK)
461#define LQ_FLAG_COLOR_SET(_f, _c) ((_c) | ((_f) & ~LQ_FLAG_COLOR_MSK))
462
463
464
465
466
467
468#define LQ_FLAG_RTS_BW_SIG_POS 4
469#define LQ_FLAG_RTS_BW_SIG_NONE (0 << LQ_FLAG_RTS_BW_SIG_POS)
470#define LQ_FLAG_RTS_BW_SIG_STATIC (1 << LQ_FLAG_RTS_BW_SIG_POS)
471#define LQ_FLAG_RTS_BW_SIG_DYNAMIC (2 << LQ_FLAG_RTS_BW_SIG_POS)
472
473
474
475
476#define LQ_FLAG_DYNAMIC_BW_POS 6
477#define LQ_FLAG_DYNAMIC_BW_MSK (1 << LQ_FLAG_DYNAMIC_BW_POS)
478
479
480
481
482
483
484
485
486
487
488
489
490
491#define LQ_SS_STBC_ALLOWED_POS 0
492#define LQ_SS_STBC_ALLOWED_MSK (3 << LQ_SS_STBC_ALLOWED_MSK)
493
494
495#define LQ_SS_STBC_1SS_ALLOWED (1 << LQ_SS_STBC_ALLOWED_POS)
496
497
498#define LQ_SS_BFER_ALLOWED_POS 2
499#define LQ_SS_BFER_ALLOWED (1 << LQ_SS_BFER_ALLOWED_POS)
500
501
502
503
504
505
506#define LQ_SS_FORCE_POS 3
507#define LQ_SS_FORCE (1 << LQ_SS_FORCE_POS)
508
509
510
511
512#define LQ_SS_PARAMS_VALID_POS 31
513#define LQ_SS_PARAMS_VALID (1 << LQ_SS_PARAMS_VALID_POS)
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541struct iwl_lq_cmd {
542 u8 sta_id;
543 u8 reduced_tpc;
544 __le16 control;
545
546 u8 flags;
547 u8 mimo_delim;
548 u8 single_stream_ant_msk;
549 u8 dual_stream_ant_msk;
550 u8 initial_rate_index[AC_NUM];
551
552 __le16 agg_time_limit;
553 u8 agg_disable_start_th;
554 u8 agg_frame_cnt_limit;
555 __le32 reserved2;
556 __le32 rs_table[LQ_MAX_RETRY_NUM];
557 __le32 ss_params;
558};
559
560#endif
561