1
2
3
4
5
6
7#ifndef __iwl_fw_api_rx_h__
8#define __iwl_fw_api_rx_h__
9
10
11
12#define IWL_RX_INFO_PHY_CNT 8
13#define IWL_RX_INFO_ENERGY_ANT_ABC_IDX 1
14#define IWL_RX_INFO_ENERGY_ANT_A_MSK 0x000000ff
15#define IWL_RX_INFO_ENERGY_ANT_B_MSK 0x0000ff00
16#define IWL_RX_INFO_ENERGY_ANT_C_MSK 0x00ff0000
17#define IWL_RX_INFO_ENERGY_ANT_A_POS 0
18#define IWL_RX_INFO_ENERGY_ANT_B_POS 8
19#define IWL_RX_INFO_ENERGY_ANT_C_POS 16
20
21enum iwl_mac_context_info {
22 MAC_CONTEXT_INFO_NONE,
23 MAC_CONTEXT_INFO_GSCAN,
24};
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50struct iwl_rx_phy_info {
51 u8 non_cfg_phy_cnt;
52 u8 cfg_phy_cnt;
53 u8 stat_id;
54 u8 reserved1;
55 __le32 system_timestamp;
56 __le64 timestamp;
57 __le32 beacon_time_stamp;
58 __le16 phy_flags;
59 __le16 channel;
60 __le32 non_cfg_phy[IWL_RX_INFO_PHY_CNT];
61 __le32 rate_n_flags;
62 __le32 byte_count;
63 u8 mac_active_msk;
64 u8 mac_context_info;
65 __le16 frame_time;
66} __packed;
67
68
69
70
71
72
73
74
75
76
77
78enum iwl_csum_rx_assist_info {
79 CSUM_RXA_RESERVED_MASK = 0x000f,
80 CSUM_RXA_MICSIZE_MASK = 0x00f0,
81 CSUM_RXA_HEADERLEN_MASK = 0x1f00,
82 CSUM_RXA_PADD = BIT(13),
83 CSUM_RXA_AMSDU = BIT(14),
84 CSUM_RXA_ENA = BIT(15)
85};
86
87
88
89
90
91
92struct iwl_rx_mpdu_res_start {
93 __le16 byte_count;
94 __le16 assist;
95} __packed;
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110enum iwl_rx_phy_flags {
111 RX_RES_PHY_FLAGS_BAND_24 = BIT(0),
112 RX_RES_PHY_FLAGS_MOD_CCK = BIT(1),
113 RX_RES_PHY_FLAGS_SHORT_PREAMBLE = BIT(2),
114 RX_RES_PHY_FLAGS_NARROW_BAND = BIT(3),
115 RX_RES_PHY_FLAGS_ANTENNA = (0x7 << 4),
116 RX_RES_PHY_FLAGS_ANTENNA_POS = 4,
117 RX_RES_PHY_FLAGS_AGG = BIT(7),
118 RX_RES_PHY_FLAGS_OFDM_HT = BIT(8),
119 RX_RES_PHY_FLAGS_OFDM_GF = BIT(9),
120 RX_RES_PHY_FLAGS_OFDM_VHT = BIT(10),
121};
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156enum iwl_mvm_rx_status {
157 RX_MPDU_RES_STATUS_CRC_OK = BIT(0),
158 RX_MPDU_RES_STATUS_OVERRUN_OK = BIT(1),
159 RX_MPDU_RES_STATUS_SRC_STA_FOUND = BIT(2),
160 RX_MPDU_RES_STATUS_KEY_VALID = BIT(3),
161 RX_MPDU_RES_STATUS_KEY_PARAM_OK = BIT(4),
162 RX_MPDU_RES_STATUS_ICV_OK = BIT(5),
163 RX_MPDU_RES_STATUS_MIC_OK = BIT(6),
164 RX_MPDU_RES_STATUS_TTAK_OK = BIT(7),
165 RX_MPDU_RES_STATUS_MNG_FRAME_REPLAY_ERR = BIT(7),
166 RX_MPDU_RES_STATUS_SEC_NO_ENC = (0 << 8),
167 RX_MPDU_RES_STATUS_SEC_WEP_ENC = (1 << 8),
168 RX_MPDU_RES_STATUS_SEC_CCM_ENC = (2 << 8),
169 RX_MPDU_RES_STATUS_SEC_TKIP_ENC = (3 << 8),
170 RX_MPDU_RES_STATUS_SEC_EXT_ENC = (4 << 8),
171 RX_MPDU_RES_STATUS_SEC_CMAC_GMAC_ENC = (6 << 8),
172 RX_MPDU_RES_STATUS_SEC_ENC_ERR = (7 << 8),
173 RX_MPDU_RES_STATUS_SEC_ENC_MSK = (7 << 8),
174 RX_MPDU_RES_STATUS_DEC_DONE = BIT(11),
175 RX_MPDU_RES_STATUS_EXT_IV_BIT_CMP = BIT(13),
176 RX_MPDU_RES_STATUS_KEY_ID_CMP_BIT = BIT(14),
177 RX_MPDU_RES_STATUS_ROBUST_MNG_FRAME = BIT(15),
178 RX_MPDU_RES_STATUS_CSUM_DONE = BIT(16),
179 RX_MPDU_RES_STATUS_CSUM_OK = BIT(17),
180 RX_MDPU_RES_STATUS_STA_ID_SHIFT = 24,
181 RX_MPDU_RES_STATUS_STA_ID_MSK = 0x1f << RX_MDPU_RES_STATUS_STA_ID_SHIFT,
182};
183
184
185enum iwl_rx_mpdu_mac_flags1 {
186 IWL_RX_MDPU_MFLG1_ADDRTYPE_MASK = 0x03,
187 IWL_RX_MPDU_MFLG1_MIC_CRC_LEN_MASK = 0xf0,
188
189
190
191 IWL_RX_MPDU_MFLG1_MIC_CRC_LEN_SHIFT = 3,
192};
193
194enum iwl_rx_mpdu_mac_flags2 {
195
196 IWL_RX_MPDU_MFLG2_HDR_LEN_MASK = 0x1f,
197 IWL_RX_MPDU_MFLG2_PAD = 0x20,
198 IWL_RX_MPDU_MFLG2_AMSDU = 0x40,
199};
200
201enum iwl_rx_mpdu_amsdu_info {
202 IWL_RX_MPDU_AMSDU_SUBFRAME_IDX_MASK = 0x7f,
203 IWL_RX_MPDU_AMSDU_LAST_SUBFRAME = 0x80,
204};
205
206#define RX_MPDU_BAND_POS 6
207#define RX_MPDU_BAND_MASK 0xC0
208#define BAND_IN_RX_STATUS(_val) \
209 (((_val) & RX_MPDU_BAND_MASK) >> RX_MPDU_BAND_POS)
210
211enum iwl_rx_l3_proto_values {
212 IWL_RX_L3_TYPE_NONE,
213 IWL_RX_L3_TYPE_IPV4,
214 IWL_RX_L3_TYPE_IPV4_FRAG,
215 IWL_RX_L3_TYPE_IPV6_FRAG,
216 IWL_RX_L3_TYPE_IPV6,
217 IWL_RX_L3_TYPE_IPV6_IN_IPV4,
218 IWL_RX_L3_TYPE_ARP,
219 IWL_RX_L3_TYPE_EAPOL,
220};
221
222#define IWL_RX_L3_PROTO_POS 4
223
224enum iwl_rx_l3l4_flags {
225 IWL_RX_L3L4_IP_HDR_CSUM_OK = BIT(0),
226 IWL_RX_L3L4_TCP_UDP_CSUM_OK = BIT(1),
227 IWL_RX_L3L4_TCP_FIN_SYN_RST_PSH = BIT(2),
228 IWL_RX_L3L4_TCP_ACK = BIT(3),
229 IWL_RX_L3L4_L3_PROTO_MASK = 0xf << IWL_RX_L3_PROTO_POS,
230 IWL_RX_L3L4_L4_PROTO_MASK = 0xf << 8,
231 IWL_RX_L3L4_RSS_HASH_MASK = 0xf << 12,
232};
233
234enum iwl_rx_mpdu_status {
235 IWL_RX_MPDU_STATUS_CRC_OK = BIT(0),
236 IWL_RX_MPDU_STATUS_OVERRUN_OK = BIT(1),
237 IWL_RX_MPDU_STATUS_SRC_STA_FOUND = BIT(2),
238 IWL_RX_MPDU_STATUS_KEY_VALID = BIT(3),
239 IWL_RX_MPDU_STATUS_KEY_PARAM_OK = BIT(4),
240 IWL_RX_MPDU_STATUS_ICV_OK = BIT(5),
241 IWL_RX_MPDU_STATUS_MIC_OK = BIT(6),
242 IWL_RX_MPDU_RES_STATUS_TTAK_OK = BIT(7),
243
244 IWL_RX_MPDU_STATUS_REPLAY_ERROR = BIT(7),
245 IWL_RX_MPDU_STATUS_SEC_MASK = 0x7 << 8,
246 IWL_RX_MPDU_STATUS_SEC_UNKNOWN = IWL_RX_MPDU_STATUS_SEC_MASK,
247 IWL_RX_MPDU_STATUS_SEC_NONE = 0x0 << 8,
248 IWL_RX_MPDU_STATUS_SEC_WEP = 0x1 << 8,
249 IWL_RX_MPDU_STATUS_SEC_CCM = 0x2 << 8,
250 IWL_RX_MPDU_STATUS_SEC_TKIP = 0x3 << 8,
251 IWL_RX_MPDU_STATUS_SEC_EXT_ENC = 0x4 << 8,
252 IWL_RX_MPDU_STATUS_SEC_GCM = 0x5 << 8,
253 IWL_RX_MPDU_STATUS_DECRYPTED = BIT(11),
254 IWL_RX_MPDU_STATUS_WEP_MATCH = BIT(12),
255 IWL_RX_MPDU_STATUS_EXT_IV_MATCH = BIT(13),
256 IWL_RX_MPDU_STATUS_KEY_ID_MATCH = BIT(14),
257 IWL_RX_MPDU_STATUS_ROBUST_MNG_FRAME = BIT(15),
258
259 IWL_RX_MPDU_STATUS_KEY = 0x3f0000,
260 IWL_RX_MPDU_STATUS_DUPLICATE = BIT(22),
261
262 IWL_RX_MPDU_STATUS_STA_ID = 0x1f000000,
263};
264
265#define IWL_RX_REORDER_DATA_INVALID_BAID 0x7f
266
267enum iwl_rx_mpdu_reorder_data {
268 IWL_RX_MPDU_REORDER_NSSN_MASK = 0x00000fff,
269 IWL_RX_MPDU_REORDER_SN_MASK = 0x00fff000,
270 IWL_RX_MPDU_REORDER_SN_SHIFT = 12,
271 IWL_RX_MPDU_REORDER_BAID_MASK = 0x7f000000,
272 IWL_RX_MPDU_REORDER_BAID_SHIFT = 24,
273 IWL_RX_MPDU_REORDER_BA_OLD_SN = 0x80000000,
274};
275
276enum iwl_rx_mpdu_phy_info {
277 IWL_RX_MPDU_PHY_AMPDU = BIT(5),
278 IWL_RX_MPDU_PHY_AMPDU_TOGGLE = BIT(6),
279 IWL_RX_MPDU_PHY_SHORT_PREAMBLE = BIT(7),
280
281 IWL_RX_MPDU_PHY_NCCK_ADDTL_NTFY = BIT(7),
282 IWL_RX_MPDU_PHY_TSF_OVERLOAD = BIT(8),
283};
284
285enum iwl_rx_mpdu_mac_info {
286 IWL_RX_MPDU_PHY_MAC_INDEX_MASK = 0x0f,
287 IWL_RX_MPDU_PHY_PHY_INDEX_MASK = 0xf0,
288};
289
290
291enum iwl_rx_phy_data0 {
292
293 IWL_RX_PHY_DATA0_HE_BEAM_CHNG = 0x00000001,
294 IWL_RX_PHY_DATA0_HE_UPLINK = 0x00000002,
295 IWL_RX_PHY_DATA0_HE_BSS_COLOR_MASK = 0x000000fc,
296 IWL_RX_PHY_DATA0_HE_SPATIAL_REUSE_MASK = 0x00000f00,
297
298 IWL_RX_PHY_DATA0_HE_TXOP_DUR_MASK = 0x000fe000,
299 IWL_RX_PHY_DATA0_HE_LDPC_EXT_SYM = 0x00100000,
300 IWL_RX_PHY_DATA0_HE_PRE_FEC_PAD_MASK = 0x00600000,
301 IWL_RX_PHY_DATA0_HE_PE_DISAMBIG = 0x00800000,
302 IWL_RX_PHY_DATA0_HE_DOPPLER = 0x01000000,
303
304 IWL_RX_PHY_DATA0_HE_DELIM_EOF = 0x80000000,
305};
306
307enum iwl_rx_phy_info_type {
308 IWL_RX_PHY_INFO_TYPE_NONE = 0,
309 IWL_RX_PHY_INFO_TYPE_CCK = 1,
310 IWL_RX_PHY_INFO_TYPE_OFDM_LGCY = 2,
311 IWL_RX_PHY_INFO_TYPE_HT = 3,
312 IWL_RX_PHY_INFO_TYPE_VHT_SU = 4,
313 IWL_RX_PHY_INFO_TYPE_VHT_MU = 5,
314 IWL_RX_PHY_INFO_TYPE_HE_SU = 6,
315 IWL_RX_PHY_INFO_TYPE_HE_MU = 7,
316 IWL_RX_PHY_INFO_TYPE_HE_TB = 8,
317 IWL_RX_PHY_INFO_TYPE_HE_MU_EXT = 9,
318 IWL_RX_PHY_INFO_TYPE_HE_TB_EXT = 10,
319};
320
321
322enum iwl_rx_phy_data1 {
323
324
325
326
327 IWL_RX_PHY_DATA1_INFO_TYPE_MASK = 0xf0000000,
328
329
330 IWL_RX_PHY_DATA1_LSIG_LEN_MASK = 0x0fff0000,
331
332
333 IWL_RX_PHY_DATA1_HE_MU_SIGB_COMPRESSION = 0x00000001,
334 IWL_RX_PHY_DATA1_HE_MU_SIBG_SYM_OR_USER_NUM_MASK = 0x0000001e,
335
336
337 IWL_RX_PHY_DATA1_HE_LTF_NUM_MASK = 0x000000e0,
338 IWL_RX_PHY_DATA1_HE_RU_ALLOC_SEC80 = 0x00000100,
339
340 IWL_RX_PHY_DATA1_HE_RU_ALLOC_MASK = 0x0000fe00,
341
342
343 IWL_RX_PHY_DATA1_HE_TB_PILOT_TYPE = 0x00000001,
344 IWL_RX_PHY_DATA1_HE_TB_LOW_SS_MASK = 0x0000000e,
345};
346
347
348enum iwl_rx_phy_data2 {
349
350
351 IWL_RX_PHY_DATA2_HE_MU_EXT_CH1_RU0 = 0x000000ff,
352 IWL_RX_PHY_DATA2_HE_MU_EXT_CH1_RU2 = 0x0000ff00,
353 IWL_RX_PHY_DATA2_HE_MU_EXT_CH2_RU0 = 0x00ff0000,
354 IWL_RX_PHY_DATA2_HE_MU_EXT_CH2_RU2 = 0xff000000,
355
356
357 IWL_RX_PHY_DATA2_HE_TB_EXT_SPTL_REUSE1 = 0x0000000f,
358 IWL_RX_PHY_DATA2_HE_TB_EXT_SPTL_REUSE2 = 0x000000f0,
359 IWL_RX_PHY_DATA2_HE_TB_EXT_SPTL_REUSE3 = 0x00000f00,
360 IWL_RX_PHY_DATA2_HE_TB_EXT_SPTL_REUSE4 = 0x0000f000,
361};
362
363
364enum iwl_rx_phy_data3 {
365
366 IWL_RX_PHY_DATA3_HE_MU_EXT_CH1_RU1 = 0x000000ff,
367 IWL_RX_PHY_DATA3_HE_MU_EXT_CH1_RU3 = 0x0000ff00,
368 IWL_RX_PHY_DATA3_HE_MU_EXT_CH2_RU1 = 0x00ff0000,
369 IWL_RX_PHY_DATA3_HE_MU_EXT_CH2_RU3 = 0xff000000,
370};
371
372
373enum iwl_rx_phy_data4 {
374
375 IWL_RX_PHY_DATA4_HE_MU_EXT_CH1_CTR_RU = 0x0001,
376 IWL_RX_PHY_DATA4_HE_MU_EXT_CH2_CTR_RU = 0x0002,
377 IWL_RX_PHY_DATA4_HE_MU_EXT_CH1_CRC_OK = 0x0004,
378 IWL_RX_PHY_DATA4_HE_MU_EXT_CH2_CRC_OK = 0x0008,
379 IWL_RX_PHY_DATA4_HE_MU_EXT_SIGB_MCS_MASK = 0x00f0,
380 IWL_RX_PHY_DATA4_HE_MU_EXT_SIGB_DCM = 0x0100,
381 IWL_RX_PHY_DATA4_HE_MU_EXT_PREAMBLE_PUNC_TYPE_MASK = 0x0600,
382};
383
384
385
386
387struct iwl_rx_mpdu_desc_v1 {
388
389 union {
390
391
392
393 __le32 rss_hash;
394
395
396
397
398 __le32 phy_data2;
399 };
400
401
402 union {
403
404
405
406 __le32 filter_match;
407
408
409
410
411 __le32 phy_data3;
412 };
413
414
415
416
417
418 __le32 rate_n_flags;
419
420
421
422
423 u8 energy_a;
424
425
426
427 u8 energy_b;
428
429
430
431 u8 channel;
432
433
434
435 u8 mac_context;
436
437
438
439
440 __le32 gp2_on_air_rise;
441
442 union {
443
444
445
446
447
448 __le64 tsf_on_air_rise;
449
450 struct {
451
452
453
454 __le32 phy_data0;
455
456
457
458
459
460 __le32 phy_data1;
461 };
462 };
463} __packed;
464
465
466
467
468struct iwl_rx_mpdu_desc_v3 {
469
470 union {
471
472
473
474 __le32 filter_match;
475
476
477
478
479 __le32 phy_data3;
480 };
481
482
483 union {
484
485
486
487 __le32 rss_hash;
488
489
490
491
492 __le32 phy_data2;
493 };
494
495
496
497
498
499 __le32 partial_hash;
500
501
502
503
504 __be16 raw_xsum;
505
506
507
508 __le16 reserved_xsum;
509
510
511
512
513 __le32 rate_n_flags;
514
515
516
517
518 u8 energy_a;
519
520
521
522 u8 energy_b;
523
524
525
526 u8 channel;
527
528
529
530 u8 mac_context;
531
532
533
534
535 __le32 gp2_on_air_rise;
536
537 union {
538
539
540
541
542
543 __le64 tsf_on_air_rise;
544
545 struct {
546
547
548
549 __le32 phy_data0;
550
551
552
553
554
555 __le32 phy_data1;
556 };
557 };
558
559
560
561
562 __le32 reserved[2];
563} __packed;
564
565
566
567
568struct iwl_rx_mpdu_desc {
569
570
571
572
573 __le16 mpdu_len;
574
575
576
577 u8 mac_flags1;
578
579
580
581 u8 mac_flags2;
582
583
584
585
586 u8 amsdu_info;
587
588
589
590 __le16 phy_info;
591
592
593
594 u8 mac_phy_idx;
595
596
597
598
599 __le16 raw_csum;
600
601 union {
602
603
604
605 __le16 l3l4_flags;
606
607
608
609
610 __le16 phy_data4;
611 };
612
613
614
615
616 __le32 status;
617
618
619
620
621
622 __le32 reorder_data;
623
624 union {
625 struct iwl_rx_mpdu_desc_v1 v1;
626 struct iwl_rx_mpdu_desc_v3 v3;
627 };
628} __packed;
629
630#define IWL_RX_DESC_SIZE_V1 offsetofend(struct iwl_rx_mpdu_desc, v1)
631
632#define RX_NO_DATA_CHAIN_A_POS 0
633#define RX_NO_DATA_CHAIN_A_MSK (0xff << RX_NO_DATA_CHAIN_A_POS)
634#define RX_NO_DATA_CHAIN_B_POS 8
635#define RX_NO_DATA_CHAIN_B_MSK (0xff << RX_NO_DATA_CHAIN_B_POS)
636#define RX_NO_DATA_CHANNEL_POS 16
637#define RX_NO_DATA_CHANNEL_MSK (0xff << RX_NO_DATA_CHANNEL_POS)
638
639#define RX_NO_DATA_INFO_TYPE_POS 0
640#define RX_NO_DATA_INFO_TYPE_MSK (0xff << RX_NO_DATA_INFO_TYPE_POS)
641#define RX_NO_DATA_INFO_TYPE_NONE 0
642#define RX_NO_DATA_INFO_TYPE_RX_ERR 1
643#define RX_NO_DATA_INFO_TYPE_NDP 2
644#define RX_NO_DATA_INFO_TYPE_MU_UNMATCHED 3
645#define RX_NO_DATA_INFO_TYPE_HE_TB_UNMATCHED 4
646
647#define RX_NO_DATA_INFO_ERR_POS 8
648#define RX_NO_DATA_INFO_ERR_MSK (0xff << RX_NO_DATA_INFO_ERR_POS)
649#define RX_NO_DATA_INFO_ERR_NONE 0
650#define RX_NO_DATA_INFO_ERR_BAD_PLCP 1
651#define RX_NO_DATA_INFO_ERR_UNSUPPORTED_RATE 2
652#define RX_NO_DATA_INFO_ERR_NO_DELIM 3
653#define RX_NO_DATA_INFO_ERR_BAD_MAC_HDR 4
654
655#define RX_NO_DATA_FRAME_TIME_POS 0
656#define RX_NO_DATA_FRAME_TIME_MSK (0xfffff << RX_NO_DATA_FRAME_TIME_POS)
657
658#define RX_NO_DATA_RX_VEC0_HE_NSTS_MSK 0x03800000
659#define RX_NO_DATA_RX_VEC0_VHT_NSTS_MSK 0x38000000
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674struct iwl_rx_no_data {
675 __le32 info;
676 __le32 rssi;
677 __le32 on_air_rise_time;
678 __le32 fr_time;
679 __le32 rate;
680 __le32 phy_info[2];
681 __le32 rx_vec[2];
682} __packed;
683
684struct iwl_frame_release {
685 u8 baid;
686 u8 reserved;
687 __le16 nssn;
688};
689
690
691
692
693
694
695enum iwl_bar_frame_release_sta_tid {
696 IWL_BAR_FRAME_RELEASE_TID_MASK = 0x0000000f,
697 IWL_BAR_FRAME_RELEASE_STA_MASK = 0x000001f0,
698};
699
700
701
702
703
704
705
706enum iwl_bar_frame_release_ba_info {
707 IWL_BAR_FRAME_RELEASE_NSSN_MASK = 0x00000fff,
708 IWL_BAR_FRAME_RELEASE_SN_MASK = 0x00fff000,
709 IWL_BAR_FRAME_RELEASE_BAID_MASK = 0x3f000000,
710};
711
712
713
714
715
716
717struct iwl_bar_frame_release {
718 __le32 sta_tid;
719 __le32 ba_info;
720} __packed;
721
722enum iwl_rss_hash_func_en {
723 IWL_RSS_HASH_TYPE_IPV4_TCP,
724 IWL_RSS_HASH_TYPE_IPV4_UDP,
725 IWL_RSS_HASH_TYPE_IPV4_PAYLOAD,
726 IWL_RSS_HASH_TYPE_IPV6_TCP,
727 IWL_RSS_HASH_TYPE_IPV6_UDP,
728 IWL_RSS_HASH_TYPE_IPV6_PAYLOAD,
729};
730
731#define IWL_RSS_HASH_KEY_CNT 10
732#define IWL_RSS_INDIRECTION_TABLE_SIZE 128
733#define IWL_RSS_ENABLE 1
734
735
736
737
738
739
740
741
742
743
744struct iwl_rss_config_cmd {
745 __le32 flags;
746 u8 hash_mask;
747 u8 reserved[3];
748 __le32 secret_key[IWL_RSS_HASH_KEY_CNT];
749 u8 indirection_table[IWL_RSS_INDIRECTION_TABLE_SIZE];
750} __packed;
751
752#define IWL_MULTI_QUEUE_SYNC_SENDER_POS 0
753#define IWL_MULTI_QUEUE_SYNC_SENDER_MSK 0xf
754
755
756
757
758
759
760
761
762
763struct iwl_rxq_sync_cmd {
764 __le32 flags;
765 __le32 rxq_mask;
766 __le32 count;
767 u8 payload[];
768} __packed;
769
770
771
772
773
774
775
776
777struct iwl_rxq_sync_notification {
778 __le32 count;
779 u8 payload[];
780} __packed;
781
782
783
784
785
786
787
788
789enum iwl_mvm_pm_event {
790 IWL_MVM_PM_EVENT_AWAKE,
791 IWL_MVM_PM_EVENT_ASLEEP,
792 IWL_MVM_PM_EVENT_UAPSD,
793 IWL_MVM_PM_EVENT_PS_POLL,
794};
795
796
797
798
799
800
801struct iwl_mvm_pm_state_notification {
802 u8 sta_id;
803 u8 type;
804
805 __le16 reserved;
806} __packed;
807
808#define BA_WINDOW_STREAMS_MAX 16
809#define BA_WINDOW_STATUS_TID_MSK 0x000F
810#define BA_WINDOW_STATUS_STA_ID_POS 4
811#define BA_WINDOW_STATUS_STA_ID_MSK 0x01F0
812#define BA_WINDOW_STATUS_VALID_MSK BIT(9)
813
814
815
816
817
818
819
820
821struct iwl_ba_window_status_notif {
822 __le64 bitmap[BA_WINDOW_STREAMS_MAX];
823 __le16 ra_tid[BA_WINDOW_STREAMS_MAX];
824 __le32 start_seq_num[BA_WINDOW_STREAMS_MAX];
825 __le16 mpdu_rx_count[BA_WINDOW_STREAMS_MAX];
826} __packed;
827
828
829
830
831
832
833
834
835
836
837
838struct iwl_rfh_queue_data {
839 u8 q_num;
840 u8 enable;
841 __le16 reserved;
842 __le64 urbd_stts_wrptr;
843 __le64 fr_bd_cb;
844 __le64 ur_bd_cb;
845 __le32 fr_bd_wid;
846} __packed;
847
848
849
850
851
852
853
854struct iwl_rfh_queue_config {
855 u8 num_queues;
856 u8 reserved[3];
857 struct iwl_rfh_queue_data data[];
858} __packed;
859
860#endif
861