• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 1999-2011, Broadcom Corporation
3  *
4  * Permission to use, copy, modify, and/or distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
11  * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
13  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
14  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  *
16  * Fundamental types and constants relating to 802.11
17  *
18  * $Id: 802.11.h,v 9.260.2.6 2010-12-15 21:41:14 Exp $
19  */
20 
21 
22 #ifndef _802_11_H_
23 #define _802_11_H_
24 
25 #ifndef _TYPEDEFS_H_
26 #include <typedefs.h>
27 #endif
28 
29 #ifndef _NET_ETHERNET_H_
30 #include <proto/ethernet.h>
31 #endif
32 
33 #include <proto/wpa.h>
34 
35 
36 #include <packed_section_start.h>
37 
38 
39 #define DOT11_TU_TO_US          1024
40 
41 
42 #define DOT11_A3_HDR_LEN        24
43 #define DOT11_A4_HDR_LEN        30
44 #define DOT11_MAC_HDR_LEN       DOT11_A3_HDR_LEN
45 #define DOT11_FCS_LEN           4
46 #define DOT11_ICV_LEN           4
47 #define DOT11_ICV_AES_LEN       8
48 #define DOT11_QOS_LEN           2
49 #define DOT11_HTC_LEN           4
50 
51 #define DOT11_KEY_INDEX_SHIFT       6
52 #define DOT11_IV_LEN            4
53 #define DOT11_IV_TKIP_LEN       8
54 #define DOT11_IV_AES_OCB_LEN        4
55 #define DOT11_IV_AES_CCM_LEN        8
56 #define DOT11_IV_MAX_LEN        8
57 
58 
59 #define DOT11_MAX_MPDU_BODY_LEN     2304
60 
61 #define DOT11_MAX_MPDU_LEN      (DOT11_A4_HDR_LEN + \
62 					 DOT11_QOS_LEN + \
63 					 DOT11_IV_AES_CCM_LEN + \
64 					 DOT11_MAX_MPDU_BODY_LEN + \
65 					 DOT11_ICV_LEN + \
66 					 DOT11_FCS_LEN)
67 
68 #define DOT11_MAX_SSID_LEN      32
69 
70 
71 #define DOT11_DEFAULT_RTS_LEN       2347
72 #define DOT11_MAX_RTS_LEN       2347
73 
74 
75 #define DOT11_MIN_FRAG_LEN      256
76 #define DOT11_MAX_FRAG_LEN      2346
77 #define DOT11_DEFAULT_FRAG_LEN      2346
78 
79 
80 #define DOT11_MIN_BEACON_PERIOD     1
81 #define DOT11_MAX_BEACON_PERIOD     0xFFFF
82 
83 
84 #define DOT11_MIN_DTIM_PERIOD       1
85 #define DOT11_MAX_DTIM_PERIOD       0xFF
86 
87 
88 #define DOT11_LLC_SNAP_HDR_LEN      8
89 #define DOT11_OUI_LEN           3
90 BWL_PRE_PACKED_STRUCT struct dot11_llc_snap_header {
91 	uint8   dsap;
92 	uint8   ssap;
93 	uint8   ctl;
94 	uint8   oui[DOT11_OUI_LEN];
95 	uint16  type;
96 } BWL_POST_PACKED_STRUCT;
97 
98 
99 #define RFC1042_HDR_LEN (ETHER_HDR_LEN + DOT11_LLC_SNAP_HDR_LEN)
100 
101 
102 
103 BWL_PRE_PACKED_STRUCT struct dot11_header {
104 	uint16          fc;
105 	uint16          durid;
106 	struct ether_addr   a1;
107 	struct ether_addr   a2;
108 	struct ether_addr   a3;
109 	uint16          seq;
110 	struct ether_addr   a4;
111 } BWL_POST_PACKED_STRUCT;
112 
113 
114 
115 BWL_PRE_PACKED_STRUCT struct dot11_rts_frame {
116 	uint16          fc;
117 	uint16          durid;
118 	struct ether_addr   ra;
119 	struct ether_addr   ta;
120 } BWL_POST_PACKED_STRUCT;
121 #define DOT11_RTS_LEN       16
122 
123 BWL_PRE_PACKED_STRUCT struct dot11_cts_frame {
124 	uint16          fc;
125 	uint16          durid;
126 	struct ether_addr   ra;
127 } BWL_POST_PACKED_STRUCT;
128 #define DOT11_CTS_LEN       10
129 
130 BWL_PRE_PACKED_STRUCT struct dot11_ack_frame {
131 	uint16          fc;
132 	uint16          durid;
133 	struct ether_addr   ra;
134 } BWL_POST_PACKED_STRUCT;
135 #define DOT11_ACK_LEN       10
136 
137 BWL_PRE_PACKED_STRUCT struct dot11_ps_poll_frame {
138 	uint16          fc;
139 	uint16          durid;
140 	struct ether_addr   bssid;
141 	struct ether_addr   ta;
142 } BWL_POST_PACKED_STRUCT;
143 #define DOT11_PS_POLL_LEN   16
144 
145 BWL_PRE_PACKED_STRUCT struct dot11_cf_end_frame {
146 	uint16          fc;
147 	uint16          durid;
148 	struct ether_addr   ra;
149 	struct ether_addr   bssid;
150 } BWL_POST_PACKED_STRUCT;
151 #define DOT11_CS_END_LEN    16
152 
153 
154 BWL_PRE_PACKED_STRUCT struct dot11_action_wifi_vendor_specific {
155 	uint8   category;
156 	uint8   OUI[3];
157 	uint8   type;
158 	uint8   subtype;
159 	uint8   data[1040];
160 } BWL_POST_PACKED_STRUCT;
161 typedef struct dot11_action_wifi_vendor_specific dot11_action_wifi_vendor_specific_t;
162 
163 
164 BWL_PRE_PACKED_STRUCT struct dot11_action_vs_frmhdr {
165 	uint8   category;
166 	uint8   OUI[3];
167 	uint8   type;
168 	uint8   subtype;
169 	uint8   data[1];
170 } BWL_POST_PACKED_STRUCT;
171 typedef struct dot11_action_vs_frmhdr dot11_action_vs_frmhdr_t;
172 #define DOT11_ACTION_VS_HDR_LEN 6
173 
174 #define BCM_ACTION_OUI_BYTE0    0x00
175 #define BCM_ACTION_OUI_BYTE1    0x90
176 #define BCM_ACTION_OUI_BYTE2    0x4c
177 
178 
179 #define DOT11_BA_CTL_POLICY_NORMAL  0x0000
180 #define DOT11_BA_CTL_POLICY_NOACK   0x0001
181 #define DOT11_BA_CTL_POLICY_MASK    0x0001
182 
183 #define DOT11_BA_CTL_MTID       0x0002
184 #define DOT11_BA_CTL_COMPRESSED     0x0004
185 
186 #define DOT11_BA_CTL_NUMMSDU_MASK   0x0FC0
187 #define DOT11_BA_CTL_NUMMSDU_SHIFT  6
188 
189 #define DOT11_BA_CTL_TID_MASK       0xF000
190 #define DOT11_BA_CTL_TID_SHIFT      12
191 
192 
193 BWL_PRE_PACKED_STRUCT struct dot11_ctl_header {
194 	uint16          fc;
195 	uint16          durid;
196 	struct ether_addr   ra;
197 	struct ether_addr   ta;
198 } BWL_POST_PACKED_STRUCT;
199 #define DOT11_CTL_HDR_LEN   16
200 
201 
202 BWL_PRE_PACKED_STRUCT struct dot11_bar {
203 	uint16          bar_control;
204 	uint16          seqnum;
205 } BWL_POST_PACKED_STRUCT;
206 #define DOT11_BAR_LEN       4
207 
208 #define DOT11_BA_BITMAP_LEN 128
209 #define DOT11_BA_CMP_BITMAP_LEN 8
210 
211 BWL_PRE_PACKED_STRUCT struct dot11_ba {
212 	uint16          ba_control;
213 	uint16          seqnum;
214 	uint8           bitmap[DOT11_BA_BITMAP_LEN];
215 } BWL_POST_PACKED_STRUCT;
216 #define DOT11_BA_LEN        4
217 
218 
219 BWL_PRE_PACKED_STRUCT struct dot11_management_header {
220 	uint16          fc;
221 	uint16          durid;
222 	struct ether_addr   da;
223 	struct ether_addr   sa;
224 	struct ether_addr   bssid;
225 	uint16          seq;
226 } BWL_POST_PACKED_STRUCT;
227 #define DOT11_MGMT_HDR_LEN  24
228 
229 
230 
231 BWL_PRE_PACKED_STRUCT struct dot11_bcn_prb {
232 	uint32          timestamp[2];
233 	uint16          beacon_interval;
234 	uint16          capability;
235 } BWL_POST_PACKED_STRUCT;
236 #define DOT11_BCN_PRB_LEN   12
237 #define DOT11_BCN_PRB_FIXED_LEN 12
238 
239 BWL_PRE_PACKED_STRUCT struct dot11_auth {
240 	uint16          alg;
241 	uint16          seq;
242 	uint16          status;
243 } BWL_POST_PACKED_STRUCT;
244 #define DOT11_AUTH_FIXED_LEN    6
245 
246 BWL_PRE_PACKED_STRUCT struct dot11_assoc_req {
247 	uint16          capability;
248 	uint16          listen;
249 } BWL_POST_PACKED_STRUCT;
250 #define DOT11_ASSOC_REQ_FIXED_LEN   4
251 
252 BWL_PRE_PACKED_STRUCT struct dot11_reassoc_req {
253 	uint16          capability;
254 	uint16          listen;
255 	struct ether_addr   ap;
256 } BWL_POST_PACKED_STRUCT;
257 #define DOT11_REASSOC_REQ_FIXED_LEN 10
258 
259 BWL_PRE_PACKED_STRUCT struct dot11_assoc_resp {
260 	uint16          capability;
261 	uint16          status;
262 	uint16          aid;
263 } BWL_POST_PACKED_STRUCT;
264 #define DOT11_ASSOC_RESP_FIXED_LEN  6
265 
266 BWL_PRE_PACKED_STRUCT struct dot11_action_measure {
267 	uint8   category;
268 	uint8   action;
269 	uint8   token;
270 	uint8   data[1];
271 } BWL_POST_PACKED_STRUCT;
272 #define DOT11_ACTION_MEASURE_LEN    3
273 
274 BWL_PRE_PACKED_STRUCT struct dot11_action_ht_ch_width {
275 	uint8   category;
276 	uint8   action;
277 	uint8   ch_width;
278 } BWL_POST_PACKED_STRUCT;
279 
280 BWL_PRE_PACKED_STRUCT struct dot11_action_ht_mimops {
281 	uint8   category;
282 	uint8   action;
283 	uint8   control;
284 } BWL_POST_PACKED_STRUCT;
285 
286 #define SM_PWRSAVE_ENABLE   1
287 #define SM_PWRSAVE_MODE     2
288 
289 
290 BWL_PRE_PACKED_STRUCT struct dot11_power_cnst {
291 	uint8 id;
292 	uint8 len;
293 	uint8 power;
294 } BWL_POST_PACKED_STRUCT;
295 typedef struct dot11_power_cnst dot11_power_cnst_t;
296 
297 BWL_PRE_PACKED_STRUCT struct dot11_power_cap {
298 	uint8 min;
299 	uint8 max;
300 } BWL_POST_PACKED_STRUCT;
301 typedef struct dot11_power_cap dot11_power_cap_t;
302 
303 BWL_PRE_PACKED_STRUCT struct dot11_tpc_rep {
304 	uint8 id;
305 	uint8 len;
306 	uint8 tx_pwr;
307 	uint8 margin;
308 } BWL_POST_PACKED_STRUCT;
309 typedef struct dot11_tpc_rep dot11_tpc_rep_t;
310 #define DOT11_MNG_IE_TPC_REPORT_LEN 2
311 
312 BWL_PRE_PACKED_STRUCT struct dot11_supp_channels {
313 	uint8 id;
314 	uint8 len;
315 	uint8 first_channel;
316 	uint8 num_channels;
317 } BWL_POST_PACKED_STRUCT;
318 typedef struct dot11_supp_channels dot11_supp_channels_t;
319 
320 
321 BWL_PRE_PACKED_STRUCT struct dot11_extch {
322 	uint8   id;
323 	uint8   len;
324 	uint8   extch;
325 } BWL_POST_PACKED_STRUCT;
326 typedef struct dot11_extch dot11_extch_ie_t;
327 
328 BWL_PRE_PACKED_STRUCT struct dot11_brcm_extch {
329 	uint8   id;
330 	uint8   len;
331 	uint8   oui[3];
332 	uint8   type;
333 	uint8   extch;
334 } BWL_POST_PACKED_STRUCT;
335 typedef struct dot11_brcm_extch dot11_brcm_extch_ie_t;
336 
337 #define BRCM_EXTCH_IE_LEN   5
338 #define BRCM_EXTCH_IE_TYPE  53
339 #define DOT11_EXTCH_IE_LEN  1
340 #define DOT11_EXT_CH_MASK   0x03
341 #define DOT11_EXT_CH_UPPER  0x01
342 #define DOT11_EXT_CH_LOWER  0x03
343 #define DOT11_EXT_CH_NONE   0x00
344 
345 BWL_PRE_PACKED_STRUCT struct dot11_action_frmhdr {
346 	uint8   category;
347 	uint8   action;
348 	uint8   data[1];
349 } BWL_POST_PACKED_STRUCT;
350 #define DOT11_ACTION_FRMHDR_LEN 2
351 
352 
353 BWL_PRE_PACKED_STRUCT struct dot11_channel_switch {
354 	uint8 id;
355 	uint8 len;
356 	uint8 mode;
357 	uint8 channel;
358 	uint8 count;
359 } BWL_POST_PACKED_STRUCT;
360 typedef struct dot11_channel_switch dot11_chan_switch_ie_t;
361 
362 #define DOT11_SWITCH_IE_LEN 3
363 
364 #define DOT11_CSA_MODE_ADVISORY     0
365 #define DOT11_CSA_MODE_NO_TX        1
366 
367 BWL_PRE_PACKED_STRUCT struct dot11_action_switch_channel {
368 	uint8   category;
369 	uint8   action;
370 	dot11_chan_switch_ie_t chan_switch_ie;
371 	dot11_brcm_extch_ie_t extch_ie;
372 } BWL_POST_PACKED_STRUCT;
373 
374 BWL_PRE_PACKED_STRUCT struct dot11_csa_body {
375 	uint8 mode;
376 	uint8 reg;
377 	uint8 channel;
378 	uint8 count;
379 } BWL_POST_PACKED_STRUCT;
380 
381 
382 BWL_PRE_PACKED_STRUCT struct dot11_ext_csa {
383 	uint8 id;
384 	uint8 len;
385 	struct dot11_csa_body b;
386 } BWL_POST_PACKED_STRUCT;
387 typedef struct dot11_ext_csa dot11_ext_csa_ie_t;
388 #define DOT11_EXT_CSA_IE_LEN    4
389 
390 BWL_PRE_PACKED_STRUCT struct dot11_action_ext_csa {
391 	uint8   category;
392 	uint8   action;
393 	dot11_ext_csa_ie_t chan_switch_ie;
394 } BWL_POST_PACKED_STRUCT;
395 
396 BWL_PRE_PACKED_STRUCT struct dot11y_action_ext_csa {
397 	uint8   category;
398 	uint8   action;
399 	struct dot11_csa_body b;
400 } BWL_POST_PACKED_STRUCT;
401 
402 BWL_PRE_PACKED_STRUCT struct dot11_obss_coex {
403 	uint8   id;
404 	uint8   len;
405 	uint8   info;
406 } BWL_POST_PACKED_STRUCT;
407 typedef struct dot11_obss_coex dot11_obss_coex_t;
408 #define DOT11_OBSS_COEXINFO_LEN 1
409 
410 #define DOT11_OBSS_COEX_INFO_REQ        0x01
411 #define DOT11_OBSS_COEX_40MHZ_INTOLERANT    0x02
412 #define DOT11_OBSS_COEX_20MHZ_WIDTH_REQ 0x04
413 
414 BWL_PRE_PACKED_STRUCT struct dot11_obss_chanlist {
415 	uint8   id;
416 	uint8   len;
417 	uint8   regclass;
418 	uint8   chanlist[1];
419 } BWL_POST_PACKED_STRUCT;
420 typedef struct dot11_obss_chanlist dot11_obss_chanlist_t;
421 #define DOT11_OBSS_CHANLIST_FIXED_LEN   1
422 
423 BWL_PRE_PACKED_STRUCT struct dot11_extcap_ie {
424 	uint8 id;
425 	uint8 len;
426 	uint8 cap;
427 } BWL_POST_PACKED_STRUCT;
428 typedef struct dot11_extcap_ie dot11_extcap_ie_t;
429 #define DOT11_EXTCAP_LEN    1
430 
431 
432 
433 #define DOT11_MEASURE_TYPE_BASIC    0
434 #define DOT11_MEASURE_TYPE_CCA      1
435 #define DOT11_MEASURE_TYPE_RPI      2
436 #define DOT11_MEASURE_TYPE_CHLOAD       3
437 #define DOT11_MEASURE_TYPE_NOISE        4
438 #define DOT11_MEASURE_TYPE_BEACON       5
439 #define DOT11_MEASURE_TYPE_FRAME    6
440 #define DOT11_MEASURE_TYPE_STATS        7
441 #define DOT11_MEASURE_TYPE_LCI      8
442 #define DOT11_MEASURE_TYPE_TXSTREAM     9
443 #define DOT11_MEASURE_TYPE_PAUSE        255
444 
445 
446 #define DOT11_MEASURE_MODE_PARALLEL     (1<<0)
447 #define DOT11_MEASURE_MODE_ENABLE   (1<<1)
448 #define DOT11_MEASURE_MODE_REQUEST  (1<<2)
449 #define DOT11_MEASURE_MODE_REPORT   (1<<3)
450 #define DOT11_MEASURE_MODE_DUR  (1<<4)
451 
452 #define DOT11_MEASURE_MODE_LATE     (1<<0)
453 #define DOT11_MEASURE_MODE_INCAPABLE    (1<<1)
454 #define DOT11_MEASURE_MODE_REFUSED  (1<<2)
455 
456 #define DOT11_MEASURE_BASIC_MAP_BSS ((uint8)(1<<0))
457 #define DOT11_MEASURE_BASIC_MAP_OFDM    ((uint8)(1<<1))
458 #define DOT11_MEASURE_BASIC_MAP_UKNOWN  ((uint8)(1<<2))
459 #define DOT11_MEASURE_BASIC_MAP_RADAR   ((uint8)(1<<3))
460 #define DOT11_MEASURE_BASIC_MAP_UNMEAS  ((uint8)(1<<4))
461 
462 BWL_PRE_PACKED_STRUCT struct dot11_meas_req {
463 	uint8 id;
464 	uint8 len;
465 	uint8 token;
466 	uint8 mode;
467 	uint8 type;
468 	uint8 channel;
469 	uint8 start_time[8];
470 	uint16 duration;
471 } BWL_POST_PACKED_STRUCT;
472 typedef struct dot11_meas_req dot11_meas_req_t;
473 #define DOT11_MNG_IE_MREQ_LEN 14
474 
475 #define DOT11_MNG_IE_MREQ_FIXED_LEN 3
476 
477 BWL_PRE_PACKED_STRUCT struct dot11_meas_rep {
478 	uint8 id;
479 	uint8 len;
480 	uint8 token;
481 	uint8 mode;
482 	uint8 type;
483 	BWL_PRE_PACKED_STRUCT union
484 	{
485 		BWL_PRE_PACKED_STRUCT struct {
486 			uint8 channel;
487 			uint8 start_time[8];
488 			uint16 duration;
489 			uint8 map;
490 		} BWL_POST_PACKED_STRUCT basic;
491 		uint8 data[1];
492 	} BWL_POST_PACKED_STRUCT rep;
493 } BWL_POST_PACKED_STRUCT;
494 typedef struct dot11_meas_rep dot11_meas_rep_t;
495 
496 
497 #define DOT11_MNG_IE_MREP_FIXED_LEN 3
498 
499 BWL_PRE_PACKED_STRUCT struct dot11_meas_rep_basic {
500 	uint8 channel;
501 	uint8 start_time[8];
502 	uint16 duration;
503 	uint8 map;
504 } BWL_POST_PACKED_STRUCT;
505 typedef struct dot11_meas_rep_basic dot11_meas_rep_basic_t;
506 #define DOT11_MEASURE_BASIC_REP_LEN 12
507 
508 BWL_PRE_PACKED_STRUCT struct dot11_quiet {
509 	uint8 id;
510 	uint8 len;
511 	uint8 count;
512 	uint8 period;
513 	uint16 duration;
514 	uint16 offset;
515 } BWL_POST_PACKED_STRUCT;
516 typedef struct dot11_quiet dot11_quiet_t;
517 
518 BWL_PRE_PACKED_STRUCT struct chan_map_tuple {
519 	uint8 channel;
520 	uint8 map;
521 } BWL_POST_PACKED_STRUCT;
522 typedef struct chan_map_tuple chan_map_tuple_t;
523 
524 BWL_PRE_PACKED_STRUCT struct dot11_ibss_dfs {
525 	uint8 id;
526 	uint8 len;
527 	uint8 eaddr[ETHER_ADDR_LEN];
528 	uint8 interval;
529 	chan_map_tuple_t map[1];
530 } BWL_POST_PACKED_STRUCT;
531 typedef struct dot11_ibss_dfs dot11_ibss_dfs_t;
532 
533 
534 #define WME_OUI         "\x00\x50\xf2"
535 #define WME_OUI_LEN     3
536 #define WME_OUI_TYPE        2
537 #define WME_VER         1
538 #define WME_TYPE        2
539 #define WME_SUBTYPE_IE      0
540 #define WME_SUBTYPE_PARAM_IE    1
541 #define WME_SUBTYPE_TSPEC   2
542 
543 
544 #define AC_BE           0
545 #define AC_BK           1
546 #define AC_VI           2
547 #define AC_VO           3
548 #define AC_COUNT        4
549 
550 typedef uint8 ac_bitmap_t;
551 
552 #define AC_BITMAP_NONE      0x0
553 #define AC_BITMAP_ALL       0xf
554 #define AC_BITMAP_TST(ab, ac)   (((ab) & (1 << (ac))) != 0)
555 #define AC_BITMAP_SET(ab, ac)   (((ab) |= (1 << (ac))))
556 #define AC_BITMAP_RESET(ab, ac) (((ab) &= ~(1 << (ac))))
557 
558 
559 BWL_PRE_PACKED_STRUCT struct wme_ie {
560 	uint8 oui[3];
561 	uint8 type;
562 	uint8 subtype;
563 	uint8 version;
564 	uint8 qosinfo;
565 } BWL_POST_PACKED_STRUCT;
566 typedef struct wme_ie wme_ie_t;
567 #define WME_IE_LEN 7
568 
569 BWL_PRE_PACKED_STRUCT struct edcf_acparam {
570 	uint8   ACI;
571 	uint8   ECW;
572 	uint16  TXOP;
573 } BWL_POST_PACKED_STRUCT;
574 typedef struct edcf_acparam edcf_acparam_t;
575 
576 
577 BWL_PRE_PACKED_STRUCT struct wme_param_ie {
578 	uint8 oui[3];
579 	uint8 type;
580 	uint8 subtype;
581 	uint8 version;
582 	uint8 qosinfo;
583 	uint8 rsvd;
584 	edcf_acparam_t acparam[AC_COUNT];
585 } BWL_POST_PACKED_STRUCT;
586 typedef struct wme_param_ie wme_param_ie_t;
587 #define WME_PARAM_IE_LEN            24
588 
589 
590 #define WME_QI_AP_APSD_MASK         0x80
591 #define WME_QI_AP_APSD_SHIFT        7
592 #define WME_QI_AP_COUNT_MASK        0x0f
593 #define WME_QI_AP_COUNT_SHIFT       0
594 
595 
596 #define WME_QI_STA_MAXSPLEN_MASK    0x60
597 #define WME_QI_STA_MAXSPLEN_SHIFT   5
598 #define WME_QI_STA_APSD_ALL_MASK    0xf
599 #define WME_QI_STA_APSD_ALL_SHIFT   0
600 #define WME_QI_STA_APSD_BE_MASK     0x8
601 #define WME_QI_STA_APSD_BE_SHIFT    3
602 #define WME_QI_STA_APSD_BK_MASK     0x4
603 #define WME_QI_STA_APSD_BK_SHIFT    2
604 #define WME_QI_STA_APSD_VI_MASK     0x2
605 #define WME_QI_STA_APSD_VI_SHIFT    1
606 #define WME_QI_STA_APSD_VO_MASK     0x1
607 #define WME_QI_STA_APSD_VO_SHIFT    0
608 
609 
610 #define EDCF_AIFSN_MIN               1
611 #define EDCF_AIFSN_MAX               15
612 #define EDCF_AIFSN_MASK              0x0f
613 #define EDCF_ACM_MASK                0x10
614 #define EDCF_ACI_MASK                0x60
615 #define EDCF_ACI_SHIFT               5
616 #define EDCF_AIFSN_SHIFT             12
617 
618 
619 #define EDCF_ECW_MIN                 0
620 #define EDCF_ECW_MAX                 15
621 #define EDCF_ECW2CW(exp)             ((1 << (exp)) - 1)
622 #define EDCF_ECWMIN_MASK             0x0f
623 #define EDCF_ECWMAX_MASK             0xf0
624 #define EDCF_ECWMAX_SHIFT            4
625 
626 
627 #define EDCF_TXOP_MIN                0
628 #define EDCF_TXOP_MAX                65535
629 #define EDCF_TXOP2USEC(txop)         ((txop) << 5)
630 
631 
632 #define NON_EDCF_AC_BE_ACI_STA          0x02
633 
634 
635 #define EDCF_AC_BE_ACI_STA           0x03
636 #define EDCF_AC_BE_ECW_STA           0xA4
637 #define EDCF_AC_BE_TXOP_STA          0x0000
638 #define EDCF_AC_BK_ACI_STA           0x27
639 #define EDCF_AC_BK_ECW_STA           0xA4
640 #define EDCF_AC_BK_TXOP_STA          0x0000
641 #define EDCF_AC_VI_ACI_STA           0x42
642 #define EDCF_AC_VI_ECW_STA           0x43
643 #define EDCF_AC_VI_TXOP_STA          0x005e
644 #define EDCF_AC_VO_ACI_STA           0x62
645 #define EDCF_AC_VO_ECW_STA           0x32
646 #define EDCF_AC_VO_TXOP_STA          0x002f
647 
648 
649 #define EDCF_AC_BE_ACI_AP            0x03
650 #define EDCF_AC_BE_ECW_AP            0x64
651 #define EDCF_AC_BE_TXOP_AP           0x0000
652 #define EDCF_AC_BK_ACI_AP            0x27
653 #define EDCF_AC_BK_ECW_AP            0xA4
654 #define EDCF_AC_BK_TXOP_AP           0x0000
655 #define EDCF_AC_VI_ACI_AP            0x41
656 #define EDCF_AC_VI_ECW_AP            0x43
657 #define EDCF_AC_VI_TXOP_AP           0x005e
658 #define EDCF_AC_VO_ACI_AP            0x61
659 #define EDCF_AC_VO_ECW_AP            0x32
660 #define EDCF_AC_VO_TXOP_AP           0x002f
661 
662 
663 BWL_PRE_PACKED_STRUCT struct edca_param_ie {
664 	uint8 qosinfo;
665 	uint8 rsvd;
666 	edcf_acparam_t acparam[AC_COUNT];
667 } BWL_POST_PACKED_STRUCT;
668 typedef struct edca_param_ie edca_param_ie_t;
669 #define EDCA_PARAM_IE_LEN            18
670 
671 
672 BWL_PRE_PACKED_STRUCT struct qos_cap_ie {
673 	uint8 qosinfo;
674 } BWL_POST_PACKED_STRUCT;
675 typedef struct qos_cap_ie qos_cap_ie_t;
676 
677 BWL_PRE_PACKED_STRUCT struct dot11_qbss_load_ie {
678 	uint8 id;
679 	uint8 length;
680 	uint16 station_count;
681 	uint8 channel_utilization;
682 	uint16 aac;
683 } BWL_POST_PACKED_STRUCT;
684 typedef struct dot11_qbss_load_ie dot11_qbss_load_ie_t;
685 
686 
687 #define FIXED_MSDU_SIZE 0x8000
688 #define MSDU_SIZE_MASK  0x7fff
689 
690 
691 
692 #define INTEGER_SHIFT   13
693 #define FRACTION_MASK   0x1FFF
694 
695 
696 BWL_PRE_PACKED_STRUCT struct dot11_management_notification {
697 	uint8 category;
698 	uint8 action;
699 	uint8 token;
700 	uint8 status;
701 	uint8 data[1];
702 } BWL_POST_PACKED_STRUCT;
703 #define DOT11_MGMT_NOTIFICATION_LEN 4
704 
705 
706 #define WME_ADDTS_REQUEST   0
707 #define WME_ADDTS_RESPONSE  1
708 #define WME_DELTS_REQUEST   2
709 
710 
711 #define WME_ADMISSION_ACCEPTED      0
712 #define WME_INVALID_PARAMETERS      1
713 #define WME_ADMISSION_REFUSED       3
714 
715 
716 #define BCN_PRB_SSID(body) ((char*)(body) + DOT11_BCN_PRB_LEN)
717 
718 
719 #define DOT11_OPEN_SYSTEM   0
720 #define DOT11_SHARED_KEY    1
721 #define DOT11_OPEN_SHARED   2
722 #define DOT11_FAST_BSS      3
723 #define DOT11_CHALLENGE_LEN 128
724 
725 
726 #define FC_PVER_MASK        0x3
727 #define FC_PVER_SHIFT       0
728 #define FC_TYPE_MASK        0xC
729 #define FC_TYPE_SHIFT       2
730 #define FC_SUBTYPE_MASK     0xF0
731 #define FC_SUBTYPE_SHIFT    4
732 #define FC_TODS         0x100
733 #define FC_TODS_SHIFT       8
734 #define FC_FROMDS       0x200
735 #define FC_FROMDS_SHIFT     9
736 #define FC_MOREFRAG     0x400
737 #define FC_MOREFRAG_SHIFT   10
738 #define FC_RETRY        0x800
739 #define FC_RETRY_SHIFT      11
740 #define FC_PM           0x1000
741 #define FC_PM_SHIFT     12
742 #define FC_MOREDATA     0x2000
743 #define FC_MOREDATA_SHIFT   13
744 #define FC_WEP          0x4000
745 #define FC_WEP_SHIFT        14
746 #define FC_ORDER        0x8000
747 #define FC_ORDER_SHIFT      15
748 
749 
750 #define SEQNUM_SHIFT        4
751 #define SEQNUM_MAX      0x1000
752 #define FRAGNUM_MASK        0xF
753 
754 
755 
756 
757 #define FC_TYPE_MNG     0
758 #define FC_TYPE_CTL     1
759 #define FC_TYPE_DATA        2
760 
761 
762 #define FC_SUBTYPE_ASSOC_REQ        0
763 #define FC_SUBTYPE_ASSOC_RESP       1
764 #define FC_SUBTYPE_REASSOC_REQ      2
765 #define FC_SUBTYPE_REASSOC_RESP     3
766 #define FC_SUBTYPE_PROBE_REQ        4
767 #define FC_SUBTYPE_PROBE_RESP       5
768 #define FC_SUBTYPE_BEACON       8
769 #define FC_SUBTYPE_ATIM         9
770 #define FC_SUBTYPE_DISASSOC     10
771 #define FC_SUBTYPE_AUTH         11
772 #define FC_SUBTYPE_DEAUTH       12
773 #define FC_SUBTYPE_ACTION       13
774 #define FC_SUBTYPE_ACTION_NOACK     14
775 
776 
777 #define FC_SUBTYPE_CTL_WRAPPER      7
778 #define FC_SUBTYPE_BLOCKACK_REQ     8
779 #define FC_SUBTYPE_BLOCKACK     9
780 #define FC_SUBTYPE_PS_POLL      10
781 #define FC_SUBTYPE_RTS          11
782 #define FC_SUBTYPE_CTS          12
783 #define FC_SUBTYPE_ACK          13
784 #define FC_SUBTYPE_CF_END       14
785 #define FC_SUBTYPE_CF_END_ACK       15
786 
787 
788 #define FC_SUBTYPE_DATA         0
789 #define FC_SUBTYPE_DATA_CF_ACK      1
790 #define FC_SUBTYPE_DATA_CF_POLL     2
791 #define FC_SUBTYPE_DATA_CF_ACK_POLL 3
792 #define FC_SUBTYPE_NULL         4
793 #define FC_SUBTYPE_CF_ACK       5
794 #define FC_SUBTYPE_CF_POLL      6
795 #define FC_SUBTYPE_CF_ACK_POLL      7
796 #define FC_SUBTYPE_QOS_DATA     8
797 #define FC_SUBTYPE_QOS_DATA_CF_ACK  9
798 #define FC_SUBTYPE_QOS_DATA_CF_POLL 10
799 #define FC_SUBTYPE_QOS_DATA_CF_ACK_POLL 11
800 #define FC_SUBTYPE_QOS_NULL     12
801 #define FC_SUBTYPE_QOS_CF_POLL      14
802 #define FC_SUBTYPE_QOS_CF_ACK_POLL  15
803 
804 
805 #define FC_SUBTYPE_ANY_QOS(s)       (((s) & 8) != 0)
806 #define FC_SUBTYPE_ANY_NULL(s)      (((s) & 4) != 0)
807 #define FC_SUBTYPE_ANY_CF_POLL(s)   (((s) & 2) != 0)
808 #define FC_SUBTYPE_ANY_CF_ACK(s)    (((s) & 1) != 0)
809 
810 
811 #define FC_KIND_MASK        (FC_TYPE_MASK | FC_SUBTYPE_MASK)
812 
813 #define FC_KIND(t, s)   (((t) << FC_TYPE_SHIFT) | ((s) << FC_SUBTYPE_SHIFT))
814 
815 #define FC_SUBTYPE(fc)  (((fc) & FC_SUBTYPE_MASK) >> FC_SUBTYPE_SHIFT)
816 #define FC_TYPE(fc) (((fc) & FC_TYPE_MASK) >> FC_TYPE_SHIFT)
817 
818 #define FC_ASSOC_REQ    FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_ASSOC_REQ)
819 #define FC_ASSOC_RESP   FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_ASSOC_RESP)
820 #define FC_REASSOC_REQ  FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_REASSOC_REQ)
821 #define FC_REASSOC_RESP FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_REASSOC_RESP)
822 #define FC_PROBE_REQ    FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_PROBE_REQ)
823 #define FC_PROBE_RESP   FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_PROBE_RESP)
824 #define FC_BEACON   FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_BEACON)
825 #define FC_DISASSOC FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_DISASSOC)
826 #define FC_AUTH     FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_AUTH)
827 #define FC_DEAUTH   FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_DEAUTH)
828 #define FC_ACTION   FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_ACTION)
829 #define FC_ACTION_NOACK FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_ACTION_NOACK)
830 
831 #define FC_CTL_WRAPPER  FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_CTL_WRAPPER)
832 #define FC_BLOCKACK_REQ FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_BLOCKACK_REQ)
833 #define FC_BLOCKACK FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_BLOCKACK)
834 #define FC_PS_POLL  FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_PS_POLL)
835 #define FC_RTS      FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_RTS)
836 #define FC_CTS      FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_CTS)
837 #define FC_ACK      FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_ACK)
838 #define FC_CF_END   FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_CF_END)
839 #define FC_CF_END_ACK   FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_CF_END_ACK)
840 
841 #define FC_DATA     FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_DATA)
842 #define FC_NULL_DATA    FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_NULL)
843 #define FC_DATA_CF_ACK  FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_DATA_CF_ACK)
844 #define FC_QOS_DATA FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_QOS_DATA)
845 #define FC_QOS_NULL FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_QOS_NULL)
846 
847 
848 
849 
850 #define QOS_PRIO_SHIFT      0
851 #define QOS_PRIO_MASK       0x0007
852 #define QOS_PRIO(qos)       (((qos) & QOS_PRIO_MASK) >> QOS_PRIO_SHIFT)
853 
854 
855 #define QOS_TID_SHIFT       0
856 #define QOS_TID_MASK        0x000f
857 #define QOS_TID(qos)        (((qos) & QOS_TID_MASK) >> QOS_TID_SHIFT)
858 
859 
860 #define QOS_EOSP_SHIFT      4
861 #define QOS_EOSP_MASK       0x0010
862 #define QOS_EOSP(qos)       (((qos) & QOS_EOSP_MASK) >> QOS_EOSP_SHIFT)
863 
864 
865 #define QOS_ACK_NORMAL_ACK  0
866 #define QOS_ACK_NO_ACK      1
867 #define QOS_ACK_NO_EXP_ACK  2
868 #define QOS_ACK_BLOCK_ACK   3
869 #define QOS_ACK_SHIFT       5
870 #define QOS_ACK_MASK        0x0060
871 #define QOS_ACK(qos)        (((qos) & QOS_ACK_MASK) >> QOS_ACK_SHIFT)
872 
873 
874 #define QOS_AMSDU_SHIFT     7
875 #define QOS_AMSDU_MASK      0x0080
876 
877 
878 
879 
880 
881 
882 #define DOT11_MNG_AUTH_ALGO_LEN     2
883 #define DOT11_MNG_AUTH_SEQ_LEN      2
884 #define DOT11_MNG_BEACON_INT_LEN    2
885 #define DOT11_MNG_CAP_LEN       2
886 #define DOT11_MNG_AP_ADDR_LEN       6
887 #define DOT11_MNG_LISTEN_INT_LEN    2
888 #define DOT11_MNG_REASON_LEN        2
889 #define DOT11_MNG_AID_LEN       2
890 #define DOT11_MNG_STATUS_LEN        2
891 #define DOT11_MNG_TIMESTAMP_LEN     8
892 
893 
894 #define DOT11_AID_MASK          0x3fff
895 
896 
897 #define DOT11_RC_RESERVED       0
898 #define DOT11_RC_UNSPECIFIED        1
899 #define DOT11_RC_AUTH_INVAL     2
900 #define DOT11_RC_DEAUTH_LEAVING     3
901 #define DOT11_RC_INACTIVITY     4
902 #define DOT11_RC_BUSY           5
903 #define DOT11_RC_INVAL_CLASS_2      6
904 #define DOT11_RC_INVAL_CLASS_3      7
905 #define DOT11_RC_DISASSOC_LEAVING   8
906 #define DOT11_RC_NOT_AUTH       9
907 #define DOT11_RC_BAD_PC         10
908 #define DOT11_RC_BAD_CHANNELS       11
909 
910 
911 
912 #define DOT11_RC_UNSPECIFIED_QOS    32
913 #define DOT11_RC_INSUFFCIENT_BW     33
914 #define DOT11_RC_EXCESSIVE_FRAMES   34
915 #define DOT11_RC_TX_OUTSIDE_TXOP    35
916 #define DOT11_RC_LEAVING_QBSS       36
917 #define DOT11_RC_BAD_MECHANISM      37
918 #define DOT11_RC_SETUP_NEEDED       38
919 #define DOT11_RC_TIMEOUT        39
920 
921 #define DOT11_RC_MAX            23
922 
923 
924 #define DOT11_SC_SUCCESS        0
925 #define DOT11_SC_FAILURE        1
926 #define DOT11_SC_CAP_MISMATCH       10
927 #define DOT11_SC_REASSOC_FAIL       11
928 #define DOT11_SC_ASSOC_FAIL     12
929 #define DOT11_SC_AUTH_MISMATCH      13
930 #define DOT11_SC_AUTH_SEQ       14
931 #define DOT11_SC_AUTH_CHALLENGE_FAIL    15
932 #define DOT11_SC_AUTH_TIMEOUT       16
933 #define DOT11_SC_ASSOC_BUSY_FAIL    17
934 #define DOT11_SC_ASSOC_RATE_MISMATCH    18
935 #define DOT11_SC_ASSOC_SHORT_REQUIRED   19
936 #define DOT11_SC_ASSOC_PBCC_REQUIRED    20
937 #define DOT11_SC_ASSOC_AGILITY_REQUIRED 21
938 #define DOT11_SC_ASSOC_SPECTRUM_REQUIRED    22
939 #define DOT11_SC_ASSOC_BAD_POWER_CAP    23
940 #define DOT11_SC_ASSOC_BAD_SUP_CHANNELS 24
941 #define DOT11_SC_ASSOC_SHORTSLOT_REQUIRED   25
942 #define DOT11_SC_ASSOC_ERPBCC_REQUIRED  26
943 #define DOT11_SC_ASSOC_DSSOFDM_REQUIRED 27
944 
945 #define DOT11_SC_DECLINED       37
946 #define DOT11_SC_INVALID_PARAMS     38
947 #define DOT11_SC_INVALID_AKMP       43
948 #define DOT11_SC_INVALID_MDID       54
949 #define DOT11_SC_INVALID_FTIE       55
950 
951 
952 #define DOT11_MNG_DS_PARAM_LEN          1
953 #define DOT11_MNG_IBSS_PARAM_LEN        2
954 
955 
956 #define DOT11_MNG_TIM_FIXED_LEN         3
957 #define DOT11_MNG_TIM_DTIM_COUNT        0
958 #define DOT11_MNG_TIM_DTIM_PERIOD       1
959 #define DOT11_MNG_TIM_BITMAP_CTL        2
960 #define DOT11_MNG_TIM_PVB           3
961 
962 
963 #define TLV_TAG_OFF     0
964 #define TLV_LEN_OFF     1
965 #define TLV_HDR_LEN     2
966 #define TLV_BODY_OFF        2
967 
968 
969 #define DOT11_MNG_SSID_ID           0
970 #define DOT11_MNG_RATES_ID          1
971 #define DOT11_MNG_FH_PARMS_ID           2
972 #define DOT11_MNG_DS_PARMS_ID           3
973 #define DOT11_MNG_CF_PARMS_ID           4
974 #define DOT11_MNG_TIM_ID            5
975 #define DOT11_MNG_IBSS_PARMS_ID         6
976 #define DOT11_MNG_COUNTRY_ID            7
977 #define DOT11_MNG_HOPPING_PARMS_ID      8
978 #define DOT11_MNG_HOPPING_TABLE_ID      9
979 #define DOT11_MNG_REQUEST_ID            10
980 #define DOT11_MNG_QBSS_LOAD_ID          11
981 #define DOT11_MNG_EDCA_PARAM_ID         12
982 #define DOT11_MNG_CHALLENGE_ID          16
983 #define DOT11_MNG_PWR_CONSTRAINT_ID     32
984 #define DOT11_MNG_PWR_CAP_ID            33
985 #define DOT11_MNG_TPC_REQUEST_ID        34
986 #define DOT11_MNG_TPC_REPORT_ID         35
987 #define DOT11_MNG_SUPP_CHANNELS_ID      36
988 #define DOT11_MNG_CHANNEL_SWITCH_ID     37
989 #define DOT11_MNG_MEASURE_REQUEST_ID        38
990 #define DOT11_MNG_MEASURE_REPORT_ID     39
991 #define DOT11_MNG_QUIET_ID          40
992 #define DOT11_MNG_IBSS_DFS_ID           41
993 #define DOT11_MNG_ERP_ID            42
994 #define DOT11_MNG_TS_DELAY_ID           43
995 #define DOT11_MNG_HT_CAP            45
996 #define DOT11_MNG_QOS_CAP_ID            46
997 #define DOT11_MNG_NONERP_ID         47
998 #define DOT11_MNG_RSN_ID            48
999 #define DOT11_MNG_EXT_RATES_ID          50
1000 #define DOT11_MNG_AP_CHREP_ID       51
1001 #define DOT11_MNG_NBR_REP_ID        52
1002 #define DOT11_MNG_MDIE_ID       54
1003 #define DOT11_MNG_FTIE_ID       55
1004 #define DOT11_MNG_FT_TI_ID      56
1005 #define DOT11_MNG_REGCLASS_ID           59
1006 #define DOT11_MNG_EXT_CSA_ID            60
1007 #define DOT11_MNG_HT_ADD            61
1008 #define DOT11_MNG_EXT_CHANNEL_OFFSET        62
1009 
1010 
1011 #define DOT11_MNG_RRM_CAP_ID        70
1012 #define DOT11_MNG_HT_BSS_COEXINFO_ID        72
1013 #define DOT11_MNG_HT_BSS_CHANNEL_REPORT_ID  73
1014 #define DOT11_MNG_HT_OBSS_ID            74
1015 #define DOT11_MNG_EXT_CAP           127
1016 #define DOT11_MNG_WPA_ID            221
1017 #define DOT11_MNG_PROPR_ID          221
1018 
1019 #define DOT11_MNG_VS_ID             221
1020 
1021 
1022 #define DOT11_RATE_BASIC            0x80
1023 #define DOT11_RATE_MASK             0x7F
1024 
1025 
1026 #define DOT11_MNG_ERP_LEN           1
1027 #define DOT11_MNG_NONERP_PRESENT        0x01
1028 #define DOT11_MNG_USE_PROTECTION        0x02
1029 #define DOT11_MNG_BARKER_PREAMBLE       0x04
1030 
1031 #define DOT11_MGN_TS_DELAY_LEN      4
1032 #define TS_DELAY_FIELD_SIZE         4
1033 
1034 
1035 #define DOT11_CAP_ESS               0x0001
1036 #define DOT11_CAP_IBSS              0x0002
1037 #define DOT11_CAP_POLLABLE          0x0004
1038 #define DOT11_CAP_POLL_RQ           0x0008
1039 #define DOT11_CAP_PRIVACY           0x0010
1040 #define DOT11_CAP_SHORT             0x0020
1041 #define DOT11_CAP_PBCC              0x0040
1042 #define DOT11_CAP_AGILITY           0x0080
1043 #define DOT11_CAP_SPECTRUM          0x0100
1044 #define DOT11_CAP_SHORTSLOT         0x0400
1045 #define DOT11_CAP_RRM           0x1000
1046 #define DOT11_CAP_CCK_OFDM          0x2000
1047 
1048 
1049 #define DOT11_OBSS_COEX_MNG_SUPPORT 0x01
1050 
1051 
1052 #define DOT11_ACTION_HDR_LEN        2
1053 #define DOT11_ACTION_CAT_OFF        0
1054 #define DOT11_ACTION_ACT_OFF        1
1055 
1056 
1057 #define DOT11_ACTION_CAT_ERR_MASK   0x80
1058 #define DOT11_ACTION_CAT_MASK       0x7F
1059 #define DOT11_ACTION_CAT_SPECT_MNG  0
1060 #define DOT11_ACTION_CAT_QOS        1
1061 #define DOT11_ACTION_CAT_DLS        2
1062 #define DOT11_ACTION_CAT_BLOCKACK   3
1063 #define DOT11_ACTION_CAT_PUBLIC     4
1064 #define DOT11_ACTION_CAT_RRM        5
1065 #define DOT11_ACTION_CAT_FBT    6
1066 #define DOT11_ACTION_CAT_HT     7
1067 #define DOT11_ACTION_CAT_BSSMGMT    10
1068 #define DOT11_ACTION_NOTIFICATION   17
1069 #define DOT11_ACTION_CAT_VS     127
1070 
1071 
1072 #define DOT11_SM_ACTION_M_REQ       0
1073 #define DOT11_SM_ACTION_M_REP       1
1074 #define DOT11_SM_ACTION_TPC_REQ     2
1075 #define DOT11_SM_ACTION_TPC_REP     3
1076 #define DOT11_SM_ACTION_CHANNEL_SWITCH  4
1077 #define DOT11_SM_ACTION_EXT_CSA     5
1078 
1079 
1080 #define DOT11_ACTION_ID_HT_CH_WIDTH 0
1081 #define DOT11_ACTION_ID_HT_MIMO_PS  1
1082 
1083 
1084 #define DOT11_PUB_ACTION_BSS_COEX_MNG   0
1085 #define DOT11_PUB_ACTION_CHANNEL_SWITCH 4
1086 
1087 
1088 #define DOT11_BA_ACTION_ADDBA_REQ   0
1089 #define DOT11_BA_ACTION_ADDBA_RESP  1
1090 #define DOT11_BA_ACTION_DELBA       2
1091 
1092 
1093 #define DOT11_ADDBA_PARAM_AMSDU_SUP 0x0001
1094 #define DOT11_ADDBA_PARAM_POLICY_MASK   0x0002
1095 #define DOT11_ADDBA_PARAM_POLICY_SHIFT  1
1096 #define DOT11_ADDBA_PARAM_TID_MASK  0x003c
1097 #define DOT11_ADDBA_PARAM_TID_SHIFT 2
1098 #define DOT11_ADDBA_PARAM_BSIZE_MASK    0xffc0
1099 #define DOT11_ADDBA_PARAM_BSIZE_SHIFT   6
1100 
1101 #define DOT11_ADDBA_POLICY_DELAYED  0
1102 #define DOT11_ADDBA_POLICY_IMMEDIATE    1
1103 
1104 BWL_PRE_PACKED_STRUCT struct dot11_addba_req {
1105 	uint8 category;
1106 	uint8 action;
1107 	uint8 token;
1108 	uint16 addba_param_set;
1109 	uint16 timeout;
1110 	uint16 start_seqnum;
1111 } BWL_POST_PACKED_STRUCT;
1112 typedef struct dot11_addba_req dot11_addba_req_t;
1113 #define DOT11_ADDBA_REQ_LEN     9
1114 
1115 BWL_PRE_PACKED_STRUCT struct dot11_addba_resp {
1116 	uint8 category;
1117 	uint8 action;
1118 	uint8 token;
1119 	uint16 status;
1120 	uint16 addba_param_set;
1121 	uint16 timeout;
1122 } BWL_POST_PACKED_STRUCT;
1123 typedef struct dot11_addba_resp dot11_addba_resp_t;
1124 #define DOT11_ADDBA_RESP_LEN        9
1125 
1126 
1127 #define DOT11_DELBA_PARAM_INIT_MASK 0x0800
1128 #define DOT11_DELBA_PARAM_INIT_SHIFT    11
1129 #define DOT11_DELBA_PARAM_TID_MASK  0xf000
1130 #define DOT11_DELBA_PARAM_TID_SHIFT 12
1131 
1132 BWL_PRE_PACKED_STRUCT struct dot11_delba {
1133 	uint8 category;
1134 	uint8 action;
1135 	uint16 delba_param_set;
1136 	uint16 reason;
1137 } BWL_POST_PACKED_STRUCT;
1138 typedef struct dot11_delba dot11_delba_t;
1139 #define DOT11_DELBA_LEN         6
1140 
1141 
1142 
1143 
1144 
1145 #define DOT11_RRM_CAP_LEN       5
1146 BWL_PRE_PACKED_STRUCT struct dot11_rrm_cap_ie {
1147 	uint8 cap[DOT11_RRM_CAP_LEN];
1148 } BWL_POST_PACKED_STRUCT;
1149 typedef struct dot11_rrm_cap_ie dot11_rrm_cap_ie_t;
1150 
1151 
1152 #define DOT11_RRM_CAP_LINK          0
1153 #define DOT11_RRM_CAP_NEIGHBOR_REPORT   1
1154 #define DOT11_RRM_CAP_PARALLEL      2
1155 #define DOT11_RRM_CAP_REPEATED      3
1156 #define DOT11_RRM_CAP_BCN_PASSIVE   4
1157 #define DOT11_RRM_CAP_BCN_ACTIVE    5
1158 #define DOT11_RRM_CAP_BCN_TABLE     6
1159 #define DOT11_RRM_CAP_BCN_REP_COND  7
1160 #define DOT11_RRM_CAP_AP_CHANREP    16
1161 
1162 
1163 #define DOT11_RM_ACTION_RM_REQ      0
1164 #define DOT11_RM_ACTION_RM_REP      1
1165 #define DOT11_RM_ACTION_LM_REQ      2
1166 #define DOT11_RM_ACTION_LM_REP      3
1167 #define DOT11_RM_ACTION_NR_REQ      4
1168 #define DOT11_RM_ACTION_NR_REP      5
1169 
1170 
1171 BWL_PRE_PACKED_STRUCT struct dot11_rm_action {
1172 	uint8 category;
1173 	uint8 action;
1174 	uint8 token;
1175 	uint8 data[1];
1176 } BWL_POST_PACKED_STRUCT;
1177 typedef struct dot11_rm_action dot11_rm_action_t;
1178 #define DOT11_RM_ACTION_LEN 3
1179 
1180 BWL_PRE_PACKED_STRUCT struct dot11_rmreq {
1181 	uint8 category;
1182 	uint8 action;
1183 	uint8 token;
1184 	uint16 reps;
1185 } BWL_POST_PACKED_STRUCT;
1186 typedef struct dot11_rmreq dot11_rmreq_t;
1187 #define DOT11_RMREQ_LEN 5
1188 
1189 BWL_PRE_PACKED_STRUCT struct dot11_rm_ie {
1190 	uint8 id;
1191 	uint8 len;
1192 	uint8 token;
1193 	uint8 mode;
1194 	uint8 type;
1195 } BWL_POST_PACKED_STRUCT;
1196 typedef struct dot11_rm_ie dot11_rm_ie_t;
1197 #define DOT11_RM_IE_LEN 5
1198 
1199 
1200 #define DOT11_RMREQ_MODE_PARALLEL   1
1201 #define DOT11_RMREQ_MODE_ENABLE     2
1202 #define DOT11_RMREQ_MODE_REQUEST    4
1203 #define DOT11_RMREQ_MODE_REPORT     8
1204 #define DOT11_RMREQ_MODE_DURMAND    0x10
1205 
1206 
1207 #define DOT11_RMREP_MODE_LATE       1
1208 #define DOT11_RMREP_MODE_INCAPABLE  2
1209 #define DOT11_RMREP_MODE_REFUSED    4
1210 
1211 BWL_PRE_PACKED_STRUCT struct dot11_rmreq_bcn {
1212 	uint8 id;
1213 	uint8 len;
1214 	uint8 token;
1215 	uint8 mode;
1216 	uint8 type;
1217 	uint8 reg;
1218 	uint8 channel;
1219 	uint16 interval;
1220 	uint16 duration;
1221 	uint8 bcn_mode;
1222 	struct ether_addr   bssid;
1223 } BWL_POST_PACKED_STRUCT;
1224 typedef struct dot11_rmreq_bcn dot11_rmreq_bcn_t;
1225 #define DOT11_RMREQ_BCN_LEN 18
1226 
1227 BWL_PRE_PACKED_STRUCT struct dot11_rmrep_bcn {
1228 	uint8 reg;
1229 	uint8 channel;
1230 	uint32 starttime[2];
1231 	uint16 duration;
1232 	uint8 frame_info;
1233 	uint8 rcpi;
1234 	uint8 rsni;
1235 	struct ether_addr   bssid;
1236 	uint8 antenna_id;
1237 	uint32 parent_tsf;
1238 } BWL_POST_PACKED_STRUCT;
1239 typedef struct dot11_rmrep_bcn dot11_rmrep_bcn_t;
1240 #define DOT11_RMREP_BCN_LEN 26
1241 
1242 
1243 #define DOT11_RMREQ_BCN_PASSIVE 0
1244 #define DOT11_RMREQ_BCN_ACTIVE  1
1245 #define DOT11_RMREQ_BCN_TABLE   2
1246 
1247 
1248 #define DOT11_RMREQ_BCN_SSID_ID 0
1249 #define DOT11_RMREQ_BCN_REPINFO_ID  1
1250 #define DOT11_RMREQ_BCN_REPDET_ID   2
1251 #define DOT11_RMREQ_BCN_REQUEST_ID  10
1252 #define DOT11_RMREQ_BCN_APCHREP_ID  51
1253 
1254 
1255 #define DOT11_RMREQ_BCN_REPDET_FIXED    0
1256 #define DOT11_RMREQ_BCN_REPDET_REQUEST  1
1257 #define DOT11_RMREQ_BCN_REPDET_ALL  2
1258 
1259 
1260 #define DOT11_RMREP_BCN_FRM_BODY    1
1261 
1262 
1263 BWL_PRE_PACKED_STRUCT struct dot11_rmrep_nbr {
1264 	struct ether_addr   bssid;
1265 	uint32  bssid_info;
1266 	uint8 reg;
1267 	uint8 channel;
1268 	uint8 phytype;
1269 } BWL_POST_PACKED_STRUCT;
1270 typedef struct dot11_rmrep_nbr dot11_rmrep_nbr_t;
1271 #define DOT11_RMREP_NBR_LEN 13
1272 
1273 
1274 #define DOT11_BSSTYPE_INFRASTRUCTURE        0
1275 #define DOT11_BSSTYPE_INDEPENDENT       1
1276 #define DOT11_BSSTYPE_ANY           2
1277 #define DOT11_SCANTYPE_ACTIVE           0
1278 #define DOT11_SCANTYPE_PASSIVE          1
1279 
1280 
1281 BWL_PRE_PACKED_STRUCT struct dot11_lmreq {
1282 	uint8 category;
1283 	uint8 action;
1284 	uint8 token;
1285 	uint8 txpwr;
1286 	uint8 maxtxpwr;
1287 } BWL_POST_PACKED_STRUCT;
1288 typedef struct dot11_lmreq dot11_lmreq_t;
1289 #define DOT11_LMREQ_LEN 5
1290 
1291 BWL_PRE_PACKED_STRUCT struct dot11_lmrep {
1292 	uint8 category;
1293 	uint8 action;
1294 	uint8 token;
1295 	dot11_tpc_rep_t tpc;
1296 	uint8 rxant;
1297 	uint8 txant;
1298 	uint8 rcpi;
1299 	uint8 rsni;
1300 } BWL_POST_PACKED_STRUCT;
1301 typedef struct dot11_lmrep dot11_lmrep_t;
1302 #define DOT11_LMREP_LEN 11
1303 
1304 
1305 #define PREN_PREAMBLE       24
1306 #define PREN_MM_EXT     12
1307 #define PREN_PREAMBLE_EXT   4
1308 
1309 
1310 #define RIFS_11N_TIME       2
1311 
1312 
1313 
1314 #define HT_SIG1_MCS_MASK        0x00007F
1315 #define HT_SIG1_CBW             0x000080
1316 #define HT_SIG1_HT_LENGTH       0xFFFF00
1317 
1318 
1319 #define HT_SIG2_SMOOTHING       0x000001
1320 #define HT_SIG2_NOT_SOUNDING    0x000002
1321 #define HT_SIG2_RESERVED        0x000004
1322 #define HT_SIG2_AGGREGATION     0x000008
1323 #define HT_SIG2_STBC_MASK       0x000030
1324 #define HT_SIG2_STBC_SHIFT      4
1325 #define HT_SIG2_FEC_CODING      0x000040
1326 #define HT_SIG2_SHORT_GI        0x000080
1327 #define HT_SIG2_ESS_MASK        0x000300
1328 #define HT_SIG2_ESS_SHIFT       8
1329 #define HT_SIG2_CRC             0x03FC00
1330 #define HT_SIG2_TAIL            0x1C0000
1331 
1332 
1333 #define APHY_SLOT_TIME      9
1334 #define APHY_SIFS_TIME      16
1335 #define APHY_DIFS_TIME      (APHY_SIFS_TIME + (2 * APHY_SLOT_TIME))
1336 #define APHY_PREAMBLE_TIME  16
1337 #define APHY_SIGNAL_TIME    4
1338 #define APHY_SYMBOL_TIME    4
1339 #define APHY_SERVICE_NBITS  16
1340 #define APHY_TAIL_NBITS     6
1341 #define APHY_CWMIN      15
1342 
1343 
1344 #define BPHY_SLOT_TIME      20
1345 #define BPHY_SIFS_TIME      10
1346 #define BPHY_DIFS_TIME      50
1347 #define BPHY_PLCP_TIME      192
1348 #define BPHY_PLCP_SHORT_TIME    96
1349 #define BPHY_CWMIN      31
1350 
1351 
1352 #define DOT11_OFDM_SIGNAL_EXTENSION 6
1353 
1354 #define PHY_CWMAX       1023
1355 
1356 #define DOT11_MAXNUMFRAGS   16
1357 
1358 
1359 typedef struct d11cnt {
1360 	uint32      txfrag;
1361 	uint32      txmulti;
1362 	uint32      txfail;
1363 	uint32      txretry;
1364 	uint32      txretrie;
1365 	uint32      rxdup;
1366 	uint32      txrts;
1367 	uint32      txnocts;
1368 	uint32      txnoack;
1369 	uint32      rxfrag;
1370 	uint32      rxmulti;
1371 	uint32      rxcrc;
1372 	uint32      txfrmsnt;
1373 	uint32      rxundec;
1374 } d11cnt_t;
1375 
1376 
1377 #define BRCM_PROP_OUI       "\x00\x90\x4C"
1378 
1379 
1380 
1381 #define BRCM_OUI        "\x00\x10\x18"
1382 
1383 
1384 BWL_PRE_PACKED_STRUCT struct brcm_ie {
1385 	uint8   id;
1386 	uint8   len;
1387 	uint8   oui[3];
1388 	uint8   ver;
1389 	uint8   assoc;
1390 	uint8   flags;
1391 	uint8   flags1;
1392 	uint16  amsdu_mtu_pref;
1393 } BWL_POST_PACKED_STRUCT;
1394 typedef struct brcm_ie brcm_ie_t;
1395 #define BRCM_IE_LEN     11
1396 #define BRCM_IE_VER     2
1397 #define BRCM_IE_LEGACY_AES_VER  1
1398 
1399 
1400 #ifdef WLAFTERBURNER
1401 #define BRF_ABCAP       0x1
1402 #define BRF_ABRQRD      0x2
1403 #define BRF_ABCOUNTER_MASK  0xf0
1404 #define BRF_ABCOUNTER_SHIFT 4
1405 #endif
1406 #define BRF_LZWDS       0x4
1407 #define BRF_BLOCKACK        0x8
1408 
1409 
1410 #define BRF1_AMSDU      0x1
1411 #define BRF1_WMEPS      0x4
1412 #define BRF1_PSOFIX     0x8
1413 #define BRF1_RX_LARGE_AGG   0x10
1414 #define BRF1_SOFTAP             0x40
1415 
1416 #ifdef WLAFTERBURNER
1417 #define AB_WDS_TIMEOUT_MAX  15
1418 #define AB_WDS_TIMEOUT_MIN  1
1419 #endif
1420 
1421 #define AB_GUARDCOUNT   10
1422 
1423 
1424 BWL_PRE_PACKED_STRUCT struct vndr_ie {
1425 	uchar id;
1426 	uchar len;
1427 	uchar oui [3];
1428 	uchar data [1];
1429 } BWL_POST_PACKED_STRUCT;
1430 typedef struct vndr_ie vndr_ie_t;
1431 
1432 #define VNDR_IE_HDR_LEN     2
1433 #define VNDR_IE_MIN_LEN     3
1434 #define VNDR_IE_MAX_LEN     256
1435 
1436 
1437 #define MCSSET_LEN  16
1438 #define MAX_MCS_NUM (128)
1439 
1440 BWL_PRE_PACKED_STRUCT struct ht_cap_ie {
1441 	uint16  cap;
1442 	uint8   params;
1443 	uint8   supp_mcs[MCSSET_LEN];
1444 	uint16  ext_htcap;
1445 	uint32  txbf_cap;
1446 	uint8   as_cap;
1447 } BWL_POST_PACKED_STRUCT;
1448 typedef struct ht_cap_ie ht_cap_ie_t;
1449 
1450 
1451 
1452 BWL_PRE_PACKED_STRUCT struct ht_prop_cap_ie {
1453 	uint8   id;
1454 	uint8   len;
1455 	uint8   oui[3];
1456 	uint8   type;
1457 	ht_cap_ie_t cap_ie;
1458 } BWL_POST_PACKED_STRUCT;
1459 typedef struct ht_prop_cap_ie ht_prop_cap_ie_t;
1460 
1461 #define HT_PROP_IE_OVERHEAD 4
1462 #define HT_CAP_IE_LEN       26
1463 #define HT_CAP_IE_TYPE      51
1464 
1465 #define HT_CAP_LDPC_CODING  0x0001
1466 #define HT_CAP_40MHZ        0x0002
1467 #define HT_CAP_MIMO_PS_MASK 0x000C
1468 #define HT_CAP_MIMO_PS_SHIFT    0x0002
1469 #define HT_CAP_MIMO_PS_OFF  0x0003
1470 #define HT_CAP_MIMO_PS_RTS  0x0001
1471 #define HT_CAP_MIMO_PS_ON   0x0000
1472 #define HT_CAP_GF       0x0010
1473 #define HT_CAP_SHORT_GI_20  0x0020
1474 #define HT_CAP_SHORT_GI_40  0x0040
1475 #define HT_CAP_TX_STBC      0x0080
1476 #define HT_CAP_RX_STBC_MASK 0x0300
1477 #define HT_CAP_RX_STBC_SHIFT    8
1478 #define HT_CAP_DELAYED_BA   0x0400
1479 #define HT_CAP_MAX_AMSDU    0x0800
1480 #define HT_CAP_DSSS_CCK 0x1000
1481 #define HT_CAP_PSMP     0x2000
1482 #define HT_CAP_40MHZ_INTOLERANT 0x4000
1483 #define HT_CAP_LSIG_TXOP    0x8000
1484 
1485 #define HT_CAP_RX_STBC_NO       0x0
1486 #define HT_CAP_RX_STBC_ONE_STREAM   0x1
1487 #define HT_CAP_RX_STBC_TWO_STREAM   0x2
1488 #define HT_CAP_RX_STBC_THREE_STREAM 0x3
1489 
1490 #define HT_MAX_AMSDU        7935
1491 #define HT_MIN_AMSDU        3835
1492 
1493 #define HT_PARAMS_RX_FACTOR_MASK    0x03
1494 #define HT_PARAMS_DENSITY_MASK      0x1C
1495 #define HT_PARAMS_DENSITY_SHIFT 2
1496 
1497 
1498 #define AMPDU_MAX_MPDU_DENSITY  7
1499 #define AMPDU_RX_FACTOR_8K  0
1500 #define AMPDU_RX_FACTOR_16K 1
1501 #define AMPDU_RX_FACTOR_32K 2
1502 #define AMPDU_RX_FACTOR_64K 3
1503 #define AMPDU_RX_FACTOR_BASE    8*1024
1504 
1505 #define AMPDU_DELIMITER_LEN 4
1506 #define AMPDU_DELIMITER_LEN_MAX 63
1507 
1508 BWL_PRE_PACKED_STRUCT struct ht_add_ie {
1509 	uint8   ctl_ch;
1510 	uint8   byte1;
1511 	uint16  opmode;
1512 	uint16  misc_bits;
1513 	uint8   basic_mcs[MCSSET_LEN];
1514 } BWL_POST_PACKED_STRUCT;
1515 typedef struct ht_add_ie ht_add_ie_t;
1516 
1517 
1518 
1519 BWL_PRE_PACKED_STRUCT struct ht_prop_add_ie {
1520 	uint8   id;
1521 	uint8   len;
1522 	uint8   oui[3];
1523 	uint8   type;
1524 	ht_add_ie_t add_ie;
1525 } BWL_POST_PACKED_STRUCT;
1526 typedef struct ht_prop_add_ie ht_prop_add_ie_t;
1527 
1528 #define HT_ADD_IE_LEN   22
1529 #define HT_ADD_IE_TYPE  52
1530 
1531 
1532 #define HT_BW_ANY       0x04
1533 #define HT_RIFS_PERMITTED       0x08
1534 
1535 
1536 #define HT_OPMODE_MASK          0x0003
1537 #define HT_OPMODE_SHIFT     0
1538 #define HT_OPMODE_PURE      0x0000
1539 #define HT_OPMODE_OPTIONAL  0x0001
1540 #define HT_OPMODE_HT20IN40  0x0002
1541 #define HT_OPMODE_MIXED 0x0003
1542 #define HT_OPMODE_NONGF 0x0004
1543 #define DOT11N_TXBURST      0x0008
1544 #define DOT11N_OBSS_NONHT   0x0010
1545 
1546 
1547 #define HT_BASIC_STBC_MCS   0x007f
1548 #define HT_DUAL_STBC_PROT   0x0080
1549 #define HT_SECOND_BCN       0x0100
1550 #define HT_LSIG_TXOP        0x0200
1551 #define HT_PCO_ACTIVE       0x0400
1552 #define HT_PCO_PHASE        0x0800
1553 
1554 
1555 #define DOT11N_2G_TXBURST_LIMIT 6160
1556 #define DOT11N_5G_TXBURST_LIMIT 3080
1557 
1558 
1559 #define GET_HT_OPMODE(add_ie)       ((ltoh16_ua(&add_ie->opmode) & HT_OPMODE_MASK) \
1560 					>> HT_OPMODE_SHIFT)
1561 #define HT_MIXEDMODE_PRESENT(add_ie)    ((ltoh16_ua(&add_ie->opmode) & HT_OPMODE_MASK) \
1562 					== HT_OPMODE_MIXED)
1563 #define HT_HT20_PRESENT(add_ie) ((ltoh16_ua(&add_ie->opmode) & HT_OPMODE_MASK) \
1564 					== HT_OPMODE_HT20IN40)
1565 #define HT_OPTIONAL_PRESENT(add_ie) ((ltoh16_ua(&add_ie->opmode) & HT_OPMODE_MASK) \
1566 					== HT_OPMODE_OPTIONAL)
1567 #define HT_USE_PROTECTION(add_ie)   (HT_HT20_PRESENT((add_ie)) || \
1568 					HT_MIXEDMODE_PRESENT((add_ie)))
1569 #define HT_NONGF_PRESENT(add_ie)    ((ltoh16_ua(&add_ie->opmode) & HT_OPMODE_NONGF) \
1570 					== HT_OPMODE_NONGF)
1571 #define DOT11N_TXBURST_PRESENT(add_ie)  ((ltoh16_ua(&add_ie->opmode) & DOT11N_TXBURST) \
1572 					== DOT11N_TXBURST)
1573 #define DOT11N_OBSS_NONHT_PRESENT(add_ie)   ((ltoh16_ua(&add_ie->opmode) & DOT11N_OBSS_NONHT) \
1574 					== DOT11N_OBSS_NONHT)
1575 
1576 BWL_PRE_PACKED_STRUCT struct obss_params {
1577 	uint16  passive_dwell;
1578 	uint16  active_dwell;
1579 	uint16  bss_widthscan_interval;
1580 	uint16  passive_total;
1581 	uint16  active_total;
1582 	uint16  chanwidth_transition_dly;
1583 	uint16  activity_threshold;
1584 } BWL_POST_PACKED_STRUCT;
1585 typedef struct obss_params obss_params_t;
1586 
1587 BWL_PRE_PACKED_STRUCT struct dot11_obss_ie {
1588 	uint8   id;
1589 	uint8   len;
1590 	obss_params_t obss_params;
1591 } BWL_POST_PACKED_STRUCT;
1592 typedef struct dot11_obss_ie dot11_obss_ie_t;
1593 #define DOT11_OBSS_SCAN_IE_LEN  sizeof(obss_params_t)
1594 
1595 
1596 #define HT_CTRL_LA_TRQ      0x00000002
1597 #define HT_CTRL_LA_MAI      0x0000003C
1598 #define HT_CTRL_LA_MAI_SHIFT    2
1599 #define HT_CTRL_LA_MAI_MRQ  0x00000004
1600 #define HT_CTRL_LA_MAI_MSI  0x00000038
1601 #define HT_CTRL_LA_MFSI     0x000001C0
1602 #define HT_CTRL_LA_MFSI_SHIFT   6
1603 #define HT_CTRL_LA_MFB_ASELC    0x0000FE00
1604 #define HT_CTRL_LA_MFB_ASELC_SH 9
1605 #define HT_CTRL_LA_ASELC_CMD    0x00000C00
1606 #define HT_CTRL_LA_ASELC_DATA   0x0000F000
1607 #define HT_CTRL_CAL_POS     0x00030000
1608 #define HT_CTRL_CAL_SEQ     0x000C0000
1609 #define HT_CTRL_CSI_STEERING    0x00C00000
1610 #define HT_CTRL_CSI_STEER_SHIFT 22
1611 #define HT_CTRL_CSI_STEER_NFB   0
1612 #define HT_CTRL_CSI_STEER_CSI   1
1613 #define HT_CTRL_CSI_STEER_NCOM  2
1614 #define HT_CTRL_CSI_STEER_COM   3
1615 #define HT_CTRL_NDP_ANNOUNCE    0x01000000
1616 #define HT_CTRL_AC_CONSTRAINT   0x40000000
1617 #define HT_CTRL_RDG_MOREPPDU    0x80000000
1618 
1619 #define HT_OPMODE_OPTIONAL  0x0001
1620 #define HT_OPMODE_HT20IN40  0x0002
1621 #define HT_OPMODE_MIXED 0x0003
1622 #define HT_OPMODE_NONGF 0x0004
1623 #define DOT11N_TXBURST      0x0008
1624 #define DOT11N_OBSS_NONHT   0x0010
1625 
1626 
1627 
1628 #define WPA_OUI         "\x00\x50\xF2"
1629 #define WPA_OUI_LEN     3
1630 #define WPA_OUI_TYPE        1
1631 #define WPA_VERSION     1
1632 #define WPA2_OUI        "\x00\x0F\xAC"
1633 #define WPA2_OUI_LEN        3
1634 #define WPA2_VERSION        1
1635 #define WPA2_VERSION_LEN    2
1636 
1637 
1638 #define WPS_OUI         "\x00\x50\xF2"
1639 #define WPS_OUI_LEN     3
1640 #define WPS_OUI_TYPE        4
1641 
1642 
1643 #define WFA_OUI         "\x50\x6F\x9A"
1644 #define WFA_OUI_LEN 3
1645 
1646 #define WFA_OUI_TYPE_WPA    1
1647 #define WFA_OUI_TYPE_WPS    4
1648 #define WFA_OUI_TYPE_TPC    8
1649 #define WFA_OUI_TYPE_P2P    9
1650 
1651 
1652 #define RSN_AKM_NONE        0
1653 #define RSN_AKM_UNSPECIFIED 1
1654 #define RSN_AKM_PSK     2
1655 #define RSN_AKM_FBT_1X      3
1656 #define RSN_AKM_FBT_PSK     4
1657 
1658 
1659 #define DOT11_MAX_DEFAULT_KEYS  4
1660 #define DOT11_MAX_KEY_SIZE  32
1661 #define DOT11_MAX_IV_SIZE   16
1662 #define DOT11_EXT_IV_FLAG   (1<<5)
1663 #define DOT11_WPA_KEY_RSC_LEN   8
1664 
1665 #define WEP1_KEY_SIZE       5
1666 #define WEP1_KEY_HEX_SIZE   10
1667 #define WEP128_KEY_SIZE     13
1668 #define WEP128_KEY_HEX_SIZE 26
1669 #define TKIP_MIC_SIZE       8
1670 #define TKIP_EOM_SIZE       7
1671 #define TKIP_EOM_FLAG       0x5a
1672 #define TKIP_KEY_SIZE       32
1673 #define TKIP_MIC_AUTH_TX    16
1674 #define TKIP_MIC_AUTH_RX    24
1675 #define TKIP_MIC_SUP_RX     TKIP_MIC_AUTH_TX
1676 #define TKIP_MIC_SUP_TX     TKIP_MIC_AUTH_RX
1677 #define AES_KEY_SIZE        16
1678 #define AES_MIC_SIZE        8
1679 
1680 
1681 #define WCN_OUI         "\x00\x50\xf2"
1682 #define WCN_TYPE        4
1683 
1684 
1685 
1686 
1687 
1688 BWL_PRE_PACKED_STRUCT struct dot11_mdid_ie {
1689 	uint8 id;
1690 	uint8 len;
1691 	uint16 mdid;
1692 	uint8 cap;
1693 } BWL_POST_PACKED_STRUCT;
1694 typedef struct dot11_mdid_ie dot11_mdid_ie_t;
1695 
1696 #define FBT_MDID_CAP_OVERDS 0x01
1697 #define FBT_MDID_CAP_RRP    0x02
1698 
1699 
1700 BWL_PRE_PACKED_STRUCT struct dot11_ft_ie {
1701 	uint8 id;
1702 	uint8 len;
1703 	uint16 mic_control;
1704 	uint8 mic[16];
1705 	uint8 anonce[32];
1706 	uint8 snonce[32];
1707 } BWL_POST_PACKED_STRUCT;
1708 typedef struct dot11_ft_ie dot11_ft_ie_t;
1709 
1710 
1711 BWL_PRE_PACKED_STRUCT struct dot11_gtk_ie {
1712 	uint8 id;
1713 	uint8 len;
1714 	uint16 key_info;
1715 	uint8 key_len;
1716 	uint8 rsc[8];
1717 	uint8 data[1];
1718 } BWL_POST_PACKED_STRUCT;
1719 typedef struct dot11_gtk_ie dot11_gtk_ie_t;
1720 
1721 
1722 
1723 #include <packed_section_end.h>
1724 
1725 #endif
1726