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