1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * NXP Wireless LAN device driver: Firmware specific macros & structures 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Copyright 2011-2020 NXP 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * This software file (the "File") is distributed by NXP 7*4882a593Smuzhiyun * under the terms of the GNU General Public License Version 2, June 1991 8*4882a593Smuzhiyun * (the "License"). You may use, redistribute and/or modify this File in 9*4882a593Smuzhiyun * accordance with the terms and conditions of the License, a copy of which 10*4882a593Smuzhiyun * is available by writing to the Free Software Foundation, Inc., 11*4882a593Smuzhiyun * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA or on the 12*4882a593Smuzhiyun * worldwide web at http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. 13*4882a593Smuzhiyun * 14*4882a593Smuzhiyun * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE 15*4882a593Smuzhiyun * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE 16*4882a593Smuzhiyun * ARE EXPRESSLY DISCLAIMED. The License provides additional details about 17*4882a593Smuzhiyun * this warranty disclaimer. 18*4882a593Smuzhiyun */ 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun #ifndef _MWIFIEX_FW_H_ 21*4882a593Smuzhiyun #define _MWIFIEX_FW_H_ 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun #include <linux/if_ether.h> 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun #define INTF_HEADER_LEN 4 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun struct rfc_1042_hdr { 29*4882a593Smuzhiyun u8 llc_dsap; 30*4882a593Smuzhiyun u8 llc_ssap; 31*4882a593Smuzhiyun u8 llc_ctrl; 32*4882a593Smuzhiyun u8 snap_oui[3]; 33*4882a593Smuzhiyun __be16 snap_type; 34*4882a593Smuzhiyun } __packed; 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun struct rx_packet_hdr { 37*4882a593Smuzhiyun struct ethhdr eth803_hdr; 38*4882a593Smuzhiyun struct rfc_1042_hdr rfc1042_hdr; 39*4882a593Smuzhiyun } __packed; 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun struct tx_packet_hdr { 42*4882a593Smuzhiyun struct ethhdr eth803_hdr; 43*4882a593Smuzhiyun struct rfc_1042_hdr rfc1042_hdr; 44*4882a593Smuzhiyun } __packed; 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun struct mwifiex_fw_header { 47*4882a593Smuzhiyun __le32 dnld_cmd; 48*4882a593Smuzhiyun __le32 base_addr; 49*4882a593Smuzhiyun __le32 data_length; 50*4882a593Smuzhiyun __le32 crc; 51*4882a593Smuzhiyun } __packed; 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun struct mwifiex_fw_data { 54*4882a593Smuzhiyun struct mwifiex_fw_header header; 55*4882a593Smuzhiyun __le32 seq_num; 56*4882a593Smuzhiyun u8 data[1]; 57*4882a593Smuzhiyun } __packed; 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun struct mwifiex_fw_dump_header { 60*4882a593Smuzhiyun __le16 seq_num; 61*4882a593Smuzhiyun __le16 reserved; 62*4882a593Smuzhiyun __le16 type; 63*4882a593Smuzhiyun __le16 len; 64*4882a593Smuzhiyun } __packed; 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun #define FW_DUMP_INFO_ENDED 0x0002 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun #define MWIFIEX_FW_DNLD_CMD_1 0x1 69*4882a593Smuzhiyun #define MWIFIEX_FW_DNLD_CMD_5 0x5 70*4882a593Smuzhiyun #define MWIFIEX_FW_DNLD_CMD_6 0x6 71*4882a593Smuzhiyun #define MWIFIEX_FW_DNLD_CMD_7 0x7 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun #define B_SUPPORTED_RATES 5 74*4882a593Smuzhiyun #define G_SUPPORTED_RATES 9 75*4882a593Smuzhiyun #define BG_SUPPORTED_RATES 13 76*4882a593Smuzhiyun #define A_SUPPORTED_RATES 9 77*4882a593Smuzhiyun #define HOSTCMD_SUPPORTED_RATES 14 78*4882a593Smuzhiyun #define N_SUPPORTED_RATES 3 79*4882a593Smuzhiyun #define ALL_802_11_BANDS (BAND_A | BAND_B | BAND_G | BAND_GN | \ 80*4882a593Smuzhiyun BAND_AN | BAND_AAC) 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun #define FW_MULTI_BANDS_SUPPORT (BIT(8) | BIT(9) | BIT(10) | BIT(11) | \ 83*4882a593Smuzhiyun BIT(13)) 84*4882a593Smuzhiyun #define IS_SUPPORT_MULTI_BANDS(adapter) \ 85*4882a593Smuzhiyun (adapter->fw_cap_info & FW_MULTI_BANDS_SUPPORT) 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun /* bit 13: 11ac BAND_AAC 88*4882a593Smuzhiyun * bit 12: reserved for lab testing, will be reused for BAND_AN 89*4882a593Smuzhiyun * bit 11: 11n BAND_GN 90*4882a593Smuzhiyun * bit 10: 11a BAND_A 91*4882a593Smuzhiyun * bit 9: 11g BAND_G 92*4882a593Smuzhiyun * bit 8: 11b BAND_B 93*4882a593Smuzhiyun * Map these bits to band capability by right shifting 8 bits. 94*4882a593Smuzhiyun */ 95*4882a593Smuzhiyun #define GET_FW_DEFAULT_BANDS(adapter) \ 96*4882a593Smuzhiyun (((adapter->fw_cap_info & 0x2f00) >> 8) & \ 97*4882a593Smuzhiyun ALL_802_11_BANDS) 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun #define HostCmd_WEP_KEY_INDEX_MASK 0x3fff 100*4882a593Smuzhiyun 101*4882a593Smuzhiyun #define KEY_INFO_ENABLED 0x01 102*4882a593Smuzhiyun enum KEY_TYPE_ID { 103*4882a593Smuzhiyun KEY_TYPE_ID_WEP = 0, 104*4882a593Smuzhiyun KEY_TYPE_ID_TKIP, 105*4882a593Smuzhiyun KEY_TYPE_ID_AES, 106*4882a593Smuzhiyun KEY_TYPE_ID_WAPI, 107*4882a593Smuzhiyun KEY_TYPE_ID_AES_CMAC, 108*4882a593Smuzhiyun KEY_TYPE_ID_AES_CMAC_DEF, 109*4882a593Smuzhiyun }; 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun #define WPA_PN_SIZE 8 112*4882a593Smuzhiyun #define KEY_PARAMS_FIXED_LEN 10 113*4882a593Smuzhiyun #define KEY_INDEX_MASK 0xf 114*4882a593Smuzhiyun #define KEY_API_VER_MAJOR_V2 2 115*4882a593Smuzhiyun 116*4882a593Smuzhiyun #define KEY_MCAST BIT(0) 117*4882a593Smuzhiyun #define KEY_UNICAST BIT(1) 118*4882a593Smuzhiyun #define KEY_ENABLED BIT(2) 119*4882a593Smuzhiyun #define KEY_DEFAULT BIT(3) 120*4882a593Smuzhiyun #define KEY_TX_KEY BIT(4) 121*4882a593Smuzhiyun #define KEY_RX_KEY BIT(5) 122*4882a593Smuzhiyun #define KEY_IGTK BIT(10) 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun #define WAPI_KEY_LEN (WLAN_KEY_LEN_SMS4 + PN_LEN + 2) 125*4882a593Smuzhiyun 126*4882a593Smuzhiyun #define MAX_POLL_TRIES 100 127*4882a593Smuzhiyun #define MAX_FIRMWARE_POLL_TRIES 150 128*4882a593Smuzhiyun 129*4882a593Smuzhiyun #define FIRMWARE_READY_SDIO 0xfedc 130*4882a593Smuzhiyun #define FIRMWARE_READY_PCIE 0xfedcba00 131*4882a593Smuzhiyun 132*4882a593Smuzhiyun #define MWIFIEX_COEX_MODE_TIMESHARE 0x01 133*4882a593Smuzhiyun #define MWIFIEX_COEX_MODE_SPATIAL 0x82 134*4882a593Smuzhiyun 135*4882a593Smuzhiyun enum mwifiex_usb_ep { 136*4882a593Smuzhiyun MWIFIEX_USB_EP_CMD_EVENT = 1, 137*4882a593Smuzhiyun MWIFIEX_USB_EP_DATA = 2, 138*4882a593Smuzhiyun MWIFIEX_USB_EP_DATA_CH2 = 3, 139*4882a593Smuzhiyun }; 140*4882a593Smuzhiyun 141*4882a593Smuzhiyun enum MWIFIEX_802_11_PRIVACY_FILTER { 142*4882a593Smuzhiyun MWIFIEX_802_11_PRIV_FILTER_ACCEPT_ALL, 143*4882a593Smuzhiyun MWIFIEX_802_11_PRIV_FILTER_8021X_WEP 144*4882a593Smuzhiyun }; 145*4882a593Smuzhiyun 146*4882a593Smuzhiyun #define CAL_SNR(RSSI, NF) ((s16)((s16)(RSSI)-(s16)(NF))) 147*4882a593Smuzhiyun #define CAL_RSSI(SNR, NF) ((s16)((s16)(SNR)+(s16)(NF))) 148*4882a593Smuzhiyun 149*4882a593Smuzhiyun #define UAP_BSS_PARAMS_I 0 150*4882a593Smuzhiyun #define UAP_CUSTOM_IE_I 1 151*4882a593Smuzhiyun #define MWIFIEX_AUTO_IDX_MASK 0xffff 152*4882a593Smuzhiyun #define MWIFIEX_DELETE_MASK 0x0000 153*4882a593Smuzhiyun #define MGMT_MASK_ASSOC_REQ 0x01 154*4882a593Smuzhiyun #define MGMT_MASK_REASSOC_REQ 0x04 155*4882a593Smuzhiyun #define MGMT_MASK_ASSOC_RESP 0x02 156*4882a593Smuzhiyun #define MGMT_MASK_REASSOC_RESP 0x08 157*4882a593Smuzhiyun #define MGMT_MASK_PROBE_REQ 0x10 158*4882a593Smuzhiyun #define MGMT_MASK_PROBE_RESP 0x20 159*4882a593Smuzhiyun #define MGMT_MASK_BEACON 0x100 160*4882a593Smuzhiyun 161*4882a593Smuzhiyun #define TLV_TYPE_UAP_SSID 0x0000 162*4882a593Smuzhiyun #define TLV_TYPE_UAP_RATES 0x0001 163*4882a593Smuzhiyun #define TLV_TYPE_PWR_CONSTRAINT 0x0020 164*4882a593Smuzhiyun 165*4882a593Smuzhiyun #define PROPRIETARY_TLV_BASE_ID 0x0100 166*4882a593Smuzhiyun #define TLV_TYPE_KEY_MATERIAL (PROPRIETARY_TLV_BASE_ID + 0) 167*4882a593Smuzhiyun #define TLV_TYPE_CHANLIST (PROPRIETARY_TLV_BASE_ID + 1) 168*4882a593Smuzhiyun #define TLV_TYPE_NUMPROBES (PROPRIETARY_TLV_BASE_ID + 2) 169*4882a593Smuzhiyun #define TLV_TYPE_RSSI_LOW (PROPRIETARY_TLV_BASE_ID + 4) 170*4882a593Smuzhiyun #define TLV_TYPE_PASSTHROUGH (PROPRIETARY_TLV_BASE_ID + 10) 171*4882a593Smuzhiyun #define TLV_TYPE_WMMQSTATUS (PROPRIETARY_TLV_BASE_ID + 16) 172*4882a593Smuzhiyun #define TLV_TYPE_WILDCARDSSID (PROPRIETARY_TLV_BASE_ID + 18) 173*4882a593Smuzhiyun #define TLV_TYPE_TSFTIMESTAMP (PROPRIETARY_TLV_BASE_ID + 19) 174*4882a593Smuzhiyun #define TLV_TYPE_RSSI_HIGH (PROPRIETARY_TLV_BASE_ID + 22) 175*4882a593Smuzhiyun #define TLV_TYPE_BGSCAN_START_LATER (PROPRIETARY_TLV_BASE_ID + 30) 176*4882a593Smuzhiyun #define TLV_TYPE_AUTH_TYPE (PROPRIETARY_TLV_BASE_ID + 31) 177*4882a593Smuzhiyun #define TLV_TYPE_STA_MAC_ADDR (PROPRIETARY_TLV_BASE_ID + 32) 178*4882a593Smuzhiyun #define TLV_TYPE_BSSID (PROPRIETARY_TLV_BASE_ID + 35) 179*4882a593Smuzhiyun #define TLV_TYPE_CHANNELBANDLIST (PROPRIETARY_TLV_BASE_ID + 42) 180*4882a593Smuzhiyun #define TLV_TYPE_UAP_BEACON_PERIOD (PROPRIETARY_TLV_BASE_ID + 44) 181*4882a593Smuzhiyun #define TLV_TYPE_UAP_DTIM_PERIOD (PROPRIETARY_TLV_BASE_ID + 45) 182*4882a593Smuzhiyun #define TLV_TYPE_UAP_BCAST_SSID (PROPRIETARY_TLV_BASE_ID + 48) 183*4882a593Smuzhiyun #define TLV_TYPE_UAP_RTS_THRESHOLD (PROPRIETARY_TLV_BASE_ID + 51) 184*4882a593Smuzhiyun #define TLV_TYPE_UAP_AO_TIMER (PROPRIETARY_TLV_BASE_ID + 57) 185*4882a593Smuzhiyun #define TLV_TYPE_UAP_WEP_KEY (PROPRIETARY_TLV_BASE_ID + 59) 186*4882a593Smuzhiyun #define TLV_TYPE_UAP_WPA_PASSPHRASE (PROPRIETARY_TLV_BASE_ID + 60) 187*4882a593Smuzhiyun #define TLV_TYPE_UAP_ENCRY_PROTOCOL (PROPRIETARY_TLV_BASE_ID + 64) 188*4882a593Smuzhiyun #define TLV_TYPE_UAP_AKMP (PROPRIETARY_TLV_BASE_ID + 65) 189*4882a593Smuzhiyun #define TLV_TYPE_UAP_FRAG_THRESHOLD (PROPRIETARY_TLV_BASE_ID + 70) 190*4882a593Smuzhiyun #define TLV_TYPE_RATE_DROP_CONTROL (PROPRIETARY_TLV_BASE_ID + 82) 191*4882a593Smuzhiyun #define TLV_TYPE_RATE_SCOPE (PROPRIETARY_TLV_BASE_ID + 83) 192*4882a593Smuzhiyun #define TLV_TYPE_POWER_GROUP (PROPRIETARY_TLV_BASE_ID + 84) 193*4882a593Smuzhiyun #define TLV_TYPE_BSS_SCAN_RSP (PROPRIETARY_TLV_BASE_ID + 86) 194*4882a593Smuzhiyun #define TLV_TYPE_BSS_SCAN_INFO (PROPRIETARY_TLV_BASE_ID + 87) 195*4882a593Smuzhiyun #define TLV_TYPE_CHANRPT_11H_BASIC (PROPRIETARY_TLV_BASE_ID + 91) 196*4882a593Smuzhiyun #define TLV_TYPE_UAP_RETRY_LIMIT (PROPRIETARY_TLV_BASE_ID + 93) 197*4882a593Smuzhiyun #define TLV_TYPE_WAPI_IE (PROPRIETARY_TLV_BASE_ID + 94) 198*4882a593Smuzhiyun #define TLV_TYPE_ROBUST_COEX (PROPRIETARY_TLV_BASE_ID + 96) 199*4882a593Smuzhiyun #define TLV_TYPE_UAP_MGMT_FRAME (PROPRIETARY_TLV_BASE_ID + 104) 200*4882a593Smuzhiyun #define TLV_TYPE_MGMT_IE (PROPRIETARY_TLV_BASE_ID + 105) 201*4882a593Smuzhiyun #define TLV_TYPE_AUTO_DS_PARAM (PROPRIETARY_TLV_BASE_ID + 113) 202*4882a593Smuzhiyun #define TLV_TYPE_PS_PARAM (PROPRIETARY_TLV_BASE_ID + 114) 203*4882a593Smuzhiyun #define TLV_TYPE_UAP_PS_AO_TIMER (PROPRIETARY_TLV_BASE_ID + 123) 204*4882a593Smuzhiyun #define TLV_TYPE_PWK_CIPHER (PROPRIETARY_TLV_BASE_ID + 145) 205*4882a593Smuzhiyun #define TLV_TYPE_GWK_CIPHER (PROPRIETARY_TLV_BASE_ID + 146) 206*4882a593Smuzhiyun #define TLV_TYPE_TX_PAUSE (PROPRIETARY_TLV_BASE_ID + 148) 207*4882a593Smuzhiyun #define TLV_TYPE_RXBA_SYNC (PROPRIETARY_TLV_BASE_ID + 153) 208*4882a593Smuzhiyun #define TLV_TYPE_COALESCE_RULE (PROPRIETARY_TLV_BASE_ID + 154) 209*4882a593Smuzhiyun #define TLV_TYPE_KEY_PARAM_V2 (PROPRIETARY_TLV_BASE_ID + 156) 210*4882a593Smuzhiyun #define TLV_TYPE_REPEAT_COUNT (PROPRIETARY_TLV_BASE_ID + 176) 211*4882a593Smuzhiyun #define TLV_TYPE_PS_PARAMS_IN_HS (PROPRIETARY_TLV_BASE_ID + 181) 212*4882a593Smuzhiyun #define TLV_TYPE_MULTI_CHAN_INFO (PROPRIETARY_TLV_BASE_ID + 183) 213*4882a593Smuzhiyun #define TLV_TYPE_MC_GROUP_INFO (PROPRIETARY_TLV_BASE_ID + 184) 214*4882a593Smuzhiyun #define TLV_TYPE_TDLS_IDLE_TIMEOUT (PROPRIETARY_TLV_BASE_ID + 194) 215*4882a593Smuzhiyun #define TLV_TYPE_SCAN_CHANNEL_GAP (PROPRIETARY_TLV_BASE_ID + 197) 216*4882a593Smuzhiyun #define TLV_TYPE_API_REV (PROPRIETARY_TLV_BASE_ID + 199) 217*4882a593Smuzhiyun #define TLV_TYPE_CHANNEL_STATS (PROPRIETARY_TLV_BASE_ID + 198) 218*4882a593Smuzhiyun #define TLV_BTCOEX_WL_AGGR_WINSIZE (PROPRIETARY_TLV_BASE_ID + 202) 219*4882a593Smuzhiyun #define TLV_BTCOEX_WL_SCANTIME (PROPRIETARY_TLV_BASE_ID + 203) 220*4882a593Smuzhiyun #define TLV_TYPE_BSS_MODE (PROPRIETARY_TLV_BASE_ID + 206) 221*4882a593Smuzhiyun #define TLV_TYPE_RANDOM_MAC (PROPRIETARY_TLV_BASE_ID + 236) 222*4882a593Smuzhiyun #define TLV_TYPE_CHAN_ATTR_CFG (PROPRIETARY_TLV_BASE_ID + 237) 223*4882a593Smuzhiyun #define TLV_TYPE_MAX_CONN (PROPRIETARY_TLV_BASE_ID + 279) 224*4882a593Smuzhiyun 225*4882a593Smuzhiyun #define MWIFIEX_TX_DATA_BUF_SIZE_2K 2048 226*4882a593Smuzhiyun 227*4882a593Smuzhiyun #define SSN_MASK 0xfff0 228*4882a593Smuzhiyun 229*4882a593Smuzhiyun #define BA_RESULT_SUCCESS 0x0 230*4882a593Smuzhiyun #define BA_RESULT_TIMEOUT 0x2 231*4882a593Smuzhiyun 232*4882a593Smuzhiyun #define IS_BASTREAM_SETUP(ptr) (ptr->ba_status) 233*4882a593Smuzhiyun 234*4882a593Smuzhiyun #define BA_STREAM_NOT_ALLOWED 0xff 235*4882a593Smuzhiyun 236*4882a593Smuzhiyun #define IS_11N_ENABLED(priv) ((priv->adapter->config_bands & BAND_GN || \ 237*4882a593Smuzhiyun priv->adapter->config_bands & BAND_AN) && \ 238*4882a593Smuzhiyun priv->curr_bss_params.bss_descriptor.bcn_ht_cap && \ 239*4882a593Smuzhiyun !priv->curr_bss_params.bss_descriptor.disable_11n) 240*4882a593Smuzhiyun #define INITIATOR_BIT(DelBAParamSet) (((DelBAParamSet) &\ 241*4882a593Smuzhiyun BIT(DELBA_INITIATOR_POS)) >> DELBA_INITIATOR_POS) 242*4882a593Smuzhiyun 243*4882a593Smuzhiyun #define MWIFIEX_TX_DATA_BUF_SIZE_4K 4096 244*4882a593Smuzhiyun #define MWIFIEX_TX_DATA_BUF_SIZE_8K 8192 245*4882a593Smuzhiyun #define MWIFIEX_TX_DATA_BUF_SIZE_12K 12288 246*4882a593Smuzhiyun 247*4882a593Smuzhiyun #define ISSUPP_11NENABLED(FwCapInfo) (FwCapInfo & BIT(11)) 248*4882a593Smuzhiyun #define ISSUPP_TDLS_ENABLED(FwCapInfo) (FwCapInfo & BIT(14)) 249*4882a593Smuzhiyun #define ISSUPP_DRCS_ENABLED(FwCapInfo) (FwCapInfo & BIT(15)) 250*4882a593Smuzhiyun #define ISSUPP_SDIO_SPA_ENABLED(FwCapInfo) (FwCapInfo & BIT(16)) 251*4882a593Smuzhiyun #define ISSUPP_ADHOC_ENABLED(FwCapInfo) (FwCapInfo & BIT(25)) 252*4882a593Smuzhiyun #define ISSUPP_RANDOM_MAC(FwCapInfo) (FwCapInfo & BIT(27)) 253*4882a593Smuzhiyun #define ISSUPP_FIRMWARE_SUPPLICANT(FwCapInfo) (FwCapInfo & BIT(21)) 254*4882a593Smuzhiyun 255*4882a593Smuzhiyun #define MWIFIEX_DEF_HT_CAP (IEEE80211_HT_CAP_DSSSCCK40 | \ 256*4882a593Smuzhiyun (1 << IEEE80211_HT_CAP_RX_STBC_SHIFT) | \ 257*4882a593Smuzhiyun IEEE80211_HT_CAP_SM_PS) 258*4882a593Smuzhiyun 259*4882a593Smuzhiyun #define MWIFIEX_DEF_11N_TX_BF_CAP 0x09E1E008 260*4882a593Smuzhiyun 261*4882a593Smuzhiyun #define MWIFIEX_DEF_AMPDU IEEE80211_HT_AMPDU_PARM_FACTOR 262*4882a593Smuzhiyun 263*4882a593Smuzhiyun /* dev_cap bitmap 264*4882a593Smuzhiyun * BIT 265*4882a593Smuzhiyun * 0-16 reserved 266*4882a593Smuzhiyun * 17 IEEE80211_HT_CAP_SUP_WIDTH_20_40 267*4882a593Smuzhiyun * 18-22 reserved 268*4882a593Smuzhiyun * 23 IEEE80211_HT_CAP_SGI_20 269*4882a593Smuzhiyun * 24 IEEE80211_HT_CAP_SGI_40 270*4882a593Smuzhiyun * 25 IEEE80211_HT_CAP_TX_STBC 271*4882a593Smuzhiyun * 26 IEEE80211_HT_CAP_RX_STBC 272*4882a593Smuzhiyun * 27-28 reserved 273*4882a593Smuzhiyun * 29 IEEE80211_HT_CAP_GRN_FLD 274*4882a593Smuzhiyun * 30-31 reserved 275*4882a593Smuzhiyun */ 276*4882a593Smuzhiyun #define ISSUPP_CHANWIDTH40(Dot11nDevCap) (Dot11nDevCap & BIT(17)) 277*4882a593Smuzhiyun #define ISSUPP_SHORTGI20(Dot11nDevCap) (Dot11nDevCap & BIT(23)) 278*4882a593Smuzhiyun #define ISSUPP_SHORTGI40(Dot11nDevCap) (Dot11nDevCap & BIT(24)) 279*4882a593Smuzhiyun #define ISSUPP_TXSTBC(Dot11nDevCap) (Dot11nDevCap & BIT(25)) 280*4882a593Smuzhiyun #define ISSUPP_RXSTBC(Dot11nDevCap) (Dot11nDevCap & BIT(26)) 281*4882a593Smuzhiyun #define ISSUPP_GREENFIELD(Dot11nDevCap) (Dot11nDevCap & BIT(29)) 282*4882a593Smuzhiyun #define ISENABLED_40MHZ_INTOLERANT(Dot11nDevCap) (Dot11nDevCap & BIT(8)) 283*4882a593Smuzhiyun #define ISSUPP_RXLDPC(Dot11nDevCap) (Dot11nDevCap & BIT(22)) 284*4882a593Smuzhiyun #define ISSUPP_BEAMFORMING(Dot11nDevCap) (Dot11nDevCap & BIT(30)) 285*4882a593Smuzhiyun #define ISALLOWED_CHANWIDTH40(ht_param) (ht_param & BIT(2)) 286*4882a593Smuzhiyun #define GETSUPP_TXBASTREAMS(Dot11nDevCap) ((Dot11nDevCap >> 18) & 0xF) 287*4882a593Smuzhiyun 288*4882a593Smuzhiyun /* httxcfg bitmap 289*4882a593Smuzhiyun * 0 reserved 290*4882a593Smuzhiyun * 1 20/40 Mhz enable(1)/disable(0) 291*4882a593Smuzhiyun * 2-3 reserved 292*4882a593Smuzhiyun * 4 green field enable(1)/disable(0) 293*4882a593Smuzhiyun * 5 short GI in 20 Mhz enable(1)/disable(0) 294*4882a593Smuzhiyun * 6 short GI in 40 Mhz enable(1)/disable(0) 295*4882a593Smuzhiyun * 7-15 reserved 296*4882a593Smuzhiyun */ 297*4882a593Smuzhiyun #define MWIFIEX_FW_DEF_HTTXCFG (BIT(1) | BIT(4) | BIT(5) | BIT(6)) 298*4882a593Smuzhiyun 299*4882a593Smuzhiyun /* 11AC Tx and Rx MCS map for 1x1 mode: 300*4882a593Smuzhiyun * IEEE80211_VHT_MCS_SUPPORT_0_9 for stream 1 301*4882a593Smuzhiyun * IEEE80211_VHT_MCS_NOT_SUPPORTED for remaining 7 streams 302*4882a593Smuzhiyun */ 303*4882a593Smuzhiyun #define MWIFIEX_11AC_MCS_MAP_1X1 0xfffefffe 304*4882a593Smuzhiyun 305*4882a593Smuzhiyun /* 11AC Tx and Rx MCS map for 2x2 mode: 306*4882a593Smuzhiyun * IEEE80211_VHT_MCS_SUPPORT_0_9 for stream 1 and 2 307*4882a593Smuzhiyun * IEEE80211_VHT_MCS_NOT_SUPPORTED for remaining 6 streams 308*4882a593Smuzhiyun */ 309*4882a593Smuzhiyun #define MWIFIEX_11AC_MCS_MAP_2X2 0xfffafffa 310*4882a593Smuzhiyun 311*4882a593Smuzhiyun #define GET_RXMCSSUPP(DevMCSSupported) (DevMCSSupported & 0x0f) 312*4882a593Smuzhiyun #define SETHT_MCS32(x) (x[4] |= 1) 313*4882a593Smuzhiyun #define HT_STREAM_1X1 0x11 314*4882a593Smuzhiyun #define HT_STREAM_2X2 0x22 315*4882a593Smuzhiyun 316*4882a593Smuzhiyun #define SET_SECONDARYCHAN(RadioType, SECCHAN) (RadioType |= (SECCHAN << 4)) 317*4882a593Smuzhiyun 318*4882a593Smuzhiyun #define LLC_SNAP_LEN 8 319*4882a593Smuzhiyun 320*4882a593Smuzhiyun /* HW_SPEC fw_cap_info */ 321*4882a593Smuzhiyun 322*4882a593Smuzhiyun #define ISSUPP_11ACENABLED(fw_cap_info) (fw_cap_info & BIT(13)) 323*4882a593Smuzhiyun 324*4882a593Smuzhiyun #define GET_VHTCAP_CHWDSET(vht_cap_info) ((vht_cap_info >> 2) & 0x3) 325*4882a593Smuzhiyun #define GET_VHTNSSMCS(mcs_mapset, nss) ((mcs_mapset >> (2 * (nss - 1))) & 0x3) 326*4882a593Smuzhiyun #define SET_VHTNSSMCS(mcs_mapset, nss, value) (mcs_mapset |= (value & 0x3) << \ 327*4882a593Smuzhiyun (2 * (nss - 1))) 328*4882a593Smuzhiyun #define GET_DEVTXMCSMAP(dev_mcs_map) (dev_mcs_map >> 16) 329*4882a593Smuzhiyun #define GET_DEVRXMCSMAP(dev_mcs_map) (dev_mcs_map & 0xFFFF) 330*4882a593Smuzhiyun 331*4882a593Smuzhiyun /* Clear SU Beanformer, MU beanformer, MU beanformee and 332*4882a593Smuzhiyun * sounding dimensions bits 333*4882a593Smuzhiyun */ 334*4882a593Smuzhiyun #define MWIFIEX_DEF_11AC_CAP_BF_RESET_MASK \ 335*4882a593Smuzhiyun (IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE | \ 336*4882a593Smuzhiyun IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE | \ 337*4882a593Smuzhiyun IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE | \ 338*4882a593Smuzhiyun IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MASK) 339*4882a593Smuzhiyun 340*4882a593Smuzhiyun #define MOD_CLASS_HR_DSSS 0x03 341*4882a593Smuzhiyun #define MOD_CLASS_OFDM 0x07 342*4882a593Smuzhiyun #define MOD_CLASS_HT 0x08 343*4882a593Smuzhiyun #define HT_BW_20 0 344*4882a593Smuzhiyun #define HT_BW_40 1 345*4882a593Smuzhiyun 346*4882a593Smuzhiyun #define DFS_CHAN_MOVE_TIME 10000 347*4882a593Smuzhiyun 348*4882a593Smuzhiyun #define HostCmd_CMD_GET_HW_SPEC 0x0003 349*4882a593Smuzhiyun #define HostCmd_CMD_802_11_SCAN 0x0006 350*4882a593Smuzhiyun #define HostCmd_CMD_802_11_GET_LOG 0x000b 351*4882a593Smuzhiyun #define HostCmd_CMD_MAC_MULTICAST_ADR 0x0010 352*4882a593Smuzhiyun #define HostCmd_CMD_802_11_EEPROM_ACCESS 0x0059 353*4882a593Smuzhiyun #define HostCmd_CMD_802_11_ASSOCIATE 0x0012 354*4882a593Smuzhiyun #define HostCmd_CMD_802_11_SNMP_MIB 0x0016 355*4882a593Smuzhiyun #define HostCmd_CMD_MAC_REG_ACCESS 0x0019 356*4882a593Smuzhiyun #define HostCmd_CMD_BBP_REG_ACCESS 0x001a 357*4882a593Smuzhiyun #define HostCmd_CMD_RF_REG_ACCESS 0x001b 358*4882a593Smuzhiyun #define HostCmd_CMD_PMIC_REG_ACCESS 0x00ad 359*4882a593Smuzhiyun #define HostCmd_CMD_RF_TX_PWR 0x001e 360*4882a593Smuzhiyun #define HostCmd_CMD_RF_ANTENNA 0x0020 361*4882a593Smuzhiyun #define HostCmd_CMD_802_11_DEAUTHENTICATE 0x0024 362*4882a593Smuzhiyun #define HostCmd_CMD_MAC_CONTROL 0x0028 363*4882a593Smuzhiyun #define HostCmd_CMD_802_11_AD_HOC_START 0x002b 364*4882a593Smuzhiyun #define HostCmd_CMD_802_11_AD_HOC_JOIN 0x002c 365*4882a593Smuzhiyun #define HostCmd_CMD_802_11_AD_HOC_STOP 0x0040 366*4882a593Smuzhiyun #define HostCmd_CMD_802_11_MAC_ADDRESS 0x004D 367*4882a593Smuzhiyun #define HostCmd_CMD_802_11D_DOMAIN_INFO 0x005b 368*4882a593Smuzhiyun #define HostCmd_CMD_802_11_KEY_MATERIAL 0x005e 369*4882a593Smuzhiyun #define HostCmd_CMD_802_11_BG_SCAN_CONFIG 0x006b 370*4882a593Smuzhiyun #define HostCmd_CMD_802_11_BG_SCAN_QUERY 0x006c 371*4882a593Smuzhiyun #define HostCmd_CMD_WMM_GET_STATUS 0x0071 372*4882a593Smuzhiyun #define HostCmd_CMD_802_11_SUBSCRIBE_EVENT 0x0075 373*4882a593Smuzhiyun #define HostCmd_CMD_802_11_TX_RATE_QUERY 0x007f 374*4882a593Smuzhiyun #define HostCmd_CMD_802_11_IBSS_COALESCING_STATUS 0x0083 375*4882a593Smuzhiyun #define HostCmd_CMD_MEM_ACCESS 0x0086 376*4882a593Smuzhiyun #define HostCmd_CMD_CFG_DATA 0x008f 377*4882a593Smuzhiyun #define HostCmd_CMD_VERSION_EXT 0x0097 378*4882a593Smuzhiyun #define HostCmd_CMD_MEF_CFG 0x009a 379*4882a593Smuzhiyun #define HostCmd_CMD_RSSI_INFO 0x00a4 380*4882a593Smuzhiyun #define HostCmd_CMD_FUNC_INIT 0x00a9 381*4882a593Smuzhiyun #define HostCmd_CMD_FUNC_SHUTDOWN 0x00aa 382*4882a593Smuzhiyun #define HOST_CMD_APCMD_SYS_RESET 0x00af 383*4882a593Smuzhiyun #define HostCmd_CMD_UAP_SYS_CONFIG 0x00b0 384*4882a593Smuzhiyun #define HostCmd_CMD_UAP_BSS_START 0x00b1 385*4882a593Smuzhiyun #define HostCmd_CMD_UAP_BSS_STOP 0x00b2 386*4882a593Smuzhiyun #define HOST_CMD_APCMD_STA_LIST 0x00b3 387*4882a593Smuzhiyun #define HostCmd_CMD_UAP_STA_DEAUTH 0x00b5 388*4882a593Smuzhiyun #define HostCmd_CMD_11N_CFG 0x00cd 389*4882a593Smuzhiyun #define HostCmd_CMD_11N_ADDBA_REQ 0x00ce 390*4882a593Smuzhiyun #define HostCmd_CMD_11N_ADDBA_RSP 0x00cf 391*4882a593Smuzhiyun #define HostCmd_CMD_11N_DELBA 0x00d0 392*4882a593Smuzhiyun #define HostCmd_CMD_RECONFIGURE_TX_BUFF 0x00d9 393*4882a593Smuzhiyun #define HostCmd_CMD_CHAN_REPORT_REQUEST 0x00dd 394*4882a593Smuzhiyun #define HostCmd_CMD_AMSDU_AGGR_CTRL 0x00df 395*4882a593Smuzhiyun #define HostCmd_CMD_TXPWR_CFG 0x00d1 396*4882a593Smuzhiyun #define HostCmd_CMD_TX_RATE_CFG 0x00d6 397*4882a593Smuzhiyun #define HostCmd_CMD_ROBUST_COEX 0x00e0 398*4882a593Smuzhiyun #define HostCmd_CMD_802_11_PS_MODE_ENH 0x00e4 399*4882a593Smuzhiyun #define HostCmd_CMD_802_11_HS_CFG_ENH 0x00e5 400*4882a593Smuzhiyun #define HostCmd_CMD_P2P_MODE_CFG 0x00eb 401*4882a593Smuzhiyun #define HostCmd_CMD_CAU_REG_ACCESS 0x00ed 402*4882a593Smuzhiyun #define HostCmd_CMD_SET_BSS_MODE 0x00f7 403*4882a593Smuzhiyun #define HostCmd_CMD_PCIE_DESC_DETAILS 0x00fa 404*4882a593Smuzhiyun #define HostCmd_CMD_802_11_SCAN_EXT 0x0107 405*4882a593Smuzhiyun #define HostCmd_CMD_COALESCE_CFG 0x010a 406*4882a593Smuzhiyun #define HostCmd_CMD_MGMT_FRAME_REG 0x010c 407*4882a593Smuzhiyun #define HostCmd_CMD_REMAIN_ON_CHAN 0x010d 408*4882a593Smuzhiyun #define HostCmd_CMD_GTK_REKEY_OFFLOAD_CFG 0x010f 409*4882a593Smuzhiyun #define HostCmd_CMD_11AC_CFG 0x0112 410*4882a593Smuzhiyun #define HostCmd_CMD_HS_WAKEUP_REASON 0x0116 411*4882a593Smuzhiyun #define HostCmd_CMD_TDLS_CONFIG 0x0100 412*4882a593Smuzhiyun #define HostCmd_CMD_MC_POLICY 0x0121 413*4882a593Smuzhiyun #define HostCmd_CMD_TDLS_OPER 0x0122 414*4882a593Smuzhiyun #define HostCmd_CMD_FW_DUMP_EVENT 0x0125 415*4882a593Smuzhiyun #define HostCmd_CMD_SDIO_SP_RX_AGGR_CFG 0x0223 416*4882a593Smuzhiyun #define HostCmd_CMD_STA_CONFIGURE 0x023f 417*4882a593Smuzhiyun #define HostCmd_CMD_CHAN_REGION_CFG 0x0242 418*4882a593Smuzhiyun #define HostCmd_CMD_PACKET_AGGR_CTRL 0x0251 419*4882a593Smuzhiyun 420*4882a593Smuzhiyun #define PROTOCOL_NO_SECURITY 0x01 421*4882a593Smuzhiyun #define PROTOCOL_STATIC_WEP 0x02 422*4882a593Smuzhiyun #define PROTOCOL_WPA 0x08 423*4882a593Smuzhiyun #define PROTOCOL_WPA2 0x20 424*4882a593Smuzhiyun #define PROTOCOL_WPA2_MIXED 0x28 425*4882a593Smuzhiyun #define PROTOCOL_EAP 0x40 426*4882a593Smuzhiyun #define KEY_MGMT_NONE 0x04 427*4882a593Smuzhiyun #define KEY_MGMT_PSK 0x02 428*4882a593Smuzhiyun #define KEY_MGMT_EAP 0x01 429*4882a593Smuzhiyun #define CIPHER_TKIP 0x04 430*4882a593Smuzhiyun #define CIPHER_AES_CCMP 0x08 431*4882a593Smuzhiyun #define VALID_CIPHER_BITMAP 0x0c 432*4882a593Smuzhiyun 433*4882a593Smuzhiyun enum ENH_PS_MODES { 434*4882a593Smuzhiyun EN_PS = 1, 435*4882a593Smuzhiyun DIS_PS = 2, 436*4882a593Smuzhiyun EN_AUTO_DS = 3, 437*4882a593Smuzhiyun DIS_AUTO_DS = 4, 438*4882a593Smuzhiyun SLEEP_CONFIRM = 5, 439*4882a593Smuzhiyun GET_PS = 0, 440*4882a593Smuzhiyun EN_AUTO_PS = 0xff, 441*4882a593Smuzhiyun DIS_AUTO_PS = 0xfe, 442*4882a593Smuzhiyun }; 443*4882a593Smuzhiyun 444*4882a593Smuzhiyun enum P2P_MODES { 445*4882a593Smuzhiyun P2P_MODE_DISABLE = 0, 446*4882a593Smuzhiyun P2P_MODE_DEVICE = 1, 447*4882a593Smuzhiyun P2P_MODE_GO = 2, 448*4882a593Smuzhiyun P2P_MODE_CLIENT = 3, 449*4882a593Smuzhiyun }; 450*4882a593Smuzhiyun 451*4882a593Smuzhiyun enum mwifiex_channel_flags { 452*4882a593Smuzhiyun MWIFIEX_CHANNEL_PASSIVE = BIT(0), 453*4882a593Smuzhiyun MWIFIEX_CHANNEL_DFS = BIT(1), 454*4882a593Smuzhiyun MWIFIEX_CHANNEL_NOHT40 = BIT(2), 455*4882a593Smuzhiyun MWIFIEX_CHANNEL_NOHT80 = BIT(3), 456*4882a593Smuzhiyun MWIFIEX_CHANNEL_DISABLED = BIT(7), 457*4882a593Smuzhiyun }; 458*4882a593Smuzhiyun 459*4882a593Smuzhiyun #define HostCmd_RET_BIT 0x8000 460*4882a593Smuzhiyun #define HostCmd_ACT_GEN_GET 0x0000 461*4882a593Smuzhiyun #define HostCmd_ACT_GEN_SET 0x0001 462*4882a593Smuzhiyun #define HostCmd_ACT_GEN_REMOVE 0x0004 463*4882a593Smuzhiyun #define HostCmd_ACT_BITWISE_SET 0x0002 464*4882a593Smuzhiyun #define HostCmd_ACT_BITWISE_CLR 0x0003 465*4882a593Smuzhiyun #define HostCmd_RESULT_OK 0x0000 466*4882a593Smuzhiyun #define HostCmd_ACT_MAC_RX_ON BIT(0) 467*4882a593Smuzhiyun #define HostCmd_ACT_MAC_TX_ON BIT(1) 468*4882a593Smuzhiyun #define HostCmd_ACT_MAC_WEP_ENABLE BIT(3) 469*4882a593Smuzhiyun #define HostCmd_ACT_MAC_ETHERNETII_ENABLE BIT(4) 470*4882a593Smuzhiyun #define HostCmd_ACT_MAC_PROMISCUOUS_ENABLE BIT(7) 471*4882a593Smuzhiyun #define HostCmd_ACT_MAC_ALL_MULTICAST_ENABLE BIT(8) 472*4882a593Smuzhiyun #define HostCmd_ACT_MAC_ADHOC_G_PROTECTION_ON BIT(13) 473*4882a593Smuzhiyun #define HostCmd_ACT_MAC_DYNAMIC_BW_ENABLE BIT(16) 474*4882a593Smuzhiyun 475*4882a593Smuzhiyun #define HostCmd_BSS_MODE_IBSS 0x0002 476*4882a593Smuzhiyun #define HostCmd_BSS_MODE_ANY 0x0003 477*4882a593Smuzhiyun 478*4882a593Smuzhiyun #define HostCmd_SCAN_RADIO_TYPE_BG 0 479*4882a593Smuzhiyun #define HostCmd_SCAN_RADIO_TYPE_A 1 480*4882a593Smuzhiyun 481*4882a593Smuzhiyun #define HS_CFG_CANCEL 0xffffffff 482*4882a593Smuzhiyun #define HS_CFG_COND_DEF 0x00000000 483*4882a593Smuzhiyun #define HS_CFG_GPIO_DEF 0xff 484*4882a593Smuzhiyun #define HS_CFG_GAP_DEF 0xff 485*4882a593Smuzhiyun #define HS_CFG_COND_BROADCAST_DATA 0x00000001 486*4882a593Smuzhiyun #define HS_CFG_COND_UNICAST_DATA 0x00000002 487*4882a593Smuzhiyun #define HS_CFG_COND_MAC_EVENT 0x00000004 488*4882a593Smuzhiyun #define HS_CFG_COND_MULTICAST_DATA 0x00000008 489*4882a593Smuzhiyun 490*4882a593Smuzhiyun #define CONNECT_ERR_AUTH_ERR_STA_FAILURE 0xFFFB 491*4882a593Smuzhiyun #define CONNECT_ERR_ASSOC_ERR_TIMEOUT 0xFFFC 492*4882a593Smuzhiyun #define CONNECT_ERR_ASSOC_ERR_AUTH_REFUSED 0xFFFD 493*4882a593Smuzhiyun #define CONNECT_ERR_AUTH_MSG_UNHANDLED 0xFFFE 494*4882a593Smuzhiyun #define CONNECT_ERR_STA_FAILURE 0xFFFF 495*4882a593Smuzhiyun 496*4882a593Smuzhiyun 497*4882a593Smuzhiyun #define CMD_F_HOSTCMD (1 << 0) 498*4882a593Smuzhiyun 499*4882a593Smuzhiyun #define HostCmd_CMD_ID_MASK 0x0fff 500*4882a593Smuzhiyun 501*4882a593Smuzhiyun #define HostCmd_SEQ_NUM_MASK 0x00ff 502*4882a593Smuzhiyun 503*4882a593Smuzhiyun #define HostCmd_BSS_NUM_MASK 0x0f00 504*4882a593Smuzhiyun 505*4882a593Smuzhiyun #define HostCmd_BSS_TYPE_MASK 0xf000 506*4882a593Smuzhiyun 507*4882a593Smuzhiyun #define HostCmd_ACT_SET_RX 0x0001 508*4882a593Smuzhiyun #define HostCmd_ACT_SET_TX 0x0002 509*4882a593Smuzhiyun #define HostCmd_ACT_SET_BOTH 0x0003 510*4882a593Smuzhiyun #define HostCmd_ACT_GET_RX 0x0004 511*4882a593Smuzhiyun #define HostCmd_ACT_GET_TX 0x0008 512*4882a593Smuzhiyun #define HostCmd_ACT_GET_BOTH 0x000c 513*4882a593Smuzhiyun 514*4882a593Smuzhiyun #define RF_ANTENNA_AUTO 0xFFFF 515*4882a593Smuzhiyun 516*4882a593Smuzhiyun #define HostCmd_SET_SEQ_NO_BSS_INFO(seq, num, type) \ 517*4882a593Smuzhiyun ((((seq) & 0x00ff) | \ 518*4882a593Smuzhiyun (((num) & 0x000f) << 8)) | \ 519*4882a593Smuzhiyun (((type) & 0x000f) << 12)) 520*4882a593Smuzhiyun 521*4882a593Smuzhiyun #define HostCmd_GET_SEQ_NO(seq) \ 522*4882a593Smuzhiyun ((seq) & HostCmd_SEQ_NUM_MASK) 523*4882a593Smuzhiyun 524*4882a593Smuzhiyun #define HostCmd_GET_BSS_NO(seq) \ 525*4882a593Smuzhiyun (((seq) & HostCmd_BSS_NUM_MASK) >> 8) 526*4882a593Smuzhiyun 527*4882a593Smuzhiyun #define HostCmd_GET_BSS_TYPE(seq) \ 528*4882a593Smuzhiyun (((seq) & HostCmd_BSS_TYPE_MASK) >> 12) 529*4882a593Smuzhiyun 530*4882a593Smuzhiyun #define EVENT_DUMMY_HOST_WAKEUP_SIGNAL 0x00000001 531*4882a593Smuzhiyun #define EVENT_LINK_LOST 0x00000003 532*4882a593Smuzhiyun #define EVENT_LINK_SENSED 0x00000004 533*4882a593Smuzhiyun #define EVENT_MIB_CHANGED 0x00000006 534*4882a593Smuzhiyun #define EVENT_INIT_DONE 0x00000007 535*4882a593Smuzhiyun #define EVENT_DEAUTHENTICATED 0x00000008 536*4882a593Smuzhiyun #define EVENT_DISASSOCIATED 0x00000009 537*4882a593Smuzhiyun #define EVENT_PS_AWAKE 0x0000000a 538*4882a593Smuzhiyun #define EVENT_PS_SLEEP 0x0000000b 539*4882a593Smuzhiyun #define EVENT_MIC_ERR_MULTICAST 0x0000000d 540*4882a593Smuzhiyun #define EVENT_MIC_ERR_UNICAST 0x0000000e 541*4882a593Smuzhiyun #define EVENT_DEEP_SLEEP_AWAKE 0x00000010 542*4882a593Smuzhiyun #define EVENT_ADHOC_BCN_LOST 0x00000011 543*4882a593Smuzhiyun 544*4882a593Smuzhiyun #define EVENT_WMM_STATUS_CHANGE 0x00000017 545*4882a593Smuzhiyun #define EVENT_BG_SCAN_REPORT 0x00000018 546*4882a593Smuzhiyun #define EVENT_RSSI_LOW 0x00000019 547*4882a593Smuzhiyun #define EVENT_SNR_LOW 0x0000001a 548*4882a593Smuzhiyun #define EVENT_MAX_FAIL 0x0000001b 549*4882a593Smuzhiyun #define EVENT_RSSI_HIGH 0x0000001c 550*4882a593Smuzhiyun #define EVENT_SNR_HIGH 0x0000001d 551*4882a593Smuzhiyun #define EVENT_IBSS_COALESCED 0x0000001e 552*4882a593Smuzhiyun #define EVENT_IBSS_STA_CONNECT 0x00000020 553*4882a593Smuzhiyun #define EVENT_IBSS_STA_DISCONNECT 0x00000021 554*4882a593Smuzhiyun #define EVENT_DATA_RSSI_LOW 0x00000024 555*4882a593Smuzhiyun #define EVENT_DATA_SNR_LOW 0x00000025 556*4882a593Smuzhiyun #define EVENT_DATA_RSSI_HIGH 0x00000026 557*4882a593Smuzhiyun #define EVENT_DATA_SNR_HIGH 0x00000027 558*4882a593Smuzhiyun #define EVENT_LINK_QUALITY 0x00000028 559*4882a593Smuzhiyun #define EVENT_PORT_RELEASE 0x0000002b 560*4882a593Smuzhiyun #define EVENT_UAP_STA_DEAUTH 0x0000002c 561*4882a593Smuzhiyun #define EVENT_UAP_STA_ASSOC 0x0000002d 562*4882a593Smuzhiyun #define EVENT_UAP_BSS_START 0x0000002e 563*4882a593Smuzhiyun #define EVENT_PRE_BEACON_LOST 0x00000031 564*4882a593Smuzhiyun #define EVENT_ADDBA 0x00000033 565*4882a593Smuzhiyun #define EVENT_DELBA 0x00000034 566*4882a593Smuzhiyun #define EVENT_BA_STREAM_TIEMOUT 0x00000037 567*4882a593Smuzhiyun #define EVENT_AMSDU_AGGR_CTRL 0x00000042 568*4882a593Smuzhiyun #define EVENT_UAP_BSS_IDLE 0x00000043 569*4882a593Smuzhiyun #define EVENT_UAP_BSS_ACTIVE 0x00000044 570*4882a593Smuzhiyun #define EVENT_WEP_ICV_ERR 0x00000046 571*4882a593Smuzhiyun #define EVENT_HS_ACT_REQ 0x00000047 572*4882a593Smuzhiyun #define EVENT_BW_CHANGE 0x00000048 573*4882a593Smuzhiyun #define EVENT_UAP_MIC_COUNTERMEASURES 0x0000004c 574*4882a593Smuzhiyun #define EVENT_HOSTWAKE_STAIE 0x0000004d 575*4882a593Smuzhiyun #define EVENT_CHANNEL_SWITCH_ANN 0x00000050 576*4882a593Smuzhiyun #define EVENT_TDLS_GENERIC_EVENT 0x00000052 577*4882a593Smuzhiyun #define EVENT_RADAR_DETECTED 0x00000053 578*4882a593Smuzhiyun #define EVENT_CHANNEL_REPORT_RDY 0x00000054 579*4882a593Smuzhiyun #define EVENT_TX_DATA_PAUSE 0x00000055 580*4882a593Smuzhiyun #define EVENT_EXT_SCAN_REPORT 0x00000058 581*4882a593Smuzhiyun #define EVENT_RXBA_SYNC 0x00000059 582*4882a593Smuzhiyun #define EVENT_UNKNOWN_DEBUG 0x00000063 583*4882a593Smuzhiyun #define EVENT_BG_SCAN_STOPPED 0x00000065 584*4882a593Smuzhiyun #define EVENT_REMAIN_ON_CHAN_EXPIRED 0x0000005f 585*4882a593Smuzhiyun #define EVENT_MULTI_CHAN_INFO 0x0000006a 586*4882a593Smuzhiyun #define EVENT_FW_DUMP_INFO 0x00000073 587*4882a593Smuzhiyun #define EVENT_TX_STATUS_REPORT 0x00000074 588*4882a593Smuzhiyun #define EVENT_BT_COEX_WLAN_PARA_CHANGE 0X00000076 589*4882a593Smuzhiyun 590*4882a593Smuzhiyun #define EVENT_ID_MASK 0xffff 591*4882a593Smuzhiyun #define BSS_NUM_MASK 0xf 592*4882a593Smuzhiyun 593*4882a593Smuzhiyun #define EVENT_GET_BSS_NUM(event_cause) \ 594*4882a593Smuzhiyun (((event_cause) >> 16) & BSS_NUM_MASK) 595*4882a593Smuzhiyun 596*4882a593Smuzhiyun #define EVENT_GET_BSS_TYPE(event_cause) \ 597*4882a593Smuzhiyun (((event_cause) >> 24) & 0x00ff) 598*4882a593Smuzhiyun 599*4882a593Smuzhiyun #define MWIFIEX_MAX_PATTERN_LEN 40 600*4882a593Smuzhiyun #define MWIFIEX_MAX_OFFSET_LEN 100 601*4882a593Smuzhiyun #define MWIFIEX_MAX_ND_MATCH_SETS 10 602*4882a593Smuzhiyun 603*4882a593Smuzhiyun #define STACK_NBYTES 100 604*4882a593Smuzhiyun #define TYPE_DNUM 1 605*4882a593Smuzhiyun #define TYPE_BYTESEQ 2 606*4882a593Smuzhiyun #define MAX_OPERAND 0x40 607*4882a593Smuzhiyun #define TYPE_EQ (MAX_OPERAND+1) 608*4882a593Smuzhiyun #define TYPE_EQ_DNUM (MAX_OPERAND+2) 609*4882a593Smuzhiyun #define TYPE_EQ_BIT (MAX_OPERAND+3) 610*4882a593Smuzhiyun #define TYPE_AND (MAX_OPERAND+4) 611*4882a593Smuzhiyun #define TYPE_OR (MAX_OPERAND+5) 612*4882a593Smuzhiyun #define MEF_MODE_HOST_SLEEP 1 613*4882a593Smuzhiyun #define MEF_ACTION_ALLOW_AND_WAKEUP_HOST 3 614*4882a593Smuzhiyun #define MEF_ACTION_AUTO_ARP 0x10 615*4882a593Smuzhiyun #define MWIFIEX_CRITERIA_BROADCAST BIT(0) 616*4882a593Smuzhiyun #define MWIFIEX_CRITERIA_UNICAST BIT(1) 617*4882a593Smuzhiyun #define MWIFIEX_CRITERIA_MULTICAST BIT(3) 618*4882a593Smuzhiyun #define MWIFIEX_MAX_SUPPORTED_IPADDR 4 619*4882a593Smuzhiyun 620*4882a593Smuzhiyun #define ACT_TDLS_DELETE 0x00 621*4882a593Smuzhiyun #define ACT_TDLS_CREATE 0x01 622*4882a593Smuzhiyun #define ACT_TDLS_CONFIG 0x02 623*4882a593Smuzhiyun 624*4882a593Smuzhiyun #define TDLS_EVENT_LINK_TEAR_DOWN 3 625*4882a593Smuzhiyun #define TDLS_EVENT_CHAN_SWITCH_RESULT 7 626*4882a593Smuzhiyun #define TDLS_EVENT_START_CHAN_SWITCH 8 627*4882a593Smuzhiyun #define TDLS_EVENT_CHAN_SWITCH_STOPPED 9 628*4882a593Smuzhiyun 629*4882a593Smuzhiyun #define TDLS_BASE_CHANNEL 0 630*4882a593Smuzhiyun #define TDLS_OFF_CHANNEL 1 631*4882a593Smuzhiyun 632*4882a593Smuzhiyun #define ACT_TDLS_CS_ENABLE_CONFIG 0x00 633*4882a593Smuzhiyun #define ACT_TDLS_CS_INIT 0x06 634*4882a593Smuzhiyun #define ACT_TDLS_CS_STOP 0x07 635*4882a593Smuzhiyun #define ACT_TDLS_CS_PARAMS 0x08 636*4882a593Smuzhiyun 637*4882a593Smuzhiyun #define MWIFIEX_DEF_CS_UNIT_TIME 2 638*4882a593Smuzhiyun #define MWIFIEX_DEF_CS_THR_OTHERLINK 10 639*4882a593Smuzhiyun #define MWIFIEX_DEF_THR_DIRECTLINK 0 640*4882a593Smuzhiyun #define MWIFIEX_DEF_CS_TIME 10 641*4882a593Smuzhiyun #define MWIFIEX_DEF_CS_TIMEOUT 16 642*4882a593Smuzhiyun #define MWIFIEX_DEF_CS_REG_CLASS 12 643*4882a593Smuzhiyun #define MWIFIEX_DEF_CS_PERIODICITY 1 644*4882a593Smuzhiyun 645*4882a593Smuzhiyun #define MWIFIEX_FW_V15 15 646*4882a593Smuzhiyun 647*4882a593Smuzhiyun #define MWIFIEX_MASTER_RADAR_DET_MASK BIT(1) 648*4882a593Smuzhiyun 649*4882a593Smuzhiyun struct mwifiex_ie_types_header { 650*4882a593Smuzhiyun __le16 type; 651*4882a593Smuzhiyun __le16 len; 652*4882a593Smuzhiyun } __packed; 653*4882a593Smuzhiyun 654*4882a593Smuzhiyun struct mwifiex_ie_types_data { 655*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 656*4882a593Smuzhiyun u8 data[1]; 657*4882a593Smuzhiyun } __packed; 658*4882a593Smuzhiyun 659*4882a593Smuzhiyun #define MWIFIEX_TxPD_POWER_MGMT_NULL_PACKET 0x01 660*4882a593Smuzhiyun #define MWIFIEX_TxPD_POWER_MGMT_LAST_PACKET 0x08 661*4882a593Smuzhiyun #define MWIFIEX_TXPD_FLAGS_TDLS_PACKET 0x10 662*4882a593Smuzhiyun #define MWIFIEX_RXPD_FLAGS_TDLS_PACKET 0x01 663*4882a593Smuzhiyun #define MWIFIEX_TXPD_FLAGS_REQ_TX_STATUS 0x20 664*4882a593Smuzhiyun 665*4882a593Smuzhiyun enum HS_WAKEUP_REASON { 666*4882a593Smuzhiyun NO_HSWAKEUP_REASON = 0, 667*4882a593Smuzhiyun BCAST_DATA_MATCHED, 668*4882a593Smuzhiyun MCAST_DATA_MATCHED, 669*4882a593Smuzhiyun UCAST_DATA_MATCHED, 670*4882a593Smuzhiyun MASKTABLE_EVENT_MATCHED, 671*4882a593Smuzhiyun NON_MASKABLE_EVENT_MATCHED, 672*4882a593Smuzhiyun NON_MASKABLE_CONDITION_MATCHED, 673*4882a593Smuzhiyun MAGIC_PATTERN_MATCHED, 674*4882a593Smuzhiyun CONTROL_FRAME_MATCHED, 675*4882a593Smuzhiyun MANAGEMENT_FRAME_MATCHED, 676*4882a593Smuzhiyun GTK_REKEY_FAILURE, 677*4882a593Smuzhiyun RESERVED 678*4882a593Smuzhiyun }; 679*4882a593Smuzhiyun 680*4882a593Smuzhiyun struct txpd { 681*4882a593Smuzhiyun u8 bss_type; 682*4882a593Smuzhiyun u8 bss_num; 683*4882a593Smuzhiyun __le16 tx_pkt_length; 684*4882a593Smuzhiyun __le16 tx_pkt_offset; 685*4882a593Smuzhiyun __le16 tx_pkt_type; 686*4882a593Smuzhiyun __le32 tx_control; 687*4882a593Smuzhiyun u8 priority; 688*4882a593Smuzhiyun u8 flags; 689*4882a593Smuzhiyun u8 pkt_delay_2ms; 690*4882a593Smuzhiyun u8 reserved1[2]; 691*4882a593Smuzhiyun u8 tx_token_id; 692*4882a593Smuzhiyun u8 reserved[2]; 693*4882a593Smuzhiyun } __packed; 694*4882a593Smuzhiyun 695*4882a593Smuzhiyun struct rxpd { 696*4882a593Smuzhiyun u8 bss_type; 697*4882a593Smuzhiyun u8 bss_num; 698*4882a593Smuzhiyun __le16 rx_pkt_length; 699*4882a593Smuzhiyun __le16 rx_pkt_offset; 700*4882a593Smuzhiyun __le16 rx_pkt_type; 701*4882a593Smuzhiyun __le16 seq_num; 702*4882a593Smuzhiyun u8 priority; 703*4882a593Smuzhiyun u8 rx_rate; 704*4882a593Smuzhiyun s8 snr; 705*4882a593Smuzhiyun s8 nf; 706*4882a593Smuzhiyun 707*4882a593Smuzhiyun /* For: Non-802.11 AC cards 708*4882a593Smuzhiyun * 709*4882a593Smuzhiyun * Ht Info [Bit 0] RxRate format: LG=0, HT=1 710*4882a593Smuzhiyun * [Bit 1] HT Bandwidth: BW20 = 0, BW40 = 1 711*4882a593Smuzhiyun * [Bit 2] HT Guard Interval: LGI = 0, SGI = 1 712*4882a593Smuzhiyun * 713*4882a593Smuzhiyun * For: 802.11 AC cards 714*4882a593Smuzhiyun * [Bit 1] [Bit 0] RxRate format: legacy rate = 00 HT = 01 VHT = 10 715*4882a593Smuzhiyun * [Bit 3] [Bit 2] HT/VHT Bandwidth BW20 = 00 BW40 = 01 716*4882a593Smuzhiyun * BW80 = 10 BW160 = 11 717*4882a593Smuzhiyun * [Bit 4] HT/VHT Guard interval LGI = 0 SGI = 1 718*4882a593Smuzhiyun * [Bit 5] STBC support Enabled = 1 719*4882a593Smuzhiyun * [Bit 6] LDPC support Enabled = 1 720*4882a593Smuzhiyun * [Bit 7] Reserved 721*4882a593Smuzhiyun */ 722*4882a593Smuzhiyun u8 ht_info; 723*4882a593Smuzhiyun u8 reserved[3]; 724*4882a593Smuzhiyun u8 flags; 725*4882a593Smuzhiyun } __packed; 726*4882a593Smuzhiyun 727*4882a593Smuzhiyun struct uap_txpd { 728*4882a593Smuzhiyun u8 bss_type; 729*4882a593Smuzhiyun u8 bss_num; 730*4882a593Smuzhiyun __le16 tx_pkt_length; 731*4882a593Smuzhiyun __le16 tx_pkt_offset; 732*4882a593Smuzhiyun __le16 tx_pkt_type; 733*4882a593Smuzhiyun __le32 tx_control; 734*4882a593Smuzhiyun u8 priority; 735*4882a593Smuzhiyun u8 flags; 736*4882a593Smuzhiyun u8 pkt_delay_2ms; 737*4882a593Smuzhiyun u8 reserved1[2]; 738*4882a593Smuzhiyun u8 tx_token_id; 739*4882a593Smuzhiyun u8 reserved[2]; 740*4882a593Smuzhiyun } __packed; 741*4882a593Smuzhiyun 742*4882a593Smuzhiyun struct uap_rxpd { 743*4882a593Smuzhiyun u8 bss_type; 744*4882a593Smuzhiyun u8 bss_num; 745*4882a593Smuzhiyun __le16 rx_pkt_length; 746*4882a593Smuzhiyun __le16 rx_pkt_offset; 747*4882a593Smuzhiyun __le16 rx_pkt_type; 748*4882a593Smuzhiyun __le16 seq_num; 749*4882a593Smuzhiyun u8 priority; 750*4882a593Smuzhiyun u8 rx_rate; 751*4882a593Smuzhiyun s8 snr; 752*4882a593Smuzhiyun s8 nf; 753*4882a593Smuzhiyun u8 ht_info; 754*4882a593Smuzhiyun u8 reserved[3]; 755*4882a593Smuzhiyun u8 flags; 756*4882a593Smuzhiyun } __packed; 757*4882a593Smuzhiyun 758*4882a593Smuzhiyun struct mwifiex_fw_chan_stats { 759*4882a593Smuzhiyun u8 chan_num; 760*4882a593Smuzhiyun u8 bandcfg; 761*4882a593Smuzhiyun u8 flags; 762*4882a593Smuzhiyun s8 noise; 763*4882a593Smuzhiyun __le16 total_bss; 764*4882a593Smuzhiyun __le16 cca_scan_dur; 765*4882a593Smuzhiyun __le16 cca_busy_dur; 766*4882a593Smuzhiyun } __packed; 767*4882a593Smuzhiyun 768*4882a593Smuzhiyun enum mwifiex_chan_scan_mode_bitmasks { 769*4882a593Smuzhiyun MWIFIEX_PASSIVE_SCAN = BIT(0), 770*4882a593Smuzhiyun MWIFIEX_DISABLE_CHAN_FILT = BIT(1), 771*4882a593Smuzhiyun MWIFIEX_HIDDEN_SSID_REPORT = BIT(4), 772*4882a593Smuzhiyun }; 773*4882a593Smuzhiyun 774*4882a593Smuzhiyun struct mwifiex_chan_scan_param_set { 775*4882a593Smuzhiyun u8 radio_type; 776*4882a593Smuzhiyun u8 chan_number; 777*4882a593Smuzhiyun u8 chan_scan_mode_bitmap; 778*4882a593Smuzhiyun __le16 min_scan_time; 779*4882a593Smuzhiyun __le16 max_scan_time; 780*4882a593Smuzhiyun } __packed; 781*4882a593Smuzhiyun 782*4882a593Smuzhiyun struct mwifiex_ie_types_chan_list_param_set { 783*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 784*4882a593Smuzhiyun struct mwifiex_chan_scan_param_set chan_scan_param[1]; 785*4882a593Smuzhiyun } __packed; 786*4882a593Smuzhiyun 787*4882a593Smuzhiyun struct mwifiex_ie_types_rxba_sync { 788*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 789*4882a593Smuzhiyun u8 mac[ETH_ALEN]; 790*4882a593Smuzhiyun u8 tid; 791*4882a593Smuzhiyun u8 reserved; 792*4882a593Smuzhiyun __le16 seq_num; 793*4882a593Smuzhiyun __le16 bitmap_len; 794*4882a593Smuzhiyun u8 bitmap[1]; 795*4882a593Smuzhiyun } __packed; 796*4882a593Smuzhiyun 797*4882a593Smuzhiyun struct chan_band_param_set { 798*4882a593Smuzhiyun u8 radio_type; 799*4882a593Smuzhiyun u8 chan_number; 800*4882a593Smuzhiyun }; 801*4882a593Smuzhiyun 802*4882a593Smuzhiyun struct mwifiex_ie_types_chan_band_list_param_set { 803*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 804*4882a593Smuzhiyun struct chan_band_param_set chan_band_param[1]; 805*4882a593Smuzhiyun } __packed; 806*4882a593Smuzhiyun 807*4882a593Smuzhiyun struct mwifiex_ie_types_rates_param_set { 808*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 809*4882a593Smuzhiyun u8 rates[1]; 810*4882a593Smuzhiyun } __packed; 811*4882a593Smuzhiyun 812*4882a593Smuzhiyun struct mwifiex_ie_types_ssid_param_set { 813*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 814*4882a593Smuzhiyun u8 ssid[1]; 815*4882a593Smuzhiyun } __packed; 816*4882a593Smuzhiyun 817*4882a593Smuzhiyun struct mwifiex_ie_types_num_probes { 818*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 819*4882a593Smuzhiyun __le16 num_probes; 820*4882a593Smuzhiyun } __packed; 821*4882a593Smuzhiyun 822*4882a593Smuzhiyun struct mwifiex_ie_types_repeat_count { 823*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 824*4882a593Smuzhiyun __le16 repeat_count; 825*4882a593Smuzhiyun } __packed; 826*4882a593Smuzhiyun 827*4882a593Smuzhiyun struct mwifiex_ie_types_min_rssi_threshold { 828*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 829*4882a593Smuzhiyun __le16 rssi_threshold; 830*4882a593Smuzhiyun } __packed; 831*4882a593Smuzhiyun 832*4882a593Smuzhiyun struct mwifiex_ie_types_bgscan_start_later { 833*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 834*4882a593Smuzhiyun __le16 start_later; 835*4882a593Smuzhiyun } __packed; 836*4882a593Smuzhiyun 837*4882a593Smuzhiyun struct mwifiex_ie_types_scan_chan_gap { 838*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 839*4882a593Smuzhiyun /* time gap in TUs to be used between two consecutive channels scan */ 840*4882a593Smuzhiyun __le16 chan_gap; 841*4882a593Smuzhiyun } __packed; 842*4882a593Smuzhiyun 843*4882a593Smuzhiyun struct mwifiex_ie_types_random_mac { 844*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 845*4882a593Smuzhiyun u8 mac[ETH_ALEN]; 846*4882a593Smuzhiyun } __packed; 847*4882a593Smuzhiyun 848*4882a593Smuzhiyun struct mwifiex_ietypes_chanstats { 849*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 850*4882a593Smuzhiyun struct mwifiex_fw_chan_stats chanstats[]; 851*4882a593Smuzhiyun } __packed; 852*4882a593Smuzhiyun 853*4882a593Smuzhiyun struct mwifiex_ie_types_wildcard_ssid_params { 854*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 855*4882a593Smuzhiyun u8 max_ssid_length; 856*4882a593Smuzhiyun u8 ssid[1]; 857*4882a593Smuzhiyun } __packed; 858*4882a593Smuzhiyun 859*4882a593Smuzhiyun #define TSF_DATA_SIZE 8 860*4882a593Smuzhiyun struct mwifiex_ie_types_tsf_timestamp { 861*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 862*4882a593Smuzhiyun u8 tsf_data[1]; 863*4882a593Smuzhiyun } __packed; 864*4882a593Smuzhiyun 865*4882a593Smuzhiyun struct mwifiex_cf_param_set { 866*4882a593Smuzhiyun u8 cfp_cnt; 867*4882a593Smuzhiyun u8 cfp_period; 868*4882a593Smuzhiyun __le16 cfp_max_duration; 869*4882a593Smuzhiyun __le16 cfp_duration_remaining; 870*4882a593Smuzhiyun } __packed; 871*4882a593Smuzhiyun 872*4882a593Smuzhiyun struct mwifiex_ibss_param_set { 873*4882a593Smuzhiyun __le16 atim_window; 874*4882a593Smuzhiyun } __packed; 875*4882a593Smuzhiyun 876*4882a593Smuzhiyun struct mwifiex_ie_types_ss_param_set { 877*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 878*4882a593Smuzhiyun union { 879*4882a593Smuzhiyun struct mwifiex_cf_param_set cf_param_set[1]; 880*4882a593Smuzhiyun struct mwifiex_ibss_param_set ibss_param_set[1]; 881*4882a593Smuzhiyun } cf_ibss; 882*4882a593Smuzhiyun } __packed; 883*4882a593Smuzhiyun 884*4882a593Smuzhiyun struct mwifiex_fh_param_set { 885*4882a593Smuzhiyun __le16 dwell_time; 886*4882a593Smuzhiyun u8 hop_set; 887*4882a593Smuzhiyun u8 hop_pattern; 888*4882a593Smuzhiyun u8 hop_index; 889*4882a593Smuzhiyun } __packed; 890*4882a593Smuzhiyun 891*4882a593Smuzhiyun struct mwifiex_ds_param_set { 892*4882a593Smuzhiyun u8 current_chan; 893*4882a593Smuzhiyun } __packed; 894*4882a593Smuzhiyun 895*4882a593Smuzhiyun struct mwifiex_ie_types_phy_param_set { 896*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 897*4882a593Smuzhiyun union { 898*4882a593Smuzhiyun struct mwifiex_fh_param_set fh_param_set[1]; 899*4882a593Smuzhiyun struct mwifiex_ds_param_set ds_param_set[1]; 900*4882a593Smuzhiyun } fh_ds; 901*4882a593Smuzhiyun } __packed; 902*4882a593Smuzhiyun 903*4882a593Smuzhiyun struct mwifiex_ie_types_auth_type { 904*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 905*4882a593Smuzhiyun __le16 auth_type; 906*4882a593Smuzhiyun } __packed; 907*4882a593Smuzhiyun 908*4882a593Smuzhiyun struct mwifiex_ie_types_vendor_param_set { 909*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 910*4882a593Smuzhiyun u8 ie[MWIFIEX_MAX_VSIE_LEN]; 911*4882a593Smuzhiyun }; 912*4882a593Smuzhiyun 913*4882a593Smuzhiyun #define MWIFIEX_TDLS_IDLE_TIMEOUT_IN_SEC 60 914*4882a593Smuzhiyun 915*4882a593Smuzhiyun struct mwifiex_ie_types_tdls_idle_timeout { 916*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 917*4882a593Smuzhiyun __le16 value; 918*4882a593Smuzhiyun } __packed; 919*4882a593Smuzhiyun 920*4882a593Smuzhiyun struct mwifiex_ie_types_rsn_param_set { 921*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 922*4882a593Smuzhiyun u8 rsn_ie[1]; 923*4882a593Smuzhiyun } __packed; 924*4882a593Smuzhiyun 925*4882a593Smuzhiyun #define KEYPARAMSET_FIXED_LEN 6 926*4882a593Smuzhiyun 927*4882a593Smuzhiyun struct mwifiex_ie_type_key_param_set { 928*4882a593Smuzhiyun __le16 type; 929*4882a593Smuzhiyun __le16 length; 930*4882a593Smuzhiyun __le16 key_type_id; 931*4882a593Smuzhiyun __le16 key_info; 932*4882a593Smuzhiyun __le16 key_len; 933*4882a593Smuzhiyun u8 key[50]; 934*4882a593Smuzhiyun } __packed; 935*4882a593Smuzhiyun 936*4882a593Smuzhiyun #define IGTK_PN_LEN 8 937*4882a593Smuzhiyun 938*4882a593Smuzhiyun struct mwifiex_cmac_param { 939*4882a593Smuzhiyun u8 ipn[IGTK_PN_LEN]; 940*4882a593Smuzhiyun u8 key[WLAN_KEY_LEN_AES_CMAC]; 941*4882a593Smuzhiyun } __packed; 942*4882a593Smuzhiyun 943*4882a593Smuzhiyun struct mwifiex_wep_param { 944*4882a593Smuzhiyun __le16 key_len; 945*4882a593Smuzhiyun u8 key[WLAN_KEY_LEN_WEP104]; 946*4882a593Smuzhiyun } __packed; 947*4882a593Smuzhiyun 948*4882a593Smuzhiyun struct mwifiex_tkip_param { 949*4882a593Smuzhiyun u8 pn[WPA_PN_SIZE]; 950*4882a593Smuzhiyun __le16 key_len; 951*4882a593Smuzhiyun u8 key[WLAN_KEY_LEN_TKIP]; 952*4882a593Smuzhiyun } __packed; 953*4882a593Smuzhiyun 954*4882a593Smuzhiyun struct mwifiex_aes_param { 955*4882a593Smuzhiyun u8 pn[WPA_PN_SIZE]; 956*4882a593Smuzhiyun __le16 key_len; 957*4882a593Smuzhiyun u8 key[WLAN_KEY_LEN_CCMP_256]; 958*4882a593Smuzhiyun } __packed; 959*4882a593Smuzhiyun 960*4882a593Smuzhiyun struct mwifiex_wapi_param { 961*4882a593Smuzhiyun u8 pn[PN_LEN]; 962*4882a593Smuzhiyun __le16 key_len; 963*4882a593Smuzhiyun u8 key[WLAN_KEY_LEN_SMS4]; 964*4882a593Smuzhiyun } __packed; 965*4882a593Smuzhiyun 966*4882a593Smuzhiyun struct mwifiex_cmac_aes_param { 967*4882a593Smuzhiyun u8 ipn[IGTK_PN_LEN]; 968*4882a593Smuzhiyun __le16 key_len; 969*4882a593Smuzhiyun u8 key[WLAN_KEY_LEN_AES_CMAC]; 970*4882a593Smuzhiyun } __packed; 971*4882a593Smuzhiyun 972*4882a593Smuzhiyun struct mwifiex_ie_type_key_param_set_v2 { 973*4882a593Smuzhiyun __le16 type; 974*4882a593Smuzhiyun __le16 len; 975*4882a593Smuzhiyun u8 mac_addr[ETH_ALEN]; 976*4882a593Smuzhiyun u8 key_idx; 977*4882a593Smuzhiyun u8 key_type; 978*4882a593Smuzhiyun __le16 key_info; 979*4882a593Smuzhiyun union { 980*4882a593Smuzhiyun struct mwifiex_wep_param wep; 981*4882a593Smuzhiyun struct mwifiex_tkip_param tkip; 982*4882a593Smuzhiyun struct mwifiex_aes_param aes; 983*4882a593Smuzhiyun struct mwifiex_wapi_param wapi; 984*4882a593Smuzhiyun struct mwifiex_cmac_aes_param cmac_aes; 985*4882a593Smuzhiyun } key_params; 986*4882a593Smuzhiyun } __packed; 987*4882a593Smuzhiyun 988*4882a593Smuzhiyun struct host_cmd_ds_802_11_key_material_v2 { 989*4882a593Smuzhiyun __le16 action; 990*4882a593Smuzhiyun struct mwifiex_ie_type_key_param_set_v2 key_param_set; 991*4882a593Smuzhiyun } __packed; 992*4882a593Smuzhiyun 993*4882a593Smuzhiyun struct host_cmd_ds_802_11_key_material { 994*4882a593Smuzhiyun __le16 action; 995*4882a593Smuzhiyun struct mwifiex_ie_type_key_param_set key_param_set; 996*4882a593Smuzhiyun } __packed; 997*4882a593Smuzhiyun 998*4882a593Smuzhiyun struct host_cmd_ds_gen { 999*4882a593Smuzhiyun __le16 command; 1000*4882a593Smuzhiyun __le16 size; 1001*4882a593Smuzhiyun __le16 seq_num; 1002*4882a593Smuzhiyun __le16 result; 1003*4882a593Smuzhiyun }; 1004*4882a593Smuzhiyun 1005*4882a593Smuzhiyun #define S_DS_GEN sizeof(struct host_cmd_ds_gen) 1006*4882a593Smuzhiyun 1007*4882a593Smuzhiyun enum sleep_resp_ctrl { 1008*4882a593Smuzhiyun RESP_NOT_NEEDED = 0, 1009*4882a593Smuzhiyun RESP_NEEDED, 1010*4882a593Smuzhiyun }; 1011*4882a593Smuzhiyun 1012*4882a593Smuzhiyun struct mwifiex_ps_param { 1013*4882a593Smuzhiyun __le16 null_pkt_interval; 1014*4882a593Smuzhiyun __le16 multiple_dtims; 1015*4882a593Smuzhiyun __le16 bcn_miss_timeout; 1016*4882a593Smuzhiyun __le16 local_listen_interval; 1017*4882a593Smuzhiyun __le16 adhoc_wake_period; 1018*4882a593Smuzhiyun __le16 mode; 1019*4882a593Smuzhiyun __le16 delay_to_ps; 1020*4882a593Smuzhiyun } __packed; 1021*4882a593Smuzhiyun 1022*4882a593Smuzhiyun #define HS_DEF_WAKE_INTERVAL 100 1023*4882a593Smuzhiyun #define HS_DEF_INACTIVITY_TIMEOUT 50 1024*4882a593Smuzhiyun 1025*4882a593Smuzhiyun struct mwifiex_ps_param_in_hs { 1026*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1027*4882a593Smuzhiyun __le32 hs_wake_int; 1028*4882a593Smuzhiyun __le32 hs_inact_timeout; 1029*4882a593Smuzhiyun } __packed; 1030*4882a593Smuzhiyun 1031*4882a593Smuzhiyun #define BITMAP_AUTO_DS 0x01 1032*4882a593Smuzhiyun #define BITMAP_STA_PS 0x10 1033*4882a593Smuzhiyun 1034*4882a593Smuzhiyun struct mwifiex_ie_types_auto_ds_param { 1035*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1036*4882a593Smuzhiyun __le16 deep_sleep_timeout; 1037*4882a593Smuzhiyun } __packed; 1038*4882a593Smuzhiyun 1039*4882a593Smuzhiyun struct mwifiex_ie_types_ps_param { 1040*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1041*4882a593Smuzhiyun struct mwifiex_ps_param param; 1042*4882a593Smuzhiyun } __packed; 1043*4882a593Smuzhiyun 1044*4882a593Smuzhiyun struct host_cmd_ds_802_11_ps_mode_enh { 1045*4882a593Smuzhiyun __le16 action; 1046*4882a593Smuzhiyun 1047*4882a593Smuzhiyun union { 1048*4882a593Smuzhiyun struct mwifiex_ps_param opt_ps; 1049*4882a593Smuzhiyun __le16 ps_bitmap; 1050*4882a593Smuzhiyun } params; 1051*4882a593Smuzhiyun } __packed; 1052*4882a593Smuzhiyun 1053*4882a593Smuzhiyun enum API_VER_ID { 1054*4882a593Smuzhiyun KEY_API_VER_ID = 1, 1055*4882a593Smuzhiyun FW_API_VER_ID = 2, 1056*4882a593Smuzhiyun UAP_FW_API_VER_ID = 3, 1057*4882a593Smuzhiyun CHANRPT_API_VER_ID = 4, 1058*4882a593Smuzhiyun }; 1059*4882a593Smuzhiyun 1060*4882a593Smuzhiyun struct hw_spec_api_rev { 1061*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1062*4882a593Smuzhiyun __le16 api_id; 1063*4882a593Smuzhiyun u8 major_ver; 1064*4882a593Smuzhiyun u8 minor_ver; 1065*4882a593Smuzhiyun } __packed; 1066*4882a593Smuzhiyun 1067*4882a593Smuzhiyun struct host_cmd_ds_get_hw_spec { 1068*4882a593Smuzhiyun __le16 hw_if_version; 1069*4882a593Smuzhiyun __le16 version; 1070*4882a593Smuzhiyun __le16 reserved; 1071*4882a593Smuzhiyun __le16 num_of_mcast_adr; 1072*4882a593Smuzhiyun u8 permanent_addr[ETH_ALEN]; 1073*4882a593Smuzhiyun __le16 region_code; 1074*4882a593Smuzhiyun __le16 number_of_antenna; 1075*4882a593Smuzhiyun __le32 fw_release_number; 1076*4882a593Smuzhiyun __le32 reserved_1; 1077*4882a593Smuzhiyun __le32 reserved_2; 1078*4882a593Smuzhiyun __le32 reserved_3; 1079*4882a593Smuzhiyun __le32 fw_cap_info; 1080*4882a593Smuzhiyun __le32 dot_11n_dev_cap; 1081*4882a593Smuzhiyun u8 dev_mcs_support; 1082*4882a593Smuzhiyun __le16 mp_end_port; /* SDIO only, reserved for other interfacces */ 1083*4882a593Smuzhiyun __le16 mgmt_buf_count; /* mgmt IE buffer count */ 1084*4882a593Smuzhiyun __le32 reserved_5; 1085*4882a593Smuzhiyun __le32 reserved_6; 1086*4882a593Smuzhiyun __le32 dot_11ac_dev_cap; 1087*4882a593Smuzhiyun __le32 dot_11ac_mcs_support; 1088*4882a593Smuzhiyun u8 tlvs[]; 1089*4882a593Smuzhiyun } __packed; 1090*4882a593Smuzhiyun 1091*4882a593Smuzhiyun struct host_cmd_ds_802_11_rssi_info { 1092*4882a593Smuzhiyun __le16 action; 1093*4882a593Smuzhiyun __le16 ndata; 1094*4882a593Smuzhiyun __le16 nbcn; 1095*4882a593Smuzhiyun __le16 reserved[9]; 1096*4882a593Smuzhiyun long long reserved_1; 1097*4882a593Smuzhiyun } __packed; 1098*4882a593Smuzhiyun 1099*4882a593Smuzhiyun struct host_cmd_ds_802_11_rssi_info_rsp { 1100*4882a593Smuzhiyun __le16 action; 1101*4882a593Smuzhiyun __le16 ndata; 1102*4882a593Smuzhiyun __le16 nbcn; 1103*4882a593Smuzhiyun __le16 data_rssi_last; 1104*4882a593Smuzhiyun __le16 data_nf_last; 1105*4882a593Smuzhiyun __le16 data_rssi_avg; 1106*4882a593Smuzhiyun __le16 data_nf_avg; 1107*4882a593Smuzhiyun __le16 bcn_rssi_last; 1108*4882a593Smuzhiyun __le16 bcn_nf_last; 1109*4882a593Smuzhiyun __le16 bcn_rssi_avg; 1110*4882a593Smuzhiyun __le16 bcn_nf_avg; 1111*4882a593Smuzhiyun long long tsf_bcn; 1112*4882a593Smuzhiyun } __packed; 1113*4882a593Smuzhiyun 1114*4882a593Smuzhiyun struct host_cmd_ds_802_11_mac_address { 1115*4882a593Smuzhiyun __le16 action; 1116*4882a593Smuzhiyun u8 mac_addr[ETH_ALEN]; 1117*4882a593Smuzhiyun } __packed; 1118*4882a593Smuzhiyun 1119*4882a593Smuzhiyun struct host_cmd_ds_mac_control { 1120*4882a593Smuzhiyun __le32 action; 1121*4882a593Smuzhiyun }; 1122*4882a593Smuzhiyun 1123*4882a593Smuzhiyun struct host_cmd_ds_mac_multicast_adr { 1124*4882a593Smuzhiyun __le16 action; 1125*4882a593Smuzhiyun __le16 num_of_adrs; 1126*4882a593Smuzhiyun u8 mac_list[MWIFIEX_MAX_MULTICAST_LIST_SIZE][ETH_ALEN]; 1127*4882a593Smuzhiyun } __packed; 1128*4882a593Smuzhiyun 1129*4882a593Smuzhiyun struct host_cmd_ds_802_11_deauthenticate { 1130*4882a593Smuzhiyun u8 mac_addr[ETH_ALEN]; 1131*4882a593Smuzhiyun __le16 reason_code; 1132*4882a593Smuzhiyun } __packed; 1133*4882a593Smuzhiyun 1134*4882a593Smuzhiyun struct host_cmd_ds_802_11_associate { 1135*4882a593Smuzhiyun u8 peer_sta_addr[ETH_ALEN]; 1136*4882a593Smuzhiyun __le16 cap_info_bitmap; 1137*4882a593Smuzhiyun __le16 listen_interval; 1138*4882a593Smuzhiyun __le16 beacon_period; 1139*4882a593Smuzhiyun u8 dtim_period; 1140*4882a593Smuzhiyun } __packed; 1141*4882a593Smuzhiyun 1142*4882a593Smuzhiyun struct ieee_types_assoc_rsp { 1143*4882a593Smuzhiyun __le16 cap_info_bitmap; 1144*4882a593Smuzhiyun __le16 status_code; 1145*4882a593Smuzhiyun __le16 a_id; 1146*4882a593Smuzhiyun u8 ie_buffer[]; 1147*4882a593Smuzhiyun } __packed; 1148*4882a593Smuzhiyun 1149*4882a593Smuzhiyun struct host_cmd_ds_802_11_associate_rsp { 1150*4882a593Smuzhiyun struct ieee_types_assoc_rsp assoc_rsp; 1151*4882a593Smuzhiyun } __packed; 1152*4882a593Smuzhiyun 1153*4882a593Smuzhiyun struct ieee_types_cf_param_set { 1154*4882a593Smuzhiyun u8 element_id; 1155*4882a593Smuzhiyun u8 len; 1156*4882a593Smuzhiyun u8 cfp_cnt; 1157*4882a593Smuzhiyun u8 cfp_period; 1158*4882a593Smuzhiyun __le16 cfp_max_duration; 1159*4882a593Smuzhiyun __le16 cfp_duration_remaining; 1160*4882a593Smuzhiyun } __packed; 1161*4882a593Smuzhiyun 1162*4882a593Smuzhiyun struct ieee_types_ibss_param_set { 1163*4882a593Smuzhiyun u8 element_id; 1164*4882a593Smuzhiyun u8 len; 1165*4882a593Smuzhiyun __le16 atim_window; 1166*4882a593Smuzhiyun } __packed; 1167*4882a593Smuzhiyun 1168*4882a593Smuzhiyun union ieee_types_ss_param_set { 1169*4882a593Smuzhiyun struct ieee_types_cf_param_set cf_param_set; 1170*4882a593Smuzhiyun struct ieee_types_ibss_param_set ibss_param_set; 1171*4882a593Smuzhiyun } __packed; 1172*4882a593Smuzhiyun 1173*4882a593Smuzhiyun struct ieee_types_fh_param_set { 1174*4882a593Smuzhiyun u8 element_id; 1175*4882a593Smuzhiyun u8 len; 1176*4882a593Smuzhiyun __le16 dwell_time; 1177*4882a593Smuzhiyun u8 hop_set; 1178*4882a593Smuzhiyun u8 hop_pattern; 1179*4882a593Smuzhiyun u8 hop_index; 1180*4882a593Smuzhiyun } __packed; 1181*4882a593Smuzhiyun 1182*4882a593Smuzhiyun struct ieee_types_ds_param_set { 1183*4882a593Smuzhiyun u8 element_id; 1184*4882a593Smuzhiyun u8 len; 1185*4882a593Smuzhiyun u8 current_chan; 1186*4882a593Smuzhiyun } __packed; 1187*4882a593Smuzhiyun 1188*4882a593Smuzhiyun union ieee_types_phy_param_set { 1189*4882a593Smuzhiyun struct ieee_types_fh_param_set fh_param_set; 1190*4882a593Smuzhiyun struct ieee_types_ds_param_set ds_param_set; 1191*4882a593Smuzhiyun } __packed; 1192*4882a593Smuzhiyun 1193*4882a593Smuzhiyun struct ieee_types_oper_mode_ntf { 1194*4882a593Smuzhiyun u8 element_id; 1195*4882a593Smuzhiyun u8 len; 1196*4882a593Smuzhiyun u8 oper_mode; 1197*4882a593Smuzhiyun } __packed; 1198*4882a593Smuzhiyun 1199*4882a593Smuzhiyun struct host_cmd_ds_802_11_ad_hoc_start { 1200*4882a593Smuzhiyun u8 ssid[IEEE80211_MAX_SSID_LEN]; 1201*4882a593Smuzhiyun u8 bss_mode; 1202*4882a593Smuzhiyun __le16 beacon_period; 1203*4882a593Smuzhiyun u8 dtim_period; 1204*4882a593Smuzhiyun union ieee_types_ss_param_set ss_param_set; 1205*4882a593Smuzhiyun union ieee_types_phy_param_set phy_param_set; 1206*4882a593Smuzhiyun u16 reserved1; 1207*4882a593Smuzhiyun __le16 cap_info_bitmap; 1208*4882a593Smuzhiyun u8 data_rate[HOSTCMD_SUPPORTED_RATES]; 1209*4882a593Smuzhiyun } __packed; 1210*4882a593Smuzhiyun 1211*4882a593Smuzhiyun struct host_cmd_ds_802_11_ad_hoc_start_result { 1212*4882a593Smuzhiyun u8 pad[3]; 1213*4882a593Smuzhiyun u8 bssid[ETH_ALEN]; 1214*4882a593Smuzhiyun u8 pad2[2]; 1215*4882a593Smuzhiyun u8 result; 1216*4882a593Smuzhiyun } __packed; 1217*4882a593Smuzhiyun 1218*4882a593Smuzhiyun struct host_cmd_ds_802_11_ad_hoc_join_result { 1219*4882a593Smuzhiyun u8 result; 1220*4882a593Smuzhiyun } __packed; 1221*4882a593Smuzhiyun 1222*4882a593Smuzhiyun struct adhoc_bss_desc { 1223*4882a593Smuzhiyun u8 bssid[ETH_ALEN]; 1224*4882a593Smuzhiyun u8 ssid[IEEE80211_MAX_SSID_LEN]; 1225*4882a593Smuzhiyun u8 bss_mode; 1226*4882a593Smuzhiyun __le16 beacon_period; 1227*4882a593Smuzhiyun u8 dtim_period; 1228*4882a593Smuzhiyun u8 time_stamp[8]; 1229*4882a593Smuzhiyun u8 local_time[8]; 1230*4882a593Smuzhiyun union ieee_types_phy_param_set phy_param_set; 1231*4882a593Smuzhiyun union ieee_types_ss_param_set ss_param_set; 1232*4882a593Smuzhiyun __le16 cap_info_bitmap; 1233*4882a593Smuzhiyun u8 data_rates[HOSTCMD_SUPPORTED_RATES]; 1234*4882a593Smuzhiyun 1235*4882a593Smuzhiyun /* 1236*4882a593Smuzhiyun * DO NOT ADD ANY FIELDS TO THIS STRUCTURE. 1237*4882a593Smuzhiyun * It is used in the Adhoc join command and will cause a 1238*4882a593Smuzhiyun * binary layout mismatch with the firmware 1239*4882a593Smuzhiyun */ 1240*4882a593Smuzhiyun } __packed; 1241*4882a593Smuzhiyun 1242*4882a593Smuzhiyun struct host_cmd_ds_802_11_ad_hoc_join { 1243*4882a593Smuzhiyun struct adhoc_bss_desc bss_descriptor; 1244*4882a593Smuzhiyun u16 reserved1; 1245*4882a593Smuzhiyun u16 reserved2; 1246*4882a593Smuzhiyun } __packed; 1247*4882a593Smuzhiyun 1248*4882a593Smuzhiyun struct host_cmd_ds_802_11_get_log { 1249*4882a593Smuzhiyun __le32 mcast_tx_frame; 1250*4882a593Smuzhiyun __le32 failed; 1251*4882a593Smuzhiyun __le32 retry; 1252*4882a593Smuzhiyun __le32 multi_retry; 1253*4882a593Smuzhiyun __le32 frame_dup; 1254*4882a593Smuzhiyun __le32 rts_success; 1255*4882a593Smuzhiyun __le32 rts_failure; 1256*4882a593Smuzhiyun __le32 ack_failure; 1257*4882a593Smuzhiyun __le32 rx_frag; 1258*4882a593Smuzhiyun __le32 mcast_rx_frame; 1259*4882a593Smuzhiyun __le32 fcs_error; 1260*4882a593Smuzhiyun __le32 tx_frame; 1261*4882a593Smuzhiyun __le32 reserved; 1262*4882a593Smuzhiyun __le32 wep_icv_err_cnt[4]; 1263*4882a593Smuzhiyun __le32 bcn_rcv_cnt; 1264*4882a593Smuzhiyun __le32 bcn_miss_cnt; 1265*4882a593Smuzhiyun } __packed; 1266*4882a593Smuzhiyun 1267*4882a593Smuzhiyun /* Enumeration for rate format */ 1268*4882a593Smuzhiyun enum _mwifiex_rate_format { 1269*4882a593Smuzhiyun MWIFIEX_RATE_FORMAT_LG = 0, 1270*4882a593Smuzhiyun MWIFIEX_RATE_FORMAT_HT, 1271*4882a593Smuzhiyun MWIFIEX_RATE_FORMAT_VHT, 1272*4882a593Smuzhiyun MWIFIEX_RATE_FORMAT_AUTO = 0xFF, 1273*4882a593Smuzhiyun }; 1274*4882a593Smuzhiyun 1275*4882a593Smuzhiyun struct host_cmd_ds_tx_rate_query { 1276*4882a593Smuzhiyun u8 tx_rate; 1277*4882a593Smuzhiyun /* Tx Rate Info: For 802.11 AC cards 1278*4882a593Smuzhiyun * 1279*4882a593Smuzhiyun * [Bit 0-1] tx rate formate: LG = 0, HT = 1, VHT = 2 1280*4882a593Smuzhiyun * [Bit 2-3] HT/VHT Bandwidth: BW20 = 0, BW40 = 1, BW80 = 2, BW160 = 3 1281*4882a593Smuzhiyun * [Bit 4] HT/VHT Guard Interval: LGI = 0, SGI = 1 1282*4882a593Smuzhiyun * 1283*4882a593Smuzhiyun * For non-802.11 AC cards 1284*4882a593Smuzhiyun * Ht Info [Bit 0] RxRate format: LG=0, HT=1 1285*4882a593Smuzhiyun * [Bit 1] HT Bandwidth: BW20 = 0, BW40 = 1 1286*4882a593Smuzhiyun * [Bit 2] HT Guard Interval: LGI = 0, SGI = 1 1287*4882a593Smuzhiyun */ 1288*4882a593Smuzhiyun u8 ht_info; 1289*4882a593Smuzhiyun } __packed; 1290*4882a593Smuzhiyun 1291*4882a593Smuzhiyun struct mwifiex_tx_pause_tlv { 1292*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1293*4882a593Smuzhiyun u8 peermac[ETH_ALEN]; 1294*4882a593Smuzhiyun u8 tx_pause; 1295*4882a593Smuzhiyun u8 pkt_cnt; 1296*4882a593Smuzhiyun } __packed; 1297*4882a593Smuzhiyun 1298*4882a593Smuzhiyun enum Host_Sleep_Action { 1299*4882a593Smuzhiyun HS_CONFIGURE = 0x0001, 1300*4882a593Smuzhiyun HS_ACTIVATE = 0x0002, 1301*4882a593Smuzhiyun }; 1302*4882a593Smuzhiyun 1303*4882a593Smuzhiyun struct mwifiex_hs_config_param { 1304*4882a593Smuzhiyun __le32 conditions; 1305*4882a593Smuzhiyun u8 gpio; 1306*4882a593Smuzhiyun u8 gap; 1307*4882a593Smuzhiyun } __packed; 1308*4882a593Smuzhiyun 1309*4882a593Smuzhiyun struct hs_activate_param { 1310*4882a593Smuzhiyun __le16 resp_ctrl; 1311*4882a593Smuzhiyun } __packed; 1312*4882a593Smuzhiyun 1313*4882a593Smuzhiyun struct host_cmd_ds_802_11_hs_cfg_enh { 1314*4882a593Smuzhiyun __le16 action; 1315*4882a593Smuzhiyun 1316*4882a593Smuzhiyun union { 1317*4882a593Smuzhiyun struct mwifiex_hs_config_param hs_config; 1318*4882a593Smuzhiyun struct hs_activate_param hs_activate; 1319*4882a593Smuzhiyun } params; 1320*4882a593Smuzhiyun } __packed; 1321*4882a593Smuzhiyun 1322*4882a593Smuzhiyun enum SNMP_MIB_INDEX { 1323*4882a593Smuzhiyun OP_RATE_SET_I = 1, 1324*4882a593Smuzhiyun DTIM_PERIOD_I = 3, 1325*4882a593Smuzhiyun RTS_THRESH_I = 5, 1326*4882a593Smuzhiyun SHORT_RETRY_LIM_I = 6, 1327*4882a593Smuzhiyun LONG_RETRY_LIM_I = 7, 1328*4882a593Smuzhiyun FRAG_THRESH_I = 8, 1329*4882a593Smuzhiyun DOT11D_I = 9, 1330*4882a593Smuzhiyun DOT11H_I = 10, 1331*4882a593Smuzhiyun }; 1332*4882a593Smuzhiyun 1333*4882a593Smuzhiyun enum mwifiex_assocmd_failurepoint { 1334*4882a593Smuzhiyun MWIFIEX_ASSOC_CMD_SUCCESS = 0, 1335*4882a593Smuzhiyun MWIFIEX_ASSOC_CMD_FAILURE_ASSOC, 1336*4882a593Smuzhiyun MWIFIEX_ASSOC_CMD_FAILURE_AUTH, 1337*4882a593Smuzhiyun MWIFIEX_ASSOC_CMD_FAILURE_JOIN 1338*4882a593Smuzhiyun }; 1339*4882a593Smuzhiyun 1340*4882a593Smuzhiyun #define MAX_SNMP_BUF_SIZE 128 1341*4882a593Smuzhiyun 1342*4882a593Smuzhiyun struct host_cmd_ds_802_11_snmp_mib { 1343*4882a593Smuzhiyun __le16 query_type; 1344*4882a593Smuzhiyun __le16 oid; 1345*4882a593Smuzhiyun __le16 buf_size; 1346*4882a593Smuzhiyun u8 value[1]; 1347*4882a593Smuzhiyun } __packed; 1348*4882a593Smuzhiyun 1349*4882a593Smuzhiyun struct mwifiex_rate_scope { 1350*4882a593Smuzhiyun __le16 type; 1351*4882a593Smuzhiyun __le16 length; 1352*4882a593Smuzhiyun __le16 hr_dsss_rate_bitmap; 1353*4882a593Smuzhiyun __le16 ofdm_rate_bitmap; 1354*4882a593Smuzhiyun __le16 ht_mcs_rate_bitmap[8]; 1355*4882a593Smuzhiyun __le16 vht_mcs_rate_bitmap[8]; 1356*4882a593Smuzhiyun } __packed; 1357*4882a593Smuzhiyun 1358*4882a593Smuzhiyun struct mwifiex_rate_drop_pattern { 1359*4882a593Smuzhiyun __le16 type; 1360*4882a593Smuzhiyun __le16 length; 1361*4882a593Smuzhiyun __le32 rate_drop_mode; 1362*4882a593Smuzhiyun } __packed; 1363*4882a593Smuzhiyun 1364*4882a593Smuzhiyun struct host_cmd_ds_tx_rate_cfg { 1365*4882a593Smuzhiyun __le16 action; 1366*4882a593Smuzhiyun __le16 cfg_index; 1367*4882a593Smuzhiyun } __packed; 1368*4882a593Smuzhiyun 1369*4882a593Smuzhiyun struct mwifiex_power_group { 1370*4882a593Smuzhiyun u8 modulation_class; 1371*4882a593Smuzhiyun u8 first_rate_code; 1372*4882a593Smuzhiyun u8 last_rate_code; 1373*4882a593Smuzhiyun s8 power_step; 1374*4882a593Smuzhiyun s8 power_min; 1375*4882a593Smuzhiyun s8 power_max; 1376*4882a593Smuzhiyun u8 ht_bandwidth; 1377*4882a593Smuzhiyun u8 reserved; 1378*4882a593Smuzhiyun } __packed; 1379*4882a593Smuzhiyun 1380*4882a593Smuzhiyun struct mwifiex_types_power_group { 1381*4882a593Smuzhiyun __le16 type; 1382*4882a593Smuzhiyun __le16 length; 1383*4882a593Smuzhiyun } __packed; 1384*4882a593Smuzhiyun 1385*4882a593Smuzhiyun struct host_cmd_ds_txpwr_cfg { 1386*4882a593Smuzhiyun __le16 action; 1387*4882a593Smuzhiyun __le16 cfg_index; 1388*4882a593Smuzhiyun __le32 mode; 1389*4882a593Smuzhiyun } __packed; 1390*4882a593Smuzhiyun 1391*4882a593Smuzhiyun struct host_cmd_ds_rf_tx_pwr { 1392*4882a593Smuzhiyun __le16 action; 1393*4882a593Smuzhiyun __le16 cur_level; 1394*4882a593Smuzhiyun u8 max_power; 1395*4882a593Smuzhiyun u8 min_power; 1396*4882a593Smuzhiyun } __packed; 1397*4882a593Smuzhiyun 1398*4882a593Smuzhiyun struct host_cmd_ds_rf_ant_mimo { 1399*4882a593Smuzhiyun __le16 action_tx; 1400*4882a593Smuzhiyun __le16 tx_ant_mode; 1401*4882a593Smuzhiyun __le16 action_rx; 1402*4882a593Smuzhiyun __le16 rx_ant_mode; 1403*4882a593Smuzhiyun } __packed; 1404*4882a593Smuzhiyun 1405*4882a593Smuzhiyun struct host_cmd_ds_rf_ant_siso { 1406*4882a593Smuzhiyun __le16 action; 1407*4882a593Smuzhiyun __le16 ant_mode; 1408*4882a593Smuzhiyun } __packed; 1409*4882a593Smuzhiyun 1410*4882a593Smuzhiyun struct host_cmd_ds_tdls_oper { 1411*4882a593Smuzhiyun __le16 tdls_action; 1412*4882a593Smuzhiyun __le16 reason; 1413*4882a593Smuzhiyun u8 peer_mac[ETH_ALEN]; 1414*4882a593Smuzhiyun } __packed; 1415*4882a593Smuzhiyun 1416*4882a593Smuzhiyun struct mwifiex_tdls_config { 1417*4882a593Smuzhiyun __le16 enable; 1418*4882a593Smuzhiyun } __packed; 1419*4882a593Smuzhiyun 1420*4882a593Smuzhiyun struct mwifiex_tdls_config_cs_params { 1421*4882a593Smuzhiyun u8 unit_time; 1422*4882a593Smuzhiyun u8 thr_otherlink; 1423*4882a593Smuzhiyun u8 thr_directlink; 1424*4882a593Smuzhiyun } __packed; 1425*4882a593Smuzhiyun 1426*4882a593Smuzhiyun struct mwifiex_tdls_init_cs_params { 1427*4882a593Smuzhiyun u8 peer_mac[ETH_ALEN]; 1428*4882a593Smuzhiyun u8 primary_chan; 1429*4882a593Smuzhiyun u8 second_chan_offset; 1430*4882a593Smuzhiyun u8 band; 1431*4882a593Smuzhiyun __le16 switch_time; 1432*4882a593Smuzhiyun __le16 switch_timeout; 1433*4882a593Smuzhiyun u8 reg_class; 1434*4882a593Smuzhiyun u8 periodicity; 1435*4882a593Smuzhiyun } __packed; 1436*4882a593Smuzhiyun 1437*4882a593Smuzhiyun struct mwifiex_tdls_stop_cs_params { 1438*4882a593Smuzhiyun u8 peer_mac[ETH_ALEN]; 1439*4882a593Smuzhiyun } __packed; 1440*4882a593Smuzhiyun 1441*4882a593Smuzhiyun struct host_cmd_ds_tdls_config { 1442*4882a593Smuzhiyun __le16 tdls_action; 1443*4882a593Smuzhiyun u8 tdls_data[1]; 1444*4882a593Smuzhiyun } __packed; 1445*4882a593Smuzhiyun 1446*4882a593Smuzhiyun struct mwifiex_chan_desc { 1447*4882a593Smuzhiyun __le16 start_freq; 1448*4882a593Smuzhiyun u8 chan_width; 1449*4882a593Smuzhiyun u8 chan_num; 1450*4882a593Smuzhiyun } __packed; 1451*4882a593Smuzhiyun 1452*4882a593Smuzhiyun struct host_cmd_ds_chan_rpt_req { 1453*4882a593Smuzhiyun struct mwifiex_chan_desc chan_desc; 1454*4882a593Smuzhiyun __le32 msec_dwell_time; 1455*4882a593Smuzhiyun } __packed; 1456*4882a593Smuzhiyun 1457*4882a593Smuzhiyun struct host_cmd_ds_chan_rpt_event { 1458*4882a593Smuzhiyun __le32 result; 1459*4882a593Smuzhiyun __le64 start_tsf; 1460*4882a593Smuzhiyun __le32 duration; 1461*4882a593Smuzhiyun u8 tlvbuf[]; 1462*4882a593Smuzhiyun } __packed; 1463*4882a593Smuzhiyun 1464*4882a593Smuzhiyun struct host_cmd_sdio_sp_rx_aggr_cfg { 1465*4882a593Smuzhiyun u8 action; 1466*4882a593Smuzhiyun u8 enable; 1467*4882a593Smuzhiyun __le16 block_size; 1468*4882a593Smuzhiyun } __packed; 1469*4882a593Smuzhiyun 1470*4882a593Smuzhiyun struct mwifiex_fixed_bcn_param { 1471*4882a593Smuzhiyun __le64 timestamp; 1472*4882a593Smuzhiyun __le16 beacon_period; 1473*4882a593Smuzhiyun __le16 cap_info_bitmap; 1474*4882a593Smuzhiyun } __packed; 1475*4882a593Smuzhiyun 1476*4882a593Smuzhiyun struct mwifiex_event_scan_result { 1477*4882a593Smuzhiyun __le16 event_id; 1478*4882a593Smuzhiyun u8 bss_index; 1479*4882a593Smuzhiyun u8 bss_type; 1480*4882a593Smuzhiyun u8 more_event; 1481*4882a593Smuzhiyun u8 reserved[3]; 1482*4882a593Smuzhiyun __le16 buf_size; 1483*4882a593Smuzhiyun u8 num_of_set; 1484*4882a593Smuzhiyun } __packed; 1485*4882a593Smuzhiyun 1486*4882a593Smuzhiyun struct tx_status_event { 1487*4882a593Smuzhiyun u8 packet_type; 1488*4882a593Smuzhiyun u8 tx_token_id; 1489*4882a593Smuzhiyun u8 status; 1490*4882a593Smuzhiyun } __packed; 1491*4882a593Smuzhiyun 1492*4882a593Smuzhiyun #define MWIFIEX_USER_SCAN_CHAN_MAX 50 1493*4882a593Smuzhiyun 1494*4882a593Smuzhiyun #define MWIFIEX_MAX_SSID_LIST_LENGTH 10 1495*4882a593Smuzhiyun 1496*4882a593Smuzhiyun struct mwifiex_scan_cmd_config { 1497*4882a593Smuzhiyun /* 1498*4882a593Smuzhiyun * BSS mode to be sent in the firmware command 1499*4882a593Smuzhiyun */ 1500*4882a593Smuzhiyun u8 bss_mode; 1501*4882a593Smuzhiyun 1502*4882a593Smuzhiyun /* Specific BSSID used to filter scan results in the firmware */ 1503*4882a593Smuzhiyun u8 specific_bssid[ETH_ALEN]; 1504*4882a593Smuzhiyun 1505*4882a593Smuzhiyun /* Length of TLVs sent in command starting at tlvBuffer */ 1506*4882a593Smuzhiyun u32 tlv_buf_len; 1507*4882a593Smuzhiyun 1508*4882a593Smuzhiyun /* 1509*4882a593Smuzhiyun * SSID TLV(s) and ChanList TLVs to be sent in the firmware command 1510*4882a593Smuzhiyun * 1511*4882a593Smuzhiyun * TLV_TYPE_CHANLIST, mwifiex_ie_types_chan_list_param_set 1512*4882a593Smuzhiyun * WLAN_EID_SSID, mwifiex_ie_types_ssid_param_set 1513*4882a593Smuzhiyun */ 1514*4882a593Smuzhiyun u8 tlv_buf[1]; /* SSID TLV(s) and ChanList TLVs are stored 1515*4882a593Smuzhiyun here */ 1516*4882a593Smuzhiyun } __packed; 1517*4882a593Smuzhiyun 1518*4882a593Smuzhiyun struct mwifiex_user_scan_chan { 1519*4882a593Smuzhiyun u8 chan_number; 1520*4882a593Smuzhiyun u8 radio_type; 1521*4882a593Smuzhiyun u8 scan_type; 1522*4882a593Smuzhiyun u8 reserved; 1523*4882a593Smuzhiyun u32 scan_time; 1524*4882a593Smuzhiyun } __packed; 1525*4882a593Smuzhiyun 1526*4882a593Smuzhiyun struct mwifiex_user_scan_cfg { 1527*4882a593Smuzhiyun /* 1528*4882a593Smuzhiyun * BSS mode to be sent in the firmware command 1529*4882a593Smuzhiyun */ 1530*4882a593Smuzhiyun u8 bss_mode; 1531*4882a593Smuzhiyun /* Configure the number of probe requests for active chan scans */ 1532*4882a593Smuzhiyun u8 num_probes; 1533*4882a593Smuzhiyun u8 reserved; 1534*4882a593Smuzhiyun /* BSSID filter sent in the firmware command to limit the results */ 1535*4882a593Smuzhiyun u8 specific_bssid[ETH_ALEN]; 1536*4882a593Smuzhiyun /* SSID filter list used in the firmware to limit the scan results */ 1537*4882a593Smuzhiyun struct cfg80211_ssid *ssid_list; 1538*4882a593Smuzhiyun u8 num_ssids; 1539*4882a593Smuzhiyun /* Variable number (fixed maximum) of channels to scan up */ 1540*4882a593Smuzhiyun struct mwifiex_user_scan_chan chan_list[MWIFIEX_USER_SCAN_CHAN_MAX]; 1541*4882a593Smuzhiyun u16 scan_chan_gap; 1542*4882a593Smuzhiyun u8 random_mac[ETH_ALEN]; 1543*4882a593Smuzhiyun } __packed; 1544*4882a593Smuzhiyun 1545*4882a593Smuzhiyun #define MWIFIEX_BG_SCAN_CHAN_MAX 38 1546*4882a593Smuzhiyun #define MWIFIEX_BSS_MODE_INFRA 1 1547*4882a593Smuzhiyun #define MWIFIEX_BGSCAN_ACT_GET 0x0000 1548*4882a593Smuzhiyun #define MWIFIEX_BGSCAN_ACT_SET 0x0001 1549*4882a593Smuzhiyun #define MWIFIEX_BGSCAN_ACT_SET_ALL 0xff01 1550*4882a593Smuzhiyun /** ssid match */ 1551*4882a593Smuzhiyun #define MWIFIEX_BGSCAN_SSID_MATCH 0x0001 1552*4882a593Smuzhiyun /** ssid match and RSSI exceeded */ 1553*4882a593Smuzhiyun #define MWIFIEX_BGSCAN_SSID_RSSI_MATCH 0x0004 1554*4882a593Smuzhiyun /**wait for all channel scan to complete to report scan result*/ 1555*4882a593Smuzhiyun #define MWIFIEX_BGSCAN_WAIT_ALL_CHAN_DONE 0x80000000 1556*4882a593Smuzhiyun 1557*4882a593Smuzhiyun struct mwifiex_bg_scan_cfg { 1558*4882a593Smuzhiyun u16 action; 1559*4882a593Smuzhiyun u8 enable; 1560*4882a593Smuzhiyun u8 bss_type; 1561*4882a593Smuzhiyun u8 chan_per_scan; 1562*4882a593Smuzhiyun u32 scan_interval; 1563*4882a593Smuzhiyun u32 report_condition; 1564*4882a593Smuzhiyun u8 num_probes; 1565*4882a593Smuzhiyun u8 rssi_threshold; 1566*4882a593Smuzhiyun u8 snr_threshold; 1567*4882a593Smuzhiyun u16 repeat_count; 1568*4882a593Smuzhiyun u16 start_later; 1569*4882a593Smuzhiyun struct cfg80211_match_set *ssid_list; 1570*4882a593Smuzhiyun u8 num_ssids; 1571*4882a593Smuzhiyun struct mwifiex_user_scan_chan chan_list[MWIFIEX_BG_SCAN_CHAN_MAX]; 1572*4882a593Smuzhiyun u16 scan_chan_gap; 1573*4882a593Smuzhiyun } __packed; 1574*4882a593Smuzhiyun 1575*4882a593Smuzhiyun struct ie_body { 1576*4882a593Smuzhiyun u8 grp_key_oui[4]; 1577*4882a593Smuzhiyun u8 ptk_cnt[2]; 1578*4882a593Smuzhiyun u8 ptk_body[4]; 1579*4882a593Smuzhiyun } __packed; 1580*4882a593Smuzhiyun 1581*4882a593Smuzhiyun struct host_cmd_ds_802_11_scan { 1582*4882a593Smuzhiyun u8 bss_mode; 1583*4882a593Smuzhiyun u8 bssid[ETH_ALEN]; 1584*4882a593Smuzhiyun u8 tlv_buffer[1]; 1585*4882a593Smuzhiyun } __packed; 1586*4882a593Smuzhiyun 1587*4882a593Smuzhiyun struct host_cmd_ds_802_11_scan_rsp { 1588*4882a593Smuzhiyun __le16 bss_descript_size; 1589*4882a593Smuzhiyun u8 number_of_sets; 1590*4882a593Smuzhiyun u8 bss_desc_and_tlv_buffer[1]; 1591*4882a593Smuzhiyun } __packed; 1592*4882a593Smuzhiyun 1593*4882a593Smuzhiyun struct host_cmd_ds_802_11_scan_ext { 1594*4882a593Smuzhiyun u32 reserved; 1595*4882a593Smuzhiyun u8 tlv_buffer[1]; 1596*4882a593Smuzhiyun } __packed; 1597*4882a593Smuzhiyun 1598*4882a593Smuzhiyun struct mwifiex_ie_types_bss_mode { 1599*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1600*4882a593Smuzhiyun u8 bss_mode; 1601*4882a593Smuzhiyun } __packed; 1602*4882a593Smuzhiyun 1603*4882a593Smuzhiyun struct mwifiex_ie_types_bss_scan_rsp { 1604*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1605*4882a593Smuzhiyun u8 bssid[ETH_ALEN]; 1606*4882a593Smuzhiyun u8 frame_body[1]; 1607*4882a593Smuzhiyun } __packed; 1608*4882a593Smuzhiyun 1609*4882a593Smuzhiyun struct mwifiex_ie_types_bss_scan_info { 1610*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1611*4882a593Smuzhiyun __le16 rssi; 1612*4882a593Smuzhiyun __le16 anpi; 1613*4882a593Smuzhiyun u8 cca_busy_fraction; 1614*4882a593Smuzhiyun u8 radio_type; 1615*4882a593Smuzhiyun u8 channel; 1616*4882a593Smuzhiyun u8 reserved; 1617*4882a593Smuzhiyun __le64 tsf; 1618*4882a593Smuzhiyun } __packed; 1619*4882a593Smuzhiyun 1620*4882a593Smuzhiyun struct host_cmd_ds_802_11_bg_scan_config { 1621*4882a593Smuzhiyun __le16 action; 1622*4882a593Smuzhiyun u8 enable; 1623*4882a593Smuzhiyun u8 bss_type; 1624*4882a593Smuzhiyun u8 chan_per_scan; 1625*4882a593Smuzhiyun u8 reserved; 1626*4882a593Smuzhiyun __le16 reserved1; 1627*4882a593Smuzhiyun __le32 scan_interval; 1628*4882a593Smuzhiyun __le32 reserved2; 1629*4882a593Smuzhiyun __le32 report_condition; 1630*4882a593Smuzhiyun __le16 reserved3; 1631*4882a593Smuzhiyun u8 tlv[]; 1632*4882a593Smuzhiyun } __packed; 1633*4882a593Smuzhiyun 1634*4882a593Smuzhiyun struct host_cmd_ds_802_11_bg_scan_query { 1635*4882a593Smuzhiyun u8 flush; 1636*4882a593Smuzhiyun } __packed; 1637*4882a593Smuzhiyun 1638*4882a593Smuzhiyun struct host_cmd_ds_802_11_bg_scan_query_rsp { 1639*4882a593Smuzhiyun __le32 report_condition; 1640*4882a593Smuzhiyun struct host_cmd_ds_802_11_scan_rsp scan_resp; 1641*4882a593Smuzhiyun } __packed; 1642*4882a593Smuzhiyun 1643*4882a593Smuzhiyun struct mwifiex_ietypes_domain_param_set { 1644*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1645*4882a593Smuzhiyun u8 country_code[IEEE80211_COUNTRY_STRING_LEN]; 1646*4882a593Smuzhiyun struct ieee80211_country_ie_triplet triplet[1]; 1647*4882a593Smuzhiyun } __packed; 1648*4882a593Smuzhiyun 1649*4882a593Smuzhiyun struct host_cmd_ds_802_11d_domain_info { 1650*4882a593Smuzhiyun __le16 action; 1651*4882a593Smuzhiyun struct mwifiex_ietypes_domain_param_set domain; 1652*4882a593Smuzhiyun } __packed; 1653*4882a593Smuzhiyun 1654*4882a593Smuzhiyun struct host_cmd_ds_802_11d_domain_info_rsp { 1655*4882a593Smuzhiyun __le16 action; 1656*4882a593Smuzhiyun struct mwifiex_ietypes_domain_param_set domain; 1657*4882a593Smuzhiyun } __packed; 1658*4882a593Smuzhiyun 1659*4882a593Smuzhiyun struct host_cmd_ds_11n_addba_req { 1660*4882a593Smuzhiyun u8 add_req_result; 1661*4882a593Smuzhiyun u8 peer_mac_addr[ETH_ALEN]; 1662*4882a593Smuzhiyun u8 dialog_token; 1663*4882a593Smuzhiyun __le16 block_ack_param_set; 1664*4882a593Smuzhiyun __le16 block_ack_tmo; 1665*4882a593Smuzhiyun __le16 ssn; 1666*4882a593Smuzhiyun } __packed; 1667*4882a593Smuzhiyun 1668*4882a593Smuzhiyun struct host_cmd_ds_11n_addba_rsp { 1669*4882a593Smuzhiyun u8 add_rsp_result; 1670*4882a593Smuzhiyun u8 peer_mac_addr[ETH_ALEN]; 1671*4882a593Smuzhiyun u8 dialog_token; 1672*4882a593Smuzhiyun __le16 status_code; 1673*4882a593Smuzhiyun __le16 block_ack_param_set; 1674*4882a593Smuzhiyun __le16 block_ack_tmo; 1675*4882a593Smuzhiyun __le16 ssn; 1676*4882a593Smuzhiyun } __packed; 1677*4882a593Smuzhiyun 1678*4882a593Smuzhiyun struct host_cmd_ds_11n_delba { 1679*4882a593Smuzhiyun u8 del_result; 1680*4882a593Smuzhiyun u8 peer_mac_addr[ETH_ALEN]; 1681*4882a593Smuzhiyun __le16 del_ba_param_set; 1682*4882a593Smuzhiyun __le16 reason_code; 1683*4882a593Smuzhiyun u8 reserved; 1684*4882a593Smuzhiyun } __packed; 1685*4882a593Smuzhiyun 1686*4882a593Smuzhiyun struct host_cmd_ds_11n_batimeout { 1687*4882a593Smuzhiyun u8 tid; 1688*4882a593Smuzhiyun u8 peer_mac_addr[ETH_ALEN]; 1689*4882a593Smuzhiyun u8 origninator; 1690*4882a593Smuzhiyun } __packed; 1691*4882a593Smuzhiyun 1692*4882a593Smuzhiyun struct host_cmd_ds_11n_cfg { 1693*4882a593Smuzhiyun __le16 action; 1694*4882a593Smuzhiyun __le16 ht_tx_cap; 1695*4882a593Smuzhiyun __le16 ht_tx_info; 1696*4882a593Smuzhiyun __le16 misc_config; /* Needed for 802.11AC cards only */ 1697*4882a593Smuzhiyun } __packed; 1698*4882a593Smuzhiyun 1699*4882a593Smuzhiyun struct host_cmd_ds_txbuf_cfg { 1700*4882a593Smuzhiyun __le16 action; 1701*4882a593Smuzhiyun __le16 buff_size; 1702*4882a593Smuzhiyun __le16 mp_end_port; /* SDIO only, reserved for other interfacces */ 1703*4882a593Smuzhiyun __le16 reserved3; 1704*4882a593Smuzhiyun } __packed; 1705*4882a593Smuzhiyun 1706*4882a593Smuzhiyun struct host_cmd_ds_amsdu_aggr_ctrl { 1707*4882a593Smuzhiyun __le16 action; 1708*4882a593Smuzhiyun __le16 enable; 1709*4882a593Smuzhiyun __le16 curr_buf_size; 1710*4882a593Smuzhiyun } __packed; 1711*4882a593Smuzhiyun 1712*4882a593Smuzhiyun struct host_cmd_ds_sta_deauth { 1713*4882a593Smuzhiyun u8 mac[ETH_ALEN]; 1714*4882a593Smuzhiyun __le16 reason; 1715*4882a593Smuzhiyun } __packed; 1716*4882a593Smuzhiyun 1717*4882a593Smuzhiyun struct mwifiex_ie_types_sta_info { 1718*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1719*4882a593Smuzhiyun u8 mac[ETH_ALEN]; 1720*4882a593Smuzhiyun u8 power_mfg_status; 1721*4882a593Smuzhiyun s8 rssi; 1722*4882a593Smuzhiyun }; 1723*4882a593Smuzhiyun 1724*4882a593Smuzhiyun struct host_cmd_ds_sta_list { 1725*4882a593Smuzhiyun __le16 sta_count; 1726*4882a593Smuzhiyun u8 tlv[]; 1727*4882a593Smuzhiyun } __packed; 1728*4882a593Smuzhiyun 1729*4882a593Smuzhiyun struct mwifiex_ie_types_pwr_capability { 1730*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1731*4882a593Smuzhiyun s8 min_pwr; 1732*4882a593Smuzhiyun s8 max_pwr; 1733*4882a593Smuzhiyun }; 1734*4882a593Smuzhiyun 1735*4882a593Smuzhiyun struct mwifiex_ie_types_local_pwr_constraint { 1736*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1737*4882a593Smuzhiyun u8 chan; 1738*4882a593Smuzhiyun u8 constraint; 1739*4882a593Smuzhiyun }; 1740*4882a593Smuzhiyun 1741*4882a593Smuzhiyun struct mwifiex_ie_types_wmm_param_set { 1742*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1743*4882a593Smuzhiyun u8 wmm_ie[1]; 1744*4882a593Smuzhiyun } __packed; 1745*4882a593Smuzhiyun 1746*4882a593Smuzhiyun struct mwifiex_ie_types_mgmt_frame { 1747*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1748*4882a593Smuzhiyun __le16 frame_control; 1749*4882a593Smuzhiyun u8 frame_contents[]; 1750*4882a593Smuzhiyun }; 1751*4882a593Smuzhiyun 1752*4882a593Smuzhiyun struct mwifiex_ie_types_wmm_queue_status { 1753*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1754*4882a593Smuzhiyun u8 queue_index; 1755*4882a593Smuzhiyun u8 disabled; 1756*4882a593Smuzhiyun __le16 medium_time; 1757*4882a593Smuzhiyun u8 flow_required; 1758*4882a593Smuzhiyun u8 flow_created; 1759*4882a593Smuzhiyun u32 reserved; 1760*4882a593Smuzhiyun }; 1761*4882a593Smuzhiyun 1762*4882a593Smuzhiyun struct ieee_types_vendor_header { 1763*4882a593Smuzhiyun u8 element_id; 1764*4882a593Smuzhiyun u8 len; 1765*4882a593Smuzhiyun struct { 1766*4882a593Smuzhiyun u8 oui[3]; 1767*4882a593Smuzhiyun u8 oui_type; 1768*4882a593Smuzhiyun } __packed oui; 1769*4882a593Smuzhiyun } __packed; 1770*4882a593Smuzhiyun 1771*4882a593Smuzhiyun struct ieee_types_wmm_parameter { 1772*4882a593Smuzhiyun /* 1773*4882a593Smuzhiyun * WMM Parameter IE - Vendor Specific Header: 1774*4882a593Smuzhiyun * element_id [221/0xdd] 1775*4882a593Smuzhiyun * Len [24] 1776*4882a593Smuzhiyun * Oui [00:50:f2] 1777*4882a593Smuzhiyun * OuiType [2] 1778*4882a593Smuzhiyun * OuiSubType [1] 1779*4882a593Smuzhiyun * Version [1] 1780*4882a593Smuzhiyun */ 1781*4882a593Smuzhiyun struct ieee_types_vendor_header vend_hdr; 1782*4882a593Smuzhiyun u8 oui_subtype; 1783*4882a593Smuzhiyun u8 version; 1784*4882a593Smuzhiyun 1785*4882a593Smuzhiyun u8 qos_info_bitmap; 1786*4882a593Smuzhiyun u8 reserved; 1787*4882a593Smuzhiyun struct ieee_types_wmm_ac_parameters ac_params[IEEE80211_NUM_ACS]; 1788*4882a593Smuzhiyun } __packed; 1789*4882a593Smuzhiyun 1790*4882a593Smuzhiyun struct ieee_types_wmm_info { 1791*4882a593Smuzhiyun 1792*4882a593Smuzhiyun /* 1793*4882a593Smuzhiyun * WMM Info IE - Vendor Specific Header: 1794*4882a593Smuzhiyun * element_id [221/0xdd] 1795*4882a593Smuzhiyun * Len [7] 1796*4882a593Smuzhiyun * Oui [00:50:f2] 1797*4882a593Smuzhiyun * OuiType [2] 1798*4882a593Smuzhiyun * OuiSubType [0] 1799*4882a593Smuzhiyun * Version [1] 1800*4882a593Smuzhiyun */ 1801*4882a593Smuzhiyun struct ieee_types_vendor_header vend_hdr; 1802*4882a593Smuzhiyun u8 oui_subtype; 1803*4882a593Smuzhiyun u8 version; 1804*4882a593Smuzhiyun 1805*4882a593Smuzhiyun u8 qos_info_bitmap; 1806*4882a593Smuzhiyun } __packed; 1807*4882a593Smuzhiyun 1808*4882a593Smuzhiyun struct host_cmd_ds_wmm_get_status { 1809*4882a593Smuzhiyun u8 queue_status_tlv[sizeof(struct mwifiex_ie_types_wmm_queue_status) * 1810*4882a593Smuzhiyun IEEE80211_NUM_ACS]; 1811*4882a593Smuzhiyun u8 wmm_param_tlv[sizeof(struct ieee_types_wmm_parameter) + 2]; 1812*4882a593Smuzhiyun } __packed; 1813*4882a593Smuzhiyun 1814*4882a593Smuzhiyun struct mwifiex_wmm_ac_status { 1815*4882a593Smuzhiyun u8 disabled; 1816*4882a593Smuzhiyun u8 flow_required; 1817*4882a593Smuzhiyun u8 flow_created; 1818*4882a593Smuzhiyun }; 1819*4882a593Smuzhiyun 1820*4882a593Smuzhiyun struct mwifiex_ie_types_htcap { 1821*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1822*4882a593Smuzhiyun struct ieee80211_ht_cap ht_cap; 1823*4882a593Smuzhiyun } __packed; 1824*4882a593Smuzhiyun 1825*4882a593Smuzhiyun struct mwifiex_ie_types_vhtcap { 1826*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1827*4882a593Smuzhiyun struct ieee80211_vht_cap vht_cap; 1828*4882a593Smuzhiyun } __packed; 1829*4882a593Smuzhiyun 1830*4882a593Smuzhiyun struct mwifiex_ie_types_aid { 1831*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1832*4882a593Smuzhiyun __le16 aid; 1833*4882a593Smuzhiyun } __packed; 1834*4882a593Smuzhiyun 1835*4882a593Smuzhiyun struct mwifiex_ie_types_oper_mode_ntf { 1836*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1837*4882a593Smuzhiyun u8 oper_mode; 1838*4882a593Smuzhiyun } __packed; 1839*4882a593Smuzhiyun 1840*4882a593Smuzhiyun /* VHT Operations IE */ 1841*4882a593Smuzhiyun struct mwifiex_ie_types_vht_oper { 1842*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1843*4882a593Smuzhiyun u8 chan_width; 1844*4882a593Smuzhiyun u8 chan_center_freq_1; 1845*4882a593Smuzhiyun u8 chan_center_freq_2; 1846*4882a593Smuzhiyun /* Basic MCS set map, each 2 bits stands for a NSS */ 1847*4882a593Smuzhiyun __le16 basic_mcs_map; 1848*4882a593Smuzhiyun } __packed; 1849*4882a593Smuzhiyun 1850*4882a593Smuzhiyun struct mwifiex_ie_types_wmmcap { 1851*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1852*4882a593Smuzhiyun struct mwifiex_types_wmm_info wmm_info; 1853*4882a593Smuzhiyun } __packed; 1854*4882a593Smuzhiyun 1855*4882a593Smuzhiyun struct mwifiex_ie_types_htinfo { 1856*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1857*4882a593Smuzhiyun struct ieee80211_ht_operation ht_oper; 1858*4882a593Smuzhiyun } __packed; 1859*4882a593Smuzhiyun 1860*4882a593Smuzhiyun struct mwifiex_ie_types_2040bssco { 1861*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1862*4882a593Smuzhiyun u8 bss_co_2040; 1863*4882a593Smuzhiyun } __packed; 1864*4882a593Smuzhiyun 1865*4882a593Smuzhiyun struct mwifiex_ie_types_extcap { 1866*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1867*4882a593Smuzhiyun u8 ext_capab[]; 1868*4882a593Smuzhiyun } __packed; 1869*4882a593Smuzhiyun 1870*4882a593Smuzhiyun struct host_cmd_ds_mem_access { 1871*4882a593Smuzhiyun __le16 action; 1872*4882a593Smuzhiyun __le16 reserved; 1873*4882a593Smuzhiyun __le32 addr; 1874*4882a593Smuzhiyun __le32 value; 1875*4882a593Smuzhiyun } __packed; 1876*4882a593Smuzhiyun 1877*4882a593Smuzhiyun struct mwifiex_ie_types_qos_info { 1878*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1879*4882a593Smuzhiyun u8 qos_info; 1880*4882a593Smuzhiyun } __packed; 1881*4882a593Smuzhiyun 1882*4882a593Smuzhiyun struct host_cmd_ds_mac_reg_access { 1883*4882a593Smuzhiyun __le16 action; 1884*4882a593Smuzhiyun __le16 offset; 1885*4882a593Smuzhiyun __le32 value; 1886*4882a593Smuzhiyun } __packed; 1887*4882a593Smuzhiyun 1888*4882a593Smuzhiyun struct host_cmd_ds_bbp_reg_access { 1889*4882a593Smuzhiyun __le16 action; 1890*4882a593Smuzhiyun __le16 offset; 1891*4882a593Smuzhiyun u8 value; 1892*4882a593Smuzhiyun u8 reserved[3]; 1893*4882a593Smuzhiyun } __packed; 1894*4882a593Smuzhiyun 1895*4882a593Smuzhiyun struct host_cmd_ds_rf_reg_access { 1896*4882a593Smuzhiyun __le16 action; 1897*4882a593Smuzhiyun __le16 offset; 1898*4882a593Smuzhiyun u8 value; 1899*4882a593Smuzhiyun u8 reserved[3]; 1900*4882a593Smuzhiyun } __packed; 1901*4882a593Smuzhiyun 1902*4882a593Smuzhiyun struct host_cmd_ds_pmic_reg_access { 1903*4882a593Smuzhiyun __le16 action; 1904*4882a593Smuzhiyun __le16 offset; 1905*4882a593Smuzhiyun u8 value; 1906*4882a593Smuzhiyun u8 reserved[3]; 1907*4882a593Smuzhiyun } __packed; 1908*4882a593Smuzhiyun 1909*4882a593Smuzhiyun struct host_cmd_ds_802_11_eeprom_access { 1910*4882a593Smuzhiyun __le16 action; 1911*4882a593Smuzhiyun 1912*4882a593Smuzhiyun __le16 offset; 1913*4882a593Smuzhiyun __le16 byte_count; 1914*4882a593Smuzhiyun u8 value; 1915*4882a593Smuzhiyun } __packed; 1916*4882a593Smuzhiyun 1917*4882a593Smuzhiyun struct mwifiex_assoc_event { 1918*4882a593Smuzhiyun u8 sta_addr[ETH_ALEN]; 1919*4882a593Smuzhiyun __le16 type; 1920*4882a593Smuzhiyun __le16 len; 1921*4882a593Smuzhiyun __le16 frame_control; 1922*4882a593Smuzhiyun __le16 cap_info; 1923*4882a593Smuzhiyun __le16 listen_interval; 1924*4882a593Smuzhiyun u8 data[]; 1925*4882a593Smuzhiyun } __packed; 1926*4882a593Smuzhiyun 1927*4882a593Smuzhiyun struct host_cmd_ds_sys_config { 1928*4882a593Smuzhiyun __le16 action; 1929*4882a593Smuzhiyun u8 tlv[]; 1930*4882a593Smuzhiyun }; 1931*4882a593Smuzhiyun 1932*4882a593Smuzhiyun struct host_cmd_11ac_vht_cfg { 1933*4882a593Smuzhiyun __le16 action; 1934*4882a593Smuzhiyun u8 band_config; 1935*4882a593Smuzhiyun u8 misc_config; 1936*4882a593Smuzhiyun __le32 cap_info; 1937*4882a593Smuzhiyun __le32 mcs_tx_set; 1938*4882a593Smuzhiyun __le32 mcs_rx_set; 1939*4882a593Smuzhiyun } __packed; 1940*4882a593Smuzhiyun 1941*4882a593Smuzhiyun struct host_cmd_tlv_akmp { 1942*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1943*4882a593Smuzhiyun __le16 key_mgmt; 1944*4882a593Smuzhiyun __le16 key_mgmt_operation; 1945*4882a593Smuzhiyun } __packed; 1946*4882a593Smuzhiyun 1947*4882a593Smuzhiyun struct host_cmd_tlv_pwk_cipher { 1948*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1949*4882a593Smuzhiyun __le16 proto; 1950*4882a593Smuzhiyun u8 cipher; 1951*4882a593Smuzhiyun u8 reserved; 1952*4882a593Smuzhiyun } __packed; 1953*4882a593Smuzhiyun 1954*4882a593Smuzhiyun struct host_cmd_tlv_gwk_cipher { 1955*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1956*4882a593Smuzhiyun u8 cipher; 1957*4882a593Smuzhiyun u8 reserved; 1958*4882a593Smuzhiyun } __packed; 1959*4882a593Smuzhiyun 1960*4882a593Smuzhiyun struct host_cmd_tlv_passphrase { 1961*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1962*4882a593Smuzhiyun u8 passphrase[]; 1963*4882a593Smuzhiyun } __packed; 1964*4882a593Smuzhiyun 1965*4882a593Smuzhiyun struct host_cmd_tlv_wep_key { 1966*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1967*4882a593Smuzhiyun u8 key_index; 1968*4882a593Smuzhiyun u8 is_default; 1969*4882a593Smuzhiyun u8 key[1]; 1970*4882a593Smuzhiyun }; 1971*4882a593Smuzhiyun 1972*4882a593Smuzhiyun struct host_cmd_tlv_auth_type { 1973*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1974*4882a593Smuzhiyun u8 auth_type; 1975*4882a593Smuzhiyun } __packed; 1976*4882a593Smuzhiyun 1977*4882a593Smuzhiyun struct host_cmd_tlv_encrypt_protocol { 1978*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1979*4882a593Smuzhiyun __le16 proto; 1980*4882a593Smuzhiyun } __packed; 1981*4882a593Smuzhiyun 1982*4882a593Smuzhiyun struct host_cmd_tlv_ssid { 1983*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1984*4882a593Smuzhiyun u8 ssid[]; 1985*4882a593Smuzhiyun } __packed; 1986*4882a593Smuzhiyun 1987*4882a593Smuzhiyun struct host_cmd_tlv_rates { 1988*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1989*4882a593Smuzhiyun u8 rates[]; 1990*4882a593Smuzhiyun } __packed; 1991*4882a593Smuzhiyun 1992*4882a593Smuzhiyun struct mwifiex_ie_types_bssid_list { 1993*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1994*4882a593Smuzhiyun u8 bssid[ETH_ALEN]; 1995*4882a593Smuzhiyun } __packed; 1996*4882a593Smuzhiyun 1997*4882a593Smuzhiyun struct host_cmd_tlv_bcast_ssid { 1998*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 1999*4882a593Smuzhiyun u8 bcast_ctl; 2000*4882a593Smuzhiyun } __packed; 2001*4882a593Smuzhiyun 2002*4882a593Smuzhiyun struct host_cmd_tlv_beacon_period { 2003*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 2004*4882a593Smuzhiyun __le16 period; 2005*4882a593Smuzhiyun } __packed; 2006*4882a593Smuzhiyun 2007*4882a593Smuzhiyun struct host_cmd_tlv_dtim_period { 2008*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 2009*4882a593Smuzhiyun u8 period; 2010*4882a593Smuzhiyun } __packed; 2011*4882a593Smuzhiyun 2012*4882a593Smuzhiyun struct host_cmd_tlv_frag_threshold { 2013*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 2014*4882a593Smuzhiyun __le16 frag_thr; 2015*4882a593Smuzhiyun } __packed; 2016*4882a593Smuzhiyun 2017*4882a593Smuzhiyun struct host_cmd_tlv_rts_threshold { 2018*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 2019*4882a593Smuzhiyun __le16 rts_thr; 2020*4882a593Smuzhiyun } __packed; 2021*4882a593Smuzhiyun 2022*4882a593Smuzhiyun struct host_cmd_tlv_retry_limit { 2023*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 2024*4882a593Smuzhiyun u8 limit; 2025*4882a593Smuzhiyun } __packed; 2026*4882a593Smuzhiyun 2027*4882a593Smuzhiyun struct host_cmd_tlv_mac_addr { 2028*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 2029*4882a593Smuzhiyun u8 mac_addr[ETH_ALEN]; 2030*4882a593Smuzhiyun } __packed; 2031*4882a593Smuzhiyun 2032*4882a593Smuzhiyun struct host_cmd_tlv_channel_band { 2033*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 2034*4882a593Smuzhiyun u8 band_config; 2035*4882a593Smuzhiyun u8 channel; 2036*4882a593Smuzhiyun } __packed; 2037*4882a593Smuzhiyun 2038*4882a593Smuzhiyun struct host_cmd_tlv_ageout_timer { 2039*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 2040*4882a593Smuzhiyun __le32 sta_ao_timer; 2041*4882a593Smuzhiyun } __packed; 2042*4882a593Smuzhiyun 2043*4882a593Smuzhiyun struct host_cmd_tlv_power_constraint { 2044*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 2045*4882a593Smuzhiyun u8 constraint; 2046*4882a593Smuzhiyun } __packed; 2047*4882a593Smuzhiyun 2048*4882a593Smuzhiyun struct mwifiex_ie_types_btcoex_scan_time { 2049*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 2050*4882a593Smuzhiyun u8 coex_scan; 2051*4882a593Smuzhiyun u8 reserved; 2052*4882a593Smuzhiyun __le16 min_scan_time; 2053*4882a593Smuzhiyun __le16 max_scan_time; 2054*4882a593Smuzhiyun } __packed; 2055*4882a593Smuzhiyun 2056*4882a593Smuzhiyun struct mwifiex_ie_types_btcoex_aggr_win_size { 2057*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 2058*4882a593Smuzhiyun u8 coex_win_size; 2059*4882a593Smuzhiyun u8 tx_win_size; 2060*4882a593Smuzhiyun u8 rx_win_size; 2061*4882a593Smuzhiyun u8 reserved; 2062*4882a593Smuzhiyun } __packed; 2063*4882a593Smuzhiyun 2064*4882a593Smuzhiyun struct mwifiex_ie_types_robust_coex { 2065*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 2066*4882a593Smuzhiyun __le32 mode; 2067*4882a593Smuzhiyun } __packed; 2068*4882a593Smuzhiyun 2069*4882a593Smuzhiyun struct host_cmd_ds_version_ext { 2070*4882a593Smuzhiyun u8 version_str_sel; 2071*4882a593Smuzhiyun char version_str[128]; 2072*4882a593Smuzhiyun } __packed; 2073*4882a593Smuzhiyun 2074*4882a593Smuzhiyun struct host_cmd_ds_mgmt_frame_reg { 2075*4882a593Smuzhiyun __le16 action; 2076*4882a593Smuzhiyun __le32 mask; 2077*4882a593Smuzhiyun } __packed; 2078*4882a593Smuzhiyun 2079*4882a593Smuzhiyun struct host_cmd_ds_p2p_mode_cfg { 2080*4882a593Smuzhiyun __le16 action; 2081*4882a593Smuzhiyun __le16 mode; 2082*4882a593Smuzhiyun } __packed; 2083*4882a593Smuzhiyun 2084*4882a593Smuzhiyun struct host_cmd_ds_remain_on_chan { 2085*4882a593Smuzhiyun __le16 action; 2086*4882a593Smuzhiyun u8 status; 2087*4882a593Smuzhiyun u8 reserved; 2088*4882a593Smuzhiyun u8 band_cfg; 2089*4882a593Smuzhiyun u8 channel; 2090*4882a593Smuzhiyun __le32 duration; 2091*4882a593Smuzhiyun } __packed; 2092*4882a593Smuzhiyun 2093*4882a593Smuzhiyun struct host_cmd_ds_802_11_ibss_status { 2094*4882a593Smuzhiyun __le16 action; 2095*4882a593Smuzhiyun __le16 enable; 2096*4882a593Smuzhiyun u8 bssid[ETH_ALEN]; 2097*4882a593Smuzhiyun __le16 beacon_interval; 2098*4882a593Smuzhiyun __le16 atim_window; 2099*4882a593Smuzhiyun __le16 use_g_rate_protect; 2100*4882a593Smuzhiyun } __packed; 2101*4882a593Smuzhiyun 2102*4882a593Smuzhiyun struct mwifiex_fw_mef_entry { 2103*4882a593Smuzhiyun u8 mode; 2104*4882a593Smuzhiyun u8 action; 2105*4882a593Smuzhiyun __le16 exprsize; 2106*4882a593Smuzhiyun u8 expr[]; 2107*4882a593Smuzhiyun } __packed; 2108*4882a593Smuzhiyun 2109*4882a593Smuzhiyun struct host_cmd_ds_mef_cfg { 2110*4882a593Smuzhiyun __le32 criteria; 2111*4882a593Smuzhiyun __le16 num_entries; 2112*4882a593Smuzhiyun struct mwifiex_fw_mef_entry mef_entry[]; 2113*4882a593Smuzhiyun } __packed; 2114*4882a593Smuzhiyun 2115*4882a593Smuzhiyun #define CONNECTION_TYPE_INFRA 0 2116*4882a593Smuzhiyun #define CONNECTION_TYPE_ADHOC 1 2117*4882a593Smuzhiyun #define CONNECTION_TYPE_AP 2 2118*4882a593Smuzhiyun 2119*4882a593Smuzhiyun struct host_cmd_ds_set_bss_mode { 2120*4882a593Smuzhiyun u8 con_type; 2121*4882a593Smuzhiyun } __packed; 2122*4882a593Smuzhiyun 2123*4882a593Smuzhiyun struct host_cmd_ds_pcie_details { 2124*4882a593Smuzhiyun /* TX buffer descriptor ring address */ 2125*4882a593Smuzhiyun __le32 txbd_addr_lo; 2126*4882a593Smuzhiyun __le32 txbd_addr_hi; 2127*4882a593Smuzhiyun /* TX buffer descriptor ring count */ 2128*4882a593Smuzhiyun __le32 txbd_count; 2129*4882a593Smuzhiyun 2130*4882a593Smuzhiyun /* RX buffer descriptor ring address */ 2131*4882a593Smuzhiyun __le32 rxbd_addr_lo; 2132*4882a593Smuzhiyun __le32 rxbd_addr_hi; 2133*4882a593Smuzhiyun /* RX buffer descriptor ring count */ 2134*4882a593Smuzhiyun __le32 rxbd_count; 2135*4882a593Smuzhiyun 2136*4882a593Smuzhiyun /* Event buffer descriptor ring address */ 2137*4882a593Smuzhiyun __le32 evtbd_addr_lo; 2138*4882a593Smuzhiyun __le32 evtbd_addr_hi; 2139*4882a593Smuzhiyun /* Event buffer descriptor ring count */ 2140*4882a593Smuzhiyun __le32 evtbd_count; 2141*4882a593Smuzhiyun 2142*4882a593Smuzhiyun /* Sleep cookie buffer physical address */ 2143*4882a593Smuzhiyun __le32 sleep_cookie_addr_lo; 2144*4882a593Smuzhiyun __le32 sleep_cookie_addr_hi; 2145*4882a593Smuzhiyun } __packed; 2146*4882a593Smuzhiyun 2147*4882a593Smuzhiyun struct mwifiex_ie_types_rssi_threshold { 2148*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 2149*4882a593Smuzhiyun u8 abs_value; 2150*4882a593Smuzhiyun u8 evt_freq; 2151*4882a593Smuzhiyun } __packed; 2152*4882a593Smuzhiyun 2153*4882a593Smuzhiyun #define MWIFIEX_DFS_REC_HDR_LEN 8 2154*4882a593Smuzhiyun #define MWIFIEX_DFS_REC_HDR_NUM 10 2155*4882a593Smuzhiyun #define MWIFIEX_BIN_COUNTER_LEN 7 2156*4882a593Smuzhiyun 2157*4882a593Smuzhiyun struct mwifiex_radar_det_event { 2158*4882a593Smuzhiyun __le32 detect_count; 2159*4882a593Smuzhiyun u8 reg_domain; /*1=fcc, 2=etsi, 3=mic*/ 2160*4882a593Smuzhiyun u8 det_type; /*0=none, 1=pw(chirp), 2=pri(radar)*/ 2161*4882a593Smuzhiyun __le16 pw_chirp_type; 2162*4882a593Smuzhiyun u8 pw_chirp_idx; 2163*4882a593Smuzhiyun u8 pw_value; 2164*4882a593Smuzhiyun u8 pri_radar_type; 2165*4882a593Smuzhiyun u8 pri_bincnt; 2166*4882a593Smuzhiyun u8 bin_counter[MWIFIEX_BIN_COUNTER_LEN]; 2167*4882a593Smuzhiyun u8 num_dfs_records; 2168*4882a593Smuzhiyun u8 dfs_record_hdr[MWIFIEX_DFS_REC_HDR_NUM][MWIFIEX_DFS_REC_HDR_LEN]; 2169*4882a593Smuzhiyun __le32 passed; 2170*4882a593Smuzhiyun } __packed; 2171*4882a593Smuzhiyun 2172*4882a593Smuzhiyun struct mwifiex_ie_types_multi_chan_info { 2173*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 2174*4882a593Smuzhiyun __le16 status; 2175*4882a593Smuzhiyun u8 tlv_buffer[]; 2176*4882a593Smuzhiyun } __packed; 2177*4882a593Smuzhiyun 2178*4882a593Smuzhiyun struct mwifiex_ie_types_mc_group_info { 2179*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 2180*4882a593Smuzhiyun u8 chan_group_id; 2181*4882a593Smuzhiyun u8 chan_buf_weight; 2182*4882a593Smuzhiyun u8 band_config; 2183*4882a593Smuzhiyun u8 chan_num; 2184*4882a593Smuzhiyun __le32 chan_time; 2185*4882a593Smuzhiyun __le32 reserved; 2186*4882a593Smuzhiyun union { 2187*4882a593Smuzhiyun u8 sdio_func_num; 2188*4882a593Smuzhiyun u8 usb_ep_num; 2189*4882a593Smuzhiyun } hid_num; 2190*4882a593Smuzhiyun u8 intf_num; 2191*4882a593Smuzhiyun u8 bss_type_numlist[]; 2192*4882a593Smuzhiyun } __packed; 2193*4882a593Smuzhiyun 2194*4882a593Smuzhiyun struct meas_rpt_map { 2195*4882a593Smuzhiyun u8 rssi:3; 2196*4882a593Smuzhiyun u8 unmeasured:1; 2197*4882a593Smuzhiyun u8 radar:1; 2198*4882a593Smuzhiyun u8 unidentified_sig:1; 2199*4882a593Smuzhiyun u8 ofdm_preamble:1; 2200*4882a593Smuzhiyun u8 bss:1; 2201*4882a593Smuzhiyun } __packed; 2202*4882a593Smuzhiyun 2203*4882a593Smuzhiyun struct mwifiex_ie_types_chan_rpt_data { 2204*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 2205*4882a593Smuzhiyun struct meas_rpt_map map; 2206*4882a593Smuzhiyun } __packed; 2207*4882a593Smuzhiyun 2208*4882a593Smuzhiyun struct host_cmd_ds_802_11_subsc_evt { 2209*4882a593Smuzhiyun __le16 action; 2210*4882a593Smuzhiyun __le16 events; 2211*4882a593Smuzhiyun } __packed; 2212*4882a593Smuzhiyun 2213*4882a593Smuzhiyun struct chan_switch_result { 2214*4882a593Smuzhiyun u8 cur_chan; 2215*4882a593Smuzhiyun u8 status; 2216*4882a593Smuzhiyun u8 reason; 2217*4882a593Smuzhiyun } __packed; 2218*4882a593Smuzhiyun 2219*4882a593Smuzhiyun struct mwifiex_tdls_generic_event { 2220*4882a593Smuzhiyun __le16 type; 2221*4882a593Smuzhiyun u8 peer_mac[ETH_ALEN]; 2222*4882a593Smuzhiyun union { 2223*4882a593Smuzhiyun struct chan_switch_result switch_result; 2224*4882a593Smuzhiyun u8 cs_stop_reason; 2225*4882a593Smuzhiyun __le16 reason_code; 2226*4882a593Smuzhiyun __le16 reserved; 2227*4882a593Smuzhiyun } u; 2228*4882a593Smuzhiyun } __packed; 2229*4882a593Smuzhiyun 2230*4882a593Smuzhiyun struct mwifiex_ie { 2231*4882a593Smuzhiyun __le16 ie_index; 2232*4882a593Smuzhiyun __le16 mgmt_subtype_mask; 2233*4882a593Smuzhiyun __le16 ie_length; 2234*4882a593Smuzhiyun u8 ie_buffer[IEEE_MAX_IE_SIZE]; 2235*4882a593Smuzhiyun } __packed; 2236*4882a593Smuzhiyun 2237*4882a593Smuzhiyun #define MAX_MGMT_IE_INDEX 16 2238*4882a593Smuzhiyun struct mwifiex_ie_list { 2239*4882a593Smuzhiyun __le16 type; 2240*4882a593Smuzhiyun __le16 len; 2241*4882a593Smuzhiyun struct mwifiex_ie ie_list[MAX_MGMT_IE_INDEX]; 2242*4882a593Smuzhiyun } __packed; 2243*4882a593Smuzhiyun 2244*4882a593Smuzhiyun struct coalesce_filt_field_param { 2245*4882a593Smuzhiyun u8 operation; 2246*4882a593Smuzhiyun u8 operand_len; 2247*4882a593Smuzhiyun __le16 offset; 2248*4882a593Smuzhiyun u8 operand_byte_stream[4]; 2249*4882a593Smuzhiyun }; 2250*4882a593Smuzhiyun 2251*4882a593Smuzhiyun struct coalesce_receive_filt_rule { 2252*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 2253*4882a593Smuzhiyun u8 num_of_fields; 2254*4882a593Smuzhiyun u8 pkt_type; 2255*4882a593Smuzhiyun __le16 max_coalescing_delay; 2256*4882a593Smuzhiyun struct coalesce_filt_field_param params[]; 2257*4882a593Smuzhiyun } __packed; 2258*4882a593Smuzhiyun 2259*4882a593Smuzhiyun struct host_cmd_ds_coalesce_cfg { 2260*4882a593Smuzhiyun __le16 action; 2261*4882a593Smuzhiyun __le16 num_of_rules; 2262*4882a593Smuzhiyun struct coalesce_receive_filt_rule rule[]; 2263*4882a593Smuzhiyun } __packed; 2264*4882a593Smuzhiyun 2265*4882a593Smuzhiyun struct host_cmd_ds_multi_chan_policy { 2266*4882a593Smuzhiyun __le16 action; 2267*4882a593Smuzhiyun __le16 policy; 2268*4882a593Smuzhiyun } __packed; 2269*4882a593Smuzhiyun 2270*4882a593Smuzhiyun struct host_cmd_ds_robust_coex { 2271*4882a593Smuzhiyun __le16 action; 2272*4882a593Smuzhiyun __le16 reserved; 2273*4882a593Smuzhiyun } __packed; 2274*4882a593Smuzhiyun 2275*4882a593Smuzhiyun struct host_cmd_ds_wakeup_reason { 2276*4882a593Smuzhiyun __le16 wakeup_reason; 2277*4882a593Smuzhiyun } __packed; 2278*4882a593Smuzhiyun 2279*4882a593Smuzhiyun struct host_cmd_ds_gtk_rekey_params { 2280*4882a593Smuzhiyun __le16 action; 2281*4882a593Smuzhiyun u8 kck[NL80211_KCK_LEN]; 2282*4882a593Smuzhiyun u8 kek[NL80211_KEK_LEN]; 2283*4882a593Smuzhiyun __le32 replay_ctr_low; 2284*4882a593Smuzhiyun __le32 replay_ctr_high; 2285*4882a593Smuzhiyun } __packed; 2286*4882a593Smuzhiyun 2287*4882a593Smuzhiyun struct host_cmd_ds_chan_region_cfg { 2288*4882a593Smuzhiyun __le16 action; 2289*4882a593Smuzhiyun } __packed; 2290*4882a593Smuzhiyun 2291*4882a593Smuzhiyun struct host_cmd_ds_pkt_aggr_ctrl { 2292*4882a593Smuzhiyun __le16 action; 2293*4882a593Smuzhiyun __le16 enable; 2294*4882a593Smuzhiyun __le16 tx_aggr_max_size; 2295*4882a593Smuzhiyun __le16 tx_aggr_max_num; 2296*4882a593Smuzhiyun __le16 tx_aggr_align; 2297*4882a593Smuzhiyun } __packed; 2298*4882a593Smuzhiyun 2299*4882a593Smuzhiyun struct host_cmd_ds_sta_configure { 2300*4882a593Smuzhiyun __le16 action; 2301*4882a593Smuzhiyun u8 tlv_buffer[]; 2302*4882a593Smuzhiyun } __packed; 2303*4882a593Smuzhiyun 2304*4882a593Smuzhiyun struct host_cmd_ds_command { 2305*4882a593Smuzhiyun __le16 command; 2306*4882a593Smuzhiyun __le16 size; 2307*4882a593Smuzhiyun __le16 seq_num; 2308*4882a593Smuzhiyun __le16 result; 2309*4882a593Smuzhiyun union { 2310*4882a593Smuzhiyun struct host_cmd_ds_get_hw_spec hw_spec; 2311*4882a593Smuzhiyun struct host_cmd_ds_mac_control mac_ctrl; 2312*4882a593Smuzhiyun struct host_cmd_ds_802_11_mac_address mac_addr; 2313*4882a593Smuzhiyun struct host_cmd_ds_mac_multicast_adr mc_addr; 2314*4882a593Smuzhiyun struct host_cmd_ds_802_11_get_log get_log; 2315*4882a593Smuzhiyun struct host_cmd_ds_802_11_rssi_info rssi_info; 2316*4882a593Smuzhiyun struct host_cmd_ds_802_11_rssi_info_rsp rssi_info_rsp; 2317*4882a593Smuzhiyun struct host_cmd_ds_802_11_snmp_mib smib; 2318*4882a593Smuzhiyun struct host_cmd_ds_tx_rate_query tx_rate; 2319*4882a593Smuzhiyun struct host_cmd_ds_tx_rate_cfg tx_rate_cfg; 2320*4882a593Smuzhiyun struct host_cmd_ds_txpwr_cfg txp_cfg; 2321*4882a593Smuzhiyun struct host_cmd_ds_rf_tx_pwr txp; 2322*4882a593Smuzhiyun struct host_cmd_ds_rf_ant_mimo ant_mimo; 2323*4882a593Smuzhiyun struct host_cmd_ds_rf_ant_siso ant_siso; 2324*4882a593Smuzhiyun struct host_cmd_ds_802_11_ps_mode_enh psmode_enh; 2325*4882a593Smuzhiyun struct host_cmd_ds_802_11_hs_cfg_enh opt_hs_cfg; 2326*4882a593Smuzhiyun struct host_cmd_ds_802_11_scan scan; 2327*4882a593Smuzhiyun struct host_cmd_ds_802_11_scan_ext ext_scan; 2328*4882a593Smuzhiyun struct host_cmd_ds_802_11_scan_rsp scan_resp; 2329*4882a593Smuzhiyun struct host_cmd_ds_802_11_bg_scan_config bg_scan_config; 2330*4882a593Smuzhiyun struct host_cmd_ds_802_11_bg_scan_query bg_scan_query; 2331*4882a593Smuzhiyun struct host_cmd_ds_802_11_bg_scan_query_rsp bg_scan_query_resp; 2332*4882a593Smuzhiyun struct host_cmd_ds_802_11_associate associate; 2333*4882a593Smuzhiyun struct host_cmd_ds_802_11_associate_rsp associate_rsp; 2334*4882a593Smuzhiyun struct host_cmd_ds_802_11_deauthenticate deauth; 2335*4882a593Smuzhiyun struct host_cmd_ds_802_11_ad_hoc_start adhoc_start; 2336*4882a593Smuzhiyun struct host_cmd_ds_802_11_ad_hoc_start_result start_result; 2337*4882a593Smuzhiyun struct host_cmd_ds_802_11_ad_hoc_join_result join_result; 2338*4882a593Smuzhiyun struct host_cmd_ds_802_11_ad_hoc_join adhoc_join; 2339*4882a593Smuzhiyun struct host_cmd_ds_802_11d_domain_info domain_info; 2340*4882a593Smuzhiyun struct host_cmd_ds_802_11d_domain_info_rsp domain_info_resp; 2341*4882a593Smuzhiyun struct host_cmd_ds_11n_addba_req add_ba_req; 2342*4882a593Smuzhiyun struct host_cmd_ds_11n_addba_rsp add_ba_rsp; 2343*4882a593Smuzhiyun struct host_cmd_ds_11n_delba del_ba; 2344*4882a593Smuzhiyun struct host_cmd_ds_txbuf_cfg tx_buf; 2345*4882a593Smuzhiyun struct host_cmd_ds_amsdu_aggr_ctrl amsdu_aggr_ctrl; 2346*4882a593Smuzhiyun struct host_cmd_ds_11n_cfg htcfg; 2347*4882a593Smuzhiyun struct host_cmd_ds_wmm_get_status get_wmm_status; 2348*4882a593Smuzhiyun struct host_cmd_ds_802_11_key_material key_material; 2349*4882a593Smuzhiyun struct host_cmd_ds_802_11_key_material_v2 key_material_v2; 2350*4882a593Smuzhiyun struct host_cmd_ds_version_ext verext; 2351*4882a593Smuzhiyun struct host_cmd_ds_mgmt_frame_reg reg_mask; 2352*4882a593Smuzhiyun struct host_cmd_ds_remain_on_chan roc_cfg; 2353*4882a593Smuzhiyun struct host_cmd_ds_p2p_mode_cfg mode_cfg; 2354*4882a593Smuzhiyun struct host_cmd_ds_802_11_ibss_status ibss_coalescing; 2355*4882a593Smuzhiyun struct host_cmd_ds_mef_cfg mef_cfg; 2356*4882a593Smuzhiyun struct host_cmd_ds_mem_access mem; 2357*4882a593Smuzhiyun struct host_cmd_ds_mac_reg_access mac_reg; 2358*4882a593Smuzhiyun struct host_cmd_ds_bbp_reg_access bbp_reg; 2359*4882a593Smuzhiyun struct host_cmd_ds_rf_reg_access rf_reg; 2360*4882a593Smuzhiyun struct host_cmd_ds_pmic_reg_access pmic_reg; 2361*4882a593Smuzhiyun struct host_cmd_ds_set_bss_mode bss_mode; 2362*4882a593Smuzhiyun struct host_cmd_ds_pcie_details pcie_host_spec; 2363*4882a593Smuzhiyun struct host_cmd_ds_802_11_eeprom_access eeprom; 2364*4882a593Smuzhiyun struct host_cmd_ds_802_11_subsc_evt subsc_evt; 2365*4882a593Smuzhiyun struct host_cmd_ds_sys_config uap_sys_config; 2366*4882a593Smuzhiyun struct host_cmd_ds_sta_deauth sta_deauth; 2367*4882a593Smuzhiyun struct host_cmd_ds_sta_list sta_list; 2368*4882a593Smuzhiyun struct host_cmd_11ac_vht_cfg vht_cfg; 2369*4882a593Smuzhiyun struct host_cmd_ds_coalesce_cfg coalesce_cfg; 2370*4882a593Smuzhiyun struct host_cmd_ds_tdls_config tdls_config; 2371*4882a593Smuzhiyun struct host_cmd_ds_tdls_oper tdls_oper; 2372*4882a593Smuzhiyun struct host_cmd_ds_chan_rpt_req chan_rpt_req; 2373*4882a593Smuzhiyun struct host_cmd_sdio_sp_rx_aggr_cfg sdio_rx_aggr_cfg; 2374*4882a593Smuzhiyun struct host_cmd_ds_multi_chan_policy mc_policy; 2375*4882a593Smuzhiyun struct host_cmd_ds_robust_coex coex; 2376*4882a593Smuzhiyun struct host_cmd_ds_wakeup_reason hs_wakeup_reason; 2377*4882a593Smuzhiyun struct host_cmd_ds_gtk_rekey_params rekey; 2378*4882a593Smuzhiyun struct host_cmd_ds_chan_region_cfg reg_cfg; 2379*4882a593Smuzhiyun struct host_cmd_ds_pkt_aggr_ctrl pkt_aggr_ctrl; 2380*4882a593Smuzhiyun struct host_cmd_ds_sta_configure sta_cfg; 2381*4882a593Smuzhiyun } params; 2382*4882a593Smuzhiyun } __packed; 2383*4882a593Smuzhiyun 2384*4882a593Smuzhiyun struct mwifiex_opt_sleep_confirm { 2385*4882a593Smuzhiyun __le16 command; 2386*4882a593Smuzhiyun __le16 size; 2387*4882a593Smuzhiyun __le16 seq_num; 2388*4882a593Smuzhiyun __le16 result; 2389*4882a593Smuzhiyun __le16 action; 2390*4882a593Smuzhiyun __le16 resp_ctrl; 2391*4882a593Smuzhiyun } __packed; 2392*4882a593Smuzhiyun 2393*4882a593Smuzhiyun struct hw_spec_max_conn { 2394*4882a593Smuzhiyun struct mwifiex_ie_types_header header; 2395*4882a593Smuzhiyun u8 max_p2p_conn; 2396*4882a593Smuzhiyun u8 max_sta_conn; 2397*4882a593Smuzhiyun } __packed; 2398*4882a593Smuzhiyun 2399*4882a593Smuzhiyun #endif /* !_MWIFIEX_FW_H_ */ 2400