cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

fw.h (62833B)


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