/** @file IEEE_types.h * * @brief This file contains definitions relating to messages specified in the * IEEE 802.11 spec. * * Copyright (C) 2014-2017, Marvell International Ltd. * * This software file (the "File") is distributed by Marvell International * Ltd. under the terms of the GNU General Public License Version 2, June 1991 * (the "License"). You may use, redistribute and/or modify this File in * accordance with the terms and conditions of the License, a copy of which * is available by writing to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA or on the * worldwide web at http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. * * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE * ARE EXPRESSLY DISCLAIMED. The License provides additional details about * this warranty disclaimer. */ /****************************************************** Change log: 03/07/2014: Initial version ******************************************************/ #ifndef _IEEE_TYPES_H_ #define _IEEE_TYPES_H_ /*==========================================================================*/ /* INCLUDE FILES */ /*==========================================================================*/ #include "wltypes.h" /*==========================================================================*/ /* PUBLIC DEFINITIONS */ /*==========================================================================*/ #define IS_BROADCAST(macaddr) ((*(UINT16 *)macaddr == 0xffff) && \ (*(UINT16 *)((UINT8 *)macaddr+2) == 0xffff) && \ (*(UINT16 *)((UINT8 *)macaddr+4) == 0xffff)) #define IS_MULTICAST(macaddr) ((*(UINT8*)macaddr & 0x01) == 0x01) #define IS_GROUP(macaddr) ((*(UINT8*)macaddr & 0x01) == 0x01) #define ADDR_NOT_EQUAL(a, b) (((a)[0] != (b)[0]) || ((a)[1] != (b)[1]) || \ ((a)[2] != (b)[2]) || ((a)[3] != (b)[3]) || \ ((a)[4] != (b)[4]) || ((a)[5] != (b)[5])) #define LLC_SNAP_SIZE 6 #define ETHERTYPE_LEN 2 #define IEEE_MSG_TYPE(Hdr_p) ((Hdr_p)->FrmCtl.Type) #define IEEE_MSG_SUBTYPE(Hdr_p) ((Hdr_p)->FrmCtl.Subtype) /*--------------------------------------------------------------*/ /* Reason Codes - these codes are used in management message */ /* frame bodies to indicate why an action is taking place (such */ /* as a disassociation or deauthentication). */ /*--------------------------------------------------------------*/ #define IEEEtypes_REASON_RSVD 0 #define IEEEtypes_REASON_UNSPEC 1 #define IEEEtypes_REASON_PRIOR_AUTH_INVALID 2 #define IEEEtypes_REASON_DEAUTH_LEAVING 3 #define IEEEtypes_REASON_DISASSOC_INACTIVE 4 #define IEEEtypes_REASON_DISASSOC_AP_BUSY 5 #define IEEEtypes_REASON_CLASS2_NONAUTH 6 #define IEEEtypes_REASON_CLASS3_NONASSOC 7 #define IEEEtypes_REASON_DISASSOC_STA_HASLEFT 8 #define IEEEtypes_REASON_CANT_ASSOC_NONAUTH 9 /***************802.11h Reasons***************/ #define IEEEtypes_REASON_DISASSOC_BAD_POWERCAP 10 #define IEEEtypes_REASON_DISASSOC_BAD_SUPPCHAN 11 /***************802.11v Reasons***************/ #define IEEEtypes_REASON_BSS_TRANSITION_MGMT 12 /***************WPA Reasons*******************/ #define IEEEtypes_REASON_INVALID_IE 13 #define IEEEtypes_REASON_MIC_FAILURE 14 #define IEEEtypes_REASON_4WAY_HANDSHK_TIMEOUT 15 #define IEEEtypes_REASON_GRP_KEY_UPD_TIMEOUT 16 #define IEEEtypes_REASON_IE_4WAY_DIFF 17 #define IEEEtypes_REASON_INVALID_MCAST_CIPHER 18 #define IEEEtypes_REASON_INVALID_UNICAST_CIPHER 19 #define IEEEtypes_REASON_INVALID_AKMP 20 #define IEEEtypes_REASON_UNSUPT_RSN_VER 21 #define IEEEtypes_REASON_INVALID_RSN_CAP 22 #define IEEEtypes_REASON_8021X_AUTH_FAIL 23 #define IEEEtypes_REASON_CIPHER_POLICY_REJECT 24 /*************** 802.11z(TDLS) Reasons*************/ #define IEEEtypes_REASON_TDLS_TEARDOWN_TDLSPEER_UNREACHABLE 25 #define IEEEtypes_REASON_TDLS_TEARDOWN_UNSPEC 26 /***************802.11e Reasons***************/ #define IEEEtypes_REASON_DISASSOC_UNSPEC_QOS 32 #define IEEEtypes_REASON_DISASSOC_QAP_NO_BNDWDTH 33 #define IEEEtypes_REASON_DISASSOC_FRM_LOSS_BAD_CH 34 #define IEEEtypes_REASON_DISASSOC_QSTA_VIOL_TXOP 35 #define IEEEtypes_REASON_REQ_PEER_LEAVE_QBSS 36 #define IEEEtypes_REASON_REQ_PEER_NO_THANKS 37 #define IEEEtypes_REASON_REQ_PEER_ACM_MISMATCH 38 #define IEEEtypes_REASON_REQ_PEER_TIMEOUT 39 #define IEEEtypes_REASON_PEER_QSTA_NO_SUPP_CIPHER 45 /*********************************************/ /*------------------------------------------------------------*/ /* Status Codes - these codes are used in management message */ /* frame bodies to indicate the results of an operation (such */ /* as association, reassociation, and authentication). */ /*------------------------------------------------------------*/ #define IEEEtypes_STATUS_SUCCESS 0 #define IEEEtypes_STATUS_UNSPEC_FAILURE 1 /****************BEGIN: 802.11z(TDLS) status codes********/ #define IEEEtypes_STATUS_TDLS_WAKEUPSCHEDULE_REJECTED_BUT_ALT_PROVIDED 2 #define IEEEtypes_STATUS_TDLS_WAKEUPSCHEDULE_REJECTED 3 #define IEEEtypes_STATUS_SECURITY_DISABLED 5 #define IEEEtypes_STATUS_UNACCEPTABLE_LIFETIME 6 #define IEEEtypes_STATUS_NOT_IN_SAME_BSS 7 /****************END: 802.11z(TDLS) status codes********/ #define IEEEtypes_STATUS_CAPS_UNSUPPORTED 10 #define IEEEtypes_STATUS_REASSOC_NO_ASSOC 11 #define IEEEtypes_STATUS_ASSOC_DENIED_UNSPEC 12 #define IEEEtypes_STATUS_UNSUPPORTED_AUTHALG 13 #define IEEEtypes_STATUS_RX_AUTH_NOSEQ 14 #define IEEEtypes_STATUS_CHALLENGE_FAIL 15 #define IEEEtypes_STATUS_AUTH_TIMEOUT 16 #define IEEEtypes_STATUS_ASSOC_DENIED_BUSY 17 #define IEEEtypes_STATUS_ASSOC_DENIED_RATES 18 #define IEEEtypes_STATUS_ASSOC_DENIED_NOSHORT 19 #define IEEEtypes_STATUS_ASSOC_DENIED_NOPBCC 20 #define IEEEtypes_STATUS_ASSOC_DENIED_NOAGILITY 21 #define IEEEtypes_STATUS_ASSOC_DENIED_SPECMGMT_REQD 22 #define IEEEtypes_STATUS_ASSOC_DENIED_BAD_POWERCAP 23 #define IEEEtypes_STATUS_ASSOC_DENIED_BAD_SUPPCHAN 24 #define IEEEtypes_STATUS_ASSOC_DENIED_NOSHORTSLOTTIME 25 #define IEEEtypes_STATUS_ASSOC_DENIED_NODSSSOFDM 26 #define IEEEtypes_STATUS_R0KH_UNAVAILABLE 28 #define IEEEtypes_STATUS_TEMP_REJECTION 30 #define IEEEtypes_STATUS_ROBUST_MGMT_VIOLAION 31 #define IEEEtypes_STATUS_UNSPEC_QOS_FAILURE 32 #define IEEEtypes_STATUS_ASSOC_DENIED_QAP_INSUFF_BNDWDTH 33 #define IEEEtypes_STATUS_ASSOC_DENIED_EXC_FRM_LOSS_BAD_CH 34 #define IEEEtypes_STATUS_ASSOC_DENIED_STA_NO_QOS_SUPP 35 #define IEEEtypes_STATUS_REQ_DECLINED 37 #define IEEEtypes_STATUS_REQ_FAIL_INVALID_PARAMS 38 #define IEEEtypes_STATUS_FAIL_TS_AP_THINKS_ITS_SMART_THO 39 #define IEEEtypes_STATUS_INVALID_IE 40 #define IEEEtypes_STATUS_INVALID_GROUP_CIPHER 41 #define IEEEtypes_STATUS_INVALID_PAIRWISE_CIPHER 42 #define IEEEtypes_STATUS_INVALID_AKMP 43 #define IEEEtypes_STATUS_UNSUPPORTED_RSN_VER 44 #define IEEEtypes_STATUS_INVALID_RSN_CAPABILITIES 45 #define IEEEtypes_STATUS_CIPHER_POLICY_REJECT 46 #define IEEEtypes_STATUS_FAIL_TS_TRY_LATER_AFTER_TS_DELAY 47 #define IEEEtypes_STATUS_DIRECT_LINK_NOT_ALLOWED 48 #define IEEEtypes_STATUS_DEST_STA_NOT_IN_QBSS 49 #define IEEEtypes_STATUS_DEST_STA_NOT_A_QSTA 50 #define IEEEtypes_STATUS_LISTEN_INTERVAL_TOO_LARGE 51 #define IEEEtypes_STATUS_INVALID_FT_ACT_FRAME_COUNT 52 #define IEEEtypes_STATUS_INVALID_PMKID 53 #define IEEEtypes_STATUS_INVALID_MDIE 54 #define IEEEtypes_STATUS_INVALID_FTIE 55 #define IEEEtypes_STATUS_REQ_TCLAS_NOT_SUPPORTED 56 #define IEEEtypes_STATUS_INSF_TCLAS_RSOURCES 57 #define IEEEtypes_STATUS_TS_FAIL_TRANS_SUGGESTED 58 #define IEEEtypes_STATUS_UAPSD_COEX_NOT_SUPPORTED 59 #define IEEEtypes_STATUS_REQ_UAPSD_COEX_MODE_NOT_SUP 60 #define IEEEtypes_STATUS_REQ_INVL_WITH_UAPSD_COEX_NOT_SUP 61 #define IEEEtypes_STATUS_INVALID_CONTENTS_OF_RSNIE 72 /*--------------------------------------------*/ /* Various sizes used in IEEE 802.11 messages */ /*--------------------------------------------*/ #define IEEEtypes_ADDRESS_SIZE 6 #define IEEEtypes_BITMAP_SIZE 251 #define IEEEtypes_CHALLENGE_TEXT_SIZE 128 #define IEEEtypes_CHALLENGE_TEXT_LEN 128 #define IEEEtypes_MAX_DATA_RATES 8 #define IEEEtypes_MAX_DATA_BODY_LEN 2312 #define IEEEtypes_MAX_MGMT_BODY_LEN 2312 #define IEEEtypes_SSID_SIZE 32 #define IEEEtypes_TIME_STAMP_SIZE 8 #define IEEEtypes_MAX_CHANNELS 14 #define IEEEtypes_MAX_BSS_DESCRIPTS 16 #define IEEEtypes_MAX_DATA_RATES_G 14 #define IEEEtypes_COUNTRY_CODE_SIZE 3 #define IEEEtypes_COUNTRY_MAX_TRIPLETS 83 /*---------------------------------------------------------------------*/ /* Define masks used to extract fields from the capability information */ /* structure in a beacon message. */ /*---------------------------------------------------------------------*/ #define IEEEtypes_CAP_INFO_ESS 1 #define IEEEtypes_CAP_INFO_IBSS 2 #define IEEEtypes_CAP_INFO_CF_POLLABLE 4 #define IEEEtypes_CAP_INFO_CF_POLL_RQST 8 #define IEEEtypes_CAP_INFO_PRIVACY 16 #define IEEEtypes_CAP_INFO_SHORT_PREAMB 32 #define IEEEtypes_CAP_INFO_PBCC 64 #define IEEEtypes_CAP_INFO_CHANGE_AGILITY 128 #define IEEEtypes_CAP_INFO_SHORT_SLOT_TIME 0x0400 #define IEEEtypes_CAP_INFO_DSSS_OFDM 0x2000 /*---------------------------*/ /* Miscellaneous definitions */ /*---------------------------*/ #define IEEEtypes_PROTOCOL_VERSION 0 #define IEEEtypes_BASIC_RATE_FLAG 0x80 /* */ /* Used to determine which rates in a list are designated as basic rates */ /* */ #define IEEEtypes_SUPP_RATE_MASK 0x7F #define IEEE_DATA_RATE_1Mbps 2 #define IEEE_DATA_RATE_2Mbps 4 #define IEEE_DATA_RATE_5_5Mbps 11 #define IEEE_DATA_RATE_11Mbps 22 #define IEEE_DATA_RATE_6Mbps 12 #define IEEE_DATA_RATE_9Mbps 18 #define IEEE_DATA_RATE_12Mbps 24 #define IEEE_DATA_RATE_18Mbps 36 #define IEEE_DATA_RATE_24Mbps 48 #define IEEE_DATA_RATE_36Mbps 72 #define IEEE_DATA_RATE_48Mbps 96 #define IEEE_DATA_RATE_54Mbps 108 /* */ /* Used to mask off the basic rate flag, if one exists, for given */ /* data rates */ /* */ #define IEEEtypes_RATE_MIN 2 /* */ /* The minimum allowable data rate in units of kb/s */ /* */ #define IEEEtypes_RATE_MAX 127 /* */ /* The maximum allowable data rate in units of kb/s */ /* */ #define IEEEtypes_TIME_UNIT 1024 /* */ /* The number of microseconds in 1 time unit, as specified in the */ /* 802.11 spec */ /* */ #define CONVERT_TU_TO_MILLISECOND(x) (x * 1024 / 1000) #define CONVERT_TU_TO_MICROSECOND(x) (x * 1024) /** * 802.11 frame classes */ #define IEEEtypes_CLASS1_FRAME 1 #define IEEEtypes_CLASS2_FRAME 2 #define IEEEtypes_CLASS3_FRAME 3 /* * Structure of an internet header, naked of options. * * ip_len and ip_off are sint16, rather than UINT16 * pragmatically since otherwise unsigned comparisons can result * against negative integers quite easily, and fail in subtle ways. */ typedef MLAN_PACK_START struct { #if 1 //BYTE_ORDER == LITTLE_ENDIAN UINT8 ip_hl:4; /* header length */ UINT8 ip_v:4; /* version */ #endif UINT8 ip_tos; /* type of service */ sint16 ip_len; /* total length */ UINT16 ip_id; /* identification */ sint16 ip_off; /* fragment offset field */ UINT8 ip_ttl; /* time to live */ UINT8 ip_p; /* protocol */ UINT16 ip_sum; /* checksum */ UINT32 ip_src; // source ip addr UINT32 ip_dst; // dest ip address } MLAN_PACK_END ip_hdr_t; #define IP_DF 0x4000 /* dont fragment flag */ #define IP_MF 0x2000 /* more fragments flag */ #define IP_OFFMASK 0x1fff /* mask for fragmenting bits */ #define IP_V4 4 #define IP_V6 6 #define IP_PROT_TCP 0x06 #define IP_PROT_UDP 0x11 typedef MLAN_PACK_START struct { UINT8 priority:4; UINT8 ip_v:4; UINT8 flow_lbl[3]; UINT16 payload_len; UINT8 next_hdr; UINT8 hop_limit; UINT8 ip_src[16]; /* source ip addr */ UINT8 ip_dst[16]; /* dest ip address */ } MLAN_PACK_END ipv6_hdr_t; #define ETHTYPE_ARP 0x0806 #define ETHTYPE_IP 0x0800 #define ARP_OP_REQ 1 #define ARP_OP_RESP 2 #define ETHTYPE_IPV6 0x86DD #define ICMPV6_TYPE 0x3a /* See RFC 826 for ARP protocol description. */ typedef MLAN_PACK_START struct { UINT16 ar_hrd; // hardware address space UINT16 ar_pro; // prototcol address space UINT8 ar_hln; // byte length of hardware addr UINT8 ar_pln; // byte length of protocol addr UINT16 ar_op; // ARP opcode } MLAN_PACK_END arp_hdr_t; typedef MLAN_PACK_START struct { arp_hdr_t hdr; // arp header UINT8 ar_sha[IEEEtypes_ADDRESS_SIZE]; // sender hardware addr UINT8 ar_spa[4]; // sender protocol addr UINT8 ar_tha[IEEEtypes_ADDRESS_SIZE]; // target hardware addr UINT8 ar_tpa[4]; // target protocol addr } MLAN_PACK_END arp_t; /* icmp header struct of echo request and echo reply */ typedef MLAN_PACK_START struct { UINT8 type; UINT8 code; UINT16 sum; UINT16 id; UINT16 seq; } MLAN_PACK_END icmp_hdr_t; #define ICMP_ECHO_REQ 8 #define ICMP_ECHO_REPLY 0 typedef MLAN_PACK_START struct { UINT8 type; UINT8 icode; UINT16 csum; UINT32 reserved; UINT8 target_addr[16]; } MLAN_PACK_END icmpv6_nsol_t; #define ICMPV6_TYPE_NSOL 0x87 #define ICMPV6_TYPE_NADV 0x88 #define ICMPV6_NADV_FLAG_RTR (1<<31) #define ICMPV6_NADV_FLAG_SOL (1<<30) #define ICMPV6_NADV_FLAG_OVR (1<<29) #define ICMPV6_OPT_TYPE_TLA (0x2) #define ICMPV6_OPT_TYPE_TLA_LEN (0x1) typedef MLAN_PACK_START struct { UINT8 type; UINT8 icode; UINT16 csum; UINT32 reserved; UINT8 target_addr[16]; UINT8 icmp_option_type; UINT8 icmp_option_length; UINT8 macAddr[6]; } MLAN_PACK_END icmpv6_nadv_t; /* ***************************************************************************** ** ** ** 802.1x Types ** ** ***************************************************************************** */ typedef MLAN_PACK_START enum { IEEE_8021X_PACKET_TYPE_EAP_PACKET = 0, IEEE_8021X_PACKET_TYPE_EAPOL_START = 1, IEEE_8021X_PACKET_TYPE_EAPOL_LOGOFF = 2, IEEE_8021X_PACKET_TYPE_EAPOL_KEY = 3, IEEE_8021X_PACKET_TYPE_ASF_ALERT = 4, } MLAN_PACK_END IEEEtypes_8021x_PacketType_e; typedef MLAN_PACK_START enum { IEEE_8021X_CODE_TYPE_REQUEST = 1, IEEE_8021X_CODE_TYPE_RESPONSE = 2, IEEE_8021X_CODE_TYPE_SUCCESS = 3, IEEE_8021X_CODE_TYPE_FAILURE = 4, } MLAN_PACK_END IEEEtypes_8021x_CodeType_e; /* ***************************************************************************** ** ** ** 802.11 PHY Types ** ** ***************************************************************************** */ typedef MLAN_PACK_START enum { IEEE_PHY_TYPE_UNKNOWN = 0, IEEE_PHY_TYPE_FHSS_2_4_GHz = 1, IEEE_PHY_TYPE_DSSS_2_4_GHz = 2, IEEE_PHY_TYPE_IR_BASEBAND = 3, IEEE_PHY_TYPE_OFDM_5GHz = 4, IEEE_PHY_TYPE_HRDSSS = 5, IEEE_PHY_TYPE_ERP = 6, } MLAN_PACK_END IEEEtypes_PhyType_e; /* ***************************************************************************** ** ** ** 802.11 Message Types ** ** ***************************************************************************** */ typedef enum { IEEE_TYPE_MANAGEMENT = 0, IEEE_TYPE_CONTROL, IEEE_TYPE_DATA } IEEEtypes_MsgType_e; /* ***************************************************************************** ** ** ** 802.11 Mangagement SubTypes ** ** ***************************************************************************** */ typedef enum { IEEE_MSG_ASSOCIATE_RQST = 0, IEEE_MSG_ASSOCIATE_RSP, IEEE_MSG_REASSOCIATE_RQST, IEEE_MSG_REASSOCIATE_RSP, IEEE_MSG_PROBE_RQST, IEEE_MSG_PROBE_RSP, IEEE_MSG_BEACON = 8, IEEE_MSG_ATIM, IEEE_MSG_DISASSOCIATE, IEEE_MSG_AUTHENTICATE, IEEE_MSG_DEAUTHENTICATE, IEEE_MSG_ACTION } IEEEtypes_MgmtSubType_e; /* ***************************************************************************** ** ** ** 802.11 Control Frame SubTypes ** ** ***************************************************************************** */ typedef enum { BF_RPRT_POLL = 4, NDPA = 5, BAR = 8, BA = 9, PS_POLL = 10, RTS = 11, CTS = 12, ACK = 13, CF_END = 14, CF_END_CF_ACK = 15, } IEEEtypes_CtlSubType_e; /* ***************************************************************************** ** ** ** 802.11 Data Frame SubTypes ** ** ***************************************************************************** */ typedef enum { DATA = 0, DATA_CF_ACK = 1, DATA_CF_POLL = 2, DATA_CF_ACK_CF_POLL = 3, NULL_DATA = 4, CF_ACK = 5, CF_POLL = 6, CF_ACK_CF_POLL = 7, QOS_DATA = 8, QOS_DATA_CF_ACK = 9, QOS_DATA_CF_POLL = 10, QOS_DATA_CF_ACK_CF_POLL = 11, QOS_NULL = 12, RESERVED_13 = 13, QOS_CF_POLL_NO_DATA = 14, QOS_CF_ACK_CF_POLL_NO_DATA = 15 } IEEEtypes_DataSubType_e; /* ***************************************************************************** ** ** ** 802.11 Action Frame Categories ** ** ***************************************************************************** */ typedef MLAN_PACK_START enum { IEEE_MGMT_ACTION_CATEGORY_SPECTRUM_MGMT = 0, IEEE_MGMT_ACTION_CATEGORY_QOS = 1, IEEE_MGMT_ACTION_CATEGORY_DLS = 2, IEEE_MGMT_ACTION_CATEGORY_BLOCK_ACK = 3, IEEE_MGMT_ACTION_CATEGORY_UNPROTECT_PUBLIC = 4, IEEE_MGMT_ACTION_CATEGORY_RADIO_RSRC = 5, IEEE_MGMT_ACTION_CATEGORY_FAST_BSS_TRANS = 6, IEEE_MGMT_ACTION_CATEGORY_HT = 7, IEEE_MGMT_ACTION_CATEGORY_SA_QUERY = 8, IEEE_MGMT_ACTION_CATEGORY_PROTECT_PUBLIC = 9, IEEE_MGMT_ACTION_CATEGORY_PROTECT_WNM = 10, IEEE_MGMT_ACTION_CATEGORY_UNPROTECT_WNM = 11, IEEE_MGMT_ACTION_CATEGORY_TDLS = 12, IEEE_MGMT_ACTION_CATEGORY_WMM_TSPEC = 17, IEEE_MGMT_ACTION_CATEGORY_VHT = 21, IEEE_MGMT_ACTION_CATEGORY_PROTECT_VENDOR_SPECIFIC = 126, IEEE_MGMT_ACTION_CATEGORY_VENDOR_SPECIFIC = 127 } MLAN_PACK_END IEEEtypes_ActionCategory_e; /* ** The possible types of commands sent from the SME */ typedef enum { SME_CMD_NONE, SME_CMD_AUTHENTICATE, SME_CMD_ASSOCIATE, SME_CMD_REASSOCIATE, SME_CMD_DEAUTHENTICATE, SME_CMD_DISASSOCIATE, SME_CMD_START, SME_CMD_JOIN, SME_CMD_RESET, SME_CMD_SCAN, } IEEEtypes_SmeCmd_e; /* ** The possible types of Basic Service Sets */ typedef enum { BSS_INFRASTRUCTURE = 1, BSS_INDEPENDENT, BSS_ANY, BSS_TDLS, // Firmware internal BSS types only BSS_BT_AMP = 0xF0, BSS_LAST = 0xFF } IEEEtypes_Bss_e; /* ** 802.11 Element and Subelement IDs */ typedef MLAN_PACK_START enum { ELEM_ID_SSID = 0, ELEM_ID_SUPPORTED_RATES = 1, ELEM_ID_FH_PARAM_SET = 2, ELEM_ID_DS_PARAM_SET = 3, ELEM_ID_CF_PARAM_SET = 4, ELEM_ID_TIM = 5, ELEM_ID_IBSS_PARAM_SET = 6, ELEM_ID_COUNTRY = 7, ELEM_ID_HOP_PARAM = 8, ELEM_ID_HOP_TABLE = 9, ELEM_ID_REQUEST = 10, ELEM_ID_BSS_LOAD = 11, ELEM_ID_EDCA_PARAM_SET = 12, ELEM_ID_TSPEC = 13, ELEM_ID_TCLAS = 14, ELEM_ID_SCHEDULE = 15, ELEM_ID_CHALLENGE_TEXT = 16, ELEM_ID_POWER_CONSTRAINT = 32, ELEM_ID_POWER_CAPABILITY = 33, ELEM_ID_TPC_REQUEST = 34, ELEM_ID_TPC_REPORT = 35, ELEM_ID_SUPPORTED_CHANNELS = 36, ELEM_ID_CHANNEL_SWITCH_ANN = 37, ELEM_ID_MEASUREMENT_REQ = 38, ELEM_ID_MEASUREMENT_RPT = 39, ELEM_ID_QUIET = 40, ELEM_ID_IBSS_DFS = 41, ELEM_ID_ERP_INFO = 42, ELEM_ID_TS_DELAY = 43, ELEM_ID_TCLAS_PROCESS = 44, ELEM_ID_HT_CAPABILITY = 45, ELEM_ID_QOS_CAPABILITY = 46, ELEM_ID_RSN = 48, ELEM_ID_EXT_SUPPORTED_RATES = 50, ELEM_ID_AP_CHANNEL_REPORT = 51, ELEM_ID_NEIGHBOR_REPORT = 52, ELEM_ID_RCPI = 53, ELEM_ID_MOBILITY_DOMAIN = 54, ELEM_ID_FAST_BSS_TRANS = 55, ELEM_ID_TIMEOUT_INTERVAL = 56, ELEM_ID_RIC_DATA = 57, ELEM_ID_DSE_REGISTERED_LOC = 58, ELEM_ID_SUPPORTED_REGCLASS = 59, ELEM_ID_EXT_CHAN_SWITCH_ANN = 60, ELEM_ID_HT_INFORMATION = 61, ELEM_ID_SECONDARY_CHAN_OFFSET = 62, ELEM_ID_BSS_ACCESS_DELAY = 63, ELEM_ID_ANTENNA_INFO = 64, ELEM_ID_RSNI = 65, ELEM_ID_MEAS_PILOT_TX_INFO = 66, ELEM_ID_BSS_AVAIL_ADM_CAP = 67, ELEM_ID_BSS_AC_ACCESS_DELAY = 68, ELEM_ID_RRM_ENABLED_CAP = 70, ELEM_ID_MULTI_BSSID = 71, ELEM_ID_2040_BSS_COEXISTENCE = 72, ELEM_ID_2040_BSS_INTOL_CHRPT = 73, ELEM_ID_OBSS_SCAN_PARAM = 74, ELEM_ID_RIC_DESCRIPTOR = 75, ELEM_ID_MANAGEMENT_MIC = 76, ELEM_ID_EVENT_REQUEST = 78, ELEM_ID_EVENT_REPORT = 79, ELEM_ID_DIAG_REQUEST = 80, ELEM_ID_DIAG_REPORT = 81, ELEM_ID_LOCATION_PARAM = 82, ELEM_ID_NONTRANS_BSSID_CAP = 83, ELEM_ID_SSID_LIST = 84, ELEM_ID_MBSSID_INDEX = 85, ELEM_ID_FMS_DESCRIPTOR = 86, ELEM_ID_FMS_REQUEST = 87, ELEM_ID_FMS_RESPONSE = 88, ELEM_ID_QOS_TRAFFIC_CAP = 89, ELEM_ID_BSS_MAX_IDLE_PERIOD = 90, ELEM_ID_TFS_REQUEST = 91, ELEM_ID_TFS_RESPONSE = 92, ELEM_ID_WNM_SLEEP_MODE = 93, ELEM_ID_TIM_BCAST_REQUEST = 94, ELEM_ID_TIM_BCAST_RESPONSE = 95, ELEM_ID_COLLOC_INTF_REPORT = 96, ELEM_ID_CHANNEL_USAGE = 97, ELEM_ID_TIME_ZONE = 98, ELEM_ID_DMS_REQUEST = 99, ELEM_ID_DMS_RESPONSE = 100, ELEM_ID_LINK_ID = 101, ELEM_ID_WAKEUP_SCHEDULE = 102, ELEM_ID_TDLS_CS_TIMING = 104, ELEM_ID_PTI_CONTROL = 105, ELEM_ID_PU_BUFFER_STATUS = 106, ELEM_ID_EXT_CAPABILITIES = 127, ELEM_ID_VHT_CAPABILITIES = 191, ELEM_ID_VHT_OPERATION = 192, ELEM_ID_WIDE_BAND_CHAN_SW = 193, ELEM_ID_AID = 197, ELEM_ID_VHT_OP_MODE_NOTIFICATION = 199, ELEM_ID_VENDOR_SPECIFIC = 221, /* Subelement IDs */ SUBELEM_ID_REPORTED_FRAME_BODY = 1, SUBELEM_ID_REPORTING_DETAIL = 2, SUBELEM_ID_PMK_R1_KEY_HOLDER_ID = 1, SUBELEM_ID_GTK = 2, SUBELEM_ID_PMK_R0_KEY_HOLDER_ID = 3, SUBELEM_ID_IGTK = 4, /* Non-IEEE IDs */ ELEM_ID_WAPI = 68, } MLAN_PACK_END IEEEtypes_ElementId_e; /* The KDE data types */ typedef enum { KDE_DATA_TYPE_RESERVED, KDE_DATA_TYPE_GTK = 1, KDE_DATA_TYPE_RESERVED2, KDE_DATA_TYPE_MACADDR = 3, KDE_DATA_TYPE_PMKID = 4, KDE_DATA_TYPE_SMK = 5, KDE_DATA_TYPE_NONCE = 6, KDE_DATA_TYPE_LIFETIME = 7, KDE_DATA_TYPE_ERROR = 8, KDE_DATA_TYPE_IGTK = 9 } IEEEtypes_KDEDataType_e; /* The possible power management modes */ typedef enum { PWR_MODE_ACTIVE, PWR_MODE_PWR_SAVE } IEEEtypes_PwrMgmtMode_e; /* The possible types of authentication */ typedef enum { AUTH_OPEN_SYSTEM = 0, AUTH_SHARED_KEY = 1, AUTH_FAST_BSS_TRANSITION = 2, AUTH_NETWORK_EAP = 0x80, AUTH_NOT_SUPPORTED, AUTH_AUTO_OPEN_OR_SHARED = 0xFF } IEEEtypes_AuthType_e; /* The possible responses to a request to scan */ typedef enum { SCAN_RESULT_SUCCESS, SCAN_RESULT_INVALID_PARAMETERS, SCAN_RESULT_INTERNAL_ERROR, SCAN_RESULT_PARTIAL_RESULTS, } IEEEtypes_ScanResult_e; /* The possible responses to a request to join a BSS */ typedef enum { JOIN_RESULT_SUCCESS, JOIN_RESULT_INTERNAL_ERROR, JOIN_RESULT_TIMEOUT } IEEEtypes_JoinResult_e; /* The possible results to a request to authenticate */ typedef enum { AUTH_RESULT_SUCCESS, AUTH_RESULT_INTERNAL_ERROR, AUTH_RESULT_TIMEOUT, AUTH_RESULT_UNUSED, /* Do not reuse, maps to refused assoc result */ AUTH_RESULT_UNHANDLED_MSG, AUTH_RESULT_REFUSED, AUTH_RESULT_INVALID_PARAMETER } IEEEtypes_AuthResult_e; /* The possible results to a request to deauthenticate */ typedef enum { DEAUTH_RESULT_SUCCESS, DEAUTH_RESULT_INVALID_PARAMETERS, DEAUTH_RESULT_TOO_MANY_SIMULTANEOUS_RQSTS, DEAUTH_RESULT_TIMEOUT } IEEEtypes_DeauthResult_e; /* The possible results to a request to associate */ typedef enum { ASSOC_RESULT_SUCCESS, ASSOC_RESULT_INTERNAL_ERROR, ASSOC_RESULT_TIMEOUT, ASSOC_RESULT_REFUSED, ASSOC_RESULT_AUTH_UNHANDLED_MSG, ASSOC_RESULT_AUTH_REFUSED, ASSOC_RESULT_INVALID_PARAMETER, } IEEEtypes_AssocResult_e; typedef enum { /* Failure enumerations must be non-zero since they map to the ** IEEE status field in the assoc response. The SUCCESS code is left ** in here as a place holder but is never used. The remaining enums ** cannot be assigned a value of 0. */ ASSOC_CMD_SUCCESS = 0, ASSOC_CMD_FAILURE_ASSOC, ASSOC_CMD_FAILURE_AUTH, ASSOC_CMD_FAILURE_JOIN } IEEEtypes_AssocCmdFailurePoint_e; typedef enum { DISASSOC_RESULT_SUCCESS, DISASSOC_RESULT_INVALID_PARAMETERS, DISASSOC_RESULT_TIMEOUT, DISASSOC_RESULT_REFUSED } IEEEtypes_DisassocResult_e; /* */ /* The possible results to a request to disassociate */ /* */ typedef enum { PWR_MGMT_RESULT_SUCCESS, PWR_MGMT_RESULT_INVALID_PARAMETERS, PWR_MGMT_RESULT_NOT_SUPPORTED } IEEEtypes_PwrMgmtResult_e; /* */ /* The possible results to a request to change the power management mode */ /* */ typedef enum { RESET_RESULT_SUCCESS } IEEEtypes_ResetResult_e; /* */ /* The possible results to a request to reset */ /* */ typedef enum { START_RESULT_SUCCESS, START_RESULT_INVALID_PARAMETERS, START_RESULT_BSS_ALREADY_STARTED_OR_JOINED, START_RESULT_RESET_REQUIRED_BEFORE_START, START_RESULT_NOT_SUPPORTED, START_RESULT_ACS_ENABLED } IEEEtypes_StartResult_e; /* */ /* The possible results to a request to start */ /* */ typedef enum { TPCADAPT_RESULT_SUCCESS, TPCADAPT_RESULT_INVALID_PARAMETERS, TPCADAPT_RESULT_UNSPECIFIED_FAILURE } IEEEtypes_TPCAdaptResult_e; typedef enum { STATE_IDLE, STATE_SCANNING, STATE_JOINING, STATE_ASSOCIATING, STATE_ASSOCIATED, STATE_ROAMING, STATE_IBSS_ACTIVE, STATE_BSS_ACTIVE, STATE_TDLS_SETUP_REQ_RCVD, STATE_TDLS_SETUP_REQ_SENT, STATE_TDLS_SETUP_RSP_SENT, STATE_TDLS_ACTIVE, } IEEEtypes_MacMgmtStates_e; /* */ /* The possible states the MAC Management Service Task can be in */ /* */ /*---------------------------------------------------------------------------*/ /* Types Used In IEEE 802.11 MAC Message Data Structures */ /*---------------------------------------------------------------------------*/ typedef UINT8 IEEEtypes_Len_t; /* */ /* Length type */ /* */ typedef UINT8 IEEEtypes_Addr_t; /* */ /* Address type */ /* */ typedef IEEEtypes_Addr_t IEEEtypes_MacAddr_t[IEEEtypes_ADDRESS_SIZE]; /* */ /* MAC address type */ /* */ typedef UINT8 IEEEtypes_DataRate_t; /* */ /* Type used to specify the supported data rates */ /* */ typedef UINT8 IEEEtypes_SsId_t[IEEEtypes_SSID_SIZE]; /* */ /* SS ID type */ /* */ /*---------------------------------------------------------------------------*/ /* IEEE 802.11 MAC Message Data Structures */ /* */ /* Each IEEE 802.11 MAC message includes a MAC header, a frame body (which */ /* can be empty), and a frame check sequence field. This section gives the */ /* structures that used for the MAC message headers and frame bodies that */ /* can exist in the three types of MAC messages - 1) Control messages, */ /* 2) Data messages, and 3) Management messages. */ /*---------------------------------------------------------------------------*/ typedef MLAN_PACK_START struct { UINT16 ProtocolVersion:2; UINT16 Type:2; UINT16 Subtype:4; UINT16 ToDs:1; UINT16 FromDs:1; UINT16 MoreFrag:1; UINT16 Retry:1; UINT16 PwrMgmt:1; UINT16 MoreData:1; UINT16 Protected:1; UINT16 Order:1; } MLAN_PACK_END IEEEtypes_FrameCtl_t; typedef MLAN_PACK_START struct { UINT16 FragNum:4; UINT16 SeqNum:12; } MLAN_PACK_END IEEEtypes_SeqCtl_t; typedef struct { UINT16 FrmBodyLen; IEEEtypes_FrameCtl_t FrmCtl; UINT16 DurationId; IEEEtypes_MacAddr_t Addr1; IEEEtypes_MacAddr_t Addr2; IEEEtypes_MacAddr_t Addr3; IEEEtypes_SeqCtl_t SeqCtl; IEEEtypes_MacAddr_t Addr4; } IEEEtypes_GenHdr_t; typedef MLAN_PACK_START struct { UINT16 FrmBodyLen; IEEEtypes_FrameCtl_t FrmCtl; UINT16 Duration; IEEEtypes_MacAddr_t DestAddr; IEEEtypes_MacAddr_t SrcAddr; IEEEtypes_MacAddr_t BssId; IEEEtypes_SeqCtl_t SeqCtl; IEEEtypes_MacAddr_t Rsrvd; } MLAN_PACK_END IEEEtypes_MgmtHdr_t; typedef struct { IEEEtypes_GenHdr_t Hdr; UINT8 FrmBody[IEEEtypes_MAX_DATA_BODY_LEN]; UINT32 FCS; } IEEEtypes_DataFrame_t; typedef struct { UINT8 UserPriority:4; UINT8 Management:1; UINT8 Reserved:3; } IEEEtypes_NonceFlags_t; typedef MLAN_PACK_START struct { UINT8 PN0; UINT8 PN1; UINT8 Reserved1; UINT8 Reserved2:5; UINT8 ExtIV:1; UINT8 KeyId:2; UINT8 PN2; UINT8 PN3; UINT8 PN4; UINT8 PN5; } MLAN_PACK_END IEEEtypes_CcmpHeader_t; typedef MLAN_PACK_START struct { UINT8 TSC1; UINT8 WepSeed; UINT8 TSC0; UINT8 Reserved:5; UINT8 ExtIV:1; UINT8 KeyId:2; UINT8 TSC2; UINT8 TSC3; UINT8 TSC4; UINT8 TSC5; } MLAN_PACK_END IEEEtypes_TkipHeader_t; typedef MLAN_PACK_START struct { IEEEtypes_FrameCtl_t frameCtl; IEEEtypes_MacAddr_t addr1; IEEEtypes_MacAddr_t addr2; IEEEtypes_MacAddr_t addr3; } MLAN_PACK_END IEEEtypes_BIP_AAD_t; /************************************************************************/ /* Control Frame Types */ /************************************************************************/ typedef MLAN_PACK_START struct { UINT16 FrmBodyLen; IEEEtypes_FrameCtl_t FrmCtl; UINT16 DurationId; IEEEtypes_MacAddr_t DestAddr; IEEEtypes_MacAddr_t SrcAddr; UINT8 Reserved[14]; /* Header MAC HW is 32 bytes */ } MLAN_PACK_END IEEEtypes_CtlHdr_t; typedef MLAN_PACK_START struct { IEEEtypes_CtlHdr_t Hdr; UINT32 FCS; } MLAN_PACK_END IEEEtypes_PsPoll_t; typedef MLAN_PACK_START struct { UINT16 BARAckPolicy:1; UINT16 Multi_TID:1; UINT16 CompressedBitmap:1; UINT16 Reserved:9; UINT16 TID:4; } MLAN_PACK_END IEEEtypes_BARCtl_t; typedef MLAN_PACK_START struct { IEEEtypes_CtlHdr_t Hdr; IEEEtypes_BARCtl_t BARCtl; IEEEtypes_SeqCtl_t SeqCtl; UINT32 FCS; } MLAN_PACK_END IEEEtypes_BlockAckReq_t; //NDPA frame components typedef MLAN_PACK_START struct { UINT16 AID:12; UINT16 FbType:1; UINT16 NcIndex:3; } MLAN_PACK_END IEEEtypes_StaInfo_t; typedef MLAN_PACK_START struct { UINT8 Rsvd:2; //[0:1] Reserved UINT8 SoundingSeq:6; //[2:7]Seq no. IEEEtypes_StaInfo_t StaInfo; //Currently only 1 sta_info support } MLAN_PACK_END IEEEtypes_NDPAFrameBody_t; typedef MLAN_PACK_START struct { IEEEtypes_CtlHdr_t Hdr; IEEEtypes_NDPAFrameBody_t FrameBody; UINT32 FCS; } MLAN_PACK_END IEEEtypes_NDPAFrame_t; /*-------------------------------------------------*/ /* Management Frame Body Components - Fixed Fields */ /*-------------------------------------------------*/ typedef UINT16 IEEEtypes_AId_t; /* */ /* Association ID assigned by an AP during the association process */ /* */ typedef UINT16 IEEEtypes_AuthAlg_t; /* */ /* Number indicating the authentication algorithm used (it can take */ /* on the values given by IEEEtypes_AuthType_e): */ /* 0 = Open system */ /* 1 = Shared key */ /* All other values reserved */ /* */ typedef UINT16 IEEEtypes_AuthTransSeq_t; /* */ /* Authentication transaction sequence number that indicates the current */ /* state of progress through a multistep transaction */ /* */ typedef UINT16 IEEEtypes_BcnInterval_t; /* */ /* Beacon interval that represents the number of time units between */ /* target beacon transmission times */ /* */ typedef UINT8 IEEEtypes_DtimPeriod_t; /* * Interval that represents the number of time units between DTIMs. */ typedef MLAN_PACK_START struct { UINT16 Ess:1; UINT16 Ibss:1; UINT16 CfPollable:1; UINT16 CfPollRqst:1; UINT16 Privacy:1; UINT16 ShortPreamble:1; UINT16 Pbcc:1; UINT16 ChanAgility:1; UINT16 SpectrumMgmt:1; UINT16 Qos:1; UINT16 ShortSlotTime:1; UINT16 APSD:1; UINT16 RadioMeasurement:1; UINT16 DsssOfdm:1; UINT16 DelayedBlockAck:1; UINT16 ImmediateBlockAck:1; } MLAN_PACK_END IEEEtypes_CapInfo_t; typedef UINT16 IEEEtypes_ListenInterval_t; /* */ /* Listen interval to indicate to an AP how often a STA wakes to listen */ /* to beacon management frames */ /* */ typedef UINT16 IEEEtypes_ReasonCode_t; /* */ /* Reason code to indicate the reason that an unsolicited notification */ /* management frame of type Disassociation or Deauthentication was */ /* generated */ /* */ typedef UINT16 IEEEtypes_StatusCode_t; /* */ /* Status code used in a response management frame to indicate the */ /* success or failure of a requested operation */ /* */ typedef UINT8 IEEEtypes_TimeStamp_t[IEEEtypes_TIME_STAMP_SIZE]; /*-------------------------------------------------------*/ /* Management Frame Body Components - Information Fields */ /*-------------------------------------------------------*/ typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; } MLAN_PACK_END IEEEtypes_InfoElementHdr_t; typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; UINT8 Data[255]; } MLAN_PACK_END IEEEtypes_IE_Param_t; /* ** SSID element that idicates the identity of an ESS or IBSS */ typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; IEEEtypes_SsId_t SsId; } MLAN_PACK_END IEEEtypes_SsIdElement_t; /* ** Supported rates element that specifies the rates in the operational ** rate set in the MLME join request and the MLME start request */ typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; IEEEtypes_DataRate_t Rates[IEEEtypes_MAX_DATA_RATES]; } MLAN_PACK_END IEEEtypes_SuppRatesElement_t; /* ** FH parameter set that conatins the set of parameters necessary to ** allow sychronization for stations using a frequency hopping PHY */ typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; UINT16 DwellTime; UINT8 HopSet; UINT8 HopPattern; UINT8 HopIndex; } MLAN_PACK_END IEEEtypes_FhParamElement_t; /* ** DS parameter set that contains information to allow channel number ** identification for stations using a direct sequence spread spectrum PHY */ typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; UINT8 CurrentChan; } MLAN_PACK_END IEEEtypes_DsParamElement_t; /* ** CF parameter set that contains the set of parameters necessary to ** support the PCF */ typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; UINT8 CfpCnt; UINT8 CfpPeriod; UINT16 CfpMaxDuration; UINT16 CfpDurationRemaining; } MLAN_PACK_END IEEEtypes_CfParamElement_t; /* Since uAP is the only one that holds the TIM statically, we'll ** define a max size for the PVB that accomodates a max AID of 32 ** used by the uAP. Size is 5 to account for broadcast. */ #define MAX_TIM_ELEMENT_PVB_LENGTH 5 /* ** TIM, which contains: ** 1) DTIM count - how many beacons (including the current beacon ** frame) appear before the next DTIM; a count of 0 indicates the ** current TIM is the DTIM ** ** 2) DTIM period - indicates the number of beacon intervals between ** successive DTIMs ** ** 3) Bitmap control - contains the traffic indicator bit associated ** with association ID 0 - this is set to 1 for TIM elements with a ** a value of 0 in the DTIM count field when one or more broadcast ** or multicast frames are buffered at the AP. The remaining bits ** of the field form the bitmap offset ** ** 4) Partial virtual bitmap - indicates which stations have messages ** buffered at the AP, for which the AP is prepared to deliver at * the time the beacon frame is transmitted */ typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; UINT8 DtimCnt; UINT8 DtimPeriod; UINT8 BitmapCtl; UINT8 PartialVirtualBitmap[MAX_TIM_ELEMENT_PVB_LENGTH]; } MLAN_PACK_END IEEEtypes_TimElement_t; /* ** IBSS parameters necessary to support an IBSS */ typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; UINT16 AtimWindow; } MLAN_PACK_END IEEEtypes_IbssParamElement_t; /* ** The challenge text used in authentication exchanges */ typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; UINT8 Text[IEEEtypes_CHALLENGE_TEXT_SIZE]; } MLAN_PACK_END IEEEtypes_ChallengeText_t; typedef MLAN_PACK_START struct { UINT8 ExtCapability; UINT32 Capability; UINT8 SsIdLength; IEEEtypes_SsId_t SsId; } MLAN_PACK_END IEEEtypes_SsIdL_HidSsId_t; typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; UINT8 OuiType[4]; /* 00:50:f2:05 */ UINT8 PrimarySsIdExtCapability; /* Start optional fields */ UINT8 SsIdCount; /* SsIdCount # of hidden SSIDs, not a fixed size substructure */ IEEEtypes_SsIdL_HidSsId_t hidSsid[1]; } MLAN_PACK_END IEEEtypes_SsIdLElement_t; typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; UINT8 OuiType[4]; UINT8 Data[1]; } MLAN_PACK_END IEEEtypes_WPS_DataElement_t; /* This structure is a member of BssConfig_t which is referenced by ROMed code. ** Any increase in the size of this structure will cause the subsequent elements ** of BssConfig_t to move forward, in turn affecting the ROM code. Therefore, ** any changes to this structure should be done taking into account its effect ** on BssConfig_t and ROM code. */ typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; UINT8 BSS_CoexistSupport:1; /* bit 0 */ UINT8 Reserved1:1; /* bit 1 */ UINT8 ExtChanSwitching:1; /* bit 2 */ UINT8 RejectUnadmFrame:1; /* bit 3 */ UINT8 PSMP_Capable:1; /* bit 4 */ UINT8 Reserved5:1; /* bit 5 */ UINT8 SPSMP_Support:1; /* bit 6 */ UINT8 Event:1; /* bit 7 */ UINT8 Diagnostics:1; /* bit 8 */ UINT8 MulticastDiagnostics:1; /* bit 9 */ UINT8 LocationTracking:1; /* bit 10 */ UINT8 FMS:1; /* bit 11 */ UINT8 ProxyARPService:1; /* bit 12 */ UINT8 CollocatedIntf:1; /* bit 13 */ UINT8 CivicLocation:1; /* bit 14 */ UINT8 GeospatialLocation:1; /* bit 15 */ UINT8 TFS:1; /* bit 16 */ UINT8 WNM_Sleep:1; /* bit 17 */ UINT8 TIM_Broadcast:1; /* bit 18 */ UINT8 BSS_Transition:1; /* bit 19 */ UINT8 QoSTrafficCap:1; /* bit 20 */ UINT8 AC_StationCount:1; /* bit 21 */ UINT8 MultipleBSSID:1; /* bit 22 */ UINT8 TimingMeasurement:1; /* bit 23 */ UINT8 ChannelUsage:1; /* bit 24 */ UINT8 SSID_List:1; /* bit 25 */ UINT8 DMS:1; /* bit 26 */ UINT8 UTC:1; /* bit 27 */ UINT8 TDLSPeerUAPSDSupport:1; /* bit 28 */ UINT8 TDLSPeerPSMSupport:1; /* bit 29 */ UINT8 TDLSChannelSwitching:1; /* bit 30 */ UINT8 Reserved31:1; UINT8 Reserved32_36:5; UINT8 TDLSSupport:1; /* bit 37 */ UINT8 TDLSProhibited:1; /* bit 38 */ UINT8 TDLSChlSwitchProhib:1; /* bit 39 */ UINT8 Reserved40_47:8; UINT8 Reserved48_55:8; UINT8 Reserved56_60:5; UINT8 TDLSWiderBandSupport:1; UINT8 OpModeNotification:1; /* bit 62 */ UINT8 Reserved63:1; /* bit 63 */ /* This structure is a member of BssConfig_t which is referenced by ROMed code. ** Any increase in the size of this structure will cause the subsequent elements ** of BssConfig_t to move forward, in turn affecting the ROM code. Therefore, ** any changes to this structure should be done taking into account its effect ** on BssConfig_t and ROM code. */ } MLAN_PACK_END IEEEtypes_ExtCapability_t; /* ** The HT Capability Element */ typedef enum { STATIC_SM_PS, DYNAMIC_SM_PS, RESERVED_SM_PS, DISABLE_SM_PS } IEEEtypes_HtCap_SMPS_e; typedef MLAN_PACK_START struct { UINT16 LdpcCoding:1; UINT16 SuppChanWidth:1; UINT16 MIMOPowerSave:2; UINT16 GFPreamble:1; UINT16 ShortGI20MHZ:1; UINT16 ShortGI40MHZ:1; UINT16 TxSTBC:1; UINT16 RxSTBC:2; UINT16 DelayedBA:1; UINT16 MaximalAMSDUSize:1; UINT16 DsssCck40MHzMode:1; UINT16 Psmp:1; UINT16 FortyMHzIntolerant:1; UINT16 L_SIG_TXOP_Protection:1; } MLAN_PACK_END IEEEtypes_HT_Cap_Info_t; typedef MLAN_PACK_START struct { UINT8 MaxRxAMpduFactor:2; UINT8 MpduDensity:3; UINT8 Reserved_5_7:3; } MLAN_PACK_END IEEEtypes_HT_Mac_Params_t; typedef MLAN_PACK_START struct { UINT16 Pco:1; UINT16 TransitionTime:2; UINT16 Reserved:5; UINT16 McsFeedback:2; UINT16 HtcSupport:1; UINT16 RdResponder:1; UINT16 Reserved2:4; } MLAN_PACK_END IEEEtypes_HT_Ext_Cap_t; typedef MLAN_PACK_START struct { UINT32 TxBFCapable:1; /* B0 */ UINT32 RxStaggeredSounding:1; UINT32 TxStaggeredSounding:1; UINT32 RxNDPCap:1; UINT32 TxNDPCap:1; UINT32 ImplicitTxBF:1; UINT32 Calibration:2; UINT32 ExplCSITxBF:1; /* B8 */ UINT32 ExplUcompSteerMatrix:1; UINT32 ExplCompSteerMatrix:1; UINT32 ExplBFCSIFeedback:2; UINT32 ExplUcompSteerFeedback:2; UINT32 ExplCompSteerMatrixFeedback:2; UINT32 MinimalGrouping:2; UINT32 CSINumMFAntennae:2; /* B20 */ UINT32 UcompSteerMatrixBFAntennae:2; UINT32 CompSteerMatrixBFAntennae:2; UINT32 CSIMaxMaxBeamSupported:2; UINT32 ChanEstCapability:2; UINT32 Reserved:3; /* B31 */ } MLAN_PACK_END IEEEtypes_HT_TXBF_Cap_t; typedef MLAN_PACK_START struct { UINT8 ASCapable:1; UINT8 ExplCSITxASCapable:1; UINT8 IndicesFeedbackTxAS:1; UINT8 ExplicitCSIFeedback:1; UINT8 AntIndicesFeedback:1; UINT8 RxASCapable:1; UINT8 TxSoundingPPDUs:1; UINT8 Reserved:1; } MLAN_PACK_END IEEEtypes_HT_AS_Cap_t; typedef enum { HTC_NO_FEEDBACK = 0, HTC_CSI, HTC_UCOMP_BF, HTC_COMP_BF } IEEEtypes_HTC_CSI_Types_e; typedef MLAN_PACK_START struct { UINT16 Nc:2; UINT16 Nr:2; UINT16 ChanW:1; UINT16 Ng:2; UINT16 Coeff_size:2; UINT16 Codebook_info:2; UINT16 Re_segments:2; UINT16 Reserved:2; UINT32 SndTimestamp; } MLAN_PACK_END IEEEtypes_MIMOCtrl_t; typedef MLAN_PACK_START struct { UINT16 Reserved:1; UINT16 TRQ:1; UINT16 MAI:4; UINT16 MFSI:3; UINT16 MFB_ASELC:7; } MLAN_PACK_END IEEEtypes_LinkAdaptCtrl_t; typedef MLAN_PACK_START struct { IEEEtypes_LinkAdaptCtrl_t LA_Ctrl; UINT16 CalibPos:2; UINT16 CalibSeq:2; UINT16 Reserved:2; UINT16 CSI:2; UINT16 NDPAnnounce:1; UINT16 Reserved2:5; UINT16 ACConst:1; UINT16 RDG_MorePPDU:1; } MLAN_PACK_END IEEEtypes_HTCtrl_t; #define HTC_NDP_ANNOUNCE BIT24 #define IEEEtypes_MCS_BITMAP_SIZE 16 typedef UINT8 IEEEtypes_Supported_MCS_Bitmap_t[IEEEtypes_MCS_BITMAP_SIZE]; typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; IEEEtypes_HT_Cap_Info_t HtCapInfo; IEEEtypes_HT_Mac_Params_t HtMacParams; IEEEtypes_Supported_MCS_Bitmap_t SupportedMcsBitmap; IEEEtypes_HT_Ext_Cap_t ExtHTCaps; IEEEtypes_HT_TXBF_Cap_t TxBFCaps; IEEEtypes_HT_AS_Cap_t ASCaps; } MLAN_PACK_END IEEEtypes_HT_Capability_t; /* ** The HT Information Element */ typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; UINT8 PrimaryChan; /*-----------------------------------------------*/ UINT8 SecChanOffset:2; UINT8 ChanWidth:1; UINT8 RifsMode:1; UINT8 CtrlLedAccessOnly:1; UINT8 SrvIntrvlGran:3; /*-----------------------------------------------*/ UINT16 HtProtection:2; UINT16 NonGfHtStaPresent:1; UINT16 Reserved1:1; UINT16 ObssNonHtStaPresent:1; UINT16 Reserved2:11; /*-----------------------------------------------*/ UINT16 Reserved3:6; UINT16 DualBeacon:1; UINT16 DualCtsProtection:1; UINT16 StbcBeacon:1; UINT16 L_SIGTxopProtectionAllowed:1; UINT16 PcoActive:1; UINT16 PcoPhase:1; UINT16 Reserved4:4; /*-----------------------------------------------*/ IEEEtypes_Supported_MCS_Bitmap_t BasicMcsSetBitmap; } MLAN_PACK_END IEEEtypes_HT_Information_t; /* secondary channel offset */ /* 20/40 BSS Coexistence */ typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; UINT8 InfoResuest:1; UINT8 FortyMHzIntolerant:1; UINT8 Width20MHzRequest:1; UINT8 Reserved:5; } MLAN_PACK_END IEEEtypes_20N40_BSS_Coexist_t; /* overlapping BSS Scan Parameters */ typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; UINT16 OBSSScanPassiveDwell; UINT16 OBSSScanActiveDwel; UINT16 BSSChanWidthTriggerScanInt; UINT16 OBSSScanPassiveTotal; UINT16 OBSSScanActiveTotal; UINT16 BSSWidthChanTransDelay; UINT16 OBSSScanActiveThreshold; } MLAN_PACK_END IEEEtypes_OBSS_ScanParam_t; typedef MLAN_PACK_START struct { UINT8 htSupported; IEEEtypes_HT_Capability_t htCap; IEEEtypes_HT_Information_t htInfo; UINT8 secChanOffset; IEEEtypes_20N40_BSS_Coexist_t coexist; IEEEtypes_OBSS_ScanParam_t scanParam; } MLAN_PACK_END HtEntry_t; #define DOT11AC_VHTCAP_MAX_MPDU_LEN_0 3895 #define DOT11AC_VHTCAP_MAX_MPDU_LEN_1 7991 #define DOT11AC_VHTCAP_MAX_MPDU_LEN_2 11454 #define DOT11AC_VHTCAP_MAX_MPDU_LEN_3 3895 //reserved value /* IE definitions based on draft 1.4. */ typedef MLAN_PACK_START struct { UINT32 MaxMpduLen:2; UINT32 SuppChanWidthSet:2; UINT32 RxLDPC:1; UINT32 ShortGI_80:1; UINT32 ShortGI_160:1; UINT32 TxSTBC:1; /*------------------------*/ UINT32 RxSTBC:3; UINT32 SUBFerCap:1; UINT32 SUBFeeCap:1; UINT32 NumBFerAnt:3; /*------------------------*/ UINT32 NumSoundingDim:3; UINT32 MUBFerCap:1; UINT32 MUBFeeCap:1; UINT32 VHTTxOPPs:1; UINT32 HTC_VHT_Cap:1; UINT32 MaxAMPDULenExp:3; UINT32 VHTLinkAdaptCap:2; UINT32 Reserved:4; } MLAN_PACK_END IEEEtypes_VHT_Cap_Info_t; typedef MLAN_PACK_START struct { UINT16 RxMCSMap; UINT16 RxHighestDataRate:13; UINT16 Reserved1:3; UINT16 TxMCSMap; UINT16 TxHighestDataRate:13; UINT16 Reserved2:3; } MLAN_PACK_END IEEEtypes_VHT_Supp_MCS_Set_t; typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; IEEEtypes_VHT_Cap_Info_t VhtCap; IEEEtypes_VHT_Supp_MCS_Set_t VhtSuppMcsSet; } MLAN_PACK_END IEEEtypes_VHT_Capability_t; typedef MLAN_PACK_START struct { UINT8 ChanWidth; UINT8 ChanCenterFreq1; UINT8 ChanCenterFreq2; } MLAN_PACK_END IEEEtypes_VHT_Op_Info_t; /* ** The VHT Operation Element */ typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; IEEEtypes_VHT_Op_Info_t VhtOpInfo; UINT16 VhtBasicMcsSet; } MLAN_PACK_END IEEEtypes_VHT_Operation_t; typedef MLAN_PACK_START struct { UINT8 chanWidth:2; UINT8 reserved:2; UINT8 rxNss:3; UINT8 rxNssType:1; } MLAN_PACK_END IEEEtypes_VHT_OpMode_t; typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; IEEEtypes_VHT_OpMode_t VhtOpMode; } MLAN_PACK_END IEEEtypes_VHT_OpModeNotification_t; typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; /** WideBW has same structure as VHT_OP_INFO*/ IEEEtypes_VHT_Op_Info_t wideBwCs; } MLAN_PACK_END IEEEtypes_WIde_BW_CS_t; typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; IEEEtypes_AId_t Aid; } MLAN_PACK_END IEEEtypes_AIDElement_t; /* ***************************************************************************** ** ** ** 802.11k RRM definitions ** ** ***************************************************************************** */ typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; /* First byte */ UINT8 LinkMeas:1; UINT8 NborRpt:1; UINT8 ParallelMeas:1; UINT8 RepeatMeas:1; UINT8 BcnPassiveMeas:1; UINT8 BcnActiveMeas:1; UINT8 BcnTableMeas:1; UINT8 BcnMeasRptCond:1; /* Second byte */ UINT8 FrameMeas:1; UINT8 ChanLoadMeas:1; UINT8 NoiseHistMeas:1; UINT8 StatsMeas:1; UINT8 LciMeas:1; UINT8 LciAzimuth:1; UINT8 TxStreamMeas:1; UINT8 TrigTxStreamMeas:1; /* Third byte */ UINT8 ApChanRpt:1; UINT8 RrmMib:1; UINT8 OpChanMaxMeas:3; UINT8 NonOpChanMaxMeas:3; /* Fourth byte */ UINT8 MeasPilot:3; UINT8 MeasPilotTxInfo:1; UINT8 NborRptTsfOffset:1; UINT8 RcpiMeas:1; UINT8 RsniMeas:1; UINT8 BssAvgAccessDelay:1; /* Fifth byte */ UINT8 BssAvailAdmCap:1; UINT8 AntennaInfo:1; UINT8 Reserved:6; } MLAN_PACK_END IEEEtypes_RrmEnabledCapabilities_t; typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; UINT8 RegulatoryClass; UINT8 ChannelList[1]; } MLAN_PACK_END IEEEtypes_ApChanRptElement_t; typedef enum { RPT_DTL_NO_FIX_OR_IE = 0, RPT_DTL_ALL_FIX_AND_REQ_IES = 1, RPT_DTL_ALL_FIX_AND_ALL_IES = 2, } IEEEtypes_ReportDetailLevel_e; typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; MLAN_PACK_START IEEEtypes_ReportDetailLevel_e MLAN_PACK_END RptDetailLevel; } MLAN_PACK_END IEEEtypes_ReportingDetailElement_t; typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; IEEEtypes_ElementId_e IeList[1]; } MLAN_PACK_END IEEEtypes_RequestElement_t; /* ***************************************************************************** ** ** ** 802.11d and 802.11j Country IE definitions ** ** ***************************************************************************** */ /** Regulatory Triplet component in the country IE */ typedef MLAN_PACK_START struct { UINT8 RegulatoryExtensionId; UINT8 RegulatoryClass; UINT8 CoverageClass; } MLAN_PACK_END IEEEtypes_RegulatoryTriplet_t; /** Subband Triplet component in the country IE */ typedef MLAN_PACK_START struct { UINT8 FirstChan; UINT8 NumChans; UINT8 MaxTxPower; } MLAN_PACK_END IEEEtypes_SubbandTriplet_t; /* Country Info Triplet union comprised of subband and potentially regulatory * triplets */ typedef MLAN_PACK_START union { UINT8 TripletIdentifier; IEEEtypes_SubbandTriplet_t Subband; IEEEtypes_RegulatoryTriplet_t Regulatory; } MLAN_PACK_END IEEEtypes_CountryInfoTriplet_t; typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; UINT8 CountryCode[IEEEtypes_COUNTRY_CODE_SIZE]; IEEEtypes_CountryInfoTriplet_t Triplets[IEEEtypes_COUNTRY_MAX_TRIPLETS]; } MLAN_PACK_END IEEEtypes_CountryInfoElement_t; /* ***************************************************************************** ** ** ** 802.11h TPC definitions ** ** ***************************************************************************** */ /* ** Power Constraint IE - for 802.11h TPC. Specifies a Local ** Power Constraint in a channel. */ typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; UINT8 localConstraint; } MLAN_PACK_END IEEEtypes_PowerConstraintElement_t; /* ** Power Capability IE - for 802.11h TPC. Specifies the ** min and max power the station is capable of transmitting with. */ typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; UINT8 minTxPwr; UINT8 maxTxPwr; } MLAN_PACK_END IEEEtypes_PowerCapabilityElement_t; /* ** 802.11h TPC Request IE - used for requesting a peer station ** to send Tx power and Link Margin. */ typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; } MLAN_PACK_END IEEEtypes_TPCRequestElement_t; typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; UINT8 TxPwr; UINT8 LinkMargin; } MLAN_PACK_END IEEEtypes_TPCReportElement_t; #define WIFI_TPCRPT_OUI_SUBTYPE 0x08 typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; UINT8 OuiType[4]; /* 00:50:f2:08 */ UINT8 OuiSubType; UINT8 TxPwr; UINT8 LinkMargin; } MLAN_PACK_END IEEEtypes_WiFi_TPCReportElement_t; /* ***************************************************************************** ** ** ** 802.11h DFS definitions ** ** ***************************************************************************** */ typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; UINT8 ChannelSwitchMode; UINT8 ChannelNumber; UINT8 ChannelSwitchCount; } MLAN_PACK_END IEEEtypes_ChannelSwitchElement_t; typedef MLAN_PACK_START struct { UINT8 BSS:1; UINT8 OFDM_Preamble:1; UINT8 Unidentified:1; UINT8 Radar:1; UINT8 Unmeasured:1; UINT8 Reserved:3; } MLAN_PACK_END IEEEtypes_DFS_Map_t; typedef MLAN_PACK_START struct { UINT8 ChannelNumber; IEEEtypes_DFS_Map_t DFS_Map; } MLAN_PACK_END IEEEtypes_ChannelMap_t; #define MAX_NUMBER_OF_DFS_CHANNELS 25 typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; IEEEtypes_MacAddr_t DFS_Owner; UINT8 DFS_Recovery_Interval; /* For the channels in .11a */ IEEEtypes_ChannelMap_t Channel_Map[MAX_NUMBER_OF_DFS_CHANNELS]; } MLAN_PACK_END IEEEtypes_IbssDfsElement_t; typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; UINT8 QuietCount; UINT8 QuietPeriod; UINT16 QuietDuration; UINT16 QuietOffset; } MLAN_PACK_END IEEEtypes_QuietElement_t; typedef MLAN_PACK_START struct { UINT8 FirstChannelNumber; UINT8 NumberOfChannels; } MLAN_PACK_END ChannelsTuple_t; #define MAX_CHANNEL_TUPLES 20 typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; ChannelsTuple_t ChannelTuple[MAX_CHANNEL_TUPLES]; } MLAN_PACK_END IEEEtypes_SupportedChannelsElement_t; typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; UINT8 currRegClass; UINT8 suppRegClass; } MLAN_PACK_END IEEEtypes_SupportedRegClasses_t; /* ***************************************************************************** ** ** ** 802.11y definitions ** ** ***************************************************************************** */ typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; UINT8 ChannelSwitchMode; UINT8 RegClass; UINT8 ChannelNumber; UINT8 ChannelSwitchCount; } MLAN_PACK_END IEEEtypes_ExtChannelSwitchElement_t; /* ***************************************************************************** ** ** ** 802.11e definitions ** ** ***************************************************************************** */ typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; UINT16 StaCount; UINT8 ChnlUtil; UINT16 AdmCap; } MLAN_PACK_END IEEEtypes_BSSLoadElement_t; /* ***************************************************************************** ** ** ** 802.11i and WPA definitions ** ** ***************************************************************************** */ typedef enum { IEEEtypes_RSN_AUTH_KEY_SUITE_RSVD = 0, IEEEtypes_RSN_AUTH_KEY_SUITE_8021X = 1, IEEEtypes_RSN_AUTH_KEY_SUITE_PSK = 2, IEEEtypes_AKM_SUITE_FT_1X = 3, IEEEtypes_AKM_SUITE_FT_PSK = 4, IEEEtypes_AKM_SUITE_1X_SHA256 = 5, IEEEtypes_AKM_SUITE_PSK_SHA256 = 6 } IEEEtypes_RSN_Auth_Key_Suite; /* Cipher Suite Selector */ typedef enum { IEEEtypes_RSN_CIPHER_SUITE_NONE = 0, IEEEtypes_RSN_CIPHER_SUITE_WEP40, IEEEtypes_RSN_CIPHER_SUITE_TKIP, IEEEtypes_RSN_CIPHER_SUITE_WRAP, IEEEtypes_RSN_CIPHER_SUITE_CCMP, IEEEtypes_RSN_CIPHER_SUITE_WEP104 } IEEEtypes_RSN_Cipher_Suite; typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; UINT8 OuiType[4]; /* 00:50:f2:01 */ UINT16 Ver; UINT8 GrpKeyCipher[4]; UINT16 PwsKeyCnt; UINT8 PwsKeyCipherList[4]; UINT16 AuthKeyCnt; UINT8 AuthKeyList[4]; } MLAN_PACK_END IEEEtypes_WPAElement_t; typedef MLAN_PACK_START struct { UINT8 PreAuth:1; /* B0 */ UINT8 NoPairwise:1; UINT8 PtksaReplayCtr:2; UINT8 GtksaReplayCtr:2; UINT8 MFPR:1; UINT8 MFPC:1; UINT8 Reserved_8:1; /* B8 */ UINT8 PeerkeyEnabled:1; UINT8 SppAmsduCap:1; UINT8 SppAmsduReq:1; UINT8 PBAC:1; UINT8 Reserved_13_15:3; } MLAN_PACK_END IEEEtypes_RSNCapability_t; typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; /* All elements after Ver field are optional per the spec. ** ** - AuthKeyList and PwsKeyCipherList can have multiple elements so ** static parsing of this structure is not possible. ** ** - RsnCap, PMKIDCnt/List, and GrpMgmtCipher are often not included ** ** - If any optional element is included, all preceding elements must ** also be included. Once an optional element is not inserted, the ** IE construction ends. (i.e. RsnCap must be included if PMKIDCnt/List ** is needed). */ UINT16 Ver; UINT8 GrpKeyCipher[4]; UINT16 PwsKeyCnt; UINT8 PwsKeyCipherList[4]; UINT16 AuthKeyCnt; UINT8 AuthKeyList[4]; IEEEtypes_RSNCapability_t RsnCap; UINT16 PMKIDCnt; UINT8 PMKIDList[16]; UINT8 GrpMgmtCipher[4]; } MLAN_PACK_END IEEEtypes_RSNElement_t; /* ***************************************************************************** ** ** ** 802.11r definitions ** ** ***************************************************************************** */ typedef MLAN_PACK_START struct { UINT8 FtOverBss:1; UINT8 FtOverAir:1; UINT8 Reserved:6; } MLAN_PACK_END IEEEtypes_FT_CapabilityPolicy_t; typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; UINT16 MobilityDomainId; IEEEtypes_FT_CapabilityPolicy_t FtCapPol; } MLAN_PACK_END IEEEtypes_MobilityDomainElement_t; typedef MLAN_PACK_START struct { UINT8 KeyId:2; UINT8 Reserved1:6; UINT8 Reserved2:8; } MLAN_PACK_END IEEEtypes_GtkKeyInfo_t; typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; IEEEtypes_GtkKeyInfo_t KeyInfo; UINT8 KeyLen; UINT8 RSC[8]; UINT8 Key[32]; /* Variable length from 5 to 32 */ } IEEEtypes_GtkElement_t; typedef MLAN_PACK_START struct { UINT8 Reserved; UINT8 InfoElementCount; } MLAN_PACK_END IEEEtypes_FT_MICControl_t; #define FTIE_MIC_LEN 16 typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; IEEEtypes_FT_MICControl_t MicControl; UINT8 MIC[FTIE_MIC_LEN]; UINT8 ANonce[32]; UINT8 SNonce[32]; UINT8 SubElem[1]; } MLAN_PACK_END IEEEtypes_FastBssTransElement_t; typedef MLAN_PACK_START enum { TI_TYPE_RESERVED = 0, TI_TYPE_REASSOC_DEADLINE_TUS = 1, TI_TYPE_KEY_LIFETIME_SECS = 2, TI_TYPE_ASSOCIATION_COMEBACK_TIME = 3, } IEEEtypes_TimeoutInterval_e; typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; IEEEtypes_TimeoutInterval_e TimeoutIntervalType; UINT32 TimeoutInterval; } MLAN_PACK_END IEEEtypes_TimeoutIntervalElement_t; typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; UINT8 Identifier; UINT8 DescCount; IEEEtypes_StatusCode_t StatusCode; } MLAN_PACK_END IEEEtypes_RICDataElement_t; typedef MLAN_PACK_START enum { RIC_RESOURCE_BLOCK_ACK = 1, } MLAN_PACK_END IEEEtypes_RICResource_e; typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; IEEEtypes_RICResource_e ResourceType; UINT8 Data[1]; } MLAN_PACK_END IEEEtypes_RICDescElement_t; /* ***************************************************************************** ** ** ** 802.11w definitions ** ** ***************************************************************************** */ #define MMIE_MIC_LEN 8 typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; UINT8 KeyId[2]; UINT8 IPN[6]; UINT8 MIC[MMIE_MIC_LEN]; } MLAN_PACK_END IEEEtypes_ManagementMICElement_t; /* ***************************************************************************** ** ** ** Management Frame Bodies ** ** ***************************************************************************** */ /* ** The parameter set relevant to the PHY */ typedef MLAN_PACK_START union { IEEEtypes_FhParamElement_t FhParamSet; IEEEtypes_DsParamElement_t DsParamSet; } MLAN_PACK_END IEEEtypes_PhyParamElement_t; /* ** Service set parameters - for a BSS supporting, PCF, the ** CF parameter set is used; for an independent BSS, the IBSS ** parameter set is used. */ typedef MLAN_PACK_START union { IEEEtypes_CfParamElement_t CfParamSet; IEEEtypes_IbssParamElement_t IbssParamSet; } MLAN_PACK_END IEEEtypes_SsParamElement_t; typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; IEEEtypes_DataRate_t Rates[IEEEtypes_MAX_DATA_RATES]; } MLAN_PACK_END IEEEtypes_ExtSuppRatesElement_t; typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; MLAN_PACK_START union { MLAN_PACK_START struct { UINT8 NonERPPresent:1; UINT8 UseProtection:1; UINT8 BarkerPreamble:1; UINT8 Reserved:5; } bf; UINT8 erpInfo; } u; } MLAN_PACK_END IEEEtypes_ERPInfoElement_t; #define IEEEtypes_BCN_FIXED_FIELD_SZ (sizeof(IEEEtypes_TimeStamp_t) \ + sizeof(IEEEtypes_BcnInterval_t) \ + sizeof(IEEEtypes_CapInfo_t)) typedef MLAN_PACK_START struct { IEEEtypes_TimeStamp_t TimeStamp; IEEEtypes_BcnInterval_t BcnInterval; IEEEtypes_CapInfo_t CapInfo; IEEEtypes_SsIdElement_t SsId; IEEEtypes_SuppRatesElement_t SuppRates; IEEEtypes_PhyParamElement_t PhyParamSet; IEEEtypes_SsParamElement_t SsParamSet; IEEEtypes_TimElement_t Tim; IEEEtypes_ERPInfoElement_t ERPInfo; IEEEtypes_ExtSuppRatesElement_t ExtSuppRates; } MLAN_PACK_END IEEEtypes_Bcn_t; typedef MLAN_PACK_START struct { IEEEtypes_ReasonCode_t ReasonCode; } MLAN_PACK_END IEEEtypes_DisAssoc_t; typedef MLAN_PACK_START struct { IEEEtypes_CapInfo_t CapInfo; IEEEtypes_ListenInterval_t ListenInterval; UINT8 IEBuffer[1]; } MLAN_PACK_END IEEEtypes_AssocRqst_t; typedef MLAN_PACK_START struct { IEEEtypes_CapInfo_t CapInfo; IEEEtypes_StatusCode_t StatusCode; IEEEtypes_AId_t AId; } MLAN_PACK_END IEEEtypes_AssocRsp_t; typedef MLAN_PACK_START struct { IEEEtypes_CapInfo_t CapInfo; IEEEtypes_ListenInterval_t ListenInterval; IEEEtypes_MacAddr_t CurrentApAddr; UINT8 IEBuffer[1]; } MLAN_PACK_END IEEEtypes_ReAssocRqst_t; typedef MLAN_PACK_START struct { IEEEtypes_CapInfo_t CapInfo; IEEEtypes_StatusCode_t StatusCode; IEEEtypes_AId_t AId; } MLAN_PACK_END IEEEtypes_ReAssocRsp_t; typedef MLAN_PACK_START struct { IEEEtypes_SsIdElement_t SsId; IEEEtypes_SuppRatesElement_t SuppRates; IEEEtypes_ExtSuppRatesElement_t ExtSuppRates; } MLAN_PACK_END IEEEtypes_ProbeRqst_t; typedef MLAN_PACK_START struct { IEEEtypes_TimeStamp_t TimeStamp; IEEEtypes_BcnInterval_t BcnInterval; IEEEtypes_CapInfo_t CapInfo; IEEEtypes_SsIdElement_t SsId; IEEEtypes_SuppRatesElement_t SuppRates; IEEEtypes_PhyParamElement_t PhyParamSet; IEEEtypes_SsParamElement_t SsParamSet; IEEEtypes_TimElement_t Tim; IEEEtypes_ERPInfoElement_t ERPInfo; IEEEtypes_ExtSuppRatesElement_t ExtSuppRates; } MLAN_PACK_END IEEEtypes_ProbeRsp_t; typedef MLAN_PACK_START struct { IEEEtypes_AuthAlg_t AuthAlg; IEEEtypes_AuthTransSeq_t AuthTransSeq; IEEEtypes_StatusCode_t StatusCode; IEEEtypes_ChallengeText_t ChallengeText; } MLAN_PACK_END IEEEtypes_Auth_t; typedef MLAN_PACK_START struct { IEEEtypes_ReasonCode_t ReasonCode; } MLAN_PACK_END IEEEtypes_Deauth_t; /*---------------------------------------------------------------------------*/ /* IEEE 802.11 MLME SAP Interface Data Structures */ /* */ /* According to IEEE 802.11, services are provided by the MLME to the SME. */ /* In the current architecture, the services are provided to the SME by the */ /* MAC Management Service Task. This section describes data structures */ /* needed for these services. */ /*---------------------------------------------------------------------------*/ /* ** BSS Description Set ** ** A description of a BSS, providing the following: ** BssId: The ID of the BSS ** SsId: The SSID of the BSS ** BssType: The type of the BSS (INFRASTRUCTURE or INDEPENDENT) ** BcnPeriod: The beacon period (in time units) ** DtimPeriod: The DTIM period (in beacon periods) ** Tstamp: Timestamp of a received frame from the BSS; this is an 8 ** byte string from a probe response or beacon ** StartTs: The value of a station's timing synchronization function ** at the start of reception of the first octet of the ** timestamp field of a received frame (probe response or ** beacon) from a BSS; this is an 8 byte string ** PhyParamSet: The parameter set relevant to the PHY (empty if not ** needed by the PHY) ** SsParamSet: The service set parameters. These can consist of either ** the parameter set for CF periods or for an IBSS. ** Cap: The advertised capabilities of the BSS ** DataRates: The set of data rates that must be supported by all ** stations (the BSS basic rate set) */ typedef MLAN_PACK_START struct { IEEEtypes_MacAddr_t BssId; IEEEtypes_SsId_t SsId; IEEEtypes_Bss_e BssType; IEEEtypes_BcnInterval_t BcnPeriod; IEEEtypes_DtimPeriod_t DtimPeriod; IEEEtypes_TimeStamp_t Tstamp; IEEEtypes_TimeStamp_t StartTs; IEEEtypes_PhyParamElement_t PhyParamSet; IEEEtypes_SsParamElement_t SsParamSet; IEEEtypes_CapInfo_t Cap; IEEEtypes_DataRate_t DataRates[IEEEtypes_MAX_DATA_RATES_G]; /* ** DO NOT ADD ANY FIELDS TO THIS STRUCTURE. It is used in the middle of ** the adhoc join command. Any changes will shift the binary layout ** of the following fields in the command from the driver */ } MLAN_PACK_END IEEEtypes_BssDesc_t; typedef enum { Band_2_4_GHz = 0, Band_5_GHz = 1, Band_4_GHz = 2, } ChanBand_e; #define NUM_CHAN_BAND_ENUMS 3 typedef enum { ChanWidth_20_MHz = 0, ChanWidth_10_MHz = 1, ChanWidth_40_MHz = 2, ChanWidth_80_MHz = 3, } ChanWidth_e; typedef enum { SECONDARY_CHAN_NONE = 0, SECONDARY_CHAN_ABOVE = 1, SECONDARY_CHAN_BELOW = 3, //reserved 2, 4~255 } Chan2Offset_e; typedef enum { MANUAL_MODE = 0, ACS_MODE = 1, } ScanMode_e; typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; UINT8 chan2Offset; } MLAN_PACK_END IEEEtypes_SecondaryChannelOffset_t; /* This struct is used in ROM and existing fields should not be changed. */ typedef MLAN_PACK_START struct { ChanBand_e chanBand:2; ChanWidth_e chanWidth:2; Chan2Offset_e chan2Offset:2; ScanMode_e scanMode:2; } MLAN_PACK_END BandConfig_t; #define MASK_SCAN_MODE(pBandConfig) (*(UINT8*)(pBandConfig) &= 0x3f) #define BC_2_4_GHZ {Band_2_4_GHz, ChanWidth_20_MHz, SECONDARY_CHAN_NONE, MANUAL_MODE} #define BC_5_GHZ {Band_5_GHz, ChanWidth_20_MHz, SECONDARY_CHAN_NONE, MANUAL_MODE} typedef MLAN_PACK_START struct { BandConfig_t bandConfig; UINT8 chanNum; } MLAN_PACK_END ChanBandInfo_t; typedef MLAN_PACK_START struct { UINT8 passiveScan:1; UINT8 disableChanFilt:1; UINT8 multiDomainScan:1; UINT8 rspTimeoutEn:1; UINT8 hiddenSsidReport:1; UINT8 firstScanCmd:1; UINT8 reserved_6_7:2; } MLAN_PACK_END ChanScanMode_t; typedef MLAN_PACK_START struct { BandConfig_t bandConfig; UINT8 chanNum; ChanScanMode_t scanMode; UINT16 minScanTime; // unused - not removed since shared with // host UINT16 maxScanTime; } MLAN_PACK_END channelInfo_t; /* ** Join request message from the SME to establish synchronization with ** a BSS */ typedef MLAN_PACK_START struct { IEEEtypes_BssDesc_t BssDesc; #ifdef OLD_DFS IEEEtypes_QuietElement_t Quiet_Element; IEEEtypes_IbssDfsElement_t IBSS_DFS_Element; #endif channelInfo_t JoinChannel; UINT8 *pIeBuf; UINT16 ieBufLen; } MLAN_PACK_END IEEEtypes_JoinCmd_t; /* ** Join confirm message sent from the MLME as a result of a join request; ** it reports the result of the join */ typedef MLAN_PACK_START struct { IEEEtypes_JoinResult_e Result; } MLAN_PACK_END IEEEtypes_JoinCfrm_t; /* ** Authenticate request message sent from the SME to establish ** authentication with a specified peer MAC entity */ typedef MLAN_PACK_START struct { IEEEtypes_MacAddr_t PeerStaAddr; IEEEtypes_AuthType_e AuthType; IEEEtypes_AuthTransSeq_t AuthTransSeq; } MLAN_PACK_END IEEEtypes_AuthCmd_t; /* ** Authenticate confirm message sent from the MLME as a result of an ** authenticate request; it reports the result of the authentication */ typedef MLAN_PACK_START struct { IEEEtypes_MacAddr_t PeerStaAddr; IEEEtypes_AuthType_e AuthType; IEEEtypes_AuthResult_e Result; } MLAN_PACK_END IEEEtypes_AuthCfrm_t; /* ** Authenticate indication message sent from the MLME to report ** authentication with a peer MAC entity that resulted from an ** authentication procedure that was initiated by that MAC entity */ typedef MLAN_PACK_START struct { IEEEtypes_MacAddr_t PeerStaAddr; IEEEtypes_AuthType_e AuthType; } MLAN_PACK_END IEEEtypes_AuthInd_t; /* ** Deauthenticate request message sent from the SME to invalidate ** authentication with a specified peer MAC entity */ typedef MLAN_PACK_START struct { IEEEtypes_MacAddr_t PeerStaAddr; channelInfo_t DeauthChanInfo; IEEEtypes_ReasonCode_t Reason; } MLAN_PACK_END IEEEtypes_DeauthCmd_t; /* ** Deauthenticate confirm message sent from the MLME as a result of a ** deauthenticate request message; it reports the result of the ** deauthentication */ typedef MLAN_PACK_START struct { IEEEtypes_MacAddr_t PeerStaAddr; IEEEtypes_DeauthResult_e Result; } MLAN_PACK_END IEEEtypes_DeauthCfrm_t; /* ** Deauthentication indication message sent from the MLME to report ** invalidation of an authentication with a peer MAC entity; the message ** is generated as a result of an invalidation of the authentication */ typedef MLAN_PACK_START struct { IEEEtypes_MacAddr_t PeerStaAddr; IEEEtypes_ReasonCode_t Reason; } MLAN_PACK_END IEEEtypes_DeauthInd_t; /* ** Internal Association command constructed from the TLV based host ** command struct */ typedef struct { IEEEtypes_MacAddr_t PeerStaAddr; IEEEtypes_CapInfo_t CapInfo; IEEEtypes_ListenInterval_t ListenInterval; IEEEtypes_SsId_t SsId; IEEEtypes_DataRate_t RateSet[IEEEtypes_MAX_DATA_RATES_G]; UINT8 *pIeBuf; UINT16 ieBufLen; } IEEEtypes_AssocCmd_t; /* ** Association confirm message sent from the MLME as a result of an ** association request message; it reports the result of the assoication */ typedef MLAN_PACK_START struct { IEEEtypes_AssocResult_e Result; IEEEtypes_AssocCmdFailurePoint_e FailurePoint; } MLAN_PACK_END IEEEtypes_AssocCfrm_t; /* ** Disassociate request message sent from the SME to establish ** disassociation with an AP */ typedef MLAN_PACK_START struct { IEEEtypes_MacAddr_t PeerStaAddr; IEEEtypes_ReasonCode_t Reason; } MLAN_PACK_END IEEEtypes_DisassocCmd_t; /* ** Disassociate confirm message sent from the MLME as a result of a ** disassociate request message; it reports the result of the ** disassociation */ typedef MLAN_PACK_START struct { IEEEtypes_DisassocResult_e Result; } MLAN_PACK_END IEEEtypes_DisassocCfrm_t; /* ** Disassociate indication message sent from the MLME to report the ** invalidation of an association relationship with a peer MAC entity; ** the message is generated as a result of an invalidation of an ** association relationship */ typedef MLAN_PACK_START struct { IEEEtypes_MacAddr_t PeerStaAddr; IEEEtypes_ReasonCode_t Reason; } MLAN_PACK_END IEEEtypes_DisassocInd_t; typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; IEEEtypes_MacAddr_t MacAddr; } MLAN_PACK_END IEEEtypes_BssId_t; /* ** Start request message sent from the SME to start a new BSS; the BSS ** may be either an infrastructure BSS (with the MAC entity acting as the ** AP) or an independent BSS (with the MAC entity acting as the first ** station in the IBSS) */ typedef MLAN_PACK_START struct { IEEEtypes_SsId_t SsId; IEEEtypes_Bss_e BssType; IEEEtypes_BcnInterval_t BcnPeriod; IEEEtypes_DtimPeriod_t DtimPeriod; IEEEtypes_SsParamElement_t SsParamSet; IEEEtypes_PhyParamElement_t PhyParamSet; UINT16 Reserved; IEEEtypes_CapInfo_t CapInfo; IEEEtypes_DataRate_t OpRateSet[IEEEtypes_MAX_DATA_RATES_G]; #ifdef OLD_DFS IEEEtypes_QuietElement_t Quiet_Element; IEEEtypes_IbssDfsElement_t IBSS_DFS_Element; #endif channelInfo_t JoinChannel; UINT8 *pIeBuf; UINT16 ieBufLen; IEEEtypes_BssId_t BssId; } MLAN_PACK_END IEEEtypes_StartCmd_t; /* ** Start confirm message sent from the MLME as a result of a start request ** message; it reports the results of the BSS creation procedure */ typedef MLAN_PACK_START struct { IEEEtypes_StartResult_e Result; } MLAN_PACK_END IEEEtypes_StartCfrm_t; typedef MLAN_PACK_START struct { IEEEtypes_MacAddr_t PeerStaAddr; } MLAN_PACK_END IEEEtypes_TPCAdaptCmd_t; typedef MLAN_PACK_START struct { IEEEtypes_TPCAdaptResult_e Result; } MLAN_PACK_END IEEEtypes_TPCAdaptCfrm_t; typedef struct { IEEEtypes_GenHdr_t Hdr; UINT8 Body[8]; } IEEEtypes_Frame_t; typedef MLAN_PACK_START struct { IEEEtypes_MacAddr_t da; IEEEtypes_MacAddr_t sa; UINT16 type; } MLAN_PACK_END ether_hdr_t; typedef MLAN_PACK_START struct { ether_hdr_t Hdr; UINT8 Body[1600 - 14]; } MLAN_PACK_END IEEEtypes_8023_Frame_t; typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElemId; IEEEtypes_Len_t Len; UINT8 Oui[4]; UINT8 Data[1]; } MLAN_PACK_END IEEEtypes_WPSElement_t; /*---------------------------------*/ /* IEEE 802.11 Management Messages */ /*---------------------------------*/ #define WMM_STATS_PKTS_HIST_BINS 7 typedef MLAN_PACK_START enum { AckPolicy_ImmediateAck = 0, AckPolicy_NoAck = 1, AckPolicy_ExplicitAck = 2, AckPolicy_BlockAck = 3, } MLAN_PACK_END IEEEtypes_AckPolicy_e; typedef MLAN_PACK_START struct { UINT16 userPriority:3; UINT16 reserved1:1; UINT16 eosp:1; IEEEtypes_AckPolicy_e ackPolicy:2; UINT16 amsdu:1; UINT16 reserved2:8; } MLAN_PACK_END IEEEtypes_QosCtl_t; typedef MLAN_PACK_START struct { UINT8 Version; UINT8 SourceIpAddr[4]; UINT8 DestIpAddr[4]; UINT8 SourcePort[2]; UINT8 DestPort[2]; UINT8 DSCP; UINT8 Protocol; UINT8 Reserved; } MLAN_PACK_END IEEEtypes_TCLAS_IPv4_t; typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; UINT8 UserPriority; UINT8 ClassifierType; UINT8 ClassifierMask; MLAN_PACK_START union { IEEEtypes_TCLAS_IPv4_t ipv4; } MLAN_PACK_END classifier; } MLAN_PACK_END IEEEtypes_TCLAS_t; typedef enum { AC_BE = 0x0, AC_BK, AC_VI, AC_VO, AC_MAX_TYPES } IEEEtypes_WMM_AC_e; #define WMM_MAX_TIDS 8 #define WMM_MAX_RX_PN_SUPPORTED 4 typedef MLAN_PACK_START struct { UINT8 Aifsn:4; UINT8 Acm:1; UINT8 Aci:2; UINT8 Rsvd1:1; } MLAN_PACK_END IEEEtypes_WMM_AC_ACI_AIFSN_t; typedef MLAN_PACK_START struct { UINT8 EcwMin:4; UINT8 EcwMax:4; } MLAN_PACK_END IEEEtypes_ECW_Min_Max_t; typedef MLAN_PACK_START struct { IEEEtypes_WMM_AC_ACI_AIFSN_t AciAifsn; IEEEtypes_ECW_Min_Max_t EcwMinMax; UINT16 TxopLimit; } MLAN_PACK_END IEEEtypes_WMM_AC_Parameters_t; typedef MLAN_PACK_START struct { UINT8 ParamSetCount:4; UINT8 Reserved1:3; UINT8 QosInfoUAPSD:1; } MLAN_PACK_END IEEEtypes_QAP_QOS_Info_t; typedef MLAN_PACK_START struct { UINT8 AC_VO:1; UINT8 AC_VI:1; UINT8 AC_BK:1; UINT8 AC_BE:1; UINT8 QAck:1; UINT8 MaxSP:2; UINT8 MoreDataAck:1; } MLAN_PACK_END IEEEtypes_QSTA_QOS_Info_t; typedef MLAN_PACK_START union { IEEEtypes_QAP_QOS_Info_t QAp; IEEEtypes_QSTA_QOS_Info_t QSta; } MLAN_PACK_END IEEEtypes_QOS_Info_t; //added for TDLS typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; IEEEtypes_QOS_Info_t QosInfo; } MLAN_PACK_END IEEEtypes_QOS_Capability_t; typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; UINT8 OuiType[4]; /* 00:50:f2:02 */ UINT8 OuiSubType; /* 01 */ UINT8 Version; IEEEtypes_QOS_Info_t QosInfo; UINT8 Reserved1; IEEEtypes_WMM_AC_Parameters_t AcParams[AC_MAX_TYPES]; } MLAN_PACK_END IEEEtypes_WMM_ParamElement_t; typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; UINT8 OuiType[4]; /* 00:50:f2:02 */ UINT8 OuiSubType; /* 00 */ UINT8 Version; IEEEtypes_QOS_Info_t QosInfo; } MLAN_PACK_END IEEEtypes_WMM_InfoElement_t; typedef MLAN_PACK_START enum { TSPEC_DIR_UPLINK = 0, TSPEC_DIR_DOWNLINK = 1, /* 2 is a reserved value */ TSPEC_DIR_BIDIRECT = 3, } MLAN_PACK_END IEEEtypes_WMM_TSPEC_TS_Info_Direction_e; typedef MLAN_PACK_START enum { TSPEC_PSB_LEGACY = 0, TSPEC_PSB_TRIG = 1, } MLAN_PACK_END IEEEtypes_WMM_TSPEC_TS_Info_PSB_e; typedef MLAN_PACK_START enum { /* 0 is reserved */ TSPEC_ACCESS_EDCA = 1, TSPEC_ACCESS_HCCA = 2, TSPEC_ACCESS_HEMM = 3, } MLAN_PACK_END IEEEtypes_WMM_TSPEC_TS_Info_AccessPolicy_e; typedef MLAN_PACK_START enum { TSPEC_ACKPOLICY_NORMAL = 0, TSPEC_ACKPOLICY_NOACK = 1, /* 2 is reserved */ TSPEC_ACKPOLICY_BLOCKACK = 3, } MLAN_PACK_END IEEEtypes_WMM_TSPEC_TS_Info_AckPolicy_e; typedef MLAN_PACK_START enum { TSPEC_TRAFFIC_APERIODIC = 0, TSPEC_TRAFFIC_PERIODIC = 1, } MLAN_PACK_END IEEEtypes_WMM_TSPEC_TS_TRAFFIC_TYPE_e; typedef MLAN_PACK_START struct { IEEEtypes_WMM_TSPEC_TS_TRAFFIC_TYPE_e TrafficType:1; UINT8 TID:4; //! Unique identifier IEEEtypes_WMM_TSPEC_TS_Info_Direction_e Direction:2; UINT8 acp_1:1; UINT8 acp_2:1; UINT8 Aggregation:1; IEEEtypes_WMM_TSPEC_TS_Info_PSB_e PSB:1; //! Legacy/Trigg UINT8 UserPriority:3; //! 802.1d User Priority IEEEtypes_WMM_TSPEC_TS_Info_AckPolicy_e AckPolicy:2; UINT8 tsinfo_0:8; } MLAN_PACK_END IEEEtypes_WMM_TSPEC_TS_Info_t; typedef MLAN_PACK_START struct { UINT16 Size:15; //! Nominal size in octets UINT16 Fixed:1; //! 1: Fixed size given in Size, 0: Var, size is nominal } MLAN_PACK_END IEEEtypes_WMM_TSPEC_NomMSDUSize_t; typedef MLAN_PACK_START struct { UINT16 Fractional:13; //! Fractional portion UINT16 Whole:3; //! Whole portion } MLAN_PACK_END IEEEtypes_WMM_TSPEC_SBWA; typedef MLAN_PACK_START struct { IEEEtypes_WMM_TSPEC_TS_Info_t TSInfo; IEEEtypes_WMM_TSPEC_NomMSDUSize_t NomMSDUSize; UINT16 MaximumMSDUSize; UINT32 MinServiceInterval; UINT32 MaxServiceInterval; UINT32 InactivityInterval; UINT32 SuspensionInterval; UINT32 ServiceStartTime; UINT32 MinimumDataRate; UINT32 MeanDataRate; UINT32 PeakDataRate; UINT32 MaxBurstSize; UINT32 DelayBound; UINT32 MinPHYRate; IEEEtypes_WMM_TSPEC_SBWA SurplusBWAllowance; UINT16 MediumTime; } MLAN_PACK_END IEEEtypes_WMM_TSPEC_Body_t; typedef MLAN_PACK_START struct { UINT8 ElementId; UINT8 Len; UINT8 OuiType[4]; /* 00:50:f2:02 */ UINT8 OuiSubType; /* 01 */ UINT8 Version; IEEEtypes_WMM_TSPEC_Body_t TspecBody; } MLAN_PACK_END IEEEtypes_WMM_TSPEC_t; typedef MLAN_PACK_START enum { TSPEC_ACTION_CODE_ADDTS_REQ = 0, TSPEC_ACTION_CODE_ADDTS_RSP = 1, TSPEC_ACTION_CODE_DELTS = 2, } MLAN_PACK_END IEEEtypes_WMM_Tspec_Action_e; typedef MLAN_PACK_START struct { IEEEtypes_ActionCategory_e category; IEEEtypes_WMM_Tspec_Action_e action; UINT8 dialogToken; } MLAN_PACK_END IEEEtypes_WMM_Tspec_Action_Base_Tspec_t; /* Allocate enough space for a V4 TCLASS + a small CCX or VendSpec IE */ #define WMM_TSPEC_EXTRA_IE_BUF_MAX (sizeof(IEEEtypes_TCLAS_t) + 6) typedef MLAN_PACK_START struct { IEEEtypes_WMM_Tspec_Action_Base_Tspec_t tspecAct; UINT8 statusCode; IEEEtypes_WMM_TSPEC_t tspecIE; /* Place holder for additional elements after the TSPEC */ UINT8 subElem[WMM_TSPEC_EXTRA_IE_BUF_MAX]; } MLAN_PACK_END IEEEtypes_Action_WMM_AddTsReq_t; typedef MLAN_PACK_START struct { IEEEtypes_WMM_Tspec_Action_Base_Tspec_t tspecAct; UINT8 statusCode; IEEEtypes_WMM_TSPEC_t tspecIE; /* Place holder for additional elements after the TSPEC */ UINT8 subElem[256]; } MLAN_PACK_END IEEEtypes_Action_WMM_AddTsRsp_t; typedef MLAN_PACK_START struct { IEEEtypes_WMM_Tspec_Action_Base_Tspec_t tspecAct; UINT8 reasonCode; IEEEtypes_WMM_TSPEC_t tspecIE; } MLAN_PACK_END IEEEtypes_Action_WMM_DelTs_t; typedef MLAN_PACK_START union { IEEEtypes_WMM_Tspec_Action_Base_Tspec_t tspecAct; IEEEtypes_Action_WMM_AddTsReq_t addTsReq; IEEEtypes_Action_WMM_AddTsRsp_t addTsRsp; IEEEtypes_Action_WMM_DelTs_t delTs; } MLAN_PACK_END IEEEtypes_Action_WMMAC_t; typedef MLAN_PACK_START struct { IEEEtypes_MgmtHdr_t Hdr; MLAN_PACK_START union { IEEEtypes_Bcn_t Bcn; IEEEtypes_DisAssoc_t DisAssoc; IEEEtypes_AssocRqst_t AssocRqst; IEEEtypes_AssocRsp_t AssocRsp; IEEEtypes_ReAssocRqst_t ReAssocRqst; IEEEtypes_ReAssocRsp_t ReAssocRsp; IEEEtypes_ProbeRqst_t ProbeRqst; IEEEtypes_ProbeRsp_t ProbeRsp; IEEEtypes_Auth_t Auth; IEEEtypes_Deauth_t Deauth; UINT8 BodyStart; } MLAN_PACK_END Body; UINT32 FCS; } MLAN_PACK_END dot11MgtFrame_t; #define FCS_SIZE (4) #define IV_SIZE (4) #define EIV_SIZE (4) #define MIC_SIZE (8) #define MIC_KEY_SIZE (8) #define ICV_SIZE (4) #define EXT_IV (0x20) #define IEEE80211_HEADER_SIZE (24) #define QOS_CTRL_SIZE (2) #define IEEE80211_QOSHEADER_SIZE (IEEE80211_HEADER_SIZE+QOS_CTRL_SIZE) #define MACHDR_n_FCS_SIZE (IEEE80211_HEADER_SIZE+FCS_SIZE) #define QOS_MACHDR_n_FCS_SIZE (IEEE80211_QOSHEADER_SIZE+FCS_SIZE) #define WEPOVERHEAD (IV_SIZE+ICV_SIZE) #define IEEE80211_SIFS_11b (10) /* us */ #define IEEE80211_SIFS_11g (IEEE80211_SIFS_11b) /* us */ #define IEEE80211_SIFS_11a (16) /* us */ #define IEEE80211b_SHORT_PREAM (96) /* us */ #define IEEE80211b_LONG_PREAM (192) /* us */ #define SIGNAL_EXTENSION (6) /* us */ #define TPREAMBLE (16) /* us */ #define TSIGNAL (4) /* us */ #define IEEE80211g_PREAM (TPREAMBLE+TSIGNAL) /* us */ #define IEEE80211a_PREAM (IEEE80211g_PREAM ) /* us */ #define IEEE80211n_PREAM (40) /* us */ #define IEEE80211ac_PREAM (40) /* us */ //TBD #define TSYM (4) /* us */ #define IEEE80211_BSS_CLOCK_PPM (100) // ppm enum { OTHER = 0x00, FCC = 0x10, IC = 0x20, ETSI = 0x30, SPAIN = 0x31, FRANCE = 0x32, JAPAN = 0x40, JAPAN1 = 0x41, CHINA = 0x50 }; typedef enum { RegDomain_Null = 0x00, RegDomain_FCC = 0x01, RegDomain_ETSI = 0x02, RegDomain_MIC = 0x03, RegDomain_Other = 0xFF, } RegDomain_e; #define IEEE_PHY_RATE_CODE_1Mbps (10) // it's the same as IEEE_PHY_RATE_CODE_12Mbps #define IEEE_PHY_RATE_CODE_2Mbps (20) #define IEEE_PHY_RATE_CODE_5_5Mbps (55) #define IEEE_PHY_RATE_CODE_11Mbps (110) #define IEEE_PHY_RATE_CODE_22Mbps (220) #define IEEE_PHY_RATE_CODE_6Mbps (0x0B) #define IEEE_PHY_RATE_CODE_9Mbps (0x0F) #define IEEE_PHY_RATE_CODE_12Mbps (0x0A) // it's the same as IEEE_PHY_RATE_CODE_1Mbps #define IEEE_PHY_RATE_CODE_18Mbps (0x0E) #define IEEE_PHY_RATE_CODE_24Mbps (0x09) #define IEEE_PHY_RATE_CODE_36Mbps (0x0D) #define IEEE_PHY_RATE_CODE_48Mbps (0x08) #define IEEE_PHY_RATE_CODE_54Mbps (0x0C) #define IEEE_PHY_RATE_CODE_72Mbps (0x07) #define IEEE_PHY_RATE_CODE_1Mbps (10) // it's the same as IEEE_PHY_RATE_CODE_12Mbps #define IEEE_PHY_RATE_CODE_2Mbps (20) #define IEEE_PHY_RATE_CODE_5_5Mbps (55) #define IEEE_PHY_RATE_CODE_11Mbps (110) #define IEEE_PHY_RATE_CODE_22Mbps (220) #define IEEE_PHY_RATE_CODE_6Mbps (0x0B) #define IEEE_PHY_RATE_CODE_9Mbps (0x0F) #define IEEE_PHY_RATE_CODE_12Mbps (0x0A) // it's the same as IEEE_PHY_RATE_CODE_1Mbps #define IEEE_PHY_RATE_CODE_18Mbps (0x0E) #define IEEE_PHY_RATE_CODE_24Mbps (0x09) #define IEEE_PHY_RATE_CODE_36Mbps (0x0D) #define IEEE_PHY_RATE_CODE_48Mbps (0x08) #define IEEE_PHY_RATE_CODE_54Mbps (0x0C) #define IEEE_PHY_RATE_CODE_72Mbps (0x07) #define IEEE_PHY_RATE_CODE_MCS0 (0x00) #define IEEE_PHY_RATE_CODE_MCS1 (0x01) #define IEEE_PHY_RATE_CODE_MCS2 (0x02) #define IEEE_PHY_RATE_CODE_MCS3 (0x03) #define IEEE_PHY_RATE_CODE_MCS4 (0x04) #define IEEE_PHY_RATE_CODE_MCS5 (0x05) #define IEEE_PHY_RATE_CODE_MCS6 (0x06) #define IEEE_PHY_RATE_CODE_MCS7 (0x07) #define IEEE_PHY_RATE_CODE_MCS8 (0x08) #define IEEE_PHY_RATE_CODE_MCS9 (0x09) #define IEEE_PHY_RATE_CODE_MCS10 (0x0A) #define IEEE_PHY_RATE_CODE_MCS11 (0x0B) #define IEEE_PHY_RATE_CODE_MCS12 (0x0C) #define IEEE_PHY_RATE_CODE_MCS13 (0x0D) #define IEEE_PHY_RATE_CODE_MCS14 (0x0E) #define IEEE_PHY_RATE_CODE_MCS15 (0x0F) #define IEEE_PHY_RATE_CODE_MCS32 (0x20) typedef enum { MOD_CLASS_INFRA = 1, MOD_CLASS_FHSS = 2, MOD_CLASS_HR_DSSS = 3, MOD_CLASS_ERP_PBCC = 4, MOD_CLASS_DSSS_OFDM = 5, MOD_CLASS_ERP_OFDM = 6, MOD_CLASS_OFDM = 7, MOD_CLASS_HT = 8, MOD_CLASS_VHT = 9, } MOD_CLASS_e; typedef enum { DSSS_1Mbps = 0 + (MOD_CLASS_HR_DSSS << 8), DSSS_2Mbps, DSSS_5d5Mbps, DSSS_11Mbps, } HR_DSSS_e; typedef enum { OFDM_6Mbps = 0 + (MOD_CLASS_OFDM << 8), OFDM_9Mbps, OFDM_12Mbps, OFDM_18Mbps, OFDM_24Mbps, OFDM_36Mbps, OFDM_48Mbps, OFDM_54Mbps, } OFDM_e; typedef enum { // 1x1 EM MCS_0 = 0 + (MOD_CLASS_HT << 8), MCS_1, MCS_2, MCS_3, MCS_4, MCS_5, MCS_6, MCS_7, // 2x2 EM MCS_8, MCS_9, MCS_10, MCS_11, MCS_12, MCS_13, MCS_14, MCS_15, // 3x3 EM MCS_16, MCS_17, MCS_18, MCS_19, MCS_20, MCS_21, MCS_22, MCS_23, // 4x4 EM MCS_24, MCS_25, MCS_26, MCS_27, MCS_28, MCS_29, MCS_30, MCS_31, // 1x1 EM 40MHz only MCS_32, // 2x2 UEM MCS_33, MCS_34, MCS_35, MCS_36, MCS_37, MCS_38, // 3x3 UEM MCS_39, MCS_40, MCS_41, MCS_42, MCS_43, MCS_44, MCS_45, MCS_46, MCS_47, MCS_48, MCS_49, MCS_50, MCS_51, MCS_52, // 4x4 UEM MCS_53, MCS_54, MCS_55, MCS_56, MCS_57, MCS_58, MCS_59, MCS_60, MCS_61, MCS_62, MCS_63, MCS_64, MCS_65, MCS_66, MCS_67, MCS_68, MCS_69, MCS_70, MCS_71, MCS_72, MCS_73, MCS_74, MCS_75, MCS_76, } MCS_e; typedef union { UINT16 u16; HR_DSSS_e dsss; OFDM_e ofdm; MCS_e mcs; } RATE_CODE_u; #define RATECODE_to_RATEID(x) (x & 0xff) #define IEEEtypes_STATUS_INVALID_INFO_ELEMENT 40 #define IEEEtypes_STATUS_INVALID_AKMP 43 #define IEEEtypes_STATUS_CIPHER_POLICY_REJECT 46 #define IEEEtypes_STATUS_INVALID_MCAST_CIPHER 47 #define IEEEtypes_STATUS_INVALID_UCAST_CIPHER 48 #define IEEEtypes_STATUS_UNSUPPORT_WAPI_VERSION 49 #define IEEEtypes_STATUS_INVALID_WAPI_CAPS 50 typedef MLAN_PACK_START struct { IEEEtypes_ElementId_e ElementId; IEEEtypes_Len_t Len; UINT8 Data[1]; } MLAN_PACK_END IEEEtypes_WAPIElement_t; #endif /* _IEEE_TYPES_H_ */