16dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt/*
238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * Copyright (C) 1999-2013, Broadcom Corporation
338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt *
46dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * Permission to use, copy, modify, and/or distribute this software for any
56dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * purpose with or without fee is hereby granted, provided that the above
66dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * copyright notice and this permission notice appear in all copies.
76dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt *
86dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
96dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
106dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
116dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
126dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
136dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
146dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
156dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt *
166dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt * Fundamental types and constants relating to 802.11
176dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt *
1838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * $Id: 802.11.h 386067 2013-02-19 15:24:20Z $
196dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt */
206dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
216dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#ifndef _802_11_H_
226dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#define _802_11_H_
236dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
246dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#ifndef _TYPEDEFS_H_
256dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#include <typedefs.h>
266dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#endif
276dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
286dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#ifndef _NET_ETHERNET_H_
296dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#include <proto/ethernet.h>
306dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#endif
316dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
326dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#include <proto/wpa.h>
336dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
3438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* This marks the start of a packed structure section. */
356dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#include <packed_section_start.h>
366dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
376dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
3838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TU_TO_US			1024	/* 802.11 Time Unit is 1024 microseconds */
3938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
4038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Generic 802.11 frame constants */
4138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_A3_HDR_LEN		24	/* d11 header length with A3 */
4238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_A4_HDR_LEN		30	/* d11 header length with A4 */
4338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MAC_HDR_LEN		DOT11_A3_HDR_LEN	/* MAC header length */
4438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_FCS_LEN			4	/* d11 FCS length */
4538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ICV_LEN			4	/* d11 ICV length */
4638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ICV_AES_LEN		8	/* d11 ICV/AES length */
4738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_QOS_LEN			2	/* d11 QoS length */
4838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_HTC_LEN			4	/* d11 HT Control field length */
4938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
5038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_KEY_INDEX_SHIFT		6	/* d11 key index shift */
5138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_IV_LEN			4	/* d11 IV length */
5238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_IV_TKIP_LEN		8	/* d11 IV TKIP length */
5338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_IV_AES_OCB_LEN		4	/* d11 IV/AES/OCB length */
5438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_IV_AES_CCM_LEN		8	/* d11 IV/AES/CCM length */
5538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_IV_MAX_LEN		8	/* maximum iv len for any encryption */
5638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
5738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Includes MIC */
5838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MAX_MPDU_BODY_LEN		2304	/* max MPDU body length */
5938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* A4 header + QoS + CCMP + PDU + ICV + FCS = 2352 */
6038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MAX_MPDU_LEN		(DOT11_A4_HDR_LEN + \
616dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt					 DOT11_QOS_LEN + \
626dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt					 DOT11_IV_AES_CCM_LEN + \
636dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt					 DOT11_MAX_MPDU_BODY_LEN + \
646dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt					 DOT11_ICV_LEN + \
6538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt					 DOT11_FCS_LEN)	/* d11 max MPDU length */
666dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
6738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MAX_SSID_LEN		32	/* d11 max ssid length */
686dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
6938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* dot11RTSThreshold */
7038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_DEFAULT_RTS_LEN		2347	/* d11 default RTS length */
7138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MAX_RTS_LEN		2347	/* d11 max RTS length */
726dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
7338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* dot11FragmentationThreshold */
7438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MIN_FRAG_LEN		256	/* d11 min fragmentation length */
7538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MAX_FRAG_LEN		2346	/* Max frag is also limited by aMPDUMaxLength
7638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						* of the attached PHY
7738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						*/
7838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_DEFAULT_FRAG_LEN		2346	/* d11 default fragmentation length */
796dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
8038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* dot11BeaconPeriod */
8138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MIN_BEACON_PERIOD		1	/* d11 min beacon period */
8238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MAX_BEACON_PERIOD		0xFFFF	/* d11 max beacon period */
836dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
8438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* dot11DTIMPeriod */
8538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MIN_DTIM_PERIOD		1	/* d11 min DTIM period */
8638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MAX_DTIM_PERIOD		0xFF	/* d11 max DTIM period */
876dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
8838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 802.2 LLC/SNAP header used by 802.11 per 802.1H */
8938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_LLC_SNAP_HDR_LEN		8	/* d11 LLC/SNAP header length */
9038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_OUI_LEN			3	/* d11 OUI length */
916dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_llc_snap_header {
9238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	dsap;				/* always 0xAA */
9338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	ssap;				/* always 0xAA */
9438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	ctl;				/* always 0x03 */
9538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	oui[DOT11_OUI_LEN];		/* RFC1042: 0x00 0x00 0x00
9638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * Bridge-Tunnel: 0x00 0x00 0xF8
9738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 */
9838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16	type;				/* ethertype */
996dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
1006dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
10138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* RFC1042 header used by 802.11 per 802.1H */
10238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define RFC1042_HDR_LEN	(ETHER_HDR_LEN + DOT11_LLC_SNAP_HDR_LEN)	/* RCF1042 header length */
1036dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
10438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Generic 802.11 MAC header */
10538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/*
10638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * N.B.: This struct reflects the full 4 address 802.11 MAC header.
10738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt *		 The fields are defined such that the shorter 1, 2, and 3
10838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt *		 address headers just use the first k fields.
10938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt */
1106dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_header {
11138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			fc;		/* frame control */
11238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			durid;		/* duration/ID */
11338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	a1;		/* address 1 */
11438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	a2;		/* address 2 */
11538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	a3;		/* address 3 */
11638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			seq;		/* sequence control */
11738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	a4;		/* address 4 */
1186dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
1196dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
12038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Control frames */
1216dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
1226dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_rts_frame {
12338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			fc;		/* frame control */
12438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			durid;		/* duration/ID */
12538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	ra;		/* receiver address */
12638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	ta;		/* transmitter address */
1276dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
12838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	DOT11_RTS_LEN		16		/* d11 RTS frame length */
1296dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
1306dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_cts_frame {
13138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			fc;		/* frame control */
13238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			durid;		/* duration/ID */
13338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	ra;		/* receiver address */
1346dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
13538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	DOT11_CTS_LEN		10		/* d11 CTS frame length */
1366dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
1376dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_ack_frame {
13838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			fc;		/* frame control */
13938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			durid;		/* duration/ID */
14038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	ra;		/* receiver address */
1416dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
14238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	DOT11_ACK_LEN		10		/* d11 ACK frame length */
1436dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
1446dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_ps_poll_frame {
14538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			fc;		/* frame control */
14638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			durid;		/* AID */
14738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	bssid;		/* receiver address, STA in AP */
14838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	ta;		/* transmitter address */
1496dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
15038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	DOT11_PS_POLL_LEN	16		/* d11 PS poll frame length */
1516dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
1526dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_cf_end_frame {
15338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			fc;		/* frame control */
15438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			durid;		/* duration/ID */
15538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	ra;		/* receiver address */
15638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	bssid;		/* transmitter address, STA in AP */
1576dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
15838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	DOT11_CS_END_LEN	16		/* d11 CF-END frame length */
1596dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
16038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* RWL wifi protocol: The Vendor Specific Action frame is defined for vendor-specific signaling
16138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt*  category+OUI+vendor specific content ( this can be variable)
16238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt*/
1636dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_action_wifi_vendor_specific {
16438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	category;
16538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	OUI[3];
16638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	type;
16738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	subtype;
16838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	data[1040];
1696dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
1706dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct dot11_action_wifi_vendor_specific dot11_action_wifi_vendor_specific_t;
1716dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
17238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* generic vender specific action frame with variable length */
1736dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_action_vs_frmhdr {
17438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	category;
17538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	OUI[3];
17638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	type;
17738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	subtype;
17838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	data[1];
1796dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
1806dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct dot11_action_vs_frmhdr dot11_action_vs_frmhdr_t;
18138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ACTION_VS_HDR_LEN	6
1826dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
18338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define BCM_ACTION_OUI_BYTE0	0x00
18438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define BCM_ACTION_OUI_BYTE1	0x90
18538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define BCM_ACTION_OUI_BYTE2	0x4c
1866dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
18738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* BA/BAR Control parameters */
18838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BA_CTL_POLICY_NORMAL	0x0000	/* normal ack */
18938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BA_CTL_POLICY_NOACK	0x0001	/* no ack */
19038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BA_CTL_POLICY_MASK	0x0001	/* ack policy mask */
1916dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
19238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BA_CTL_MTID		0x0002	/* multi tid BA */
19338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BA_CTL_COMPRESSED		0x0004	/* compressed bitmap */
1946dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
19538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BA_CTL_NUMMSDU_MASK	0x0FC0	/* num msdu in bitmap mask */
19638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BA_CTL_NUMMSDU_SHIFT	6	/* num msdu in bitmap shift */
1976dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
19838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BA_CTL_TID_MASK		0xF000	/* tid mask */
19938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BA_CTL_TID_SHIFT		12	/* tid shift */
2006dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
20138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* control frame header (BA/BAR) */
2026dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_ctl_header {
20338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			fc;		/* frame control */
20438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			durid;		/* duration/ID */
20538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	ra;		/* receiver address */
20638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	ta;		/* transmitter address */
2076dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
20838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_CTL_HDR_LEN	16		/* control frame hdr len */
2096dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
21038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* BAR frame payload */
2116dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_bar {
21238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			bar_control;	/* BAR Control */
21338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			seqnum;		/* Starting Sequence control */
2146dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
21538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BAR_LEN		4		/* BAR frame payload length */
2166dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
21738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BA_BITMAP_LEN	128		/* bitmap length */
21838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BA_CMP_BITMAP_LEN	8		/* compressed bitmap length */
21938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* BA frame payload */
2206dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_ba {
22138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			ba_control;	/* BA Control */
22238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			seqnum;		/* Starting Sequence control */
22338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8			bitmap[DOT11_BA_BITMAP_LEN];	/* Block Ack Bitmap */
2246dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
22538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BA_LEN		4		/* BA frame payload len (wo bitmap) */
2266dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
22738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Management frame header */
2286dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_management_header {
22938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			fc;		/* frame control */
23038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			durid;		/* duration/ID */
23138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	da;		/* receiver address */
23238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	sa;		/* transmitter address */
23338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	bssid;		/* BSS ID */
23438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			seq;		/* sequence control */
2356dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
23638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	DOT11_MGMT_HDR_LEN	24		/* d11 management header length */
2376dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
23838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Management frame payloads */
2396dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
2406dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_bcn_prb {
24138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32			timestamp[2];
24238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			beacon_interval;
24338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			capability;
2446dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
24538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	DOT11_BCN_PRB_LEN	12		/* 802.11 beacon/probe frame fixed length */
24638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	DOT11_BCN_PRB_FIXED_LEN	12		/* 802.11 beacon/probe frame fixed length */
2476dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
2486dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_auth {
24938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			alg;		/* algorithm */
25038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			seq;		/* sequence control */
25138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			status;		/* status code */
2526dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
25338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_AUTH_FIXED_LEN	6		/* length of auth frame without challenge IE */
2546dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
2556dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_assoc_req {
25638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			capability;	/* capability information */
25738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			listen;		/* listen interval */
2586dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
25938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ASSOC_REQ_FIXED_LEN	4	/* length of assoc frame without info elts */
2606dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
2616dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_reassoc_req {
26238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			capability;	/* capability information */
26338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			listen;		/* listen interval */
26438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	ap;		/* Current AP address */
2656dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
26638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_REASSOC_REQ_FIXED_LEN	10	/* length of assoc frame without info elts */
2676dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
2686dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_assoc_resp {
26938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			capability;	/* capability information */
27038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			status;		/* status code */
27138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16			aid;		/* association ID */
2726dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
27338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ASSOC_RESP_FIXED_LEN	6	/* length of assoc resp frame without info elts */
2746dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
2756dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_action_measure {
27638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	category;
27738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	action;
27838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	token;
27938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	data[1];
2806dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
28138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ACTION_MEASURE_LEN	3	/* d11 action measurement header length */
2826dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
2836dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_action_ht_ch_width {
28438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	category;
28538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	action;
28638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	ch_width;
2876dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
2886dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
2896dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_action_ht_mimops {
29038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	category;
29138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	action;
29238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	control;
2936dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
2946dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
295ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_action_sa_query {
296ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt	uint8	category;
297ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt	uint8	action;
298ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt	uint16	id;
299ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
300ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt
30138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_action_vht_oper_mode {
30238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	category;
30338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	action;
30438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	mode;
30538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
3066dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
30738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define SM_PWRSAVE_ENABLE	1
30838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define SM_PWRSAVE_MODE		2
3096dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
31038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* ************* 802.11h related definitions. ************* */
3116dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_power_cnst {
3126dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 id;
3136dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 len;
3146dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 power;
3156dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
3166dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct dot11_power_cnst dot11_power_cnst_t;
3176dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
3186dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_power_cap {
3196dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 min;
3206dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 max;
3216dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
3226dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct dot11_power_cap dot11_power_cap_t;
3236dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
3246dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_tpc_rep {
3256dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 id;
3266dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 len;
3276dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 tx_pwr;
3286dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 margin;
3296dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
3306dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct dot11_tpc_rep dot11_tpc_rep_t;
33138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_IE_TPC_REPORT_LEN	2 	/* length of IE data, not including 2 byte header */
3326dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
3336dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_supp_channels {
3346dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 id;
3356dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 len;
3366dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 first_channel;
3376dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 num_channels;
3386dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
3396dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct dot11_supp_channels dot11_supp_channels_t;
3406dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
34138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Extension Channel Offset IE: 802.11n-D1.0 spec. added sideband
34238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * offset for 40MHz operation.  The possible 3 values are:
34338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * 1 = above control channel
34438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * 3 = below control channel
34538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * 0 = no extension channel
34638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt */
3476dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_extch {
34838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	id;		/* IE ID, 62, DOT11_MNG_EXT_CHANNEL_OFFSET */
34938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	len;		/* IE length */
35038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	extch;
3516dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
3526dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct dot11_extch dot11_extch_ie_t;
3536dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
3546dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_brcm_extch {
35538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	id;		/* IE ID, 221, DOT11_MNG_PROPR_ID */
35638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	len;		/* IE length */
35738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	oui[3];		/* Proprietary OUI, BRCM_PROP_OUI */
35838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	type;           /* type inidicates what follows */
35938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	extch;
3606dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
3616dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct dot11_brcm_extch dot11_brcm_extch_ie_t;
3626dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
36338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define BRCM_EXTCH_IE_LEN	5
36438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define BRCM_EXTCH_IE_TYPE	53	/* 802.11n ID not yet assigned */
36538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_EXTCH_IE_LEN	1
36638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_EXT_CH_MASK	0x03	/* extension channel mask */
36738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_EXT_CH_UPPER	0x01	/* ext. ch. on upper sb */
36838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_EXT_CH_LOWER	0x03	/* ext. ch. on lower sb */
36938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_EXT_CH_NONE	0x00	/* no extension ch.  */
3706dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
3716dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_action_frmhdr {
37238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	category;
37338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	action;
37438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	data[1];
3756dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
37638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ACTION_FRMHDR_LEN	2
3776dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
37838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* CSA IE data structure */
3796dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_channel_switch {
38038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 id;	/* id DOT11_MNG_CHANNEL_SWITCH_ID */
38138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;	/* length of IE */
38238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 mode;	/* mode 0 or 1 */
38338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 channel;	/* channel switch to */
38438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 count;	/* number of beacons before switching */
3856dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
3866dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct dot11_channel_switch dot11_chan_switch_ie_t;
3876dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
38838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SWITCH_IE_LEN	3	/* length of IE data, not including 2 byte header */
38938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* CSA mode - 802.11h-2003 $7.3.2.20 */
39038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_CSA_MODE_ADVISORY		0	/* no DOT11_CSA_MODE_NO_TX restriction imposed */
39138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_CSA_MODE_NO_TX		1	/* no transmission upon receiving CSA frame. */
3926dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
3936dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_action_switch_channel {
39438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	category;
39538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	action;
39638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	dot11_chan_switch_ie_t chan_switch_ie;	/* for switch IE */
39738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	dot11_brcm_extch_ie_t extch_ie;		/* extension channel offset */
3986dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
3996dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
4006dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_csa_body {
40138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 mode;	/* mode 0 or 1 */
40238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 reg;	/* regulatory class */
40338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 channel;	/* channel switch to */
40438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 count;	/* number of beacons before switching */
4056dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
4066dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
40738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 11n Extended Channel Switch IE data structure */
4086dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_ext_csa {
40938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 id;	/* id DOT11_MNG_EXT_CHANNEL_SWITCH_ID */
41038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;	/* length of IE */
41138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct dot11_csa_body b;	/* body of the ie */
4126dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
4136dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct dot11_ext_csa dot11_ext_csa_ie_t;
41438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_EXT_CSA_IE_LEN	4	/* length of extended channel switch IE body */
4156dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
4166dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_action_ext_csa {
41738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	category;
41838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	action;
41938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	dot11_ext_csa_ie_t chan_switch_ie;	/* for switch IE */
4206dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
4216dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
4226dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11y_action_ext_csa {
42338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	category;
42438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	action;
42538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct dot11_csa_body b;	/* body of the ie */
42638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
42738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
42838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/*  Wide Bandwidth Channel Switch IE data structure */
42938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_wide_bw_channel_switch {
43038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 id;				/* id DOT11_MNG_WIDE_BW_CHANNEL_SWITCH_ID */
43138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;				/* length of IE */
43238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 channel_width;			/* new channel width */
43338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 center_frequency_segment_0;	/* center frequency segment 0 */
43438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 center_frequency_segment_1;	/* center frequency segment 1 */
43538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
43638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_wide_bw_channel_switch dot11_wide_bw_chan_switch_ie_t;
43738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
43838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WIDE_BW_SWITCH_IE_LEN     3       /* length of IE data, not including 2 byte header */
43938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
44038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Channel Switch Wrapper IE data structure */
44138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_channel_switch_wrapper {
44238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 id;				/* id DOT11_MNG_WIDE_BW_CHANNEL_SWITCH_ID */
44338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;				/* length of IE */
44438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	dot11_wide_bw_chan_switch_ie_t wb_chan_switch_ie;
4456dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
44638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_channel_switch_wrapper dot11_chan_switch_wrapper_ie_t;
44738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
44838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* VHT Transmit Power Envelope IE data structure */
44938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_vht_transmit_power_envelope {
45038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 id;				/* id DOT11_MNG_WIDE_BW_CHANNEL_SWITCH_ID */
45138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;				/* length of IE */
45238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 transmit_power_info;
45338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 local_max_transmit_power_20;
45438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
45538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_vht_transmit_power_envelope dot11_vht_transmit_power_envelope_ie_t;
45638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
4576dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
4586dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_obss_coex {
45938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	id;
46038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	len;
46138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	info;
4626dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
4636dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct dot11_obss_coex dot11_obss_coex_t;
46438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_OBSS_COEXINFO_LEN	1	/* length of OBSS Coexistence INFO IE */
4656dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
46638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	DOT11_OBSS_COEX_INFO_REQ		0x01
46738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	DOT11_OBSS_COEX_40MHZ_INTOLERANT	0x02
46838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	DOT11_OBSS_COEX_20MHZ_WIDTH_REQ	0x04
4696dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
4706dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_obss_chanlist {
47138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	id;
47238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	len;
47338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	regclass;
47438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	chanlist[1];
4756dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
4766dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct dot11_obss_chanlist dot11_obss_chanlist_t;
47738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_OBSS_CHANLIST_FIXED_LEN	1	/* fixed length of regclass */
4786dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
4796dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_extcap_ie {
4806dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 id;
4816dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 len;
482ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt	uint8 cap[1];
4836dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
4846dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct dot11_extcap_ie dot11_extcap_ie_t;
485ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt
48638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_EXTCAP_LEN_MAX	8
48738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
488ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define DOT11_EXTCAP_LEN_COEX	1
489ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define DOT11_EXTCAP_LEN_BT	3
490ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define DOT11_EXTCAP_LEN_IW	4
491ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define DOT11_EXTCAP_LEN_SI	6
492ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt
493ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define DOT11_EXTCAP_LEN_TDLS	5
49438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_11AC_EXTCAP_LEN_TDLS	8
49538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
49638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_EXTCAP_LEN_FMS			2
49738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_EXTCAP_LEN_PROXY_ARP		2
49838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_EXTCAP_LEN_TFS			3
49938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_EXTCAP_LEN_WNM_SLEEP		3
50038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_EXTCAP_LEN_TIMBC			3
50138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_EXTCAP_LEN_BSSTRANS		3
50238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_EXTCAP_LEN_DMS			4
50338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_EXTCAP_LEN_WNM_NOTIFICATION	6
50438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_EXTCAP_LEN_TDLS_WBW		8
50538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_EXTCAP_LEN_OPMODE_NOTIFICATION	8
50638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
507ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_extcap {
50838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 extcap[DOT11_EXTCAP_LEN_MAX];
509ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
510ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidttypedef struct dot11_extcap dot11_extcap_t;
511ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt
51238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* TDLS Capabilities */
51338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TDLS_CAP_TDLS			37		/* TDLS support */
51438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TDLS_CAP_PU_BUFFER_STA	28		/* TDLS Peer U-APSD buffer STA support */
51538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TDLS_CAP_PEER_PSM		20		/* TDLS Peer PSM support */
51638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TDLS_CAP_CH_SW			30		/* TDLS Channel switch */
51738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TDLS_CAP_PROH			38		/* TDLS prohibited */
51838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TDLS_CAP_CH_SW_PROH		39		/* TDLS Channel switch prohibited */
51938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TDLS_CAP_TDLS_WIDER_BW	61	/* TDLS Wider Band-Width */
52038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
52138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define TDLS_CAP_MAX_BIT		39		/* TDLS max bit defined in ext cap */
52238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
52338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 802.11h/802.11k Measurement Request/Report IEs */
52438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Measurement Type field */
52538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MEASURE_TYPE_BASIC 	0	/* d11 measurement basic type */
52638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MEASURE_TYPE_CCA 		1	/* d11 measurement CCA type */
52738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MEASURE_TYPE_RPI		2	/* d11 measurement RPI type */
52838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MEASURE_TYPE_CHLOAD		3	/* d11 measurement Channel Load type */
52938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MEASURE_TYPE_NOISE		4	/* d11 measurement Noise Histogram type */
53038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MEASURE_TYPE_BEACON		5	/* d11 measurement Beacon type */
53138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MEASURE_TYPE_FRAME	6	/* d11 measurement Frame type */
53238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MEASURE_TYPE_STAT		7	/* d11 measurement STA Statistics type */
53338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MEASURE_TYPE_LCI		8	/* d11 measurement LCI type */
53438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MEASURE_TYPE_TXSTREAM		9	/* d11 measurement TX Stream type */
53538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MEASURE_TYPE_PAUSE		255	/* d11 measurement pause type */
53638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
53738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Measurement Request Modes */
53838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MEASURE_MODE_PARALLEL 	(1<<0)	/* d11 measurement parallel */
53938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MEASURE_MODE_ENABLE 	(1<<1)	/* d11 measurement enable */
54038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MEASURE_MODE_REQUEST	(1<<2)	/* d11 measurement request */
54138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MEASURE_MODE_REPORT 	(1<<3)	/* d11 measurement report */
54238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MEASURE_MODE_DUR 	(1<<4)	/* d11 measurement dur mandatory */
54338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Measurement Report Modes */
54438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MEASURE_MODE_LATE 	(1<<0)	/* d11 measurement late */
54538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MEASURE_MODE_INCAPABLE	(1<<1)	/* d11 measurement incapable */
54638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MEASURE_MODE_REFUSED	(1<<2)	/* d11 measurement refuse */
54738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Basic Measurement Map bits */
54838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MEASURE_BASIC_MAP_BSS	((uint8)(1<<0))	/* d11 measurement basic map BSS */
54938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MEASURE_BASIC_MAP_OFDM	((uint8)(1<<1))	/* d11 measurement map OFDM */
55038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MEASURE_BASIC_MAP_UKNOWN	((uint8)(1<<2))	/* d11 measurement map unknown */
55138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MEASURE_BASIC_MAP_RADAR	((uint8)(1<<3))	/* d11 measurement map radar */
55238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MEASURE_BASIC_MAP_UNMEAS	((uint8)(1<<4))	/* d11 measurement map unmeasuremnt */
5536dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
5546dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_meas_req {
5556dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 id;
5566dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 len;
5576dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 token;
5586dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 mode;
5596dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 type;
5606dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 channel;
5616dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 start_time[8];
5626dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint16 duration;
5636dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
5646dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct dot11_meas_req dot11_meas_req_t;
56538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_IE_MREQ_LEN 14	/* d11 measurement request IE length */
56638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* length of Measure Request IE data not including variable len */
56738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_IE_MREQ_FIXED_LEN 3	/* d11 measurement request IE fixed length */
5686dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
5696dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_meas_rep {
5706dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 id;
5716dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 len;
5726dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 token;
5736dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 mode;
5746dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 type;
5756dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	BWL_PRE_PACKED_STRUCT union
5766dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	{
5776dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt		BWL_PRE_PACKED_STRUCT struct {
5786dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt			uint8 channel;
5796dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt			uint8 start_time[8];
5806dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt			uint16 duration;
5816dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt			uint8 map;
5826dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt		} BWL_POST_PACKED_STRUCT basic;
5836dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt		uint8 data[1];
5846dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	} BWL_POST_PACKED_STRUCT rep;
5856dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
5866dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct dot11_meas_rep dot11_meas_rep_t;
5876dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
58838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* length of Measure Report IE data not including variable len */
58938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_IE_MREP_FIXED_LEN	3	/* d11 measurement response IE fixed length */
5906dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
5916dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_meas_rep_basic {
5926dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 channel;
5936dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 start_time[8];
5946dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint16 duration;
5956dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 map;
5966dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
5976dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct dot11_meas_rep_basic dot11_meas_rep_basic_t;
59838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MEASURE_BASIC_REP_LEN	12	/* d11 measurement basic report length */
5996dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
6006dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_quiet {
6016dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 id;
6026dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 len;
60338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 count;	/* TBTTs until beacon interval in quiet starts */
60438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 period;	/* Beacon intervals between periodic quiet periods ? */
60538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 duration;	/* Length of quiet period, in TU's */
60638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 offset;	/* TU's offset from TBTT in Count field */
6076dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
6086dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct dot11_quiet dot11_quiet_t;
6096dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
6106dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct chan_map_tuple {
6116dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 channel;
6126dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 map;
6136dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
6146dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct chan_map_tuple chan_map_tuple_t;
6156dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
6166dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_ibss_dfs {
6176dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 id;
6186dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 len;
6196dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 eaddr[ETHER_ADDR_LEN];
6206dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 interval;
6216dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	chan_map_tuple_t map[1];
6226dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
6236dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct dot11_ibss_dfs dot11_ibss_dfs_t;
6246dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
62538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WME Elements */
62638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WME_OUI			"\x00\x50\xf2"	/* WME OUI */
62738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WME_OUI_LEN		3
62838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WME_OUI_TYPE		2	/* WME type */
62938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WME_TYPE		2	/* WME type, deprecated */
63038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WME_SUBTYPE_IE		0	/* Information Element */
63138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WME_SUBTYPE_PARAM_IE	1	/* Parameter Element */
63238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WME_SUBTYPE_TSPEC	2	/* Traffic Specification */
63338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WME_VER			1	/* WME version */
63438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
63538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WME Access Category Indices (ACIs) */
63638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define AC_BE			0	/* Best Effort */
63738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define AC_BK			1	/* Background */
63838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define AC_VI			2	/* Video */
63938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define AC_VO			3	/* Voice */
64038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define AC_COUNT		4	/* number of ACs */
64138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
64238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef uint8 ac_bitmap_t;	/* AC bitmap of (1 << AC_xx) */
64338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
64438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define AC_BITMAP_NONE		0x0	/* No ACs */
64538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define AC_BITMAP_ALL		0xf	/* All ACs */
64638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define AC_BITMAP_TST(ab, ac)	(((ab) & (1 << (ac))) != 0)
64738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define AC_BITMAP_SET(ab, ac)	(((ab) |= (1 << (ac))))
6486dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#define AC_BITMAP_RESET(ab, ac) (((ab) &= ~(1 << (ac))))
6496dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
65038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WME Information Element (IE) */
6516dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct wme_ie {
6526dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 oui[3];
6536dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 type;
6546dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 subtype;
6556dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 version;
6566dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 qosinfo;
6576dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
6586dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct wme_ie wme_ie_t;
65938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WME_IE_LEN 7	/* WME IE length */
6606dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
6616dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct edcf_acparam {
66238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	ACI;
66338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	ECW;
66438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16  TXOP;		/* stored in network order (ls octet first) */
6656dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
6666dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct edcf_acparam edcf_acparam_t;
6676dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
66838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WME Parameter Element (PE) */
6696dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct wme_param_ie {
6706dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 oui[3];
6716dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 type;
6726dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 subtype;
6736dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 version;
6746dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 qosinfo;
6756dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 rsvd;
6766dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	edcf_acparam_t acparam[AC_COUNT];
6776dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
6786dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct wme_param_ie wme_param_ie_t;
67938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WME_PARAM_IE_LEN            24          /* WME Parameter IE length */
68038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
68138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* QoS Info field for IE as sent from AP */
68238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WME_QI_AP_APSD_MASK         0x80        /* U-APSD Supported mask */
68338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WME_QI_AP_APSD_SHIFT        7           /* U-APSD Supported shift */
68438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WME_QI_AP_COUNT_MASK        0x0f        /* Parameter set count mask */
68538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WME_QI_AP_COUNT_SHIFT       0           /* Parameter set count shift */
68638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
68738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* QoS Info field for IE as sent from STA */
68838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WME_QI_STA_MAXSPLEN_MASK    0x60        /* Max Service Period Length mask */
68938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WME_QI_STA_MAXSPLEN_SHIFT   5           /* Max Service Period Length shift */
69038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WME_QI_STA_APSD_ALL_MASK    0xf         /* APSD all AC bits mask */
69138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WME_QI_STA_APSD_ALL_SHIFT   0           /* APSD all AC bits shift */
69238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WME_QI_STA_APSD_BE_MASK     0x8         /* APSD AC_BE mask */
69338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WME_QI_STA_APSD_BE_SHIFT    3           /* APSD AC_BE shift */
69438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WME_QI_STA_APSD_BK_MASK     0x4         /* APSD AC_BK mask */
69538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WME_QI_STA_APSD_BK_SHIFT    2           /* APSD AC_BK shift */
69638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WME_QI_STA_APSD_VI_MASK     0x2         /* APSD AC_VI mask */
69738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WME_QI_STA_APSD_VI_SHIFT    1           /* APSD AC_VI shift */
69838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WME_QI_STA_APSD_VO_MASK     0x1         /* APSD AC_VO mask */
69938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WME_QI_STA_APSD_VO_SHIFT    0           /* APSD AC_VO shift */
70038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
70138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* ACI */
70238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_AIFSN_MIN               1           /* AIFSN minimum value */
70338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_AIFSN_MAX               15          /* AIFSN maximum value */
70438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_AIFSN_MASK              0x0f        /* AIFSN mask */
70538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_ACM_MASK                0x10        /* ACM mask */
70638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_ACI_MASK                0x60        /* ACI mask */
70738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_ACI_SHIFT               5           /* ACI shift */
70838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_AIFSN_SHIFT             12          /* 4 MSB(0xFFF) in ifs_ctl for AC idx */
70938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
71038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* ECW */
71138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_ECW_MIN                 0           /* cwmin/cwmax exponent minimum value */
71238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_ECW_MAX                 15          /* cwmin/cwmax exponent maximum value */
7136dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#define EDCF_ECW2CW(exp)             ((1 << (exp)) - 1)
71438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_ECWMIN_MASK             0x0f        /* cwmin exponent form mask */
71538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_ECWMAX_MASK             0xf0        /* cwmax exponent form mask */
71638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_ECWMAX_SHIFT            4           /* cwmax exponent form shift */
7176dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
71838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* TXOP */
71938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_TXOP_MIN                0           /* TXOP minimum value */
72038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_TXOP_MAX                65535       /* TXOP maximum value */
7216dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#define EDCF_TXOP2USEC(txop)         ((txop) << 5)
7226dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
72338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Default BE ACI value for non-WME connection STA */
7246dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#define NON_EDCF_AC_BE_ACI_STA          0x02
7256dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
72638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Default EDCF parameters that AP advertises for STA to use; WMM draft Table 12 */
72738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_AC_BE_ACI_STA           0x03	/* STA ACI value for best effort AC */
72838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_AC_BE_ECW_STA           0xA4	/* STA ECW value for best effort AC */
72938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_AC_BE_TXOP_STA          0x0000	/* STA TXOP value for best effort AC */
73038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_AC_BK_ACI_STA           0x27	/* STA ACI value for background AC */
73138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_AC_BK_ECW_STA           0xA4	/* STA ECW value for background AC */
73238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_AC_BK_TXOP_STA          0x0000	/* STA TXOP value for background AC */
73338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_AC_VI_ACI_STA           0x42	/* STA ACI value for video AC */
73438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_AC_VI_ECW_STA           0x43	/* STA ECW value for video AC */
73538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_AC_VI_TXOP_STA          0x005e	/* STA TXOP value for video AC */
73638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_AC_VO_ACI_STA           0x62	/* STA ACI value for audio AC */
73738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_AC_VO_ECW_STA           0x32	/* STA ECW value for audio AC */
73838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_AC_VO_TXOP_STA          0x002f	/* STA TXOP value for audio AC */
73938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
74038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Default EDCF parameters that AP uses; WMM draft Table 14 */
74138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_AC_BE_ACI_AP            0x03	/* AP ACI value for best effort AC */
74238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_AC_BE_ECW_AP            0x64	/* AP ECW value for best effort AC */
74338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_AC_BE_TXOP_AP           0x0000	/* AP TXOP value for best effort AC */
74438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_AC_BK_ACI_AP            0x27	/* AP ACI value for background AC */
74538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_AC_BK_ECW_AP            0xA4	/* AP ECW value for background AC */
74638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_AC_BK_TXOP_AP           0x0000	/* AP TXOP value for background AC */
74738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_AC_VI_ACI_AP            0x41	/* AP ACI value for video AC */
74838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_AC_VI_ECW_AP            0x43	/* AP ECW value for video AC */
74938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_AC_VI_TXOP_AP           0x005e	/* AP TXOP value for video AC */
75038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_AC_VO_ACI_AP            0x61	/* AP ACI value for audio AC */
75138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_AC_VO_ECW_AP            0x32	/* AP ECW value for audio AC */
75238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCF_AC_VO_TXOP_AP           0x002f	/* AP TXOP value for audio AC */
75338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
75438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* EDCA Parameter IE */
7556dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct edca_param_ie {
7566dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 qosinfo;
7576dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 rsvd;
7586dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	edcf_acparam_t acparam[AC_COUNT];
7596dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
7606dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct edca_param_ie edca_param_ie_t;
76138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define EDCA_PARAM_IE_LEN            18          /* EDCA Parameter IE length */
7626dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
76338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* QoS Capability IE */
7646dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct qos_cap_ie {
7656dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 qosinfo;
7666dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
7676dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct qos_cap_ie qos_cap_ie_t;
7686dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
7696dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_qbss_load_ie {
77038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 id; 			/* 11, DOT11_MNG_QBSS_LOAD_ID */
7716dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 length;
77238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 station_count; 		/* total number of STAs associated */
77338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 channel_utilization;	/* % of time, normalized to 255, QAP sensed medium busy */
77438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 aac; 			/* available admission capacity */
7756dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
7766dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct dot11_qbss_load_ie dot11_qbss_load_ie_t;
77738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define BSS_LOAD_IE_SIZE 	7	/* BSS load IE size */
7786dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
77938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* nom_msdu_size */
78038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FIXED_MSDU_SIZE 0x8000		/* MSDU size is fixed */
78138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define MSDU_SIZE_MASK	0x7fff		/* (Nominal or fixed) MSDU size */
7826dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
78338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* surplus_bandwidth */
78438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Represented as 3 bits of integer, binary point, 13 bits fraction */
78538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	INTEGER_SHIFT	13	/* integer shift */
78638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FRACTION_MASK	0x1FFF	/* fraction mask */
7876dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
78838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Management Notification Frame */
7896dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_management_notification {
79038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 category;			/* DOT11_ACTION_NOTIFICATION */
7916dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 action;
7926dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 token;
7936dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 status;
79438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 data[1];			/* Elements */
7956dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
79638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MGMT_NOTIFICATION_LEN 4	/* Fixed length */
7976dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
79838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Timeout Interval IE */
799ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct ti_ie {
800ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt	uint8 ti_type;
801ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt	uint32 ti_val;
802ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
803ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidttypedef struct ti_ie ti_ie_t;
804ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define TI_TYPE_REASSOC_DEADLINE	1
805ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define TI_TYPE_KEY_LIFETIME		2
806ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt
80738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WME Action Codes */
80838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WME_ADDTS_REQUEST	0	/* WME ADDTS request */
80938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WME_ADDTS_RESPONSE	1	/* WME ADDTS response */
81038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WME_DELTS_REQUEST	2	/* WME DELTS request */
8116dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
81238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WME Setup Response Status Codes */
81338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WME_ADMISSION_ACCEPTED		0	/* WME admission accepted */
81438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WME_INVALID_PARAMETERS		1	/* WME invalide parameters */
81538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WME_ADMISSION_REFUSED		3	/* WME admission refused */
8166dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
81738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Macro to take a pointer to a beacon or probe response
81838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * body and return the char* pointer to the SSID info element
81938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt */
8206dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#define BCN_PRB_SSID(body) ((char*)(body) + DOT11_BCN_PRB_LEN)
8216dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
82238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Authentication frame payload constants */
82338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_OPEN_SYSTEM	0	/* d11 open authentication */
82438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SHARED_KEY	1	/* d11 shared authentication */
82538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_FAST_BSS		2	/* d11 fast bss authentication */
82638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_CHALLENGE_LEN	128	/* d11 challenge text length */
82738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
82838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Frame control macros */
82938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_PVER_MASK		0x3	/* PVER mask */
83038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_PVER_SHIFT		0	/* PVER shift */
83138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_TYPE_MASK		0xC	/* type mask */
83238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_TYPE_SHIFT		2	/* type shift */
83338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_MASK		0xF0	/* subtype mask */
83438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_SHIFT	4	/* subtype shift */
83538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_TODS			0x100	/* to DS */
83638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_TODS_SHIFT		8	/* to DS shift */
83738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_FROMDS		0x200	/* from DS */
83838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_FROMDS_SHIFT		9	/* from DS shift */
83938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_MOREFRAG		0x400	/* more frag. */
84038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_MOREFRAG_SHIFT	10	/* more frag. shift */
84138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_RETRY		0x800	/* retry */
84238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_RETRY_SHIFT		11	/* retry shift */
84338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_PM			0x1000	/* PM */
84438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_PM_SHIFT		12	/* PM shift */
84538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_MOREDATA		0x2000	/* more data */
84638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_MOREDATA_SHIFT	13	/* more data shift */
84738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_WEP			0x4000	/* WEP */
84838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_WEP_SHIFT		14	/* WEP shift */
84938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_ORDER		0x8000	/* order */
85038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_ORDER_SHIFT		15	/* order shift */
85138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
85238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* sequence control macros */
85338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define SEQNUM_SHIFT		4	/* seq. number shift */
85438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define SEQNUM_MAX		0x1000	/* max seqnum + 1 */
85538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FRAGNUM_MASK		0xF	/* frag. number mask */
85638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
85738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Frame Control type/subtype defs */
85838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
85938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* FC Types */
86038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_TYPE_MNG		0	/* management type */
86138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_TYPE_CTL		1	/* control type */
86238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_TYPE_DATA		2	/* data type */
86338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
86438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Management Subtypes */
86538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_ASSOC_REQ		0	/* assoc. request */
86638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_ASSOC_RESP		1	/* assoc. response */
86738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_REASSOC_REQ		2	/* reassoc. request */
86838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_REASSOC_RESP		3	/* reassoc. response */
86938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_PROBE_REQ		4	/* probe request */
87038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_PROBE_RESP		5	/* probe response */
87138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_BEACON		8	/* beacon */
87238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_ATIM			9	/* ATIM */
87338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_DISASSOC		10	/* disassoc. */
87438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_AUTH			11	/* authentication */
87538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_DEAUTH		12	/* de-authentication */
87638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_ACTION		13	/* action */
87738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_ACTION_NOACK		14	/* action no-ack */
87838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
87938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Control Subtypes */
88038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_CTL_WRAPPER		7	/* Control Wrapper */
88138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_BLOCKACK_REQ		8	/* Block Ack Req */
88238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_BLOCKACK		9	/* Block Ack */
88338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_PS_POLL		10	/* PS poll */
88438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_RTS			11	/* RTS */
88538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_CTS			12	/* CTS */
88638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_ACK			13	/* ACK */
88738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_CF_END		14	/* CF-END */
88838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_CF_END_ACK		15	/* CF-END ACK */
88938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
89038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Data Subtypes */
89138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_DATA			0	/* Data */
89238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_DATA_CF_ACK		1	/* Data + CF-ACK */
89338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_DATA_CF_POLL		2	/* Data + CF-Poll */
89438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_DATA_CF_ACK_POLL	3	/* Data + CF-Ack + CF-Poll */
89538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_NULL			4	/* Null */
89638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_CF_ACK		5	/* CF-Ack */
89738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_CF_POLL		6	/* CF-Poll */
89838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_CF_ACK_POLL		7	/* CF-Ack + CF-Poll */
89938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_QOS_DATA		8	/* QoS Data */
90038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_QOS_DATA_CF_ACK	9	/* QoS Data + CF-Ack */
90138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_QOS_DATA_CF_POLL	10	/* QoS Data + CF-Poll */
90238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_QOS_DATA_CF_ACK_POLL	11	/* QoS Data + CF-Ack + CF-Poll */
90338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_QOS_NULL		12	/* QoS Null */
90438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_QOS_CF_POLL		14	/* QoS CF-Poll */
90538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_QOS_CF_ACK_POLL	15	/* QoS CF-Ack + CF-Poll */
90638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
90738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Data Subtype Groups */
90838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_ANY_QOS(s)		(((s) & 8) != 0)
90938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_ANY_NULL(s)		(((s) & 4) != 0)
91038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_ANY_CF_POLL(s)	(((s) & 2) != 0)
91138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_ANY_CF_ACK(s)	(((s) & 1) != 0)
91238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE_ANY_PSPOLL(s)	(((s) & 10) != 0)
91338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
91438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Type/Subtype Combos */
91538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_KIND_MASK		(FC_TYPE_MASK | FC_SUBTYPE_MASK)	/* FC kind mask */
91638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
91738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_KIND(t, s)	(((t) << FC_TYPE_SHIFT) | ((s) << FC_SUBTYPE_SHIFT))	/* FC kind */
91838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
91938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_SUBTYPE(fc)	(((fc) & FC_SUBTYPE_MASK) >> FC_SUBTYPE_SHIFT)	/* Subtype from FC */
92038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_TYPE(fc)	(((fc) & FC_TYPE_MASK) >> FC_TYPE_SHIFT)	/* Type from FC */
92138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
92238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_ASSOC_REQ	FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_ASSOC_REQ)	/* assoc. request */
92338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_ASSOC_RESP	FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_ASSOC_RESP)	/* assoc. response */
92438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_REASSOC_REQ	FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_REASSOC_REQ)	/* reassoc. request */
92538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_REASSOC_RESP	FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_REASSOC_RESP)	/* reassoc. response */
92638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_PROBE_REQ	FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_PROBE_REQ)	/* probe request */
92738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_PROBE_RESP	FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_PROBE_RESP)	/* probe response */
92838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_BEACON	FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_BEACON)		/* beacon */
92938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_DISASSOC	FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_DISASSOC)	/* disassoc */
93038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_AUTH		FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_AUTH)		/* authentication */
93138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_DEAUTH	FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_DEAUTH)		/* deauthentication */
93238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_ACTION	FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_ACTION)		/* action */
93338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_ACTION_NOACK	FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_ACTION_NOACK)	/* action no-ack */
93438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
93538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_CTL_WRAPPER	FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_CTL_WRAPPER)	/* Control Wrapper */
93638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_BLOCKACK_REQ	FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_BLOCKACK_REQ)	/* Block Ack Req */
93738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_BLOCKACK	FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_BLOCKACK)	/* Block Ack */
93838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_PS_POLL	FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_PS_POLL)	/* PS poll */
93938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_RTS		FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_RTS)		/* RTS */
94038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_CTS		FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_CTS)		/* CTS */
94138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_ACK		FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_ACK)		/* ACK */
94238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_CF_END	FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_CF_END)		/* CF-END */
94338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_CF_END_ACK	FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_CF_END_ACK)	/* CF-END ACK */
94438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
94538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_DATA		FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_DATA)		/* data */
94638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_NULL_DATA	FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_NULL)		/* null data */
94738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_DATA_CF_ACK	FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_DATA_CF_ACK)	/* data CF ACK */
94838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_QOS_DATA	FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_QOS_DATA)	/* QoS data */
94938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FC_QOS_NULL	FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_QOS_NULL)	/* QoS null */
95038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
95138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* QoS Control Field */
95238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
95338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 802.1D Priority */
95438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define QOS_PRIO_SHIFT		0	/* QoS priority shift */
95538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define QOS_PRIO_MASK		0x0007	/* QoS priority mask */
95638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define QOS_PRIO(qos)		(((qos) & QOS_PRIO_MASK) >> QOS_PRIO_SHIFT)	/* QoS priority */
95738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
95838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Traffic Identifier */
95938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define QOS_TID_SHIFT		0	/* QoS TID shift */
96038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define QOS_TID_MASK		0x000f	/* QoS TID mask */
96138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define QOS_TID(qos)		(((qos) & QOS_TID_MASK) >> QOS_TID_SHIFT)	/* QoS TID */
96238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
96338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* End of Service Period (U-APSD) */
96438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define QOS_EOSP_SHIFT		4	/* QoS End of Service Period shift */
96538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define QOS_EOSP_MASK		0x0010	/* QoS End of Service Period mask */
96638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define QOS_EOSP(qos)		(((qos) & QOS_EOSP_MASK) >> QOS_EOSP_SHIFT)	/* Qos EOSP */
96738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
96838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Ack Policy */
96938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define QOS_ACK_NORMAL_ACK	0	/* Normal Ack */
97038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define QOS_ACK_NO_ACK		1	/* No Ack (eg mcast) */
97138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define QOS_ACK_NO_EXP_ACK	2	/* No Explicit Ack */
97238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define QOS_ACK_BLOCK_ACK	3	/* Block Ack */
97338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define QOS_ACK_SHIFT		5	/* QoS ACK shift */
97438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define QOS_ACK_MASK		0x0060	/* QoS ACK mask */
97538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define QOS_ACK(qos)		(((qos) & QOS_ACK_MASK) >> QOS_ACK_SHIFT)	/* QoS ACK */
97638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
97738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* A-MSDU flag */
97838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define QOS_AMSDU_SHIFT		7	/* AMSDU shift */
97938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define QOS_AMSDU_MASK		0x0080	/* AMSDU mask */
98038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
98138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Management Frames */
98238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
98338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Management Frame Constants */
98438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
98538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Fixed fields */
98638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_AUTH_ALGO_LEN		2	/* d11 management auth. algo. length */
98738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_AUTH_SEQ_LEN		2	/* d11 management auth. seq. length */
98838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_BEACON_INT_LEN	2	/* d11 management beacon interval length */
98938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_CAP_LEN		2	/* d11 management cap. length */
99038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_AP_ADDR_LEN		6	/* d11 management AP address length */
99138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_LISTEN_INT_LEN	2	/* d11 management listen interval length */
99238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_REASON_LEN		2	/* d11 management reason length */
99338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_AID_LEN		2	/* d11 management AID length */
99438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_STATUS_LEN		2	/* d11 management status length */
99538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_TIMESTAMP_LEN		8	/* d11 management timestamp length */
99638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
99738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* DUR/ID field in assoc resp is 0xc000 | AID */
99838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_AID_MASK			0x3fff	/* d11 AID mask */
99938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
100038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Reason Codes */
100138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_RESERVED		0	/* d11 RC reserved */
100238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_UNSPECIFIED		1	/* Unspecified reason */
100338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_AUTH_INVAL		2	/* Previous authentication no longer valid */
100438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_DEAUTH_LEAVING		3	/* Deauthenticated because sending station
100538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * is leaving (or has left) IBSS or ESS
100638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 */
100738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_INACTIVITY		4	/* Disassociated due to inactivity */
100838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_BUSY			5	/* Disassociated because AP is unable to handle
100938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * all currently associated stations
101038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 */
101138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_INVAL_CLASS_2		6	/* Class 2 frame received from
101238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * nonauthenticated station
101338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 */
101438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_INVAL_CLASS_3		7	/* Class 3 frame received from
101538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 *  nonassociated station
101638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 */
101738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_DISASSOC_LEAVING	8	/* Disassociated because sending station is
101838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * leaving (or has left) BSS
101938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 */
102038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_NOT_AUTH		9	/* Station requesting (re)association is not
102138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * authenticated with responding station
102238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 */
102338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_BAD_PC			10	/* Unacceptable power capability element */
102438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_BAD_CHANNELS		11	/* Unacceptable supported channels element */
102538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 12 is unused */
102638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
102738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 32-39 are QSTA specific reasons added in 11e */
102838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_UNSPECIFIED_QOS	32	/* unspecified QoS-related reason */
102938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_INSUFFCIENT_BW		33	/* QAP lacks sufficient bandwidth */
103038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_EXCESSIVE_FRAMES	34	/* excessive number of frames need ack */
103138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_TX_OUTSIDE_TXOP	35	/* transmitting outside the limits of txop */
103238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_LEAVING_QBSS		36	/* QSTA is leaving the QBSS (or restting) */
103338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_BAD_MECHANISM		37	/* does not want to use the mechanism */
103438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_SETUP_NEEDED		38	/* mechanism needs a setup */
103538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_TIMEOUT		39	/* timeout */
103638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
103738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_MAX			23	/* Reason codes > 23 are reserved */
10386dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
103938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_TDLS_PEER_UNREACH	25
104038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RC_TDLS_DOWN_UNSPECIFIED	26
10416dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
104238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Status Codes */
104338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_SUCCESS		0	/* Successful */
104438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_FAILURE		1	/* Unspecified failure */
104538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_TDLS_WAKEUP_SCH_ALT 2	/* TDLS wakeup schedule rejected but alternative  */
104638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt					/* schedule provided */
104738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_TDLS_WAKEUP_SCH_REJ 3	/* TDLS wakeup schedule rejected */
104838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_TDLS_SEC_DISABLED	5	/* TDLS Security disabled */
104938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_LIFETIME_REJ		6	/* Unacceptable lifetime */
105038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_NOT_SAME_BSS		7	/* Not in same BSS */
105138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_CAP_MISMATCH		10	/* Cannot support all requested
105238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * capabilities in the Capability
105338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * Information field
105438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 */
105538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_REASSOC_FAIL		11	/* Reassociation denied due to inability
105638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * to confirm that association exists
105738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 */
105838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_ASSOC_FAIL		12	/* Association denied due to reason
105938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * outside the scope of this standard
106038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 */
106138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_AUTH_MISMATCH		13	/* Responding station does not support
106238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * the specified authentication
106338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * algorithm
106438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 */
106538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_AUTH_SEQ		14	/* Received an Authentication frame
106638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * with authentication transaction
106738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * sequence number out of expected
106838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * sequence
106938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 */
107038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_AUTH_CHALLENGE_FAIL	15	/* Authentication rejected because of
107138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * challenge failure
107238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 */
107338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_AUTH_TIMEOUT		16	/* Authentication rejected due to timeout
107438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * waiting for next frame in sequence
107538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 */
107638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_ASSOC_BUSY_FAIL	17	/* Association denied because AP is
107738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * unable to handle additional
107838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * associated stations
107938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 */
108038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_ASSOC_RATE_MISMATCH	18	/* Association denied due to requesting
108138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * station not supporting all of the
108238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * data rates in the BSSBasicRateSet
108338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * parameter
108438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 */
108538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_ASSOC_SHORT_REQUIRED	19	/* Association denied due to requesting
108638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * station not supporting the Short
108738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * Preamble option
108838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 */
108938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_ASSOC_PBCC_REQUIRED	20	/* Association denied due to requesting
109038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * station not supporting the PBCC
109138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * Modulation option
109238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 */
109338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_ASSOC_AGILITY_REQUIRED	21	/* Association denied due to requesting
109438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * station not supporting the Channel
109538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * Agility option
109638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 */
109738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_ASSOC_SPECTRUM_REQUIRED	22	/* Association denied because Spectrum
109838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt							 * Management capability is required.
109938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt							 */
110038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_ASSOC_BAD_POWER_CAP	23	/* Association denied because the info
110138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * in the Power Cap element is
110238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * unacceptable.
110338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 */
110438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_ASSOC_BAD_SUP_CHANNELS	24	/* Association denied because the info
110538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * in the Supported Channel element is
110638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * unacceptable
110738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 */
110838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_ASSOC_SHORTSLOT_REQUIRED	25	/* Association denied due to requesting
110938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt							 * station not supporting the Short Slot
111038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt							 * Time option
111138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt							 */
111238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_ASSOC_ERPBCC_REQUIRED	26	/* Association denied due to requesting
111338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * station not supporting the ER-PBCC
111438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * Modulation option
111538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 */
111638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_ASSOC_DSSSOFDM_REQUIRED	27	/* Association denied due to requesting
111738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * station not supporting the DSS-OFDM
111838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * option
111938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 */
112038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_ASSOC_R0KH_UNREACHABLE	28	/* Association denied due to AP
112138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * being unable to reach the R0 Key Holder
112238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 */
112338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_ASSOC_TRY_LATER	30	/* Association denied temporarily, try again later
112438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 */
112538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_ASSOC_MFP_VIOLATION	31	/* Association denied due to Robust Management
112638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * frame policy violation
112738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 */
112838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_ASSOC_HT_REQUIRED	32	/* Association denied because the requesting
112938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * station does not support HT features
113038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 */
113138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
113238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	DOT11_SC_DECLINED		37	/* request declined */
113338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	DOT11_SC_INVALID_PARAMS		38	/* One or more params have invalid values */
113438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_INVALID_PAIRWISE_CIPHER	42 /* invalid pairwise cipher */
113538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	DOT11_SC_INVALID_AKMP		43	/* Association denied due to invalid AKMP */
113638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_INVALID_RSNIE_CAP	45	/* invalid RSN IE capabilities */
113738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_DLS_NOT_ALLOWED	48	/* DLS is not allowed in the BSS by policy */
113838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	DOT11_SC_INVALID_PMKID		53	/* Association denied due to invalid PMKID */
113938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	DOT11_SC_INVALID_MDID		54	/* Association denied due to invalid MDID */
114038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	DOT11_SC_INVALID_FTIE		55	/* Association denied due to invalid FTIE */
114138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
114238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_ADV_PROTO_NOT_SUPPORTED	59	/* ad proto not supported */
114338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_NO_OUTSTAND_REQ			60	/* no outstanding req */
114438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_RSP_NOT_RX_FROM_SERVER		61	/* no response from server */
114538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_TIMEOUT					62	/* timeout */
114638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_QUERY_RSP_TOO_LARGE		63	/* query rsp too large */
114738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_SERVER_UNREACHABLE			65	/* server unreachable */
114838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
114938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_UNEXP_MSG			70	/* Unexpected message */
115038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_INVALID_SNONCE		71	/* Invalid SNonce */
115138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_INVALID_RSNIE		72	/* Invalid contents of RSNIE */
115238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_ASSOC_VHT_REQUIRED	104	/* Association denied because the requesting
115338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 * station does not support VHT features.
115438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						 */
115538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
115638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SC_TRANSMIT_FAILURE	79	/* transmission failure */
115738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
115838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Info Elts, length of INFORMATION portion of Info Elts */
115938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_DS_PARAM_LEN			1	/* d11 management DS parameter length */
116038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_IBSS_PARAM_LEN		2	/* d11 management IBSS parameter length */
116138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
116238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* TIM Info element has 3 bytes fixed info in INFORMATION field,
116338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * followed by 1 to 251 bytes of Partial Virtual Bitmap
116438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt */
116538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_TIM_FIXED_LEN			3	/* d11 management TIM fixed length */
116638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_TIM_DTIM_COUNT		0	/* d11 management DTIM count */
116738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_TIM_DTIM_PERIOD		1	/* d11 management DTIM period */
116838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_TIM_BITMAP_CTL		2	/* d11 management TIM BITMAP control  */
116938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_TIM_PVB			3	/* d11 management TIM PVB */
117038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
117138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* TLV defines */
117238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define TLV_TAG_OFF		0	/* tag offset */
117338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define TLV_LEN_OFF		1	/* length offset */
117438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define TLV_HDR_LEN		2	/* header length */
117538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define TLV_BODY_OFF		2	/* body offset */
117638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
117738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Management Frame Information Element IDs */
117838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_SSID_ID			0	/* d11 management SSID id */
117938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_RATES_ID			1	/* d11 management rates id */
118038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_FH_PARMS_ID			2	/* d11 management FH parameter id */
118138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_DS_PARMS_ID			3	/* d11 management DS parameter id */
118238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_CF_PARMS_ID			4	/* d11 management CF parameter id */
118338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_TIM_ID			5	/* d11 management TIM id */
118438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_IBSS_PARMS_ID			6	/* d11 management IBSS parameter id */
118538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_COUNTRY_ID			7	/* d11 management country id */
118638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_HOPPING_PARMS_ID		8	/* d11 management hopping parameter id */
118738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_HOPPING_TABLE_ID		9	/* d11 management hopping table id */
118838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_REQUEST_ID			10	/* d11 management request id */
118938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_QBSS_LOAD_ID 			11	/* d11 management QBSS Load id */
119038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_EDCA_PARAM_ID			12	/* 11E EDCA Parameter id */
119138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_TSPEC_ID			13	/* d11 management TSPEC id */
119238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_TCLAS_ID			14	/* d11 management TCLAS id */
119338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_CHALLENGE_ID			16	/* d11 management chanllenge id */
119438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_PWR_CONSTRAINT_ID		32	/* 11H PowerConstraint */
119538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_PWR_CAP_ID			33	/* 11H PowerCapability */
119638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_TPC_REQUEST_ID 		34	/* 11H TPC Request */
119738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_TPC_REPORT_ID			35	/* 11H TPC Report */
119838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_SUPP_CHANNELS_ID		36	/* 11H Supported Channels */
119938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_CHANNEL_SWITCH_ID		37	/* 11H ChannelSwitch Announcement */
120038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_MEASURE_REQUEST_ID		38	/* 11H MeasurementRequest */
120138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_MEASURE_REPORT_ID		39	/* 11H MeasurementReport */
120238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_QUIET_ID			40	/* 11H Quiet */
120338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_IBSS_DFS_ID			41	/* 11H IBSS_DFS */
120438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_ERP_ID			42	/* d11 management ERP id */
120538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_TS_DELAY_ID			43	/* d11 management TS Delay id */
120638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_TCLAS_PROC_ID			44	/* d11 management TCLAS processing id */
120738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	DOT11_MNG_HT_CAP			45	/* d11 mgmt HT cap id */
120838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_QOS_CAP_ID			46	/* 11E QoS Capability id */
120938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_NONERP_ID			47	/* d11 management NON-ERP id */
121038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_RSN_ID			48	/* d11 management RSN id */
121138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_EXT_RATES_ID			50	/* d11 management ext. rates id */
121238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_AP_CHREP_ID			51	/* 11k AP Channel report id */
121338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_NEIGHBOR_REP_ID		52	/* 11k & 11v Neighbor report id */
121438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_RCPI_ID			53	/* 11k RCPI */
121538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_MDIE_ID			54	/* 11r Mobility domain id */
121638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_FTIE_ID			55	/* 11r Fast Bss Transition id */
121738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_FT_TI_ID			56	/* 11r Timeout Interval id */
121838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_RDE_ID			57	/* 11r RIC Data Element id */
121938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	DOT11_MNG_REGCLASS_ID			59	/* d11 management regulatory class id */
122038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_EXT_CSA_ID			60	/* d11 Extended CSA */
122138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	DOT11_MNG_HT_ADD			61	/* d11 mgmt additional HT info */
122238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	DOT11_MNG_EXT_CHANNEL_OFFSET		62	/* d11 mgmt ext channel offset */
122338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_BSS_AVR_ACCESS_DELAY_ID	63	/* 11k bss average access delay */
122438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_ANTENNA_ID			64	/* 11k antenna id */
122538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_RSNI_ID			65	/* 11k RSNI id */
122638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_MEASUREMENT_PILOT_TX_ID	66	/* 11k measurement pilot tx info id */
122738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_BSS_AVAL_ADMISSION_CAP_ID	67	/* 11k bss aval admission cap id */
122838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_BSS_AC_ACCESS_DELAY_ID	68	/* 11k bss AC access delay id */
122938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_WAPI_ID			68	/* d11 management WAPI id */
123038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_TIME_ADVERTISE_ID	69	/* 11p time advertisement */
123138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_RRM_CAP_ID		70	/* 11k radio measurement capability */
123238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_MULTIPLE_BSSID_ID		71	/* 11k multiple BSSID id */
123338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	DOT11_MNG_HT_BSS_COEXINFO_ID		72	/* d11 mgmt OBSS Coexistence INFO */
123438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	DOT11_MNG_HT_BSS_CHANNEL_REPORT_ID	73	/* d11 mgmt OBSS Intolerant Channel list */
123538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	DOT11_MNG_HT_OBSS_ID			74	/* d11 mgmt OBSS HT info */
123638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_MMIE_ID			76	/* d11 mgmt MIC IE */
123738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_BSS_MAX_IDLE_PERIOD_ID	90	/* 11v bss max idle id */
123838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_TFS_REQUEST_ID		91	/* 11v tfs request id */
123938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_TFS_RESPONSE_ID		92	/* 11v tfs response id */
124038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_WNM_SLEEP_MODE_ID		93	/* 11v wnm-sleep mode id */
124138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_TIMBC_REQ_ID			94	/* 11v TIM broadcast request id */
124238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_TIMBC_RESP_ID			95	/* 11v TIM broadcast response id */
124338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_CHANNEL_USAGE			97	/* 11v channel usage */
124438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_TIME_ZONE_ID			98	/* 11v time zone */
124538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_DMS_REQUEST_ID		99	/* 11v dms request id */
124638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_DMS_RESPONSE_ID		100	/* 11v dms response id */
124738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_LINK_IDENTIFIER_ID		101	/* 11z TDLS Link Identifier IE */
124838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_WAKEUP_SCHEDULE_ID		102	/* 11z TDLS Wakeup Schedule IE */
124938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_CHANNEL_SWITCH_TIMING_ID	104	/* 11z TDLS Channel Switch Timing IE */
125038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_PTI_CONTROL_ID		105	/* 11z TDLS PTI Control IE */
125138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_PU_BUFFER_STATUS_ID	106	/* 11z TDLS PU Buffer Status IE */
125238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_INTERWORKING_ID		107	/* 11u interworking */
125338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_ADVERTISEMENT_ID		108	/* 11u advertisement protocol */
125438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_EXP_BW_REQ_ID			109	/* 11u expedited bandwith request */
125538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_QOS_MAP_ID			110	/* 11u QoS map set */
125638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_ROAM_CONSORT_ID		111	/* 11u roaming consortium */
125738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_EMERGCY_ALERT_ID		112	/* 11u emergency alert identifier */
125838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	DOT11_MNG_EXT_CAP_ID			127	/* d11 mgmt ext capability */
125938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	DOT11_MNG_VHT_CAP_ID			191	/* d11 mgmt VHT cap id */
126038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	DOT11_MNG_VHT_OPERATION_ID		192	/* d11 mgmt VHT op id */
126138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_WIDE_BW_CHANNEL_SWITCH_ID		194	/* Wide BW Channel Switch IE */
126238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_VHT_TRANSMIT_POWER_ENVELOPE_ID	195	/* VHT transmit Power Envelope IE */
126338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_CHANNEL_SWITCH_WRAPPER_ID		196	/* Channel Switch Wrapper IE */
126438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_AID_ID					197	/* Association ID  IE */
126538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	DOT11_MNG_OPER_MODE_NOTIF_ID	199	/* d11 mgmt VHT oper mode notif */
126638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
126738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
126838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_WPA_ID			221	/* d11 management WPA id */
126938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_PROPR_ID			221	/* d11 management proprietary id */
127038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* should start using this one instead of above two */
127138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_VS_ID				221	/* d11 management Vendor Specific IE */
127238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
127338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Rate Defines */
127438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
127538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Valid rates for the Supported Rates and Extended Supported Rates IEs.
127638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * Encoding is the rate in 500kbps units, rouding up for fractional values.
127738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * 802.11-2012, section 6.5.5.2, DATA_RATE parameter enumerates all the values.
127838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * The rate values cover DSSS, HR/DSSS, ERP, and OFDM phy rates.
127938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * The defines below do not cover the rates specific to 10MHz, {3, 4.5, 27},
128038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * and 5MHz, {1.5, 2.25, 3, 4.5, 13.5}, which are not supported by Broadcom devices.
128138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt */
12826dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
128338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RATE_1M   2       /* 1  Mbps in 500kbps units */
128438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RATE_2M   4       /* 2  Mbps in 500kbps units */
128538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RATE_5M5  11      /* 5.5 Mbps in 500kbps units */
128638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RATE_11M  22      /* 11 Mbps in 500kbps units */
128738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RATE_6M   12      /* 6  Mbps in 500kbps units */
128838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RATE_9M   18      /* 9  Mbps in 500kbps units */
128938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RATE_12M  24      /* 12 Mbps in 500kbps units */
129038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RATE_18M  36      /* 18 Mbps in 500kbps units */
129138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RATE_24M  48      /* 24 Mbps in 500kbps units */
129238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RATE_36M  72      /* 36 Mbps in 500kbps units */
129338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RATE_48M  96      /* 48 Mbps in 500kbps units */
129438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RATE_54M  108     /* 54 Mbps in 500kbps units */
129538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RATE_MAX  108     /* highest rate (54 Mbps) in 500kbps units */
129638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
129738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Supported Rates and Extended Supported Rates IEs
129838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * The supported rates octets are defined a the MSB indicatin a Basic Rate
129938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * and bits 0-6 as the rate value
130038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt */
130138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RATE_BASIC                0x80 /* flag for a Basic Rate */
130238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RATE_MASK                 0x7F /* mask for numeric part of rate */
130338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
130438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* BSS Membership Selector parameters
130538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * 802.11-2012 and 802.11ac_D4.0 sec 8.4.2.3
130638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * These selector values are advertised in Supported Rates and Extended Supported Rates IEs
130738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * in the supported rates list with the Basic rate bit set.
130838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * Constants below include the basic bit.
130938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt */
131038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BSS_MEMBERSHIP_HT         0xFF  /* Basic 0x80 + 127, HT Required to join */
131138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BSS_MEMBERSHIP_VHT        0xFE  /* Basic 0x80 + 126, VHT Required to join */
131238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
131338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* ERP info element bit values */
131438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_ERP_LEN			1	/* ERP is currently 1 byte long */
131538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_NONERP_PRESENT		0x01	/* NonERP (802.11b) STAs are present
131638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt							 *in the BSS
131738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt							 */
131838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_USE_PROTECTION		0x02	/* Use protection mechanisms for
131938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt							 *ERP-OFDM frames
132038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt							 */
132138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_BARKER_PREAMBLE		0x04	/* Short Preambles: 0 == allowed,
132238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt							 * 1 == not allowed
132338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt							 */
132438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* TS Delay element offset & size */
132538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MGN_TS_DELAY_LEN		4	/* length of TS DELAY IE */
132638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define TS_DELAY_FIELD_SIZE			4	/* TS DELAY field size */
132738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
132838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Capability Information Field */
132938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_CAP_ESS				0x0001	/* d11 cap. ESS */
133038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_CAP_IBSS				0x0002	/* d11 cap. IBSS */
133138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_CAP_POLLABLE			0x0004	/* d11 cap. pollable */
133238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_CAP_POLL_RQ			0x0008	/* d11 cap. poll request */
133338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_CAP_PRIVACY			0x0010	/* d11 cap. privacy */
133438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_CAP_SHORT				0x0020	/* d11 cap. short */
133538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_CAP_PBCC				0x0040	/* d11 cap. PBCC */
133638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_CAP_AGILITY			0x0080	/* d11 cap. agility */
133738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_CAP_SPECTRUM			0x0100	/* d11 cap. spectrum */
133838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_CAP_QOS				0x0200	/* d11 cap. qos */
133938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_CAP_SHORTSLOT			0x0400	/* d11 cap. shortslot */
134038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_CAP_APSD				0x0800	/* d11 cap. apsd */
134138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_CAP_RRM				0x1000	/* d11 cap. 11k radio measurement */
134238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_CAP_CCK_OFDM			0x2000	/* d11 cap. CCK/OFDM */
134338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_CAP_DELAY_BA			0x4000	/* d11 cap. delayed block ack */
134438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_CAP_IMMEDIATE_BA			0x8000	/* d11 cap. immediate block ack */
134538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
134638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Extended capabilities IE bitfields */
134738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 20/40 BSS Coexistence Management support bit position */
134838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_EXT_CAP_OBSS_COEX_MGMT		0
134938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* scheduled PSMP support bit position */
135038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_EXT_CAP_SPSMP			6
135138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/*  Flexible Multicast Service */
135238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_EXT_CAP_FMS			11
135338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* proxy ARP service support bit position */
135438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_EXT_CAP_PROXY_ARP			12
135538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Traffic Filter Service */
135638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_EXT_CAP_TFS			16
135738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WNM-Sleep Mode */
135838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_EXT_CAP_WNM_SLEEP			17
135938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* TIM Broadcast service */
136038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_EXT_CAP_TIMBC			18
136138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* BSS Transition Management support bit position */
136238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_EXT_CAP_BSSTRANS_MGMT		19
136338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Direct Multicast Service */
136438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_EXT_CAP_DMS			26
136538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Interworking support bit position */
136638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_EXT_CAP_IW			31
136738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* service Interval granularity bit position and mask */
136838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_EXT_CAP_SI			41
136938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_EXT_CAP_SI_MASK			0x0E
137038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WNM notification */
137138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_EXT_CAP_WNM_NOTIF			46
137238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Operating mode notification - VHT (11ac D3.0 - 8.4.2.29) */
137338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_EXT_CAP_OPER_MODE_NOTIF		62
137438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
137538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* VHT Operating mode bit fields -  (11ac D3.0 - 8.4.1.50) */
137638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_OPER_MODE_CHANNEL_WIDTH_SHIFT 0
137738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_OPER_MODE_CHANNEL_WIDTH_MASK 0x3
137838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_OPER_MODE_RXNSS_SHIFT 4
137938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_OPER_MODE_RXNSS_MASK 0x70
138038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_OPER_MODE_RXNSS_TYPE_SHIFT 7
138138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_OPER_MODE_RXNSS_TYPE_MASK 0x80
138238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
138338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_OPER_MODE(type, nss, chanw) (\
138438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	((type) << DOT11_OPER_MODE_RXNSS_TYPE_SHIFT &\
138538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt		 DOT11_OPER_MODE_RXNSS_TYPE_MASK) |\
138638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	(((nss) - 1) << DOT11_OPER_MODE_RXNSS_SHIFT & DOT11_OPER_MODE_RXNSS_MASK) |\
138738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	((chanw) << DOT11_OPER_MODE_CHANNEL_WIDTH_SHIFT &\
138838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt		 DOT11_OPER_MODE_CHANNEL_WIDTH_MASK))
138938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
139038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_OPER_MODE_CHANNEL_WIDTH(mode) \
139138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	(((mode) & DOT11_OPER_MODE_CHANNEL_WIDTH_MASK)\
139238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt		>> DOT11_OPER_MODE_CHANNEL_WIDTH_SHIFT)
139338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_OPER_MODE_RXNSS(mode) \
139438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	((((mode) & DOT11_OPER_MODE_RXNSS_MASK)		\
139538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt		>> DOT11_OPER_MODE_RXNSS_SHIFT) + 1)
139638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_OPER_MODE_RXNSS_TYPE(mode) \
139738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	(((mode) & DOT11_OPER_MODE_RXNSS_TYPE_MASK)\
139838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt		>> DOT11_OPER_MODE_RXNSS_TYPE_SHIFT)
139938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
140038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_OPER_MODE_20MHZ 0
140138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_OPER_MODE_40MHZ 1
140238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_OPER_MODE_80MHZ 2
140338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_OPER_MODE_160MHZ 3
140438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_OPER_MODE_8080MHZ 3
140538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
140638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_OPER_MODE_CHANNEL_WIDTH_20MHZ(mode) (\
140738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	((mode) & DOT11_OPER_MODE_CHANNEL_WIDTH_MASK) == DOT11_OPER_MODE_20MHZ)
140838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_OPER_MODE_CHANNEL_WIDTH_40MHZ(mode) (\
140938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	((mode) & DOT11_OPER_MODE_CHANNEL_WIDTH_MASK) == DOT11_OPER_MODE_40MHZ)
141038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_OPER_MODE_CHANNEL_WIDTH_80MHZ(mode) (\
141138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	((mode) & DOT11_OPER_MODE_CHANNEL_WIDTH_MASK) == DOT11_OPER_MODE_80MHZ)
141238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_OPER_MODE_CHANNEL_WIDTH_160MHZ(mode) (\
141338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	((mode) & DOT11_OPER_MODE_CHANNEL_WIDTH_MASK) == DOT11_OPER_MODE_160MHZ)
141438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_OPER_MODE_CHANNEL_WIDTH_8080MHZ(mode) (\
141538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	((mode) & DOT11_OPER_MODE_CHANNEL_WIDTH_MASK) == DOT11_OPER_MODE_8080MHZ)
141638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
141738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Operating mode information element 802.11ac D3.0 - 8.4.2.168 */
141838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_oper_mode_notif_ie {
141938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 mode;
142038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
142138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_oper_mode_notif_ie dot11_oper_mode_notif_ie_t;
14226dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
142338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_OPER_MODE_NOTIF_IE_LEN 1
14246dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
142538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Extended Capability Information Field */
142638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_OBSS_COEX_MNG_SUPPORT	0x01	/* 20/40 BSS Coexistence Management support */
14276dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
142838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/*
142938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * Action Frame Constants
143038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt */
143138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ACTION_HDR_LEN		2	/* action frame category + action field */
143238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ACTION_CAT_OFF		0	/* category offset */
143338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ACTION_ACT_OFF		1	/* action offset */
143438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
143538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Action Category field (sec 8.4.1.11) */
143638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ACTION_CAT_ERR_MASK	0x80	/* category error mask */
143738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ACTION_CAT_MASK		0x7F	/* category mask */
143838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ACTION_CAT_SPECT_MNG	0	/* category spectrum management */
143938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ACTION_CAT_QOS		1	/* category QoS */
144038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ACTION_CAT_DLS		2	/* category DLS */
144138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ACTION_CAT_BLOCKACK	3	/* category block ack */
144238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ACTION_CAT_PUBLIC		4	/* category public */
144338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ACTION_CAT_RRM		5	/* category radio measurements */
144438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ACTION_CAT_FBT	6	/* category fast bss transition */
144538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ACTION_CAT_HT		7	/* category for HT */
144638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	DOT11_ACTION_CAT_SA_QUERY	8	/* security association query */
144738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	DOT11_ACTION_CAT_PDPA		9	/* protected dual of public action */
144838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ACTION_CAT_WNM		10	/* category for WNM */
144938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ACTION_CAT_UWNM		11	/* category for Unprotected WNM */
145038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ACTION_NOTIFICATION	17
145138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ACTION_CAT_VHT		21	/* VHT action */
145238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ACTION_CAT_VSP		126	/* protected vendor specific */
145338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ACTION_CAT_VS		127	/* category Vendor Specific */
145438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
145538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Spectrum Management Action IDs (sec 7.4.1) */
145638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SM_ACTION_M_REQ		0	/* d11 action measurement request */
145738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SM_ACTION_M_REP		1	/* d11 action measurement response */
145838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SM_ACTION_TPC_REQ		2	/* d11 action TPC request */
145938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SM_ACTION_TPC_REP		3	/* d11 action TPC response */
146038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SM_ACTION_CHANNEL_SWITCH	4	/* d11 action channel switch */
146138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SM_ACTION_EXT_CSA		5	/* d11 extened CSA for 11n */
146238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
146338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* HT action ids */
146438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ACTION_ID_HT_CH_WIDTH	0	/* notify channel width action id */
146538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ACTION_ID_HT_MIMO_PS	1	/* mimo ps action id */
146638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
146738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Public action ids */
146838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_PUB_ACTION_BSS_COEX_MNG	0	/* 20/40 Coexistence Management action id */
146938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_PUB_ACTION_CHANNEL_SWITCH	4	/* d11 action channel switch */
147038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
147138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Block Ack action types */
147238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BA_ACTION_ADDBA_REQ	0	/* ADDBA Req action frame type */
147338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BA_ACTION_ADDBA_RESP	1	/* ADDBA Resp action frame type */
147438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BA_ACTION_DELBA		2	/* DELBA action frame type */
147538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
147638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* ADDBA action parameters */
147738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ADDBA_PARAM_AMSDU_SUP	0x0001	/* AMSDU supported under BA */
147838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ADDBA_PARAM_POLICY_MASK	0x0002	/* policy mask(ack vs delayed) */
147938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ADDBA_PARAM_POLICY_SHIFT	1	/* policy shift */
148038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ADDBA_PARAM_TID_MASK	0x003c	/* tid mask */
148138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ADDBA_PARAM_TID_SHIFT	2	/* tid shift */
148238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ADDBA_PARAM_BSIZE_MASK	0xffc0	/* buffer size mask */
148338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ADDBA_PARAM_BSIZE_SHIFT	6	/* buffer size shift */
148438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
148538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ADDBA_POLICY_DELAYED	0	/* delayed BA policy */
148638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ADDBA_POLICY_IMMEDIATE	1	/* immediate BA policy */
148738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
148838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Fast Transition action types */
148938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_FT_ACTION_FT_RESERVED		0
149038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_FT_ACTION_FT_REQ			1	/* FBT request - for over-the-DS FBT */
149138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_FT_ACTION_FT_RES			2	/* FBT response - for over-the-DS FBT */
149238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_FT_ACTION_FT_CON			3	/* FBT confirm - for OTDS with RRP */
149338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_FT_ACTION_FT_ACK			4	/* FBT ack */
149438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
149538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* DLS action types */
149638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_DLS_ACTION_REQ			0	/* DLS Request */
149738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_DLS_ACTION_RESP			1	/* DLS Response */
149838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_DLS_ACTION_TD			2	/* DLS Teardown */
149938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
150038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Wireless Network Management (WNM) action types */
150138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_ACTION_EVENT_REQ		0
150238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_ACTION_EVENT_REP		1
150338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_ACTION_DIAG_REQ		2
150438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_ACTION_DIAG_REP		3
150538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_ACTION_LOC_CFG_REQ		4
150638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_ACTION_LOC_RFG_RESP		5
150738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_ACTION_BSSTRANS_QUERY		6
150838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_ACTION_BSSTRANS_REQ		7
150938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_ACTION_BSSTRANS_RESP		8
151038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_ACTION_FMS_REQ		9
151138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_ACTION_FMS_RESP		10
151238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_ACTION_COL_INTRFRNCE_REQ	11
151338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_ACTION_COL_INTRFRNCE_REP	12
151438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_ACTION_TFS_REQ		13
151538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_ACTION_TFS_RESP		14
151638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_ACTION_TFS_NOTIFY		15
151738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_ACTION_WNM_SLEEP_REQ		16
151838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_ACTION_WNM_SLEEP_RESP		17
151938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_ACTION_TIMBC_REQ		18
152038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_ACTION_TIMBC_RESP		19
152138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_ACTION_QOS_TRFC_CAP_UPD	20
152238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_ACTION_CHAN_USAGE_REQ		21
152338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_ACTION_CHAN_USAGE_RESP	22
152438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_ACTION_DMS_REQ		23
152538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_ACTION_DMS_RESP		24
152638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_ACTION_TMNG_MEASUR_REQ	25
152738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_ACTION_NOTFCTN_REQ		26
152838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_ACTION_NOTFCTN_RESP		27
152938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
153038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Unprotected Wireless Network Management (WNM) action types */
153138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_UWNM_ACTION_TIM			0
153238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_UWNM_ACTION_TIMING_MEASUREMENT	1
153338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
153438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_COUNTRY_ID_LEN 3
153538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
153638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* VHT category action types - 802.11ac D3.0 - 8.5.23.1 */
153738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_VHT_ACTION_CBF				0	/* Compressed Beamforming */
153838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_VHT_ACTION_GID_MGMT			1	/* Group ID Management */
153938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_VHT_ACTION_OPER_MODE_NOTIF	2	/* Operating mode notif'n */
154038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
154138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* DLS Request frame header */
154238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_dls_req {
154338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 category;			/* category of action frame (2) */
154438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 action;				/* DLS action: req (0) */
154538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	da;		/* destination address */
154638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	sa;		/* source address */
154738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 cap;				/* capability */
154838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 timeout;			/* timeout value */
154938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 data[1];				/* IE:support rate, extend support rate, HT cap */
155038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
155138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_dls_req dot11_dls_req_t;
155238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_DLS_REQ_LEN 18	/* Fixed length */
155338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
155438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* DLS response frame header */
155538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_dls_resp {
155638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 category;			/* category of action frame (2) */
155738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 action;				/* DLS action: req (0) */
155838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 status;				/* status code field */
155938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	da;		/* destination address */
156038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	sa;		/* source address */
156138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 data[1];				/* optional: capability, rate ... */
156238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
156338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_dls_resp dot11_dls_resp_t;
156438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_DLS_RESP_LEN 16	/* Fixed length */
156538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
156638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
156738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* ************* 802.11v related definitions. ************* */
156838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
156938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* BSS Management Transition Query frame header */
157038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_bsstrans_query {
157138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 category;			/* category of action frame (10) */
157238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 action;			/* WNM action: trans_query (6) */
157338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 token;			/* dialog token */
157438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 reason;			/* transition query reason */
157538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 data[1];			/* Elements */
157638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
157738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_bsstrans_query dot11_bsstrans_query_t;
157838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BSSTRANS_QUERY_LEN 4	/* Fixed length */
157938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
158038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* BSS Management Transition Request frame header */
158138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_bsstrans_req {
158238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 category;			/* category of action frame (10) */
158338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 action;			/* WNM action: trans_req (7) */
158438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 token;			/* dialog token */
158538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 reqmode;			/* transition request mode */
158638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 disassoc_tmr;		/* disassociation timer */
158738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 validity_intrvl;		/* validity interval */
158838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 data[1];			/* optional: BSS term duration, ... */
158938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						/* ...session info URL, candidate list */
159038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
159138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_bsstrans_req dot11_bsstrans_req_t;
159238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BSSTRANS_REQ_LEN 7	/* Fixed length */
159338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
159438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* BSS Mgmt Transition Request Mode Field - 802.11v */
159538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BSSTRANS_REQMODE_PREF_LIST_INCL		0x01
159638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BSSTRANS_REQMODE_ABRIDGED			0x02
159738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BSSTRANS_REQMODE_DISASSOC_IMMINENT	0x04
159838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BSSTRANS_REQMODE_BSS_TERM_INCL		0x08
159938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BSSTRANS_REQMODE_ESS_DISASSOC_IMNT	0x10
160038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
160138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* BSS Management transition response frame header */
160238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_bsstrans_resp {
160338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 category;			/* category of action frame (10) */
160438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 action;			/* WNM action: trans_resp (8) */
160538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 token;			/* dialog token */
160638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 status;			/* transition status */
160738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 term_delay;		/* validity interval */
160838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 data[1];			/* optional: BSSID target, candidate list */
160938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
161038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_bsstrans_resp dot11_bsstrans_resp_t;
161138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BSSTRANS_RESP_LEN 5	/* Fixed length */
161238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
161338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* BSS Mgmt Transition Response Status Field */
161438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BSSTRANS_RESP_STATUS_ACCEPT			0
161538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BSSTRANS_RESP_STATUS_REJECT			1
161638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BSSTRANS_RESP_STATUS_REJ_INSUFF_BCN		2
161738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BSSTRANS_RESP_STATUS_REJ_INSUFF_CAP		3
161838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BSSTRANS_RESP_STATUS_REJ_TERM_UNDESIRED		4
161938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BSSTRANS_RESP_STATUS_REJ_TERM_DELAY_REQ		5
162038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BSSTRANS_RESP_STATUS_REJ_BSS_LIST_PROVIDED	6
162138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BSSTRANS_RESP_STATUS_REJ_NO_SUITABLE_BSS		7
162238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BSSTRANS_RESP_STATUS_REJ_LEAVING_ESS		8
162338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
162438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
162538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* BSS Max Idle Period information element */
162638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_bss_max_idle_period_ie {
162738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 id;				/* 90, DOT11_MNG_BSS_MAX_IDLE_PERIOD_ID */
162838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;
162938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 max_idle_period;			/* in unit of 1000 TUs */
163038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 idle_opt;
163138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
163238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_bss_max_idle_period_ie dot11_bss_max_idle_period_ie_t;
163338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BSS_MAX_IDLE_PERIOD_IE_LEN	3	/* bss max idle period IE size */
163438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BSS_MAX_IDLE_PERIOD_OPT_PROTECTED	1	/* BSS max idle option */
16356dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
163638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* TIM Broadcast request information element */
163738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_timbc_req_ie {
163838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 id;				/* 94, DOT11_MNG_TIMBC_REQ_ID */
163938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;
164038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 interval;				/* in unit of beacon interval */
164138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
164238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_timbc_req_ie dot11_timbc_req_ie_t;
164338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TIMBC_REQ_IE_LEN		1	/* Fixed length */
16446dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
164538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* TIM Broadcast request frame header */
164638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_timbc_req {
164738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 category;				/* category of action frame (10) */
164838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 action;				/* WNM action: DOT11_WNM_ACTION_TIMBC_REQ(18) */
164938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 token;				/* dialog token */
165038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 data[1];				/* TIM broadcast request element */
165138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
165238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_timbc_req dot11_timbc_req_t;
165338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TIMBC_REQ_LEN		3	/* Fixed length */
16546dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
165538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* TIM Broadcast response information element */
165638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_timbc_resp_ie {
165738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 id;				/* 95, DOT11_MNG_TIM_BROADCAST_RESP_ID */
165838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;
165938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 status;				/* status of add request */
166038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 interval;				/* in unit of beacon interval */
166138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	int32 offset;				/* in unit of ms */
166238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 high_rate;			/* in unit of 0.5 Mb/s */
166338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 low_rate;			/* in unit of 0.5 Mb/s */
166438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
166538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_timbc_resp_ie dot11_timbc_resp_ie_t;
166638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TIMBC_DENY_RESP_IE_LEN	1	/* Deny. Fixed length */
166738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TIMBC_ACCEPT_RESP_IE_LEN	10	/* Accept. Fixed length */
166838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
166938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TIMBC_STATUS_ACCEPT		0
167038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TIMBC_STATUS_ACCEPT_TSTAMP	1
167138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TIMBC_STATUS_DENY			2
167238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TIMBC_STATUS_OVERRIDDEN		3
167338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
167438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* TIM Broadcast request frame header */
167538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_timbc_resp {
167638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 category;			/* category of action frame (10) */
167738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 action;			/* action: DOT11_WNM_ACTION_TIMBC_RESP(19) */
167838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 token;			/* dialog token */
167938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 data[1];			/* TIM broadcast response element */
168038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
168138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_timbc_resp dot11_timbc_resp_t;
168238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TIMBC_RESP_LEN	3	/* Fixed length */
168338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
168438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* TIM element */
168538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_tim_ie {
168638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 id;			/* 5, DOT11_MNG_TIM_ID	 */
168738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;			/* 4 - 255 */
168838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 dtim_count;		/* DTIM decrementing counter */
168938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 dtim_period;		/* DTIM period */
169038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 bitmap_control;	/* AID 0 + bitmap offset */
169138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 pvb[1];		/* Partial Virtual Bitmap, variable length */
169238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
169338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_tim_ie dot11_tim_ie_t;
169438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TIM_IE_FIXED_LEN	3	/* Fixed length, without id and len */
169538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TIM_IE_FIXED_TOTAL_LEN	5	/* Fixed length, with id and len */
169638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
169738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* TIM Broadcast frame header */
169838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_timbc {
169938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 category;			/* category of action frame (11) */
170038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 action;			/* action: TIM (0) */
170138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 check_beacon;		/* need to check-beacon */
170238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 tsf[8];			/* Time Synchronization Function */
170338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	dot11_tim_ie_t tim_ie;		/* TIM element */
170438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
170538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_timbc dot11_timbc_t;
170638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TIMBC_HDR_LEN	(sizeof(dot11_timbc_t) - sizeof(dot11_tim_ie_t))
170738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TIMBC_FIXED_LEN	(sizeof(dot11_timbc_t) - 1)	/* Fixed length */
170838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TIMBC_LEN			11	/* Fixed length */
170938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
171038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* TCLAS frame classifier type */
171138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_tclas_fc_hdr {
171238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 type;
171338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 mask;
171438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 data[1];
171538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
171638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_tclas_fc_hdr dot11_tclas_fc_hdr_t;
171738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TCLAS_FC_HDR_LEN		2	/* Fixed length */
171838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
171938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TCLAS_MASK_0		0x1
172038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TCLAS_MASK_1		0x2
172138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TCLAS_MASK_2		0x4
172238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TCLAS_MASK_3		0x8
172338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TCLAS_MASK_4		0x10
172438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TCLAS_MASK_5		0x20
172538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TCLAS_MASK_6		0x40
172638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TCLAS_MASK_7		0x80
172738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
172838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TCLAS_FC_0_ETH		0
172938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TCLAS_FC_1_IP		1
173038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TCLAS_FC_2_8021Q		2
173138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TCLAS_FC_3_OFFSET		3
173238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TCLAS_FC_4_IP_HIGHER	4
173338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TCLAS_FC_5_8021D		5
173438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
173538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* TCLAS frame classifier type 0 parameters for Ethernet */
173638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_tclas_fc_0_eth {
173738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 type;
173838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 mask;
173938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 sa[ETHER_ADDR_LEN];
174038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 da[ETHER_ADDR_LEN];
174138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 eth_type;
174238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
174338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_tclas_fc_0_eth dot11_tclas_fc_0_eth_t;
174438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TCLAS_FC_0_ETH_LEN	16
17456dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
174638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* TCLAS frame classifier type 1 parameters for IPV4 */
174738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_tclas_fc_1_ipv4 {
174838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 type;
174938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 mask;
175038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 version;
175138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32 src_ip;
175238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32 dst_ip;
175338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 src_port;
175438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 dst_port;
175538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 dscp;
175638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 protocol;
175738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 reserved;
175838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
175938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_tclas_fc_1_ipv4 dot11_tclas_fc_1_ipv4_t;
176038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TCLAS_FC_1_IPV4_LEN	18
176138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
176238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* TCLAS frame classifier type 2 parameters for 802.1Q */
176338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_tclas_fc_2_8021q {
176438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 type;
176538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 mask;
176638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 tci;
176738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
176838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_tclas_fc_2_8021q dot11_tclas_fc_2_8021q_t;
176938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TCLAS_FC_2_8021Q_LEN	4
1770ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt
177138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* TCLAS frame classifier type 3 parameters for filter offset */
177238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_tclas_fc_3_filter {
177338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 type;
177438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 mask;
177538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 offset;
177638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 data[1];
177738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
177838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_tclas_fc_3_filter dot11_tclas_fc_3_filter_t;
177938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TCLAS_FC_3_FILTER_LEN	4
17806dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
178138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* TCLAS frame classifier type 4 parameters for IPV4 is the same as TCLAS type 1 */
178238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_tclas_fc_1_ipv4 dot11_tclas_fc_4_ipv4_t;
178338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TCLAS_FC_4_IPV4_LEN	DOT11_TCLAS_FC_1_IPV4_LEN
17846dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
178538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* TCLAS frame classifier type 4 parameters for IPV6 */
178638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_tclas_fc_4_ipv6 {
178738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 type;
178838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 mask;
178938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 version;
179038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 saddr[16];
179138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 daddr[16];
179238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 src_port;
179338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 dst_port;
179438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 dscp;
179538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 nexthdr;
179638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 flow_lbl[3];
179738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
179838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_tclas_fc_4_ipv6 dot11_tclas_fc_4_ipv6_t;
179938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TCLAS_FC_4_IPV6_LEN	44
180038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
180138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* TCLAS frame classifier type 5 parameters for 802.1D */
180238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_tclas_fc_5_8021d {
180338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 type;
180438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 mask;
180538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 pcp;
180638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 cfi;
180738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 vid;
180838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
180938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_tclas_fc_5_8021d dot11_tclas_fc_5_8021d_t;
181038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TCLAS_FC_5_8021D_LEN	6
18116dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
181238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* TCLAS frame classifier type parameters */
181338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT union dot11_tclas_fc {
181438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 data[1];
181538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	dot11_tclas_fc_hdr_t hdr;
181638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	dot11_tclas_fc_0_eth_t t0_eth;
181738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	dot11_tclas_fc_1_ipv4_t	t1_ipv4;
181838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	dot11_tclas_fc_2_8021q_t t2_8021q;
181938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	dot11_tclas_fc_3_filter_t t3_filter;
182038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	dot11_tclas_fc_4_ipv4_t	t4_ipv4;
182138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	dot11_tclas_fc_4_ipv6_t	t4_ipv6;
182238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	dot11_tclas_fc_5_8021d_t t5_8021d;
182338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
182438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef union dot11_tclas_fc dot11_tclas_fc_t;
182538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
182638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TCLAS_FC_MIN_LEN		4
182738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TCLAS_FC_MAX_LEN		254
182838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
182938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* TCLAS information element */
183038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_tclas_ie {
183138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 id;				/* 14, DOT11_MNG_TCLAS_ID */
183238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;
183338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 user_priority;
183438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	dot11_tclas_fc_t fc;
183538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
183638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_tclas_ie dot11_tclas_ie_t;
183738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TCLAS_IE_LEN		3	/* Fixed length, include id and len */
1838ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt
183938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* TCLAS processing information element */
184038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_tclas_proc_ie {
184138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 id;				/* 44, DOT11_MNG_TCLAS_PROC_ID */
184238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;
184338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 process;
184438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
184538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_tclas_proc_ie dot11_tclas_proc_ie_t;
184638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TCLAS_PROC_IE_LEN		3	/* Fixed length, include id and len */
1847ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt
184838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TCLAS_PROC_MATCHALL	0	/* All high level element need to match */
184938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TCLAS_PROC_MATCHONE	1	/* One high level element need to match */
185038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TCLAS_PROC_NONMATCH	2	/* Non match to any high level element */
1851ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt
1852ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt
185338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* TSPEC element defined in 802.11 std section 8.4.2.32 - Not supported */
185438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TSPEC_IE_LEN		57	/* Fixed length */
18556dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
185638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* TFS request information element */
185738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_tfs_req_ie {
185838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 id;				/* 91, DOT11_MNG_TFS_REQUEST_ID */
185938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;
186038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 tfs_id;
186138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 tfs_actcode;
186238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 data[1];
186338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
186438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_tfs_req_ie dot11_tfs_req_ie_t;
186538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TFS_REQ_IE_LEN		4	/* Fixed length, include id and len */
18666dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
186738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TFS_ACTCODE_DELETE	1
186838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TFS_ACTCODE_MODIFY	2
18696dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
187038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* TFS request subelement */
187138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_tfs_req_se {
187238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 sub_id;
187338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 length;
187438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 data[1];
187538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
187638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_tfs_req_se dot11_tfs_req_se_t;
18776dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
187838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_tfs_se {
187938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 sub_id;
188038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;
188138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 data[1];
188238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
188338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_tfs_se dot11_tfs_se_t;
188438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TFS_REQ_SUBELEM_LEN	2	/* Fixed length, include id and len */
18856dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
188638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TFS_SUBELEM_ID_TFS	1
188738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TFS_SUBELEM_ID_VENDOR	221
18886dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
188938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* TFS response information element */
189038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_tfs_resp_ie {
189138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 id;				/* 92, DOT11_MNG_TFS_RESPONSE_ID */
189238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;
189338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 data[1];
189438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
189538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_tfs_resp_ie dot11_tfs_resp_ie_t;
189638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TFS_RESP_IE_LEN		2	/* Fixed length, include id and len */
18976dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
189838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* TFS status subelement */
189938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_tfs_status_se {
190038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 id;				/* 92, DOT11_MNG_TFS_RESPONSE_ID */
190138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;
190238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 resp_st;
190338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 tfs_id;
190438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
190538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_tfs_status_se dot11_tfs_status_se_t;
190638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
190738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TFS_STATUS_SE_LEN		4	/* TFS Status Subelement length */
190838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TFS_STATUS_SE_DATA_LEN	2	/* TFS status Subelement Data length */
190938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
191038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TFS_STATUS_SE_ID_TFS_ST	1
191138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TFS_STATUS_SE_ID_TFS	2
191238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TFS_STATUS_SE_ID_VENDOR	221
191338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
191438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TFS_RESP_ST_ACCEPT	0
191538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TFS_RESP_ST_DENY_FORMAT	1
191638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TFS_RESP_ST_DENY_RESOURCE	2
191738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TFS_RESP_ST_DENY_POLICY	4
191838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TFS_RESP_ST_PREFERRED_AP_INCAP	14
191938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
192038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
192138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* TFS Management Request frame header */
192238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_tfs_req {
192338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 category;				/* category of action frame (10) */
192438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 action;				/* WNM action: tfs request (13) */
192538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 token;				/* dialog token */
192638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 data[1];				/* Elements */
192738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
192838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_tfs_req dot11_tfs_req_t;
192938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TFS_REQ_LEN		3	/* Fixed length */
193038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
193138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* TFS Management Response frame header */
193238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_tfs_resp {
193338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 category;				/* category of action frame (10) */
193438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 action;				/* WNM action: tfs request (14) */
193538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 token;				/* dialog token */
193638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 data[1];				/* Elements */
193738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
193838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_tfs_resp dot11_tfs_resp_t;
193938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TFS_RESP_LEN		3	/* Fixed length */
194038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
194138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* TFS Management Notify frame header */
194238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_tfs_notify {
194338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 category;				/* category of action frame (10) */
194438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 action;				/* WNM action: tfs request (15) */
194538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 num_tfs_id;			/* number of TFS IDs */
194638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 data[1];				/* Elements */
194738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
194838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_tfs_notify dot11_tfs_notify_t;
194938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TFS_NOTIFY_LEN		3	/* Fixed length */
195038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
195138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TFS_NOTIFY_ACT_DEL	1
195238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_TFS_NOTIFY_ACT_NOTIFY	2
195338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
195438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WNM-Sleep Management Request frame header */
195538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_wnm_sleep_req {
195638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 category;				/* category of action frame (10) */
195738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 action;				/* WNM action: wnm-sleep request (16) */
195838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 token;				/* dialog token */
195938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 data[1];				/* Elements */
196038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
196138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_wnm_sleep_req dot11_wnm_sleep_req_t;
196238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_SLEEP_REQ_LEN		3	/* Fixed length */
196338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
196438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WNM-Sleep Management Response frame header */
196538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_wnm_sleep_resp {
196638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 category;				/* category of action frame (10) */
196738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 action;				/* WNM action: wnm-sleep request (17) */
196838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 token;				/* dialog token */
196938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 key_len;				/* key data length */
197038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 data[1];				/* Elements */
197138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
197238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_wnm_sleep_resp dot11_wnm_sleep_resp_t;
197338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_SLEEP_RESP_LEN	5	/* Fixed length */
197438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
197538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_SLEEP_SUBELEM_ID_GTK	0
197638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_SLEEP_SUBELEM_ID_IGTK	1
197738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
197838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_wnm_sleep_subelem_gtk {
197938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 sub_id;
198038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;
198138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 key_info;
198238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 key_length;
198338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 rsc[8];
198438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 key[1];
198538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
198638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_wnm_sleep_subelem_gtk dot11_wnm_sleep_subelem_gtk_t;
198738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_SLEEP_SUBELEM_GTK_FIXED_LEN	11	/* without sub_id, len, and key */
198838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_SLEEP_SUBELEM_GTK_MAX_LEN	43	/* without sub_id and len */
19896dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
199038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_wnm_sleep_subelem_igtk {
199138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 sub_id;
199238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;
199338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 key_id;
199438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 pn[6];
199538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 key[16];
199638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
199738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_wnm_sleep_subelem_igtk dot11_wnm_sleep_subelem_igtk_t;
199838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_SLEEP_SUBELEM_IGTK_LEN 24	/* Fixed length */
19996dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
200038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_wnm_sleep_ie {
200138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 id;				/* 93, DOT11_MNG_WNM_SLEEP_MODE_ID */
200238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;
200338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 act_type;
200438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 resp_status;
200538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 interval;
200638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
200738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_wnm_sleep_ie dot11_wnm_sleep_ie_t;
200838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_SLEEP_IE_LEN		4	/* Fixed length */
200938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
201038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_SLEEP_ACT_TYPE_ENTER	0
201138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_SLEEP_ACT_TYPE_EXIT	1
201238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
201338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_SLEEP_RESP_ACCEPT	0
201438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_SLEEP_RESP_UPDATE	1
201538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_SLEEP_RESP_DENY	2
201638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_SLEEP_RESP_DENY_TEMP	3
201738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_SLEEP_RESP_DENY_KEY	4
201838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_SLEEP_RESP_DENY_INUSE	5
201938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WNM_SLEEP_RESP_LAST	6
202038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
202138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* DMS Management Request frame header */
202238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_dms_req {
202338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 category;				/* category of action frame (10) */
202438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 action;				/* WNM action: dms request (23) */
202538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 token;				/* dialog token */
202638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 data[1];				/* Elements */
202738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
202838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_dms_req dot11_dms_req_t;
202938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_DMS_REQ_LEN		3	/* Fixed length */
203038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
203138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* DMS Management Response frame header */
203238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_dms_resp {
203338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 category;				/* category of action frame (10) */
203438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 action;				/* WNM action: dms request (24) */
203538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 token;				/* dialog token */
203638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 data[1];				/* Elements */
203738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
203838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_dms_resp dot11_dms_resp_t;
203938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_DMS_RESP_LEN		3	/* Fixed length */
204038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
204138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* DMS request information element */
204238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_dms_req_ie {
204338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 id;				/* 99, DOT11_MNG_DMS_REQUEST_ID */
204438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;
204538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 data[1];
204638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
204738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_dms_req_ie dot11_dms_req_ie_t;
204838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_DMS_REQ_IE_LEN		2	/* Fixed length */
20496dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
205038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* DMS response information element */
205138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_dms_resp_ie {
205238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 id;				/* 100, DOT11_MNG_DMS_RESPONSE_ID */
205338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;
205438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 data[1];
205538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
205638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_dms_resp_ie dot11_dms_resp_ie_t;
205738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_DMS_RESP_IE_LEN		2	/* Fixed length */
20586dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
205938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* DMS request descriptor */
206038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_dms_req_desc {
206138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 dms_id;
206238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;
206338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 type;
206438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 data[1];
206538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
206638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_dms_req_desc dot11_dms_req_desc_t;
206738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_DMS_REQ_DESC_LEN		3	/* Fixed length */
20686dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
206938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_DMS_REQ_TYPE_ADD		0
207038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_DMS_REQ_TYPE_REMOVE	1
207138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_DMS_REQ_TYPE_CHANGE	2
20726dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
207338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* DMS response status */
207438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_dms_resp_st {
207538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 dms_id;
207638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;
207738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 type;
207838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 lsc;
207938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 data[1];
208038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
208138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_dms_resp_st dot11_dms_resp_st_t;
208238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_DMS_RESP_STATUS_LEN	5	/* Fixed length */
20836dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
208438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_DMS_RESP_TYPE_ACCEPT	0
208538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_DMS_RESP_TYPE_DENY	1
208638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_DMS_RESP_TYPE_TERM	2
20876dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
208838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_DMS_RESP_LSC_UNSUPPORTED	0xFFFF
20896dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
20906dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_addba_req {
209138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 category;				/* category of action frame (3) */
209238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 action;				/* action: addba req */
209338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 token;				/* identifier */
209438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 addba_param_set;		/* parameter set */
209538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 timeout;				/* timeout in seconds */
209638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 start_seqnum;		/* starting sequence number */
20976dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
20986dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct dot11_addba_req dot11_addba_req_t;
209938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ADDBA_REQ_LEN		9	/* length of addba req frame */
21006dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
21016dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_addba_resp {
210238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 category;				/* category of action frame (3) */
210338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 action;				/* action: addba resp */
210438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 token;				/* identifier */
210538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 status;				/* status of add request */
210638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 addba_param_set;			/* negotiated parameter set */
210738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 timeout;				/* negotiated timeout in seconds */
21086dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
21096dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct dot11_addba_resp dot11_addba_resp_t;
211038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_ADDBA_RESP_LEN		9	/* length of addba resp frame */
21116dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
211238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* DELBA action parameters */
211338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_DELBA_PARAM_INIT_MASK	0x0800	/* initiator mask */
211438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_DELBA_PARAM_INIT_SHIFT	11	/* initiator shift */
211538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_DELBA_PARAM_TID_MASK	0xf000	/* tid mask */
211638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_DELBA_PARAM_TID_SHIFT	12	/* tid shift */
21176dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
21186dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_delba {
211938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 category;				/* category of action frame (3) */
212038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 action;				/* action: addba req */
212138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 delba_param_set;			/* paarmeter set */
212238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 reason;				/* reason for dellba */
21236dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
21246dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct dot11_delba dot11_delba_t;
212538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_DELBA_LEN			6	/* length of delba frame */
212638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
212738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* SA Query action field value */
212838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define SA_QUERY_REQUEST		0
212938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define SA_QUERY_RESPONSE		1
213038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
213138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* ************* 802.11r related definitions. ************* */
213238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
213338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Over-the-DS Fast Transition Request frame header */
213438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_ft_req {
213538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 category;			/* category of action frame (6) */
213638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 action;			/* action: ft req */
213738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 sta_addr[ETHER_ADDR_LEN];
213838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 tgt_ap_addr[ETHER_ADDR_LEN];
213938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 data[1];			/* Elements */
214038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
214138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_ft_req dot11_ft_req_t;
214238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_FT_REQ_FIXED_LEN 14
214338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
214438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Over-the-DS Fast Transition Response frame header */
214538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_ft_res {
214638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 category;			/* category of action frame (6) */
214738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 action;			/* action: ft resp */
214838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 sta_addr[ETHER_ADDR_LEN];
214938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 tgt_ap_addr[ETHER_ADDR_LEN];
215038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 status;			/* status code */
215138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 data[1];			/* Elements */
215238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
215338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_ft_res dot11_ft_res_t;
215438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_FT_RES_FIXED_LEN 16
215538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
215638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* RDE RIC Data Element. */
215738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_rde_ie {
215838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 id;			/* 11r, DOT11_MNG_RDE_ID */
215938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 length;
216038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 rde_id;			/* RDE identifier. */
216138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 rd_count;			/* Resource Descriptor Count. */
216238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 status;			/* Status Code. */
216338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
216438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_rde_ie dot11_rde_ie_t;
21656dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
216638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 11r - Size of the RDE (RIC Data Element) IE, including TLV header. */
216738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MNG_RDE_IE_LEN sizeof(dot11_rde_ie_t)
21686dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
21696dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
217038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* ************* 802.11k related definitions. ************* */
21716dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
217238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Radio measurements enabled capability ie */
21736dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
217438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RRM_CAP_LEN		5	/* length of rrm cap bitmap */
217538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define RCPI_IE_LEN 1
217638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define RSNI_IE_LEN 1
21776dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_rrm_cap_ie {
21786dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 cap[DOT11_RRM_CAP_LEN];
21796dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
21806dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct dot11_rrm_cap_ie dot11_rrm_cap_ie_t;
21816dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
218238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Bitmap definitions for cap ie */
218338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RRM_CAP_LINK			0
218438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RRM_CAP_NEIGHBOR_REPORT	1
218538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RRM_CAP_PARALLEL		2
218638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RRM_CAP_REPEATED		3
218738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RRM_CAP_BCN_PASSIVE	4
218838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RRM_CAP_BCN_ACTIVE	5
218938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RRM_CAP_BCN_TABLE		6
219038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RRM_CAP_BCN_REP_COND	7
219138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RRM_CAP_AP_CHANREP	16
21926dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
21936dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
219438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Operating Class (formerly "Regulatory Class") definitions */
219538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_OP_CLASS_NONE			255
21966dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
219738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct do11_ap_chrep {
219838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 id;
219938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;
220038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 reg;
220138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 chanlist[1];
220238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
220338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct do11_ap_chrep dot11_ap_chrep_t;
22046dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
220538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Radio Measurements action ids */
220638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RM_ACTION_RM_REQ		0	/* Radio measurement request */
220738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RM_ACTION_RM_REP		1	/* Radio measurement report */
220838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RM_ACTION_LM_REQ		2	/* Link measurement request */
220938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RM_ACTION_LM_REP		3	/* Link measurement report */
221038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RM_ACTION_NR_REQ		4	/* Neighbor report request */
221138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RM_ACTION_NR_REP		5	/* Neighbor report response */
22126dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
221338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Generic radio measurement action frame header */
22146dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_rm_action {
221538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 category;				/* category of action frame (5) */
221638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 action;				/* radio measurement action */
221738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 token;				/* dialog token */
22186dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 data[1];
22196dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
22206dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct dot11_rm_action dot11_rm_action_t;
22216dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#define DOT11_RM_ACTION_LEN 3
22226dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
22236dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_rmreq {
222438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 category;				/* category of action frame (5) */
222538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 action;				/* radio measurement action */
222638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 token;				/* dialog token */
222738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 reps;				/* no. of repetitions */
222838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 data[1];
22296dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
22306dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct dot11_rmreq dot11_rmreq_t;
223138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RMREQ_LEN	5
22326dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
22336dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_rm_ie {
22346dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 id;
22356dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 len;
22366dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 token;
22376dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 mode;
22386dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 type;
22396dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
22406dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct dot11_rm_ie dot11_rm_ie_t;
224138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RM_IE_LEN	5
22426dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
224338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Definitions for "mode" bits in rm req */
224438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RMREQ_MODE_PARALLEL	1
224538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RMREQ_MODE_ENABLE		2
224638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RMREQ_MODE_REQUEST	4
224738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RMREQ_MODE_REPORT		8
224838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RMREQ_MODE_DURMAND	0x10	/* Duration Mandatory */
22496dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
225038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Definitions for "mode" bits in rm rep */
225138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RMREP_MODE_LATE		1
225238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RMREP_MODE_INCAPABLE	2
225338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RMREP_MODE_REFUSED	4
22546dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
22556dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_rmreq_bcn {
22566dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 id;
22576dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 len;
22586dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 token;
22596dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 mode;
22606dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 type;
22616dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 reg;
22626dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 channel;
22636dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint16 interval;
22646dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint16 duration;
22656dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 bcn_mode;
226638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	bssid;
22676dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
22686dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct dot11_rmreq_bcn dot11_rmreq_bcn_t;
226938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RMREQ_BCN_LEN	18
22706dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
22716dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_rmrep_bcn {
22726dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 reg;
22736dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 channel;
22746dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint32 starttime[2];
22756dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint16 duration;
22766dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 frame_info;
22776dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 rcpi;
22786dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 rsni;
227938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	bssid;
22806dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 antenna_id;
22816dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint32 parent_tsf;
22826dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
22836dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct dot11_rmrep_bcn dot11_rmrep_bcn_t;
228438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RMREP_BCN_LEN	26
22856dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
228638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Beacon request measurement mode */
228738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RMREQ_BCN_PASSIVE	0
228838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RMREQ_BCN_ACTIVE	1
228938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RMREQ_BCN_TABLE	2
22906dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
229138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Sub-element IDs for Beacon Request */
22926dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#define DOT11_RMREQ_BCN_SSID_ID 0
22936dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#define DOT11_RMREQ_BCN_REPINFO_ID  1
22946dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#define DOT11_RMREQ_BCN_REPDET_ID   2
22956dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#define DOT11_RMREQ_BCN_REQUEST_ID  10
229638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RMREQ_BCN_APCHREP_ID  DOT11_MNG_AP_CHREP_ID
22976dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
229838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Reporting Detail element definition */
229938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RMREQ_BCN_REPDET_FIXED	0	/* Fixed length fields only */
230038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RMREQ_BCN_REPDET_REQUEST	1	/* + requested information elems */
230138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RMREQ_BCN_REPDET_ALL	2	/* All fields */
23026dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
230338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Sub-element IDs for Beacon Report */
230438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RMREP_BCN_FRM_BODY	1
23056dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
230638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Sub-element IDs for Frame Report */
230738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RMREP_FRAME_COUNT_REPORT 1
23086dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
230938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Channel load request */
231038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_rmreq_chanload {
231138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 id;
231238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;
231338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 token;
231438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 mode;
231538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 type;
231638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 reg;
231738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 channel;
231838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 interval;
231938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 duration;
232038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
232138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_rmreq_chanload dot11_rmreq_chanload_t;
232238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RMREQ_CHANLOAD_LEN	11
23236dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
232438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Channel load report */
232538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_rmrep_chanload {
232638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 reg;
232738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 channel;
232838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32 starttime[2];
232938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 duration;
233038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 channel_load;
233138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
233238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_rmrep_chanload dot11_rmrep_chanload_t;
233338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RMREP_CHANLOAD_LEN	13
23346dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
233538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Noise histogram request */
233638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_rmreq_noise {
233738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 id;
233838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;
233938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 token;
234038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 mode;
234138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 type;
23426dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 reg;
23436dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 channel;
234438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 interval;
234538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 duration;
23466dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
234738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_rmreq_noise dot11_rmreq_noise_t;
234838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RMREQ_NOISE_LEN 11
23496dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
235038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Noise histogram report */
235138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_rmrep_noise {
235238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 reg;
235338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 channel;
235438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32 starttime[2];
235538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 duration;
235638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 antid;
235738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 anpi;
235838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 ipi0_dens;
235938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 ipi1_dens;
236038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 ipi2_dens;
236138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 ipi3_dens;
236238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 ipi4_dens;
236338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 ipi5_dens;
236438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 ipi6_dens;
236538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 ipi7_dens;
236638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 ipi8_dens;
236738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 ipi9_dens;
236838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 ipi10_dens;
236938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
237038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_rmrep_noise dot11_rmrep_noise_t;
237138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RMREP_NOISE_LEN 25
237238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
237338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Frame request */
237438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_rmreq_frame {
237538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 id;
237638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;
237738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 token;
237838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 mode;
237938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 type;
238038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 reg;
238138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 channel;
238238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 interval;
238338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 duration;
238438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 req_type;
238538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	ta;
238638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
238738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_rmreq_frame dot11_rmreq_frame_t;
238838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RMREQ_FRAME_LEN 18
23896dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
239038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Frame report */
239138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_rmrep_frame {
239238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 reg;
239338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 channel;
239438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32 starttime[2];
239538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 duration;
239638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
239738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_rmrep_frame dot11_rmrep_frame_t;
239838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RMREP_FRAME_LEN 12
239938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
240038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Frame report entry */
240138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_rmrep_frmentry {
240238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	ta;
240338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	bssid;
240438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 phy_type;
240538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 avg_rcpi;
240638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 last_rsni;
240738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 last_rcpi;
240838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 ant_id;
240938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 frame_cnt;
241038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
241138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_rmrep_frmentry dot11_rmrep_frmentry_t;
241238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RMREP_FRMENTRY_LEN 19
241338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
241438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* STA statistics request */
241538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_rmreq_stat {
241638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 id;
241738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;
241838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 token;
241938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 mode;
242038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 type;
242138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	peer;
242238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 interval;
242338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 duration;
242438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 group_id;
242538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
242638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_rmreq_stat dot11_rmreq_stat_t;
242738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_RMREQ_STAT_LEN 16
24286dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
242938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* STA statistics report */
243038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_rmrep_stat {
243138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 duration;
243238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 group_id;
243338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
243438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_rmrep_stat dot11_rmrep_stat_t;
24356dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
243638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Transmit stream/category measurement request */
243738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_rmreq_tx_stream {
243838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 id;
243938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;
24406dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 token;
244138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 mode;
244238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 type;
244338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 interval;
244438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 duration;
244538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	peer;
244638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 traffic_id;
244738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 bin0_range;
24486dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
244938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_rmreq_tx_stream dot11_rmreq_tx_stream_t;
24506dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
245138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Transmit stream/category measurement report */
245238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_rmrep_tx_stream {
245338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32 starttime[2];
245438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 duration;
245538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	peer;
245638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 traffic_id;
245738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 reason;
245838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32 txmsdu_cnt;
245938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32 msdu_discarded_cnt;
246038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32 msdufailed_cnt;
246138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32 msduretry_cnt;
246238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32 cfpolls_lost_cnt;
246338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32 avrqueue_delay;
246438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32 avrtx_delay;
246538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 bin0_range;
246638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32 bin0;
246738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32 bin1;
246838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32 bin2;
246938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32 bin3;
247038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32 bin4;
247138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32 bin5;
247238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
247338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_rmrep_tx_stream dot11_rmrep_tx_stream_t;
247438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
247538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Measurement pause request */
247638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_rmreq_pause_time {
247738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 id;
247838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;
24796dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 token;
248038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 mode;
248138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 type;
248238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 pause_time;
24836dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
248438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_rmreq_pause_time dot11_rmreq_pause_time_t;
24856dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
24866dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
248738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Neighbor Report subelements ID (11k & 11v) */
248838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_NGBR_TSF_INFO_SE_ID	1
248938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_NGBR_CCS_SE_ID		2
249038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_NGBR_BSSTRANS_PREF_SE_ID	3
249138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_NGBR_BSS_TERM_DUR_SE_ID	4
249238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_NGBR_BEARING_SE_ID	5
24936dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
249438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Neighbor Report, BSS Transition Candidate Preference subelement */
249538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_ngbr_bsstrans_pref_se {
249638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 sub_id;
249738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;
249838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 preference;
249938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
250038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_ngbr_bsstrans_pref_se dot11_ngbr_bsstrans_pref_se_t;
250138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_NGBR_BSSTRANS_PREF_SE_LEN	1
25026dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
250338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Neighbor Report, BSS Termination Duration subelement */
250438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_ngbr_bss_term_dur_se {
250538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 sub_id;
250638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;
250738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 tsf[8];
250838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 duration;
250938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
251038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_ngbr_bss_term_dur_se dot11_ngbr_bss_term_dur_se_t;
251138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_NGBR_BSS_TERM_DUR_SE_LEN	10
251238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
251338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Neighbor Report BSSID Information Field */
251438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_NGBR_BI_REACHABILTY_UNKN	0x0002
251538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_NGBR_BI_REACHABILTY	0x0003
251638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_NGBR_BI_SEC		0x0004
251738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_NGBR_BI_KEY_SCOPE		0x0008
251838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_NGBR_BI_CAP		0x03f0
251938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_NGBR_BI_CAP_SPEC_MGMT	0x0010
252038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_NGBR_BI_CAP_QOS		0x0020
252138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_NGBR_BI_CAP_APSD		0x0040
252238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_NGBR_BI_CAP_RDIO_MSMT	0x0080
252338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_NGBR_BI_CAP_DEL_BA	0x0100
252438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_NGBR_BI_CAP_IMM_BA	0x0200
252538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_NGBR_BI_MOBILITY		0x0400
252638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_NGBR_BI_HT		0x0800
252738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
252838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Neighbor Report element (11k & 11v) */
252938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_neighbor_rep_ie {
253038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 id;
253138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;
253238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr bssid;
253338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32 bssid_info;
253438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 reg;		/* Operating class */
253538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 channel;
253638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 phytype;
253738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 data[1]; 		/* Variable size subelements */
253838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
253938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_neighbor_rep_ie dot11_neighbor_rep_ie_t;
254038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_NEIGHBOR_REP_IE_FIXED_LEN	13
25416dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
25426dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
254338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* MLME Enumerations */
254438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BSSTYPE_INFRASTRUCTURE		0	/* d11 infrastructure */
254538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BSSTYPE_INDEPENDENT		1	/* d11 independent */
254638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_BSSTYPE_ANY			2	/* d11 any BSS type */
254738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SCANTYPE_ACTIVE			0	/* d11 scan active */
254838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_SCANTYPE_PASSIVE			1	/* d11 scan passive */
25496dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
255038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Link Measurement */
255138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_lmreq {
255238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 category;				/* category of action frame (5) */
255338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 action;				/* radio measurement action */
255438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 token;				/* dialog token */
255538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 txpwr;				/* Transmit Power Used */
255638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 maxtxpwr;				/* Max Transmit Power */
255738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
255838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_lmreq dot11_lmreq_t;
255938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_LMREQ_LEN	5
256038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
256138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_lmrep {
256238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 category;				/* category of action frame (5) */
256338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 action;				/* radio measurement action */
256438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 token;				/* dialog token */
256538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	dot11_tpc_rep_t tpc;			/* TPC element */
256638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 rxant;				/* Receive Antenna ID */
256738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 txant;				/* Transmit Antenna ID */
256838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 rcpi;				/* RCPI */
256938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 rsni;				/* RSNI */
257038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
257138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_lmrep dot11_lmrep_t;
257238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_LMREP_LEN	11
257338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
257438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 802.11 BRCM "Compromise" Pre N constants */
257538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define PREN_PREAMBLE		24	/* green field preamble time */
257638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define PREN_MM_EXT		12	/* extra mixed mode preamble time */
257738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define PREN_PREAMBLE_EXT	4	/* extra preamble (multiply by unique_streams-1) */
257838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
257938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 802.11N PHY constants */
258038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define RIFS_11N_TIME		2	/* NPHY RIFS time */
258138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
258238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 802.11 HT PLCP format 802.11n-2009, sec 20.3.9.4.3
258338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * HT-SIG is composed of two 24 bit parts, HT-SIG1 and HT-SIG2
258438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt */
258538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* HT-SIG1 */
25866dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#define HT_SIG1_MCS_MASK        0x00007F
25876dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#define HT_SIG1_CBW             0x000080
25886dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#define HT_SIG1_HT_LENGTH       0xFFFF00
25896dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
259038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* HT-SIG2 */
25916dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#define HT_SIG2_SMOOTHING       0x000001
25926dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#define HT_SIG2_NOT_SOUNDING    0x000002
25936dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#define HT_SIG2_RESERVED        0x000004
25946dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#define HT_SIG2_AGGREGATION     0x000008
25956dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#define HT_SIG2_STBC_MASK       0x000030
25966dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#define HT_SIG2_STBC_SHIFT      4
25976dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#define HT_SIG2_FEC_CODING      0x000040
25986dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#define HT_SIG2_SHORT_GI        0x000080
25996dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#define HT_SIG2_ESS_MASK        0x000300
26006dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#define HT_SIG2_ESS_SHIFT       8
26016dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#define HT_SIG2_CRC             0x03FC00
26026dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#define HT_SIG2_TAIL            0x1C0000
26036dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
260438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* HT Timing-related parameters (802.11-2012, sec 20.3.6) */
260538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_T_LEG_PREAMBLE      16
260638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_T_L_SIG              4
260738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_T_SIG                8
260838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_T_LTF1               4
260938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_T_GF_LTF1            8
261038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_T_LTFs               4
261138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_T_STF                4
261238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_T_GF_STF             8
261338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_T_SYML               4
261438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
261538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_N_SERVICE           16       /* bits in SERVICE field */
261638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_N_TAIL               6       /* tail bits per BCC encoder */
261738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
261838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 802.11 A PHY constants */
261938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define APHY_SLOT_TIME          9       /* APHY slot time */
262038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define APHY_SIFS_TIME          16      /* APHY SIFS time */
262138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define APHY_DIFS_TIME          (APHY_SIFS_TIME + (2 * APHY_SLOT_TIME))  /* APHY DIFS time */
262238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define APHY_PREAMBLE_TIME      16      /* APHY preamble time */
262338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define APHY_SIGNAL_TIME        4       /* APHY signal time */
262438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define APHY_SYMBOL_TIME        4       /* APHY symbol time */
262538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define APHY_SERVICE_NBITS      16      /* APHY service nbits */
262638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define APHY_TAIL_NBITS         6       /* APHY tail nbits */
262738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define APHY_CWMIN              15      /* APHY cwmin */
262838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
262938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 802.11 B PHY constants */
263038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define BPHY_SLOT_TIME          20      /* BPHY slot time */
263138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define BPHY_SIFS_TIME          10      /* BPHY SIFS time */
263238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define BPHY_DIFS_TIME          50      /* BPHY DIFS time */
263338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define BPHY_PLCP_TIME          192     /* BPHY PLCP time */
263438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define BPHY_PLCP_SHORT_TIME    96      /* BPHY PLCP short time */
263538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define BPHY_CWMIN              31      /* BPHY cwmin */
263638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
263738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 802.11 G constants */
263838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_OFDM_SIGNAL_EXTENSION	6	/* d11 OFDM signal extension */
263938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
264038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define PHY_CWMAX		1023	/* PHY cwmax */
264138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
264238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	DOT11_MAXNUMFRAGS	16	/* max # fragments per MSDU */
264338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
264438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 802.11 VHT constants */
264538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
264638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef int vht_group_id_t;
264738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
264838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* for VHT-A1 */
264938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* SIG-A1 reserved bits */
265038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_SIGA1_CONST_MASK            0x800004
265138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
265238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_SIGA1_BW_MASK               0x000003
265338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_SIGA1_20MHZ_VAL             0x000000
265438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_SIGA1_40MHZ_VAL             0x000001
265538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_SIGA1_80MHZ_VAL             0x000002
265638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_SIGA1_160MHZ_VAL            0x000003
265738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
265838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_SIGA1_STBC                  0x000008
265938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
266038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_SIGA1_GID_MASK              0x0003f0
266138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_SIGA1_GID_SHIFT             4
266238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_SIGA1_GID_TO_AP             0x00
266338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_SIGA1_GID_NOT_TO_AP         0x3f
266438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_SIGA1_GID_MAX_GID           0x3f
266538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
266638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_SIGA1_NSTS_SHIFT_MASK_USER0 0x001C00
266738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_SIGA1_NSTS_SHIFT            10
266838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
266938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_SIGA1_PARTIAL_AID_MASK      0x3fe000
267038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_SIGA1_PARTIAL_AID_SHIFT     13
267138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
267238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_SIGA1_TXOP_PS_NOT_ALLOWED   0x400000
267338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
267438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* for VHT-A2 */
267538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_SIGA2_GI_NONE               0x000000
267638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_SIGA2_GI_SHORT              0x000001
267738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_SIGA2_GI_W_MOD10            0x000002
267838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_SIGA2_CODING_LDPC           0x000004
267938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_SIGA2_LDPC_EXTRA_OFDM_SYM   0x000008
268038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_SIGA2_BEAMFORM_ENABLE       0x000100
268138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_SIGA2_MCS_SHIFT             4
268238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
268338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_SIGA2_B9_RESERVED           0x000200
268438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_SIGA2_TAIL_MASK             0xfc0000
268538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_SIGA2_TAIL_VALUE            0x000000
268638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
268738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* VHT Timing-related parameters (802.11ac D4.0, sec 22.3.6) */
268838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_T_LEG_PREAMBLE      16
268938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_T_L_SIG              4
269038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_T_SIG_A              8
269138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_T_LTF                4
269238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_T_STF                4
269338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_T_SIG_B              4
269438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_T_SYML               4
269538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
269638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_N_SERVICE           16	/* bits in SERVICE field */
269738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_N_TAIL               6	/* tail bits per BCC encoder */
269838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
269938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
270038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* dot11Counters Table - 802.11 spec., Annex D */
27016dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct d11cnt {
270238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32		txfrag;		/* dot11TransmittedFragmentCount */
270338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32		txmulti;	/* dot11MulticastTransmittedFrameCount */
270438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32		txfail;		/* dot11FailedCount */
270538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32		txretry;	/* dot11RetryCount */
270638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32		txretrie;	/* dot11MultipleRetryCount */
270738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32		rxdup;		/* dot11FrameduplicateCount */
270838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32		txrts;		/* dot11RTSSuccessCount */
270938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32		txnocts;	/* dot11RTSFailureCount */
271038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32		txnoack;	/* dot11ACKFailureCount */
271138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32		rxfrag;		/* dot11ReceivedFragmentCount */
271238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32		rxmulti;	/* dot11MulticastReceivedFrameCount */
271338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32		rxcrc;		/* dot11FCSErrorCount */
271438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32		txfrmsnt;	/* dot11TransmittedFrameCount */
271538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32		rxundec;	/* dot11WEPUndecryptableCount */
27166dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} d11cnt_t;
27176dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
271838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* OUI for BRCM proprietary IE */
271938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define BRCM_PROP_OUI		"\x00\x90\x4C"	/* Broadcom proprietary OUI */
27206dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
27216dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
272238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* brcm syscap_ie cap */
272338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define BRCM_SYSCAP_WET_TUNNEL	0x0100	/* Device with WET_TUNNEL support */
27246dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
272538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* BRCM OUI: Used in the proprietary(221) IE in all broadcom devices */
272638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define BRCM_OUI		"\x00\x10\x18"	/* Broadcom OUI */
27276dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
272838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* BRCM info element */
27296dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct brcm_ie {
273038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	id;		/* IE ID, 221, DOT11_MNG_PROPR_ID */
273138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	len;		/* IE length */
273238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	oui[3];		/* Proprietary OUI, BRCM_OUI */
273338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	ver;		/* type/ver of this IE */
273438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	assoc;		/* # of assoc STAs */
273538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	flags;		/* misc flags */
273638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	flags1;		/* misc flags */
273738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16	amsdu_mtu_pref;	/* preferred A-MSDU MTU */
273838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
273938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef	struct brcm_ie brcm_ie_t;
274038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define BRCM_IE_LEN		11	/* BRCM IE length */
274138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define BRCM_IE_VER		2	/* BRCM IE version */
274238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define BRCM_IE_LEGACY_AES_VER	1	/* BRCM IE legacy AES version */
274338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
274438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* brcm_ie flags */
274538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	BRF_LZWDS		0x4	/* lazy wds enabled */
274638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	BRF_BLOCKACK		0x8	/* BlockACK capable */
274738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
274838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* brcm_ie flags1 */
274938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	BRF1_AMSDU		0x1	/* A-MSDU capable */
275038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define BRF1_WMEPS		0x4	/* AP is capable of handling WME + PS w/o APSD */
275138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define BRF1_PSOFIX		0x8	/* AP has fixed PS mode out-of-order packets */
275238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	BRF1_RX_LARGE_AGG	0x10	/* device can rx large aggregates */
275338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define BRF1_RFAWARE_DCS	0x20    /* RFAWARE dynamic channel selection (DCS) */
275438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define BRF1_SOFTAP		0x40    /* Configure as Broadcom SOFTAP */
275538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define BRF1_DWDS		0x80    /* DWDS capable */
275638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
275738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Vendor IE structure */
275838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct vndr_ie {
275938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uchar id;
276038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uchar len;
276138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uchar oui [3];
276238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uchar data [1]; 	/* Variable size data */
276338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
276438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct vndr_ie vndr_ie_t;
27656dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
276638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VNDR_IE_HDR_LEN		2	/* id + len field */
276738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VNDR_IE_MIN_LEN		3	/* size of the oui field */
276838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VNDR_IE_FIXED_LEN	(VNDR_IE_HDR_LEN + VNDR_IE_MIN_LEN)
27696dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
277038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VNDR_IE_MAX_LEN		255	/* vendor IE max length, without ID and len */
27716dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
277238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* BRCM PROP DEVICE PRIMARY MAC ADDRESS IE */
277338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct member_of_brcm_prop_ie {
277438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uchar id;
277538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uchar len;
277638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uchar oui[3];
277738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	type;           /* type inidicates what follows */
277838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr ea;   /* Device Primary MAC Adrress */
277938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
278038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct member_of_brcm_prop_ie member_of_brcm_prop_ie_t;
27816dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
278238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define MEMBER_OF_BRCM_PROP_IE_LEN		10	/* IE max length */
278338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define MEMBER_OF_BRCM_PROP_IE_TYPE		54
27846dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
278538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* BRCM Reliable Multicast IE */
278638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct relmcast_brcm_prop_ie {
27876dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uchar id;
27886dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uchar len;
278938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uchar oui[3];
279038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 type;           /* type inidicates what follows */
279138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr ea;   /* The ack sender's MAC Adrress */
279238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr mcast_ea;  /* The multicast MAC address */
279338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 updtmo; /* time interval(second) for client to send null packet to report its rssi */
27946dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
279538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct relmcast_brcm_prop_ie relmcast_brcm_prop_ie_t;
27966dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
279738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define RELMCAST_BRCM_PROP_IE_LEN	(sizeof(relmcast_brcm_prop_ie_t)-2)	/* IE length */
279838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define RELMCAST_BRCM_PROP_IE_TYPE	55
27996dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
280038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* ************* HT definitions. ************* */
280138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define MCSSET_LEN	16	/* 16-bits per 8-bit set to give 128-bits bitmap of MCS Index */
280238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define MAX_MCS_NUM	(128)	/* max mcs number = 128 */
28036dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
28046dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct ht_cap_ie {
280538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16	cap;
280638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	params;
280738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	supp_mcs[MCSSET_LEN];
280838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16	ext_htcap;
280938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32	txbf_cap;
281038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	as_cap;
28116dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
28126dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct ht_cap_ie ht_cap_ie_t;
28136dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
281438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_ht_cap_ie {
281538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	id;
281638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	len;
281738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	ht_cap_ie_t ht_cap;
281838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
281938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_ht_cap_ie dot11_ht_cap_ie_t;
28206dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
282138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* CAP IE: HT 1.0 spec. simply stole a 802.11 IE, we use our prop. IE until this is resolved */
282238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* the capability IE is primarily used to convey this nodes abilities */
28236dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct ht_prop_cap_ie {
282438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	id;		/* IE ID, 221, DOT11_MNG_PROPR_ID */
282538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	len;		/* IE length */
282638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	oui[3];		/* Proprietary OUI, BRCM_PROP_OUI */
282738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	type;           /* type inidicates what follows */
28286dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	ht_cap_ie_t cap_ie;
28296dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
28306dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct ht_prop_cap_ie ht_prop_cap_ie_t;
28316dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
283238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_PROP_IE_OVERHEAD	4	/* overhead bytes for prop oui ie */
283338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_IE_LEN		26	/* HT capability len (based on .11n d2.0) */
283438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_IE_TYPE		51
283538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
283638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_LDPC_CODING	0x0001	/* Support for rx of LDPC coded pkts */
283738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_40MHZ		0x0002  /* FALSE:20Mhz, TRUE:20/40MHZ supported */
283838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_MIMO_PS_MASK	0x000C  /* Mimo PS mask */
283938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_MIMO_PS_SHIFT	0x0002	/* Mimo PS shift */
284038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_MIMO_PS_OFF	0x0003	/* Mimo PS, no restriction */
284138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_MIMO_PS_RTS	0x0001	/* Mimo PS, send RTS/CTS around MIMO frames */
284238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_MIMO_PS_ON	0x0000	/* Mimo PS, MIMO disallowed */
284338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_GF		0x0010	/* Greenfield preamble support */
284438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_SHORT_GI_20	0x0020	/* 20MHZ short guard interval support */
284538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_SHORT_GI_40	0x0040	/* 40Mhz short guard interval support */
284638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_TX_STBC		0x0080	/* Tx STBC support */
284738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_RX_STBC_MASK	0x0300	/* Rx STBC mask */
284838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_RX_STBC_SHIFT	8	/* Rx STBC shift */
284938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_DELAYED_BA	0x0400	/* delayed BA support */
285038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_MAX_AMSDU	0x0800	/* Max AMSDU size in bytes , 0=3839, 1=7935 */
285138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
285238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_DSSS_CCK	0x1000	/* DSSS/CCK supported by the BSS */
285338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_PSMP		0x2000	/* Power Save Multi Poll support */
285438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_40MHZ_INTOLERANT 0x4000	/* 40MHz Intolerant */
285538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_LSIG_TXOP	0x8000	/* L-SIG TXOP protection support */
285638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
285738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_RX_STBC_NO		0x0	/* no rx STBC support */
285838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_RX_STBC_ONE_STREAM	0x1	/* rx STBC support of 1 spatial stream */
285938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_RX_STBC_TWO_STREAM	0x2	/* rx STBC support of 1-2 spatial streams */
286038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_RX_STBC_THREE_STREAM	0x3	/* rx STBC support of 1-3 spatial streams */
286138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
286238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
286338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_TXBF_CAP_IMPLICIT_TXBF_RX	0x1
286438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_TXBF_CAP_NDP_TX			0x8
286538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_TXBF_CAP_NDP_RX			0x10
286638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_TXBF_CAP_EXPLICIT_CSI		0x100
286738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_TXBF_CAP_EXPLICIT_NC_STEERING	0x200
286838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_TXBF_CAP_EXPLICIT_C_STEERING	0x400
286938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_TXBF_CAP_EXPLICIT_CSI_FB_MASK	0x1800
287038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_TXBF_CAP_EXPLICIT_CSI_FB_SHIFT	11
287138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_TXBF_CAP_EXPLICIT_NC_FB_MASK	0x6000
287238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_TXBF_CAP_EXPLICIT_NC_FB_SHIFT	13
287338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_TXBF_CAP_EXPLICIT_C_FB_MASK	0x18000
287438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_TXBF_CAP_EXPLICIT_C_FB_SHIFT	15
287538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_TXBF_CAP_CSI_BFR_ANT_SHIFT	19
287638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_TXBF_CAP_NC_BFR_ANT_SHIFT	21
287738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_TXBF_CAP_C_BFR_ANT_SHIFT		23
287838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_TXBF_CAP_C_BFR_ANT_MASK		0x1800000
287938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
288038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_TXBF_CAP_CHAN_ESTIM_SHIFT	27
288138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_TXBF_CAP_CHAN_ESTIM_MASK		0x18000000
288238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
288338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_TXBF_FB_TYPE_NONE 	0
288438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_TXBF_FB_TYPE_DELAYED 	1
288538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_TXBF_FB_TYPE_IMMEDIATE 	2
288638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_TXBF_FB_TYPE_BOTH 	3
288738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
288838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_TX_BF_CAP_EXPLICIT_CSI_FB_MASK	0x400
288938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_TX_BF_CAP_EXPLICIT_CSI_FB_SHIFT	10
289038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_TX_BF_CAP_EXPLICIT_COMPRESSED_FB_MASK 0x18000
289138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_TX_BF_CAP_EXPLICIT_COMPRESSED_FB_SHIFT 15
289238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
289338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_MAX_MPDU		11454	/* max mpdu size for now (bytes) */
289438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_MPDU_MSDU_DELTA	56		/* Difference in spec - vht mpdu, amsdu len */
289538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Max AMSDU len - per spec */
289638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_MAX_AMSDU		(VHT_MAX_MPDU - VHT_MPDU_MSDU_DELTA)
289738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
289838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_MAX_AMSDU		7935	/* max amsdu size (bytes) per the HT spec */
289938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_MIN_AMSDU		3835	/* min amsdu size (bytes) per the HT spec */
290038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
290138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_PARAMS_RX_FACTOR_MASK	0x03	/* ampdu rcv factor mask */
290238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_PARAMS_DENSITY_MASK		0x1C	/* ampdu density mask */
290338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_PARAMS_DENSITY_SHIFT	2	/* ampdu density shift */
290438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
290538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* HT/AMPDU specific define */
290638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define AMPDU_MAX_MPDU_DENSITY  7       /* max mpdu density; in 1/4 usec units */
290738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define AMPDU_DENSITY_NONE      0       /* No density requirement */
290838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define AMPDU_DENSITY_1over4_US 1       /* 1/4 us density */
290938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define AMPDU_DENSITY_1over2_US 2       /* 1/2 us density */
291038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define AMPDU_DENSITY_1_US      3       /*   1 us density */
291138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define AMPDU_DENSITY_2_US      4       /*   2 us density */
291238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define AMPDU_DENSITY_4_US      5       /*   4 us density */
291338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define AMPDU_DENSITY_8_US      6       /*   8 us density */
291438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define AMPDU_DENSITY_16_US     7       /*  16 us density */
291538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define AMPDU_RX_FACTOR_8K      0       /* max rcv ampdu len (8kb) */
291638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define AMPDU_RX_FACTOR_16K     1       /* max rcv ampdu len (16kb) */
291738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define AMPDU_RX_FACTOR_32K     2       /* max rcv ampdu len (32kb) */
291838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define AMPDU_RX_FACTOR_64K     3       /* max rcv ampdu len (64kb) */
291938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define AMPDU_RX_FACTOR_BASE    8*1024  /* ampdu factor base for rx len */
292038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
292138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define AMPDU_DELIMITER_LEN	4	/* length of ampdu delimiter */
292238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define AMPDU_DELIMITER_LEN_MAX	63	/* max length of ampdu delimiter(enforced in HW) */
292338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
292438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_EXT_PCO			0x0001
292538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_EXT_PCO_TTIME_MASK	0x0006
292638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_EXT_PCO_TTIME_SHIFT	1
292738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_EXT_MCS_FEEDBACK_MASK	0x0300
292838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_EXT_MCS_FEEDBACK_SHIFT	8
292938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_EXT_HTC			0x0400
293038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CAP_EXT_RD_RESP		0x0800
29316dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
29326dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct ht_add_ie {
293338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	ctl_ch;			/* control channel number */
293438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	byte1;			/* ext ch,rec. ch. width, RIFS support */
293538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16	opmode;			/* operation mode */
293638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16	misc_bits;		/* misc bits */
293738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	basic_mcs[MCSSET_LEN];  /* required MCS set */
29386dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
29396dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct ht_add_ie ht_add_ie_t;
29406dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
294138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* ADD IE: HT 1.0 spec. simply stole a 802.11 IE, we use our prop. IE until this is resolved */
294238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* the additional IE is primarily used to convey the current BSS configuration */
29436dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct ht_prop_add_ie {
294438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	id;		/* IE ID, 221, DOT11_MNG_PROPR_ID */
294538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	len;		/* IE length */
294638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	oui[3];		/* Proprietary OUI, BRCM_PROP_OUI */
294738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	type;		/* indicates what follows */
29486dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	ht_add_ie_t add_ie;
29496dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
29506dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct ht_prop_add_ie ht_prop_add_ie_t;
29516dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
295238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_ADD_IE_LEN	22
295338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_ADD_IE_TYPE	52
295438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
295538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* byte1 defn's */
295638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_BW_ANY		0x04	/* set, STA can use 20 or 40MHz */
295738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_RIFS_PERMITTED     	0x08	/* RIFS allowed */
295838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
295938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* opmode defn's */
296038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_OPMODE_MASK	        0x0003	/* protection mode mask */
296138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_OPMODE_SHIFT		0	/* protection mode shift */
296238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_OPMODE_PURE		0x0000	/* protection mode PURE */
296338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_OPMODE_OPTIONAL	0x0001	/* protection mode optional */
296438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_OPMODE_HT20IN40	0x0002	/* protection mode 20MHz HT in 40MHz BSS */
296538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_OPMODE_MIXED	0x0003	/* protection mode Mixed Mode */
296638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_OPMODE_NONGF	0x0004	/* protection mode non-GF */
296738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11N_TXBURST		0x0008	/* Tx burst limit */
296838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11N_OBSS_NONHT	0x0010	/* OBSS Non-HT STA present */
296938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
297038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* misc_bites defn's */
297138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_BASIC_STBC_MCS	0x007f	/* basic STBC MCS */
297238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_DUAL_STBC_PROT	0x0080	/* Dual STBC Protection */
297338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_SECOND_BCN		0x0100	/* Secondary beacon support */
297438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_LSIG_TXOP		0x0200	/* L-SIG TXOP Protection full support */
297538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_PCO_ACTIVE		0x0400	/* PCO active */
297638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_PCO_PHASE		0x0800	/* PCO phase */
297738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_DUALCTS_PROTECTION	0x0080	/* DUAL CTS protection needed */
297838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
297938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Tx Burst Limits */
298038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11N_2G_TXBURST_LIMIT	6160	/* 2G band Tx burst limit per 802.11n Draft 1.10 (usec) */
298138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11N_5G_TXBURST_LIMIT	3080	/* 5G band Tx burst limit per 802.11n Draft 1.10 (usec) */
298238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
298338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Macros for opmode */
298438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define GET_HT_OPMODE(add_ie)		((ltoh16_ua(&add_ie->opmode) & HT_OPMODE_MASK) \
29856dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt					>> HT_OPMODE_SHIFT)
298638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_MIXEDMODE_PRESENT(add_ie)	((ltoh16_ua(&add_ie->opmode) & HT_OPMODE_MASK) \
298738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt					== HT_OPMODE_MIXED)	/* mixed mode present */
298838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_HT20_PRESENT(add_ie)	((ltoh16_ua(&add_ie->opmode) & HT_OPMODE_MASK) \
298938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt					== HT_OPMODE_HT20IN40)	/* 20MHz HT present */
299038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_OPTIONAL_PRESENT(add_ie)	((ltoh16_ua(&add_ie->opmode) & HT_OPMODE_MASK) \
299138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt					== HT_OPMODE_OPTIONAL)	/* Optional protection present */
299238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_USE_PROTECTION(add_ie)	(HT_HT20_PRESENT((add_ie)) || \
299338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt					HT_MIXEDMODE_PRESENT((add_ie))) /* use protection */
299438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_NONGF_PRESENT(add_ie)	((ltoh16_ua(&add_ie->opmode) & HT_OPMODE_NONGF) \
299538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt					== HT_OPMODE_NONGF)	/* non-GF present */
299638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11N_TXBURST_PRESENT(add_ie)	((ltoh16_ua(&add_ie->opmode) & DOT11N_TXBURST) \
299738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt					== DOT11N_TXBURST)	/* Tx Burst present */
299838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11N_OBSS_NONHT_PRESENT(add_ie)	((ltoh16_ua(&add_ie->opmode) & DOT11N_OBSS_NONHT) \
299938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt					== DOT11N_OBSS_NONHT)	/* OBSS Non-HT present */
30006dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
30016dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct obss_params {
300238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16	passive_dwell;
300338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16	active_dwell;
300438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16	bss_widthscan_interval;
300538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16	passive_total;
300638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16	active_total;
300738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16	chanwidth_transition_dly;
300838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16	activity_threshold;
30096dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
30106dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct obss_params obss_params_t;
30116dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
30126dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_obss_ie {
301338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	id;
301438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	len;
30156dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	obss_params_t obss_params;
30166dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
30176dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct dot11_obss_ie dot11_obss_ie_t;
301838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_OBSS_SCAN_IE_LEN	sizeof(obss_params_t)	/* HT OBSS len (based on 802.11n d3.0) */
301938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
302038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* HT control field */
302138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CTRL_LA_TRQ		0x00000002	/* sounding request */
302238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CTRL_LA_MAI		0x0000003C	/* MCS request or antenna selection indication */
302338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CTRL_LA_MAI_SHIFT	2
302438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CTRL_LA_MAI_MRQ	0x00000004	/* MCS request */
302538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CTRL_LA_MAI_MSI	0x00000038	/* MCS request sequence identifier */
302638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CTRL_LA_MFSI		0x000001C0	/* MFB sequence identifier */
302738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CTRL_LA_MFSI_SHIFT	6
302838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CTRL_LA_MFB_ASELC	0x0000FE00	/* MCS feedback, antenna selection command/data */
302938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CTRL_LA_MFB_ASELC_SH	9
303038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CTRL_LA_ASELC_CMD	0x00000C00	/* ASEL command */
303138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CTRL_LA_ASELC_DATA	0x0000F000	/* ASEL data */
303238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CTRL_CAL_POS		0x00030000	/* Calibration position */
303338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CTRL_CAL_SEQ		0x000C0000	/* Calibration sequence */
303438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CTRL_CSI_STEERING	0x00C00000	/* CSI/Steering */
303538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CTRL_CSI_STEER_SHIFT	22
303638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CTRL_CSI_STEER_NFB	0		/* no fedback required */
303738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CTRL_CSI_STEER_CSI	1		/* CSI, H matrix */
303838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CTRL_CSI_STEER_NCOM	2		/* non-compressed beamforming */
303938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CTRL_CSI_STEER_COM	3		/* compressed beamforming */
304038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CTRL_NDP_ANNOUNCE	0x01000000	/* NDP announcement */
304138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CTRL_AC_CONSTRAINT	0x40000000	/* AC Constraint */
304238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_CTRL_RDG_MOREPPDU	0x80000000	/* RDG/More PPDU */
304338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
304438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_OPMODE_OPTIONAL	0x0001	/* protection mode optional */
304538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_OPMODE_HT20IN40	0x0002	/* protection mode 20MHz HT in 40MHz BSS */
304638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_OPMODE_MIXED	0x0003	/* protection mode Mixed Mode */
304738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HT_OPMODE_NONGF	0x0004	/* protection mode non-GF */
304838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11N_TXBURST		0x0008	/* Tx burst limit */
304938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11N_OBSS_NONHT	0x0010	/* OBSS Non-HT STA present */
305038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
305138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* ************* VHT definitions. ************* */
30526dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
305338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/*
305438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * VHT Capabilites IE (sec 8.4.2.160)
305538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt */
30566dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
305738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct vht_cap_ie {
305838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32  vht_cap_info;
305938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	/* supported MCS set - 64 bit field */
306038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16	rx_mcs_map;
306138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16  rx_max_rate;
306238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16  tx_mcs_map;
306338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16	tx_max_rate;
306438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
306538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct vht_cap_ie vht_cap_ie_t;
306638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
306738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 4B cap_info + 8B supp_mcs */
306838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_IE_LEN 12
306938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
307038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* VHT Capabilities Info field - 32bit - in VHT Cap IE */
307138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_INFO_MAX_MPDU_LEN_MASK          0x00000003
307238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_INFO_SUPP_CHAN_WIDTH_MASK       0x0000000c
307338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_INFO_LDPC                       0x00000010
307438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_INFO_SGI_80MHZ                  0x00000020
307538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_INFO_SGI_160MHZ                 0x00000040
307638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_INFO_TX_STBC                    0x00000080
307738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_INFO_RX_STBC_MASK               0x00000700
307838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_INFO_RX_STBC_SHIFT              8
307938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_INFO_SU_BEAMFMR                 0x00000800
308038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_INFO_SU_BEAMFMEE                0x00001000
308138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_INFO_NUM_BMFMR_ANT_MASK         0x0000e000
308238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_INFO_NUM_BMFMR_ANT_SHIFT        13
308338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_INFO_NUM_SOUNDING_DIM_MASK      0x00070000
308438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_INFO_NUM_SOUNDING_DIM_SHIFT     16
308538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_INFO_MU_BEAMFMR                 0x00080000
308638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_INFO_MU_BEAMFMEE                0x00100000
308738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_INFO_TXOPPS                     0x00200000
308838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_INFO_HTCVHT                     0x00400000
308938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_INFO_AMPDU_MAXLEN_EXP_MASK      0x03800000
309038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_INFO_AMPDU_MAXLEN_EXP_SHIFT     23
309138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_INFO_LINK_ADAPT_CAP_MASK        0x0c000000
309238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_INFO_LINK_ADAPT_CAP_SHIFT       26
309338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
309438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* VHT Supported MCS Set - 64-bit - in VHT Cap IE */
309538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_SUPP_MCS_RX_HIGHEST_RATE_MASK   0x1fff
309638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_SUPP_MCS_RX_HIGHEST_RATE_SHIFT  0
309738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
309838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_SUPP_MCS_TX_HIGHEST_RATE_MASK   0x1fff
309938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_SUPP_MCS_TX_HIGHEST_RATE_SHIFT  0
310038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
310138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_MCS_MAP_0_7                     0
310238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_MCS_MAP_0_8                     1
310338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_MCS_MAP_0_9                     2
310438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_MCS_MAP_NONE                    3
310538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_MCS_MAP_S                       2 /* num bits for 1-stream */
310638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_MCS_MAP_M                       0x3 /* mask for 1-stream */
310738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* assumes VHT_CAP_MCS_MAP_NONE is 3 and 2 bits are used for encoding */
310838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_MCS_MAP_NONE_ALL                0xffff
310938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* mcsmap with MCS0-9 for Nss = 3 */
311038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_MCS_MAP_0_9_NSS3 \
311138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	        ((VHT_CAP_MCS_MAP_0_9 << VHT_MCS_MAP_GET_SS_IDX(1)) | \
311238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	         (VHT_CAP_MCS_MAP_0_9 << VHT_MCS_MAP_GET_SS_IDX(2)) | \
311338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	         (VHT_CAP_MCS_MAP_0_9 << VHT_MCS_MAP_GET_SS_IDX(3)))
311438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
311538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_MCS_MAP_NSS_MAX                 8
311638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
311738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* get mcsmap with given mcs for given nss streams */
311838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_CAP_MCS_MAP_CREATE(mcsmap, nss, mcs) \
311938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	do { \
312038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt		int i; \
312138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt		for (i = 1; i <= nss; i++) { \
312238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt			VHT_MCS_MAP_SET_MCS_PER_SS(i, mcs, mcsmap); \
312338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt		} \
312438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	} while (0)
312538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
312638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Map the mcs code to mcs bit map */
312738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_MCS_CODE_TO_MCS_MAP(mcs_code) \
312838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	((mcs_code == VHT_CAP_MCS_MAP_0_7) ? 0xff : \
312938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	 (mcs_code == VHT_CAP_MCS_MAP_0_8) ? 0x1ff : \
313038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	 (mcs_code == VHT_CAP_MCS_MAP_0_9) ? 0x3ff : 0)
313138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
313238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Map the mcs bit map to mcs code */
313338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_MCS_MAP_TO_MCS_CODE(mcs_map) \
313438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	((mcs_map == 0xff)  ? VHT_CAP_MCS_MAP_0_7 : \
313538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	 (mcs_map == 0x1ff) ? VHT_CAP_MCS_MAP_0_8 : \
313638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	 (mcs_map == 0x3ff) ? VHT_CAP_MCS_MAP_0_9 : VHT_CAP_MCS_MAP_NONE)
313738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
313838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* VHT Capabilities Supported Channel Width */
313938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef enum vht_cap_chan_width {
314038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	VHT_CAP_CHAN_WIDTH_SUPPORT_MANDATORY = 0x00,
314138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	VHT_CAP_CHAN_WIDTH_SUPPORT_160       = 0x04,
314238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	VHT_CAP_CHAN_WIDTH_SUPPORT_160_8080  = 0x08
314338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} vht_cap_chan_width_t;
314438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
314538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* VHT Capabilities Supported max MPDU LEN (sec 8.4.2.160.2) */
314638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef enum vht_cap_max_mpdu_len {
314738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	VHT_CAP_MPDU_MAX_4K     = 0x00,
314838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	VHT_CAP_MPDU_MAX_8K     = 0x01,
314938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	VHT_CAP_MPDU_MAX_11K    = 0x02
315038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} vht_cap_max_mpdu_len_t;
315138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
315238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Maximum MPDU Length byte counts for the VHT Capabilities advertised limits */
315338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_MPDU_LIMIT_4K        3895
315438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_MPDU_LIMIT_8K        7991
315538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_MPDU_LIMIT_11K      11454
31566dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
31576dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
315838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/*
315938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * VHT Operation IE (sec 8.4.2.161)
316038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt */
31616dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
316238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct vht_op_ie {
316338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	chan_width;
316438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	chan1;
316538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	chan2;
316638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16	supp_mcs;  /*  same def as above in vht cap */
316738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
316838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct vht_op_ie vht_op_ie_t;
31696dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
317038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 3B VHT Op info + 2B Basic MCS */
317138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_OP_IE_LEN 5
31726dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
317338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef enum vht_op_chan_width {
317438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	VHT_OP_CHAN_WIDTH_20_40	= 0,
317538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	VHT_OP_CHAN_WIDTH_80	= 1,
317638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	VHT_OP_CHAN_WIDTH_160	= 2,
317738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	VHT_OP_CHAN_WIDTH_80_80	= 3
317838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} vht_op_chan_width_t;
31796dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
318038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* AID length */
318138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define AID_IE_LEN		2
318238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/*
318338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * BRCM vht features IE header
318438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * The header if the fixed part of the IE
318538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * On the 5GHz band this is the entire IE,
318638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * on 2.4GHz the VHT IEs as defined in the 802.11ac
318738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * specification follows
318838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt *
318938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt *
319038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * VHT features rates  bitmap.
319138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * Bit0:		5G MCS 0-9 BW 160MHz
319238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * Bit1:		5G MCS 0-9 support BW 80MHz
319338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * Bit2:		5G MCS 0-9 support BW 20MHz
319438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * Bit3:		2.4G MCS 0-9 support BW 20MHz
319538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * Bits:4-7	Reserved for future use
319638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt *
319738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt */
319838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_FEATURES_IE_TYPE	0x4
319938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct vht_features_ie_hdr {
320038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 oui[3];		/* Proprietary OUI, BRCM_PROP_OUI */
320138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 type;		/* type of this IE = 4 */
320238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 rate_mask;	/* VHT rate mask */
320338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
320438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct vht_features_ie_hdr vht_features_ie_hdr_t;
320538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
320638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Def for rx & tx basic mcs maps - ea ss num has 2 bits of info */
320738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_MCS_MAP_GET_SS_IDX(nss) (((nss)-1) * VHT_CAP_MCS_MAP_S)
320838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_MCS_MAP_GET_MCS_PER_SS(nss, mcsMap) \
320938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	(((mcsMap) >> VHT_MCS_MAP_GET_SS_IDX(nss)) & VHT_CAP_MCS_MAP_M)
321038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_MCS_MAP_SET_MCS_PER_SS(nss, numMcs, mcsMap) \
321138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	do { \
321238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	 (mcsMap) &= (~(VHT_CAP_MCS_MAP_M << VHT_MCS_MAP_GET_SS_IDX(nss))); \
321338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	 (mcsMap) |= (((numMcs) & VHT_CAP_MCS_MAP_M) << VHT_MCS_MAP_GET_SS_IDX(nss)); \
321438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	} while (0)
321538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VHT_MCS_SS_SUPPORTED(nss, mcsMap) \
321638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt		 (VHT_MCS_MAP_GET_MCS_PER_SS((nss), (mcsMap)) != VHT_CAP_MCS_MAP_NONE)
321738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
321838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
321938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* ************* WPA definitions. ************* */
322038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WPA_OUI			"\x00\x50\xF2"	/* WPA OUI */
322138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WPA_OUI_LEN		3		/* WPA OUI length */
322238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WPA_OUI_TYPE		1
322338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WPA_VERSION		1		/* WPA version */
322438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WPA2_OUI		"\x00\x0F\xAC"	/* WPA2 OUI */
322538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WPA2_OUI_LEN		3		/* WPA2 OUI length */
322638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WPA2_VERSION		1		/* WPA2 version */
322738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WPA2_VERSION_LEN	2		/* WAP2 version length */
322838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
322938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* ************* WPS definitions. ************* */
323038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WPS_OUI			"\x00\x50\xF2"	/* WPS OUI */
323138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WPS_OUI_LEN		3		/* WPS OUI length */
323238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WPS_OUI_TYPE		4
323338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
323438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* ************* WFA definitions. ************* */
323538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
323638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#ifdef P2P_IE_OVRD
323738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WFA_OUI			MAC_OUI
323838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#else
323938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WFA_OUI			"\x50\x6F\x9A"	/* WFA OUI */
324038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#endif /* P2P_IE_OVRD */
324138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WFA_OUI_LEN		3		/* WFA OUI length */
324238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#ifdef P2P_IE_OVRD
324338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WFA_OUI_TYPE_P2P	MAC_OUI_TYPE_P2P
324438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#else
324538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WFA_OUI_TYPE_TPC	8
324638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WFA_OUI_TYPE_P2P	9
324738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#endif
32486dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
324938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WFA_OUI_TYPE_TPC	8
325038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#ifdef WLTDLS
325138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WFA_OUI_TYPE_TPQ	4	/* WFD Tunneled Probe ReQuest */
325238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WFA_OUI_TYPE_TPS	5	/* WFD Tunneled Probe ReSponse */
325338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WFA_OUI_TYPE_WFD	10
325438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#endif /* WTDLS */
325538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WFA_OUI_TYPE_HS20	0x10
325638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
325738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* RSN authenticated key managment suite */
325838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define RSN_AKM_NONE		0	/* None (IBSS) */
325938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define RSN_AKM_UNSPECIFIED	1	/* Over 802.1x */
326038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define RSN_AKM_PSK		2	/* Pre-shared Key */
326138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define RSN_AKM_FBT_1X		3	/* Fast Bss transition using 802.1X */
326238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define RSN_AKM_FBT_PSK		4	/* Fast Bss transition using Pre-shared Key */
326338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define RSN_AKM_MFP_1X		5	/* SHA256 key derivation, using 802.1X */
326438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define RSN_AKM_MFP_PSK		6	/* SHA256 key derivation, using Pre-shared Key */
326538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define RSN_AKM_TPK			7	/* TPK(TDLS Peer Key) handshake */
326638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
326738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Key related defines */
326838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MAX_DEFAULT_KEYS	4	/* number of default keys */
326938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MAX_KEY_SIZE	32	/* max size of any key */
327038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_MAX_IV_SIZE	16	/* max size of any IV */
327138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_EXT_IV_FLAG	(1<<5)	/* flag to indicate IV is > 4 bytes */
327238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define DOT11_WPA_KEY_RSC_LEN   8       /* WPA RSC key len */
327338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
327438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WEP1_KEY_SIZE		5	/* max size of any WEP key */
327538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WEP1_KEY_HEX_SIZE	10	/* size of WEP key in hex. */
327638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WEP128_KEY_SIZE		13	/* max size of any WEP key */
327738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WEP128_KEY_HEX_SIZE	26	/* size of WEP key in hex. */
327838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define TKIP_MIC_SIZE		8	/* size of TKIP MIC */
327938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define TKIP_EOM_SIZE		7	/* max size of TKIP EOM */
328038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define TKIP_EOM_FLAG		0x5a	/* TKIP EOM flag byte */
328138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define TKIP_KEY_SIZE		32	/* size of any TKIP key */
328238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define TKIP_MIC_AUTH_TX	16	/* offset to Authenticator MIC TX key */
328338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define TKIP_MIC_AUTH_RX	24	/* offset to Authenticator MIC RX key */
328438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define TKIP_MIC_SUP_RX		TKIP_MIC_AUTH_TX	/* offset to Supplicant MIC RX key */
328538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define TKIP_MIC_SUP_TX		TKIP_MIC_AUTH_RX	/* offset to Supplicant MIC TX key */
328638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define AES_KEY_SIZE		16	/* size of AES key */
328738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define AES_MIC_SIZE		8	/* size of AES MIC */
328838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define BIP_KEY_SIZE		16	/* size of BIP key */
328938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define BIP_MIC_SIZE		8   /* sizeof BIP MIC */
329038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
329138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WCN */
329238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WCN_OUI			"\x00\x50\xf2"	/* WCN OUI */
329338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WCN_TYPE		4	/* WCN type */
329438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
329538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
329638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 802.11r protocol definitions */
329738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
329838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Mobility Domain IE */
32996dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_mdid_ie {
33006dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 id;
33016dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 len;
330238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 mdid;		/* Mobility Domain Id */
33036dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 cap;
33046dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
33056dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct dot11_mdid_ie dot11_mdid_ie_t;
33066dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
330738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FBT_MDID_CAP_OVERDS	0x01	/* Fast Bss transition over the DS support */
330838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define FBT_MDID_CAP_RRP	0x02	/* Resource request protocol support */
33096dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
331038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Fast Bss Transition IE */
33116dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_ft_ie {
33126dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 id;
33136dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 len;
331438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 mic_control;		/* Mic Control */
33156dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 mic[16];
33166dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 anonce[32];
33176dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 snonce[32];
33186dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
33196dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct dot11_ft_ie dot11_ft_ie_t;
33206dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
332138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define TIE_TYPE_RESERVED		0
332238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define TIE_TYPE_REASSOC_DEADLINE	1
332338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define TIE_TYPE_KEY_LIEFTIME		2
332438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define TIE_TYPE_ASSOC_COMEBACK		3
332538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_timeout_ie {
332638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 id;
332738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;
332838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 type;		/* timeout interval type */
332938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32 value;		/* timeout interval value */
333038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
333138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct dot11_timeout_ie dot11_timeout_ie_t;
33326dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
333338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* GTK ie */
33346dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry ShmidtBWL_PRE_PACKED_STRUCT struct dot11_gtk_ie {
33356dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 id;
33366dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 len;
33376dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint16 key_info;
33386dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 key_len;
33396dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 rsc[8];
33406dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt	uint8 data[1];
33416dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt} BWL_POST_PACKED_STRUCT;
33426dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidttypedef struct dot11_gtk_ie dot11_gtk_ie_t;
33436dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
334438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Management MIC ie */
334538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct mmic_ie {
334638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8   id;					/* IE ID: 0xDD */
334738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8   len;				/* IE length */
334838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16  key_id;				/* key id */
334938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8   ipn[6];				/* ipn */
335038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8   mic[BIP_MIC_SIZE];	/* mic */
335138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
335238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct mmic_ie mmic_ie_t;
335338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
335438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define BSSID_INVALID           "\x00\x00\x00\x00\x00\x00"
335538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define BSSID_BROADCAST         "\xFF\xFF\xFF\xFF\xFF\xFF"
33566dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
33576dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
335838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* ************* WMM Parameter definitions. ************* */
335938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WMM_OUI			"\x00\x50\xF2"	/* WNN OUI */
336038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WMM_OUI_LEN		3		/* WMM OUI length */
336138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WMM_OUI_TYPE	2		/* WMM OUT type */
336238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WMM_VERSION		1
336338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WMM_VERSION_LEN	1
336438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
336538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WMM OUI subtype */
336638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WMM_OUI_SUBTYPE_PARAMETER	1
336738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WMM_PARAMETER_IE_LEN		24
336838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
336938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Link Identifier Element */
337038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct link_id_ie {
337138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 id;
337238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;
337338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	bssid;
337438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	tdls_init_mac;
337538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	tdls_resp_mac;
337638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
337738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct link_id_ie link_id_ie_t;
337838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define TDLS_LINK_ID_IE_LEN		18
337938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
338038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Link Wakeup Schedule Element */
338138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wakeup_sch_ie {
338238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 id;
338338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;
338438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32 offset;			/* in ms between TSF0 and start of 1st Awake Window */
338538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32 interval;		/* in ms bwtween the start of 2 Awake Windows */
338638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32 awake_win_slots;	/* in backof slots, duration of Awake Window */
338738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32 max_wake_win;	/* in ms, max duration of Awake Window */
338838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 idle_cnt;		/* number of consecutive Awake Windows */
338938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
339038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wakeup_sch_ie wakeup_sch_ie_t;
339138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define TDLS_WAKEUP_SCH_IE_LEN		18
339238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
339338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Channel Switch Timing Element */
339438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct channel_switch_timing_ie {
339538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 id;
339638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;
339738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 switch_time;		/* in ms, time to switch channels */
339838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 switch_timeout;	/* in ms */
339938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
340038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct channel_switch_timing_ie channel_switch_timing_ie_t;
340138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define TDLS_CHANNEL_SWITCH_TIMING_IE_LEN		4
340238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
340338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* PTI Control Element */
340438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct pti_control_ie {
340538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 id;
340638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;
340738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 tid;
340838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16 seq_control;
340938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
341038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct pti_control_ie pti_control_ie_t;
341138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define TDLS_PTI_CONTROL_IE_LEN		3
341238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
341338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* PU Buffer Status Element */
341438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct pu_buffer_status_ie {
341538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 id;
341638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 len;
341738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 status;
341838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
341938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct pu_buffer_status_ie pu_buffer_status_ie_t;
342038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define TDLS_PU_BUFFER_STATUS_IE_LEN	1
342138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define TDLS_PU_BUFFER_STATUS_AC_BK		1
342238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define TDLS_PU_BUFFER_STATUS_AC_BE		2
342338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define TDLS_PU_BUFFER_STATUS_AC_VI		4
342438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define TDLS_PU_BUFFER_STATUS_AC_VO		8
342538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
342638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 802.11u GAS action frames */
342738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define GAS_REQUEST_ACTION_FRAME				10
342838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define GAS_RESPONSE_ACTION_FRAME				11
342938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define GAS_COMEBACK_REQUEST_ACTION_FRAME		12
343038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define GAS_COMEBACK_RESPONSE_ACTION_FRAME		13
343138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
343238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 802.11u interworking access network options */
343338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define IW_ANT_MASK				0x0f
343438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define IW_INTERNET_MASK		0x10
343538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define IW_ASRA_MASK			0x20
343638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define IW_ESR_MASK				0x40
343738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define IW_UESA_MASK			0x80
343838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
343938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 802.11u interworking access network type */
344038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define IW_ANT_PRIVATE_NETWORK					0
344138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define IW_ANT_PRIVATE_NETWORK_WITH_GUEST		1
344238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define IW_ANT_CHARGEABLE_PUBLIC_NETWORK		2
344338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define IW_ANT_FREE_PUBLIC_NETWORK				3
344438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define IW_ANT_PERSONAL_DEVICE_NETWORK			4
344538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define IW_ANT_EMERGENCY_SERVICES_NETWORK		5
344638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define IW_ANT_TEST_NETWORK						14
344738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define IW_ANT_WILDCARD_NETWORK					15
344838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
344938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 802.11u advertisement protocol */
345038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define ADVP_ANQP_PROTOCOL_ID	0
345138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
345238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 802.11u advertisement protocol masks */
345338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define ADVP_QRL_MASK					0x7f
345438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define ADVP_PAME_BI_MASK				0x80
345538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
345638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 802.11u advertisement protocol values */
345738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define ADVP_QRL_REQUEST				0x00
345838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define ADVP_QRL_RESPONSE				0x7f
345938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define ADVP_PAME_BI_DEPENDENT			0x00
346038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define ADVP_PAME_BI_INDEPENDENT		ADVP_PAME_BI_MASK
346138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
346238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 802.11u ANQP information ID */
346338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define ANQP_ID_QUERY_LIST							256
346438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define ANQP_ID_CAPABILITY_LIST						257
346538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define ANQP_ID_VENUE_NAME_INFO						258
346638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define ANQP_ID_EMERGENCY_CALL_NUMBER_INFO			259
346738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define ANQP_ID_NETWORK_AUTHENTICATION_TYPE_INFO	260
346838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define ANQP_ID_ROAMING_CONSORTIUM_LIST				261
346938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define ANQP_ID_IP_ADDRESS_TYPE_AVAILABILITY_INFO	262
347038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define ANQP_ID_NAI_REALM_LIST						263
347138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define ANQP_ID_G3PP_CELLULAR_NETWORK_INFO			264
347238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define ANQP_ID_AP_GEOSPATIAL_LOCATION				265
347338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define ANQP_ID_AP_CIVIC_LOCATION					266
347438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define ANQP_ID_AP_LOCATION_PUBLIC_ID_URI			267
347538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define ANQP_ID_DOMAIN_NAME_LIST					268
347638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define ANQP_ID_EMERGENCY_ALERT_ID_URI				269
347738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define ANQP_ID_EMERGENCY_NAI						271
347838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define ANQP_ID_VENDOR_SPECIFIC_LIST				56797
347938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
348038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 802.11u ANQP OUI */
348138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define ANQP_OUI_SUBTYPE	9
348238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
348338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 802.11u venue name */
348438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VENUE_LANGUAGE_CODE_SIZE		3
348538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VENUE_NAME_SIZE					255
348638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
348738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 802.11u venue groups */
348838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VENUE_UNSPECIFIED				0
348938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VENUE_ASSEMBLY					1
349038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VENUE_BUSINESS					2
349138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VENUE_EDUCATIONAL				3
349238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VENUE_FACTORY					4
349338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VENUE_INSTITUTIONAL				5
349438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VENUE_MERCANTILE				6
349538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VENUE_RESIDENTIAL				7
349638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VENUE_STORAGE					8
349738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VENUE_UTILITY					9
349838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VENUE_VEHICULAR					10
349938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define VENUE_OUTDOOR					11
350038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
350138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 802.11u network authentication type indicator */
350238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define NATI_ACCEPTANCE_OF_TERMS_CONDITIONS			0
350338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define NATI_ONLINE_ENROLLMENT_SUPPORTED			1
350438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define NATI_HTTP_HTTPS_REDIRECTION					2
350538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define NATI_DNS_REDIRECTION						3
350638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
350738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 802.11u IP address type availability - IPv6 */
350838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define IPA_IPV6_SHIFT						0
350938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define IPA_IPV6_MASK						(0x03 << IPA_IPV6_SHIFT)
351038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	IPA_IPV6_NOT_AVAILABLE				0x00
351138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define IPA_IPV6_AVAILABLE					0x01
351238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define IPA_IPV6_UNKNOWN_AVAILABILITY		0x02
351338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
351438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 802.11u IP address type availability - IPv4 */
351538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define IPA_IPV4_SHIFT						2
351638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define IPA_IPV4_MASK						(0x3f << IPA_IPV4_SHIFT)
351738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	IPA_IPV4_NOT_AVAILABLE				0x00
351838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define IPA_IPV4_PUBLIC						0x01
351938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define IPA_IPV4_PORT_RESTRICT				0x02
352038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define IPA_IPV4_SINGLE_NAT					0x03
352138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define IPA_IPV4_DOUBLE_NAT					0x04
352238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define IPA_IPV4_PORT_RESTRICT_SINGLE_NAT	0x05
352338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define IPA_IPV4_PORT_RESTRICT_DOUBLE_NAT	0x06
352438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define IPA_IPV4_UNKNOWN_AVAILABILITY		0x07
352538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
352638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 802.11u NAI realm encoding */
352738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define REALM_ENCODING_RFC4282	0
352838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define REALM_ENCODING_UTF8		1
352938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
353038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 802.11u IANA EAP method type numbers */
353138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define REALM_EAP_TLS					13
353238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define REALM_EAP_SIM					18
353338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define REALM_EAP_TTLS					21
353438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define REALM_EAP_AKA					23
353538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define REALM_EAP_PSK					47
353638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define REALM_EAP_AKAP					50
353738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
353838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 802.11u authentication ID */
353938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define REALM_EXPANDED_EAP						1
354038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define REALM_NON_EAP_INNER_AUTHENTICATION		2
354138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define REALM_INNER_AUTHENTICATION_EAP			3
354238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define REALM_EXPANDED_INNER_EAP				4
354338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define REALM_CREDENTIAL						5
354438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define REALM_TUNNELED_EAP_CREDENTIAL			6
354538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define REALM_VENDOR_SPECIFIC_EAP				221
354638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
354738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 802.11u non-EAP inner authentication type */
354838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define REALM_PAP					1
354938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define REALM_CHAP					2
355038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define REALM_MSCHAP				3
355138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define REALM_MSCHAPV2				4
355238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
355338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 802.11u credential type */
355438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define REALM_SIM					1
355538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define REALM_USIM					2
355638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define REALM_NFC					3
355738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define REALM_HARDWARE_TOKEN		4
355838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define REALM_SOFTOKEN				5
355938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define REALM_CERTIFICATE			6
356038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define REALM_USERNAME_PASSWORD		7
356138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define REALM_SERVER_SIDE			8
356238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
356338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* 802.11u 3GPP PLMN */
356438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define G3PP_GUD_VERSION		0
356538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define G3PP_PLMN_LIST_IE		0
356638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
356738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* hotspot2.0 indication element (vendor specific) */
356838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct hs20_ie {
356938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 oui[3];
357038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 type;
357138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8 config;
357238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
357338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct hs20_ie hs20_ie_t;
357438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define HS20_IE_LEN 5	/* HS20 IE length */
357538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
357638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* This marks the end of a packed structure section. */
35776dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt#include <packed_section_end.h>
35786dbcf2181152a81ab5f3bc5fa765288341a1b7abDmitry Shmidt
357938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#endif /* _802_11_H_ */
3580