xref: /OK3568_Linux_fs/kernel/drivers/net/wireless/nxp/mlan/mlan_ieee.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /** @file mlan_ieee.h
2*4882a593Smuzhiyun  *
3*4882a593Smuzhiyun  *  @brief This file contains IEEE information element related
4*4882a593Smuzhiyun  *  definitions used in MLAN and MOAL module.
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  *  Copyright 2008-2022 NXP
8*4882a593Smuzhiyun  *
9*4882a593Smuzhiyun  *  This software file (the File) is distributed by NXP
10*4882a593Smuzhiyun  *  under the terms of the GNU General Public License Version 2, June 1991
11*4882a593Smuzhiyun  *  (the License).  You may use, redistribute and/or modify the File in
12*4882a593Smuzhiyun  *  accordance with the terms and conditions of the License, a copy of which
13*4882a593Smuzhiyun  *  is available by writing to the Free Software Foundation, Inc.,
14*4882a593Smuzhiyun  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA or on the
15*4882a593Smuzhiyun  *  worldwide web at http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
16*4882a593Smuzhiyun  *
17*4882a593Smuzhiyun  *  THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE
18*4882a593Smuzhiyun  *  IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
19*4882a593Smuzhiyun  *  ARE EXPRESSLY DISCLAIMED.  The License provides additional details about
20*4882a593Smuzhiyun  *  this warranty disclaimer.
21*4882a593Smuzhiyun  *
22*4882a593Smuzhiyun  */
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun /******************************************************
25*4882a593Smuzhiyun Change log:
26*4882a593Smuzhiyun     11/03/2008: initial version
27*4882a593Smuzhiyun ******************************************************/
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun #ifndef _MLAN_IEEE_H_
30*4882a593Smuzhiyun #define _MLAN_IEEE_H_
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun /** FIX IES size in beacon buffer */
33*4882a593Smuzhiyun #define WLAN_802_11_FIXED_IE_SIZE 12
34*4882a593Smuzhiyun /** WLAN supported rates */
35*4882a593Smuzhiyun #define WLAN_SUPPORTED_RATES 14
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun /** WLAN supported rates extension */
38*4882a593Smuzhiyun #define WLAN_SUPPORTED_RATES_EXT 60
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun /** Enumeration definition*/
41*4882a593Smuzhiyun /** WLAN_802_11_NETWORK_TYPE */
42*4882a593Smuzhiyun typedef enum _WLAN_802_11_NETWORK_TYPE {
43*4882a593Smuzhiyun 	Wlan802_11FH,
44*4882a593Smuzhiyun 	Wlan802_11DS,
45*4882a593Smuzhiyun 	/* Defined as upper bound*/
46*4882a593Smuzhiyun 	Wlan802_11NetworkTypeMax
47*4882a593Smuzhiyun } WLAN_802_11_NETWORK_TYPE;
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun #ifdef BIG_ENDIAN_SUPPORT
50*4882a593Smuzhiyun /** Frame control: Type Mgmt frame */
51*4882a593Smuzhiyun #define IEEE80211_FC_MGMT_FRAME_TYPE_MASK 0x3000
52*4882a593Smuzhiyun /** Frame control: SubType Mgmt frame */
53*4882a593Smuzhiyun #define IEEE80211_GET_FC_MGMT_FRAME_SUBTYPE(fc) (((fc)&0xF000) >> 12)
54*4882a593Smuzhiyun #else
55*4882a593Smuzhiyun /** Frame control: Type Mgmt frame */
56*4882a593Smuzhiyun #define IEEE80211_FC_MGMT_FRAME_TYPE_MASK 0x000C
57*4882a593Smuzhiyun /** Frame control: SubType Mgmt frame */
58*4882a593Smuzhiyun #define IEEE80211_GET_FC_MGMT_FRAME_SUBTYPE(fc) (((fc)&0x00F0) >> 4)
59*4882a593Smuzhiyun #endif
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun #ifdef PRAGMA_PACK
62*4882a593Smuzhiyun #pragma pack(push, 1)
63*4882a593Smuzhiyun #endif
64*4882a593Smuzhiyun 
65*4882a593Smuzhiyun /* Reason codes */
66*4882a593Smuzhiyun #define IEEE_80211_REASONCODE_UNSPECIFIED 1
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun typedef enum _IEEEtypes_Ext_ElementId_e {
69*4882a593Smuzhiyun 	HE_CAPABILITY = 35,
70*4882a593Smuzhiyun 	HE_OPERATION = 36,
71*4882a593Smuzhiyun 	HE_6G_CAPABILITY = 59
72*4882a593Smuzhiyun } IEEEtypes_Ext_ElementId_e;
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun /** IEEE Type definitions  */
75*4882a593Smuzhiyun typedef MLAN_PACK_START enum _IEEEtypes_ElementId_e {
76*4882a593Smuzhiyun 	SSID = 0,
77*4882a593Smuzhiyun 	SUPPORTED_RATES = 1,
78*4882a593Smuzhiyun 
79*4882a593Smuzhiyun 	FH_PARAM_SET = 2,
80*4882a593Smuzhiyun 	DS_PARAM_SET = 3,
81*4882a593Smuzhiyun 	CF_PARAM_SET = 4,
82*4882a593Smuzhiyun 
83*4882a593Smuzhiyun 	IBSS_PARAM_SET = 6,
84*4882a593Smuzhiyun 	COUNTRY_INFO = 7,
85*4882a593Smuzhiyun 	POWER_CONSTRAINT = 32,
86*4882a593Smuzhiyun 	POWER_CAPABILITY = 33,
87*4882a593Smuzhiyun 	TPC_REQUEST = 34,
88*4882a593Smuzhiyun 	TPC_REPORT = 35,
89*4882a593Smuzhiyun 	CHANNEL_SWITCH_ANN = 37,
90*4882a593Smuzhiyun 	EXTEND_CHANNEL_SWITCH_ANN = 60,
91*4882a593Smuzhiyun 	QUIET = 40,
92*4882a593Smuzhiyun 	IBSS_DFS = 41,
93*4882a593Smuzhiyun 	SUPPORTED_CHANNELS = 36,
94*4882a593Smuzhiyun 	REGULATORY_CLASS = 59,
95*4882a593Smuzhiyun 	HT_CAPABILITY = 45,
96*4882a593Smuzhiyun 	QOS_INFO = 46,
97*4882a593Smuzhiyun 	HT_OPERATION = 61,
98*4882a593Smuzhiyun 	MULTI_BSSID = 71,
99*4882a593Smuzhiyun 	BSSCO_2040 = 72,
100*4882a593Smuzhiyun 	OVERLAPBSSSCANPARAM = 74,
101*4882a593Smuzhiyun 	NONTX_BSSID_CAP = 83,
102*4882a593Smuzhiyun 	MBSSID_INDEX = 85,
103*4882a593Smuzhiyun 	EXT_CAPABILITY = 127,
104*4882a593Smuzhiyun 	LINK_ID = 101,
105*4882a593Smuzhiyun 	/*IEEE802.11r*/
106*4882a593Smuzhiyun 	MOBILITY_DOMAIN = 54,
107*4882a593Smuzhiyun 	FAST_BSS_TRANSITION = 55,
108*4882a593Smuzhiyun 	TIMEOUT_INTERVAL = 56,
109*4882a593Smuzhiyun 	RIC = 57,
110*4882a593Smuzhiyun 	QOS_MAPPING = 110,
111*4882a593Smuzhiyun 	VHT_CAPABILITY = 191,
112*4882a593Smuzhiyun 	VHT_OPERATION = 192,
113*4882a593Smuzhiyun 	EXT_BSS_LOAD = 193,
114*4882a593Smuzhiyun 	BW_CHANNEL_SWITCH = 194,
115*4882a593Smuzhiyun 	VHT_TX_POWER_ENV = 195,
116*4882a593Smuzhiyun 	EXT_POWER_CONSTR = 196,
117*4882a593Smuzhiyun 	AID_INFO = 197,
118*4882a593Smuzhiyun 	QUIET_CHAN = 198,
119*4882a593Smuzhiyun 	OPER_MODE_NTF = 199,
120*4882a593Smuzhiyun 
121*4882a593Smuzhiyun 	ERP_INFO = 42,
122*4882a593Smuzhiyun 
123*4882a593Smuzhiyun 	EXTENDED_SUPPORTED_RATES = 50,
124*4882a593Smuzhiyun 
125*4882a593Smuzhiyun 	VENDOR_SPECIFIC_221 = 221,
126*4882a593Smuzhiyun 	WMM_IE = VENDOR_SPECIFIC_221,
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun 	WPS_IE = VENDOR_SPECIFIC_221,
129*4882a593Smuzhiyun 	/* WPA */
130*4882a593Smuzhiyun 	WPA_IE = VENDOR_SPECIFIC_221,
131*4882a593Smuzhiyun 	/* WPA2 */
132*4882a593Smuzhiyun 	RSN_IE = 48,
133*4882a593Smuzhiyun 	VS_IE = VENDOR_SPECIFIC_221,
134*4882a593Smuzhiyun 	WAPI_IE = 68,
135*4882a593Smuzhiyun 	FRAGMENT = 242,
136*4882a593Smuzhiyun 	RSNX_IE = 244,
137*4882a593Smuzhiyun 	EXTENSION = 255
138*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_ElementId_e;
139*4882a593Smuzhiyun 
140*4882a593Smuzhiyun /** IEEE IE header */
141*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_Header_t {
142*4882a593Smuzhiyun 	/** Element ID */
143*4882a593Smuzhiyun 	t_u8 element_id;
144*4882a593Smuzhiyun 	/** Length */
145*4882a593Smuzhiyun 	t_u8 len;
146*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_Header_t, *pIEEEtypes_Header_t;
147*4882a593Smuzhiyun 
148*4882a593Smuzhiyun /** Vendor specific IE header */
149*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_VendorHeader_t {
150*4882a593Smuzhiyun 	/** Element ID */
151*4882a593Smuzhiyun 	t_u8 element_id;
152*4882a593Smuzhiyun 	/** Length */
153*4882a593Smuzhiyun 	t_u8 len;
154*4882a593Smuzhiyun 	/** OUI */
155*4882a593Smuzhiyun 	t_u8 oui[3];
156*4882a593Smuzhiyun 	/** OUI type */
157*4882a593Smuzhiyun 	t_u8 oui_type;
158*4882a593Smuzhiyun 	/** OUI subtype */
159*4882a593Smuzhiyun 	t_u8 oui_subtype;
160*4882a593Smuzhiyun 	/** Version */
161*4882a593Smuzhiyun 	t_u8 version;
162*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_VendorHeader_t, *pIEEEtypes_VendorHeader_t;
163*4882a593Smuzhiyun 
164*4882a593Smuzhiyun /** Vendor specific IE */
165*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_VendorSpecific_t {
166*4882a593Smuzhiyun 	/** Vendor specific IE header */
167*4882a593Smuzhiyun 	IEEEtypes_VendorHeader_t vend_hdr;
168*4882a593Smuzhiyun 	/** IE Max - size of previous fields */
169*4882a593Smuzhiyun 	t_u8 data[IEEE_MAX_IE_SIZE - sizeof(IEEEtypes_VendorHeader_t)];
170*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_VendorSpecific_t, *pIEEEtypes_VendorSpecific_t;
171*4882a593Smuzhiyun 
172*4882a593Smuzhiyun /** IEEE IE */
173*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_Generic_t {
174*4882a593Smuzhiyun 	/** Generic IE header */
175*4882a593Smuzhiyun 	IEEEtypes_Header_t ieee_hdr;
176*4882a593Smuzhiyun 	/** IE Max - size of previous fields */
177*4882a593Smuzhiyun 	t_u8 data[IEEE_MAX_IE_SIZE - sizeof(IEEEtypes_Header_t)];
178*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_Generic_t, *pIEEEtypes_Generic_t;
179*4882a593Smuzhiyun 
180*4882a593Smuzhiyun /**ft capability policy*/
181*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_FtCapPolicy_t {
182*4882a593Smuzhiyun #ifdef BIG_ENDIAN_SUPPORT
183*4882a593Smuzhiyun 	/** Reserved */
184*4882a593Smuzhiyun 	t_u8 reserved : 6;
185*4882a593Smuzhiyun 	/** RIC support */
186*4882a593Smuzhiyun 	t_u8 ric : 1;
187*4882a593Smuzhiyun 	/** FT over the DS capable */
188*4882a593Smuzhiyun 	t_u8 ft_over_ds : 1;
189*4882a593Smuzhiyun #else
190*4882a593Smuzhiyun 	/** FT over the DS capable */
191*4882a593Smuzhiyun 	t_u8 ft_over_ds : 1;
192*4882a593Smuzhiyun 	/** RIC support */
193*4882a593Smuzhiyun 	t_u8 ric : 1;
194*4882a593Smuzhiyun 	/** Reserved */
195*4882a593Smuzhiyun 	t_u8 reserved : 6;
196*4882a593Smuzhiyun #endif
197*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_FtCapPolicy_t;
198*4882a593Smuzhiyun 
199*4882a593Smuzhiyun /** Mobility domain IE */
200*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_MobilityDomain_t {
201*4882a593Smuzhiyun 	/** Generic IE header */
202*4882a593Smuzhiyun 	IEEEtypes_Header_t ieee_hdr;
203*4882a593Smuzhiyun 	/** Mobility Domain ID */
204*4882a593Smuzhiyun 	t_u16 mdid;
205*4882a593Smuzhiyun 	/** FT Capability policy */
206*4882a593Smuzhiyun 	t_u8 ft_cap;
207*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_MobilityDomain_t;
208*4882a593Smuzhiyun 
209*4882a593Smuzhiyun /**FT MIC Control*/
210*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_FT_MICControl_t {
211*4882a593Smuzhiyun 	/** reserved */
212*4882a593Smuzhiyun 	t_u8 reserved;
213*4882a593Smuzhiyun 	/** element count */
214*4882a593Smuzhiyun 	t_u8 element_count;
215*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_FT_MICControl_t;
216*4882a593Smuzhiyun 
217*4882a593Smuzhiyun /** FTIE MIC LEN */
218*4882a593Smuzhiyun #define FTIE_MIC_LEN 16
219*4882a593Smuzhiyun 
220*4882a593Smuzhiyun /**FT IE*/
221*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_FastBssTransElement_t {
222*4882a593Smuzhiyun 	/** Generic IE header */
223*4882a593Smuzhiyun 	IEEEtypes_Header_t ieee_hdr;
224*4882a593Smuzhiyun 	/** mic control */
225*4882a593Smuzhiyun 	IEEEtypes_FT_MICControl_t mic_control;
226*4882a593Smuzhiyun 	/** mic */
227*4882a593Smuzhiyun 	t_u8 mic[FTIE_MIC_LEN];
228*4882a593Smuzhiyun 	/** ANonce */
229*4882a593Smuzhiyun 	t_u8 a_nonce[32];
230*4882a593Smuzhiyun 	/** SNonce */
231*4882a593Smuzhiyun 	t_u8 s_nonce[32];
232*4882a593Smuzhiyun 	/** sub element */
233*4882a593Smuzhiyun 	t_u8 sub_element[1];
234*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_FastBssTransElement_t;
235*4882a593Smuzhiyun 
236*4882a593Smuzhiyun /*Category for FT*/
237*4882a593Smuzhiyun #define FT_CATEGORY 6
238*4882a593Smuzhiyun /** FT ACTION request */
239*4882a593Smuzhiyun #define FT_ACTION_REQUEST 1
240*4882a593Smuzhiyun /** FT ACTION response */
241*4882a593Smuzhiyun #define FT_ACTION_RESPONSE 2
242*4882a593Smuzhiyun 
243*4882a593Smuzhiyun /*FT response and FT ack*/
244*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
245*4882a593Smuzhiyun 	/** category */
246*4882a593Smuzhiyun 	t_u8 category;
247*4882a593Smuzhiyun 	/** action */
248*4882a593Smuzhiyun 	t_u8 action;
249*4882a593Smuzhiyun 	/** sta address */
250*4882a593Smuzhiyun 	t_u8 sta_addr[MLAN_MAC_ADDR_LENGTH];
251*4882a593Smuzhiyun 	/** target ap address */
252*4882a593Smuzhiyun 	t_u8 target_ap_addr[MLAN_MAC_ADDR_LENGTH];
253*4882a593Smuzhiyun 	/** status code */
254*4882a593Smuzhiyun 	t_u16 status_code;
255*4882a593Smuzhiyun 	/** varible */
256*4882a593Smuzhiyun 	t_u8 variable[];
257*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_Ft_action_response;
258*4882a593Smuzhiyun 
259*4882a593Smuzhiyun /**FT request */
260*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
261*4882a593Smuzhiyun 	/** category */
262*4882a593Smuzhiyun 	t_u8 category;
263*4882a593Smuzhiyun 	/** action */
264*4882a593Smuzhiyun 	t_u8 action;
265*4882a593Smuzhiyun 	/** sta address */
266*4882a593Smuzhiyun 	t_u8 sta_addr[MLAN_MAC_ADDR_LENGTH];
267*4882a593Smuzhiyun 	/** target ap address */
268*4882a593Smuzhiyun 	t_u8 target_ap_addr[MLAN_MAC_ADDR_LENGTH];
269*4882a593Smuzhiyun 	/** varible */
270*4882a593Smuzhiyun 	t_u8 variable[];
271*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_Ft_action_request;
272*4882a593Smuzhiyun 
273*4882a593Smuzhiyun /** auth frame body*/
274*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
275*4882a593Smuzhiyun 	/** auth alg */
276*4882a593Smuzhiyun 	t_u16 auth_alg;
277*4882a593Smuzhiyun 	/** auth transaction */
278*4882a593Smuzhiyun 	t_u16 auth_transaction;
279*4882a593Smuzhiyun 	/** status code */
280*4882a593Smuzhiyun 	t_u16 status_code;
281*4882a593Smuzhiyun 	/** variable */
282*4882a593Smuzhiyun 	t_u8 variable[];
283*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_Auth_framebody;
284*4882a593Smuzhiyun 
285*4882a593Smuzhiyun /** associate request frame */
286*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
287*4882a593Smuzhiyun 	t_u16 capab_info;
288*4882a593Smuzhiyun 	t_u16 listen_interval;
289*4882a593Smuzhiyun 	/** followed by SSID and Supported rates */
290*4882a593Smuzhiyun 	t_u8 variablep[];
291*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_assoc_req;
292*4882a593Smuzhiyun 
293*4882a593Smuzhiyun /*Mgmt frame*/
294*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
295*4882a593Smuzhiyun 	/** frame control */
296*4882a593Smuzhiyun 	t_u16 frame_control;
297*4882a593Smuzhiyun 	/** duration */
298*4882a593Smuzhiyun 	t_u16 duration;
299*4882a593Smuzhiyun 	/** dest address */
300*4882a593Smuzhiyun 	t_u8 da[MLAN_MAC_ADDR_LENGTH];
301*4882a593Smuzhiyun 	/** source address */
302*4882a593Smuzhiyun 	t_u8 sa[MLAN_MAC_ADDR_LENGTH];
303*4882a593Smuzhiyun 	/** bssid */
304*4882a593Smuzhiyun 	t_u8 bssid[MLAN_MAC_ADDR_LENGTH];
305*4882a593Smuzhiyun 	/** seq control */
306*4882a593Smuzhiyun 	t_u16 seq_ctrl;
307*4882a593Smuzhiyun 	/** address 4 */
308*4882a593Smuzhiyun 	t_u8 addr4[MLAN_MAC_ADDR_LENGTH];
309*4882a593Smuzhiyun 	union {
310*4882a593Smuzhiyun 		IEEEtypes_Auth_framebody auth;
311*4882a593Smuzhiyun 		IEEEtypes_assoc_req assoc_req;
312*4882a593Smuzhiyun 		IEEEtypes_Ft_action_response ft_resp;
313*4882a593Smuzhiyun 		IEEEtypes_Ft_action_request ft_req;
314*4882a593Smuzhiyun 	} u;
315*4882a593Smuzhiyun } MLAN_PACK_END IEEE80211_MGMT;
316*4882a593Smuzhiyun 
317*4882a593Smuzhiyun /** TLV header */
318*4882a593Smuzhiyun typedef MLAN_PACK_START struct _TLV_Generic_t {
319*4882a593Smuzhiyun 	/** Type */
320*4882a593Smuzhiyun 	t_u16 type;
321*4882a593Smuzhiyun 	/** Length */
322*4882a593Smuzhiyun 	t_u16 len;
323*4882a593Smuzhiyun } MLAN_PACK_END TLV_Generic_t, *pTLV_Generic_t;
324*4882a593Smuzhiyun 
325*4882a593Smuzhiyun /** Capability information mask */
326*4882a593Smuzhiyun #define CAPINFO_MASK (~(MBIT(15) | MBIT(14) | MBIT(11) | MBIT(9)))
327*4882a593Smuzhiyun 
328*4882a593Smuzhiyun /** Capability Bit Map*/
329*4882a593Smuzhiyun #ifdef BIG_ENDIAN_SUPPORT
330*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_CapInfo_t {
331*4882a593Smuzhiyun 	t_u8 rsrvd1 : 2;
332*4882a593Smuzhiyun 	t_u8 dsss_ofdm : 1;
333*4882a593Smuzhiyun 	t_u8 radio_measurement : 1;
334*4882a593Smuzhiyun 	t_u8 rsvrd2 : 1;
335*4882a593Smuzhiyun 	t_u8 short_slot_time : 1;
336*4882a593Smuzhiyun 	t_u8 rsrvd3 : 1;
337*4882a593Smuzhiyun 	t_u8 spectrum_mgmt : 1;
338*4882a593Smuzhiyun 	t_u8 chan_agility : 1;
339*4882a593Smuzhiyun 	t_u8 pbcc : 1;
340*4882a593Smuzhiyun 	t_u8 short_preamble : 1;
341*4882a593Smuzhiyun 	t_u8 privacy : 1;
342*4882a593Smuzhiyun 	t_u8 cf_poll_rqst : 1;
343*4882a593Smuzhiyun 	t_u8 cf_pollable : 1;
344*4882a593Smuzhiyun 	t_u8 ibss : 1;
345*4882a593Smuzhiyun 	t_u8 ess : 1;
346*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_CapInfo_t, *pIEEEtypes_CapInfo_t;
347*4882a593Smuzhiyun #else
348*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_CapInfo_t {
349*4882a593Smuzhiyun 	/** Capability Bit Map : ESS */
350*4882a593Smuzhiyun 	t_u8 ess : 1;
351*4882a593Smuzhiyun 	/** Capability Bit Map : IBSS */
352*4882a593Smuzhiyun 	t_u8 ibss : 1;
353*4882a593Smuzhiyun 	/** Capability Bit Map : CF pollable */
354*4882a593Smuzhiyun 	t_u8 cf_pollable : 1;
355*4882a593Smuzhiyun 	/** Capability Bit Map : CF poll request */
356*4882a593Smuzhiyun 	t_u8 cf_poll_rqst : 1;
357*4882a593Smuzhiyun 	/** Capability Bit Map : privacy */
358*4882a593Smuzhiyun 	t_u8 privacy : 1;
359*4882a593Smuzhiyun 	/** Capability Bit Map : Short preamble */
360*4882a593Smuzhiyun 	t_u8 short_preamble : 1;
361*4882a593Smuzhiyun 	/** Capability Bit Map : PBCC */
362*4882a593Smuzhiyun 	t_u8 pbcc : 1;
363*4882a593Smuzhiyun 	/** Capability Bit Map : Channel agility */
364*4882a593Smuzhiyun 	t_u8 chan_agility : 1;
365*4882a593Smuzhiyun 	/** Capability Bit Map : Spectrum management */
366*4882a593Smuzhiyun 	t_u8 spectrum_mgmt : 1;
367*4882a593Smuzhiyun 	/** Capability Bit Map : Reserved */
368*4882a593Smuzhiyun 	t_u8 rsrvd3 : 1;
369*4882a593Smuzhiyun 	/** Capability Bit Map : Short slot time */
370*4882a593Smuzhiyun 	t_u8 short_slot_time : 1;
371*4882a593Smuzhiyun 	/** Capability Bit Map : APSD */
372*4882a593Smuzhiyun 	t_u8 Apsd : 1;
373*4882a593Smuzhiyun 	/** Capability Bit Map : Reserved */
374*4882a593Smuzhiyun 	t_u8 rsvrd2 : 1;
375*4882a593Smuzhiyun 	/** Capability Bit Map : DSS OFDM */
376*4882a593Smuzhiyun 	t_u8 dsss_ofdm : 1;
377*4882a593Smuzhiyun 	/** Capability Bit Map : Reserved */
378*4882a593Smuzhiyun 	t_u8 rsrvd1 : 2;
379*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_CapInfo_t, *pIEEEtypes_CapInfo_t;
380*4882a593Smuzhiyun #endif /* BIG_ENDIAN_SUPPORT */
381*4882a593Smuzhiyun 
382*4882a593Smuzhiyun /** IEEEtypes_Ssid_t */
383*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_Ssid_t {
384*4882a593Smuzhiyun 	/** SSID: Element ID */
385*4882a593Smuzhiyun 	t_u8 element_id;
386*4882a593Smuzhiyun 	/** SSID : Length */
387*4882a593Smuzhiyun 	t_u8 len;
388*4882a593Smuzhiyun 	/** ssid */
389*4882a593Smuzhiyun 	t_u8 ssid[MLAN_MAX_SSID_LENGTH];
390*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_Ssid_t, *pIEEEtypes_Ssid_t;
391*4882a593Smuzhiyun 
392*4882a593Smuzhiyun /** IEEEtypes_CfParamSet_t */
393*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_CfParamSet_t {
394*4882a593Smuzhiyun 	/** CF peremeter : Element ID */
395*4882a593Smuzhiyun 	t_u8 element_id;
396*4882a593Smuzhiyun 	/** CF peremeter : Length */
397*4882a593Smuzhiyun 	t_u8 len;
398*4882a593Smuzhiyun 	/** CF peremeter : Count */
399*4882a593Smuzhiyun 	t_u8 cfp_cnt;
400*4882a593Smuzhiyun 	/** CF peremeter : Period */
401*4882a593Smuzhiyun 	t_u8 cfp_period;
402*4882a593Smuzhiyun 	/** CF peremeter : Maximum duration */
403*4882a593Smuzhiyun 	t_u16 cfp_max_duration;
404*4882a593Smuzhiyun 	/** CF peremeter : Remaining duration */
405*4882a593Smuzhiyun 	t_u16 cfp_duration_remaining;
406*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_CfParamSet_t, *pIEEEtypes_CfParamSet_t;
407*4882a593Smuzhiyun 
408*4882a593Smuzhiyun /** IEEEtypes_IbssParamSet_t */
409*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_IbssParamSet_t {
410*4882a593Smuzhiyun 	/** Element ID */
411*4882a593Smuzhiyun 	t_u8 element_id;
412*4882a593Smuzhiyun 	/** Length */
413*4882a593Smuzhiyun 	t_u8 len;
414*4882a593Smuzhiyun 	/** ATIM window value in milliseconds */
415*4882a593Smuzhiyun 	t_u16 atim_window;
416*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_IbssParamSet_t, *pIEEEtypes_IbssParamSet_t;
417*4882a593Smuzhiyun 
418*4882a593Smuzhiyun /** IEEEtypes_SsParamSet_t */
419*4882a593Smuzhiyun typedef MLAN_PACK_START union _IEEEtypes_SsParamSet_t {
420*4882a593Smuzhiyun 	/** SS parameter : CF parameter set */
421*4882a593Smuzhiyun 	IEEEtypes_CfParamSet_t cf_param_set;
422*4882a593Smuzhiyun 	/** SS parameter : IBSS parameter set */
423*4882a593Smuzhiyun 	IEEEtypes_IbssParamSet_t ibss_param_set;
424*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_SsParamSet_t, *pIEEEtypes_SsParamSet_t;
425*4882a593Smuzhiyun 
426*4882a593Smuzhiyun /** IEEEtypes_FhParamSet_t */
427*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_FhParamSet_t {
428*4882a593Smuzhiyun 	/** FH parameter : Element ID */
429*4882a593Smuzhiyun 	t_u8 element_id;
430*4882a593Smuzhiyun 	/** FH parameter : Length */
431*4882a593Smuzhiyun 	t_u8 len;
432*4882a593Smuzhiyun 	/** FH parameter : Dwell time in milliseconds */
433*4882a593Smuzhiyun 	t_u16 dwell_time;
434*4882a593Smuzhiyun 	/** FH parameter : Hop set */
435*4882a593Smuzhiyun 	t_u8 hop_set;
436*4882a593Smuzhiyun 	/** FH parameter : Hop pattern */
437*4882a593Smuzhiyun 	t_u8 hop_pattern;
438*4882a593Smuzhiyun 	/** FH parameter : Hop index */
439*4882a593Smuzhiyun 	t_u8 hop_index;
440*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_FhParamSet_t, *pIEEEtypes_FhParamSet_t;
441*4882a593Smuzhiyun 
442*4882a593Smuzhiyun /** IEEEtypes_DsParamSet_t */
443*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_DsParamSet_t {
444*4882a593Smuzhiyun 	/** DS parameter : Element ID */
445*4882a593Smuzhiyun 	t_u8 element_id;
446*4882a593Smuzhiyun 	/** DS parameter : Length */
447*4882a593Smuzhiyun 	t_u8 len;
448*4882a593Smuzhiyun 	/** DS parameter : Current channel */
449*4882a593Smuzhiyun 	t_u8 current_chan;
450*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_DsParamSet_t, *pIEEEtypes_DsParamSet_t;
451*4882a593Smuzhiyun 
452*4882a593Smuzhiyun /** IEEEtypes_PhyParamSet_t */
453*4882a593Smuzhiyun typedef MLAN_PACK_START union _IEEEtypes_PhyParamSet_t {
454*4882a593Smuzhiyun 	/** FH parameter set */
455*4882a593Smuzhiyun 	IEEEtypes_FhParamSet_t fh_param_set;
456*4882a593Smuzhiyun 	/** DS parameter set */
457*4882a593Smuzhiyun 	IEEEtypes_DsParamSet_t ds_param_set;
458*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_PhyParamSet_t, *pIEEEtypes_PhyParamSet_t;
459*4882a593Smuzhiyun 
460*4882a593Smuzhiyun /** IEEEtypes_ERPInfo_t */
461*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_ERPInfo_t {
462*4882a593Smuzhiyun 	/** Element ID */
463*4882a593Smuzhiyun 	t_u8 element_id;
464*4882a593Smuzhiyun 	/** Length */
465*4882a593Smuzhiyun 	t_u8 len;
466*4882a593Smuzhiyun 	/** ERP flags */
467*4882a593Smuzhiyun 	t_u8 erp_flags;
468*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_ERPInfo_t, *pIEEEtypes_ERPInfo_t;
469*4882a593Smuzhiyun 
470*4882a593Smuzhiyun /** IEEEtypes_AId_t */
471*4882a593Smuzhiyun typedef t_u16 IEEEtypes_AId_t;
472*4882a593Smuzhiyun 
473*4882a593Smuzhiyun /** IEEEtypes_StatusCode_t */
474*4882a593Smuzhiyun typedef t_u16 IEEEtypes_StatusCode_t;
475*4882a593Smuzhiyun 
476*4882a593Smuzhiyun /** Fixed size in assoc_resp */
477*4882a593Smuzhiyun #define ASSOC_RESP_FIXED_SIZE 6
478*4882a593Smuzhiyun 
479*4882a593Smuzhiyun /** IEEEtypes_SeqCtl_t */
480*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_SeqCtl_t {
481*4882a593Smuzhiyun 	/** Fragment Number */
482*4882a593Smuzhiyun 	t_u16 FragNum : 4;
483*4882a593Smuzhiyun 	/** Sequence Number */
484*4882a593Smuzhiyun 	t_u16 SeqNum : 12;
485*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_SeqCtl_t;
486*4882a593Smuzhiyun 
487*4882a593Smuzhiyun /** IEEEtypes_MgmtHdr_t */
488*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_MgmtHdr_t {
489*4882a593Smuzhiyun 	/** FrmCtl*/
490*4882a593Smuzhiyun 	t_u16 FrmCtl;
491*4882a593Smuzhiyun 	/** Duration*/
492*4882a593Smuzhiyun 	t_u16 Duration;
493*4882a593Smuzhiyun 	/** Destination Addr*/
494*4882a593Smuzhiyun 	t_u8 DestAddr[6];
495*4882a593Smuzhiyun 	/** Source Addr*/
496*4882a593Smuzhiyun 	t_u8 SrcAddr[6];
497*4882a593Smuzhiyun 	/** BSSID */
498*4882a593Smuzhiyun 	t_u8 BssId[6];
499*4882a593Smuzhiyun 	/** IEEEtypes_SeqCtl_t */
500*4882a593Smuzhiyun 	IEEEtypes_SeqCtl_t SeqCtl;
501*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_MgmtHdr_t;
502*4882a593Smuzhiyun 
503*4882a593Smuzhiyun /** IEEEtypes_AssocRsp_t */
504*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_AssocRsp_t {
505*4882a593Smuzhiyun 	/** Capability information */
506*4882a593Smuzhiyun 	IEEEtypes_CapInfo_t capability;
507*4882a593Smuzhiyun 	/** Association response status code */
508*4882a593Smuzhiyun 	IEEEtypes_StatusCode_t status_code;
509*4882a593Smuzhiyun 	/** Association ID */
510*4882a593Smuzhiyun 	IEEEtypes_AId_t a_id;
511*4882a593Smuzhiyun 	/** IE data buffer */
512*4882a593Smuzhiyun 	t_u8 ie_buffer[1];
513*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_AssocRsp_t, *pIEEEtypes_AssocRsp_t;
514*4882a593Smuzhiyun 
515*4882a593Smuzhiyun /** 802.11 supported rates */
516*4882a593Smuzhiyun typedef t_u8 WLAN_802_11_RATES[WLAN_SUPPORTED_RATES];
517*4882a593Smuzhiyun 
518*4882a593Smuzhiyun /** cipher TKIP */
519*4882a593Smuzhiyun #define WPA_CIPHER_TKIP 2
520*4882a593Smuzhiyun /** cipher AES */
521*4882a593Smuzhiyun #define WPA_CIPHER_AES_CCM 4
522*4882a593Smuzhiyun /** AKM: 8021x */
523*4882a593Smuzhiyun #define RSN_AKM_8021X 1
524*4882a593Smuzhiyun /** AKM: PSK */
525*4882a593Smuzhiyun #define RSN_AKM_PSK 2
526*4882a593Smuzhiyun /** AKM: PSK SHA256 */
527*4882a593Smuzhiyun #define RSN_AKM_PSK_SHA256 6
528*4882a593Smuzhiyun 
529*4882a593Smuzhiyun /** AKM: PSK SHA256 */
530*4882a593Smuzhiyun #define RSN_AKM_SAE 8
531*4882a593Smuzhiyun /** AKM: PSK SHA256 */
532*4882a593Smuzhiyun #define RSN_AKM_OWE 18
533*4882a593Smuzhiyun 
534*4882a593Smuzhiyun #if defined(STA_SUPPORT)
535*4882a593Smuzhiyun /** Pairwise Cipher Suite length */
536*4882a593Smuzhiyun #define PAIRWISE_CIPHER_SUITE_LEN 4
537*4882a593Smuzhiyun /** AKM Suite length */
538*4882a593Smuzhiyun #define AKM_SUITE_LEN 4
539*4882a593Smuzhiyun /** MFPC bit in RSN capability */
540*4882a593Smuzhiyun #define MFPC_BIT 7
541*4882a593Smuzhiyun /** MFPR bit in RSN capability */
542*4882a593Smuzhiyun #define MFPR_BIT 6
543*4882a593Smuzhiyun /** PMF ORing mask */
544*4882a593Smuzhiyun #define PMF_MASK 0x00c0
545*4882a593Smuzhiyun #endif
546*4882a593Smuzhiyun 
547*4882a593Smuzhiyun /** wpa_suite_t */
548*4882a593Smuzhiyun typedef MLAN_PACK_START struct _wpa_suite_t {
549*4882a593Smuzhiyun 	/** OUI */
550*4882a593Smuzhiyun 	t_u8 oui[3];
551*4882a593Smuzhiyun 	/** tyep */
552*4882a593Smuzhiyun 	t_u8 type;
553*4882a593Smuzhiyun } MLAN_PACK_END wpa_suite, wpa_suite_mcast_t;
554*4882a593Smuzhiyun 
555*4882a593Smuzhiyun /** wpa_suite_ucast_t */
556*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
557*4882a593Smuzhiyun 	/* count */
558*4882a593Smuzhiyun 	t_u16 count;
559*4882a593Smuzhiyun 	/** wpa_suite list */
560*4882a593Smuzhiyun 	wpa_suite list[1];
561*4882a593Smuzhiyun } MLAN_PACK_END wpa_suite_ucast_t, wpa_suite_auth_key_mgmt_t;
562*4882a593Smuzhiyun 
563*4882a593Smuzhiyun /** IEEEtypes_Rsn_t */
564*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_Rsn_t {
565*4882a593Smuzhiyun 	/** Rsn : Element ID */
566*4882a593Smuzhiyun 	t_u8 element_id;
567*4882a593Smuzhiyun 	/** Rsn : Length */
568*4882a593Smuzhiyun 	t_u8 len;
569*4882a593Smuzhiyun 	/** Rsn : version */
570*4882a593Smuzhiyun 	t_u16 version;
571*4882a593Smuzhiyun 	/** Rsn : group cipher */
572*4882a593Smuzhiyun 	wpa_suite_mcast_t group_cipher;
573*4882a593Smuzhiyun 	/** Rsn : pairwise cipher */
574*4882a593Smuzhiyun 	wpa_suite_ucast_t pairwise_cipher;
575*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_Rsn_t, *pIEEEtypes_Rsn_t;
576*4882a593Smuzhiyun 
577*4882a593Smuzhiyun /** IEEEtypes_Wpa_t */
578*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_Wpa_t {
579*4882a593Smuzhiyun 	/** Wpa : Element ID */
580*4882a593Smuzhiyun 	t_u8 element_id;
581*4882a593Smuzhiyun 	/** Wpa : Length */
582*4882a593Smuzhiyun 	t_u8 len;
583*4882a593Smuzhiyun 	/** Wpa : oui */
584*4882a593Smuzhiyun 	t_u8 oui[4];
585*4882a593Smuzhiyun 	/** version */
586*4882a593Smuzhiyun 	t_u16 version;
587*4882a593Smuzhiyun 	/** Wpa : group cipher */
588*4882a593Smuzhiyun 	wpa_suite_mcast_t group_cipher;
589*4882a593Smuzhiyun 	/** Wpa : pairwise cipher */
590*4882a593Smuzhiyun 	wpa_suite_ucast_t pairwise_cipher;
591*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_Wpa_t, *pIEEEtypes_Wpa_t;
592*4882a593Smuzhiyun 
593*4882a593Smuzhiyun /** Data structure of WMM QoS information */
594*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_WmmQosInfo_t {
595*4882a593Smuzhiyun #ifdef BIG_ENDIAN_SUPPORT
596*4882a593Smuzhiyun 	/** QoS UAPSD */
597*4882a593Smuzhiyun 	t_u8 qos_uapsd : 1;
598*4882a593Smuzhiyun 	/** Reserved */
599*4882a593Smuzhiyun 	t_u8 reserved : 3;
600*4882a593Smuzhiyun 	/** Parameter set count */
601*4882a593Smuzhiyun 	t_u8 para_set_count : 4;
602*4882a593Smuzhiyun #else
603*4882a593Smuzhiyun 	/** Parameter set count */
604*4882a593Smuzhiyun 	t_u8 para_set_count : 4;
605*4882a593Smuzhiyun 	/** Reserved */
606*4882a593Smuzhiyun 	t_u8 reserved : 3;
607*4882a593Smuzhiyun 	/** QoS UAPSD */
608*4882a593Smuzhiyun 	t_u8 qos_uapsd : 1;
609*4882a593Smuzhiyun #endif /* BIG_ENDIAN_SUPPORT */
610*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_WmmQosInfo_t, *pIEEEtypes_WmmQosInfo_t;
611*4882a593Smuzhiyun 
612*4882a593Smuzhiyun /** Data structure of WMM Aci/Aifsn */
613*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_WmmAciAifsn_t {
614*4882a593Smuzhiyun #ifdef BIG_ENDIAN_SUPPORT
615*4882a593Smuzhiyun 	/** Reserved */
616*4882a593Smuzhiyun 	t_u8 reserved : 1;
617*4882a593Smuzhiyun 	/** Aci */
618*4882a593Smuzhiyun 	t_u8 aci : 2;
619*4882a593Smuzhiyun 	/** Acm */
620*4882a593Smuzhiyun 	t_u8 acm : 1;
621*4882a593Smuzhiyun 	/** Aifsn */
622*4882a593Smuzhiyun 	t_u8 aifsn : 4;
623*4882a593Smuzhiyun #else
624*4882a593Smuzhiyun 	/** Aifsn */
625*4882a593Smuzhiyun 	t_u8 aifsn : 4;
626*4882a593Smuzhiyun 	/** Acm */
627*4882a593Smuzhiyun 	t_u8 acm : 1;
628*4882a593Smuzhiyun 	/** Aci */
629*4882a593Smuzhiyun 	t_u8 aci : 2;
630*4882a593Smuzhiyun 	/** Reserved */
631*4882a593Smuzhiyun 	t_u8 reserved : 1;
632*4882a593Smuzhiyun #endif /* BIG_ENDIAN_SUPPORT */
633*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_WmmAciAifsn_t, *pIEEEtypes_WmmAciAifsn_t;
634*4882a593Smuzhiyun 
635*4882a593Smuzhiyun /** Data structure of WMM ECW */
636*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_WmmEcw_t {
637*4882a593Smuzhiyun #ifdef BIG_ENDIAN_SUPPORT
638*4882a593Smuzhiyun 	/** Maximum Ecw */
639*4882a593Smuzhiyun 	t_u8 ecw_max : 4;
640*4882a593Smuzhiyun 	/** Minimum Ecw */
641*4882a593Smuzhiyun 	t_u8 ecw_min : 4;
642*4882a593Smuzhiyun #else
643*4882a593Smuzhiyun 	/** Minimum Ecw */
644*4882a593Smuzhiyun 	t_u8 ecw_min : 4;
645*4882a593Smuzhiyun 	/** Maximum Ecw */
646*4882a593Smuzhiyun 	t_u8 ecw_max : 4;
647*4882a593Smuzhiyun #endif /* BIG_ENDIAN_SUPPORT */
648*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_WmmEcw_t, *pIEEEtypes_WmmEcw_t;
649*4882a593Smuzhiyun 
650*4882a593Smuzhiyun /** Data structure of WMM AC parameters  */
651*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_WmmAcParameters_t {
652*4882a593Smuzhiyun 	IEEEtypes_WmmAciAifsn_t aci_aifsn; /**< AciAifSn */
653*4882a593Smuzhiyun 	IEEEtypes_WmmEcw_t ecw; /**< Ecw */
654*4882a593Smuzhiyun 	t_u16 tx_op_limit; /**< Tx op limit */
655*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_WmmAcParameters_t, *pIEEEtypes_WmmAcParameters_t;
656*4882a593Smuzhiyun 
657*4882a593Smuzhiyun /** Data structure of WMM Info IE  */
658*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_WmmInfo_t {
659*4882a593Smuzhiyun 	/**
660*4882a593Smuzhiyun 	 * WMM Info IE - Vendor Specific Header:
661*4882a593Smuzhiyun 	 *   element_id  [221/0xdd]
662*4882a593Smuzhiyun 	 *   Len         [7]
663*4882a593Smuzhiyun 	 *   Oui         [00:50:f2]
664*4882a593Smuzhiyun 	 *   OuiType     [2]
665*4882a593Smuzhiyun 	 *   OuiSubType  [0]
666*4882a593Smuzhiyun 	 *   Version     [1]
667*4882a593Smuzhiyun 	 */
668*4882a593Smuzhiyun 	IEEEtypes_VendorHeader_t vend_hdr;
669*4882a593Smuzhiyun 
670*4882a593Smuzhiyun 	/** QoS information */
671*4882a593Smuzhiyun 	IEEEtypes_WmmQosInfo_t qos_info;
672*4882a593Smuzhiyun 
673*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_WmmInfo_t, *pIEEEtypes_WmmInfo_t;
674*4882a593Smuzhiyun 
675*4882a593Smuzhiyun /** Data structure of WMM parameter IE  */
676*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_WmmParameter_t {
677*4882a593Smuzhiyun 	/**
678*4882a593Smuzhiyun 	 * WMM Parameter IE - Vendor Specific Header:
679*4882a593Smuzhiyun 	 *   element_id  [221/0xdd]
680*4882a593Smuzhiyun 	 *   Len         [24]
681*4882a593Smuzhiyun 	 *   Oui         [00:50:f2]
682*4882a593Smuzhiyun 	 *   OuiType     [2]
683*4882a593Smuzhiyun 	 *   OuiSubType  [1]
684*4882a593Smuzhiyun 	 *   Version     [1]
685*4882a593Smuzhiyun 	 */
686*4882a593Smuzhiyun 	IEEEtypes_VendorHeader_t vend_hdr;
687*4882a593Smuzhiyun 
688*4882a593Smuzhiyun 	/** QoS information */
689*4882a593Smuzhiyun 	IEEEtypes_WmmQosInfo_t qos_info;
690*4882a593Smuzhiyun 	/** Reserved */
691*4882a593Smuzhiyun 	t_u8 reserved;
692*4882a593Smuzhiyun 
693*4882a593Smuzhiyun 	/** AC Parameters Record WMM_AC_BE, WMM_AC_BK, WMM_AC_VI, WMM_AC_VO */
694*4882a593Smuzhiyun 	IEEEtypes_WmmAcParameters_t ac_params[MAX_AC_QUEUES];
695*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_WmmParameter_t, *pIEEEtypes_WmmParameter_t;
696*4882a593Smuzhiyun 
697*4882a593Smuzhiyun /** Enumerator for TSPEC direction */
698*4882a593Smuzhiyun typedef MLAN_PACK_START enum _IEEEtypes_WMM_TSPEC_TS_Info_Direction_e {
699*4882a593Smuzhiyun 
700*4882a593Smuzhiyun 	TSPEC_DIR_UPLINK = 0,
701*4882a593Smuzhiyun 	TSPEC_DIR_DOWNLINK = 1,
702*4882a593Smuzhiyun 	/* 2 is a reserved value */
703*4882a593Smuzhiyun 	TSPEC_DIR_BIDIRECT = 3,
704*4882a593Smuzhiyun 
705*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_WMM_TSPEC_TS_Info_Direction_e;
706*4882a593Smuzhiyun 
707*4882a593Smuzhiyun /** Enumerator for TSPEC PSB */
708*4882a593Smuzhiyun typedef MLAN_PACK_START enum _IEEEtypes_WMM_TSPEC_TS_Info_PSB_e {
709*4882a593Smuzhiyun 
710*4882a593Smuzhiyun 	TSPEC_PSB_LEGACY = 0,
711*4882a593Smuzhiyun 	TSPEC_PSB_TRIG = 1,
712*4882a593Smuzhiyun 
713*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_WMM_TSPEC_TS_Info_PSB_e;
714*4882a593Smuzhiyun 
715*4882a593Smuzhiyun /** Enumerator for TSPEC Ack Policy */
716*4882a593Smuzhiyun typedef MLAN_PACK_START enum _IEEEtypes_WMM_TSPEC_TS_Info_AckPolicy_e {
717*4882a593Smuzhiyun 
718*4882a593Smuzhiyun 	TSPEC_ACKPOLICY_NORMAL = 0,
719*4882a593Smuzhiyun 	TSPEC_ACKPOLICY_NOACK = 1,
720*4882a593Smuzhiyun 	/* 2 is reserved */
721*4882a593Smuzhiyun 	TSPEC_ACKPOLICY_BLOCKACK = 3,
722*4882a593Smuzhiyun 
723*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_WMM_TSPEC_TS_Info_AckPolicy_e;
724*4882a593Smuzhiyun 
725*4882a593Smuzhiyun /** Enumerator for TSPEC Trafffice type */
726*4882a593Smuzhiyun typedef MLAN_PACK_START enum _IEEEtypes_WMM_TSPEC_TS_TRAFFIC_TYPE_e {
727*4882a593Smuzhiyun 
728*4882a593Smuzhiyun 	TSPEC_TRAFFIC_APERIODIC = 0,
729*4882a593Smuzhiyun 	TSPEC_TRAFFIC_PERIODIC = 1,
730*4882a593Smuzhiyun 
731*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_WMM_TSPEC_TS_TRAFFIC_TYPE_e;
732*4882a593Smuzhiyun 
733*4882a593Smuzhiyun /** Data structure of WMM TSPEC information */
734*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
735*4882a593Smuzhiyun #ifdef BIG_ENDIAN_SUPPORT
736*4882a593Smuzhiyun 	t_u8 Reserved17_23 : 7; /* ! Reserved */
737*4882a593Smuzhiyun 	t_u8 Schedule : 1;
738*4882a593Smuzhiyun 	IEEEtypes_WMM_TSPEC_TS_Info_AckPolicy_e AckPolicy : 2;
739*4882a593Smuzhiyun 	t_u8 UserPri : 3; /* ! 802.1d User Priority */
740*4882a593Smuzhiyun 	// IEEEtypes_WMM_TSPEC_TS_Info_PSB_e PowerSaveBehavior : 1; /*
741*4882a593Smuzhiyun 	// !Legacy/Trigg*/
742*4882a593Smuzhiyun 	t_u8 PowerSaveBehavior : 1;
743*4882a593Smuzhiyun 	t_u8 Aggregation : 1; /* ! Reserved */
744*4882a593Smuzhiyun 	t_u8 AccessPolicy2 : 1; /* ! */
745*4882a593Smuzhiyun 	t_u8 AccessPolicy1 : 1; /* ! */
746*4882a593Smuzhiyun 	IEEEtypes_WMM_TSPEC_TS_Info_Direction_e Direction : 2;
747*4882a593Smuzhiyun 	t_u8 TID : 4; /* ! Unique identifier */
748*4882a593Smuzhiyun 	// IEEEtypes_WMM_TSPEC_TS_TRAFFIC_TYPE_e TrafficType : 1;
749*4882a593Smuzhiyun 	t_u8 TrafficType : 1;
750*4882a593Smuzhiyun #else
751*4882a593Smuzhiyun 	// IEEEtypes_WMM_TSPEC_TS_TRAFFIC_TYPE_e TrafficType : 1;
752*4882a593Smuzhiyun 	t_u8 TrafficType : 1;
753*4882a593Smuzhiyun 	t_u8 TID : 4; /* ! Unique identifier */
754*4882a593Smuzhiyun 	IEEEtypes_WMM_TSPEC_TS_Info_Direction_e Direction : 2;
755*4882a593Smuzhiyun 	t_u8 AccessPolicy1 : 1; /* ! */
756*4882a593Smuzhiyun 	t_u8 AccessPolicy2 : 1; /* ! */
757*4882a593Smuzhiyun 	t_u8 Aggregation : 1; /* ! Reserved */
758*4882a593Smuzhiyun 	// IEEEtypes_WMM_TSPEC_TS_Info_PSB_e PowerSaveBehavior : 1; /* !
759*4882a593Smuzhiyun 	// Legacy/Trigg*/
760*4882a593Smuzhiyun 	t_u8 PowerSaveBehavior : 1;
761*4882a593Smuzhiyun 	t_u8 UserPri : 3; /* ! 802.1d User Priority */
762*4882a593Smuzhiyun 	IEEEtypes_WMM_TSPEC_TS_Info_AckPolicy_e AckPolicy : 2;
763*4882a593Smuzhiyun 	t_u8 Schedule : 1;
764*4882a593Smuzhiyun 	t_u8 Reserved17_23 : 7; /* ! Reserved */
765*4882a593Smuzhiyun #endif
766*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_WMM_TSPEC_TS_Info_t;
767*4882a593Smuzhiyun 
768*4882a593Smuzhiyun /** Data structure of WMM TSPEC Nominal Size */
769*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
770*4882a593Smuzhiyun #ifdef BIG_ENDIAN_SUPPORT
771*4882a593Smuzhiyun 	t_u16 Fixed : 1; /* ! 1: Fixed size given in Size, 0: Var, size is
772*4882a593Smuzhiyun 			    nominal */
773*4882a593Smuzhiyun 	t_u16 Size : 15; /* ! Nominal size in octets */
774*4882a593Smuzhiyun #else
775*4882a593Smuzhiyun 	t_u16 Size : 15; /* ! Nominal size in octets */
776*4882a593Smuzhiyun 	t_u16 Fixed : 1; /* ! 1: Fixed size given in Size, 0: Var, size is
777*4882a593Smuzhiyun 			    nominal */
778*4882a593Smuzhiyun #endif
779*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_WMM_TSPEC_NomMSDUSize_t;
780*4882a593Smuzhiyun 
781*4882a593Smuzhiyun /** Data structure of WMM TSPEC SBWA */
782*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
783*4882a593Smuzhiyun #ifdef BIG_ENDIAN_SUPPORT
784*4882a593Smuzhiyun 	t_u16 Whole : 3; /* ! Whole portion */
785*4882a593Smuzhiyun 	t_u16 Fractional : 13; /* ! Fractional portion */
786*4882a593Smuzhiyun #else
787*4882a593Smuzhiyun 	t_u16 Fractional : 13; /* ! Fractional portion */
788*4882a593Smuzhiyun 	t_u16 Whole : 3; /* ! Whole portion */
789*4882a593Smuzhiyun #endif
790*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_WMM_TSPEC_SBWA;
791*4882a593Smuzhiyun 
792*4882a593Smuzhiyun /** Data structure of WMM TSPEC Body */
793*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
794*4882a593Smuzhiyun 	IEEEtypes_WMM_TSPEC_TS_Info_t TSInfo;
795*4882a593Smuzhiyun 	IEEEtypes_WMM_TSPEC_NomMSDUSize_t NomMSDUSize;
796*4882a593Smuzhiyun 	t_u16 MaximumMSDUSize;
797*4882a593Smuzhiyun 	t_u32 MinServiceInterval;
798*4882a593Smuzhiyun 	t_u32 MaxServiceInterval;
799*4882a593Smuzhiyun 	t_u32 InactivityInterval;
800*4882a593Smuzhiyun 	t_u32 SuspensionInterval;
801*4882a593Smuzhiyun 	t_u32 ServiceStartTime;
802*4882a593Smuzhiyun 	t_u32 MinimumDataRate;
803*4882a593Smuzhiyun 	t_u32 MeanDataRate;
804*4882a593Smuzhiyun 	t_u32 PeakDataRate;
805*4882a593Smuzhiyun 	t_u32 MaxBurstSize;
806*4882a593Smuzhiyun 	t_u32 DelayBound;
807*4882a593Smuzhiyun 	t_u32 MinPHYRate;
808*4882a593Smuzhiyun 	IEEEtypes_WMM_TSPEC_SBWA SurplusBWAllowance;
809*4882a593Smuzhiyun 	t_u16 MediumTime;
810*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_WMM_TSPEC_Body_t;
811*4882a593Smuzhiyun 
812*4882a593Smuzhiyun /** Data structure of WMM TSPEC all elements */
813*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
814*4882a593Smuzhiyun 	t_u8 ElementId;
815*4882a593Smuzhiyun 	t_u8 Len;
816*4882a593Smuzhiyun 	t_u8 OuiType[4]; /* 00:50:f2:02 */
817*4882a593Smuzhiyun 	t_u8 OuiSubType; /* 01 */
818*4882a593Smuzhiyun 	t_u8 Version;
819*4882a593Smuzhiyun 
820*4882a593Smuzhiyun 	IEEEtypes_WMM_TSPEC_Body_t TspecBody;
821*4882a593Smuzhiyun 
822*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_WMM_TSPEC_t;
823*4882a593Smuzhiyun 
824*4882a593Smuzhiyun /** WMM Action Category values */
825*4882a593Smuzhiyun typedef MLAN_PACK_START enum _IEEEtypes_ActionCategory_e {
826*4882a593Smuzhiyun 
827*4882a593Smuzhiyun 	IEEE_MGMT_ACTION_CATEGORY_SPECTRUM_MGMT = 0,
828*4882a593Smuzhiyun 	IEEE_MGMT_ACTION_CATEGORY_QOS = 1,
829*4882a593Smuzhiyun 	IEEE_MGMT_ACTION_CATEGORY_DLS = 2,
830*4882a593Smuzhiyun 	IEEE_MGMT_ACTION_CATEGORY_BLOCK_ACK = 3,
831*4882a593Smuzhiyun 	IEEE_MGMT_ACTION_CATEGORY_PUBLIC = 4,
832*4882a593Smuzhiyun 	IEEE_MGMT_ACTION_CATEGORY_RADIO_RSRC = 5,
833*4882a593Smuzhiyun 	IEEE_MGMT_ACTION_CATEGORY_FAST_BSS_TRANS = 6,
834*4882a593Smuzhiyun 	IEEE_MGMT_ACTION_CATEGORY_HT = 7,
835*4882a593Smuzhiyun 
836*4882a593Smuzhiyun 	IEEE_MGMT_ACTION_CATEGORY_WNM = 10,
837*4882a593Smuzhiyun 	IEEE_MGMT_ACTION_CATEGORY_UNPROTECT_WNM = 11,
838*4882a593Smuzhiyun 
839*4882a593Smuzhiyun 	IEEE_MGMT_ACTION_CATEGORY_WMM_TSPEC = 17
840*4882a593Smuzhiyun 
841*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_ActionCategory_e;
842*4882a593Smuzhiyun 
843*4882a593Smuzhiyun /** WMM TSPEC operations */
844*4882a593Smuzhiyun typedef MLAN_PACK_START enum _IEEEtypes_WMM_Tspec_Action_e {
845*4882a593Smuzhiyun 
846*4882a593Smuzhiyun 	TSPEC_ACTION_CODE_ADDTS_REQ = 0,
847*4882a593Smuzhiyun 	TSPEC_ACTION_CODE_ADDTS_RSP = 1,
848*4882a593Smuzhiyun 	TSPEC_ACTION_CODE_DELTS = 2,
849*4882a593Smuzhiyun 
850*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_WMM_Tspec_Action_e;
851*4882a593Smuzhiyun 
852*4882a593Smuzhiyun /** WMM TSPEC Category Action Base */
853*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
854*4882a593Smuzhiyun 	IEEEtypes_ActionCategory_e category;
855*4882a593Smuzhiyun 	IEEEtypes_WMM_Tspec_Action_e action;
856*4882a593Smuzhiyun 	t_u8 dialogToken;
857*4882a593Smuzhiyun 
858*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_WMM_Tspec_Action_Base_Tspec_t;
859*4882a593Smuzhiyun 
860*4882a593Smuzhiyun /** WMM TSPEC AddTS request structure */
861*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
862*4882a593Smuzhiyun 	IEEEtypes_WMM_Tspec_Action_Base_Tspec_t tspecAct;
863*4882a593Smuzhiyun 	t_u8 statusCode;
864*4882a593Smuzhiyun 	IEEEtypes_WMM_TSPEC_t tspecIE;
865*4882a593Smuzhiyun 
866*4882a593Smuzhiyun 	/* Place holder for additional elements after the TSPEC */
867*4882a593Smuzhiyun 	t_u8 subElem[256];
868*4882a593Smuzhiyun 
869*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_Action_WMM_AddTsReq_t;
870*4882a593Smuzhiyun 
871*4882a593Smuzhiyun /** WMM TSPEC AddTS response structure */
872*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
873*4882a593Smuzhiyun 	IEEEtypes_WMM_Tspec_Action_Base_Tspec_t tspecAct;
874*4882a593Smuzhiyun 	t_u8 statusCode;
875*4882a593Smuzhiyun 	IEEEtypes_WMM_TSPEC_t tspecIE;
876*4882a593Smuzhiyun 
877*4882a593Smuzhiyun 	/* Place holder for additional elements after the TSPEC */
878*4882a593Smuzhiyun 	t_u8 subElem[256];
879*4882a593Smuzhiyun 
880*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_Action_WMM_AddTsRsp_t;
881*4882a593Smuzhiyun 
882*4882a593Smuzhiyun /** WMM TSPEC DelTS structure */
883*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
884*4882a593Smuzhiyun 	IEEEtypes_WMM_Tspec_Action_Base_Tspec_t tspecAct;
885*4882a593Smuzhiyun 	t_u8 reasonCode;
886*4882a593Smuzhiyun 	IEEEtypes_WMM_TSPEC_t tspecIE;
887*4882a593Smuzhiyun 
888*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_Action_WMM_DelTs_t;
889*4882a593Smuzhiyun 
890*4882a593Smuzhiyun /** union of WMM TSPEC structures */
891*4882a593Smuzhiyun typedef MLAN_PACK_START union {
892*4882a593Smuzhiyun 	IEEEtypes_WMM_Tspec_Action_Base_Tspec_t tspecAct;
893*4882a593Smuzhiyun 
894*4882a593Smuzhiyun 	IEEEtypes_Action_WMM_AddTsReq_t addTsReq;
895*4882a593Smuzhiyun 	IEEEtypes_Action_WMM_AddTsRsp_t addTsRsp;
896*4882a593Smuzhiyun 	IEEEtypes_Action_WMM_DelTs_t delTs;
897*4882a593Smuzhiyun 
898*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_Action_WMMAC_t;
899*4882a593Smuzhiyun 
900*4882a593Smuzhiyun /** union of WMM TSPEC & Action category */
901*4882a593Smuzhiyun typedef MLAN_PACK_START union {
902*4882a593Smuzhiyun 	IEEEtypes_ActionCategory_e category;
903*4882a593Smuzhiyun 
904*4882a593Smuzhiyun 	IEEEtypes_Action_WMMAC_t wmmAc;
905*4882a593Smuzhiyun 
906*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_ActionFrame_t;
907*4882a593Smuzhiyun 
908*4882a593Smuzhiyun /** Data structure for subband set */
909*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_SubbandSet_t {
910*4882a593Smuzhiyun 	/** First channel */
911*4882a593Smuzhiyun 	t_u8 first_chan;
912*4882a593Smuzhiyun 	/** Number of channels */
913*4882a593Smuzhiyun 	t_u8 no_of_chan;
914*4882a593Smuzhiyun 	/** Maximum Tx power in dBm */
915*4882a593Smuzhiyun 	t_u8 max_tx_pwr;
916*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_SubbandSet_t, *pIEEEtypes_SubbandSet_t;
917*4882a593Smuzhiyun 
918*4882a593Smuzhiyun #ifdef STA_SUPPORT
919*4882a593Smuzhiyun /** Data structure for Country IE */
920*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_CountryInfoSet_t {
921*4882a593Smuzhiyun 	/** Element ID */
922*4882a593Smuzhiyun 	t_u8 element_id;
923*4882a593Smuzhiyun 	/** Length */
924*4882a593Smuzhiyun 	t_u8 len;
925*4882a593Smuzhiyun 	/** Country code */
926*4882a593Smuzhiyun 	t_u8 country_code[COUNTRY_CODE_LEN];
927*4882a593Smuzhiyun 	/** Set of subbands */
928*4882a593Smuzhiyun 	IEEEtypes_SubbandSet_t sub_band[1];
929*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_CountryInfoSet_t, *pIEEEtypes_CountryInfoSet_t;
930*4882a593Smuzhiyun 
931*4882a593Smuzhiyun /** Data structure for Country IE full set */
932*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_CountryInfoFullSet_t {
933*4882a593Smuzhiyun 	/** Element ID */
934*4882a593Smuzhiyun 	t_u8 element_id;
935*4882a593Smuzhiyun 	/** Length */
936*4882a593Smuzhiyun 	t_u8 len;
937*4882a593Smuzhiyun 	/** Country code */
938*4882a593Smuzhiyun 	t_u8 country_code[COUNTRY_CODE_LEN];
939*4882a593Smuzhiyun 	/** Set of subbands */
940*4882a593Smuzhiyun 	IEEEtypes_SubbandSet_t sub_band[MRVDRV_MAX_SUBBAND_802_11D];
941*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_CountryInfoFullSet_t,
942*4882a593Smuzhiyun 	*pIEEEtypes_CountryInfoFullSet_t;
943*4882a593Smuzhiyun 
944*4882a593Smuzhiyun #endif /* STA_SUPPORT */
945*4882a593Smuzhiyun 
946*4882a593Smuzhiyun /** Data structure for Link ID */
947*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_LinkIDElement_t {
948*4882a593Smuzhiyun 	/** Element ID */
949*4882a593Smuzhiyun 	t_u8 element_id;
950*4882a593Smuzhiyun 	/** Length */
951*4882a593Smuzhiyun 	t_u8 len;
952*4882a593Smuzhiyun 	/** bssid */
953*4882a593Smuzhiyun 	t_u8 bssid[MLAN_MAC_ADDR_LENGTH];
954*4882a593Smuzhiyun 	/** initial sta address */
955*4882a593Smuzhiyun 	t_u8 init_sta[MLAN_MAC_ADDR_LENGTH];
956*4882a593Smuzhiyun 	/** respose sta address */
957*4882a593Smuzhiyun 	t_u8 resp_sta[MLAN_MAC_ADDR_LENGTH];
958*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_LinkIDElement_t, *pIEEEtypes_LinkIDElement_t;
959*4882a593Smuzhiyun 
960*4882a593Smuzhiyun /** HT Capabilities Data */
961*4882a593Smuzhiyun typedef struct MLAN_PACK_START _HTCap_t {
962*4882a593Smuzhiyun 	/** HT Capabilities Info field */
963*4882a593Smuzhiyun 	t_u16 ht_cap_info;
964*4882a593Smuzhiyun 	/** A-MPDU Parameters field */
965*4882a593Smuzhiyun 	t_u8 ampdu_param;
966*4882a593Smuzhiyun 	/** Supported MCS Set field */
967*4882a593Smuzhiyun 	t_u8 supported_mcs_set[16];
968*4882a593Smuzhiyun 	/** HT Extended Capabilities field */
969*4882a593Smuzhiyun 	t_u16 ht_ext_cap;
970*4882a593Smuzhiyun 	/** Transmit Beamforming Capabilities field */
971*4882a593Smuzhiyun 	t_u32 tx_bf_cap;
972*4882a593Smuzhiyun 	/** Antenna Selection Capability field */
973*4882a593Smuzhiyun 	t_u8 asel;
974*4882a593Smuzhiyun } MLAN_PACK_END HTCap_t, *pHTCap_t;
975*4882a593Smuzhiyun 
976*4882a593Smuzhiyun /** HT Information Data */
977*4882a593Smuzhiyun typedef struct MLAN_PACK_START _HTInfo_t {
978*4882a593Smuzhiyun 	/** Primary channel */
979*4882a593Smuzhiyun 	t_u8 pri_chan;
980*4882a593Smuzhiyun 	/** Field 2 */
981*4882a593Smuzhiyun 	t_u8 field2;
982*4882a593Smuzhiyun 	/** Field 3 */
983*4882a593Smuzhiyun 	t_u16 field3;
984*4882a593Smuzhiyun 	/** Field 4 */
985*4882a593Smuzhiyun 	t_u16 field4;
986*4882a593Smuzhiyun 	/** Bitmap indicating MCSs supported by all HT STAs in the BSS */
987*4882a593Smuzhiyun 	t_u8 basic_mcs_set[16];
988*4882a593Smuzhiyun } MLAN_PACK_END HTInfo_t, *pHTInfo_t;
989*4882a593Smuzhiyun 
990*4882a593Smuzhiyun /** 20/40 BSS Coexistence Data */
991*4882a593Smuzhiyun typedef struct MLAN_PACK_START _BSSCo2040_t {
992*4882a593Smuzhiyun 	/** 20/40 BSS Coexistence value */
993*4882a593Smuzhiyun 	t_u8 bss_co_2040_value;
994*4882a593Smuzhiyun } MLAN_PACK_END BSSCo2040_t, *pBSSCo2040_t;
995*4882a593Smuzhiyun 
996*4882a593Smuzhiyun #define MAX_DSCP_EXCEPTION_NUM 21
997*4882a593Smuzhiyun /** DSCP Range */
998*4882a593Smuzhiyun typedef struct MLAN_PACK_START _DSCP_Exception_t {
999*4882a593Smuzhiyun 	/* DSCP value 0 to 63 or ff */
1000*4882a593Smuzhiyun 	t_u8 dscp_value;
1001*4882a593Smuzhiyun 	/* user priority 0-7*/
1002*4882a593Smuzhiyun 	t_u8 user_priority;
1003*4882a593Smuzhiyun } MLAN_PACK_END DSCP_Exception_t, *pDSCP_Exception_t;
1004*4882a593Smuzhiyun 
1005*4882a593Smuzhiyun /** DSCP Range */
1006*4882a593Smuzhiyun typedef struct MLAN_PACK_START _DSCP_Range_t {
1007*4882a593Smuzhiyun 	/* DSCP low value */
1008*4882a593Smuzhiyun 	t_u8 dscp_low_value;
1009*4882a593Smuzhiyun 	/* DSCP high value */
1010*4882a593Smuzhiyun 	t_u8 dscp_high_value;
1011*4882a593Smuzhiyun } MLAN_PACK_END DSCP_Range_t, *pDSCP_Range_t;
1012*4882a593Smuzhiyun 
1013*4882a593Smuzhiyun /** Overlapping BSS Scan Parameters Data */
1014*4882a593Smuzhiyun typedef struct MLAN_PACK_START _OverlapBSSScanParam_t {
1015*4882a593Smuzhiyun 	/** OBSS Scan Passive Dwell in milliseconds */
1016*4882a593Smuzhiyun 	t_u16 obss_scan_passive_dwell;
1017*4882a593Smuzhiyun 	/** OBSS Scan Active Dwell in milliseconds */
1018*4882a593Smuzhiyun 	t_u16 obss_scan_active_dwell;
1019*4882a593Smuzhiyun 	/** BSS Channel Width Trigger Scan Interval in seconds */
1020*4882a593Smuzhiyun 	t_u16 bss_chan_width_trigger_scan_int;
1021*4882a593Smuzhiyun 	/** OBSS Scan Passive Total Per Channel */
1022*4882a593Smuzhiyun 	t_u16 obss_scan_passive_total;
1023*4882a593Smuzhiyun 	/** OBSS Scan Active Total Per Channel */
1024*4882a593Smuzhiyun 	t_u16 obss_scan_active_total;
1025*4882a593Smuzhiyun 	/** BSS Width Channel Transition Delay Factor */
1026*4882a593Smuzhiyun 	t_u16 bss_width_chan_trans_delay;
1027*4882a593Smuzhiyun 	/** OBSS Scan Activity Threshold */
1028*4882a593Smuzhiyun 	t_u16 obss_scan_active_threshold;
1029*4882a593Smuzhiyun } MLAN_PACK_END OBSSScanParam_t, *pOBSSScanParam_t;
1030*4882a593Smuzhiyun 
1031*4882a593Smuzhiyun /** HT Capabilities IE */
1032*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_HTCap_t {
1033*4882a593Smuzhiyun 	/** Generic IE header */
1034*4882a593Smuzhiyun 	IEEEtypes_Header_t ieee_hdr;
1035*4882a593Smuzhiyun 	/** HTCap struct */
1036*4882a593Smuzhiyun 	HTCap_t ht_cap;
1037*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_HTCap_t, *pIEEEtypes_HTCap_t;
1038*4882a593Smuzhiyun 
1039*4882a593Smuzhiyun /** HT Information IE */
1040*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_HTInfo_t {
1041*4882a593Smuzhiyun 	/** Generic IE header */
1042*4882a593Smuzhiyun 	IEEEtypes_Header_t ieee_hdr;
1043*4882a593Smuzhiyun 	/** HTInfo struct */
1044*4882a593Smuzhiyun 	HTInfo_t ht_info;
1045*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_HTInfo_t, *pIEEEtypes_HTInfo_t;
1046*4882a593Smuzhiyun 
1047*4882a593Smuzhiyun /** the AP which send the multi_bssid IE */
1048*4882a593Smuzhiyun #define MULTI_BSSID_AP 1
1049*4882a593Smuzhiyun /** the AP which don't send beacon */
1050*4882a593Smuzhiyun #define MULTI_BSSID_SUB_AP 2
1051*4882a593Smuzhiyun /** IEEEtypes_NotxBssCap_t */
1052*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_NotxBssCap_t {
1053*4882a593Smuzhiyun 	/** Nontransmitted BSSID Capability: Element ID */
1054*4882a593Smuzhiyun 	t_u8 element_id;
1055*4882a593Smuzhiyun 	/** Nontransmitted BSSID Capability : Length */
1056*4882a593Smuzhiyun 	t_u8 len;
1057*4882a593Smuzhiyun 	/** capability */
1058*4882a593Smuzhiyun 	t_u16 cap;
1059*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_NotxBssCap_t, *pIEEEtypes_NotxBssCap_t;
1060*4882a593Smuzhiyun 
1061*4882a593Smuzhiyun /** Multi BSSID IE */
1062*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_MultiBSSIDIndex_t {
1063*4882a593Smuzhiyun 	/** Generic IE header */
1064*4882a593Smuzhiyun 	IEEEtypes_Header_t ieee_hdr;
1065*4882a593Smuzhiyun 	/** BSSID Index */
1066*4882a593Smuzhiyun 	t_u8 bssid_index;
1067*4882a593Smuzhiyun 	/** DTIM Period (Optional, not Present in ProbeRsp) */
1068*4882a593Smuzhiyun 	t_u8 dtim_period;
1069*4882a593Smuzhiyun 	/** DTIM Count (Optional, not Present in ProbeRsp) */
1070*4882a593Smuzhiyun 	t_u8 dtim_count;
1071*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_MultiBSSIDIndex_t, *pIEEEtypes_MultiBSSIDIndex_t;
1072*4882a593Smuzhiyun 
1073*4882a593Smuzhiyun /** NonTransmitted BSSID Profile Subelement IE */
1074*4882a593Smuzhiyun /** SUBID for IEEEtypes_NonTransBSSIDCap_t */
1075*4882a593Smuzhiyun #define NONTRANS_BSSID_PROFILE_SUBELEM_ID 0
1076*4882a593Smuzhiyun 
1077*4882a593Smuzhiyun /** NonTransmitted BSSID Capability IE */
1078*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_NonTransBSSIDProfile_t {
1079*4882a593Smuzhiyun 	/** Generic IE header */
1080*4882a593Smuzhiyun 	IEEEtypes_Header_t ieee_hdr;
1081*4882a593Smuzhiyun 	t_u8 profile_data[];
1082*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_NonTransBSSIDProfile_t,
1083*4882a593Smuzhiyun 	*pIEEEtypes_NonTransBSSIDProfile_t;
1084*4882a593Smuzhiyun 
1085*4882a593Smuzhiyun /** Multi BSSID IE */
1086*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_MultiBSSID_t {
1087*4882a593Smuzhiyun 	/** Generic IE header */
1088*4882a593Smuzhiyun 	IEEEtypes_Header_t ieee_hdr;
1089*4882a593Smuzhiyun 	/** Max BSSID Indicator */
1090*4882a593Smuzhiyun 	t_u8 max_bssid_indicator;
1091*4882a593Smuzhiyun 	/** Optional Subelement data*/
1092*4882a593Smuzhiyun 	t_u8 sub_elem_data[];
1093*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_MultiBSSID_t, *pIEEEtypes_MultiBSSID_t;
1094*4882a593Smuzhiyun /** 20/40 BSS Coexistence IE */
1095*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_2040BSSCo_t {
1096*4882a593Smuzhiyun 	/** Generic IE header */
1097*4882a593Smuzhiyun 	IEEEtypes_Header_t ieee_hdr;
1098*4882a593Smuzhiyun 	/** BSSCo2040_t struct */
1099*4882a593Smuzhiyun 	BSSCo2040_t bss_co_2040;
1100*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_2040BSSCo_t, *pIEEEtypes_2040BSSCo_t;
1101*4882a593Smuzhiyun 
1102*4882a593Smuzhiyun /** Extended Capabilities IE */
1103*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_ExtCap_t {
1104*4882a593Smuzhiyun 	/** Generic IE header */
1105*4882a593Smuzhiyun 	IEEEtypes_Header_t ieee_hdr;
1106*4882a593Smuzhiyun 	/** ExtCap_t struct */
1107*4882a593Smuzhiyun 	ExtCap_t ext_cap;
1108*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_ExtCap_t, *pIEEEtypes_ExtCap_t;
1109*4882a593Smuzhiyun 
1110*4882a593Smuzhiyun /** Overlapping BSS Scan Parameters IE */
1111*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_OverlapBSSScanParam_t {
1112*4882a593Smuzhiyun 	/** Generic IE header */
1113*4882a593Smuzhiyun 	IEEEtypes_Header_t ieee_hdr;
1114*4882a593Smuzhiyun 	/** OBSSScanParam_t struct */
1115*4882a593Smuzhiyun 	OBSSScanParam_t obss_scan_param;
1116*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_OverlapBSSScanParam_t,
1117*4882a593Smuzhiyun 	*pIEEEtypes_OverlapBSSScanParam_t;
1118*4882a593Smuzhiyun 
1119*4882a593Smuzhiyun /** VHT MCS rate set field, refer to 802.11ac */
1120*4882a593Smuzhiyun typedef MLAN_PACK_START struct _VHT_MCS_set {
1121*4882a593Smuzhiyun 	t_u16 rx_mcs_map;
1122*4882a593Smuzhiyun 	t_u16 rx_max_rate; /* bit 29-31 reserved */
1123*4882a593Smuzhiyun 	t_u16 tx_mcs_map;
1124*4882a593Smuzhiyun 	t_u16 tx_max_rate; /* bit 61-63 reserved */
1125*4882a593Smuzhiyun } MLAN_PACK_END VHT_MCS_set_t, *pVHT_MCS_set_t;
1126*4882a593Smuzhiyun 
1127*4882a593Smuzhiyun /** VHT Capabilities info field, reference 802.11ac D1.4 p89 */
1128*4882a593Smuzhiyun typedef MLAN_PACK_START struct _VHT_capa {
1129*4882a593Smuzhiyun #if 0
1130*4882a593Smuzhiyun #ifdef BIG_ENDIAN_SUPPORT
1131*4882a593Smuzhiyun     t_u8 mpdu_max_len:2;
1132*4882a593Smuzhiyun     t_u8 chan_width:2;
1133*4882a593Smuzhiyun     t_u8 rx_LDPC:1;
1134*4882a593Smuzhiyun     t_u8 sgi_80:1;
1135*4882a593Smuzhiyun     t_u8 sgi_160:1;
1136*4882a593Smuzhiyun     t_u8 tx_STBC:1;
1137*4882a593Smuzhiyun     t_u8 rx_STBC:3;
1138*4882a593Smuzhiyun     t_u8 SU_beamformer_capa:1;
1139*4882a593Smuzhiyun     t_u8 SU_beamformee_capa:1;
1140*4882a593Smuzhiyun     t_u8 beamformer_ante_num:3;
1141*4882a593Smuzhiyun     t_u8 sounding_dim_num:3;
1142*4882a593Smuzhiyun     t_u8 MU_beamformer_capa:1;
1143*4882a593Smuzhiyun     t_u8 MU_beamformee_capa:1;
1144*4882a593Smuzhiyun     t_u8 VHT_TXOP_ps:1;
1145*4882a593Smuzhiyun     t_u8 HTC_VHT_capa:1;
1146*4882a593Smuzhiyun     t_u8 max_ampdu_len:3;
1147*4882a593Smuzhiyun     t_u8 link_apapt_capa:2;
1148*4882a593Smuzhiyun     t_u8 reserved_1:4;
1149*4882a593Smuzhiyun #else
1150*4882a593Smuzhiyun     t_u8 reserved_1:4;
1151*4882a593Smuzhiyun     t_u8 link_apapt_capa:2;
1152*4882a593Smuzhiyun     t_u8 max_ampdu_len:3;
1153*4882a593Smuzhiyun     t_u8 HTC_VHT_capa:1;
1154*4882a593Smuzhiyun     t_u8 VHT_TXOP_ps:1;
1155*4882a593Smuzhiyun     t_u8 MU_beamformee_capa:1;
1156*4882a593Smuzhiyun     t_u8 MU_beamformer_capa:1;
1157*4882a593Smuzhiyun     t_u8 sounding_dim_num:3;
1158*4882a593Smuzhiyun     t_u8 beamformer_ante_num:3;
1159*4882a593Smuzhiyun     t_u8 SU_beamformee_capa:1;
1160*4882a593Smuzhiyun     t_u8 SU_beamformer_capa:1;
1161*4882a593Smuzhiyun     t_u8 rx_STBC:3;
1162*4882a593Smuzhiyun     t_u8 tx_STBC:1;
1163*4882a593Smuzhiyun     t_u8 sgi_160:1;
1164*4882a593Smuzhiyun     t_u8 sgi_80:1;
1165*4882a593Smuzhiyun     t_u8 rx_LDPC:1;
1166*4882a593Smuzhiyun     t_u8 chan_width:2;
1167*4882a593Smuzhiyun     t_u8 mpdu_max_len:2;
1168*4882a593Smuzhiyun #endif /* BIG_ENDIAN_SUPPORT */
1169*4882a593Smuzhiyun #endif
1170*4882a593Smuzhiyun 	t_u32 vht_cap_info;
1171*4882a593Smuzhiyun 	VHT_MCS_set_t mcs_sets;
1172*4882a593Smuzhiyun } MLAN_PACK_END VHT_capa_t, *pVHT_capa_t;
1173*4882a593Smuzhiyun 
1174*4882a593Smuzhiyun /** VHT Capabilities IE */
1175*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_VHTCap_t {
1176*4882a593Smuzhiyun 	/** Generic IE header */
1177*4882a593Smuzhiyun 	IEEEtypes_Header_t ieee_hdr;
1178*4882a593Smuzhiyun 	VHT_capa_t vht_cap;
1179*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_VHTCap_t, *pIEEEtypes_VHTCap_t;
1180*4882a593Smuzhiyun 
1181*4882a593Smuzhiyun #define VHT_CAP_CHWD_80MHZ 0
1182*4882a593Smuzhiyun #define VHT_CAP_CHWD_160MHZ 1
1183*4882a593Smuzhiyun #define VHT_CAP_CHWD_80_80MHZ 2
1184*4882a593Smuzhiyun 
1185*4882a593Smuzhiyun /** VHT Operations IE */
1186*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_VHTOprat_t {
1187*4882a593Smuzhiyun 	/** Generic IE header */
1188*4882a593Smuzhiyun 	IEEEtypes_Header_t ieee_hdr;
1189*4882a593Smuzhiyun 	t_u8 chan_width;
1190*4882a593Smuzhiyun 	t_u8 chan_center_freq_1;
1191*4882a593Smuzhiyun 	t_u8 chan_center_freq_2;
1192*4882a593Smuzhiyun 	/** Basic MCS set map, each 2 bits stands for a Nss */
1193*4882a593Smuzhiyun 	t_u16 basic_MCS_map;
1194*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_VHTOprat_t, *pIEEEtypes_VHTOprat_t;
1195*4882a593Smuzhiyun 
1196*4882a593Smuzhiyun #define VHT_OPER_CHWD_20_40MHZ 0
1197*4882a593Smuzhiyun #define VHT_OPER_CHWD_80MHZ 1
1198*4882a593Smuzhiyun #define VHT_OPER_CHWD_160MHZ 2
1199*4882a593Smuzhiyun #define VHT_OPER_CHWD_80_80MHZ 3
1200*4882a593Smuzhiyun 
1201*4882a593Smuzhiyun /** VHT Transmit Power Envelope IE */
1202*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_VHTtxpower_t {
1203*4882a593Smuzhiyun 	/** Generic IE header */
1204*4882a593Smuzhiyun 	IEEEtypes_Header_t ieee_hdr;
1205*4882a593Smuzhiyun 	t_u8 max_tx_power;
1206*4882a593Smuzhiyun 	t_u8 chan_center_freq;
1207*4882a593Smuzhiyun 	t_u8 chan_width;
1208*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_VHTtxpower_t, *pIEEEtypes_VHTtxpower_t;
1209*4882a593Smuzhiyun 
1210*4882a593Smuzhiyun /** Extended Power Constraint IE */
1211*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_ExtPwerCons_t {
1212*4882a593Smuzhiyun 	/** Generic IE header */
1213*4882a593Smuzhiyun 	IEEEtypes_Header_t ieee_hdr;
1214*4882a593Smuzhiyun 	/** channel width */
1215*4882a593Smuzhiyun 	t_u8 chan_width;
1216*4882a593Smuzhiyun 	/** local power constraint */
1217*4882a593Smuzhiyun 	t_u8 local_power_cons;
1218*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_ExtPwerCons_t, *pIEEEtypes_ExtPwerCons_t;
1219*4882a593Smuzhiyun 
1220*4882a593Smuzhiyun /** Extended BSS Load IE */
1221*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_ExtBSSload_t {
1222*4882a593Smuzhiyun 	/** Generic IE header */
1223*4882a593Smuzhiyun 	IEEEtypes_Header_t ieee_hdr;
1224*4882a593Smuzhiyun 	t_u8 MU_MIMO_capa_count;
1225*4882a593Smuzhiyun 	t_u8 stream_underutilization;
1226*4882a593Smuzhiyun 	t_u8 VHT40_util;
1227*4882a593Smuzhiyun 	t_u8 VHT80_util;
1228*4882a593Smuzhiyun 	t_u8 VHT160_util;
1229*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_ExtBSSload_t, *pIEEEtypes_ExtBSSload_t;
1230*4882a593Smuzhiyun 
1231*4882a593Smuzhiyun /** Quiet Channel IE */
1232*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_QuietChan_t {
1233*4882a593Smuzhiyun 	/** Generic IE header */
1234*4882a593Smuzhiyun 	IEEEtypes_Header_t ieee_hdr;
1235*4882a593Smuzhiyun 	t_u8 AP_quiet_mode;
1236*4882a593Smuzhiyun 	t_u8 quiet_count;
1237*4882a593Smuzhiyun 	t_u8 quiet_period;
1238*4882a593Smuzhiyun 	t_u16 quiet_dur;
1239*4882a593Smuzhiyun 	t_u16 quiet_offset;
1240*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_QuietChan_t, *pIEEEtypes_QuietChan_t;
1241*4882a593Smuzhiyun 
1242*4882a593Smuzhiyun /** Wide Bandwidth Channel Switch IE */
1243*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_BWSwitch_t {
1244*4882a593Smuzhiyun 	/** Generic IE header */
1245*4882a593Smuzhiyun 	IEEEtypes_Header_t ieee_hdr;
1246*4882a593Smuzhiyun 	t_u8 new_chan_width;
1247*4882a593Smuzhiyun 	t_u8 new_chan_center_freq_1;
1248*4882a593Smuzhiyun 	t_u8 new_chan_center_freq_2;
1249*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_BWSwitch_t, *pIEEEtypes_BWSwitch_t;
1250*4882a593Smuzhiyun 
1251*4882a593Smuzhiyun /** AID IE */
1252*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_AID_t {
1253*4882a593Smuzhiyun 	/** Generic IE header */
1254*4882a593Smuzhiyun 	IEEEtypes_Header_t ieee_hdr;
1255*4882a593Smuzhiyun 	/** AID number */
1256*4882a593Smuzhiyun 	t_u16 AID;
1257*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_AID_t, *pIEEEtypes_AID_t;
1258*4882a593Smuzhiyun 
1259*4882a593Smuzhiyun /** Operating Mode Notificaton IE */
1260*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_OperModeNtf_t {
1261*4882a593Smuzhiyun 	/** Generic IE header */
1262*4882a593Smuzhiyun 	IEEEtypes_Header_t ieee_hdr;
1263*4882a593Smuzhiyun 	/** Operating Mode */
1264*4882a593Smuzhiyun 	t_u8 oper_mode;
1265*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_OperModeNtf_t, *pIEEEtypes_OperModeNtf_t;
1266*4882a593Smuzhiyun 
1267*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_Extension_t {
1268*4882a593Smuzhiyun 	/** Generic IE header */
1269*4882a593Smuzhiyun 	IEEEtypes_Header_t ieee_hdr;
1270*4882a593Smuzhiyun 	/** Element id extension */
1271*4882a593Smuzhiyun 	t_u8 ext_id;
1272*4882a593Smuzhiyun 	/** payload */
1273*4882a593Smuzhiyun 	t_u8 data[];
1274*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_Extension_t, *pIEEEtypes_Extension_t;
1275*4882a593Smuzhiyun 
1276*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_HeMcsMap_t {
1277*4882a593Smuzhiyun #ifdef BIG_ENDIAN_SUPPORT
1278*4882a593Smuzhiyun 	/** Max HE-MAC for 8 SS */
1279*4882a593Smuzhiyun 	t_u8 max_mcs_8ss : 2;
1280*4882a593Smuzhiyun 	/** Max HE-MAC for 7 SS */
1281*4882a593Smuzhiyun 	t_u8 max_mcs_7ss : 2;
1282*4882a593Smuzhiyun 	/** Max HE-MAC for 6 SS */
1283*4882a593Smuzhiyun 	t_u8 max_mcs_6ss : 2;
1284*4882a593Smuzhiyun 	/** Max HE-MAC for 5 SS */
1285*4882a593Smuzhiyun 	t_u8 max_mcs_5ss : 2;
1286*4882a593Smuzhiyun 	/** Max HE-MAC for 4 SS */
1287*4882a593Smuzhiyun 	t_u8 max_mcs_4ss : 2;
1288*4882a593Smuzhiyun 	/** Max HE-MAC for 3 SS */
1289*4882a593Smuzhiyun 	t_u8 max_mcs_3ss : 2;
1290*4882a593Smuzhiyun 	/** Max HE-MAC for 2 SS */
1291*4882a593Smuzhiyun 	t_u8 max_mcs_2ss : 2;
1292*4882a593Smuzhiyun 	/** Max HE-MAC for 1 SS */
1293*4882a593Smuzhiyun 	t_u8 max_mcs_1ss : 2;
1294*4882a593Smuzhiyun #else
1295*4882a593Smuzhiyun 	/** Max HE-MAC for 1 SS */
1296*4882a593Smuzhiyun 	t_u8 max_mcs_1ss : 2;
1297*4882a593Smuzhiyun 	/** Max HE-MAC for 2 SS */
1298*4882a593Smuzhiyun 	t_u8 max_mcs_2ss : 2;
1299*4882a593Smuzhiyun 	/** Max HE-MAC for 3 SS */
1300*4882a593Smuzhiyun 	t_u8 max_mcs_3ss : 2;
1301*4882a593Smuzhiyun 	/** Max HE-MAC for 4 SS */
1302*4882a593Smuzhiyun 	t_u8 max_mcs_4ss : 2;
1303*4882a593Smuzhiyun 	/** Max HE-MAC for 5 SS */
1304*4882a593Smuzhiyun 	t_u8 max_mcs_5ss : 2;
1305*4882a593Smuzhiyun 	/** Max HE-MAC for 6 SS */
1306*4882a593Smuzhiyun 	t_u8 max_mcs_6ss : 2;
1307*4882a593Smuzhiyun 	/** Max HE-MAC for 7 SS */
1308*4882a593Smuzhiyun 	t_u8 max_mcs_7ss : 2;
1309*4882a593Smuzhiyun 	/** Max HE-MAC for 8 SS */
1310*4882a593Smuzhiyun 	t_u8 max_mcs_8ss : 2;
1311*4882a593Smuzhiyun #endif
1312*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_HeMcsMap_t, *pIEEEtypes_HeMcsMap_t;
1313*4882a593Smuzhiyun 
1314*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_HeMcsNss_t {
1315*4882a593Smuzhiyun 	/** HE Rx MCS and NSS Set */
1316*4882a593Smuzhiyun 	t_u16 rx_mcs;
1317*4882a593Smuzhiyun 	/** HE Tx MCS and NSS Set*/
1318*4882a593Smuzhiyun 	t_u16 tx_mcs;
1319*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_HeMcsNss_t, *pIEEEtypes_HeMcsNss_t;
1320*4882a593Smuzhiyun 
1321*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_HECap_t {
1322*4882a593Smuzhiyun 	/** Generic IE header */
1323*4882a593Smuzhiyun 	IEEEtypes_Header_t ieee_hdr;
1324*4882a593Smuzhiyun 	/** Element id extension */
1325*4882a593Smuzhiyun 	t_u8 ext_id;
1326*4882a593Smuzhiyun 	/** he mac capability info */
1327*4882a593Smuzhiyun 	t_u8 he_mac_cap[6];
1328*4882a593Smuzhiyun 	/** he phy capability info */
1329*4882a593Smuzhiyun 	t_u8 he_phy_cap[11];
1330*4882a593Smuzhiyun 	/** he txrx mcs support (for 80 MHz) */
1331*4882a593Smuzhiyun 	t_u8 he_txrx_mcs_support[4];
1332*4882a593Smuzhiyun 	/** Optional Field, including he_txrx_mcs_support for 160 and 80+80 MHz,
1333*4882a593Smuzhiyun 	 * and PPE Thresholds */
1334*4882a593Smuzhiyun 	t_u8 option[28];
1335*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_HECap_t, *pIEEEtypes_HECap_t;
1336*4882a593Smuzhiyun 
1337*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_HeOpParam_t {
1338*4882a593Smuzhiyun #ifdef BIG_ENDIAN_SUPPORT
1339*4882a593Smuzhiyun 	/** Reserved, including 6G Operation Info Pressent (bit17) */
1340*4882a593Smuzhiyun 	t_u8 reserved : 6; /* bit 18-23 */
1341*4882a593Smuzhiyun 	/* 6g operation info present */
1342*4882a593Smuzhiyun 	t_u8 he_6g_op_info_present : 1; /* bit 17 */
1343*4882a593Smuzhiyun 	/** ER SU Disable */
1344*4882a593Smuzhiyun 	t_u8 er_su_disable : 1; /* bit 16 */
1345*4882a593Smuzhiyun 	/** Co-Hosted BSS */
1346*4882a593Smuzhiyun 	t_u16 co_located_bss : 1; /* bit 15 */
1347*4882a593Smuzhiyun 	/** VHT Operation Info Present */
1348*4882a593Smuzhiyun 	t_u16 vht_op_info_present : 1; /* bit 14 */
1349*4882a593Smuzhiyun 	/** TXOP Duration RTS Threshold */
1350*4882a593Smuzhiyun 	t_u16 txop_dur_rts_threshold : 10; /* bit 4-13 */
1351*4882a593Smuzhiyun 	/** TWT Required */
1352*4882a593Smuzhiyun 	t_u16 twt_req : 1; /* bit 3 */
1353*4882a593Smuzhiyun 	/** Default PE Duration */
1354*4882a593Smuzhiyun 	t_u16 default_pe_dur : 3; /* bit 0-2 */
1355*4882a593Smuzhiyun #else
1356*4882a593Smuzhiyun 	/** Default PE Duration */
1357*4882a593Smuzhiyun 	t_u16 default_pe_dur : 3; /* bit 0-2 */
1358*4882a593Smuzhiyun 	/** TWT Required */
1359*4882a593Smuzhiyun 	t_u16 twt_req : 1; /* bit 3 */
1360*4882a593Smuzhiyun 	/** TXOP Duration RTS Threshold */
1361*4882a593Smuzhiyun 	t_u16 txop_dur_rts_threshold : 10; /* bit 4-13 */
1362*4882a593Smuzhiyun 	/** VHT Operation Info Present */
1363*4882a593Smuzhiyun 	t_u16 vht_op_info_present : 1; /* bit 14 */
1364*4882a593Smuzhiyun 	/** Co-Hosted BSS */
1365*4882a593Smuzhiyun 	t_u16 co_located_bss : 1; /* bit 15 */
1366*4882a593Smuzhiyun 	/** ER SU Disable */
1367*4882a593Smuzhiyun 	t_u8 er_su_disable : 1; /* bit 16 */
1368*4882a593Smuzhiyun 	/* 6g operation info present */
1369*4882a593Smuzhiyun 	t_u8 he_6g_op_info_present : 1; /* bit 17 */
1370*4882a593Smuzhiyun 	/** Reserved bit 18-23 */
1371*4882a593Smuzhiyun 	t_u8 reserved : 6; /* bit 18-23 */
1372*4882a593Smuzhiyun #endif
1373*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_HeOpParam_t;
1374*4882a593Smuzhiyun 
1375*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_HeBssColorInfo_t {
1376*4882a593Smuzhiyun #ifdef BIG_ENDIAN_SUPPORT
1377*4882a593Smuzhiyun 	/** BSS Color Disabled */
1378*4882a593Smuzhiyun 	t_u8 bss_color_disabled : 1; /* bit 7 */
1379*4882a593Smuzhiyun 	/** Partial BSS Color */
1380*4882a593Smuzhiyun 	t_u8 partial_bss_color : 1; /* bit 6 */
1381*4882a593Smuzhiyun 	/** BSS Color */
1382*4882a593Smuzhiyun 	t_u8 bss_color : 6; /* bit 0-5 */
1383*4882a593Smuzhiyun #else
1384*4882a593Smuzhiyun 	/** BSS Color */
1385*4882a593Smuzhiyun 	t_u8 bss_color : 6; /* bit 0-5 */
1386*4882a593Smuzhiyun 	/** Partial BSS Color */
1387*4882a593Smuzhiyun 	t_u8 partial_bss_color : 1; /* bit 6 */
1388*4882a593Smuzhiyun 	/** BSS Color Disabled */
1389*4882a593Smuzhiyun 	t_u8 bss_color_disabled : 1; /* bit 7 */
1390*4882a593Smuzhiyun #endif
1391*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_HeBssColorInfo_t;
1392*4882a593Smuzhiyun 
1393*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_HeOp_t {
1394*4882a593Smuzhiyun 	/** Generic IE header */
1395*4882a593Smuzhiyun 	IEEEtypes_Header_t ieee_hdr;
1396*4882a593Smuzhiyun 	/** Element id extension */
1397*4882a593Smuzhiyun 	t_u8 ext_id;
1398*4882a593Smuzhiyun 	/** HE Operation Parameters */
1399*4882a593Smuzhiyun 	IEEEtypes_HeOpParam_t he_op_param;
1400*4882a593Smuzhiyun 	/** BSS Color Info */
1401*4882a593Smuzhiyun 	IEEEtypes_HeBssColorInfo_t bss_color_info;
1402*4882a593Smuzhiyun 	/** Basic HE-MCS and NSS Set */
1403*4882a593Smuzhiyun 	IEEEtypes_HeMcsMap_t basic_he_mcs_nss;
1404*4882a593Smuzhiyun 	/** Optional Field, including VHT Operation Info Max Co-Hosted BSSID
1405*4882a593Smuzhiyun 	 * Indicator, and 6Ghz Operation Info  */
1406*4882a593Smuzhiyun 	t_u8 option[9];
1407*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_HeOp_t;
1408*4882a593Smuzhiyun 
1409*4882a593Smuzhiyun /** default channel switch count */
1410*4882a593Smuzhiyun #define DEF_CHAN_SWITCH_COUNT 5
1411*4882a593Smuzhiyun 
1412*4882a593Smuzhiyun /*  IEEE Channel Switch Announcement Element (7.3.2.20) */
1413*4882a593Smuzhiyun /**
1414*4882a593Smuzhiyun  *  Provided in beacons and probe responses.  Used to advertise when
1415*4882a593Smuzhiyun  *    and to which channel it is changing to.  Only starting STAs in
1416*4882a593Smuzhiyun  *    an IBSS and APs are allowed to originate a chan switch element.
1417*4882a593Smuzhiyun  */
1418*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
1419*4882a593Smuzhiyun 	t_u8 element_id; /**< IEEE Element ID = 37 */
1420*4882a593Smuzhiyun 	t_u8 len; /**< Element length after id and len */
1421*4882a593Smuzhiyun 	t_u8 chan_switch_mode; /**< STA should not transmit any frames if 1 */
1422*4882a593Smuzhiyun 	t_u8 new_channel_num; /**< Channel # that AP/IBSS is moving to */
1423*4882a593Smuzhiyun 	t_u8 chan_switch_count; /**< # of TBTTs before channel switch */
1424*4882a593Smuzhiyun 
1425*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_ChanSwitchAnn_t;
1426*4882a593Smuzhiyun 
1427*4882a593Smuzhiyun /** data structure for extended channel switch */
1428*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
1429*4882a593Smuzhiyun 	/** IEEE element ID = 60 */
1430*4882a593Smuzhiyun 	t_u8 element_id;
1431*4882a593Smuzhiyun 	/** Element length after id and len, set to 4 */
1432*4882a593Smuzhiyun 	t_u8 len;
1433*4882a593Smuzhiyun 	/** STA should not transmit any frames if 1 */
1434*4882a593Smuzhiyun 	t_u8 chan_switch_mode;
1435*4882a593Smuzhiyun 	/** Operate class # that AP/IBSS is moving to */
1436*4882a593Smuzhiyun 	t_u8 new_oper_class;
1437*4882a593Smuzhiyun 	/** Channel # that AP/IBSS is moving to */
1438*4882a593Smuzhiyun 	t_u8 new_channel_num;
1439*4882a593Smuzhiyun 	/** of TBTTs before channel switch */
1440*4882a593Smuzhiyun 	t_u8 chan_switch_count;
1441*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_ExtChanSwitchAnn_t;
1442*4882a593Smuzhiyun 
1443*4882a593Smuzhiyun /** Maximum number of subbands in the IEEEtypes_SupportedChannels_t structure */
1444*4882a593Smuzhiyun #define WLAN_11H_MAX_SUBBANDS 6
1445*4882a593Smuzhiyun /** Maximum number of DFS channels configured in IEEEtypes_IBSS_DFS_t */
1446*4882a593Smuzhiyun #define WLAN_11H_MAX_IBSS_DFS_CHANNELS 25
1447*4882a593Smuzhiyun 
1448*4882a593Smuzhiyun /**  IEEE Power Constraint element (7.3.2.15) */
1449*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
1450*4882a593Smuzhiyun 	t_u8 element_id; /**< IEEE Element ID = 32 */
1451*4882a593Smuzhiyun 	t_u8 len; /**< Element length after id and len */
1452*4882a593Smuzhiyun 	t_u8 local_constraint; /**< Local power constraint applied to 11d
1453*4882a593Smuzhiyun 				chan info */
1454*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_PowerConstraint_t;
1455*4882a593Smuzhiyun 
1456*4882a593Smuzhiyun /**  IEEE Power Capability element (7.3.2.16) */
1457*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
1458*4882a593Smuzhiyun 	t_u8 element_id; /**< IEEE Element ID = 33 */
1459*4882a593Smuzhiyun 	t_u8 len; /**< Element length after id and len */
1460*4882a593Smuzhiyun 	t_s8 min_tx_power_capability; /**< Minimum Transmit power (dBm) */
1461*4882a593Smuzhiyun 	t_s8 max_tx_power_capability; /**< Maximum Transmit power (dBm) */
1462*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_PowerCapability_t;
1463*4882a593Smuzhiyun 
1464*4882a593Smuzhiyun /**  IEEE TPC Report element (7.3.2.18) */
1465*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
1466*4882a593Smuzhiyun 	t_u8 element_id; /**< IEEE Element ID = 35 */
1467*4882a593Smuzhiyun 	t_u8 len; /**< Element length after id and len */
1468*4882a593Smuzhiyun 	t_s8 tx_power; /**< Max power used to transmit the TPC Report frame
1469*4882a593Smuzhiyun 			  (dBm) */
1470*4882a593Smuzhiyun 	t_s8 link_margin; /**< Link margin when TPC Request received (dB) */
1471*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_TPCReport_t;
1472*4882a593Smuzhiyun 
1473*4882a593Smuzhiyun /*  IEEE Supported Channel sub-band description (7.3.2.19) */
1474*4882a593Smuzhiyun /**
1475*4882a593Smuzhiyun  *  Sub-band description used in the supported channels element.
1476*4882a593Smuzhiyun  */
1477*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
1478*4882a593Smuzhiyun 	t_u8 start_chan; /**< Starting channel in the subband */
1479*4882a593Smuzhiyun 	t_u8 num_chans; /**< Number of channels in the subband */
1480*4882a593Smuzhiyun 
1481*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_SupportChan_Subband_t;
1482*4882a593Smuzhiyun 
1483*4882a593Smuzhiyun /*  IEEE Supported Channel element (7.3.2.19) */
1484*4882a593Smuzhiyun /**
1485*4882a593Smuzhiyun  *  Sent in association requests. Details the sub-bands and number
1486*4882a593Smuzhiyun  *    of channels supported in each subband
1487*4882a593Smuzhiyun  */
1488*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
1489*4882a593Smuzhiyun 	t_u8 element_id; /**< IEEE Element ID = 36 */
1490*4882a593Smuzhiyun 	t_u8 len; /**< Element length after id and len */
1491*4882a593Smuzhiyun 
1492*4882a593Smuzhiyun 	/** Configured sub-bands information in the element */
1493*4882a593Smuzhiyun 	IEEEtypes_SupportChan_Subband_t subband[WLAN_11H_MAX_SUBBANDS];
1494*4882a593Smuzhiyun 
1495*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_SupportedChannels_t;
1496*4882a593Smuzhiyun 
1497*4882a593Smuzhiyun /*  IEEE Wide Bandwidth Channel Switch Element */
1498*4882a593Smuzhiyun /**
1499*4882a593Smuzhiyun  *  Provided in beacons and probe responses.  Used to advertise when
1500*4882a593Smuzhiyun  *    and to which channel it is changing to.  Only starting STAs in
1501*4882a593Smuzhiyun  *    an IBSS and APs are allowed to originate a wide bandwidth chan
1502*4882a593Smuzhiyun  *    switch element.
1503*4882a593Smuzhiyun  */
1504*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
1505*4882a593Smuzhiyun 	/** Generic IE header IEEE Element ID = 194*/
1506*4882a593Smuzhiyun 	IEEEtypes_Header_t ieee_hdr;
1507*4882a593Smuzhiyun 	t_u8 new_channel_width;
1508*4882a593Smuzhiyun 	t_u8 new_channel_center_freq0;
1509*4882a593Smuzhiyun 	t_u8 new_channel_center_freq1;
1510*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_WideBWChanSwitch_t;
1511*4882a593Smuzhiyun 
1512*4882a593Smuzhiyun /*  IEEE VHT Transmit Power Envelope Element */
1513*4882a593Smuzhiyun /**
1514*4882a593Smuzhiyun  *  Provided in beacons and probe responses.  Used to advertise the max
1515*4882a593Smuzhiyun  *    TX power in sepeate bandwidth and as a sub element of Channel Switch
1516*4882a593Smuzhiyun  *    Wrapper IE.
1517*4882a593Smuzhiyun  */
1518*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
1519*4882a593Smuzhiyun 	/** Generic IE header IEEE Element ID = 195*/
1520*4882a593Smuzhiyun 	IEEEtypes_Header_t ieee_hdr;
1521*4882a593Smuzhiyun 	t_u8 tpc_info; /**< Transmit Power Information>*/
1522*4882a593Smuzhiyun 	t_u8 local_max_tp_20mhz; /**< Local Maximum Transmit Power for 20 MHZ>*/
1523*4882a593Smuzhiyun 	t_u8 local_max_tp_40mhz; /**< Local Maximum Transmit Power for 40 MHZ>*/
1524*4882a593Smuzhiyun 	t_u8 local_max_tp_80mhz; /**< Local Maximum Transmit Power for 80 MHZ>*/
1525*4882a593Smuzhiyun 	t_u8 local_max_tp_160mhz_80_80mhz; /**< Local Maximum Transmit Power for
1526*4882a593Smuzhiyun 					      160/80+80 MHZ>*/
1527*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_VhtTpcEnvelope_t;
1528*4882a593Smuzhiyun 
1529*4882a593Smuzhiyun /*  IEEE Quiet Period Element (7.3.2.23) */
1530*4882a593Smuzhiyun /**
1531*4882a593Smuzhiyun  *  Provided in beacons and probe responses.  Indicates times during
1532*4882a593Smuzhiyun  *    which the STA should not be transmitting data.  Only starting STAs in
1533*4882a593Smuzhiyun  *    an IBSS and APs are allowed to originate a quiet element.
1534*4882a593Smuzhiyun  */
1535*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
1536*4882a593Smuzhiyun 	t_u8 element_id; /**< IEEE Element ID = 40 */
1537*4882a593Smuzhiyun 	t_u8 len; /**< Element length after id and len */
1538*4882a593Smuzhiyun 	t_u8 quiet_count; /**< Number of TBTTs until beacon with the quiet
1539*4882a593Smuzhiyun 			     period */
1540*4882a593Smuzhiyun 	t_u8 quiet_period; /**< Regular quiet period, # of TBTTS between periods
1541*4882a593Smuzhiyun 			    */
1542*4882a593Smuzhiyun 	t_u16 quiet_duration; /**< Duration of the quiet period in TUs */
1543*4882a593Smuzhiyun 	t_u16 quiet_offset; /**< Offset in TUs from the TBTT for the quiet
1544*4882a593Smuzhiyun 			       period */
1545*4882a593Smuzhiyun 
1546*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_Quiet_t;
1547*4882a593Smuzhiyun 
1548*4882a593Smuzhiyun /**
1549*4882a593Smuzhiyun ***  @brief Map octet of the basic measurement report (7.3.2.22.1)
1550*4882a593Smuzhiyun **/
1551*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
1552*4882a593Smuzhiyun #ifdef BIG_ENDIAN_SUPPORT
1553*4882a593Smuzhiyun 	/**< Reserved */
1554*4882a593Smuzhiyun 	t_u8 rsvd5_7 : 3;
1555*4882a593Smuzhiyun 	/**< Channel is unmeasured */
1556*4882a593Smuzhiyun 	t_u8 unmeasured : 1;
1557*4882a593Smuzhiyun 	/**< Radar detected on channel */
1558*4882a593Smuzhiyun 	t_u8 radar : 1;
1559*4882a593Smuzhiyun 	/**< Unidentified signal found on channel */
1560*4882a593Smuzhiyun 	t_u8 unidentified_sig : 1;
1561*4882a593Smuzhiyun 	/**< OFDM preamble detected on channel */
1562*4882a593Smuzhiyun 	t_u8 ofdm_preamble : 1;
1563*4882a593Smuzhiyun 	/**< At least one valid MPDU received on channel */
1564*4882a593Smuzhiyun 	t_u8 bss : 1;
1565*4882a593Smuzhiyun #else
1566*4882a593Smuzhiyun 	/**< At least one valid MPDU received on channel */
1567*4882a593Smuzhiyun 	t_u8 bss : 1;
1568*4882a593Smuzhiyun 	/**< OFDM preamble detected on channel */
1569*4882a593Smuzhiyun 	t_u8 ofdm_preamble : 1;
1570*4882a593Smuzhiyun 	/**< Unidentified signal found on channel */
1571*4882a593Smuzhiyun 	t_u8 unidentified_sig : 1;
1572*4882a593Smuzhiyun 	/**< Radar detected on channel */
1573*4882a593Smuzhiyun 	t_u8 radar : 1;
1574*4882a593Smuzhiyun 	/**< Channel is unmeasured */
1575*4882a593Smuzhiyun 	t_u8 unmeasured : 1;
1576*4882a593Smuzhiyun 	/**< Reserved */
1577*4882a593Smuzhiyun 	t_u8 rsvd5_7 : 3;
1578*4882a593Smuzhiyun #endif /* BIG_ENDIAN_SUPPORT */
1579*4882a593Smuzhiyun 
1580*4882a593Smuzhiyun } MLAN_PACK_END MeasRptBasicMap_t;
1581*4882a593Smuzhiyun 
1582*4882a593Smuzhiyun /*  IEEE DFS Channel Map field (7.3.2.24) */
1583*4882a593Smuzhiyun /**
1584*4882a593Smuzhiyun  *  Used to list supported channels and provide a octet "map" field which
1585*4882a593Smuzhiyun  *    contains a basic measurement report for that channel in the
1586*4882a593Smuzhiyun  *    IEEEtypes_IBSS_DFS_t element
1587*4882a593Smuzhiyun  */
1588*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
1589*4882a593Smuzhiyun 	t_u8 channel_number; /**< Channel number */
1590*4882a593Smuzhiyun 	MeasRptBasicMap_t rpt_map; /**< Basic measurement report for the channel
1591*4882a593Smuzhiyun 				    */
1592*4882a593Smuzhiyun 
1593*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_ChannelMap_t;
1594*4882a593Smuzhiyun 
1595*4882a593Smuzhiyun /*  IEEE IBSS DFS Element (7.3.2.24) */
1596*4882a593Smuzhiyun /**
1597*4882a593Smuzhiyun  *  IBSS DFS element included in ad hoc beacons and probe responses.
1598*4882a593Smuzhiyun  *    Provides information regarding the IBSS DFS Owner as well as the
1599*4882a593Smuzhiyun  *    originating STAs supported channels and basic measurement results.
1600*4882a593Smuzhiyun  */
1601*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
1602*4882a593Smuzhiyun 	t_u8 element_id; /**< IEEE Element ID = 41 */
1603*4882a593Smuzhiyun 	t_u8 len; /**< Element length after id and len */
1604*4882a593Smuzhiyun 	t_u8 dfs_owner[MLAN_MAC_ADDR_LENGTH]; /**< DFS Owner STA Address */
1605*4882a593Smuzhiyun 	t_u8 dfs_recovery_interval; /**< DFS Recovery time in TBTTs */
1606*4882a593Smuzhiyun 
1607*4882a593Smuzhiyun 	/** Variable length map field, one Map entry for each supported channel
1608*4882a593Smuzhiyun 	 */
1609*4882a593Smuzhiyun 	IEEEtypes_ChannelMap_t channel_map[WLAN_11H_MAX_IBSS_DFS_CHANNELS];
1610*4882a593Smuzhiyun 
1611*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_IBSS_DFS_t;
1612*4882a593Smuzhiyun 
1613*4882a593Smuzhiyun /* 802.11h BSS information kept for each BSSID received in scan results */
1614*4882a593Smuzhiyun /**
1615*4882a593Smuzhiyun  * IEEE BSS information needed from scan results for later processing in
1616*4882a593Smuzhiyun  *    join commands
1617*4882a593Smuzhiyun  */
1618*4882a593Smuzhiyun typedef struct {
1619*4882a593Smuzhiyun 	t_u8 sensed_11h; /**< Capability bit set or 11h IE found in this BSS */
1620*4882a593Smuzhiyun 
1621*4882a593Smuzhiyun 	IEEEtypes_PowerConstraint_t power_constraint; /**< Power Constraint IE
1622*4882a593Smuzhiyun 						       */
1623*4882a593Smuzhiyun 	IEEEtypes_PowerCapability_t power_capability; /**< Power Capability IE
1624*4882a593Smuzhiyun 						       */
1625*4882a593Smuzhiyun 	IEEEtypes_TPCReport_t tpc_report; /**< TPC Report IE */
1626*4882a593Smuzhiyun 	IEEEtypes_ChanSwitchAnn_t chan_switch_ann; /**< Channel Switch
1627*4882a593Smuzhiyun 						      Announcement IE */
1628*4882a593Smuzhiyun 	IEEEtypes_Quiet_t quiet; /**< Quiet IE */
1629*4882a593Smuzhiyun 	IEEEtypes_IBSS_DFS_t ibss_dfs; /**< IBSS DFS Element IE */
1630*4882a593Smuzhiyun 
1631*4882a593Smuzhiyun } wlan_11h_bss_info_t;
1632*4882a593Smuzhiyun 
1633*4882a593Smuzhiyun /** Ethernet packet type for TDLS */
1634*4882a593Smuzhiyun #define MLAN_ETHER_PKT_TYPE_TDLS_ACTION (0x890D)
1635*4882a593Smuzhiyun 
1636*4882a593Smuzhiyun /*802.11z  TDLS action frame type and strcuct */
1637*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
1638*4882a593Smuzhiyun 	/*link indentifier ie =101*/
1639*4882a593Smuzhiyun 	t_u8 element_id;
1640*4882a593Smuzhiyun 	/*len = 18*/
1641*4882a593Smuzhiyun 	t_u8 len;
1642*4882a593Smuzhiyun 	/** bssid */
1643*4882a593Smuzhiyun 	t_u8 bssid[MLAN_MAC_ADDR_LENGTH];
1644*4882a593Smuzhiyun 	/** init sta mac address */
1645*4882a593Smuzhiyun 	t_u8 init_sta[MLAN_MAC_ADDR_LENGTH];
1646*4882a593Smuzhiyun 	/** resp sta mac address */
1647*4882a593Smuzhiyun 	t_u8 resp_sta[MLAN_MAC_ADDR_LENGTH];
1648*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_tdls_linkie;
1649*4882a593Smuzhiyun 
1650*4882a593Smuzhiyun /** action code for tdls setup request */
1651*4882a593Smuzhiyun #define TDLS_SETUP_REQUEST 0
1652*4882a593Smuzhiyun /** action code for tdls setup response */
1653*4882a593Smuzhiyun #define TDLS_SETUP_RESPONSE 1
1654*4882a593Smuzhiyun /** action code for tdls setup confirm */
1655*4882a593Smuzhiyun #define TDLS_SETUP_CONFIRM 2
1656*4882a593Smuzhiyun /** action code for tdls tear down */
1657*4882a593Smuzhiyun #define TDLS_TEARDOWN 3
1658*4882a593Smuzhiyun /** action code for tdls traffic indication */
1659*4882a593Smuzhiyun #define TDLS_PEER_TRAFFIC_INDICATION 4
1660*4882a593Smuzhiyun /** action code for tdls channel switch request */
1661*4882a593Smuzhiyun #define TDLS_CHANNEL_SWITCH_REQUEST 5
1662*4882a593Smuzhiyun /** action code for tdls channel switch response */
1663*4882a593Smuzhiyun #define TDLS_CHANNEL_SWITCH_RESPONSE 6
1664*4882a593Smuzhiyun /** action code for tdls psm request */
1665*4882a593Smuzhiyun #define TDLS_PEER_PSM_REQUEST 7
1666*4882a593Smuzhiyun /** action code for tdls psm response */
1667*4882a593Smuzhiyun #define TDLS_PEER_PSM_RESPONSE 8
1668*4882a593Smuzhiyun /** action code for tdls traffic response */
1669*4882a593Smuzhiyun #define TDLS_PEER_TRAFFIC_RESPONSE 9
1670*4882a593Smuzhiyun /** action code for tdls discovery request */
1671*4882a593Smuzhiyun #define TDLS_DISCOVERY_REQUEST 10
1672*4882a593Smuzhiyun /** action code for TDLS discovery response */
1673*4882a593Smuzhiyun #define TDLS_DISCOVERY_RESPONSE 14
1674*4882a593Smuzhiyun /** category public */
1675*4882a593Smuzhiyun #define CATEGORY_PUBLIC 4
1676*4882a593Smuzhiyun 
1677*4882a593Smuzhiyun /** action code for 20/40 BSS Coexsitence Management frame */
1678*4882a593Smuzhiyun #define BSS_20_40_COEX 0
1679*4882a593Smuzhiyun 
1680*4882a593Smuzhiyun #ifdef STA_SUPPORT
1681*4882a593Smuzhiyun /** Macro for maximum size of scan response buffer */
1682*4882a593Smuzhiyun #define MAX_SCAN_RSP_BUF (16 * 1024)
1683*4882a593Smuzhiyun 
1684*4882a593Smuzhiyun /** Maximum number of channels that can be sent in user scan config */
1685*4882a593Smuzhiyun #define WLAN_USER_SCAN_CHAN_MAX 50
1686*4882a593Smuzhiyun /** Maximum length of SSID list */
1687*4882a593Smuzhiyun #define MRVDRV_MAX_SSID_LIST_LENGTH 10
1688*4882a593Smuzhiyun 
1689*4882a593Smuzhiyun /** Maximum length of BSSID list */
1690*4882a593Smuzhiyun #define MAX_BSSID_FILTER_LIST 5
1691*4882a593Smuzhiyun 
1692*4882a593Smuzhiyun /** Scan all the channels in specified band */
1693*4882a593Smuzhiyun #define BAND_SPECIFIED 0x80
1694*4882a593Smuzhiyun 
1695*4882a593Smuzhiyun /**
1696*4882a593Smuzhiyun  *  IOCTL SSID List sub-structure sent in wlan_ioctl_user_scan_cfg
1697*4882a593Smuzhiyun  *
1698*4882a593Smuzhiyun  *  Used to specify SSID specific filters as well as SSID pattern matching
1699*4882a593Smuzhiyun  *    filters for scan result processing in firmware.
1700*4882a593Smuzhiyun  */
1701*4882a593Smuzhiyun typedef MLAN_PACK_START struct _wlan_user_scan_ssid {
1702*4882a593Smuzhiyun 	/** SSID */
1703*4882a593Smuzhiyun 	t_u8 ssid[MLAN_MAX_SSID_LENGTH + 1];
1704*4882a593Smuzhiyun 	/** Maximum length of SSID */
1705*4882a593Smuzhiyun 	t_u8 max_len;
1706*4882a593Smuzhiyun } MLAN_PACK_END wlan_user_scan_ssid;
1707*4882a593Smuzhiyun 
1708*4882a593Smuzhiyun /**
1709*4882a593Smuzhiyun  *  @brief IOCTL channel sub-structure sent in wlan_ioctl_user_scan_cfg
1710*4882a593Smuzhiyun  *
1711*4882a593Smuzhiyun  *  Multiple instances of this structure are included in the IOCTL command
1712*4882a593Smuzhiyun  *   to configure a instance of a scan on the specific channel.
1713*4882a593Smuzhiyun  */
1714*4882a593Smuzhiyun typedef MLAN_PACK_START struct _wlan_user_scan_chan {
1715*4882a593Smuzhiyun 	/** Channel Number to scan */
1716*4882a593Smuzhiyun 	t_u8 chan_number;
1717*4882a593Smuzhiyun 	/** Radio type: 'B/G' Band = 0, 'A' Band = 1 */
1718*4882a593Smuzhiyun 	t_u8 radio_type;
1719*4882a593Smuzhiyun 	/** Scan type: Active = 1, Passive = 2 */
1720*4882a593Smuzhiyun 	t_u8 scan_type;
1721*4882a593Smuzhiyun 	/** Reserved */
1722*4882a593Smuzhiyun 	t_u8 reserved;
1723*4882a593Smuzhiyun 	/** Scan duration in milliseconds; if 0 default used */
1724*4882a593Smuzhiyun 	t_u32 scan_time;
1725*4882a593Smuzhiyun } MLAN_PACK_END wlan_user_scan_chan;
1726*4882a593Smuzhiyun 
1727*4882a593Smuzhiyun /** channel statictics */
1728*4882a593Smuzhiyun typedef MLAN_PACK_START struct _ChanStatistics_t {
1729*4882a593Smuzhiyun 	/** channle number */
1730*4882a593Smuzhiyun 	t_u8 chan_num;
1731*4882a593Smuzhiyun 	/** band info */
1732*4882a593Smuzhiyun 	Band_Config_t bandcfg;
1733*4882a593Smuzhiyun 	/** flags */
1734*4882a593Smuzhiyun 	t_u8 flags;
1735*4882a593Smuzhiyun 	/** noise */
1736*4882a593Smuzhiyun 	t_s8 noise;
1737*4882a593Smuzhiyun 	/** total network */
1738*4882a593Smuzhiyun 	t_u16 total_networks;
1739*4882a593Smuzhiyun 	/** scan duration */
1740*4882a593Smuzhiyun 	t_u16 cca_scan_duration;
1741*4882a593Smuzhiyun 	/** busy duration */
1742*4882a593Smuzhiyun 	t_u16 cca_busy_duration;
1743*4882a593Smuzhiyun 	/** min rss */
1744*4882a593Smuzhiyun 	t_u8 min_rss;
1745*4882a593Smuzhiyun 	/** max rssi */
1746*4882a593Smuzhiyun 	t_u8 max_rss;
1747*4882a593Smuzhiyun } MLAN_PACK_END ChanStatistics_t;
1748*4882a593Smuzhiyun 
1749*4882a593Smuzhiyun /** Enhance ext scan type defination */
1750*4882a593Smuzhiyun typedef enum _MLAN_EXT_SCAN_TYPE {
1751*4882a593Smuzhiyun 	EXT_SCAN_DEFAULT,
1752*4882a593Smuzhiyun 	EXT_SCAN_ENHANCE,
1753*4882a593Smuzhiyun 	EXT_SCAN_CANCEL,
1754*4882a593Smuzhiyun } MLAN_EXT_SCAN_TYPE;
1755*4882a593Smuzhiyun 
1756*4882a593Smuzhiyun /**
1757*4882a593Smuzhiyun  *  Input structure to configure an immediate scan cmd to firmware
1758*4882a593Smuzhiyun  *
1759*4882a593Smuzhiyun  *  Specifies a number of parameters to be used in general for the scan
1760*4882a593Smuzhiyun  *    as well as a channel list (wlan_user_scan_chan) for each scan period
1761*4882a593Smuzhiyun  *    desired.
1762*4882a593Smuzhiyun  */
1763*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
1764*4882a593Smuzhiyun 	/**
1765*4882a593Smuzhiyun 	 *  Flag set to keep the previous scan table intact
1766*4882a593Smuzhiyun 	 *
1767*4882a593Smuzhiyun 	 *  If set, the scan results will accumulate, replacing any previous
1768*4882a593Smuzhiyun 	 *   matched entries for a BSS with the new scan data
1769*4882a593Smuzhiyun 	 */
1770*4882a593Smuzhiyun 	t_u8 keep_previous_scan;
1771*4882a593Smuzhiyun 	/**
1772*4882a593Smuzhiyun 	 *  BSS mode to be sent in the firmware command
1773*4882a593Smuzhiyun 	 *
1774*4882a593Smuzhiyun 	 *  Field can be used to restrict the types of networks returned in the
1775*4882a593Smuzhiyun 	 *    scan.  Valid settings are:
1776*4882a593Smuzhiyun 	 *
1777*4882a593Smuzhiyun 	 *   - MLAN_SCAN_MODE_BSS  (infrastructure)
1778*4882a593Smuzhiyun 	 *   - MLAN_SCAN_MODE_IBSS (adhoc)
1779*4882a593Smuzhiyun 	 *   - MLAN_SCAN_MODE_ANY  (unrestricted, adhoc and infrastructure)
1780*4882a593Smuzhiyun 	 */
1781*4882a593Smuzhiyun 	t_u8 bss_mode;
1782*4882a593Smuzhiyun 	/**
1783*4882a593Smuzhiyun 	 *  Configure the number of probe requests for active chan scans
1784*4882a593Smuzhiyun 	 */
1785*4882a593Smuzhiyun 	t_u8 num_probes;
1786*4882a593Smuzhiyun 	/**
1787*4882a593Smuzhiyun 	 *  @brief ssid filter flag
1788*4882a593Smuzhiyun 	 */
1789*4882a593Smuzhiyun 	t_u8 ssid_filter;
1790*4882a593Smuzhiyun 	/**
1791*4882a593Smuzhiyun 	 *  @brief BSSID filter sent in the firmware command to limit the
1792*4882a593Smuzhiyun 	 * results
1793*4882a593Smuzhiyun 	 */
1794*4882a593Smuzhiyun 	t_u8 specific_bssid[MLAN_MAC_ADDR_LENGTH];
1795*4882a593Smuzhiyun 	/**
1796*4882a593Smuzhiyun 	 *  SSID filter list used in the to limit the scan results
1797*4882a593Smuzhiyun 	 */
1798*4882a593Smuzhiyun 	wlan_user_scan_ssid ssid_list[MRVDRV_MAX_SSID_LIST_LENGTH];
1799*4882a593Smuzhiyun 	/**
1800*4882a593Smuzhiyun 	 *  Variable number (fixed maximum) of channels to scan up
1801*4882a593Smuzhiyun 	 */
1802*4882a593Smuzhiyun 	wlan_user_scan_chan chan_list[WLAN_USER_SCAN_CHAN_MAX];
1803*4882a593Smuzhiyun 	/** scan channel gap */
1804*4882a593Smuzhiyun 	t_u16 scan_chan_gap;
1805*4882a593Smuzhiyun 	/** scan type: 0 legacy, 1: enhance scan*/
1806*4882a593Smuzhiyun 	t_u8 ext_scan_type;
1807*4882a593Smuzhiyun 	/** flag to filer only probe response */
1808*4882a593Smuzhiyun 	t_u8 proberesp_only;
1809*4882a593Smuzhiyun 	t_u8 random_mac[MLAN_MAC_ADDR_LENGTH];
1810*4882a593Smuzhiyun 	/** Number of BSSIDs to be filtered */
1811*4882a593Smuzhiyun 	t_u8 bssid_num;
1812*4882a593Smuzhiyun 	/** BSSID filter list used in the to limit the scan results */
1813*4882a593Smuzhiyun 	mlan_802_11_mac_addr bssid_list[MAX_BSSID_FILTER_LIST];
1814*4882a593Smuzhiyun 	/** use scan setting from scan_cfg only  */
1815*4882a593Smuzhiyun 	t_u8 scan_cfg_only;
1816*4882a593Smuzhiyun } MLAN_PACK_END wlan_user_scan_cfg;
1817*4882a593Smuzhiyun 
1818*4882a593Smuzhiyun /** Default scan interval in millisecond*/
1819*4882a593Smuzhiyun #define DEFAULT_BGSCAN_INTERVAL 30000
1820*4882a593Smuzhiyun 
1821*4882a593Smuzhiyun /** action get all, except pps/uapsd config */
1822*4882a593Smuzhiyun #define BG_SCAN_ACT_GET 0x0000
1823*4882a593Smuzhiyun /** action set all, except pps/uapsd config */
1824*4882a593Smuzhiyun #define BG_SCAN_ACT_SET 0x0001
1825*4882a593Smuzhiyun /** action get pps/uapsd config */
1826*4882a593Smuzhiyun #define BG_SCAN_ACT_GET_PPS_UAPSD 0x0100
1827*4882a593Smuzhiyun /** action set pps/uapsd config */
1828*4882a593Smuzhiyun #define BG_SCAN_ACT_SET_PPS_UAPSD 0x0101
1829*4882a593Smuzhiyun /** action set all */
1830*4882a593Smuzhiyun #define BG_SCAN_ACT_SET_ALL 0xff01
1831*4882a593Smuzhiyun /** ssid match */
1832*4882a593Smuzhiyun #define BG_SCAN_SSID_MATCH 0x0001
1833*4882a593Smuzhiyun /** ssid match and RSSI exceeded */
1834*4882a593Smuzhiyun #define BG_SCAN_SSID_RSSI_MATCH 0x0004
1835*4882a593Smuzhiyun /**wait for all channel scan to complete to report scan result*/
1836*4882a593Smuzhiyun #define BG_SCAN_WAIT_ALL_CHAN_DONE 0x80000000
1837*4882a593Smuzhiyun /** Maximum number of channels that can be sent in bg scan config */
1838*4882a593Smuzhiyun #define CHAN_MAX_24G 14
1839*4882a593Smuzhiyun #define CHAN_MAX_5G 24
1840*4882a593Smuzhiyun #define CHAN_MAX_UNII4 3
1841*4882a593Smuzhiyun #define WLAN_BG_SCAN_CHAN_MAX (CHAN_MAX_24G + CHAN_MAX_5G + CHAN_MAX_UNII4)
1842*4882a593Smuzhiyun 
1843*4882a593Smuzhiyun /** Enumeration definition */
1844*4882a593Smuzhiyun /** EES MODE */
1845*4882a593Smuzhiyun typedef enum {
1846*4882a593Smuzhiyun 	/** EES MODE: LOW */
1847*4882a593Smuzhiyun 	EES_MODE_LOW = 0,
1848*4882a593Smuzhiyun 	/** EES MODE: MID */
1849*4882a593Smuzhiyun 	EES_MODE_MID,
1850*4882a593Smuzhiyun 	/** EES MODE: HIGH */
1851*4882a593Smuzhiyun 	EES_MODE_HIGH,
1852*4882a593Smuzhiyun 	/** EES MODE: OFF */
1853*4882a593Smuzhiyun 	EES_MODE_OFF,
1854*4882a593Smuzhiyun 	/** EES MODE: LOOP */
1855*4882a593Smuzhiyun 	EES_MODE_LOOP = 15,
1856*4882a593Smuzhiyun } ees_modes;
1857*4882a593Smuzhiyun 
1858*4882a593Smuzhiyun /** EES Maximum SSID */
1859*4882a593Smuzhiyun #define EES_MAX_SSIDS 2
1860*4882a593Smuzhiyun 
1861*4882a593Smuzhiyun /** ees_ssid_config */
1862*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
1863*4882a593Smuzhiyun 	/** SSID */
1864*4882a593Smuzhiyun 	t_u8 ssid[MLAN_MAX_SSID_LENGTH + 1];
1865*4882a593Smuzhiyun 	/** Maximum length of SSID */
1866*4882a593Smuzhiyun 	t_u8 max_len;
1867*4882a593Smuzhiyun 	/** PairCipher */
1868*4882a593Smuzhiyun 	t_u8 pair_cipher;
1869*4882a593Smuzhiyun 	/** GroupCipher */
1870*4882a593Smuzhiyun 	t_u8 group_cipher;
1871*4882a593Smuzhiyun } MLAN_PACK_END ees_ssid_config;
1872*4882a593Smuzhiyun 
1873*4882a593Smuzhiyun /**
1874*4882a593Smuzhiyun  *  Input structure to configure bs scan cmd to firmware
1875*4882a593Smuzhiyun  */
1876*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
1877*4882a593Smuzhiyun 	/** action */
1878*4882a593Smuzhiyun 	t_u16 action;
1879*4882a593Smuzhiyun 	/** enable/disable */
1880*4882a593Smuzhiyun 	t_u8 enable;
1881*4882a593Smuzhiyun 	/**  BSS type:
1882*4882a593Smuzhiyun 	 *   MLAN_SCAN_MODE_BSS  (infrastructure)
1883*4882a593Smuzhiyun 	 *   MLAN_SCAN_MODE_IBSS (adhoc)
1884*4882a593Smuzhiyun 	 *   MLAN_SCAN_MODE_ANY  (unrestricted, adhoc and infrastructure)
1885*4882a593Smuzhiyun 	 */
1886*4882a593Smuzhiyun 	t_u8 bss_type;
1887*4882a593Smuzhiyun 	/** number of channel scanned during each scan */
1888*4882a593Smuzhiyun 	t_u8 chan_per_scan;
1889*4882a593Smuzhiyun 	/** interval between consecutive scan */
1890*4882a593Smuzhiyun 	t_u32 scan_interval;
1891*4882a593Smuzhiyun 	/** bit 0: ssid match bit 1: ssid match and SNR exceeded
1892*4882a593Smuzhiyun 	 *  bit 2: ssid match and RSSI exceeded
1893*4882a593Smuzhiyun 	 *  bit 31: wait for all channel scan to complete to report scan result
1894*4882a593Smuzhiyun 	 */
1895*4882a593Smuzhiyun 	t_u32 report_condition;
1896*4882a593Smuzhiyun 	/*  Configure the number of probe requests for active chan scans */
1897*4882a593Smuzhiyun 	t_u8 num_probes;
1898*4882a593Smuzhiyun 	/** RSSI threshold */
1899*4882a593Smuzhiyun 	t_u8 rssi_threshold;
1900*4882a593Smuzhiyun 	/** SNR threshold */
1901*4882a593Smuzhiyun 	t_u8 snr_threshold;
1902*4882a593Smuzhiyun 	/** repeat count */
1903*4882a593Smuzhiyun 	t_u16 repeat_count;
1904*4882a593Smuzhiyun 	/** start later flag */
1905*4882a593Smuzhiyun 	t_u16 start_later;
1906*4882a593Smuzhiyun 	/** SSID filter list used in the to limit the scan results */
1907*4882a593Smuzhiyun 	wlan_user_scan_ssid ssid_list[MRVDRV_MAX_SSID_LIST_LENGTH];
1908*4882a593Smuzhiyun 	/** Variable number (fixed maximum) of channels to scan up */
1909*4882a593Smuzhiyun 	wlan_user_scan_chan chan_list[WLAN_BG_SCAN_CHAN_MAX];
1910*4882a593Smuzhiyun 	/** scan channel gap */
1911*4882a593Smuzhiyun 	t_u16 scan_chan_gap;
1912*4882a593Smuzhiyun 	/** Enable EES configuration */
1913*4882a593Smuzhiyun 	t_u8 config_ees;
1914*4882a593Smuzhiyun 	/** EES scan mode */
1915*4882a593Smuzhiyun 	t_u16 ees_mode;
1916*4882a593Smuzhiyun 	/** EES report condition */
1917*4882a593Smuzhiyun 	t_u16 report_cond;
1918*4882a593Smuzhiyun 	/** EES High Period scan interval */
1919*4882a593Smuzhiyun 	t_u16 high_period;
1920*4882a593Smuzhiyun 	/** EES High Period scan count */
1921*4882a593Smuzhiyun 	t_u16 high_period_count;
1922*4882a593Smuzhiyun 	/** EES Medium Period scan interval */
1923*4882a593Smuzhiyun 	t_u16 mid_period;
1924*4882a593Smuzhiyun 	/** EES Medium Period scan count */
1925*4882a593Smuzhiyun 	t_u16 mid_period_count;
1926*4882a593Smuzhiyun 	/** EES Low Period scan interval */
1927*4882a593Smuzhiyun 	t_u16 low_period;
1928*4882a593Smuzhiyun 	/** EES Low Period scan count */
1929*4882a593Smuzhiyun 	t_u16 low_period_count;
1930*4882a593Smuzhiyun 	/** Number of networks in the list */
1931*4882a593Smuzhiyun 	t_u8 network_count;
1932*4882a593Smuzhiyun 	/** Maximum number of connection count */
1933*4882a593Smuzhiyun 	t_u8 max_conn_count;
1934*4882a593Smuzhiyun 	/** Black List Exp */
1935*4882a593Smuzhiyun 	t_u8 black_list_exp;
1936*4882a593Smuzhiyun 	/** Array of ees config struct */
1937*4882a593Smuzhiyun 	ees_ssid_config ees_ssid_cfg[EES_MAX_SSIDS];
1938*4882a593Smuzhiyun 	t_u8 random_mac[MLAN_MAC_ADDR_LENGTH];
1939*4882a593Smuzhiyun } MLAN_PACK_END wlan_bgscan_cfg;
1940*4882a593Smuzhiyun #endif /* STA_SUPPORT */
1941*4882a593Smuzhiyun 
1942*4882a593Smuzhiyun #ifdef PRAGMA_PACK
1943*4882a593Smuzhiyun #pragma pack(pop)
1944*4882a593Smuzhiyun #endif
1945*4882a593Smuzhiyun 
1946*4882a593Smuzhiyun /** BSSDescriptor_t
1947*4882a593Smuzhiyun  *    Structure used to store information for beacon/probe response
1948*4882a593Smuzhiyun  */
1949*4882a593Smuzhiyun typedef struct _BSSDescriptor_t {
1950*4882a593Smuzhiyun 	/** MAC address */
1951*4882a593Smuzhiyun 	mlan_802_11_mac_addr mac_address;
1952*4882a593Smuzhiyun 
1953*4882a593Smuzhiyun 	/** SSID */
1954*4882a593Smuzhiyun 	mlan_802_11_ssid ssid;
1955*4882a593Smuzhiyun 
1956*4882a593Smuzhiyun 	/** WEP encryption requirement */
1957*4882a593Smuzhiyun 	t_u32 privacy;
1958*4882a593Smuzhiyun 
1959*4882a593Smuzhiyun 	/** Receive signal strength in dBm */
1960*4882a593Smuzhiyun 	t_s32 rssi;
1961*4882a593Smuzhiyun 	/** channel load */
1962*4882a593Smuzhiyun 	t_u8 chan_load;
1963*4882a593Smuzhiyun 	/** Channel */
1964*4882a593Smuzhiyun 	t_u32 channel;
1965*4882a593Smuzhiyun 
1966*4882a593Smuzhiyun 	/** Freq */
1967*4882a593Smuzhiyun 	t_u32 freq;
1968*4882a593Smuzhiyun 
1969*4882a593Smuzhiyun 	/** Beacon period */
1970*4882a593Smuzhiyun 	t_u16 beacon_period;
1971*4882a593Smuzhiyun 
1972*4882a593Smuzhiyun 	/** ATIM window */
1973*4882a593Smuzhiyun 	t_u32 atim_window;
1974*4882a593Smuzhiyun 
1975*4882a593Smuzhiyun 	/** ERP flags */
1976*4882a593Smuzhiyun 	t_u8 erp_flags;
1977*4882a593Smuzhiyun 
1978*4882a593Smuzhiyun 	/** Type of network in use */
1979*4882a593Smuzhiyun 	WLAN_802_11_NETWORK_TYPE network_type_use;
1980*4882a593Smuzhiyun 
1981*4882a593Smuzhiyun 	/** Network infrastructure mode */
1982*4882a593Smuzhiyun 	t_u32 bss_mode;
1983*4882a593Smuzhiyun 
1984*4882a593Smuzhiyun 	/** Network supported rates */
1985*4882a593Smuzhiyun 	WLAN_802_11_RATES supported_rates;
1986*4882a593Smuzhiyun 
1987*4882a593Smuzhiyun 	/** Supported data rates */
1988*4882a593Smuzhiyun 	t_u8 data_rates[WLAN_SUPPORTED_RATES];
1989*4882a593Smuzhiyun 
1990*4882a593Smuzhiyun 	/** Current channel bandwidth
1991*4882a593Smuzhiyun 	 *  0 : 20MHZ
1992*4882a593Smuzhiyun 	 *  1 : 40MHZ
1993*4882a593Smuzhiyun 	 *  2 : 80MHZ
1994*4882a593Smuzhiyun 	 *  3 : 160MHZ
1995*4882a593Smuzhiyun 	 */
1996*4882a593Smuzhiyun 	t_u8 curr_bandwidth;
1997*4882a593Smuzhiyun 
1998*4882a593Smuzhiyun 	/** Network band.
1999*4882a593Smuzhiyun 	 * BAND_B(0x01): 'b' band
2000*4882a593Smuzhiyun 	 * BAND_G(0x02): 'g' band
2001*4882a593Smuzhiyun 	 * BAND_A(0X04): 'a' band
2002*4882a593Smuzhiyun 	 */
2003*4882a593Smuzhiyun 	t_u16 bss_band;
2004*4882a593Smuzhiyun 
2005*4882a593Smuzhiyun 	/** TSF timestamp from the current firmware TSF */
2006*4882a593Smuzhiyun 	t_u64 network_tsf;
2007*4882a593Smuzhiyun 
2008*4882a593Smuzhiyun 	/** TSF value included in the beacon/probe response */
2009*4882a593Smuzhiyun 	t_u8 time_stamp[8];
2010*4882a593Smuzhiyun 
2011*4882a593Smuzhiyun 	/** PHY parameter set */
2012*4882a593Smuzhiyun 	IEEEtypes_PhyParamSet_t phy_param_set;
2013*4882a593Smuzhiyun 
2014*4882a593Smuzhiyun 	/** SS parameter set */
2015*4882a593Smuzhiyun 	IEEEtypes_SsParamSet_t ss_param_set;
2016*4882a593Smuzhiyun 
2017*4882a593Smuzhiyun 	/** Capability information */
2018*4882a593Smuzhiyun 	IEEEtypes_CapInfo_t cap_info;
2019*4882a593Smuzhiyun 
2020*4882a593Smuzhiyun 	/** WMM IE */
2021*4882a593Smuzhiyun 	IEEEtypes_WmmParameter_t wmm_ie;
2022*4882a593Smuzhiyun 
2023*4882a593Smuzhiyun 	/** 802.11h BSS information */
2024*4882a593Smuzhiyun 	wlan_11h_bss_info_t wlan_11h_bss_info;
2025*4882a593Smuzhiyun 
2026*4882a593Smuzhiyun 	/** Indicate disabling 11n when associate with AP */
2027*4882a593Smuzhiyun 	t_u8 disable_11n;
2028*4882a593Smuzhiyun 	/** 802.11n BSS information */
2029*4882a593Smuzhiyun 	/** HT Capabilities IE */
2030*4882a593Smuzhiyun 	IEEEtypes_HTCap_t *pht_cap;
2031*4882a593Smuzhiyun 	/** HT Capabilities Offset */
2032*4882a593Smuzhiyun 	t_u16 ht_cap_offset;
2033*4882a593Smuzhiyun 	/** HT Information IE */
2034*4882a593Smuzhiyun 	IEEEtypes_HTInfo_t *pht_info;
2035*4882a593Smuzhiyun 	/** HT Information Offset */
2036*4882a593Smuzhiyun 	t_u16 ht_info_offset;
2037*4882a593Smuzhiyun 	/** Flag to indicate this is multi_bssid_ap */
2038*4882a593Smuzhiyun 	t_u8 multi_bssid_ap;
2039*4882a593Smuzhiyun 	/** the mac address of multi-bssid AP */
2040*4882a593Smuzhiyun 	mlan_802_11_mac_addr multi_bssid_ap_addr;
2041*4882a593Smuzhiyun 	/** 20/40 BSS Coexistence IE */
2042*4882a593Smuzhiyun 	IEEEtypes_2040BSSCo_t *pbss_co_2040;
2043*4882a593Smuzhiyun 	/** 20/40 BSS Coexistence Offset */
2044*4882a593Smuzhiyun 	t_u16 bss_co_2040_offset;
2045*4882a593Smuzhiyun 	/** Extended Capabilities IE */
2046*4882a593Smuzhiyun 	IEEEtypes_ExtCap_t *pext_cap;
2047*4882a593Smuzhiyun 	/** Extended Capabilities Offset */
2048*4882a593Smuzhiyun 	t_u16 ext_cap_offset;
2049*4882a593Smuzhiyun 	/** Overlapping BSS Scan Parameters IE */
2050*4882a593Smuzhiyun 	IEEEtypes_OverlapBSSScanParam_t *poverlap_bss_scan_param;
2051*4882a593Smuzhiyun 	/** Overlapping BSS Scan Parameters Offset */
2052*4882a593Smuzhiyun 	t_u16 overlap_bss_offset;
2053*4882a593Smuzhiyun 
2054*4882a593Smuzhiyun 	/** VHT Capabilities IE */
2055*4882a593Smuzhiyun 	IEEEtypes_VHTCap_t *pvht_cap;
2056*4882a593Smuzhiyun 	/** VHT Capabilities IE offset */
2057*4882a593Smuzhiyun 	t_u16 vht_cap_offset;
2058*4882a593Smuzhiyun 	/** VHT Operations IE */
2059*4882a593Smuzhiyun 	IEEEtypes_VHTOprat_t *pvht_oprat;
2060*4882a593Smuzhiyun 	/** VHT Operations IE offset */
2061*4882a593Smuzhiyun 	t_u16 vht_oprat_offset;
2062*4882a593Smuzhiyun 	/** VHT Transmit Power Envelope IE */
2063*4882a593Smuzhiyun 	IEEEtypes_VHTtxpower_t *pvht_txpower;
2064*4882a593Smuzhiyun 	/** VHT Transmit Power Envelope IE offset */
2065*4882a593Smuzhiyun 	t_u16 vht_txpower_offset;
2066*4882a593Smuzhiyun 	/** Extended Power Constraint IE */
2067*4882a593Smuzhiyun 	IEEEtypes_ExtPwerCons_t *pext_pwer;
2068*4882a593Smuzhiyun 	/** Extended Power Constraint IE offset */
2069*4882a593Smuzhiyun 	t_u16 ext_pwer_offset;
2070*4882a593Smuzhiyun 	/** Extended BSS Load IE  */
2071*4882a593Smuzhiyun 	IEEEtypes_ExtBSSload_t *pext_bssload;
2072*4882a593Smuzhiyun 	/** Extended BSS Load IE offset */
2073*4882a593Smuzhiyun 	t_u16 ext_bssload_offset;
2074*4882a593Smuzhiyun 	/** Quiet Channel IE */
2075*4882a593Smuzhiyun 	IEEEtypes_QuietChan_t *pquiet_chan;
2076*4882a593Smuzhiyun 	/** Quiet Channel IE offset */
2077*4882a593Smuzhiyun 	t_u16 quiet_chan_offset;
2078*4882a593Smuzhiyun 	/** Operating Mode Notification IE */
2079*4882a593Smuzhiyun 	IEEEtypes_OperModeNtf_t *poper_mode;
2080*4882a593Smuzhiyun 	/** Operating Mode Notification IE offset */
2081*4882a593Smuzhiyun 	t_u16 oper_mode_offset;
2082*4882a593Smuzhiyun 	/** HE Capability IE */
2083*4882a593Smuzhiyun 	IEEEtypes_HECap_t *phe_cap;
2084*4882a593Smuzhiyun 	/** HE Capability IE offset */
2085*4882a593Smuzhiyun 	t_u16 he_cap_offset;
2086*4882a593Smuzhiyun 	/** HE operation IE */
2087*4882a593Smuzhiyun 	IEEEtypes_Extension_t *phe_oprat;
2088*4882a593Smuzhiyun 	/** HE operation IE offset */
2089*4882a593Smuzhiyun 	t_u16 he_oprat_offset;
2090*4882a593Smuzhiyun #ifdef STA_SUPPORT
2091*4882a593Smuzhiyun 	/** Country information set */
2092*4882a593Smuzhiyun 	IEEEtypes_CountryInfoFullSet_t country_info;
2093*4882a593Smuzhiyun #endif /* STA_SUPPORT */
2094*4882a593Smuzhiyun 
2095*4882a593Smuzhiyun 	/** WPA IE */
2096*4882a593Smuzhiyun 	IEEEtypes_VendorSpecific_t *pwpa_ie;
2097*4882a593Smuzhiyun 	/** WPA IE offset in the beacon buffer */
2098*4882a593Smuzhiyun 	t_u16 wpa_offset;
2099*4882a593Smuzhiyun 	/** RSN IE */
2100*4882a593Smuzhiyun 	IEEEtypes_Generic_t *prsn_ie;
2101*4882a593Smuzhiyun 	/** RSN IE offset in the beacon buffer */
2102*4882a593Smuzhiyun 	t_u16 rsn_offset;
2103*4882a593Smuzhiyun 	/** RSNX IE */
2104*4882a593Smuzhiyun 	IEEEtypes_Generic_t *prsnx_ie;
2105*4882a593Smuzhiyun 	/** RSNX IE offset in the beacon buffer */
2106*4882a593Smuzhiyun 	t_u16 rsnx_offset;
2107*4882a593Smuzhiyun #ifdef STA_SUPPORT
2108*4882a593Smuzhiyun 	/** WAPI IE */
2109*4882a593Smuzhiyun 	IEEEtypes_Generic_t *pwapi_ie;
2110*4882a593Smuzhiyun 	/** WAPI IE offset in the beacon buffer */
2111*4882a593Smuzhiyun 	t_u16 wapi_offset;
2112*4882a593Smuzhiyun #endif
2113*4882a593Smuzhiyun 	/* Hotspot 2.0 OSEN AKM  IE*/
2114*4882a593Smuzhiyun 	IEEEtypes_Generic_t *posen_ie;
2115*4882a593Smuzhiyun 	/** osen IE offset in the beacon buffer */
2116*4882a593Smuzhiyun 	t_u16 osen_offset;
2117*4882a593Smuzhiyun 	/* Mobility domain IE */
2118*4882a593Smuzhiyun 	IEEEtypes_MobilityDomain_t *pmd_ie;
2119*4882a593Smuzhiyun 	/** Mobility domain IE offset in the beacon buffer */
2120*4882a593Smuzhiyun 	t_u16 md_offset;
2121*4882a593Smuzhiyun 
2122*4882a593Smuzhiyun 	/** Pointer to the returned scan response */
2123*4882a593Smuzhiyun 	t_u8 *pbeacon_buf;
2124*4882a593Smuzhiyun 	/** Length of the stored scan response */
2125*4882a593Smuzhiyun 	t_u32 beacon_buf_size;
2126*4882a593Smuzhiyun 	/** Max allocated size for updated scan response */
2127*4882a593Smuzhiyun 	t_u32 beacon_buf_size_max;
2128*4882a593Smuzhiyun 	/** scan age in secs */
2129*4882a593Smuzhiyun 	t_u32 age_in_secs;
2130*4882a593Smuzhiyun } BSSDescriptor_t, *pBSSDescriptor_t;
2131*4882a593Smuzhiyun 
2132*4882a593Smuzhiyun #endif /* !_MLAN_IEEE_H_ */
2133