Home | History | Annotate | Download | only in proto
      1 /*
      2  * Copyright (C) 1999-2010, Broadcom Corporation
      3  *
      4  *      Unless you and Broadcom execute a separate written software license
      5  * agreement governing use of this software, this software is licensed to you
      6  * under the terms of the GNU General Public License version 2 (the "GPL"),
      7  * available at http://www.broadcom.com/licenses/GPLv2.php, with the
      8  * following added to such license:
      9  *
     10  *      As a special exception, the copyright holders of this software give you
     11  * permission to link this software with independent modules, and to copy and
     12  * distribute the resulting executable under terms of your choice, provided that
     13  * you also meet, for each linked independent module, the terms and conditions of
     14  * the license of that module.  An independent module is a module which is not
     15  * derived from this software.  The special exception does not apply to any
     16  * modifications of the software.
     17  *
     18  *      Notwithstanding the above, under no circumstances may you combine this
     19  * software in any way with any other Broadcom software provided under a license
     20  * other than the GPL, without Broadcom's express prior written consent.
     21  *
     22  * Fundamental types and constants relating to 802.11
     23  *
     24  * $Id: 802.11.h,v 9.219.4.1.4.5.6.11 2010/02/09 13:23:26 Exp $
     25  */
     26 
     27 
     28 #ifndef _802_11_H_
     29 #define _802_11_H_
     30 
     31 #ifndef _TYPEDEFS_H_
     32 #include <typedefs.h>
     33 #endif
     34 
     35 #ifndef _NET_ETHERNET_H_
     36 #include <proto/ethernet.h>
     37 #endif
     38 
     39 #include <proto/wpa.h>
     40 
     41 
     42 #include <packed_section_start.h>
     43 
     44 
     45 #define DOT11_TU_TO_US			1024
     46 
     47 
     48 #define DOT11_A3_HDR_LEN		24
     49 #define DOT11_A4_HDR_LEN		30
     50 #define DOT11_MAC_HDR_LEN		DOT11_A3_HDR_LEN
     51 #define DOT11_FCS_LEN			4
     52 #define DOT11_ICV_LEN			4
     53 #define DOT11_ICV_AES_LEN		8
     54 #define DOT11_QOS_LEN			2
     55 #define DOT11_HTC_LEN			4
     56 
     57 #define DOT11_KEY_INDEX_SHIFT		6
     58 #define DOT11_IV_LEN			4
     59 #define DOT11_IV_TKIP_LEN		8
     60 #define DOT11_IV_AES_OCB_LEN		4
     61 #define DOT11_IV_AES_CCM_LEN		8
     62 #define DOT11_IV_MAX_LEN		8
     63 
     64 
     65 #define DOT11_MAX_MPDU_BODY_LEN		2304
     66 
     67 #define DOT11_MAX_MPDU_LEN		(DOT11_A4_HDR_LEN + \
     68 					 DOT11_QOS_LEN + \
     69 					 DOT11_IV_AES_CCM_LEN + \
     70 					 DOT11_MAX_MPDU_BODY_LEN + \
     71 					 DOT11_ICV_LEN + \
     72 					 DOT11_FCS_LEN)
     73 
     74 #define DOT11_MAX_SSID_LEN		32
     75 
     76 
     77 #define DOT11_DEFAULT_RTS_LEN		2347
     78 #define DOT11_MAX_RTS_LEN		2347
     79 
     80 
     81 #define DOT11_MIN_FRAG_LEN		256
     82 #define DOT11_MAX_FRAG_LEN		2346
     83 #define DOT11_DEFAULT_FRAG_LEN		2346
     84 
     85 
     86 #define DOT11_MIN_BEACON_PERIOD		1
     87 #define DOT11_MAX_BEACON_PERIOD		0xFFFF
     88 
     89 
     90 #define DOT11_MIN_DTIM_PERIOD		1
     91 #define DOT11_MAX_DTIM_PERIOD		0xFF
     92 
     93 
     94 #define DOT11_LLC_SNAP_HDR_LEN		8
     95 #define DOT11_OUI_LEN			3
     96 BWL_PRE_PACKED_STRUCT struct dot11_llc_snap_header {
     97 	uint8	dsap;
     98 	uint8	ssap;
     99 	uint8	ctl;
    100 	uint8	oui[DOT11_OUI_LEN];
    101 	uint16	type;
    102 } BWL_POST_PACKED_STRUCT;
    103 
    104 
    105 #define RFC1042_HDR_LEN	(ETHER_HDR_LEN + DOT11_LLC_SNAP_HDR_LEN)
    106 
    107 
    108 
    109 BWL_PRE_PACKED_STRUCT struct dot11_header {
    110 	uint16			fc;
    111 	uint16			durid;
    112 	struct ether_addr	a1;
    113 	struct ether_addr	a2;
    114 	struct ether_addr	a3;
    115 	uint16			seq;
    116 	struct ether_addr	a4;
    117 } BWL_POST_PACKED_STRUCT;
    118 
    119 
    120 
    121 BWL_PRE_PACKED_STRUCT struct dot11_rts_frame {
    122 	uint16			fc;
    123 	uint16			durid;
    124 	struct ether_addr	ra;
    125 	struct ether_addr	ta;
    126 } BWL_POST_PACKED_STRUCT;
    127 #define	DOT11_RTS_LEN		16
    128 
    129 BWL_PRE_PACKED_STRUCT struct dot11_cts_frame {
    130 	uint16			fc;
    131 	uint16			durid;
    132 	struct ether_addr	ra;
    133 } BWL_POST_PACKED_STRUCT;
    134 #define	DOT11_CTS_LEN		10
    135 
    136 BWL_PRE_PACKED_STRUCT struct dot11_ack_frame {
    137 	uint16			fc;
    138 	uint16			durid;
    139 	struct ether_addr	ra;
    140 } BWL_POST_PACKED_STRUCT;
    141 #define	DOT11_ACK_LEN		10
    142 
    143 BWL_PRE_PACKED_STRUCT struct dot11_ps_poll_frame {
    144 	uint16			fc;
    145 	uint16			durid;
    146 	struct ether_addr	bssid;
    147 	struct ether_addr	ta;
    148 } BWL_POST_PACKED_STRUCT;
    149 #define	DOT11_PS_POLL_LEN	16
    150 
    151 BWL_PRE_PACKED_STRUCT struct dot11_cf_end_frame {
    152 	uint16			fc;
    153 	uint16			durid;
    154 	struct ether_addr	ra;
    155 	struct ether_addr	bssid;
    156 } BWL_POST_PACKED_STRUCT;
    157 #define	DOT11_CS_END_LEN	16
    158 
    159 BWL_PRE_PACKED_STRUCT struct dot11_action_wifi_vendor_specific {
    160 	uint8	category;
    161 	uint8	OUI[3];
    162 	uint8	type;
    163 	uint8	subtype;
    164 	uint8	data[1040];
    165 	struct dot11_action_wifi_vendor_specific* next_node;
    166 } BWL_POST_PACKED_STRUCT;
    167 
    168 typedef struct dot11_action_wifi_vendor_specific dot11_action_wifi_vendor_specific_t;
    169 
    170 #define DOT11_BA_CTL_POLICY_NORMAL	0x0000
    171 #define DOT11_BA_CTL_POLICY_NOACK	0x0001
    172 #define DOT11_BA_CTL_POLICY_MASK	0x0001
    173 
    174 #define DOT11_BA_CTL_MTID		0x0002
    175 #define DOT11_BA_CTL_COMPRESSED		0x0004
    176 
    177 #define DOT11_BA_CTL_NUMMSDU_MASK	0x0FC0
    178 #define DOT11_BA_CTL_NUMMSDU_SHIFT	6
    179 
    180 #define DOT11_BA_CTL_TID_MASK		0xF000
    181 #define DOT11_BA_CTL_TID_SHIFT		12
    182 
    183 
    184 BWL_PRE_PACKED_STRUCT struct dot11_ctl_header {
    185 	uint16			fc;
    186 	uint16			durid;
    187 	struct ether_addr	ra;
    188 	struct ether_addr	ta;
    189 } BWL_POST_PACKED_STRUCT;
    190 #define DOT11_CTL_HDR_LEN	16
    191 
    192 
    193 BWL_PRE_PACKED_STRUCT struct dot11_bar {
    194 	uint16			bar_control;
    195 	uint16			seqnum;
    196 } BWL_POST_PACKED_STRUCT;
    197 #define DOT11_BAR_LEN		4
    198 
    199 #define DOT11_BA_BITMAP_LEN	128
    200 #define DOT11_BA_CMP_BITMAP_LEN	8
    201 
    202 BWL_PRE_PACKED_STRUCT struct dot11_ba {
    203 	uint16			ba_control;
    204 	uint16			seqnum;
    205 	uint8			bitmap[DOT11_BA_BITMAP_LEN];
    206 } BWL_POST_PACKED_STRUCT;
    207 #define DOT11_BA_LEN		4
    208 
    209 
    210 BWL_PRE_PACKED_STRUCT struct dot11_management_header {
    211 	uint16			fc;
    212 	uint16			durid;
    213 	struct ether_addr	da;
    214 	struct ether_addr	sa;
    215 	struct ether_addr	bssid;
    216 	uint16			seq;
    217 } BWL_POST_PACKED_STRUCT;
    218 #define	DOT11_MGMT_HDR_LEN	24
    219 
    220 
    221 
    222 BWL_PRE_PACKED_STRUCT struct dot11_bcn_prb {
    223 	uint32			timestamp[2];
    224 	uint16			beacon_interval;
    225 	uint16			capability;
    226 } BWL_POST_PACKED_STRUCT;
    227 #define	DOT11_BCN_PRB_LEN	12
    228 
    229 BWL_PRE_PACKED_STRUCT struct dot11_auth {
    230 	uint16			alg;
    231 	uint16			seq;
    232 	uint16			status;
    233 } BWL_POST_PACKED_STRUCT;
    234 #define DOT11_AUTH_FIXED_LEN	6
    235 
    236 BWL_PRE_PACKED_STRUCT struct dot11_assoc_req {
    237 	uint16			capability;
    238 	uint16			listen;
    239 } BWL_POST_PACKED_STRUCT;
    240 #define DOT11_ASSOC_REQ_FIXED_LEN	4
    241 
    242 BWL_PRE_PACKED_STRUCT struct dot11_reassoc_req {
    243 	uint16			capability;
    244 	uint16			listen;
    245 	struct ether_addr	ap;
    246 } BWL_POST_PACKED_STRUCT;
    247 #define DOT11_REASSOC_REQ_FIXED_LEN	10
    248 
    249 BWL_PRE_PACKED_STRUCT struct dot11_assoc_resp {
    250 	uint16			capability;
    251 	uint16			status;
    252 	uint16			aid;
    253 } BWL_POST_PACKED_STRUCT;
    254 #define DOT11_ASSOC_RESP_FIXED_LEN	6
    255 
    256 BWL_PRE_PACKED_STRUCT struct dot11_action_measure {
    257 	uint8	category;
    258 	uint8	action;
    259 	uint8	token;
    260 	uint8	data[1];
    261 } BWL_POST_PACKED_STRUCT;
    262 #define DOT11_ACTION_MEASURE_LEN	3
    263 
    264 BWL_PRE_PACKED_STRUCT struct dot11_action_ht_ch_width {
    265 	uint8	category;
    266 	uint8	action;
    267 	uint8	ch_width;
    268 } BWL_POST_PACKED_STRUCT;
    269 
    270 BWL_PRE_PACKED_STRUCT struct dot11_action_ht_mimops {
    271 	uint8	category;
    272 	uint8	action;
    273 	uint8	control;
    274 } BWL_POST_PACKED_STRUCT;
    275 
    276 #define SM_PWRSAVE_ENABLE	1
    277 #define SM_PWRSAVE_MODE		2
    278 
    279 
    280 BWL_PRE_PACKED_STRUCT struct dot11_power_cnst {
    281 	uint8 id;
    282 	uint8 len;
    283 	uint8 power;
    284 } BWL_POST_PACKED_STRUCT;
    285 typedef struct dot11_power_cnst dot11_power_cnst_t;
    286 
    287 BWL_PRE_PACKED_STRUCT struct dot11_power_cap {
    288 	uint8 min;
    289 	uint8 max;
    290 } BWL_POST_PACKED_STRUCT;
    291 typedef struct dot11_power_cap dot11_power_cap_t;
    292 
    293 BWL_PRE_PACKED_STRUCT struct dot11_tpc_rep {
    294 	uint8 id;
    295 	uint8 len;
    296 	uint8 tx_pwr;
    297 	uint8 margin;
    298 } BWL_POST_PACKED_STRUCT;
    299 typedef struct dot11_tpc_rep dot11_tpc_rep_t;
    300 #define DOT11_MNG_IE_TPC_REPORT_LEN	2
    301 
    302 BWL_PRE_PACKED_STRUCT struct dot11_supp_channels {
    303 	uint8 id;
    304 	uint8 len;
    305 	uint8 first_channel;
    306 	uint8 num_channels;
    307 } BWL_POST_PACKED_STRUCT;
    308 typedef struct dot11_supp_channels dot11_supp_channels_t;
    309 
    310 
    311 BWL_PRE_PACKED_STRUCT struct dot11_extch {
    312 	uint8	id;
    313 	uint8	len;
    314 	uint8	extch;
    315 } BWL_POST_PACKED_STRUCT;
    316 typedef struct dot11_extch dot11_extch_ie_t;
    317 
    318 BWL_PRE_PACKED_STRUCT struct dot11_brcm_extch {
    319 	uint8	id;
    320 	uint8	len;
    321 	uint8	oui[3];
    322 	uint8	type;
    323 	uint8	extch;
    324 } BWL_POST_PACKED_STRUCT;
    325 typedef struct dot11_brcm_extch dot11_brcm_extch_ie_t;
    326 
    327 #define BRCM_EXTCH_IE_LEN	5
    328 #define BRCM_EXTCH_IE_TYPE	53
    329 #define DOT11_EXTCH_IE_LEN	1
    330 #define DOT11_EXT_CH_MASK	0x03
    331 #define DOT11_EXT_CH_UPPER	0x01
    332 #define DOT11_EXT_CH_LOWER	0x03
    333 #define DOT11_EXT_CH_NONE	0x00
    334 
    335 BWL_PRE_PACKED_STRUCT struct dot11_action_frmhdr {
    336 	uint8	category;
    337 	uint8	action;
    338 	uint8	data[1];
    339 } BWL_POST_PACKED_STRUCT;
    340 #define DOT11_ACTION_FRMHDR_LEN	2
    341 
    342 
    343 BWL_PRE_PACKED_STRUCT struct dot11_channel_switch {
    344 	uint8 id;
    345 	uint8 len;
    346 	uint8 mode;
    347 	uint8 channel;
    348 	uint8 count;
    349 } BWL_POST_PACKED_STRUCT;
    350 typedef struct dot11_channel_switch dot11_chan_switch_ie_t;
    351 
    352 #define DOT11_SWITCH_IE_LEN	3
    353 
    354 #define DOT11_CSA_MODE_ADVISORY		0
    355 #define DOT11_CSA_MODE_NO_TX		1
    356 
    357 BWL_PRE_PACKED_STRUCT struct dot11_action_switch_channel {
    358 	uint8	category;
    359 	uint8	action;
    360 	dot11_chan_switch_ie_t chan_switch_ie;
    361 	dot11_brcm_extch_ie_t extch_ie;
    362 } BWL_POST_PACKED_STRUCT;
    363 
    364 BWL_PRE_PACKED_STRUCT struct dot11_csa_body {
    365 	uint8 mode;
    366 	uint8 reg;
    367 	uint8 channel;
    368 	uint8 count;
    369 } BWL_POST_PACKED_STRUCT;
    370 
    371 
    372 BWL_PRE_PACKED_STRUCT struct dot11_ext_csa {
    373 	uint8 id;
    374 	uint8 len;
    375 	struct dot11_csa_body b;
    376 } BWL_POST_PACKED_STRUCT;
    377 
    378 BWL_PRE_PACKED_STRUCT struct dot11y_action_ext_csa {
    379 	uint8	category;
    380 	uint8	action;
    381 	struct dot11_csa_body b;
    382 } BWL_POST_PACKED_STRUCT;
    383 typedef struct dot11_ext_csa dot11_ext_csa_ie_t;
    384 #define DOT11_EXT_CSA_IE_LEN	4
    385 
    386 BWL_PRE_PACKED_STRUCT struct dot11_action_ext_csa {
    387 	uint8	category;
    388 	uint8	action;
    389 	dot11_ext_csa_ie_t chan_switch_ie;
    390 } BWL_POST_PACKED_STRUCT;
    391 
    392 BWL_PRE_PACKED_STRUCT struct dot11_obss_coex {
    393 	uint8	id;
    394 	uint8	len;
    395 	uint8	info;
    396 } BWL_POST_PACKED_STRUCT;
    397 typedef struct dot11_obss_coex dot11_obss_coex_t;
    398 #define DOT11_OBSS_COEXINFO_LEN	1
    399 
    400 #define	DOT11_OBSS_COEX_INFO_REQ		0x01
    401 #define	DOT11_OBSS_COEX_40MHZ_INTOLERANT	0x02
    402 #define	DOT11_OBSS_COEX_20MHZ_WIDTH_REQ	0x04
    403 
    404 BWL_PRE_PACKED_STRUCT struct dot11_obss_chanlist {
    405 	uint8	id;
    406 	uint8	len;
    407 	uint8	regclass;
    408 	uint8	chanlist[1];
    409 } BWL_POST_PACKED_STRUCT;
    410 typedef struct dot11_obss_chanlist dot11_obss_chanlist_t;
    411 #define DOT11_OBSS_CHANLIST_FIXED_LEN	1
    412 
    413 BWL_PRE_PACKED_STRUCT struct dot11_extcap_ie {
    414 	uint8 id;
    415 	uint8 len;
    416 	uint8 cap;
    417 } BWL_POST_PACKED_STRUCT;
    418 typedef struct dot11_extcap_ie dot11_extcap_ie_t;
    419 #define DOT11_EXTCAP_LEN	1
    420 
    421 
    422 
    423 #define DOT11_MEASURE_TYPE_BASIC 	0
    424 #define DOT11_MEASURE_TYPE_CCA 		1
    425 #define DOT11_MEASURE_TYPE_RPI		2
    426 
    427 
    428 #define DOT11_MEASURE_MODE_ENABLE 	(1<<1)
    429 #define DOT11_MEASURE_MODE_REQUEST	(1<<2)
    430 #define DOT11_MEASURE_MODE_REPORT 	(1<<3)
    431 
    432 #define DOT11_MEASURE_MODE_LATE 	(1<<0)
    433 #define DOT11_MEASURE_MODE_INCAPABLE	(1<<1)
    434 #define DOT11_MEASURE_MODE_REFUSED	(1<<2)
    435 
    436 #define DOT11_MEASURE_BASIC_MAP_BSS	((uint8)(1<<0))
    437 #define DOT11_MEASURE_BASIC_MAP_OFDM	((uint8)(1<<1))
    438 #define DOT11_MEASURE_BASIC_MAP_UKNOWN	((uint8)(1<<2))
    439 #define DOT11_MEASURE_BASIC_MAP_RADAR	((uint8)(1<<3))
    440 #define DOT11_MEASURE_BASIC_MAP_UNMEAS	((uint8)(1<<4))
    441 
    442 BWL_PRE_PACKED_STRUCT struct dot11_meas_req {
    443 	uint8 id;
    444 	uint8 len;
    445 	uint8 token;
    446 	uint8 mode;
    447 	uint8 type;
    448 	uint8 channel;
    449 	uint8 start_time[8];
    450 	uint16 duration;
    451 } BWL_POST_PACKED_STRUCT;
    452 typedef struct dot11_meas_req dot11_meas_req_t;
    453 #define DOT11_MNG_IE_MREQ_LEN 14
    454 
    455 #define DOT11_MNG_IE_MREQ_FIXED_LEN 3
    456 
    457 BWL_PRE_PACKED_STRUCT struct dot11_meas_rep {
    458 	uint8 id;
    459 	uint8 len;
    460 	uint8 token;
    461 	uint8 mode;
    462 	uint8 type;
    463 	BWL_PRE_PACKED_STRUCT union
    464 	{
    465 		BWL_PRE_PACKED_STRUCT struct {
    466 			uint8 channel;
    467 			uint8 start_time[8];
    468 			uint16 duration;
    469 			uint8 map;
    470 		} BWL_POST_PACKED_STRUCT basic;
    471 		uint8 data[1];
    472 	} BWL_POST_PACKED_STRUCT rep;
    473 } BWL_POST_PACKED_STRUCT;
    474 typedef struct dot11_meas_rep dot11_meas_rep_t;
    475 
    476 
    477 #define DOT11_MNG_IE_MREP_FIXED_LEN	3
    478 
    479 BWL_PRE_PACKED_STRUCT struct dot11_meas_rep_basic {
    480 	uint8 channel;
    481 	uint8 start_time[8];
    482 	uint16 duration;
    483 	uint8 map;
    484 } BWL_POST_PACKED_STRUCT;
    485 typedef struct dot11_meas_rep_basic dot11_meas_rep_basic_t;
    486 #define DOT11_MEASURE_BASIC_REP_LEN	12
    487 
    488 BWL_PRE_PACKED_STRUCT struct dot11_quiet {
    489 	uint8 id;
    490 	uint8 len;
    491 	uint8 count;
    492 	uint8 period;
    493 	uint16 duration;
    494 	uint16 offset;
    495 } BWL_POST_PACKED_STRUCT;
    496 typedef struct dot11_quiet dot11_quiet_t;
    497 
    498 BWL_PRE_PACKED_STRUCT struct chan_map_tuple {
    499 	uint8 channel;
    500 	uint8 map;
    501 } BWL_POST_PACKED_STRUCT;
    502 typedef struct chan_map_tuple chan_map_tuple_t;
    503 
    504 BWL_PRE_PACKED_STRUCT struct dot11_ibss_dfs {
    505 	uint8 id;
    506 	uint8 len;
    507 	uint8 eaddr[ETHER_ADDR_LEN];
    508 	uint8 interval;
    509 	chan_map_tuple_t map[1];
    510 } BWL_POST_PACKED_STRUCT;
    511 typedef struct dot11_ibss_dfs dot11_ibss_dfs_t;
    512 
    513 
    514 #define WME_OUI			"\x00\x50\xf2"
    515 #define WME_VER			1
    516 #define WME_TYPE		2
    517 #define WME_SUBTYPE_IE		0
    518 #define WME_SUBTYPE_PARAM_IE	1
    519 #define WME_SUBTYPE_TSPEC	2
    520 
    521 
    522 #define AC_BE			0
    523 #define AC_BK			1
    524 #define AC_VI			2
    525 #define AC_VO			3
    526 #define AC_COUNT		4
    527 
    528 typedef uint8 ac_bitmap_t;
    529 
    530 #define AC_BITMAP_NONE		0x0
    531 #define AC_BITMAP_ALL		0xf
    532 #define AC_BITMAP_TST(ab, ac)	(((ab) & (1 << (ac))) != 0)
    533 #define AC_BITMAP_SET(ab, ac)	(((ab) |= (1 << (ac))))
    534 #define AC_BITMAP_RESET(ab, ac) (((ab) &= ~(1 << (ac))))
    535 
    536 
    537 BWL_PRE_PACKED_STRUCT struct wme_ie {
    538 	uint8 oui[3];
    539 	uint8 type;
    540 	uint8 subtype;
    541 	uint8 version;
    542 	uint8 qosinfo;
    543 } BWL_POST_PACKED_STRUCT;
    544 typedef struct wme_ie wme_ie_t;
    545 #define WME_IE_LEN 7
    546 
    547 BWL_PRE_PACKED_STRUCT struct edcf_acparam {
    548 	uint8	ACI;
    549 	uint8	ECW;
    550 	uint16  TXOP;
    551 } BWL_POST_PACKED_STRUCT;
    552 typedef struct edcf_acparam edcf_acparam_t;
    553 
    554 
    555 BWL_PRE_PACKED_STRUCT struct wme_param_ie {
    556 	uint8 oui[3];
    557 	uint8 type;
    558 	uint8 subtype;
    559 	uint8 version;
    560 	uint8 qosinfo;
    561 	uint8 rsvd;
    562 	edcf_acparam_t acparam[AC_COUNT];
    563 } BWL_POST_PACKED_STRUCT;
    564 typedef struct wme_param_ie wme_param_ie_t;
    565 #define WME_PARAM_IE_LEN            24
    566 
    567 
    568 #define WME_QI_AP_APSD_MASK         0x80
    569 #define WME_QI_AP_APSD_SHIFT        7
    570 #define WME_QI_AP_COUNT_MASK        0x0f
    571 #define WME_QI_AP_COUNT_SHIFT       0
    572 
    573 
    574 #define WME_QI_STA_MAXSPLEN_MASK    0x60
    575 #define WME_QI_STA_MAXSPLEN_SHIFT   5
    576 #define WME_QI_STA_APSD_ALL_MASK    0xf
    577 #define WME_QI_STA_APSD_ALL_SHIFT   0
    578 #define WME_QI_STA_APSD_BE_MASK     0x8
    579 #define WME_QI_STA_APSD_BE_SHIFT    3
    580 #define WME_QI_STA_APSD_BK_MASK     0x4
    581 #define WME_QI_STA_APSD_BK_SHIFT    2
    582 #define WME_QI_STA_APSD_VI_MASK     0x2
    583 #define WME_QI_STA_APSD_VI_SHIFT    1
    584 #define WME_QI_STA_APSD_VO_MASK     0x1
    585 #define WME_QI_STA_APSD_VO_SHIFT    0
    586 
    587 
    588 #define EDCF_AIFSN_MIN               1
    589 #define EDCF_AIFSN_MAX               15
    590 #define EDCF_AIFSN_MASK              0x0f
    591 #define EDCF_ACM_MASK                0x10
    592 #define EDCF_ACI_MASK                0x60
    593 #define EDCF_ACI_SHIFT               5
    594 #define EDCF_AIFSN_SHIFT             12
    595 
    596 
    597 #define EDCF_ECW_MIN                 0
    598 #define EDCF_ECW_MAX                 15
    599 #define EDCF_ECW2CW(exp)             ((1 << (exp)) - 1)
    600 #define EDCF_ECWMIN_MASK             0x0f
    601 #define EDCF_ECWMAX_MASK             0xf0
    602 #define EDCF_ECWMAX_SHIFT            4
    603 
    604 
    605 #define EDCF_TXOP_MIN                0
    606 #define EDCF_TXOP_MAX                65535
    607 #define EDCF_TXOP2USEC(txop)         ((txop) << 5)
    608 
    609 
    610 #define NON_EDCF_AC_BE_ACI_STA          0x02
    611 
    612 
    613 #define EDCF_AC_BE_ACI_STA           0x03
    614 #define EDCF_AC_BE_ECW_STA           0xA4
    615 #define EDCF_AC_BE_TXOP_STA          0x0000
    616 #define EDCF_AC_BK_ACI_STA           0x27
    617 #define EDCF_AC_BK_ECW_STA           0xA4
    618 #define EDCF_AC_BK_TXOP_STA          0x0000
    619 #define EDCF_AC_VI_ACI_STA           0x42
    620 #define EDCF_AC_VI_ECW_STA           0x43
    621 #define EDCF_AC_VI_TXOP_STA          0x005e
    622 #define EDCF_AC_VO_ACI_STA           0x62
    623 #define EDCF_AC_VO_ECW_STA           0x32
    624 #define EDCF_AC_VO_TXOP_STA          0x002f
    625 
    626 
    627 #define EDCF_AC_BE_ACI_AP            0x03
    628 #define EDCF_AC_BE_ECW_AP            0x64
    629 #define EDCF_AC_BE_TXOP_AP           0x0000
    630 #define EDCF_AC_BK_ACI_AP            0x27
    631 #define EDCF_AC_BK_ECW_AP            0xA4
    632 #define EDCF_AC_BK_TXOP_AP           0x0000
    633 #define EDCF_AC_VI_ACI_AP            0x41
    634 #define EDCF_AC_VI_ECW_AP            0x43
    635 #define EDCF_AC_VI_TXOP_AP           0x005e
    636 #define EDCF_AC_VO_ACI_AP            0x61
    637 #define EDCF_AC_VO_ECW_AP            0x32
    638 #define EDCF_AC_VO_TXOP_AP           0x002f
    639 
    640 
    641 BWL_PRE_PACKED_STRUCT struct edca_param_ie {
    642 	uint8 qosinfo;
    643 	uint8 rsvd;
    644 	edcf_acparam_t acparam[AC_COUNT];
    645 } BWL_POST_PACKED_STRUCT;
    646 typedef struct edca_param_ie edca_param_ie_t;
    647 #define EDCA_PARAM_IE_LEN            18
    648 
    649 
    650 BWL_PRE_PACKED_STRUCT struct qos_cap_ie {
    651 	uint8 qosinfo;
    652 } BWL_POST_PACKED_STRUCT;
    653 typedef struct qos_cap_ie qos_cap_ie_t;
    654 
    655 BWL_PRE_PACKED_STRUCT struct dot11_qbss_load_ie {
    656 	uint8 id;
    657 	uint8 length;
    658 	uint16 station_count;
    659 	uint8 channel_utilization;
    660 	uint16 aac;
    661 } BWL_POST_PACKED_STRUCT;
    662 typedef struct dot11_qbss_load_ie dot11_qbss_load_ie_t;
    663 
    664 
    665 #define FIXED_MSDU_SIZE 0x8000
    666 #define MSDU_SIZE_MASK	0x7fff
    667 
    668 
    669 
    670 #define	INTEGER_SHIFT	13
    671 #define FRACTION_MASK	0x1FFF
    672 
    673 
    674 BWL_PRE_PACKED_STRUCT struct dot11_management_notification {
    675 	uint8 category;
    676 	uint8 action;
    677 	uint8 token;
    678 	uint8 status;
    679 	uint8 data[1];
    680 } BWL_POST_PACKED_STRUCT;
    681 #define DOT11_MGMT_NOTIFICATION_LEN 4
    682 
    683 
    684 #define WME_ADDTS_REQUEST	0
    685 #define WME_ADDTS_RESPONSE	1
    686 #define WME_DELTS_REQUEST	2
    687 
    688 
    689 #define WME_ADMISSION_ACCEPTED		0
    690 #define WME_INVALID_PARAMETERS		1
    691 #define WME_ADMISSION_REFUSED		3
    692 
    693 
    694 #define BCN_PRB_SSID(body) ((char*)(body) + DOT11_BCN_PRB_LEN)
    695 
    696 
    697 #define DOT11_OPEN_SYSTEM	0
    698 #define DOT11_SHARED_KEY	1
    699 
    700 #define DOT11_OPEN_SHARED	2
    701 #define DOT11_CHALLENGE_LEN	128
    702 
    703 
    704 #define FC_PVER_MASK		0x3
    705 #define FC_PVER_SHIFT		0
    706 #define FC_TYPE_MASK		0xC
    707 #define FC_TYPE_SHIFT		2
    708 #define FC_SUBTYPE_MASK		0xF0
    709 #define FC_SUBTYPE_SHIFT	4
    710 #define FC_TODS			0x100
    711 #define FC_TODS_SHIFT		8
    712 #define FC_FROMDS		0x200
    713 #define FC_FROMDS_SHIFT		9
    714 #define FC_MOREFRAG		0x400
    715 #define FC_MOREFRAG_SHIFT	10
    716 #define FC_RETRY		0x800
    717 #define FC_RETRY_SHIFT		11
    718 #define FC_PM			0x1000
    719 #define FC_PM_SHIFT		12
    720 #define FC_MOREDATA		0x2000
    721 #define FC_MOREDATA_SHIFT	13
    722 #define FC_WEP			0x4000
    723 #define FC_WEP_SHIFT		14
    724 #define FC_ORDER		0x8000
    725 #define FC_ORDER_SHIFT		15
    726 
    727 
    728 #define SEQNUM_SHIFT		4
    729 #define SEQNUM_MAX		0x1000
    730 #define FRAGNUM_MASK		0xF
    731 
    732 
    733 
    734 
    735 #define FC_TYPE_MNG		0
    736 #define FC_TYPE_CTL		1
    737 #define FC_TYPE_DATA		2
    738 
    739 
    740 #define FC_SUBTYPE_ASSOC_REQ		0
    741 #define FC_SUBTYPE_ASSOC_RESP		1
    742 #define FC_SUBTYPE_REASSOC_REQ		2
    743 #define FC_SUBTYPE_REASSOC_RESP		3
    744 #define FC_SUBTYPE_PROBE_REQ		4
    745 #define FC_SUBTYPE_PROBE_RESP		5
    746 #define FC_SUBTYPE_BEACON		8
    747 #define FC_SUBTYPE_ATIM			9
    748 #define FC_SUBTYPE_DISASSOC		10
    749 #define FC_SUBTYPE_AUTH			11
    750 #define FC_SUBTYPE_DEAUTH		12
    751 #define FC_SUBTYPE_ACTION		13
    752 #define FC_SUBTYPE_ACTION_NOACK		14
    753 
    754 
    755 #define FC_SUBTYPE_CTL_WRAPPER		7
    756 #define FC_SUBTYPE_BLOCKACK_REQ		8
    757 #define FC_SUBTYPE_BLOCKACK		9
    758 #define FC_SUBTYPE_PS_POLL		10
    759 #define FC_SUBTYPE_RTS			11
    760 #define FC_SUBTYPE_CTS			12
    761 #define FC_SUBTYPE_ACK			13
    762 #define FC_SUBTYPE_CF_END		14
    763 #define FC_SUBTYPE_CF_END_ACK		15
    764 
    765 
    766 #define FC_SUBTYPE_DATA			0
    767 #define FC_SUBTYPE_DATA_CF_ACK		1
    768 #define FC_SUBTYPE_DATA_CF_POLL		2
    769 #define FC_SUBTYPE_DATA_CF_ACK_POLL	3
    770 #define FC_SUBTYPE_NULL			4
    771 #define FC_SUBTYPE_CF_ACK		5
    772 #define FC_SUBTYPE_CF_POLL		6
    773 #define FC_SUBTYPE_CF_ACK_POLL		7
    774 #define FC_SUBTYPE_QOS_DATA		8
    775 #define FC_SUBTYPE_QOS_DATA_CF_ACK	9
    776 #define FC_SUBTYPE_QOS_DATA_CF_POLL	10
    777 #define FC_SUBTYPE_QOS_DATA_CF_ACK_POLL	11
    778 #define FC_SUBTYPE_QOS_NULL		12
    779 #define FC_SUBTYPE_QOS_CF_POLL		14
    780 #define FC_SUBTYPE_QOS_CF_ACK_POLL	15
    781 
    782 
    783 #define FC_SUBTYPE_ANY_QOS(s)		(((s) & 8) != 0)
    784 #define FC_SUBTYPE_ANY_NULL(s)		(((s) & 4) != 0)
    785 #define FC_SUBTYPE_ANY_CF_POLL(s)	(((s) & 2) != 0)
    786 #define FC_SUBTYPE_ANY_CF_ACK(s)	(((s) & 1) != 0)
    787 
    788 
    789 #define FC_KIND_MASK		(FC_TYPE_MASK | FC_SUBTYPE_MASK)
    790 
    791 #define FC_KIND(t, s)	(((t) << FC_TYPE_SHIFT) | ((s) << FC_SUBTYPE_SHIFT))
    792 
    793 #define FC_SUBTYPE(fc)	(((fc) & FC_SUBTYPE_MASK) >> FC_SUBTYPE_SHIFT)
    794 #define FC_TYPE(fc)	(((fc) & FC_TYPE_MASK) >> FC_TYPE_SHIFT)
    795 
    796 #define FC_ASSOC_REQ	FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_ASSOC_REQ)
    797 #define FC_ASSOC_RESP	FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_ASSOC_RESP)
    798 #define FC_REASSOC_REQ	FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_REASSOC_REQ)
    799 #define FC_REASSOC_RESP	FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_REASSOC_RESP)
    800 #define FC_PROBE_REQ	FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_PROBE_REQ)
    801 #define FC_PROBE_RESP	FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_PROBE_RESP)
    802 #define FC_BEACON	FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_BEACON)
    803 #define FC_DISASSOC	FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_DISASSOC)
    804 #define FC_AUTH		FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_AUTH)
    805 #define FC_DEAUTH	FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_DEAUTH)
    806 #define FC_ACTION	FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_ACTION)
    807 #define FC_ACTION_NOACK	FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_ACTION_NOACK)
    808 
    809 #define FC_CTL_WRAPPER	FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_CTL_WRAPPER)
    810 #define FC_BLOCKACK_REQ	FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_BLOCKACK_REQ)
    811 #define FC_BLOCKACK	FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_BLOCKACK)
    812 #define FC_PS_POLL	FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_PS_POLL)
    813 #define FC_RTS		FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_RTS)
    814 #define FC_CTS		FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_CTS)
    815 #define FC_ACK		FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_ACK)
    816 #define FC_CF_END	FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_CF_END)
    817 #define FC_CF_END_ACK	FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_CF_END_ACK)
    818 
    819 #define FC_DATA		FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_DATA)
    820 #define FC_NULL_DATA	FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_NULL)
    821 #define FC_DATA_CF_ACK	FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_DATA_CF_ACK)
    822 #define FC_QOS_DATA	FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_QOS_DATA)
    823 #define FC_QOS_NULL	FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_QOS_NULL)
    824 
    825 
    826 
    827 
    828 #define QOS_PRIO_SHIFT		0
    829 #define QOS_PRIO_MASK		0x0007
    830 #define QOS_PRIO(qos)		(((qos) & QOS_PRIO_MASK) >> QOS_PRIO_SHIFT)
    831 
    832 
    833 #define QOS_TID_SHIFT		0
    834 #define QOS_TID_MASK		0x000f
    835 #define QOS_TID(qos)		(((qos) & QOS_TID_MASK) >> QOS_TID_SHIFT)
    836 
    837 
    838 #define QOS_EOSP_SHIFT		4
    839 #define QOS_EOSP_MASK		0x0010
    840 #define QOS_EOSP(qos)		(((qos) & QOS_EOSP_MASK) >> QOS_EOSP_SHIFT)
    841 
    842 
    843 #define QOS_ACK_NORMAL_ACK	0
    844 #define QOS_ACK_NO_ACK		1
    845 #define QOS_ACK_NO_EXP_ACK	2
    846 #define QOS_ACK_BLOCK_ACK	3
    847 #define QOS_ACK_SHIFT		5
    848 #define QOS_ACK_MASK		0x0060
    849 #define QOS_ACK(qos)		(((qos) & QOS_ACK_MASK) >> QOS_ACK_SHIFT)
    850 
    851 
    852 #define QOS_AMSDU_SHIFT		7
    853 #define QOS_AMSDU_MASK		0x0080
    854 
    855 
    856 
    857 
    858 
    859 
    860 #define DOT11_MNG_AUTH_ALGO_LEN		2
    861 #define DOT11_MNG_AUTH_SEQ_LEN		2
    862 #define DOT11_MNG_BEACON_INT_LEN	2
    863 #define DOT11_MNG_CAP_LEN		2
    864 #define DOT11_MNG_AP_ADDR_LEN		6
    865 #define DOT11_MNG_LISTEN_INT_LEN	2
    866 #define DOT11_MNG_REASON_LEN		2
    867 #define DOT11_MNG_AID_LEN		2
    868 #define DOT11_MNG_STATUS_LEN		2
    869 #define DOT11_MNG_TIMESTAMP_LEN		8
    870 
    871 
    872 #define DOT11_AID_MASK			0x3fff
    873 
    874 
    875 #define DOT11_RC_RESERVED		0
    876 #define DOT11_RC_UNSPECIFIED		1
    877 #define DOT11_RC_AUTH_INVAL		2
    878 #define DOT11_RC_DEAUTH_LEAVING		3
    879 #define DOT11_RC_INACTIVITY		4
    880 #define DOT11_RC_BUSY			5
    881 #define DOT11_RC_INVAL_CLASS_2		6
    882 #define DOT11_RC_INVAL_CLASS_3		7
    883 #define DOT11_RC_DISASSOC_LEAVING	8
    884 #define DOT11_RC_NOT_AUTH		9
    885 #define DOT11_RC_BAD_PC			10
    886 #define DOT11_RC_BAD_CHANNELS		11
    887 
    888 
    889 
    890 #define DOT11_RC_UNSPECIFIED_QOS	32
    891 #define DOT11_RC_INSUFFCIENT_BW		33
    892 #define DOT11_RC_EXCESSIVE_FRAMES	34
    893 #define DOT11_RC_TX_OUTSIDE_TXOP	35
    894 #define DOT11_RC_LEAVING_QBSS		36
    895 #define DOT11_RC_BAD_MECHANISM		37
    896 #define DOT11_RC_SETUP_NEEDED		38
    897 #define DOT11_RC_TIMEOUT		39
    898 
    899 #define DOT11_RC_MAX			23
    900 
    901 
    902 #define DOT11_SC_SUCCESS		0
    903 #define DOT11_SC_FAILURE		1
    904 #define DOT11_SC_CAP_MISMATCH		10
    905 #define DOT11_SC_REASSOC_FAIL		11
    906 #define DOT11_SC_ASSOC_FAIL		12
    907 #define DOT11_SC_AUTH_MISMATCH		13
    908 #define DOT11_SC_AUTH_SEQ		14
    909 #define DOT11_SC_AUTH_CHALLENGE_FAIL	15
    910 #define DOT11_SC_AUTH_TIMEOUT		16
    911 #define DOT11_SC_ASSOC_BUSY_FAIL	17
    912 #define DOT11_SC_ASSOC_RATE_MISMATCH	18
    913 #define DOT11_SC_ASSOC_SHORT_REQUIRED	19
    914 #define DOT11_SC_ASSOC_PBCC_REQUIRED	20
    915 #define DOT11_SC_ASSOC_AGILITY_REQUIRED	21
    916 #define DOT11_SC_ASSOC_SPECTRUM_REQUIRED	22
    917 #define DOT11_SC_ASSOC_BAD_POWER_CAP	23
    918 #define DOT11_SC_ASSOC_BAD_SUP_CHANNELS	24
    919 #define DOT11_SC_ASSOC_SHORTSLOT_REQUIRED	25
    920 #define DOT11_SC_ASSOC_ERPBCC_REQUIRED	26
    921 #define DOT11_SC_ASSOC_DSSOFDM_REQUIRED	27
    922 
    923 #define	DOT11_SC_DECLINED		37
    924 #define	DOT11_SC_INVALID_PARAMS		38
    925 
    926 
    927 #define DOT11_MNG_DS_PARAM_LEN			1
    928 #define DOT11_MNG_IBSS_PARAM_LEN		2
    929 
    930 
    931 #define DOT11_MNG_TIM_FIXED_LEN			3
    932 #define DOT11_MNG_TIM_DTIM_COUNT		0
    933 #define DOT11_MNG_TIM_DTIM_PERIOD		1
    934 #define DOT11_MNG_TIM_BITMAP_CTL		2
    935 #define DOT11_MNG_TIM_PVB			3
    936 
    937 
    938 #define TLV_TAG_OFF		0
    939 #define TLV_LEN_OFF		1
    940 #define TLV_HDR_LEN		2
    941 #define TLV_BODY_OFF		2
    942 
    943 
    944 #define DOT11_MNG_SSID_ID			0
    945 #define DOT11_MNG_RATES_ID			1
    946 #define DOT11_MNG_FH_PARMS_ID			2
    947 #define DOT11_MNG_DS_PARMS_ID			3
    948 #define DOT11_MNG_CF_PARMS_ID			4
    949 #define DOT11_MNG_TIM_ID			5
    950 #define DOT11_MNG_IBSS_PARMS_ID			6
    951 #define DOT11_MNG_COUNTRY_ID			7
    952 #define DOT11_MNG_HOPPING_PARMS_ID		8
    953 #define DOT11_MNG_HOPPING_TABLE_ID		9
    954 #define DOT11_MNG_REQUEST_ID			10
    955 #define DOT11_MNG_QBSS_LOAD_ID 			11
    956 #define DOT11_MNG_EDCA_PARAM_ID			12
    957 #define DOT11_MNG_CHALLENGE_ID			16
    958 #define DOT11_MNG_PWR_CONSTRAINT_ID		32
    959 #define DOT11_MNG_PWR_CAP_ID			33
    960 #define DOT11_MNG_TPC_REQUEST_ID 		34
    961 #define DOT11_MNG_TPC_REPORT_ID			35
    962 #define DOT11_MNG_SUPP_CHANNELS_ID		36
    963 #define DOT11_MNG_CHANNEL_SWITCH_ID		37
    964 #define DOT11_MNG_MEASURE_REQUEST_ID		38
    965 #define DOT11_MNG_MEASURE_REPORT_ID		39
    966 #define DOT11_MNG_QUIET_ID			40
    967 #define DOT11_MNG_IBSS_DFS_ID			41
    968 #define DOT11_MNG_ERP_ID			42
    969 #define DOT11_MNG_TS_DELAY_ID			43
    970 #define	DOT11_MNG_HT_CAP			45
    971 #define DOT11_MNG_QOS_CAP_ID			46
    972 #define DOT11_MNG_NONERP_ID			47
    973 #define DOT11_MNG_RSN_ID			48
    974 #define DOT11_MNG_EXT_RATES_ID			50
    975 #define	DOT11_MNG_REGCLASS_ID			59
    976 #define DOT11_MNG_EXT_CSA_ID			60
    977 #define	DOT11_MNG_HT_ADD			61
    978 #define	DOT11_MNG_EXT_CHANNEL_OFFSET		62
    979 #define	DOT11_MNG_HT_BSS_COEXINFO_ID		72
    980 #define	DOT11_MNG_HT_BSS_CHANNEL_REPORT_ID	73
    981 #define	DOT11_MNG_HT_OBSS_ID			74
    982 #define	DOT11_MNG_EXT_CAP			127
    983 #define DOT11_MNG_WPA_ID			221
    984 #define DOT11_MNG_PROPR_ID			221
    985 
    986 
    987 #define DOT11_RATE_BASIC			0x80
    988 #define DOT11_RATE_MASK				0x7F
    989 
    990 
    991 #define DOT11_MNG_ERP_LEN			1
    992 #define DOT11_MNG_NONERP_PRESENT		0x01
    993 #define DOT11_MNG_USE_PROTECTION		0x02
    994 #define DOT11_MNG_BARKER_PREAMBLE		0x04
    995 
    996 #define DOT11_MGN_TS_DELAY_LEN		4
    997 #define TS_DELAY_FIELD_SIZE			4
    998 
    999 
   1000 #define DOT11_CAP_ESS				0x0001
   1001 #define DOT11_CAP_IBSS				0x0002
   1002 #define DOT11_CAP_POLLABLE			0x0004
   1003 #define DOT11_CAP_POLL_RQ			0x0008
   1004 #define DOT11_CAP_PRIVACY			0x0010
   1005 #define DOT11_CAP_SHORT				0x0020
   1006 #define DOT11_CAP_PBCC				0x0040
   1007 #define DOT11_CAP_AGILITY			0x0080
   1008 #define DOT11_CAP_SPECTRUM			0x0100
   1009 #define DOT11_CAP_SHORTSLOT			0x0400
   1010 #define DOT11_CAP_CCK_OFDM			0x2000
   1011 
   1012 
   1013 #define DOT11_OBSS_COEX_MNG_SUPPORT	0x01
   1014 
   1015 
   1016 #define DOT11_ACTION_HDR_LEN		2
   1017 #define DOT11_ACTION_CAT_ERR_MASK	0x80
   1018 #define DOT11_ACTION_CAT_MASK		0x7F
   1019 #define DOT11_ACTION_CAT_SPECT_MNG	0
   1020 #define DOT11_ACTION_CAT_BLOCKACK	3
   1021 #define DOT11_ACTION_CAT_PUBLIC		4
   1022 #define DOT11_ACTION_CAT_HT		7
   1023 #define DOT11_ACTION_CAT_VS			127
   1024 #define DOT11_ACTION_NOTIFICATION	0x11
   1025 
   1026 #define DOT11_ACTION_ID_M_REQ		0
   1027 #define DOT11_ACTION_ID_M_REP		1
   1028 #define DOT11_ACTION_ID_TPC_REQ		2
   1029 #define DOT11_ACTION_ID_TPC_REP		3
   1030 #define DOT11_ACTION_ID_CHANNEL_SWITCH	4
   1031 #define DOT11_ACTION_ID_EXT_CSA		5
   1032 
   1033 
   1034 #define DOT11_ACTION_ID_HT_CH_WIDTH	0
   1035 #define DOT11_ACTION_ID_HT_MIMO_PS	1
   1036 
   1037 
   1038 #define DOT11_PUB_ACTION_BSS_COEX_MNG	0
   1039 #define DOT11_PUB_ACTION_CHANNEL_SWITCH	4
   1040 
   1041 
   1042 #define DOT11_BA_ACTION_ADDBA_REQ	0
   1043 #define DOT11_BA_ACTION_ADDBA_RESP	1
   1044 #define DOT11_BA_ACTION_DELBA		2
   1045 
   1046 
   1047 #define DOT11_ADDBA_PARAM_AMSDU_SUP	0x0001
   1048 #define DOT11_ADDBA_PARAM_POLICY_MASK	0x0002
   1049 #define DOT11_ADDBA_PARAM_POLICY_SHIFT	1
   1050 #define DOT11_ADDBA_PARAM_TID_MASK	0x003c
   1051 #define DOT11_ADDBA_PARAM_TID_SHIFT	2
   1052 #define DOT11_ADDBA_PARAM_BSIZE_MASK	0xffc0
   1053 #define DOT11_ADDBA_PARAM_BSIZE_SHIFT	6
   1054 
   1055 #define DOT11_ADDBA_POLICY_DELAYED	0
   1056 #define DOT11_ADDBA_POLICY_IMMEDIATE	1
   1057 
   1058 BWL_PRE_PACKED_STRUCT struct dot11_addba_req {
   1059 	uint8 category;
   1060 	uint8 action;
   1061 	uint8 token;
   1062 	uint16 addba_param_set;
   1063 	uint16 timeout;
   1064 	uint16 start_seqnum;
   1065 } BWL_POST_PACKED_STRUCT;
   1066 typedef struct dot11_addba_req dot11_addba_req_t;
   1067 #define DOT11_ADDBA_REQ_LEN		9
   1068 
   1069 BWL_PRE_PACKED_STRUCT struct dot11_addba_resp {
   1070 	uint8 category;
   1071 	uint8 action;
   1072 	uint8 token;
   1073 	uint16 status;
   1074 	uint16 addba_param_set;
   1075 	uint16 timeout;
   1076 } BWL_POST_PACKED_STRUCT;
   1077 typedef struct dot11_addba_resp dot11_addba_resp_t;
   1078 #define DOT11_ADDBA_RESP_LEN		9
   1079 
   1080 
   1081 #define DOT11_DELBA_PARAM_INIT_MASK	0x0800
   1082 #define DOT11_DELBA_PARAM_INIT_SHIFT	11
   1083 #define DOT11_DELBA_PARAM_TID_MASK	0xf000
   1084 #define DOT11_DELBA_PARAM_TID_SHIFT	12
   1085 
   1086 BWL_PRE_PACKED_STRUCT struct dot11_delba {
   1087 	uint8 category;
   1088 	uint8 action;
   1089 	uint16 delba_param_set;
   1090 	uint16 reason;
   1091 } BWL_POST_PACKED_STRUCT;
   1092 typedef struct dot11_delba dot11_delba_t;
   1093 #define DOT11_DELBA_LEN			6
   1094 
   1095 
   1096 #define DOT11_BSSTYPE_INFRASTRUCTURE		0
   1097 #define DOT11_BSSTYPE_INDEPENDENT		1
   1098 #define DOT11_BSSTYPE_ANY			2
   1099 #define DOT11_SCANTYPE_ACTIVE			0
   1100 #define DOT11_SCANTYPE_PASSIVE			1
   1101 
   1102 
   1103 #define PREN_PREAMBLE		24
   1104 #define PREN_MM_EXT		8
   1105 #define PREN_PREAMBLE_EXT	4
   1106 
   1107 
   1108 #define NPHY_RIFS_TIME		2
   1109 
   1110 
   1111 #define APHY_SLOT_TIME		9
   1112 #define APHY_SIFS_TIME		16
   1113 #define APHY_DIFS_TIME		(APHY_SIFS_TIME + (2 * APHY_SLOT_TIME))
   1114 #define APHY_PREAMBLE_TIME	16
   1115 #define APHY_SIGNAL_TIME	4
   1116 #define APHY_SYMBOL_TIME	4
   1117 #define APHY_SERVICE_NBITS	16
   1118 #define APHY_TAIL_NBITS		6
   1119 #define	APHY_CWMIN		15
   1120 
   1121 
   1122 #define BPHY_SLOT_TIME		20
   1123 #define BPHY_SIFS_TIME		10
   1124 #define BPHY_DIFS_TIME		50
   1125 #define BPHY_PLCP_TIME		192
   1126 #define BPHY_PLCP_SHORT_TIME	96
   1127 #define	BPHY_CWMIN		31
   1128 
   1129 
   1130 #define DOT11_OFDM_SIGNAL_EXTENSION	6
   1131 
   1132 #define PHY_CWMAX		1023
   1133 
   1134 #define	DOT11_MAXNUMFRAGS	16
   1135 
   1136 
   1137 typedef struct d11cnt {
   1138 	uint32		txfrag;
   1139 	uint32		txmulti;
   1140 	uint32		txfail;
   1141 	uint32		txretry;
   1142 	uint32		txretrie;
   1143 	uint32		rxdup;
   1144 	uint32		txrts;
   1145 	uint32		txnocts;
   1146 	uint32		txnoack;
   1147 	uint32		rxfrag;
   1148 	uint32		rxmulti;
   1149 	uint32		rxcrc;
   1150 	uint32		txfrmsnt;
   1151 	uint32		rxundec;
   1152 } d11cnt_t;
   1153 
   1154 
   1155 #define BRCM_PROP_OUI		"\x00\x90\x4C"
   1156 
   1157 
   1158 
   1159 
   1160 BWL_PRE_PACKED_STRUCT struct brcm_prop_ie_s {
   1161 	uint8 id;
   1162 	uint8 len;
   1163 	uint8 oui[3];
   1164 	uint8 type;
   1165 	uint16 cap;
   1166 } BWL_POST_PACKED_STRUCT;
   1167 typedef struct brcm_prop_ie_s brcm_prop_ie_t;
   1168 
   1169 #define BRCM_PROP_IE_LEN	6
   1170 
   1171 #define DPT_IE_TYPE		2
   1172 
   1173 
   1174 #define BRCM_OUI		"\x00\x10\x18"
   1175 
   1176 
   1177 BWL_PRE_PACKED_STRUCT struct brcm_ie {
   1178 	uint8	id;
   1179 	uint8	len;
   1180 	uint8	oui[3];
   1181 	uint8	ver;
   1182 	uint8	assoc;
   1183 	uint8	flags;
   1184 	uint8	flags1;
   1185 	uint16	amsdu_mtu_pref;
   1186 } BWL_POST_PACKED_STRUCT;
   1187 typedef	struct brcm_ie brcm_ie_t;
   1188 #define BRCM_IE_LEN		11
   1189 #define BRCM_IE_VER		2
   1190 #define BRCM_IE_LEGACY_AES_VER	1
   1191 
   1192 
   1193 #ifdef WLAFTERBURNER
   1194 #define	BRF_ABCAP		0x1
   1195 #define	BRF_ABRQRD		0x2
   1196 #define BRF_ABCOUNTER_MASK	0xf0
   1197 #define BRF_ABCOUNTER_SHIFT	4
   1198 #endif
   1199 #define	BRF_LZWDS		0x4
   1200 #define	BRF_BLOCKACK		0x8
   1201 
   1202 
   1203 #define	BRF1_AMSDU		0x1
   1204 #define BRF1_WMEPS		0x4
   1205 #define BRF1_PSOFIX		0x8
   1206 
   1207 #ifdef WLAFTERBURNER
   1208 #define AB_WDS_TIMEOUT_MAX	15
   1209 #define AB_WDS_TIMEOUT_MIN	1
   1210 #endif
   1211 
   1212 #define AB_GUARDCOUNT	10
   1213 
   1214 #define MCSSET_LEN	16
   1215 #define MAX_MCS_NUM	(128)
   1216 
   1217 BWL_PRE_PACKED_STRUCT struct ht_cap_ie {
   1218 	uint16	cap;
   1219 	uint8	params;
   1220 	uint8	supp_mcs[MCSSET_LEN];
   1221 	uint16	ext_htcap;
   1222 	uint32	txbf_cap;
   1223 	uint8	as_cap;
   1224 } BWL_POST_PACKED_STRUCT;
   1225 typedef struct ht_cap_ie ht_cap_ie_t;
   1226 
   1227 
   1228 
   1229 BWL_PRE_PACKED_STRUCT struct ht_prop_cap_ie {
   1230 	uint8	id;
   1231 	uint8	len;
   1232 	uint8	oui[3];
   1233 	uint8	type;
   1234 	ht_cap_ie_t cap_ie;
   1235 } BWL_POST_PACKED_STRUCT;
   1236 typedef struct ht_prop_cap_ie ht_prop_cap_ie_t;
   1237 #define HT_PROP_IE_OVERHEAD	4
   1238 #define HT_CAP_IE_LEN	26
   1239 #define HT_CAP_IE_TYPE	51
   1240 
   1241 #define HT_CAP_LDPC_CODING	0x0001
   1242 #define HT_CAP_40MHZ		0x0002
   1243 #define HT_CAP_MIMO_PS_MASK	0x000C
   1244 #define HT_CAP_MIMO_PS_SHIFT	0x0002
   1245 #define HT_CAP_MIMO_PS_OFF	0x0003
   1246 #define HT_CAP_MIMO_PS_RTS	0x0001
   1247 #define HT_CAP_MIMO_PS_ON	0x0000
   1248 #define HT_CAP_GF		0x0010
   1249 #define HT_CAP_SHORT_GI_20	0x0020
   1250 #define HT_CAP_SHORT_GI_40	0x0040
   1251 #define HT_CAP_TX_STBC		0x0080
   1252 #define HT_CAP_RX_STBC_MASK	0x0300
   1253 #define HT_CAP_RX_STBC_SHIFT	8
   1254 #define HT_CAP_DELAYED_BA	0x0400
   1255 #define HT_CAP_MAX_AMSDU	0x0800
   1256 #define HT_CAP_DSSS_CCK	0x1000
   1257 #define HT_CAP_PSMP		0x2000
   1258 #define HT_CAP_40MHZ_INTOLERANT 0x4000
   1259 #define HT_CAP_LSIG_TXOP	0x8000
   1260 
   1261 #define HT_CAP_RX_STBC_NO		0x0
   1262 #define HT_CAP_RX_STBC_ONE_STREAM	0x1
   1263 #define HT_CAP_RX_STBC_TWO_STREAM	0x2
   1264 #define HT_CAP_RX_STBC_THREE_STREAM	0x3
   1265 
   1266 #define HT_MAX_AMSDU		7935
   1267 #define HT_MIN_AMSDU		3835
   1268 
   1269 #define HT_PARAMS_RX_FACTOR_MASK	0x03
   1270 #define HT_PARAMS_DENSITY_MASK		0x1C
   1271 #define HT_PARAMS_DENSITY_SHIFT	2
   1272 
   1273 
   1274 #define AMPDU_MAX_MPDU_DENSITY	7
   1275 #define AMPDU_RX_FACTOR_64K	3
   1276 #define AMPDU_RX_FACTOR_BASE	8*1024
   1277 #define AMPDU_DELIMITER_LEN	4
   1278 
   1279 #define HT_CAP_EXT_PCO			0x0001
   1280 #define HT_CAP_EXT_PCO_TTIME_MASK	0x0006
   1281 #define HT_CAP_EXT_PCO_TTIME_SHIFT	1
   1282 #define HT_CAP_EXT_MCS_FEEDBACK_MASK	0x0300
   1283 #define HT_CAP_EXT_MCS_FEEDBACK_SHIFT	8
   1284 #define HT_CAP_EXT_HTC			0x0400
   1285 #define HT_CAP_EXT_RD_RESP		0x0800
   1286 
   1287 BWL_PRE_PACKED_STRUCT struct ht_add_ie {
   1288 	uint8	ctl_ch;
   1289 	uint8	byte1;
   1290 	uint16	opmode;
   1291 	uint16	misc_bits;
   1292 	uint8	basic_mcs[MCSSET_LEN];
   1293 } BWL_POST_PACKED_STRUCT;
   1294 typedef struct ht_add_ie ht_add_ie_t;
   1295 
   1296 
   1297 
   1298 BWL_PRE_PACKED_STRUCT struct ht_prop_add_ie {
   1299 	uint8	id;
   1300 	uint8	len;
   1301 	uint8	oui[3];
   1302 	uint8	type;
   1303 	ht_add_ie_t add_ie;
   1304 } BWL_POST_PACKED_STRUCT;
   1305 typedef struct ht_prop_add_ie ht_prop_add_ie_t;
   1306 
   1307 #define HT_ADD_IE_LEN	22
   1308 #define HT_ADD_IE_TYPE	52
   1309 
   1310 
   1311 #define HT_BW_ANY		0x04
   1312 #define HT_RIFS_PERMITTED     	0x08
   1313 
   1314 
   1315 #define HT_OPMODE_MASK	        0x0003
   1316 #define HT_OPMODE_SHIFT	0
   1317 #define HT_OPMODE_PURE		0x0000
   1318 #define HT_OPMODE_OPTIONAL	0x0001
   1319 #define HT_OPMODE_HT20IN40	0x0002
   1320 #define HT_OPMODE_MIXED	0x0003
   1321 #define HT_OPMODE_NONGF	0x0004
   1322 #define DOT11N_TXBURST		0x0008
   1323 #define DOT11N_OBSS_NONHT	0x0010
   1324 
   1325 
   1326 #define HT_BASIC_STBC_MCS	0x007f
   1327 #define HT_DUAL_STBC_PROT	0x0080
   1328 #define HT_SECOND_BCN		0x0100
   1329 #define HT_LSIG_TXOP		0x0200
   1330 #define HT_PCO_ACTIVE		0x0400
   1331 #define HT_PCO_PHASE		0x0800
   1332 #define HT_DUALCTS_PROTECTION	0x0080
   1333 
   1334 
   1335 #define DOT11N_2G_TXBURST_LIMIT	6160
   1336 #define DOT11N_5G_TXBURST_LIMIT	3080
   1337 
   1338 
   1339 #define GET_HT_OPMODE(add_ie)		((ltoh16_ua(&add_ie->opmode) & HT_OPMODE_MASK) \
   1340 					>> HT_OPMODE_SHIFT)
   1341 #define HT_MIXEDMODE_PRESENT(add_ie)	((ltoh16_ua(&add_ie->opmode) & HT_OPMODE_MASK) \
   1342 					== HT_OPMODE_MIXED)
   1343 #define HT_HT20_PRESENT(add_ie)	((ltoh16_ua(&add_ie->opmode) & HT_OPMODE_MASK) \
   1344 					== HT_OPMODE_HT20IN40)
   1345 #define HT_OPTIONAL_PRESENT(add_ie)	((ltoh16_ua(&add_ie->opmode) & HT_OPMODE_MASK) \
   1346 					== HT_OPMODE_OPTIONAL)
   1347 #define HT_USE_PROTECTION(add_ie)	(HT_HT20_PRESENT((add_ie)) || \
   1348 					HT_MIXEDMODE_PRESENT((add_ie)))
   1349 #define HT_NONGF_PRESENT(add_ie)	((ltoh16_ua(&add_ie->opmode) & HT_OPMODE_NONGF) \
   1350 					== HT_OPMODE_NONGF)
   1351 #define DOT11N_TXBURST_PRESENT(add_ie)	((ltoh16_ua(&add_ie->opmode) & DOT11N_TXBURST) \
   1352 					== DOT11N_TXBURST)
   1353 #define DOT11N_OBSS_NONHT_PRESENT(add_ie)	((ltoh16_ua(&add_ie->opmode) & DOT11N_OBSS_NONHT) \
   1354 					== DOT11N_OBSS_NONHT)
   1355 
   1356 BWL_PRE_PACKED_STRUCT struct obss_params {
   1357 	uint16	passive_dwell;
   1358 	uint16	active_dwell;
   1359 	uint16	bss_widthscan_interval;
   1360 	uint16	passive_total;
   1361 	uint16	active_total;
   1362 	uint16	chanwidth_transition_dly;
   1363 	uint16	activity_threshold;
   1364 } BWL_POST_PACKED_STRUCT;
   1365 typedef struct obss_params obss_params_t;
   1366 
   1367 BWL_PRE_PACKED_STRUCT struct dot11_obss_ie {
   1368 	uint8	id;
   1369 	uint8	len;
   1370 	obss_params_t obss_params;
   1371 } BWL_POST_PACKED_STRUCT;
   1372 typedef struct dot11_obss_ie dot11_obss_ie_t;
   1373 #define DOT11_OBSS_SCAN_IE_LEN	sizeof(obss_params_t)
   1374 
   1375 
   1376 BWL_PRE_PACKED_STRUCT struct vndr_ie {
   1377 	uchar id;
   1378 	uchar len;
   1379 	uchar oui [3];
   1380 	uchar data [1];
   1381 } BWL_POST_PACKED_STRUCT;
   1382 typedef struct vndr_ie vndr_ie_t;
   1383 
   1384 #define VNDR_IE_HDR_LEN		2
   1385 #define VNDR_IE_MIN_LEN		3
   1386 #define VNDR_IE_MAX_LEN		256
   1387 
   1388 
   1389 #define WPA_VERSION		1
   1390 #define WPA_OUI			"\x00\x50\xF2"
   1391 
   1392 #define WPA2_VERSION		1
   1393 #define WPA2_VERSION_LEN	2
   1394 #define WPA2_OUI		"\x00\x0F\xAC"
   1395 
   1396 #define WPA_OUI_LEN	3
   1397 
   1398 
   1399 #define RSN_AKM_NONE		0
   1400 #define RSN_AKM_UNSPECIFIED	1
   1401 #define RSN_AKM_PSK		2
   1402 
   1403 
   1404 #define DOT11_MAX_DEFAULT_KEYS	4
   1405 #define DOT11_MAX_KEY_SIZE	32
   1406 #define DOT11_MAX_IV_SIZE	16
   1407 #define DOT11_EXT_IV_FLAG	(1<<5)
   1408 #define DOT11_WPA_KEY_RSC_LEN   8
   1409 
   1410 #define WEP1_KEY_SIZE		5
   1411 #define WEP1_KEY_HEX_SIZE	10
   1412 #define WEP128_KEY_SIZE		13
   1413 #define WEP128_KEY_HEX_SIZE	26
   1414 #define TKIP_MIC_SIZE		8
   1415 #define TKIP_EOM_SIZE		7
   1416 #define TKIP_EOM_FLAG		0x5a
   1417 #define TKIP_KEY_SIZE		32
   1418 #define TKIP_MIC_AUTH_TX	16
   1419 #define TKIP_MIC_AUTH_RX	24
   1420 #define TKIP_MIC_SUP_RX		TKIP_MIC_AUTH_TX
   1421 #define TKIP_MIC_SUP_TX		TKIP_MIC_AUTH_RX
   1422 #define AES_KEY_SIZE		16
   1423 #define AES_MIC_SIZE		8
   1424 
   1425 
   1426 
   1427 #include <packed_section_end.h>
   1428 
   1429 
   1430 #endif
   1431