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