1*73b01e57SJeff Chen /* SPDX-License-Identifier: GPL-2.0-only */ 2*73b01e57SJeff Chen /* 3*73b01e57SJeff Chen * nxpwifi: Firmware-specific macros and structures 4*73b01e57SJeff Chen * 5*73b01e57SJeff Chen * Copyright 2011-2024 NXP 6*73b01e57SJeff Chen */ 7*73b01e57SJeff Chen 8*73b01e57SJeff Chen #ifndef _NXPWIFI_FW_H_ 9*73b01e57SJeff Chen #define _NXPWIFI_FW_H_ 10*73b01e57SJeff Chen 11*73b01e57SJeff Chen #include <linux/if_ether.h> 12*73b01e57SJeff Chen 13*73b01e57SJeff Chen #define INTF_HEADER_LEN 4 14*73b01e57SJeff Chen 15*73b01e57SJeff Chen struct rfc_1042_hdr { 16*73b01e57SJeff Chen u8 llc_dsap; 17*73b01e57SJeff Chen u8 llc_ssap; 18*73b01e57SJeff Chen u8 llc_ctrl; 19*73b01e57SJeff Chen u8 snap_oui[3]; 20*73b01e57SJeff Chen __be16 snap_type; 21*73b01e57SJeff Chen } __packed; 22*73b01e57SJeff Chen 23*73b01e57SJeff Chen struct rx_packet_hdr { 24*73b01e57SJeff Chen struct ethhdr eth803_hdr; 25*73b01e57SJeff Chen struct rfc_1042_hdr rfc1042_hdr; 26*73b01e57SJeff Chen } __packed; 27*73b01e57SJeff Chen 28*73b01e57SJeff Chen struct tx_packet_hdr { 29*73b01e57SJeff Chen struct ethhdr eth803_hdr; 30*73b01e57SJeff Chen struct rfc_1042_hdr rfc1042_hdr; 31*73b01e57SJeff Chen } __packed; 32*73b01e57SJeff Chen 33*73b01e57SJeff Chen struct nxpwifi_fw_header { 34*73b01e57SJeff Chen __le32 dnld_cmd; 35*73b01e57SJeff Chen __le32 base_addr; 36*73b01e57SJeff Chen __le32 data_length; 37*73b01e57SJeff Chen __le32 crc; 38*73b01e57SJeff Chen } __packed; 39*73b01e57SJeff Chen 40*73b01e57SJeff Chen struct nxpwifi_fw_data { 41*73b01e57SJeff Chen struct nxpwifi_fw_header header; 42*73b01e57SJeff Chen __le32 seq_num; 43*73b01e57SJeff Chen u8 data[]; 44*73b01e57SJeff Chen } __packed; 45*73b01e57SJeff Chen 46*73b01e57SJeff Chen struct nxpwifi_fw_dump_header { 47*73b01e57SJeff Chen __le16 seq_num; 48*73b01e57SJeff Chen __le16 reserved; 49*73b01e57SJeff Chen __le16 type; 50*73b01e57SJeff Chen __le16 len; 51*73b01e57SJeff Chen } __packed; 52*73b01e57SJeff Chen 53*73b01e57SJeff Chen #define FW_DUMP_INFO_ENDED 0x0002 54*73b01e57SJeff Chen 55*73b01e57SJeff Chen #define NXPWIFI_FW_DNLD_CMD_1 0x1 56*73b01e57SJeff Chen #define NXPWIFI_FW_DNLD_CMD_5 0x5 57*73b01e57SJeff Chen #define NXPWIFI_FW_DNLD_CMD_6 0x6 58*73b01e57SJeff Chen #define NXPWIFI_FW_DNLD_CMD_7 0x7 59*73b01e57SJeff Chen 60*73b01e57SJeff Chen #define B_SUPPORTED_RATES 5 61*73b01e57SJeff Chen #define G_SUPPORTED_RATES 9 62*73b01e57SJeff Chen #define BG_SUPPORTED_RATES 13 63*73b01e57SJeff Chen #define A_SUPPORTED_RATES 9 64*73b01e57SJeff Chen #define HOSTCMD_SUPPORTED_RATES 14 65*73b01e57SJeff Chen #define N_SUPPORTED_RATES 3 66*73b01e57SJeff Chen #define ALL_802_11_BANDS \ 67*73b01e57SJeff Chen (BAND_A | BAND_B | BAND_G | BAND_GN | BAND_AN | BAND_AAC | BAND_GAC) 68*73b01e57SJeff Chen #define FW_MULTI_BANDS_SUPPORT \ 69*73b01e57SJeff Chen (BIT(8) | BIT(9) | BIT(10) | BIT(11) | BIT(12) | BIT(13)) 70*73b01e57SJeff Chen #define IS_SUPPORT_MULTI_BANDS(adapter) \ 71*73b01e57SJeff Chen ((adapter)->fw_cap_info & FW_MULTI_BANDS_SUPPORT) 72*73b01e57SJeff Chen 73*73b01e57SJeff Chen /* 74*73b01e57SJeff Chen * Map fw_cap_info for default bands: shift 11ac flags so bits 75*73b01e57SJeff Chen * 11:GN, 12:AN, 13:GAC, 14:AAC match driver layout after >>8. 76*73b01e57SJeff Chen */ 77*73b01e57SJeff Chen #define GET_FW_DEFAULT_BANDS(adapter) ({\ 78*73b01e57SJeff Chen typeof(adapter) (_adapter) = adapter; \ 79*73b01e57SJeff Chen (((((_adapter->fw_cap_info & 0x3000) << 1) | \ 80*73b01e57SJeff Chen (_adapter->fw_cap_info & ~0xF000)) \ 81*73b01e57SJeff Chen >> 8) & \ 82*73b01e57SJeff Chen ALL_802_11_BANDS); \ 83*73b01e57SJeff Chen }) 84*73b01e57SJeff Chen 85*73b01e57SJeff Chen #define HOST_WEP_KEY_INDEX_MASK 0x3fff 86*73b01e57SJeff Chen 87*73b01e57SJeff Chen #define KEY_INFO_ENABLED 0x01 88*73b01e57SJeff Chen enum KEY_TYPE_ID { 89*73b01e57SJeff Chen KEY_TYPE_ID_WEP = 0, 90*73b01e57SJeff Chen KEY_TYPE_ID_TKIP, 91*73b01e57SJeff Chen KEY_TYPE_ID_AES, 92*73b01e57SJeff Chen KEY_TYPE_ID_WAPI, 93*73b01e57SJeff Chen KEY_TYPE_ID_AES_CMAC, 94*73b01e57SJeff Chen KEY_TYPE_ID_GCMP, 95*73b01e57SJeff Chen KEY_TYPE_ID_GCMP_256, 96*73b01e57SJeff Chen KEY_TYPE_ID_CCMP_256, 97*73b01e57SJeff Chen KEY_TYPE_ID_BIP_GMAC_128, 98*73b01e57SJeff Chen KEY_TYPE_ID_BIP_GMAC_256, 99*73b01e57SJeff Chen }; 100*73b01e57SJeff Chen 101*73b01e57SJeff Chen #define WPA_PN_SIZE 8 102*73b01e57SJeff Chen #define KEY_PARAMS_FIXED_LEN 10 103*73b01e57SJeff Chen #define KEY_INDEX_MASK 0xf 104*73b01e57SJeff Chen #define KEY_API_VER_MAJOR_V2 2 105*73b01e57SJeff Chen 106*73b01e57SJeff Chen #define KEY_MCAST BIT(0) 107*73b01e57SJeff Chen #define KEY_UNICAST BIT(1) 108*73b01e57SJeff Chen #define KEY_ENABLED BIT(2) 109*73b01e57SJeff Chen #define KEY_DEFAULT BIT(3) 110*73b01e57SJeff Chen #define KEY_TX_KEY BIT(4) 111*73b01e57SJeff Chen #define KEY_RX_KEY BIT(5) 112*73b01e57SJeff Chen #define KEY_IGTK BIT(10) 113*73b01e57SJeff Chen 114*73b01e57SJeff Chen #define MAX_POLL_TRIES 10000 115*73b01e57SJeff Chen #define MAX_FIRMWARE_POLL_TRIES 300 116*73b01e57SJeff Chen 117*73b01e57SJeff Chen #define FIRMWARE_READY_SDIO 0xfedc 118*73b01e57SJeff Chen #define FIRMWARE_READY_PCIE 0xfedcba00 119*73b01e57SJeff Chen 120*73b01e57SJeff Chen #define NXPWIFI_COEX_MODE_TIMESHARE 0x01 121*73b01e57SJeff Chen #define NXPWIFI_COEX_MODE_SPATIAL 0x82 122*73b01e57SJeff Chen 123*73b01e57SJeff Chen enum nxpwifi_usb_ep { 124*73b01e57SJeff Chen NXPWIFI_USB_EP_CMD_EVENT = 1, 125*73b01e57SJeff Chen NXPWIFI_USB_EP_DATA = 2, 126*73b01e57SJeff Chen NXPWIFI_USB_EP_DATA_CH2 = 3, 127*73b01e57SJeff Chen }; 128*73b01e57SJeff Chen 129*73b01e57SJeff Chen enum NXPWIFI_802_11_PRIVACY_FILTER { 130*73b01e57SJeff Chen NXPWIFI_802_11_PRIV_FILTER_ACCEPT_ALL, 131*73b01e57SJeff Chen NXPWIFI_802_11_PRIV_FILTER_8021X_WEP 132*73b01e57SJeff Chen }; 133*73b01e57SJeff Chen 134*73b01e57SJeff Chen #define CAL_SNR(RSSI, NF) ((s16)((s16)(RSSI) - (s16)(NF))) 135*73b01e57SJeff Chen #define CAL_RSSI(SNR, NF) ((s16)((s16)(SNR) + (s16)(NF))) 136*73b01e57SJeff Chen 137*73b01e57SJeff Chen #define UAP_BSS_PARAMS_I 0 138*73b01e57SJeff Chen #define UAP_CUSTOM_IE_I 1 139*73b01e57SJeff Chen #define NXPWIFI_AUTO_IDX_MASK 0xffff 140*73b01e57SJeff Chen #define NXPWIFI_DELETE_MASK 0x0000 141*73b01e57SJeff Chen #define MGMT_MASK_ASSOC_REQ 0x01 142*73b01e57SJeff Chen #define MGMT_MASK_REASSOC_REQ 0x04 143*73b01e57SJeff Chen #define MGMT_MASK_ASSOC_RESP 0x02 144*73b01e57SJeff Chen #define MGMT_MASK_REASSOC_RESP 0x08 145*73b01e57SJeff Chen #define MGMT_MASK_PROBE_REQ 0x10 146*73b01e57SJeff Chen #define MGMT_MASK_PROBE_RESP 0x20 147*73b01e57SJeff Chen #define MGMT_MASK_BEACON 0x100 148*73b01e57SJeff Chen 149*73b01e57SJeff Chen #define TLV_TYPE_UAP_SSID 0x0000 150*73b01e57SJeff Chen #define TLV_TYPE_UAP_RATES 0x0001 151*73b01e57SJeff Chen #define TLV_TYPE_PWR_CONSTRAINT 0x0020 152*73b01e57SJeff Chen #define TLV_TYPE_HT_CAPABILITY 0x002d 153*73b01e57SJeff Chen #define TLV_TYPE_EXTENSION_ID 0x00ff 154*73b01e57SJeff Chen 155*73b01e57SJeff Chen #define PROPRIETARY_TLV_BASE_ID 0x0100 156*73b01e57SJeff Chen #define TLV_TYPE_KEY_MATERIAL (PROPRIETARY_TLV_BASE_ID + 0) 157*73b01e57SJeff Chen #define TLV_TYPE_CHANLIST (PROPRIETARY_TLV_BASE_ID + 1) 158*73b01e57SJeff Chen #define TLV_TYPE_NUMPROBES (PROPRIETARY_TLV_BASE_ID + 2) 159*73b01e57SJeff Chen #define TLV_TYPE_RSSI_LOW (PROPRIETARY_TLV_BASE_ID + 4) 160*73b01e57SJeff Chen #define TLV_TYPE_PASSTHROUGH (PROPRIETARY_TLV_BASE_ID + 10) 161*73b01e57SJeff Chen #define TLV_TYPE_WMMQSTATUS (PROPRIETARY_TLV_BASE_ID + 16) 162*73b01e57SJeff Chen #define TLV_TYPE_WILDCARDSSID (PROPRIETARY_TLV_BASE_ID + 18) 163*73b01e57SJeff Chen #define TLV_TYPE_TSFTIMESTAMP (PROPRIETARY_TLV_BASE_ID + 19) 164*73b01e57SJeff Chen #define TLV_TYPE_RSSI_HIGH (PROPRIETARY_TLV_BASE_ID + 22) 165*73b01e57SJeff Chen #define TLV_TYPE_BGSCAN_START_LATER (PROPRIETARY_TLV_BASE_ID + 30) 166*73b01e57SJeff Chen #define TLV_TYPE_AUTH_TYPE (PROPRIETARY_TLV_BASE_ID + 31) 167*73b01e57SJeff Chen #define TLV_TYPE_STA_MAC_ADDR (PROPRIETARY_TLV_BASE_ID + 32) 168*73b01e57SJeff Chen #define TLV_TYPE_BSSID (PROPRIETARY_TLV_BASE_ID + 35) 169*73b01e57SJeff Chen #define TLV_TYPE_CHANNELBANDLIST (PROPRIETARY_TLV_BASE_ID + 42) 170*73b01e57SJeff Chen #define TLV_TYPE_UAP_MAC_ADDRESS (PROPRIETARY_TLV_BASE_ID + 43) 171*73b01e57SJeff Chen #define TLV_TYPE_UAP_BEACON_PERIOD (PROPRIETARY_TLV_BASE_ID + 44) 172*73b01e57SJeff Chen #define TLV_TYPE_UAP_DTIM_PERIOD (PROPRIETARY_TLV_BASE_ID + 45) 173*73b01e57SJeff Chen #define TLV_TYPE_UAP_BCAST_SSID (PROPRIETARY_TLV_BASE_ID + 48) 174*73b01e57SJeff Chen #define TLV_TYPE_UAP_PREAMBLE_CTL (PROPRIETARY_TLV_BASE_ID + 49) 175*73b01e57SJeff Chen #define TLV_TYPE_UAP_RTS_THRESHOLD (PROPRIETARY_TLV_BASE_ID + 51) 176*73b01e57SJeff Chen #define TLV_TYPE_UAP_AO_TIMER (PROPRIETARY_TLV_BASE_ID + 57) 177*73b01e57SJeff Chen #define TLV_TYPE_UAP_WEP_KEY (PROPRIETARY_TLV_BASE_ID + 59) 178*73b01e57SJeff Chen #define TLV_TYPE_UAP_WPA_PASSPHRASE (PROPRIETARY_TLV_BASE_ID + 60) 179*73b01e57SJeff Chen #define TLV_TYPE_UAP_ENCRY_PROTOCOL (PROPRIETARY_TLV_BASE_ID + 64) 180*73b01e57SJeff Chen #define TLV_TYPE_UAP_AKMP (PROPRIETARY_TLV_BASE_ID + 65) 181*73b01e57SJeff Chen #define TLV_TYPE_UAP_FRAG_THRESHOLD (PROPRIETARY_TLV_BASE_ID + 70) 182*73b01e57SJeff Chen #define TLV_TYPE_RATE_DROP_CONTROL (PROPRIETARY_TLV_BASE_ID + 82) 183*73b01e57SJeff Chen #define TLV_TYPE_RATE_SCOPE (PROPRIETARY_TLV_BASE_ID + 83) 184*73b01e57SJeff Chen #define TLV_TYPE_POWER_GROUP (PROPRIETARY_TLV_BASE_ID + 84) 185*73b01e57SJeff Chen #define TLV_TYPE_BSS_SCAN_RSP (PROPRIETARY_TLV_BASE_ID + 86) 186*73b01e57SJeff Chen #define TLV_TYPE_BSS_SCAN_INFO (PROPRIETARY_TLV_BASE_ID + 87) 187*73b01e57SJeff Chen #define TLV_TYPE_CHANRPT_11H_BASIC (PROPRIETARY_TLV_BASE_ID + 91) 188*73b01e57SJeff Chen #define TLV_TYPE_UAP_RETRY_LIMIT (PROPRIETARY_TLV_BASE_ID + 93) 189*73b01e57SJeff Chen #define TLV_TYPE_ROBUST_COEX (PROPRIETARY_TLV_BASE_ID + 96) 190*73b01e57SJeff Chen #define TLV_TYPE_UAP_MGMT_FRAME (PROPRIETARY_TLV_BASE_ID + 104) 191*73b01e57SJeff Chen #define TLV_TYPE_MGMT_IE (PROPRIETARY_TLV_BASE_ID + 105) 192*73b01e57SJeff Chen #define TLV_TYPE_AUTO_DS_PARAM (PROPRIETARY_TLV_BASE_ID + 113) 193*73b01e57SJeff Chen #define TLV_TYPE_PS_PARAM (PROPRIETARY_TLV_BASE_ID + 114) 194*73b01e57SJeff Chen #define TLV_TYPE_UAP_PS_AO_TIMER (PROPRIETARY_TLV_BASE_ID + 123) 195*73b01e57SJeff Chen #define TLV_TYPE_PWK_CIPHER (PROPRIETARY_TLV_BASE_ID + 145) 196*73b01e57SJeff Chen #define TLV_TYPE_GWK_CIPHER (PROPRIETARY_TLV_BASE_ID + 146) 197*73b01e57SJeff Chen #define TLV_TYPE_TX_PAUSE (PROPRIETARY_TLV_BASE_ID + 148) 198*73b01e57SJeff Chen #define TLV_TYPE_RXBA_SYNC (PROPRIETARY_TLV_BASE_ID + 153) 199*73b01e57SJeff Chen #define TLV_TYPE_COALESCE_RULE (PROPRIETARY_TLV_BASE_ID + 154) 200*73b01e57SJeff Chen #define TLV_TYPE_KEY_PARAM_V2 (PROPRIETARY_TLV_BASE_ID + 156) 201*73b01e57SJeff Chen #define TLV_TYPE_REGION_DOMAIN_CODE (PROPRIETARY_TLV_BASE_ID + 171) 202*73b01e57SJeff Chen #define TLV_TYPE_REPEAT_COUNT (PROPRIETARY_TLV_BASE_ID + 176) 203*73b01e57SJeff Chen #define TLV_TYPE_PS_PARAMS_IN_HS (PROPRIETARY_TLV_BASE_ID + 181) 204*73b01e57SJeff Chen #define TLV_TYPE_MULTI_CHAN_INFO (PROPRIETARY_TLV_BASE_ID + 183) 205*73b01e57SJeff Chen #define TLV_TYPE_MC_GROUP_INFO (PROPRIETARY_TLV_BASE_ID + 184) 206*73b01e57SJeff Chen #define TLV_TYPE_SCAN_CHANNEL_GAP (PROPRIETARY_TLV_BASE_ID + 197) 207*73b01e57SJeff Chen #define TLV_TYPE_API_REV (PROPRIETARY_TLV_BASE_ID + 199) 208*73b01e57SJeff Chen #define TLV_TYPE_CHANNEL_STATS (PROPRIETARY_TLV_BASE_ID + 198) 209*73b01e57SJeff Chen #define TLV_BTCOEX_WL_AGGR_WINSIZE (PROPRIETARY_TLV_BASE_ID + 202) 210*73b01e57SJeff Chen #define TLV_BTCOEX_WL_SCANTIME (PROPRIETARY_TLV_BASE_ID + 203) 211*73b01e57SJeff Chen #define TLV_TYPE_BSS_MODE (PROPRIETARY_TLV_BASE_ID + 206) 212*73b01e57SJeff Chen #define TLV_TYPE_RANDOM_MAC (PROPRIETARY_TLV_BASE_ID + 236) 213*73b01e57SJeff Chen #define TLV_TYPE_CHAN_ATTR_CFG (PROPRIETARY_TLV_BASE_ID + 237) 214*73b01e57SJeff Chen #define TLV_TYPE_MAX_CONN (PROPRIETARY_TLV_BASE_ID + 279) 215*73b01e57SJeff Chen #define TLV_TYPE_HOST_MLME (PROPRIETARY_TLV_BASE_ID + 307) 216*73b01e57SJeff Chen #define TLV_TYPE_UAP_STA_FLAGS (PROPRIETARY_TLV_BASE_ID + 313) 217*73b01e57SJeff Chen #define TLV_TYPE_FW_CAP_INFO (PROPRIETARY_TLV_BASE_ID + 318) 218*73b01e57SJeff Chen #define TLV_TYPE_AX_ENABLE_SR (PROPRIETARY_TLV_BASE_ID + 322) 219*73b01e57SJeff Chen #define TLV_TYPE_AX_OBSS_PD_OFFSET (PROPRIETARY_TLV_BASE_ID + 323) 220*73b01e57SJeff Chen #define TLV_TYPE_SAE_PWE_MODE (PROPRIETARY_TLV_BASE_ID + 339) 221*73b01e57SJeff Chen #define TLV_TYPE_6E_INBAND_FRAMES (PROPRIETARY_TLV_BASE_ID + 345) 222*73b01e57SJeff Chen #define TLV_TYPE_SECURE_BOOT_UUID (PROPRIETARY_TLV_BASE_ID + 348) 223*73b01e57SJeff Chen 224*73b01e57SJeff Chen #define NXPWIFI_TX_DATA_BUF_SIZE_2K 2048 225*73b01e57SJeff Chen 226*73b01e57SJeff Chen #define SSN_MASK 0xfff0 227*73b01e57SJeff Chen 228*73b01e57SJeff Chen #define BA_RESULT_SUCCESS 0x0 229*73b01e57SJeff Chen #define BA_RESULT_TIMEOUT 0x2 230*73b01e57SJeff Chen 231*73b01e57SJeff Chen #define IS_BASTREAM_SETUP(ptr) ((ptr)->ba_status) 232*73b01e57SJeff Chen 233*73b01e57SJeff Chen #define BA_STREAM_NOT_ALLOWED 0xff 234*73b01e57SJeff Chen 235*73b01e57SJeff Chen #define IS_11N_ENABLED(priv) ({ \ 236*73b01e57SJeff Chen typeof(priv) (_priv) = priv; \ 237*73b01e57SJeff Chen (((_priv)->config_bands & BAND_GN || \ 238*73b01e57SJeff Chen (_priv)->config_bands & BAND_AN) && \ 239*73b01e57SJeff Chen (_priv)->curr_bss_params.bss_descriptor.bcn_ht_cap && \ 240*73b01e57SJeff Chen !(_priv)->curr_bss_params.bss_descriptor.disable_11n); \ 241*73b01e57SJeff Chen }) 242*73b01e57SJeff Chen #define INITIATOR_BIT(del_ba_param_set) (((del_ba_param_set) &\ 243*73b01e57SJeff Chen BIT(DELBA_INITIATOR_POS)) >> DELBA_INITIATOR_POS) 244*73b01e57SJeff Chen 245*73b01e57SJeff Chen #define NXPWIFI_TX_DATA_BUF_SIZE_4K 4096 246*73b01e57SJeff Chen #define NXPWIFI_TX_DATA_BUF_SIZE_8K 8192 247*73b01e57SJeff Chen #define NXPWIFI_TX_DATA_BUF_SIZE_12K 12288 248*73b01e57SJeff Chen 249*73b01e57SJeff Chen #define ISSUPP_11NENABLED(fw_cap_info) ((fw_cap_info) & BIT(11)) 250*73b01e57SJeff Chen #define ISSUPP_DRCS_ENABLED(fw_cap_info) ((fw_cap_info) & BIT(15)) 251*73b01e57SJeff Chen #define ISSUPP_SDIO_SPA_ENABLED(fw_cap_info) ((fw_cap_info) & BIT(16)) 252*73b01e57SJeff Chen #define ISSUPP_RANDOM_MAC(fw_cap_info) ((fw_cap_info) & BIT(27)) 253*73b01e57SJeff Chen #define ISSUPP_FIRMWARE_SUPPLICANT(fw_cap_info) ((fw_cap_info) & BIT(21)) 254*73b01e57SJeff Chen 255*73b01e57SJeff Chen #define NXPWIFI_DEF_HT_CAP (IEEE80211_HT_CAP_DSSSCCK40 | \ 256*73b01e57SJeff Chen (1 << IEEE80211_HT_CAP_RX_STBC_SHIFT) | \ 257*73b01e57SJeff Chen IEEE80211_HT_CAP_SM_PS) 258*73b01e57SJeff Chen 259*73b01e57SJeff Chen #define NXPWIFI_DEF_11N_TX_BF_CAP 0x09E1E008 260*73b01e57SJeff Chen 261*73b01e57SJeff Chen #define NXPWIFI_DEF_AMPDU IEEE80211_HT_AMPDU_PARM_FACTOR 262*73b01e57SJeff Chen 263*73b01e57SJeff Chen #define RXPD_FLAG_EXTRA_HEADER BIT(1) 264*73b01e57SJeff Chen /* channel number at bit 5-13 */ 265*73b01e57SJeff Chen #define RXPD_CHAN_MASK 0x3FE0 266*73b01e57SJeff Chen /* DCM at bit 16 */ 267*73b01e57SJeff Chen #define RXPD_DCM_MASK 0x10000 268*73b01e57SJeff Chen 269*73b01e57SJeff Chen /* 270*73b01e57SJeff Chen * dot11n dev_cap bits: 17:20/40MHz, 23:SGI20, 24:SGI40, 25:TXSTBC, 271*73b01e57SJeff Chen * 26:RXSTBC, 29:Greenfield. 272*73b01e57SJeff Chen */ 273*73b01e57SJeff Chen #define ISSUPP_CHANWIDTH40(dot_11n_dev_cap) ((dot_11n_dev_cap) & BIT(17)) 274*73b01e57SJeff Chen #define ISSUPP_SHORTGI20(dot_11n_dev_cap) ((dot_11n_dev_cap) & BIT(23)) 275*73b01e57SJeff Chen #define ISSUPP_SHORTGI40(dot_11n_dev_cap) ((dot_11n_dev_cap) & BIT(24)) 276*73b01e57SJeff Chen #define ISSUPP_TXSTBC(dot_11n_dev_cap) ((dot_11n_dev_cap) & BIT(25)) 277*73b01e57SJeff Chen #define ISSUPP_RXSTBC(dot_11n_dev_cap) ((dot_11n_dev_cap) & BIT(26)) 278*73b01e57SJeff Chen #define ISSUPP_GREENFIELD(dot_11n_dev_cap) ((dot_11n_dev_cap) & BIT(29)) 279*73b01e57SJeff Chen #define ISENABLED_40MHZ_INTOLERANT(dot_11n_dev_cap) ((dot_11n_dev_cap) & BIT(8)) 280*73b01e57SJeff Chen #define ISSUPP_RXLDPC(dot_11n_dev_cap) ((dot_11n_dev_cap) & BIT(22)) 281*73b01e57SJeff Chen #define ISSUPP_BEAMFORMING(dot_11n_dev_cap) ((dot_11n_dev_cap) & BIT(30)) 282*73b01e57SJeff Chen #define ISALLOWED_CHANWIDTH40(ht_param) ((ht_param) & BIT(2)) 283*73b01e57SJeff Chen #define GETSUPP_TXBASTREAMS(dot_11n_dev_cap) (((dot_11n_dev_cap) >> 18) & 0xF) 284*73b01e57SJeff Chen 285*73b01e57SJeff Chen /* AMPDU factor size */ 286*73b01e57SJeff Chen #define AMPDU_FACTOR_64K 0x03 287*73b01e57SJeff Chen /* hw_dev_cap : MPDU DENSITY */ 288*73b01e57SJeff Chen #define GET_MPDU_DENSITY(hw_dev_cap) ((hw_dev_cap) & 0x7) 289*73b01e57SJeff Chen 290*73b01e57SJeff Chen /* httxcfg bits: 1:20/40, 4:GF, 5:SGI20, 6:SGI40. */ 291*73b01e57SJeff Chen #define NXPWIFI_FW_DEF_HTTXCFG (BIT(1) | BIT(4) | BIT(5) | BIT(6)) 292*73b01e57SJeff Chen 293*73b01e57SJeff Chen /* 11ac MCS map (1x1): stream0 supports 0-9, others not supported. */ 294*73b01e57SJeff Chen #define NXPWIFI_11AC_MCS_MAP_1X1 0xfffefffe 295*73b01e57SJeff Chen 296*73b01e57SJeff Chen /* 11ac MCS map (2x2): stream0/1 support 0-9, others not supported. */ 297*73b01e57SJeff Chen #define NXPWIFI_11AC_MCS_MAP_2X2 0xfffafffa 298*73b01e57SJeff Chen 299*73b01e57SJeff Chen #define GET_TXMCSSUPP(dev_mcs_supported) ((dev_mcs_supported) >> 4) 300*73b01e57SJeff Chen #define GET_RXMCSSUPP(dev_mcs_supported) ((dev_mcs_supported) & 0x0f) 301*73b01e57SJeff Chen #define SETHT_MCS32(x) (x[4] |= 1) 302*73b01e57SJeff Chen #define HT_STREAM_1X1 0x11 303*73b01e57SJeff Chen #define HT_STREAM_2X2 0x22 304*73b01e57SJeff Chen 305*73b01e57SJeff Chen #define SET_SECONDARYCHAN(radio_type, sec_chan) \ 306*73b01e57SJeff Chen ((radio_type) |= ((sec_chan) << 4)) 307*73b01e57SJeff Chen 308*73b01e57SJeff Chen #define LLC_SNAP_LEN 8 309*73b01e57SJeff Chen 310*73b01e57SJeff Chen /* HW_SPEC fw_cap_info */ 311*73b01e57SJeff Chen 312*73b01e57SJeff Chen #define ISSUPP_11ACENABLED(fw_cap_info) ((fw_cap_info) & BIT(13)) 313*73b01e57SJeff Chen #define NO_NSS_SUPPORT 0x3 314*73b01e57SJeff Chen #define GET_VHTNSSMCS(mcs_mapset, nss) \ 315*73b01e57SJeff Chen (((mcs_mapset) >> (2 * ((nss) - 1))) & 0x3) 316*73b01e57SJeff Chen #define SET_VHTNSSMCS(mcs_mapset, nss, value) \ 317*73b01e57SJeff Chen ((mcs_mapset) |= ((value) & 0x3) << (2 * ((nss) - 1))) 318*73b01e57SJeff Chen #define GET_DEVTXMCSMAP(dev_mcs_map) ((dev_mcs_map) >> 16) 319*73b01e57SJeff Chen #define GET_DEVRXMCSMAP(dev_mcs_map) ((dev_mcs_map) & 0xFFFF) 320*73b01e57SJeff Chen 321*73b01e57SJeff Chen /* Clear SU/MU beamformer/beamformee and sounding dimension bits. */ 322*73b01e57SJeff Chen #define NXPWIFI_DEF_11AC_CAP_BF_RESET_MASK \ 323*73b01e57SJeff Chen (IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE | \ 324*73b01e57SJeff Chen IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE | \ 325*73b01e57SJeff Chen IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE | \ 326*73b01e57SJeff Chen IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MASK) 327*73b01e57SJeff Chen 328*73b01e57SJeff Chen #define MOD_CLASS_HR_DSSS 0x03 329*73b01e57SJeff Chen #define MOD_CLASS_OFDM 0x07 330*73b01e57SJeff Chen #define MOD_CLASS_HT 0x08 331*73b01e57SJeff Chen #define HT_BW_20 0 332*73b01e57SJeff Chen #define HT_BW_40 1 333*73b01e57SJeff Chen 334*73b01e57SJeff Chen #define DFS_CHAN_MOVE_TIME 10000 335*73b01e57SJeff Chen 336*73b01e57SJeff Chen #define ISSUPP_11AXENABLED(fw_cap_ext) ((fw_cap_ext) & BIT(7)) 337*73b01e57SJeff Chen 338*73b01e57SJeff Chen #define HOST_CMD_GET_HW_SPEC 0x0003 339*73b01e57SJeff Chen #define HOST_CMD_802_11_SCAN 0x0006 340*73b01e57SJeff Chen #define HOST_CMD_802_11_GET_LOG 0x000b 341*73b01e57SJeff Chen #define HOST_CMD_MAC_MULTICAST_ADR 0x0010 342*73b01e57SJeff Chen #define HOST_CMD_802_11_ASSOCIATE 0x0012 343*73b01e57SJeff Chen #define HOST_CMD_802_11_SNMP_MIB 0x0016 344*73b01e57SJeff Chen #define HOST_CMD_MAC_REG_ACCESS 0x0019 345*73b01e57SJeff Chen #define HOST_CMD_BBP_REG_ACCESS 0x001a 346*73b01e57SJeff Chen #define HOST_CMD_RF_REG_ACCESS 0x001b 347*73b01e57SJeff Chen #define HOST_CMD_RF_TX_PWR 0x001e 348*73b01e57SJeff Chen #define HOST_CMD_RF_ANTENNA 0x0020 349*73b01e57SJeff Chen #define HOST_CMD_802_11_DEAUTHENTICATE 0x0024 350*73b01e57SJeff Chen #define HOST_CMD_MAC_CONTROL 0x0028 351*73b01e57SJeff Chen #define HOST_CMD_802_11_MAC_ADDRESS 0x004D 352*73b01e57SJeff Chen #define HOST_CMD_802_11_EEPROM_ACCESS 0x0059 353*73b01e57SJeff Chen #define HOST_CMD_802_11D_DOMAIN_INFO 0x005b 354*73b01e57SJeff Chen #define HOST_CMD_802_11_KEY_MATERIAL 0x005e 355*73b01e57SJeff Chen #define HOST_CMD_802_11_BG_SCAN_CONFIG 0x006b 356*73b01e57SJeff Chen #define HOST_CMD_802_11_BG_SCAN_QUERY 0x006c 357*73b01e57SJeff Chen #define HOST_CMD_WMM_GET_STATUS 0x0071 358*73b01e57SJeff Chen #define HOST_CMD_802_11_SUBSCRIBE_EVENT 0x0075 359*73b01e57SJeff Chen #define HOST_CMD_802_11_TX_RATE_QUERY 0x007f 360*73b01e57SJeff Chen #define HOST_CMD_MEM_ACCESS 0x0086 361*73b01e57SJeff Chen #define HOST_CMD_CFG_DATA 0x008f 362*73b01e57SJeff Chen #define HOST_CMD_VERSION_EXT 0x0097 363*73b01e57SJeff Chen #define HOST_CMD_MEF_CFG 0x009a 364*73b01e57SJeff Chen #define HOST_CMD_RSSI_INFO 0x00a4 365*73b01e57SJeff Chen #define HOST_CMD_FUNC_INIT 0x00a9 366*73b01e57SJeff Chen #define HOST_CMD_FUNC_SHUTDOWN 0x00aa 367*73b01e57SJeff Chen #define HOST_CMD_PMIC_REG_ACCESS 0x00ad 368*73b01e57SJeff Chen #define HOST_CMD_APCMD_SYS_RESET 0x00af 369*73b01e57SJeff Chen #define HOST_CMD_UAP_SYS_CONFIG 0x00b0 370*73b01e57SJeff Chen #define HOST_CMD_UAP_BSS_START 0x00b1 371*73b01e57SJeff Chen #define HOST_CMD_UAP_BSS_STOP 0x00b2 372*73b01e57SJeff Chen #define HOST_CMD_APCMD_STA_LIST 0x00b3 373*73b01e57SJeff Chen #define HOST_CMD_UAP_STA_DEAUTH 0x00b5 374*73b01e57SJeff Chen #define HOST_CMD_11N_CFG 0x00cd 375*73b01e57SJeff Chen #define HOST_CMD_11N_ADDBA_REQ 0x00ce 376*73b01e57SJeff Chen #define HOST_CMD_11N_ADDBA_RSP 0x00cf 377*73b01e57SJeff Chen #define HOST_CMD_11N_DELBA 0x00d0 378*73b01e57SJeff Chen #define HOST_CMD_TXPWR_CFG 0x00d1 379*73b01e57SJeff Chen #define HOST_CMD_TX_RATE_CFG 0x00d6 380*73b01e57SJeff Chen #define HOST_CMD_RECONFIGURE_TX_BUFF 0x00d9 381*73b01e57SJeff Chen #define HOST_CMD_CHAN_REPORT_REQUEST 0x00dd 382*73b01e57SJeff Chen #define HOST_CMD_AMSDU_AGGR_CTRL 0x00df 383*73b01e57SJeff Chen #define HOST_CMD_ROBUST_COEX 0x00e0 384*73b01e57SJeff Chen #define HOST_CMD_802_11_PS_MODE_ENH 0x00e4 385*73b01e57SJeff Chen #define HOST_CMD_802_11_HS_CFG_ENH 0x00e5 386*73b01e57SJeff Chen #define HOST_CMD_CAU_REG_ACCESS 0x00ed 387*73b01e57SJeff Chen #define HOST_CMD_SET_BSS_MODE 0x00f7 388*73b01e57SJeff Chen #define HOST_CMD_PCIE_DESC_DETAILS 0x00fa 389*73b01e57SJeff Chen #define HOST_CMD_802_11_NET_MONITOR 0x0102 390*73b01e57SJeff Chen #define HOST_CMD_802_11_SCAN_EXT 0x0107 391*73b01e57SJeff Chen #define HOST_CMD_COALESCE_CFG 0x010a 392*73b01e57SJeff Chen #define HOST_CMD_MGMT_FRAME_REG 0x010c 393*73b01e57SJeff Chen #define HOST_CMD_REMAIN_ON_CHAN 0x010d 394*73b01e57SJeff Chen #define HOST_CMD_GTK_REKEY_OFFLOAD_CFG 0x010f 395*73b01e57SJeff Chen #define HOST_CMD_11AC_CFG 0x0112 396*73b01e57SJeff Chen #define HOST_CMD_HS_WAKEUP_REASON 0x0116 397*73b01e57SJeff Chen #define HOST_CMD_MC_POLICY 0x0121 398*73b01e57SJeff Chen #define HOST_CMD_FW_DUMP_EVENT 0x0125 399*73b01e57SJeff Chen #define HOST_CMD_SDIO_SP_RX_AGGR_CFG 0x0223 400*73b01e57SJeff Chen #define HOST_CMD_STA_CONFIGURE 0x023f 401*73b01e57SJeff Chen #define HOST_CMD_VDLL 0x0240 402*73b01e57SJeff Chen #define HOST_CMD_CHAN_REGION_CFG 0x0242 403*73b01e57SJeff Chen #define HOST_CMD_PACKET_AGGR_CTRL 0x0251 404*73b01e57SJeff Chen #define HOST_CMD_ADD_NEW_STATION 0x025f 405*73b01e57SJeff Chen #define HOST_CMD_11AX_CFG 0x0266 406*73b01e57SJeff Chen #define HOST_CMD_11AX_CMD 0x026d 407*73b01e57SJeff Chen #define HOST_CMD_TWT_CFG 0x0270 408*73b01e57SJeff Chen 409*73b01e57SJeff Chen #define PROTOCOL_NO_SECURITY 0x01 410*73b01e57SJeff Chen #define PROTOCOL_STATIC_WEP 0x02 411*73b01e57SJeff Chen #define PROTOCOL_WPA 0x08 412*73b01e57SJeff Chen #define PROTOCOL_WPA2 0x20 413*73b01e57SJeff Chen #define PROTOCOL_WPA2_MIXED 0x28 414*73b01e57SJeff Chen #define PROTOCOL_EAP 0x40 415*73b01e57SJeff Chen #define KEY_MGMT_EAP 0x01 416*73b01e57SJeff Chen #define KEY_MGMT_PSK 0x02 417*73b01e57SJeff Chen #define KEY_MGMT_NONE 0x04 418*73b01e57SJeff Chen #define KEY_MGMT_PSK_SHA256 0x100 419*73b01e57SJeff Chen #define KEY_MGMT_OWE 0x200 420*73b01e57SJeff Chen #define KEY_MGMT_SAE 0x400 421*73b01e57SJeff Chen #define CIPHER_TKIP 0x04 422*73b01e57SJeff Chen #define CIPHER_AES_CCMP 0x08 423*73b01e57SJeff Chen #define VALID_CIPHER_BITMAP 0x0c 424*73b01e57SJeff Chen 425*73b01e57SJeff Chen enum ENH_PS_MODES { 426*73b01e57SJeff Chen EN_PS = 1, 427*73b01e57SJeff Chen DIS_PS = 2, 428*73b01e57SJeff Chen EN_AUTO_DS = 3, 429*73b01e57SJeff Chen DIS_AUTO_DS = 4, 430*73b01e57SJeff Chen SLEEP_CONFIRM = 5, 431*73b01e57SJeff Chen GET_PS = 0, 432*73b01e57SJeff Chen EN_AUTO_PS = 0xff, 433*73b01e57SJeff Chen DIS_AUTO_PS = 0xfe, 434*73b01e57SJeff Chen }; 435*73b01e57SJeff Chen 436*73b01e57SJeff Chen enum nxpwifi_channel_flags { 437*73b01e57SJeff Chen NXPWIFI_CHANNEL_PASSIVE = BIT(0), 438*73b01e57SJeff Chen NXPWIFI_CHANNEL_DFS = BIT(1), 439*73b01e57SJeff Chen NXPWIFI_CHANNEL_NOHT40 = BIT(2), 440*73b01e57SJeff Chen NXPWIFI_CHANNEL_NOHT80 = BIT(3), 441*73b01e57SJeff Chen NXPWIFI_CHANNEL_DISABLED = BIT(7), 442*73b01e57SJeff Chen }; 443*73b01e57SJeff Chen 444*73b01e57SJeff Chen #define HOST_RET_BIT 0x8000 445*73b01e57SJeff Chen #define HOST_ACT_GEN_GET 0x0000 446*73b01e57SJeff Chen #define HOST_ACT_GEN_SET 0x0001 447*73b01e57SJeff Chen #define HOST_ACT_GEN_REMOVE 0x0004 448*73b01e57SJeff Chen #define HOST_ACT_BITWISE_SET 0x0002 449*73b01e57SJeff Chen #define HOST_ACT_BITWISE_CLR 0x0003 450*73b01e57SJeff Chen #define HOST_RESULT_OK 0x0000 451*73b01e57SJeff Chen #define HOST_ACT_MAC_RX_ON BIT(0) 452*73b01e57SJeff Chen #define HOST_ACT_MAC_TX_ON BIT(1) 453*73b01e57SJeff Chen #define HOST_ACT_MAC_WEP_ENABLE BIT(3) 454*73b01e57SJeff Chen #define HOST_ACT_MAC_ETHERNETII_ENABLE BIT(4) 455*73b01e57SJeff Chen #define HOST_ACT_MAC_PROMISCUOUS_ENABLE BIT(7) 456*73b01e57SJeff Chen #define HOST_ACT_MAC_ALL_MULTICAST_ENABLE BIT(8) 457*73b01e57SJeff Chen #define HOST_ACT_MAC_DYNAMIC_BW_ENABLE BIT(16) 458*73b01e57SJeff Chen 459*73b01e57SJeff Chen #define HOST_BSS_MODE_IBSS 0x0002 460*73b01e57SJeff Chen #define HOST_BSS_MODE_ANY 0x0003 461*73b01e57SJeff Chen 462*73b01e57SJeff Chen #define HOST_SCAN_RADIO_TYPE_BG 0 463*73b01e57SJeff Chen #define HOST_SCAN_RADIO_TYPE_A 1 464*73b01e57SJeff Chen 465*73b01e57SJeff Chen #define HS_CFG_CANCEL 0xffffffff 466*73b01e57SJeff Chen #define HS_CFG_COND_DEF 0x00000000 467*73b01e57SJeff Chen #define HS_CFG_GPIO_DEF 0xff 468*73b01e57SJeff Chen #define HS_CFG_GAP_DEF 0xff 469*73b01e57SJeff Chen #define HS_CFG_COND_BROADCAST_DATA 0x00000001 470*73b01e57SJeff Chen #define HS_CFG_COND_UNICAST_DATA 0x00000002 471*73b01e57SJeff Chen #define HS_CFG_COND_MAC_EVENT 0x00000004 472*73b01e57SJeff Chen #define HS_CFG_COND_MULTICAST_DATA 0x00000008 473*73b01e57SJeff Chen 474*73b01e57SJeff Chen #define CONNECT_ERR_AUTH_ERR_STA_FAILURE 0xFFFB 475*73b01e57SJeff Chen #define CONNECT_ERR_ASSOC_ERR_TIMEOUT 0xFFFC 476*73b01e57SJeff Chen #define CONNECT_ERR_ASSOC_ERR_AUTH_REFUSED 0xFFFD 477*73b01e57SJeff Chen #define CONNECT_ERR_AUTH_MSG_UNHANDLED 0xFFFE 478*73b01e57SJeff Chen #define CONNECT_ERR_STA_FAILURE 0xFFFF 479*73b01e57SJeff Chen 480*73b01e57SJeff Chen #define CMD_F_HOSTCMD BIT(0) 481*73b01e57SJeff Chen 482*73b01e57SJeff Chen #define HOST_CMD_ID_MASK 0x0fff 483*73b01e57SJeff Chen 484*73b01e57SJeff Chen #define HOST_SEQ_NUM_MASK 0x00ff 485*73b01e57SJeff Chen 486*73b01e57SJeff Chen #define HOST_BSS_NUM_MASK 0x0f00 487*73b01e57SJeff Chen 488*73b01e57SJeff Chen #define HOST_BSS_TYPE_MASK 0xf000 489*73b01e57SJeff Chen 490*73b01e57SJeff Chen #define HOST_ACT_SET_RX 0x0001 491*73b01e57SJeff Chen #define HOST_ACT_SET_TX 0x0002 492*73b01e57SJeff Chen #define HOST_ACT_SET_BOTH 0x0003 493*73b01e57SJeff Chen #define HOST_ACT_GET_RX 0x0004 494*73b01e57SJeff Chen #define HOST_ACT_GET_TX 0x0008 495*73b01e57SJeff Chen #define HOST_ACT_GET_BOTH 0x000c 496*73b01e57SJeff Chen 497*73b01e57SJeff Chen #define HOST_ACT_REMOVE_STA 0x0 498*73b01e57SJeff Chen #define HOST_ACT_ADD_STA 0x1 499*73b01e57SJeff Chen 500*73b01e57SJeff Chen #define RF_ANTENNA_AUTO 0xFFFF 501*73b01e57SJeff Chen 502*73b01e57SJeff Chen #define HOST_SET_SEQ_NO_BSS_INFO(seq, num, type) \ 503*73b01e57SJeff Chen ((((seq) & 0x00ff) | \ 504*73b01e57SJeff Chen (((num) & 0x000f) << 8)) | \ 505*73b01e57SJeff Chen (((type) & 0x000f) << 12)) 506*73b01e57SJeff Chen 507*73b01e57SJeff Chen #define HOST_GET_SEQ_NO(seq) \ 508*73b01e57SJeff Chen ((seq) & HOST_SEQ_NUM_MASK) 509*73b01e57SJeff Chen 510*73b01e57SJeff Chen #define HOST_GET_BSS_NO(seq) \ 511*73b01e57SJeff Chen (((seq) & HOST_BSS_NUM_MASK) >> 8) 512*73b01e57SJeff Chen 513*73b01e57SJeff Chen #define HOST_GET_BSS_TYPE(seq) \ 514*73b01e57SJeff Chen (((seq) & HOST_BSS_TYPE_MASK) >> 12) 515*73b01e57SJeff Chen 516*73b01e57SJeff Chen #define EVENT_DUMMY_HOST_WAKEUP_SIGNAL 0x00000001 517*73b01e57SJeff Chen #define EVENT_LINK_LOST 0x00000003 518*73b01e57SJeff Chen #define EVENT_LINK_SENSED 0x00000004 519*73b01e57SJeff Chen #define EVENT_MIB_CHANGED 0x00000006 520*73b01e57SJeff Chen #define EVENT_INIT_DONE 0x00000007 521*73b01e57SJeff Chen #define EVENT_DEAUTHENTICATED 0x00000008 522*73b01e57SJeff Chen #define EVENT_DISASSOCIATED 0x00000009 523*73b01e57SJeff Chen #define EVENT_PS_AWAKE 0x0000000a 524*73b01e57SJeff Chen #define EVENT_PS_SLEEP 0x0000000b 525*73b01e57SJeff Chen #define EVENT_MIC_ERR_MULTICAST 0x0000000d 526*73b01e57SJeff Chen #define EVENT_MIC_ERR_UNICAST 0x0000000e 527*73b01e57SJeff Chen #define EVENT_DEEP_SLEEP_AWAKE 0x00000010 528*73b01e57SJeff Chen #define EVENT_WMM_STATUS_CHANGE 0x00000017 529*73b01e57SJeff Chen #define EVENT_BG_SCAN_REPORT 0x00000018 530*73b01e57SJeff Chen #define EVENT_RSSI_LOW 0x00000019 531*73b01e57SJeff Chen #define EVENT_SNR_LOW 0x0000001a 532*73b01e57SJeff Chen #define EVENT_MAX_FAIL 0x0000001b 533*73b01e57SJeff Chen #define EVENT_RSSI_HIGH 0x0000001c 534*73b01e57SJeff Chen #define EVENT_SNR_HIGH 0x0000001d 535*73b01e57SJeff Chen #define EVENT_DATA_RSSI_LOW 0x00000024 536*73b01e57SJeff Chen #define EVENT_DATA_SNR_LOW 0x00000025 537*73b01e57SJeff Chen #define EVENT_DATA_RSSI_HIGH 0x00000026 538*73b01e57SJeff Chen #define EVENT_DATA_SNR_HIGH 0x00000027 539*73b01e57SJeff Chen #define EVENT_LINK_QUALITY 0x00000028 540*73b01e57SJeff Chen #define EVENT_PORT_RELEASE 0x0000002b 541*73b01e57SJeff Chen #define EVENT_UAP_STA_DEAUTH 0x0000002c 542*73b01e57SJeff Chen #define EVENT_UAP_STA_ASSOC 0x0000002d 543*73b01e57SJeff Chen #define EVENT_UAP_BSS_START 0x0000002e 544*73b01e57SJeff Chen #define EVENT_PRE_BEACON_LOST 0x00000031 545*73b01e57SJeff Chen #define EVENT_ADDBA 0x00000033 546*73b01e57SJeff Chen #define EVENT_DELBA 0x00000034 547*73b01e57SJeff Chen #define EVENT_BA_STREAM_TIEMOUT 0x00000037 548*73b01e57SJeff Chen #define EVENT_AMSDU_AGGR_CTRL 0x00000042 549*73b01e57SJeff Chen #define EVENT_UAP_BSS_IDLE 0x00000043 550*73b01e57SJeff Chen #define EVENT_UAP_BSS_ACTIVE 0x00000044 551*73b01e57SJeff Chen #define EVENT_WEP_ICV_ERR 0x00000046 552*73b01e57SJeff Chen #define EVENT_HS_ACT_REQ 0x00000047 553*73b01e57SJeff Chen #define EVENT_BW_CHANGE 0x00000048 554*73b01e57SJeff Chen #define EVENT_UAP_MIC_COUNTERMEASURES 0x0000004c 555*73b01e57SJeff Chen #define EVENT_HOSTWAKE_STAIE 0x0000004d 556*73b01e57SJeff Chen #define EVENT_CHANNEL_SWITCH_ANN 0x00000050 557*73b01e57SJeff Chen #define EVENT_RADAR_DETECTED 0x00000053 558*73b01e57SJeff Chen #define EVENT_CHANNEL_REPORT_RDY 0x00000054 559*73b01e57SJeff Chen #define EVENT_TX_DATA_PAUSE 0x00000055 560*73b01e57SJeff Chen #define EVENT_EXT_SCAN_REPORT 0x00000058 561*73b01e57SJeff Chen #define EVENT_RXBA_SYNC 0x00000059 562*73b01e57SJeff Chen #define EVENT_REMAIN_ON_CHAN_EXPIRED 0x0000005f 563*73b01e57SJeff Chen #define EVENT_UNKNOWN_DEBUG 0x00000063 564*73b01e57SJeff Chen #define EVENT_BG_SCAN_STOPPED 0x00000065 565*73b01e57SJeff Chen #define EVENT_MULTI_CHAN_INFO 0x0000006a 566*73b01e57SJeff Chen #define EVENT_FW_DUMP_INFO 0x00000073 567*73b01e57SJeff Chen #define EVENT_TX_STATUS_REPORT 0x00000074 568*73b01e57SJeff Chen #define EVENT_BT_COEX_WLAN_PARA_CHANGE 0X00000076 569*73b01e57SJeff Chen #define EVENT_VDLL_IND 0x00000081 570*73b01e57SJeff Chen 571*73b01e57SJeff Chen #define EVENT_ID_MASK 0xffff 572*73b01e57SJeff Chen #define BSS_NUM_MASK 0xf 573*73b01e57SJeff Chen 574*73b01e57SJeff Chen #define EVENT_GET_BSS_NUM(event_cause) \ 575*73b01e57SJeff Chen (((event_cause) >> 16) & BSS_NUM_MASK) 576*73b01e57SJeff Chen 577*73b01e57SJeff Chen #define EVENT_GET_BSS_TYPE(event_cause) \ 578*73b01e57SJeff Chen (((event_cause) >> 24) & 0x00ff) 579*73b01e57SJeff Chen 580*73b01e57SJeff Chen #define NXPWIFI_MAX_PATTERN_LEN 40 581*73b01e57SJeff Chen #define NXPWIFI_MAX_OFFSET_LEN 100 582*73b01e57SJeff Chen #define NXPWIFI_MAX_ND_MATCH_SETS 10 583*73b01e57SJeff Chen 584*73b01e57SJeff Chen #define STACK_NBYTES 100 585*73b01e57SJeff Chen #define TYPE_DNUM 1 586*73b01e57SJeff Chen #define TYPE_BYTESEQ 2 587*73b01e57SJeff Chen #define MAX_OPERAND 0x40 588*73b01e57SJeff Chen #define TYPE_EQ (MAX_OPERAND + 1) 589*73b01e57SJeff Chen #define TYPE_EQ_DNUM (MAX_OPERAND + 2) 590*73b01e57SJeff Chen #define TYPE_EQ_BIT (MAX_OPERAND + 3) 591*73b01e57SJeff Chen #define TYPE_AND (MAX_OPERAND + 4) 592*73b01e57SJeff Chen #define TYPE_OR (MAX_OPERAND + 5) 593*73b01e57SJeff Chen #define MEF_MODE_HOST_SLEEP 1 594*73b01e57SJeff Chen #define MEF_ACTION_ALLOW_AND_WAKEUP_HOST 3 595*73b01e57SJeff Chen #define MEF_ACTION_AUTO_ARP 0x10 596*73b01e57SJeff Chen #define NXPWIFI_CRITERIA_BROADCAST BIT(0) 597*73b01e57SJeff Chen #define NXPWIFI_CRITERIA_UNICAST BIT(1) 598*73b01e57SJeff Chen #define NXPWIFI_CRITERIA_MULTICAST BIT(3) 599*73b01e57SJeff Chen #define NXPWIFI_MAX_SUPPORTED_IPADDR 4 600*73b01e57SJeff Chen 601*73b01e57SJeff Chen #define NXPWIFI_DEF_CS_UNIT_TIME 2 602*73b01e57SJeff Chen #define NXPWIFI_DEF_CS_THR_OTHERLINK 10 603*73b01e57SJeff Chen #define NXPWIFI_DEF_THR_DIRECTLINK 0 604*73b01e57SJeff Chen #define NXPWIFI_DEF_CS_TIME 10 605*73b01e57SJeff Chen #define NXPWIFI_DEF_CS_TIMEOUT 16 606*73b01e57SJeff Chen #define NXPWIFI_DEF_CS_REG_CLASS 12 607*73b01e57SJeff Chen #define NXPWIFI_DEF_CS_PERIODICITY 1 608*73b01e57SJeff Chen 609*73b01e57SJeff Chen #define NXPWIFI_FW_V15 15 610*73b01e57SJeff Chen 611*73b01e57SJeff Chen #define NXPWIFI_MASTER_RADAR_DET_MASK BIT(1) 612*73b01e57SJeff Chen 613*73b01e57SJeff Chen struct nxpwifi_ie_types_header { 614*73b01e57SJeff Chen __le16 type; 615*73b01e57SJeff Chen __le16 len; 616*73b01e57SJeff Chen } __packed; 617*73b01e57SJeff Chen 618*73b01e57SJeff Chen struct nxpwifi_ie_types_data { 619*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 620*73b01e57SJeff Chen u8 data[]; 621*73b01e57SJeff Chen } __packed; 622*73b01e57SJeff Chen 623*73b01e57SJeff Chen /* Generic TLV wrapper for firmware data */ 624*73b01e57SJeff Chen struct nxpwifi_tlv { 625*73b01e57SJeff Chen __le16 type; 626*73b01e57SJeff Chen __le16 len; 627*73b01e57SJeff Chen u8 data[]; 628*73b01e57SJeff Chen } __packed; 629*73b01e57SJeff Chen 630*73b01e57SJeff Chen #define NXPWIFI_TxPD_POWER_MGMT_NULL_PACKET 0x01 631*73b01e57SJeff Chen #define NXPWIFI_TxPD_POWER_MGMT_LAST_PACKET 0x08 632*73b01e57SJeff Chen #define NXPWIFI_TXPD_FLAGS_REQ_TX_STATUS 0x20 633*73b01e57SJeff Chen 634*73b01e57SJeff Chen enum HS_WAKEUP_REASON { 635*73b01e57SJeff Chen NO_HSWAKEUP_REASON = 0, 636*73b01e57SJeff Chen BCAST_DATA_MATCHED, 637*73b01e57SJeff Chen MCAST_DATA_MATCHED, 638*73b01e57SJeff Chen UCAST_DATA_MATCHED, 639*73b01e57SJeff Chen MASKTABLE_EVENT_MATCHED, 640*73b01e57SJeff Chen NON_MASKABLE_EVENT_MATCHED, 641*73b01e57SJeff Chen NON_MASKABLE_CONDITION_MATCHED, 642*73b01e57SJeff Chen MAGIC_PATTERN_MATCHED, 643*73b01e57SJeff Chen CONTROL_FRAME_MATCHED, 644*73b01e57SJeff Chen MANAGEMENT_FRAME_MATCHED, 645*73b01e57SJeff Chen GTK_REKEY_FAILURE, 646*73b01e57SJeff Chen RESERVED 647*73b01e57SJeff Chen }; 648*73b01e57SJeff Chen 649*73b01e57SJeff Chen struct txpd { 650*73b01e57SJeff Chen u8 bss_type; 651*73b01e57SJeff Chen u8 bss_num; 652*73b01e57SJeff Chen __le16 tx_pkt_length; 653*73b01e57SJeff Chen __le16 tx_pkt_offset; 654*73b01e57SJeff Chen __le16 tx_pkt_type; 655*73b01e57SJeff Chen __le32 tx_control; 656*73b01e57SJeff Chen u8 priority; 657*73b01e57SJeff Chen u8 flags; 658*73b01e57SJeff Chen u8 pkt_delay_2ms; 659*73b01e57SJeff Chen u8 reserved1[2]; 660*73b01e57SJeff Chen u8 tx_token_id; 661*73b01e57SJeff Chen u8 reserved[2]; 662*73b01e57SJeff Chen } __packed; 663*73b01e57SJeff Chen 664*73b01e57SJeff Chen struct rxpd { 665*73b01e57SJeff Chen u8 bss_type; 666*73b01e57SJeff Chen u8 bss_num; 667*73b01e57SJeff Chen __le16 rx_pkt_length; 668*73b01e57SJeff Chen __le16 rx_pkt_offset; 669*73b01e57SJeff Chen __le16 rx_pkt_type; 670*73b01e57SJeff Chen __le16 seq_num; 671*73b01e57SJeff Chen u8 priority; 672*73b01e57SJeff Chen u8 rx_rate; 673*73b01e57SJeff Chen s8 snr; 674*73b01e57SJeff Chen s8 nf; 675*73b01e57SJeff Chen /* 676*73b01e57SJeff Chen * rate_info bit definition (FW encoded) 677*73b01e57SJeff Chen * 678*73b01e57SJeff Chen * [1:0] format 679*73b01e57SJeff Chen * 00 = legacy 680*73b01e57SJeff Chen * 01 = HT 681*73b01e57SJeff Chen * 10 = VHT 682*73b01e57SJeff Chen * 11 = HE 683*73b01e57SJeff Chen * 684*73b01e57SJeff Chen * [3:2] bandwidth 685*73b01e57SJeff Chen * 00 = 20 MHz 686*73b01e57SJeff Chen * 01 = 40 MHz 687*73b01e57SJeff Chen * 10 = 80 MHz 688*73b01e57SJeff Chen * 11 = 160 MHz 689*73b01e57SJeff Chen * 690*73b01e57SJeff Chen * [4] GI (HT/VHT) / HE GI LSB 691*73b01e57SJeff Chen * HT/VHT: 692*73b01e57SJeff Chen * 0 = LGI 693*73b01e57SJeff Chen * 1 = SGI 694*73b01e57SJeff Chen * 695*73b01e57SJeff Chen * HE: 696*73b01e57SJeff Chen * used as GI[0] 697*73b01e57SJeff Chen * 698*73b01e57SJeff Chen * [5] STBC 699*73b01e57SJeff Chen * 0 = no STBC 700*73b01e57SJeff Chen * 1 = STBC enabled 701*73b01e57SJeff Chen * 702*73b01e57SJeff Chen * [6] LDPC 703*73b01e57SJeff Chen * 0 = BCC 704*73b01e57SJeff Chen * 1 = LDPC 705*73b01e57SJeff Chen * 706*73b01e57SJeff Chen * [7] HE GI MSB 707*73b01e57SJeff Chen * 708*73b01e57SJeff Chen * HE GI encoding (combined from bit7:bit4): 709*73b01e57SJeff Chen * GI[1:0] = {bit7, bit4} 710*73b01e57SJeff Chen * 711*73b01e57SJeff Chen * 00 = 0.8 us 712*73b01e57SJeff Chen * 01 = 1.6 us 713*73b01e57SJeff Chen * 10 = 3.2 us 714*73b01e57SJeff Chen * 11 = reserved / undefined 715*73b01e57SJeff Chen */ 716*73b01e57SJeff Chen u8 rate_info; 717*73b01e57SJeff Chen u8 reserved[3]; 718*73b01e57SJeff Chen u8 flags; 719*73b01e57SJeff Chen u8 antenna; 720*73b01e57SJeff Chen /* toa_tod_tstamps: [31:0] ToA, [63:32] ToD (ns). */ 721*73b01e57SJeff Chen __le64 toa_tod_tstamps; 722*73b01e57SJeff Chen /* rx info */ 723*73b01e57SJeff Chen __le32 rx_info; 724*73b01e57SJeff Chen /* Reserved */ 725*73b01e57SJeff Chen u8 reserved3[8]; 726*73b01e57SJeff Chen u8 ta_mac[6]; 727*73b01e57SJeff Chen u8 reserved4[2]; 728*73b01e57SJeff Chen } __packed; 729*73b01e57SJeff Chen 730*73b01e57SJeff Chen struct radiotap_timestamp { 731*73b01e57SJeff Chen /* device timestamp */ 732*73b01e57SJeff Chen u64 device_timestamp; 733*73b01e57SJeff Chen /* accuracy */ 734*73b01e57SJeff Chen u16 accuracy; 735*73b01e57SJeff Chen /* 736*73b01e57SJeff Chen * unit: 737*73b01e57SJeff Chen * 0 milliseconds, 738*73b01e57SJeff Chen * 1 microseconds, 739*73b01e57SJeff Chen * 2 nanoseconds, 740*73b01e57SJeff Chen * 3-15 reserved 741*73b01e57SJeff Chen */ 742*73b01e57SJeff Chen u8 unit : 4; 743*73b01e57SJeff Chen /* 744*73b01e57SJeff Chen * position: 745*73b01e57SJeff Chen * 0 first bit (or symbol containing it) of MPDU - matches TSFT field 746*73b01e57SJeff Chen * 1 signal acquisition at start of PLCP 747*73b01e57SJeff Chen * 2 end of PPDU 748*73b01e57SJeff Chen * 3 end of MPDU (after FCS) 749*73b01e57SJeff Chen * 4-14 reserved 750*73b01e57SJeff Chen * 15 unknown or vendor/OOB defined 751*73b01e57SJeff Chen */ 752*73b01e57SJeff Chen u8 position : 4; 753*73b01e57SJeff Chen /* 754*73b01e57SJeff Chen * flags 755*73b01e57SJeff Chen * 0x01 32-bit counter (high 32 bits are unused) 756*73b01e57SJeff Chen * 0x02 accuracy known 757*73b01e57SJeff Chen * 0xFC reserved 758*73b01e57SJeff Chen */ 759*73b01e57SJeff Chen u8 flags; 760*73b01e57SJeff Chen } __packed; 761*73b01e57SJeff Chen 762*73b01e57SJeff Chen struct rxpd_extra_info { 763*73b01e57SJeff Chen /* flags */ 764*73b01e57SJeff Chen u8 flags; 765*73b01e57SJeff Chen /* channel.flags */ 766*73b01e57SJeff Chen u16 channel_flags; 767*73b01e57SJeff Chen /* mcs.known */ 768*73b01e57SJeff Chen u8 mcs_known; 769*73b01e57SJeff Chen /* mcs.flags */ 770*73b01e57SJeff Chen u8 mcs_flags; 771*73b01e57SJeff Chen /* vht/he sig1 */ 772*73b01e57SJeff Chen u32 vht_he_sig1; 773*73b01e57SJeff Chen /* vht/he sig2 */ 774*73b01e57SJeff Chen u32 vht_he_sig2; 775*73b01e57SJeff Chen /* HE user idx */ 776*73b01e57SJeff Chen u32 user_idx; 777*73b01e57SJeff Chen /** timestamp */ 778*73b01e57SJeff Chen struct radiotap_timestamp timestamp; 779*73b01e57SJeff Chen /** PLCP CRC Failed */ 780*73b01e57SJeff Chen u8 plcp_crc_failed; 781*73b01e57SJeff Chen u8 rssi_dbm_a; 782*73b01e57SJeff Chen u8 rssi_dbm_b; 783*73b01e57SJeff Chen } __packed; 784*73b01e57SJeff Chen 785*73b01e57SJeff Chen struct uap_txpd { 786*73b01e57SJeff Chen u8 bss_type; 787*73b01e57SJeff Chen u8 bss_num; 788*73b01e57SJeff Chen __le16 tx_pkt_length; 789*73b01e57SJeff Chen __le16 tx_pkt_offset; 790*73b01e57SJeff Chen __le16 tx_pkt_type; 791*73b01e57SJeff Chen __le32 tx_control; 792*73b01e57SJeff Chen u8 priority; 793*73b01e57SJeff Chen u8 flags; 794*73b01e57SJeff Chen u8 pkt_delay_2ms; 795*73b01e57SJeff Chen u8 reserved1[2]; 796*73b01e57SJeff Chen u8 tx_token_id; 797*73b01e57SJeff Chen u8 reserved[2]; 798*73b01e57SJeff Chen } __packed; 799*73b01e57SJeff Chen 800*73b01e57SJeff Chen struct uap_rxpd { 801*73b01e57SJeff Chen u8 bss_type; 802*73b01e57SJeff Chen u8 bss_num; 803*73b01e57SJeff Chen __le16 rx_pkt_length; 804*73b01e57SJeff Chen __le16 rx_pkt_offset; 805*73b01e57SJeff Chen __le16 rx_pkt_type; 806*73b01e57SJeff Chen __le16 seq_num; 807*73b01e57SJeff Chen u8 priority; 808*73b01e57SJeff Chen u8 rx_rate; 809*73b01e57SJeff Chen s8 snr; 810*73b01e57SJeff Chen s8 nf; 811*73b01e57SJeff Chen u8 ht_info; 812*73b01e57SJeff Chen u8 reserved[3]; 813*73b01e57SJeff Chen u8 flags; 814*73b01e57SJeff Chen } __packed; 815*73b01e57SJeff Chen 816*73b01e57SJeff Chen struct nxpwifi_auth { 817*73b01e57SJeff Chen __le16 auth_alg; 818*73b01e57SJeff Chen __le16 auth_transaction; 819*73b01e57SJeff Chen __le16 status_code; 820*73b01e57SJeff Chen /* possibly followed by Challenge text */ 821*73b01e57SJeff Chen u8 variable[]; 822*73b01e57SJeff Chen } __packed; 823*73b01e57SJeff Chen 824*73b01e57SJeff Chen struct nxpwifi_ieee80211_mgmt { 825*73b01e57SJeff Chen __le16 frame_control; 826*73b01e57SJeff Chen __le16 duration; 827*73b01e57SJeff Chen u8 da[ETH_ALEN]; 828*73b01e57SJeff Chen u8 sa[ETH_ALEN]; 829*73b01e57SJeff Chen u8 bssid[ETH_ALEN]; 830*73b01e57SJeff Chen __le16 seq_ctrl; 831*73b01e57SJeff Chen u8 addr4[ETH_ALEN]; 832*73b01e57SJeff Chen struct nxpwifi_auth auth; 833*73b01e57SJeff Chen } __packed; 834*73b01e57SJeff Chen 835*73b01e57SJeff Chen struct nxpwifi_fw_chan_stats { 836*73b01e57SJeff Chen u8 chan_num; 837*73b01e57SJeff Chen u8 bandcfg; 838*73b01e57SJeff Chen u8 flags; 839*73b01e57SJeff Chen s8 noise; 840*73b01e57SJeff Chen __le16 total_bss; 841*73b01e57SJeff Chen __le16 cca_scan_dur; 842*73b01e57SJeff Chen __le16 cca_busy_dur; 843*73b01e57SJeff Chen } __packed; 844*73b01e57SJeff Chen 845*73b01e57SJeff Chen enum nxpwifi_chan_scan_mode_bitmasks { 846*73b01e57SJeff Chen NXPWIFI_PASSIVE_SCAN = BIT(0), 847*73b01e57SJeff Chen NXPWIFI_DISABLE_CHAN_FILT = BIT(1), 848*73b01e57SJeff Chen NXPWIFI_HIDDEN_SSID_REPORT = BIT(4), 849*73b01e57SJeff Chen }; 850*73b01e57SJeff Chen 851*73b01e57SJeff Chen struct nxpwifi_chan_scan_param_set { 852*73b01e57SJeff Chen u8 band_cfg; 853*73b01e57SJeff Chen u8 chan_number; 854*73b01e57SJeff Chen u8 chan_scan_mode_bmap; 855*73b01e57SJeff Chen __le16 min_scan_time; 856*73b01e57SJeff Chen __le16 max_scan_time; 857*73b01e57SJeff Chen } __packed; 858*73b01e57SJeff Chen 859*73b01e57SJeff Chen struct nxpwifi_ie_types_chan_list_param_set { 860*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 861*73b01e57SJeff Chen struct nxpwifi_chan_scan_param_set chan_scan_param[]; 862*73b01e57SJeff Chen } __packed; 863*73b01e57SJeff Chen 864*73b01e57SJeff Chen struct nxpwifi_ie_types_rxba_sync { 865*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 866*73b01e57SJeff Chen u8 mac[ETH_ALEN]; 867*73b01e57SJeff Chen u8 tid; 868*73b01e57SJeff Chen u8 reserved; 869*73b01e57SJeff Chen __le16 seq_num; 870*73b01e57SJeff Chen __le16 bitmap_len; 871*73b01e57SJeff Chen u8 bitmap[]; 872*73b01e57SJeff Chen } __packed; 873*73b01e57SJeff Chen 874*73b01e57SJeff Chen struct chan_band_param_set { 875*73b01e57SJeff Chen u8 radio_type; 876*73b01e57SJeff Chen u8 chan_number; 877*73b01e57SJeff Chen }; 878*73b01e57SJeff Chen 879*73b01e57SJeff Chen struct nxpwifi_ie_types_chan_band_list_param_set { 880*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 881*73b01e57SJeff Chen struct chan_band_param_set chan_band_param[]; 882*73b01e57SJeff Chen } __packed; 883*73b01e57SJeff Chen 884*73b01e57SJeff Chen struct nxpwifi_ie_types_rates_param_set { 885*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 886*73b01e57SJeff Chen u8 rates[]; 887*73b01e57SJeff Chen } __packed; 888*73b01e57SJeff Chen 889*73b01e57SJeff Chen struct nxpwifi_ie_types_ssid_param_set { 890*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 891*73b01e57SJeff Chen u8 ssid[]; 892*73b01e57SJeff Chen } __packed; 893*73b01e57SJeff Chen 894*73b01e57SJeff Chen struct nxpwifi_ie_types_host_mlme { 895*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 896*73b01e57SJeff Chen u8 host_mlme; 897*73b01e57SJeff Chen } __packed; 898*73b01e57SJeff Chen 899*73b01e57SJeff Chen struct nxpwifi_ie_types_num_probes { 900*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 901*73b01e57SJeff Chen __le16 num_probes; 902*73b01e57SJeff Chen } __packed; 903*73b01e57SJeff Chen 904*73b01e57SJeff Chen struct nxpwifi_ie_types_repeat_count { 905*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 906*73b01e57SJeff Chen __le16 repeat_count; 907*73b01e57SJeff Chen } __packed; 908*73b01e57SJeff Chen 909*73b01e57SJeff Chen struct nxpwifi_ie_types_min_rssi_threshold { 910*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 911*73b01e57SJeff Chen __le16 rssi_threshold; 912*73b01e57SJeff Chen } __packed; 913*73b01e57SJeff Chen 914*73b01e57SJeff Chen struct nxpwifi_ie_types_bgscan_start_later { 915*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 916*73b01e57SJeff Chen __le16 start_later; 917*73b01e57SJeff Chen } __packed; 918*73b01e57SJeff Chen 919*73b01e57SJeff Chen struct nxpwifi_ie_types_scan_chan_gap { 920*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 921*73b01e57SJeff Chen /* time gap in TUs to be used between two consecutive channels scan */ 922*73b01e57SJeff Chen __le16 chan_gap; 923*73b01e57SJeff Chen } __packed; 924*73b01e57SJeff Chen 925*73b01e57SJeff Chen struct nxpwifi_ie_types_random_mac { 926*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 927*73b01e57SJeff Chen u8 mac[ETH_ALEN]; 928*73b01e57SJeff Chen } __packed; 929*73b01e57SJeff Chen 930*73b01e57SJeff Chen struct nxpwifi_ietypes_chanstats { 931*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 932*73b01e57SJeff Chen struct nxpwifi_fw_chan_stats chanstats[]; 933*73b01e57SJeff Chen } __packed; 934*73b01e57SJeff Chen 935*73b01e57SJeff Chen struct nxpwifi_ie_types_wildcard_ssid_params { 936*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 937*73b01e57SJeff Chen u8 max_ssid_length; 938*73b01e57SJeff Chen u8 ssid[]; 939*73b01e57SJeff Chen } __packed; 940*73b01e57SJeff Chen 941*73b01e57SJeff Chen #define TSF_DATA_SIZE 8 942*73b01e57SJeff Chen struct nxpwifi_ie_types_tsf_timestamp { 943*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 944*73b01e57SJeff Chen u8 tsf_data[]; 945*73b01e57SJeff Chen } __packed; 946*73b01e57SJeff Chen 947*73b01e57SJeff Chen struct nxpwifi_cf_param_set { 948*73b01e57SJeff Chen u8 cfp_cnt; 949*73b01e57SJeff Chen u8 cfp_period; 950*73b01e57SJeff Chen __le16 cfp_max_duration; 951*73b01e57SJeff Chen __le16 cfp_duration_remaining; 952*73b01e57SJeff Chen } __packed; 953*73b01e57SJeff Chen 954*73b01e57SJeff Chen struct nxpwifi_ibss_param_set { 955*73b01e57SJeff Chen __le16 atim_window; 956*73b01e57SJeff Chen } __packed; 957*73b01e57SJeff Chen 958*73b01e57SJeff Chen struct nxpwifi_ie_types_ss_param_set { 959*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 960*73b01e57SJeff Chen union { 961*73b01e57SJeff Chen struct nxpwifi_cf_param_set cf_param_set[1]; 962*73b01e57SJeff Chen struct nxpwifi_ibss_param_set ibss_param_set[1]; 963*73b01e57SJeff Chen } cf_ibss; 964*73b01e57SJeff Chen } __packed; 965*73b01e57SJeff Chen 966*73b01e57SJeff Chen struct nxpwifi_fh_param_set { 967*73b01e57SJeff Chen __le16 dwell_time; 968*73b01e57SJeff Chen u8 hop_set; 969*73b01e57SJeff Chen u8 hop_pattern; 970*73b01e57SJeff Chen u8 hop_index; 971*73b01e57SJeff Chen } __packed; 972*73b01e57SJeff Chen 973*73b01e57SJeff Chen struct nxpwifi_ds_param_set { 974*73b01e57SJeff Chen u8 current_chan; 975*73b01e57SJeff Chen } __packed; 976*73b01e57SJeff Chen 977*73b01e57SJeff Chen struct nxpwifi_ie_types_phy_param_set { 978*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 979*73b01e57SJeff Chen union { 980*73b01e57SJeff Chen struct nxpwifi_fh_param_set fh_param_set[1]; 981*73b01e57SJeff Chen struct nxpwifi_ds_param_set ds_param_set[1]; 982*73b01e57SJeff Chen } fh_ds; 983*73b01e57SJeff Chen } __packed; 984*73b01e57SJeff Chen 985*73b01e57SJeff Chen struct nxpwifi_ie_types_auth_type { 986*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 987*73b01e57SJeff Chen __le16 auth_type; 988*73b01e57SJeff Chen } __packed; 989*73b01e57SJeff Chen 990*73b01e57SJeff Chen struct nxpwifi_ie_types_vendor_param_set { 991*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 992*73b01e57SJeff Chen u8 ie[NXPWIFI_MAX_VSIE_LEN]; 993*73b01e57SJeff Chen }; 994*73b01e57SJeff Chen 995*73b01e57SJeff Chen #define NXPWIFI_AUTHTYPE_SAE 6 996*73b01e57SJeff Chen 997*73b01e57SJeff Chen struct nxpwifi_ie_types_sae_pwe_mode { 998*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 999*73b01e57SJeff Chen u8 pwe[]; 1000*73b01e57SJeff Chen } __packed; 1001*73b01e57SJeff Chen 1002*73b01e57SJeff Chen struct nxpwifi_ie_types_rsn_param_set { 1003*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1004*73b01e57SJeff Chen u8 rsn_ie[]; 1005*73b01e57SJeff Chen } __packed; 1006*73b01e57SJeff Chen 1007*73b01e57SJeff Chen #define KEYPARAMSET_FIXED_LEN 6 1008*73b01e57SJeff Chen 1009*73b01e57SJeff Chen #define IGTK_PN_LEN 8 1010*73b01e57SJeff Chen 1011*73b01e57SJeff Chen struct nxpwifi_cmac_param { 1012*73b01e57SJeff Chen u8 ipn[IGTK_PN_LEN]; 1013*73b01e57SJeff Chen u8 key[WLAN_KEY_LEN_AES_CMAC]; 1014*73b01e57SJeff Chen } __packed; 1015*73b01e57SJeff Chen 1016*73b01e57SJeff Chen struct nxpwifi_wep_param { 1017*73b01e57SJeff Chen __le16 key_len; 1018*73b01e57SJeff Chen u8 key[WLAN_KEY_LEN_WEP104]; 1019*73b01e57SJeff Chen } __packed; 1020*73b01e57SJeff Chen 1021*73b01e57SJeff Chen struct nxpwifi_tkip_param { 1022*73b01e57SJeff Chen u8 pn[WPA_PN_SIZE]; 1023*73b01e57SJeff Chen __le16 key_len; 1024*73b01e57SJeff Chen u8 key[WLAN_KEY_LEN_TKIP]; 1025*73b01e57SJeff Chen } __packed; 1026*73b01e57SJeff Chen 1027*73b01e57SJeff Chen struct nxpwifi_aes_param { 1028*73b01e57SJeff Chen u8 pn[WPA_PN_SIZE]; 1029*73b01e57SJeff Chen __le16 key_len; 1030*73b01e57SJeff Chen u8 key[WLAN_KEY_LEN_CCMP_256]; 1031*73b01e57SJeff Chen } __packed; 1032*73b01e57SJeff Chen 1033*73b01e57SJeff Chen struct nxpwifi_cmac_aes_param { 1034*73b01e57SJeff Chen u8 ipn[IGTK_PN_LEN]; 1035*73b01e57SJeff Chen __le16 key_len; 1036*73b01e57SJeff Chen u8 key[WLAN_KEY_LEN_AES_CMAC]; 1037*73b01e57SJeff Chen } __packed; 1038*73b01e57SJeff Chen 1039*73b01e57SJeff Chen struct nxpwifi_gmac_aes_param { 1040*73b01e57SJeff Chen u8 ipn[IGTK_PN_LEN]; 1041*73b01e57SJeff Chen __le16 key_len; 1042*73b01e57SJeff Chen u8 key[WLAN_KEY_LEN_BIP_GMAC_256]; 1043*73b01e57SJeff Chen } __packed; 1044*73b01e57SJeff Chen 1045*73b01e57SJeff Chen struct nxpwifi_ie_type_key_param_set { 1046*73b01e57SJeff Chen __le16 type; 1047*73b01e57SJeff Chen __le16 len; 1048*73b01e57SJeff Chen u8 mac_addr[ETH_ALEN]; 1049*73b01e57SJeff Chen u8 key_idx; 1050*73b01e57SJeff Chen u8 key_type; 1051*73b01e57SJeff Chen __le16 key_info; 1052*73b01e57SJeff Chen union { 1053*73b01e57SJeff Chen struct nxpwifi_wep_param wep; 1054*73b01e57SJeff Chen struct nxpwifi_tkip_param tkip; 1055*73b01e57SJeff Chen struct nxpwifi_aes_param aes; 1056*73b01e57SJeff Chen struct nxpwifi_cmac_aes_param cmac_aes; 1057*73b01e57SJeff Chen struct nxpwifi_gmac_aes_param gmac_aes; 1058*73b01e57SJeff Chen } key_params; 1059*73b01e57SJeff Chen } __packed; 1060*73b01e57SJeff Chen 1061*73b01e57SJeff Chen struct host_cmd_ds_802_11_key_material { 1062*73b01e57SJeff Chen __le16 action; 1063*73b01e57SJeff Chen struct nxpwifi_ie_type_key_param_set key_param_set; 1064*73b01e57SJeff Chen } __packed; 1065*73b01e57SJeff Chen 1066*73b01e57SJeff Chen struct host_cmd_ds_gen { 1067*73b01e57SJeff Chen __le16 command; 1068*73b01e57SJeff Chen __le16 size; 1069*73b01e57SJeff Chen __le16 seq_num; 1070*73b01e57SJeff Chen __le16 result; 1071*73b01e57SJeff Chen }; 1072*73b01e57SJeff Chen 1073*73b01e57SJeff Chen #define S_DS_GEN sizeof(struct host_cmd_ds_gen) 1074*73b01e57SJeff Chen 1075*73b01e57SJeff Chen enum sleep_resp_ctrl { 1076*73b01e57SJeff Chen RESP_NOT_NEEDED = 0, 1077*73b01e57SJeff Chen RESP_NEEDED, 1078*73b01e57SJeff Chen }; 1079*73b01e57SJeff Chen 1080*73b01e57SJeff Chen struct nxpwifi_ps_param { 1081*73b01e57SJeff Chen __le16 null_pkt_interval; 1082*73b01e57SJeff Chen __le16 multiple_dtims; 1083*73b01e57SJeff Chen __le16 bcn_miss_timeout; 1084*73b01e57SJeff Chen __le16 local_listen_interval; 1085*73b01e57SJeff Chen __le16 reserved; 1086*73b01e57SJeff Chen __le16 mode; 1087*73b01e57SJeff Chen __le16 delay_to_ps; 1088*73b01e57SJeff Chen } __packed; 1089*73b01e57SJeff Chen 1090*73b01e57SJeff Chen #define HS_DEF_WAKE_INTERVAL 100 1091*73b01e57SJeff Chen #define HS_DEF_INACTIVITY_TIMEOUT 50 1092*73b01e57SJeff Chen 1093*73b01e57SJeff Chen struct nxpwifi_ps_param_in_hs { 1094*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1095*73b01e57SJeff Chen __le32 hs_wake_int; 1096*73b01e57SJeff Chen __le32 hs_inact_timeout; 1097*73b01e57SJeff Chen } __packed; 1098*73b01e57SJeff Chen 1099*73b01e57SJeff Chen #define BITMAP_AUTO_DS 0x01 1100*73b01e57SJeff Chen #define BITMAP_STA_PS 0x10 1101*73b01e57SJeff Chen 1102*73b01e57SJeff Chen struct nxpwifi_ie_types_auto_ds_param { 1103*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1104*73b01e57SJeff Chen __le16 deep_sleep_timeout; 1105*73b01e57SJeff Chen } __packed; 1106*73b01e57SJeff Chen 1107*73b01e57SJeff Chen struct nxpwifi_ie_types_ps_param { 1108*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1109*73b01e57SJeff Chen struct nxpwifi_ps_param param; 1110*73b01e57SJeff Chen } __packed; 1111*73b01e57SJeff Chen 1112*73b01e57SJeff Chen struct host_cmd_ds_802_11_ps_mode_enh { 1113*73b01e57SJeff Chen __le16 action; 1114*73b01e57SJeff Chen 1115*73b01e57SJeff Chen union { 1116*73b01e57SJeff Chen struct nxpwifi_ps_param opt_ps; 1117*73b01e57SJeff Chen __le16 ps_bitmap; 1118*73b01e57SJeff Chen } params; 1119*73b01e57SJeff Chen } __packed; 1120*73b01e57SJeff Chen 1121*73b01e57SJeff Chen enum API_VER_ID { 1122*73b01e57SJeff Chen KEY_API_VER_ID = 1, 1123*73b01e57SJeff Chen FW_API_VER_ID = 2, 1124*73b01e57SJeff Chen UAP_FW_API_VER_ID = 3, 1125*73b01e57SJeff Chen CHANRPT_API_VER_ID = 4, 1126*73b01e57SJeff Chen FW_HOTFIX_VER_ID = 5, 1127*73b01e57SJeff Chen }; 1128*73b01e57SJeff Chen 1129*73b01e57SJeff Chen struct hw_spec_api_rev { 1130*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1131*73b01e57SJeff Chen __le16 api_id; 1132*73b01e57SJeff Chen u8 major_ver; 1133*73b01e57SJeff Chen u8 minor_ver; 1134*73b01e57SJeff Chen } __packed; 1135*73b01e57SJeff Chen 1136*73b01e57SJeff Chen struct hw_spec_max_conn { 1137*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1138*73b01e57SJeff Chen u8 reserved; 1139*73b01e57SJeff Chen u8 max_sta_conn; 1140*73b01e57SJeff Chen } __packed; 1141*73b01e57SJeff Chen 1142*73b01e57SJeff Chen struct hw_spec_extension { 1143*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1144*73b01e57SJeff Chen u8 ext_id; 1145*73b01e57SJeff Chen u8 tlv[]; 1146*73b01e57SJeff Chen } __packed; 1147*73b01e57SJeff Chen 1148*73b01e57SJeff Chen /* HE MAC Capabilities Information field BIT 1 for TWT Req */ 1149*73b01e57SJeff Chen #define HE_MAC_CAP_TWT_REQ_SUPPORT BIT(1) 1150*73b01e57SJeff Chen /* HE MAC Capabilities Information field BIT 2 for TWT Resp*/ 1151*73b01e57SJeff Chen #define HE_MAC_CAP_TWT_RESP_SUPPORT BIT(2) 1152*73b01e57SJeff Chen 1153*73b01e57SJeff Chen struct nxpwifi_ie_types_he_cap { 1154*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1155*73b01e57SJeff Chen u8 ext_id; 1156*73b01e57SJeff Chen u8 he_mac_cap[6]; 1157*73b01e57SJeff Chen u8 he_phy_cap[11]; 1158*73b01e57SJeff Chen __le16 rx_mcs_80; 1159*73b01e57SJeff Chen __le16 tx_mcs_80; 1160*73b01e57SJeff Chen __le16 rx_mcs_160; 1161*73b01e57SJeff Chen __le16 tx_mcs_160; 1162*73b01e57SJeff Chen __le16 rx_mcs_80p80; 1163*73b01e57SJeff Chen __le16 tx_mcs_80p80; 1164*73b01e57SJeff Chen u8 val[20]; 1165*73b01e57SJeff Chen } __packed; 1166*73b01e57SJeff Chen 1167*73b01e57SJeff Chen struct nxpwifi_ie_types_he_op { 1168*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1169*73b01e57SJeff Chen u8 ext_id; 1170*73b01e57SJeff Chen __le16 he_op_param1; 1171*73b01e57SJeff Chen u8 he_op_param2; 1172*73b01e57SJeff Chen u8 bss_color_info; 1173*73b01e57SJeff Chen __le16 basic_he_mcs_nss; 1174*73b01e57SJeff Chen u8 option[9]; 1175*73b01e57SJeff Chen } __packed; 1176*73b01e57SJeff Chen 1177*73b01e57SJeff Chen struct hw_spec_secure_boot_uuid { 1178*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1179*73b01e57SJeff Chen __le64 uuid_lo; 1180*73b01e57SJeff Chen __le64 uuid_hi; 1181*73b01e57SJeff Chen } __packed; 1182*73b01e57SJeff Chen 1183*73b01e57SJeff Chen struct hw_spec_fw_cap_info { 1184*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1185*73b01e57SJeff Chen __le32 fw_cap_info; 1186*73b01e57SJeff Chen __le32 fw_cap_ext; 1187*73b01e57SJeff Chen } __packed; 1188*73b01e57SJeff Chen 1189*73b01e57SJeff Chen /* NXP proprietary region codes reported by firmware via GET_HW_SPEC. 1190*73b01e57SJeff Chen * These values are stored in the device OTP/calibration data and 1191*73b01e57SJeff Chen * correspond to regulatory domains used for channel/power table selection. 1192*73b01e57SJeff Chen */ 1193*73b01e57SJeff Chen enum nxpwifi_region_code { 1194*73b01e57SJeff Chen NXPWIFI_REGION_WORLD = 0x00, 1195*73b01e57SJeff Chen NXPWIFI_REGION_FCC = 0x10, /* US, Canada-like */ 1196*73b01e57SJeff Chen NXPWIFI_REGION_IC = 0x20, /* Canada */ 1197*73b01e57SJeff Chen NXPWIFI_REGION_ETSI = 0x30, /* Europe */ 1198*73b01e57SJeff Chen NXPWIFI_REGION_SPAIN = 0x31, 1199*73b01e57SJeff Chen NXPWIFI_REGION_FRANCE = 0x32, 1200*73b01e57SJeff Chen NXPWIFI_REGION_JAPAN = 0x40, 1201*73b01e57SJeff Chen NXPWIFI_REGION_JAPAN1 = 0x41, 1202*73b01e57SJeff Chen NXPWIFI_REGION_CHINA = 0x50, 1203*73b01e57SJeff Chen }; 1204*73b01e57SJeff Chen 1205*73b01e57SJeff Chen struct host_cmd_ds_get_hw_spec { 1206*73b01e57SJeff Chen __le16 hw_if_version; 1207*73b01e57SJeff Chen __le16 version; 1208*73b01e57SJeff Chen __le16 reserved; 1209*73b01e57SJeff Chen __le16 num_of_mcast_adr; 1210*73b01e57SJeff Chen u8 permanent_addr[ETH_ALEN]; 1211*73b01e57SJeff Chen __le16 region_code; 1212*73b01e57SJeff Chen __le16 number_of_antenna; 1213*73b01e57SJeff Chen __le32 fw_release_number; 1214*73b01e57SJeff Chen __le32 hw_dev_cap; 1215*73b01e57SJeff Chen __le32 reserved_1; 1216*73b01e57SJeff Chen __le32 reserved_2; 1217*73b01e57SJeff Chen __le32 fw_cap_info; 1218*73b01e57SJeff Chen __le32 dot_11n_dev_cap; 1219*73b01e57SJeff Chen u8 dev_mcs_support; 1220*73b01e57SJeff Chen __le16 mp_end_port; /* SDIO only, reserved for other interfaces */ 1221*73b01e57SJeff Chen __le16 mgmt_buf_count; /* mgmt element buffer count */ 1222*73b01e57SJeff Chen __le32 reserved_3; 1223*73b01e57SJeff Chen __le32 reserved_4; 1224*73b01e57SJeff Chen __le32 dot_11ac_dev_cap; 1225*73b01e57SJeff Chen __le32 dot_11ac_mcs_support; 1226*73b01e57SJeff Chen u8 tlv[]; 1227*73b01e57SJeff Chen } __packed; 1228*73b01e57SJeff Chen 1229*73b01e57SJeff Chen struct host_cmd_ds_802_11_rssi_info { 1230*73b01e57SJeff Chen __le16 action; 1231*73b01e57SJeff Chen __le16 ndata; 1232*73b01e57SJeff Chen __le16 nbcn; 1233*73b01e57SJeff Chen __le16 reserved[9]; 1234*73b01e57SJeff Chen long long reserved_1; 1235*73b01e57SJeff Chen } __packed; 1236*73b01e57SJeff Chen 1237*73b01e57SJeff Chen struct host_cmd_ds_802_11_rssi_info_rsp { 1238*73b01e57SJeff Chen __le16 action; 1239*73b01e57SJeff Chen __le16 ndata; 1240*73b01e57SJeff Chen __le16 nbcn; 1241*73b01e57SJeff Chen __le16 data_rssi_last; 1242*73b01e57SJeff Chen __le16 data_nf_last; 1243*73b01e57SJeff Chen __le16 data_rssi_avg; 1244*73b01e57SJeff Chen __le16 data_nf_avg; 1245*73b01e57SJeff Chen __le16 bcn_rssi_last; 1246*73b01e57SJeff Chen __le16 bcn_nf_last; 1247*73b01e57SJeff Chen __le16 bcn_rssi_avg; 1248*73b01e57SJeff Chen __le16 bcn_nf_avg; 1249*73b01e57SJeff Chen long long tsf_bcn; 1250*73b01e57SJeff Chen } __packed; 1251*73b01e57SJeff Chen 1252*73b01e57SJeff Chen struct host_cmd_ds_802_11_mac_address { 1253*73b01e57SJeff Chen __le16 action; 1254*73b01e57SJeff Chen u8 mac_addr[ETH_ALEN]; 1255*73b01e57SJeff Chen } __packed; 1256*73b01e57SJeff Chen 1257*73b01e57SJeff Chen struct host_cmd_ds_mac_control { 1258*73b01e57SJeff Chen __le32 action; 1259*73b01e57SJeff Chen }; 1260*73b01e57SJeff Chen 1261*73b01e57SJeff Chen struct host_cmd_ds_mac_multicast_adr { 1262*73b01e57SJeff Chen __le16 action; 1263*73b01e57SJeff Chen __le16 num_of_adrs; 1264*73b01e57SJeff Chen u8 mac_list[NXPWIFI_MAX_MULTICAST_LIST_SIZE][ETH_ALEN]; 1265*73b01e57SJeff Chen } __packed; 1266*73b01e57SJeff Chen 1267*73b01e57SJeff Chen struct host_cmd_ds_802_11_deauthenticate { 1268*73b01e57SJeff Chen u8 mac_addr[ETH_ALEN]; 1269*73b01e57SJeff Chen __le16 reason_code; 1270*73b01e57SJeff Chen } __packed; 1271*73b01e57SJeff Chen 1272*73b01e57SJeff Chen struct host_cmd_ds_802_11_associate { 1273*73b01e57SJeff Chen u8 peer_sta_addr[ETH_ALEN]; 1274*73b01e57SJeff Chen __le16 cap_info_bitmap; 1275*73b01e57SJeff Chen __le16 listen_interval; 1276*73b01e57SJeff Chen __le16 beacon_period; 1277*73b01e57SJeff Chen u8 dtim_period; 1278*73b01e57SJeff Chen } __packed; 1279*73b01e57SJeff Chen 1280*73b01e57SJeff Chen struct ieee_types_assoc_rsp { 1281*73b01e57SJeff Chen __le16 cap_info_bitmap; 1282*73b01e57SJeff Chen __le16 status_code; 1283*73b01e57SJeff Chen __le16 a_id; 1284*73b01e57SJeff Chen u8 ie_buffer[]; 1285*73b01e57SJeff Chen } __packed; 1286*73b01e57SJeff Chen 1287*73b01e57SJeff Chen struct host_cmd_ds_802_11_associate_rsp { 1288*73b01e57SJeff Chen struct ieee_types_assoc_rsp assoc_rsp; 1289*73b01e57SJeff Chen } __packed; 1290*73b01e57SJeff Chen 1291*73b01e57SJeff Chen struct ieee_types_cf_param_set { 1292*73b01e57SJeff Chen u8 element_id; 1293*73b01e57SJeff Chen u8 len; 1294*73b01e57SJeff Chen u8 cfp_cnt; 1295*73b01e57SJeff Chen u8 cfp_period; 1296*73b01e57SJeff Chen __le16 cfp_max_duration; 1297*73b01e57SJeff Chen __le16 cfp_duration_remaining; 1298*73b01e57SJeff Chen } __packed; 1299*73b01e57SJeff Chen 1300*73b01e57SJeff Chen struct ieee_types_fh_param_set { 1301*73b01e57SJeff Chen u8 element_id; 1302*73b01e57SJeff Chen u8 len; 1303*73b01e57SJeff Chen __le16 dwell_time; 1304*73b01e57SJeff Chen u8 hop_set; 1305*73b01e57SJeff Chen u8 hop_pattern; 1306*73b01e57SJeff Chen u8 hop_index; 1307*73b01e57SJeff Chen } __packed; 1308*73b01e57SJeff Chen 1309*73b01e57SJeff Chen struct ieee_types_ds_param_set { 1310*73b01e57SJeff Chen u8 element_id; 1311*73b01e57SJeff Chen u8 len; 1312*73b01e57SJeff Chen u8 current_chan; 1313*73b01e57SJeff Chen } __packed; 1314*73b01e57SJeff Chen 1315*73b01e57SJeff Chen union ieee_types_phy_param_set { 1316*73b01e57SJeff Chen struct ieee_types_fh_param_set fh_param_set; 1317*73b01e57SJeff Chen struct ieee_types_ds_param_set ds_param_set; 1318*73b01e57SJeff Chen } __packed; 1319*73b01e57SJeff Chen 1320*73b01e57SJeff Chen struct ieee_types_oper_mode_ntf { 1321*73b01e57SJeff Chen u8 element_id; 1322*73b01e57SJeff Chen u8 len; 1323*73b01e57SJeff Chen u8 oper_mode; 1324*73b01e57SJeff Chen } __packed; 1325*73b01e57SJeff Chen 1326*73b01e57SJeff Chen struct host_cmd_ds_802_11_get_log { 1327*73b01e57SJeff Chen __le32 mcast_tx_frame; 1328*73b01e57SJeff Chen __le32 failed; 1329*73b01e57SJeff Chen __le32 retry; 1330*73b01e57SJeff Chen __le32 multi_retry; 1331*73b01e57SJeff Chen __le32 frame_dup; 1332*73b01e57SJeff Chen __le32 rts_success; 1333*73b01e57SJeff Chen __le32 rts_failure; 1334*73b01e57SJeff Chen __le32 ack_failure; 1335*73b01e57SJeff Chen __le32 rx_frag; 1336*73b01e57SJeff Chen __le32 mcast_rx_frame; 1337*73b01e57SJeff Chen __le32 fcs_error; 1338*73b01e57SJeff Chen __le32 tx_frame; 1339*73b01e57SJeff Chen __le32 reserved; 1340*73b01e57SJeff Chen __le32 wep_icv_err_cnt[4]; 1341*73b01e57SJeff Chen __le32 bcn_rcv_cnt; 1342*73b01e57SJeff Chen __le32 bcn_miss_cnt; 1343*73b01e57SJeff Chen } __packed; 1344*73b01e57SJeff Chen 1345*73b01e57SJeff Chen /* Enumeration for rate format */ 1346*73b01e57SJeff Chen enum nxpwifi_rate_format { 1347*73b01e57SJeff Chen NXPWIFI_RATE_FORMAT_LG = 0, 1348*73b01e57SJeff Chen NXPWIFI_RATE_FORMAT_HT, 1349*73b01e57SJeff Chen NXPWIFI_RATE_FORMAT_VHT, 1350*73b01e57SJeff Chen NXPWIFI_RATE_FORMAT_HE, 1351*73b01e57SJeff Chen NXPWIFI_RATE_FORMAT_AUTO = 0xFF, 1352*73b01e57SJeff Chen }; 1353*73b01e57SJeff Chen 1354*73b01e57SJeff Chen struct host_cmd_ds_tx_rate_query { 1355*73b01e57SJeff Chen u8 tx_rate; 1356*73b01e57SJeff Chen /* 1357*73b01e57SJeff Chen * Tx Rate Info: For 802.11 AC cards 1358*73b01e57SJeff Chen * 1359*73b01e57SJeff Chen * [Bit 0-1] tx rate format: LG = 0, HT = 1, VHT = 2 1360*73b01e57SJeff Chen * [Bit 2-3] HT/VHT Bandwidth: BW20 = 0, BW40 = 1, BW80 = 2, BW160 = 3 1361*73b01e57SJeff Chen * [Bit 4] HT/VHT Guard Interval: LGI = 0, SGI = 1 1362*73b01e57SJeff Chen * 1363*73b01e57SJeff Chen * For non-802.11 AC cards 1364*73b01e57SJeff Chen * Ht Info [Bit 0] RxRate format: LG=0, HT=1 1365*73b01e57SJeff Chen * [Bit 1] HT Bandwidth: BW20 = 0, BW40 = 1 1366*73b01e57SJeff Chen * [Bit 2] HT Guard Interval: LGI = 0, SGI = 1 1367*73b01e57SJeff Chen */ 1368*73b01e57SJeff Chen u8 ht_info; 1369*73b01e57SJeff Chen } __packed; 1370*73b01e57SJeff Chen 1371*73b01e57SJeff Chen struct nxpwifi_tx_pause_tlv { 1372*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1373*73b01e57SJeff Chen u8 peermac[ETH_ALEN]; 1374*73b01e57SJeff Chen u8 tx_pause; 1375*73b01e57SJeff Chen u8 pkt_cnt; 1376*73b01e57SJeff Chen } __packed; 1377*73b01e57SJeff Chen 1378*73b01e57SJeff Chen enum host_sleep_action { 1379*73b01e57SJeff Chen HS_CONFIGURE = 0x0001, 1380*73b01e57SJeff Chen HS_ACTIVATE = 0x0002, 1381*73b01e57SJeff Chen }; 1382*73b01e57SJeff Chen 1383*73b01e57SJeff Chen struct nxpwifi_hs_config_param { 1384*73b01e57SJeff Chen __le32 conditions; 1385*73b01e57SJeff Chen u8 gpio; 1386*73b01e57SJeff Chen u8 gap; 1387*73b01e57SJeff Chen } __packed; 1388*73b01e57SJeff Chen 1389*73b01e57SJeff Chen struct hs_activate_param { 1390*73b01e57SJeff Chen __le16 resp_ctrl; 1391*73b01e57SJeff Chen } __packed; 1392*73b01e57SJeff Chen 1393*73b01e57SJeff Chen struct host_cmd_ds_802_11_hs_cfg_enh { 1394*73b01e57SJeff Chen __le16 action; 1395*73b01e57SJeff Chen 1396*73b01e57SJeff Chen union { 1397*73b01e57SJeff Chen struct nxpwifi_hs_config_param hs_config; 1398*73b01e57SJeff Chen struct hs_activate_param hs_activate; 1399*73b01e57SJeff Chen } params; 1400*73b01e57SJeff Chen } __packed; 1401*73b01e57SJeff Chen 1402*73b01e57SJeff Chen enum SNMP_MIB_INDEX { 1403*73b01e57SJeff Chen OP_RATE_SET_I = 1, 1404*73b01e57SJeff Chen DTIM_PERIOD_I = 3, 1405*73b01e57SJeff Chen RTS_THRESH_I = 5, 1406*73b01e57SJeff Chen SHORT_RETRY_LIM_I = 6, 1407*73b01e57SJeff Chen LONG_RETRY_LIM_I = 7, 1408*73b01e57SJeff Chen FRAG_THRESH_I = 8, 1409*73b01e57SJeff Chen DOT11D_I = 9, 1410*73b01e57SJeff Chen DOT11H_I = 10, 1411*73b01e57SJeff Chen }; 1412*73b01e57SJeff Chen 1413*73b01e57SJeff Chen enum nxpwifi_assocmd_failurepoint { 1414*73b01e57SJeff Chen NXPWIFI_ASSOC_CMD_SUCCESS = 0, 1415*73b01e57SJeff Chen NXPWIFI_ASSOC_CMD_FAILURE_ASSOC, 1416*73b01e57SJeff Chen NXPWIFI_ASSOC_CMD_FAILURE_AUTH, 1417*73b01e57SJeff Chen NXPWIFI_ASSOC_CMD_FAILURE_JOIN 1418*73b01e57SJeff Chen }; 1419*73b01e57SJeff Chen 1420*73b01e57SJeff Chen #define MAX_SNMP_BUF_SIZE 128 1421*73b01e57SJeff Chen 1422*73b01e57SJeff Chen struct host_cmd_ds_802_11_snmp_mib { 1423*73b01e57SJeff Chen __le16 query_type; 1424*73b01e57SJeff Chen __le16 oid; 1425*73b01e57SJeff Chen __le16 buf_size; 1426*73b01e57SJeff Chen u8 value[]; 1427*73b01e57SJeff Chen } __packed; 1428*73b01e57SJeff Chen 1429*73b01e57SJeff Chen struct nxpwifi_rate_scope { 1430*73b01e57SJeff Chen __le16 type; 1431*73b01e57SJeff Chen __le16 length; 1432*73b01e57SJeff Chen __le16 hr_dsss_rate_bitmap; 1433*73b01e57SJeff Chen __le16 ofdm_rate_bitmap; 1434*73b01e57SJeff Chen __le16 ht_mcs_rate_bitmap[8]; 1435*73b01e57SJeff Chen __le16 vht_mcs_rate_bitmap[8]; 1436*73b01e57SJeff Chen } __packed; 1437*73b01e57SJeff Chen 1438*73b01e57SJeff Chen struct nxpwifi_rate_drop_pattern { 1439*73b01e57SJeff Chen __le16 type; 1440*73b01e57SJeff Chen __le16 length; 1441*73b01e57SJeff Chen __le32 rate_drop_mode; 1442*73b01e57SJeff Chen } __packed; 1443*73b01e57SJeff Chen 1444*73b01e57SJeff Chen struct host_cmd_ds_tx_rate_cfg { 1445*73b01e57SJeff Chen __le16 action; 1446*73b01e57SJeff Chen __le16 cfg_index; 1447*73b01e57SJeff Chen } __packed; 1448*73b01e57SJeff Chen 1449*73b01e57SJeff Chen struct nxpwifi_power_group { 1450*73b01e57SJeff Chen u8 modulation_class; 1451*73b01e57SJeff Chen u8 first_rate_code; 1452*73b01e57SJeff Chen u8 last_rate_code; 1453*73b01e57SJeff Chen s8 power_step; 1454*73b01e57SJeff Chen s8 power_min; 1455*73b01e57SJeff Chen s8 power_max; 1456*73b01e57SJeff Chen u8 ht_bandwidth; 1457*73b01e57SJeff Chen u8 reserved; 1458*73b01e57SJeff Chen } __packed; 1459*73b01e57SJeff Chen 1460*73b01e57SJeff Chen struct nxpwifi_types_power_group { 1461*73b01e57SJeff Chen __le16 type; 1462*73b01e57SJeff Chen __le16 length; 1463*73b01e57SJeff Chen } __packed; 1464*73b01e57SJeff Chen 1465*73b01e57SJeff Chen struct host_cmd_ds_txpwr_cfg { 1466*73b01e57SJeff Chen __le16 action; 1467*73b01e57SJeff Chen __le16 cfg_index; 1468*73b01e57SJeff Chen __le32 mode; 1469*73b01e57SJeff Chen } __packed; 1470*73b01e57SJeff Chen 1471*73b01e57SJeff Chen struct host_cmd_ds_rf_tx_pwr { 1472*73b01e57SJeff Chen __le16 action; 1473*73b01e57SJeff Chen __le16 cur_level; 1474*73b01e57SJeff Chen u8 max_power; 1475*73b01e57SJeff Chen u8 min_power; 1476*73b01e57SJeff Chen } __packed; 1477*73b01e57SJeff Chen 1478*73b01e57SJeff Chen struct host_cmd_ds_rf_ant_mimo { 1479*73b01e57SJeff Chen __le16 action_tx; 1480*73b01e57SJeff Chen __le16 tx_ant_mode; 1481*73b01e57SJeff Chen __le16 action_rx; 1482*73b01e57SJeff Chen __le16 rx_ant_mode; 1483*73b01e57SJeff Chen } __packed; 1484*73b01e57SJeff Chen 1485*73b01e57SJeff Chen struct host_cmd_ds_rf_ant_siso { 1486*73b01e57SJeff Chen __le16 action; 1487*73b01e57SJeff Chen __le16 ant_mode; 1488*73b01e57SJeff Chen } __packed; 1489*73b01e57SJeff Chen 1490*73b01e57SJeff Chen #define BAND_CFG_CHAN_BAND_MASK 0x03 1491*73b01e57SJeff Chen #define BAND_CFG_CHAN_BAND_SHIFT_BIT 0 1492*73b01e57SJeff Chen #define BAND_CFG_CHAN_WIDTH_MASK 0x0C 1493*73b01e57SJeff Chen #define BAND_CFG_CHAN_WIDTH_SHIFT_BIT 2 1494*73b01e57SJeff Chen #define BAND_CFG_CHAN2_OFFSET_MASK 0x30 1495*73b01e57SJeff Chen #define BAND_CFG_CHAN2_SHIFT_BIT 4 1496*73b01e57SJeff Chen 1497*73b01e57SJeff Chen struct nxpwifi_chan_desc { 1498*73b01e57SJeff Chen __le16 start_freq; 1499*73b01e57SJeff Chen u8 band_cfg; 1500*73b01e57SJeff Chen u8 chan_num; 1501*73b01e57SJeff Chen } __packed; 1502*73b01e57SJeff Chen 1503*73b01e57SJeff Chen struct host_cmd_ds_chan_rpt_req { 1504*73b01e57SJeff Chen struct nxpwifi_chan_desc chan_desc; 1505*73b01e57SJeff Chen __le32 msec_dwell_time; 1506*73b01e57SJeff Chen } __packed; 1507*73b01e57SJeff Chen 1508*73b01e57SJeff Chen struct host_cmd_ds_chan_rpt_event { 1509*73b01e57SJeff Chen __le32 result; 1510*73b01e57SJeff Chen __le64 start_tsf; 1511*73b01e57SJeff Chen __le32 duration; 1512*73b01e57SJeff Chen u8 tlvbuf[]; 1513*73b01e57SJeff Chen } __packed; 1514*73b01e57SJeff Chen 1515*73b01e57SJeff Chen struct host_cmd_sdio_sp_rx_aggr_cfg { 1516*73b01e57SJeff Chen u8 action; 1517*73b01e57SJeff Chen u8 enable; 1518*73b01e57SJeff Chen __le16 block_size; 1519*73b01e57SJeff Chen } __packed; 1520*73b01e57SJeff Chen 1521*73b01e57SJeff Chen struct nxpwifi_fixed_bcn_param { 1522*73b01e57SJeff Chen __le64 timestamp; 1523*73b01e57SJeff Chen __le16 beacon_period; 1524*73b01e57SJeff Chen __le16 cap_info_bitmap; 1525*73b01e57SJeff Chen } __packed; 1526*73b01e57SJeff Chen 1527*73b01e57SJeff Chen struct nxpwifi_event_scan_result { 1528*73b01e57SJeff Chen __le16 event_id; 1529*73b01e57SJeff Chen u8 bss_index; 1530*73b01e57SJeff Chen u8 bss_type; 1531*73b01e57SJeff Chen u8 more_event; 1532*73b01e57SJeff Chen u8 reserved[3]; 1533*73b01e57SJeff Chen __le16 buf_size; 1534*73b01e57SJeff Chen u8 num_of_set; 1535*73b01e57SJeff Chen } __packed; 1536*73b01e57SJeff Chen 1537*73b01e57SJeff Chen struct tx_status_event { 1538*73b01e57SJeff Chen u8 packet_type; 1539*73b01e57SJeff Chen u8 tx_token_id; 1540*73b01e57SJeff Chen u8 status; 1541*73b01e57SJeff Chen } __packed; 1542*73b01e57SJeff Chen 1543*73b01e57SJeff Chen #define NXPWIFI_USER_SCAN_CHAN_MAX 50 1544*73b01e57SJeff Chen 1545*73b01e57SJeff Chen #define NXPWIFI_MAX_SSID_LIST_LENGTH 10 1546*73b01e57SJeff Chen 1547*73b01e57SJeff Chen struct nxpwifi_scan_cmd_config { 1548*73b01e57SJeff Chen /* BSS mode to be sent in the firmware command */ 1549*73b01e57SJeff Chen u8 bss_mode; 1550*73b01e57SJeff Chen 1551*73b01e57SJeff Chen /* Specific BSSID used to filter scan results in the firmware */ 1552*73b01e57SJeff Chen u8 specific_bssid[ETH_ALEN]; 1553*73b01e57SJeff Chen 1554*73b01e57SJeff Chen /* Length of TLVs sent in command starting at tlvBuffer */ 1555*73b01e57SJeff Chen u32 tlv_buf_len; 1556*73b01e57SJeff Chen 1557*73b01e57SJeff Chen /* 1558*73b01e57SJeff Chen * SSID TLV(s) and ChanList TLVs to be sent in the firmware command 1559*73b01e57SJeff Chen * 1560*73b01e57SJeff Chen * TLV_TYPE_CHANLIST, nxpwifi_ie_types_chan_list_param_set 1561*73b01e57SJeff Chen * WLAN_EID_SSID, nxpwifi_ie_types_ssid_param_set 1562*73b01e57SJeff Chen */ 1563*73b01e57SJeff Chen u8 tlv_buf[]; /* SSID TLV(s) and ChanList TLVs are stored here */ 1564*73b01e57SJeff Chen } __packed; 1565*73b01e57SJeff Chen 1566*73b01e57SJeff Chen struct nxpwifi_user_scan_chan { 1567*73b01e57SJeff Chen u8 chan_number; 1568*73b01e57SJeff Chen u8 radio_type; 1569*73b01e57SJeff Chen u8 scan_type; 1570*73b01e57SJeff Chen u8 reserved; 1571*73b01e57SJeff Chen u32 scan_time; 1572*73b01e57SJeff Chen } __packed; 1573*73b01e57SJeff Chen 1574*73b01e57SJeff Chen struct nxpwifi_user_scan_cfg { 1575*73b01e57SJeff Chen /* BSS mode to be sent in the firmware command */ 1576*73b01e57SJeff Chen u8 bss_mode; 1577*73b01e57SJeff Chen /* Configure the number of probe requests for active chan scans */ 1578*73b01e57SJeff Chen u8 num_probes; 1579*73b01e57SJeff Chen u8 reserved; 1580*73b01e57SJeff Chen /* BSSID filter sent in the firmware command to limit the results */ 1581*73b01e57SJeff Chen u8 specific_bssid[ETH_ALEN]; 1582*73b01e57SJeff Chen /* SSID filter list used in the firmware to limit the scan results */ 1583*73b01e57SJeff Chen struct cfg80211_ssid *ssid_list; 1584*73b01e57SJeff Chen u8 num_ssids; 1585*73b01e57SJeff Chen /* Variable number (fixed maximum) of channels to scan up */ 1586*73b01e57SJeff Chen struct nxpwifi_user_scan_chan chan_list[NXPWIFI_USER_SCAN_CHAN_MAX]; 1587*73b01e57SJeff Chen u16 scan_chan_gap; 1588*73b01e57SJeff Chen u8 random_mac[ETH_ALEN]; 1589*73b01e57SJeff Chen } __packed; 1590*73b01e57SJeff Chen 1591*73b01e57SJeff Chen #define NXPWIFI_BG_SCAN_CHAN_MAX 38 1592*73b01e57SJeff Chen #define NXPWIFI_BSS_MODE_INFRA 1 1593*73b01e57SJeff Chen #define NXPWIFI_BGSCAN_ACT_GET 0x0000 1594*73b01e57SJeff Chen #define NXPWIFI_BGSCAN_ACT_SET 0x0001 1595*73b01e57SJeff Chen #define NXPWIFI_BGSCAN_ACT_SET_ALL 0xff01 1596*73b01e57SJeff Chen /** ssid match */ 1597*73b01e57SJeff Chen #define NXPWIFI_BGSCAN_SSID_MATCH 0x0001 1598*73b01e57SJeff Chen /** ssid match and RSSI exceeded */ 1599*73b01e57SJeff Chen #define NXPWIFI_BGSCAN_SSID_RSSI_MATCH 0x0004 1600*73b01e57SJeff Chen /**wait for all channel scan to complete to report scan result*/ 1601*73b01e57SJeff Chen #define NXPWIFI_BGSCAN_WAIT_ALL_CHAN_DONE 0x80000000 1602*73b01e57SJeff Chen 1603*73b01e57SJeff Chen struct nxpwifi_bg_scan_cfg { 1604*73b01e57SJeff Chen u16 action; 1605*73b01e57SJeff Chen u8 enable; 1606*73b01e57SJeff Chen u8 bss_type; 1607*73b01e57SJeff Chen u8 chan_per_scan; 1608*73b01e57SJeff Chen u32 scan_interval; 1609*73b01e57SJeff Chen u32 report_condition; 1610*73b01e57SJeff Chen u8 num_probes; 1611*73b01e57SJeff Chen u8 rssi_threshold; 1612*73b01e57SJeff Chen u8 snr_threshold; 1613*73b01e57SJeff Chen u16 repeat_count; 1614*73b01e57SJeff Chen u16 start_later; 1615*73b01e57SJeff Chen struct cfg80211_match_set *ssid_list; 1616*73b01e57SJeff Chen u8 num_ssids; 1617*73b01e57SJeff Chen struct nxpwifi_user_scan_chan chan_list[NXPWIFI_BG_SCAN_CHAN_MAX]; 1618*73b01e57SJeff Chen u16 scan_chan_gap; 1619*73b01e57SJeff Chen } __packed; 1620*73b01e57SJeff Chen 1621*73b01e57SJeff Chen struct ie_body { 1622*73b01e57SJeff Chen u8 grp_key_oui[4]; 1623*73b01e57SJeff Chen u8 ptk_cnt[2]; 1624*73b01e57SJeff Chen u8 ptk_body[4]; 1625*73b01e57SJeff Chen } __packed; 1626*73b01e57SJeff Chen 1627*73b01e57SJeff Chen struct host_cmd_ds_802_11_scan { 1628*73b01e57SJeff Chen u8 bss_mode; 1629*73b01e57SJeff Chen u8 bssid[ETH_ALEN]; 1630*73b01e57SJeff Chen u8 tlv_buffer[]; 1631*73b01e57SJeff Chen } __packed; 1632*73b01e57SJeff Chen 1633*73b01e57SJeff Chen struct host_cmd_ds_802_11_scan_rsp { 1634*73b01e57SJeff Chen __le16 bss_descript_size; 1635*73b01e57SJeff Chen u8 number_of_sets; 1636*73b01e57SJeff Chen u8 bss_desc_and_tlv_buffer[]; 1637*73b01e57SJeff Chen } __packed; 1638*73b01e57SJeff Chen 1639*73b01e57SJeff Chen struct host_cmd_ds_802_11_scan_ext { 1640*73b01e57SJeff Chen u32 reserved; 1641*73b01e57SJeff Chen u8 tlv_buffer[]; 1642*73b01e57SJeff Chen } __packed; 1643*73b01e57SJeff Chen 1644*73b01e57SJeff Chen struct nxpwifi_ie_types_bss_mode { 1645*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1646*73b01e57SJeff Chen u8 bss_mode; 1647*73b01e57SJeff Chen } __packed; 1648*73b01e57SJeff Chen 1649*73b01e57SJeff Chen struct nxpwifi_ie_types_scan_rsp { 1650*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1651*73b01e57SJeff Chen u8 bssid[ETH_ALEN]; 1652*73b01e57SJeff Chen u8 frame_body[]; 1653*73b01e57SJeff Chen } __packed; 1654*73b01e57SJeff Chen 1655*73b01e57SJeff Chen struct nxpwifi_ie_types_scan_inf { 1656*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1657*73b01e57SJeff Chen __le16 rssi; 1658*73b01e57SJeff Chen __le16 anpi; 1659*73b01e57SJeff Chen u8 cca_busy_fraction; 1660*73b01e57SJeff Chen u8 radio_type; 1661*73b01e57SJeff Chen u8 channel; 1662*73b01e57SJeff Chen u8 reserved; 1663*73b01e57SJeff Chen __le64 tsf; 1664*73b01e57SJeff Chen } __packed; 1665*73b01e57SJeff Chen 1666*73b01e57SJeff Chen struct host_cmd_ds_802_11_bg_scan_config { 1667*73b01e57SJeff Chen __le16 action; 1668*73b01e57SJeff Chen u8 enable; 1669*73b01e57SJeff Chen u8 bss_type; 1670*73b01e57SJeff Chen u8 chan_per_scan; 1671*73b01e57SJeff Chen u8 reserved; 1672*73b01e57SJeff Chen __le16 reserved1; 1673*73b01e57SJeff Chen __le32 scan_interval; 1674*73b01e57SJeff Chen __le32 reserved2; 1675*73b01e57SJeff Chen __le32 report_condition; 1676*73b01e57SJeff Chen __le16 reserved3; 1677*73b01e57SJeff Chen u8 tlv[]; 1678*73b01e57SJeff Chen } __packed; 1679*73b01e57SJeff Chen 1680*73b01e57SJeff Chen struct host_cmd_ds_802_11_bg_scan_query { 1681*73b01e57SJeff Chen u8 flush; 1682*73b01e57SJeff Chen } __packed; 1683*73b01e57SJeff Chen 1684*73b01e57SJeff Chen struct host_cmd_ds_802_11_bg_scan_query_rsp { 1685*73b01e57SJeff Chen __le32 report_condition; 1686*73b01e57SJeff Chen struct host_cmd_ds_802_11_scan_rsp scan_resp; 1687*73b01e57SJeff Chen } __packed; 1688*73b01e57SJeff Chen 1689*73b01e57SJeff Chen struct nxpwifi_ietypes_domain_code { 1690*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1691*73b01e57SJeff Chen u8 domain_code; 1692*73b01e57SJeff Chen u8 reserved; 1693*73b01e57SJeff Chen } __packed; 1694*73b01e57SJeff Chen 1695*73b01e57SJeff Chen struct nxpwifi_ietypes_domain_param_set { 1696*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1697*73b01e57SJeff Chen u8 country_code[IEEE80211_COUNTRY_STRING_LEN]; 1698*73b01e57SJeff Chen struct ieee80211_country_ie_triplet triplet[]; 1699*73b01e57SJeff Chen } __packed; 1700*73b01e57SJeff Chen 1701*73b01e57SJeff Chen struct host_cmd_ds_802_11d_domain_info { 1702*73b01e57SJeff Chen __le16 action; 1703*73b01e57SJeff Chen struct nxpwifi_ietypes_domain_param_set domain; 1704*73b01e57SJeff Chen } __packed; 1705*73b01e57SJeff Chen 1706*73b01e57SJeff Chen struct host_cmd_ds_802_11d_domain_info_rsp { 1707*73b01e57SJeff Chen __le16 action; 1708*73b01e57SJeff Chen struct nxpwifi_ietypes_domain_param_set domain; 1709*73b01e57SJeff Chen } __packed; 1710*73b01e57SJeff Chen 1711*73b01e57SJeff Chen struct host_cmd_ds_11n_addba_req { 1712*73b01e57SJeff Chen u8 add_req_result; 1713*73b01e57SJeff Chen u8 peer_mac_addr[ETH_ALEN]; 1714*73b01e57SJeff Chen u8 dialog_token; 1715*73b01e57SJeff Chen __le16 block_ack_param_set; 1716*73b01e57SJeff Chen __le16 block_ack_tmo; 1717*73b01e57SJeff Chen __le16 ssn; 1718*73b01e57SJeff Chen } __packed; 1719*73b01e57SJeff Chen 1720*73b01e57SJeff Chen struct host_cmd_ds_11n_addba_rsp { 1721*73b01e57SJeff Chen u8 add_rsp_result; 1722*73b01e57SJeff Chen u8 peer_mac_addr[ETH_ALEN]; 1723*73b01e57SJeff Chen u8 dialog_token; 1724*73b01e57SJeff Chen __le16 status_code; 1725*73b01e57SJeff Chen __le16 block_ack_param_set; 1726*73b01e57SJeff Chen __le16 block_ack_tmo; 1727*73b01e57SJeff Chen __le16 ssn; 1728*73b01e57SJeff Chen } __packed; 1729*73b01e57SJeff Chen 1730*73b01e57SJeff Chen struct host_cmd_ds_11n_delba { 1731*73b01e57SJeff Chen u8 del_result; 1732*73b01e57SJeff Chen u8 peer_mac_addr[ETH_ALEN]; 1733*73b01e57SJeff Chen __le16 del_ba_param_set; 1734*73b01e57SJeff Chen __le16 reason_code; 1735*73b01e57SJeff Chen u8 reserved; 1736*73b01e57SJeff Chen } __packed; 1737*73b01e57SJeff Chen 1738*73b01e57SJeff Chen struct host_cmd_ds_11n_batimeout { 1739*73b01e57SJeff Chen u8 tid; 1740*73b01e57SJeff Chen u8 peer_mac_addr[ETH_ALEN]; 1741*73b01e57SJeff Chen u8 origninator; 1742*73b01e57SJeff Chen } __packed; 1743*73b01e57SJeff Chen 1744*73b01e57SJeff Chen struct host_cmd_ds_11n_cfg { 1745*73b01e57SJeff Chen __le16 action; 1746*73b01e57SJeff Chen __le16 ht_tx_cap; 1747*73b01e57SJeff Chen __le16 ht_tx_info; 1748*73b01e57SJeff Chen __le16 misc_config; /* Needed for 802.11AC cards only */ 1749*73b01e57SJeff Chen } __packed; 1750*73b01e57SJeff Chen 1751*73b01e57SJeff Chen struct host_cmd_ds_txbuf_cfg { 1752*73b01e57SJeff Chen __le16 action; 1753*73b01e57SJeff Chen __le16 buff_size; 1754*73b01e57SJeff Chen __le16 mp_end_port; /* SDIO only, reserved for other interfaces */ 1755*73b01e57SJeff Chen __le16 reserved3; 1756*73b01e57SJeff Chen } __packed; 1757*73b01e57SJeff Chen 1758*73b01e57SJeff Chen struct host_cmd_ds_amsdu_aggr_ctrl { 1759*73b01e57SJeff Chen __le16 action; 1760*73b01e57SJeff Chen __le16 enable; 1761*73b01e57SJeff Chen __le16 curr_buf_size; 1762*73b01e57SJeff Chen } __packed; 1763*73b01e57SJeff Chen 1764*73b01e57SJeff Chen struct host_cmd_ds_sta_deauth { 1765*73b01e57SJeff Chen u8 mac[ETH_ALEN]; 1766*73b01e57SJeff Chen __le16 reason; 1767*73b01e57SJeff Chen } __packed; 1768*73b01e57SJeff Chen 1769*73b01e57SJeff Chen struct nxpwifi_ie_types_sta_info { 1770*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1771*73b01e57SJeff Chen u8 mac[ETH_ALEN]; 1772*73b01e57SJeff Chen u8 power_mfg_status; 1773*73b01e57SJeff Chen s8 rssi; 1774*73b01e57SJeff Chen }; 1775*73b01e57SJeff Chen 1776*73b01e57SJeff Chen struct host_cmd_ds_sta_list { 1777*73b01e57SJeff Chen __le16 sta_count; 1778*73b01e57SJeff Chen u8 tlv[]; 1779*73b01e57SJeff Chen } __packed; 1780*73b01e57SJeff Chen 1781*73b01e57SJeff Chen struct nxpwifi_ie_types_pwr_capability { 1782*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1783*73b01e57SJeff Chen s8 min_pwr; 1784*73b01e57SJeff Chen s8 max_pwr; 1785*73b01e57SJeff Chen }; 1786*73b01e57SJeff Chen 1787*73b01e57SJeff Chen struct nxpwifi_ie_types_local_pwr_constraint { 1788*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1789*73b01e57SJeff Chen u8 chan; 1790*73b01e57SJeff Chen u8 constraint; 1791*73b01e57SJeff Chen }; 1792*73b01e57SJeff Chen 1793*73b01e57SJeff Chen struct nxpwifi_ie_types_wmm_param_set { 1794*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1795*73b01e57SJeff Chen u8 wmm_ie[]; 1796*73b01e57SJeff Chen } __packed; 1797*73b01e57SJeff Chen 1798*73b01e57SJeff Chen struct nxpwifi_ie_types_mgmt_frame { 1799*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1800*73b01e57SJeff Chen __le16 frame_control; 1801*73b01e57SJeff Chen u8 frame_contents[]; 1802*73b01e57SJeff Chen }; 1803*73b01e57SJeff Chen 1804*73b01e57SJeff Chen struct nxpwifi_ie_types_wmm_queue_status { 1805*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1806*73b01e57SJeff Chen u8 queue_index; 1807*73b01e57SJeff Chen u8 disabled; 1808*73b01e57SJeff Chen __le16 medium_time; 1809*73b01e57SJeff Chen u8 flow_required; 1810*73b01e57SJeff Chen u8 flow_created; 1811*73b01e57SJeff Chen u32 reserved; 1812*73b01e57SJeff Chen }; 1813*73b01e57SJeff Chen 1814*73b01e57SJeff Chen struct ieee_types_wmm_info { 1815*73b01e57SJeff Chen /* 1816*73b01e57SJeff Chen * WMM Info element - Vendor Specific Header: 1817*73b01e57SJeff Chen * element_id [221/0xdd] 1818*73b01e57SJeff Chen * Len [7] 1819*73b01e57SJeff Chen * Oui [00:50:f2] 1820*73b01e57SJeff Chen * OuiType [2] 1821*73b01e57SJeff Chen * OuiSubType [0] 1822*73b01e57SJeff Chen * Version [1] 1823*73b01e57SJeff Chen */ 1824*73b01e57SJeff Chen struct ieee80211_vendor_ie vend_hdr; 1825*73b01e57SJeff Chen u8 oui_subtype; 1826*73b01e57SJeff Chen u8 version; 1827*73b01e57SJeff Chen 1828*73b01e57SJeff Chen u8 qos_info_bitmap; 1829*73b01e57SJeff Chen } __packed; 1830*73b01e57SJeff Chen 1831*73b01e57SJeff Chen struct host_cmd_ds_wmm_get_status { 1832*73b01e57SJeff Chen u8 queue_status_tlv[sizeof(struct nxpwifi_ie_types_wmm_queue_status) * 1833*73b01e57SJeff Chen IEEE80211_NUM_ACS]; 1834*73b01e57SJeff Chen u8 wmm_param_tlv[sizeof(struct ieee80211_wmm_param_ie) + 2]; 1835*73b01e57SJeff Chen } __packed; 1836*73b01e57SJeff Chen 1837*73b01e57SJeff Chen struct nxpwifi_wmm_ac_status { 1838*73b01e57SJeff Chen u8 disabled; 1839*73b01e57SJeff Chen u8 flow_required; 1840*73b01e57SJeff Chen u8 flow_created; 1841*73b01e57SJeff Chen }; 1842*73b01e57SJeff Chen 1843*73b01e57SJeff Chen struct nxpwifi_ie_types_htcap { 1844*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1845*73b01e57SJeff Chen struct ieee80211_ht_cap ht_cap; 1846*73b01e57SJeff Chen } __packed; 1847*73b01e57SJeff Chen 1848*73b01e57SJeff Chen struct nxpwifi_ie_types_vhtcap { 1849*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1850*73b01e57SJeff Chen struct ieee80211_vht_cap vht_cap; 1851*73b01e57SJeff Chen } __packed; 1852*73b01e57SJeff Chen 1853*73b01e57SJeff Chen struct nxpwifi_ie_types_aid { 1854*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1855*73b01e57SJeff Chen __le16 aid; 1856*73b01e57SJeff Chen } __packed; 1857*73b01e57SJeff Chen 1858*73b01e57SJeff Chen struct nxpwifi_ie_types_oper_mode_ntf { 1859*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1860*73b01e57SJeff Chen u8 oper_mode; 1861*73b01e57SJeff Chen } __packed; 1862*73b01e57SJeff Chen 1863*73b01e57SJeff Chen /* VHT Operations element */ 1864*73b01e57SJeff Chen struct nxpwifi_ie_types_vht_oper { 1865*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1866*73b01e57SJeff Chen u8 chan_width; 1867*73b01e57SJeff Chen u8 chan_center_freq_1; 1868*73b01e57SJeff Chen u8 chan_center_freq_2; 1869*73b01e57SJeff Chen /* Basic MCS set map, each 2 bits stands for a NSS */ 1870*73b01e57SJeff Chen __le16 basic_mcs_map; 1871*73b01e57SJeff Chen } __packed; 1872*73b01e57SJeff Chen 1873*73b01e57SJeff Chen struct nxpwifi_ie_types_wmmcap { 1874*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1875*73b01e57SJeff Chen struct nxpwifi_types_wmm_info wmm_info; 1876*73b01e57SJeff Chen } __packed; 1877*73b01e57SJeff Chen 1878*73b01e57SJeff Chen struct nxpwifi_ie_types_htinfo { 1879*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1880*73b01e57SJeff Chen struct ieee80211_ht_operation ht_oper; 1881*73b01e57SJeff Chen } __packed; 1882*73b01e57SJeff Chen 1883*73b01e57SJeff Chen struct nxpwifi_ie_types_2040bssco { 1884*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1885*73b01e57SJeff Chen u8 bss_co_2040; 1886*73b01e57SJeff Chen } __packed; 1887*73b01e57SJeff Chen 1888*73b01e57SJeff Chen struct nxpwifi_ie_types_extcap { 1889*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1890*73b01e57SJeff Chen u8 ext_capab[]; 1891*73b01e57SJeff Chen } __packed; 1892*73b01e57SJeff Chen 1893*73b01e57SJeff Chen struct host_cmd_ds_mem_access { 1894*73b01e57SJeff Chen __le16 action; 1895*73b01e57SJeff Chen __le16 reserved; 1896*73b01e57SJeff Chen __le32 addr; 1897*73b01e57SJeff Chen __le32 value; 1898*73b01e57SJeff Chen } __packed; 1899*73b01e57SJeff Chen 1900*73b01e57SJeff Chen struct nxpwifi_ie_types_qos_info { 1901*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1902*73b01e57SJeff Chen u8 qos_info; 1903*73b01e57SJeff Chen } __packed; 1904*73b01e57SJeff Chen 1905*73b01e57SJeff Chen struct host_cmd_ds_mac_reg_access { 1906*73b01e57SJeff Chen __le16 action; 1907*73b01e57SJeff Chen __le16 offset; 1908*73b01e57SJeff Chen __le32 value; 1909*73b01e57SJeff Chen } __packed; 1910*73b01e57SJeff Chen 1911*73b01e57SJeff Chen struct host_cmd_ds_bbp_reg_access { 1912*73b01e57SJeff Chen __le16 action; 1913*73b01e57SJeff Chen __le16 offset; 1914*73b01e57SJeff Chen u8 value; 1915*73b01e57SJeff Chen u8 reserved[3]; 1916*73b01e57SJeff Chen } __packed; 1917*73b01e57SJeff Chen 1918*73b01e57SJeff Chen struct host_cmd_ds_rf_reg_access { 1919*73b01e57SJeff Chen __le16 action; 1920*73b01e57SJeff Chen __le16 offset; 1921*73b01e57SJeff Chen u8 value; 1922*73b01e57SJeff Chen u8 reserved[3]; 1923*73b01e57SJeff Chen } __packed; 1924*73b01e57SJeff Chen 1925*73b01e57SJeff Chen struct host_cmd_ds_pmic_reg_access { 1926*73b01e57SJeff Chen __le16 action; 1927*73b01e57SJeff Chen __le16 offset; 1928*73b01e57SJeff Chen u8 value; 1929*73b01e57SJeff Chen u8 reserved[3]; 1930*73b01e57SJeff Chen } __packed; 1931*73b01e57SJeff Chen 1932*73b01e57SJeff Chen struct host_cmd_ds_802_11_eeprom_access { 1933*73b01e57SJeff Chen __le16 action; 1934*73b01e57SJeff Chen 1935*73b01e57SJeff Chen __le16 offset; 1936*73b01e57SJeff Chen __le16 byte_count; 1937*73b01e57SJeff Chen u8 value; 1938*73b01e57SJeff Chen } __packed; 1939*73b01e57SJeff Chen 1940*73b01e57SJeff Chen struct nxpwifi_assoc_event { 1941*73b01e57SJeff Chen u8 sta_addr[ETH_ALEN]; 1942*73b01e57SJeff Chen __le16 type; 1943*73b01e57SJeff Chen __le16 len; 1944*73b01e57SJeff Chen __le16 frame_control; 1945*73b01e57SJeff Chen __le16 cap_info; 1946*73b01e57SJeff Chen __le16 listen_interval; 1947*73b01e57SJeff Chen u8 data[]; 1948*73b01e57SJeff Chen } __packed; 1949*73b01e57SJeff Chen 1950*73b01e57SJeff Chen struct host_cmd_ds_sys_config { 1951*73b01e57SJeff Chen __le16 action; 1952*73b01e57SJeff Chen u8 tlv[]; 1953*73b01e57SJeff Chen }; 1954*73b01e57SJeff Chen 1955*73b01e57SJeff Chen struct host_cmd_11ac_vht_cfg { 1956*73b01e57SJeff Chen __le16 action; 1957*73b01e57SJeff Chen u8 band_config; 1958*73b01e57SJeff Chen u8 misc_config; 1959*73b01e57SJeff Chen __le32 cap_info; 1960*73b01e57SJeff Chen __le32 mcs_tx_set; 1961*73b01e57SJeff Chen __le32 mcs_rx_set; 1962*73b01e57SJeff Chen } __packed; 1963*73b01e57SJeff Chen 1964*73b01e57SJeff Chen struct host_cmd_tlv_akmp { 1965*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1966*73b01e57SJeff Chen __le16 key_mgmt; 1967*73b01e57SJeff Chen __le16 key_mgmt_operation; 1968*73b01e57SJeff Chen } __packed; 1969*73b01e57SJeff Chen 1970*73b01e57SJeff Chen struct host_cmd_tlv_pwk_cipher { 1971*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1972*73b01e57SJeff Chen __le16 proto; 1973*73b01e57SJeff Chen u8 cipher; 1974*73b01e57SJeff Chen u8 reserved; 1975*73b01e57SJeff Chen } __packed; 1976*73b01e57SJeff Chen 1977*73b01e57SJeff Chen struct host_cmd_tlv_gwk_cipher { 1978*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1979*73b01e57SJeff Chen u8 cipher; 1980*73b01e57SJeff Chen u8 reserved; 1981*73b01e57SJeff Chen } __packed; 1982*73b01e57SJeff Chen 1983*73b01e57SJeff Chen struct host_cmd_tlv_passphrase { 1984*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1985*73b01e57SJeff Chen u8 passphrase[]; 1986*73b01e57SJeff Chen } __packed; 1987*73b01e57SJeff Chen 1988*73b01e57SJeff Chen struct host_cmd_tlv_wep_key { 1989*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1990*73b01e57SJeff Chen u8 key_index; 1991*73b01e57SJeff Chen u8 is_default; 1992*73b01e57SJeff Chen u8 key[]; 1993*73b01e57SJeff Chen }; 1994*73b01e57SJeff Chen 1995*73b01e57SJeff Chen struct host_cmd_tlv_auth_type { 1996*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 1997*73b01e57SJeff Chen u8 auth_type; 1998*73b01e57SJeff Chen u8 pwe_derivation; 1999*73b01e57SJeff Chen u8 transition_disable; 2000*73b01e57SJeff Chen } __packed; 2001*73b01e57SJeff Chen 2002*73b01e57SJeff Chen struct host_cmd_tlv_encrypt_protocol { 2003*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 2004*73b01e57SJeff Chen __le16 proto; 2005*73b01e57SJeff Chen } __packed; 2006*73b01e57SJeff Chen 2007*73b01e57SJeff Chen struct host_cmd_tlv_ssid { 2008*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 2009*73b01e57SJeff Chen u8 ssid[]; 2010*73b01e57SJeff Chen } __packed; 2011*73b01e57SJeff Chen 2012*73b01e57SJeff Chen struct host_cmd_tlv_rates { 2013*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 2014*73b01e57SJeff Chen u8 rates[]; 2015*73b01e57SJeff Chen } __packed; 2016*73b01e57SJeff Chen 2017*73b01e57SJeff Chen struct nxpwifi_ie_types_bssid_list { 2018*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 2019*73b01e57SJeff Chen u8 bssid[ETH_ALEN]; 2020*73b01e57SJeff Chen } __packed; 2021*73b01e57SJeff Chen 2022*73b01e57SJeff Chen struct host_cmd_tlv_bcast_ssid { 2023*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 2024*73b01e57SJeff Chen u8 bcast_ctl; 2025*73b01e57SJeff Chen } __packed; 2026*73b01e57SJeff Chen 2027*73b01e57SJeff Chen struct host_cmd_tlv_beacon_period { 2028*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 2029*73b01e57SJeff Chen __le16 period; 2030*73b01e57SJeff Chen } __packed; 2031*73b01e57SJeff Chen 2032*73b01e57SJeff Chen struct host_cmd_tlv_dtim_period { 2033*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 2034*73b01e57SJeff Chen u8 period; 2035*73b01e57SJeff Chen } __packed; 2036*73b01e57SJeff Chen 2037*73b01e57SJeff Chen struct host_cmd_tlv_frag_threshold { 2038*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 2039*73b01e57SJeff Chen __le16 frag_thr; 2040*73b01e57SJeff Chen } __packed; 2041*73b01e57SJeff Chen 2042*73b01e57SJeff Chen struct host_cmd_tlv_rts_threshold { 2043*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 2044*73b01e57SJeff Chen __le16 rts_thr; 2045*73b01e57SJeff Chen } __packed; 2046*73b01e57SJeff Chen 2047*73b01e57SJeff Chen struct host_cmd_tlv_retry_limit { 2048*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 2049*73b01e57SJeff Chen u8 limit; 2050*73b01e57SJeff Chen } __packed; 2051*73b01e57SJeff Chen 2052*73b01e57SJeff Chen struct host_cmd_tlv_mac_addr { 2053*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 2054*73b01e57SJeff Chen u8 mac_addr[ETH_ALEN]; 2055*73b01e57SJeff Chen } __packed; 2056*73b01e57SJeff Chen 2057*73b01e57SJeff Chen struct host_cmd_tlv_channel_band { 2058*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 2059*73b01e57SJeff Chen u8 band_config; 2060*73b01e57SJeff Chen u8 channel; 2061*73b01e57SJeff Chen } __packed; 2062*73b01e57SJeff Chen 2063*73b01e57SJeff Chen struct host_cmd_tlv_ageout_timer { 2064*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 2065*73b01e57SJeff Chen __le32 sta_ao_timer; 2066*73b01e57SJeff Chen } __packed; 2067*73b01e57SJeff Chen 2068*73b01e57SJeff Chen struct host_cmd_tlv_power_constraint { 2069*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 2070*73b01e57SJeff Chen u8 constraint; 2071*73b01e57SJeff Chen } __packed; 2072*73b01e57SJeff Chen 2073*73b01e57SJeff Chen struct nxpwifi_ie_types_btcoex_scan_time { 2074*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 2075*73b01e57SJeff Chen u8 coex_scan; 2076*73b01e57SJeff Chen u8 reserved; 2077*73b01e57SJeff Chen __le16 min_scan_time; 2078*73b01e57SJeff Chen __le16 max_scan_time; 2079*73b01e57SJeff Chen } __packed; 2080*73b01e57SJeff Chen 2081*73b01e57SJeff Chen struct nxpwifi_ie_types_btcoex_aggr_win_size { 2082*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 2083*73b01e57SJeff Chen u8 coex_win_size; 2084*73b01e57SJeff Chen u8 tx_win_size; 2085*73b01e57SJeff Chen u8 rx_win_size; 2086*73b01e57SJeff Chen u8 reserved; 2087*73b01e57SJeff Chen } __packed; 2088*73b01e57SJeff Chen 2089*73b01e57SJeff Chen struct nxpwifi_ie_types_robust_coex { 2090*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 2091*73b01e57SJeff Chen __le32 mode; 2092*73b01e57SJeff Chen } __packed; 2093*73b01e57SJeff Chen 2094*73b01e57SJeff Chen #define NXPWIFI_VERSION_STR_LENGTH 128 2095*73b01e57SJeff Chen 2096*73b01e57SJeff Chen struct host_cmd_ds_version_ext { 2097*73b01e57SJeff Chen u8 version_str_sel; 2098*73b01e57SJeff Chen char version_str[NXPWIFI_VERSION_STR_LENGTH]; 2099*73b01e57SJeff Chen } __packed; 2100*73b01e57SJeff Chen 2101*73b01e57SJeff Chen struct host_cmd_ds_mgmt_frame_reg { 2102*73b01e57SJeff Chen __le16 action; 2103*73b01e57SJeff Chen __le32 mask; 2104*73b01e57SJeff Chen } __packed; 2105*73b01e57SJeff Chen 2106*73b01e57SJeff Chen struct host_cmd_ds_remain_on_chan { 2107*73b01e57SJeff Chen __le16 action; 2108*73b01e57SJeff Chen u8 status; 2109*73b01e57SJeff Chen u8 reserved; 2110*73b01e57SJeff Chen u8 band_cfg; 2111*73b01e57SJeff Chen u8 channel; 2112*73b01e57SJeff Chen __le32 duration; 2113*73b01e57SJeff Chen } __packed; 2114*73b01e57SJeff Chen 2115*73b01e57SJeff Chen struct host_cmd_ds_802_11_ibss_status { 2116*73b01e57SJeff Chen __le16 action; 2117*73b01e57SJeff Chen __le16 enable; 2118*73b01e57SJeff Chen u8 bssid[ETH_ALEN]; 2119*73b01e57SJeff Chen __le16 beacon_interval; 2120*73b01e57SJeff Chen __le16 atim_window; 2121*73b01e57SJeff Chen __le16 use_g_rate_protect; 2122*73b01e57SJeff Chen } __packed; 2123*73b01e57SJeff Chen 2124*73b01e57SJeff Chen struct nxpwifi_fw_mef_entry { 2125*73b01e57SJeff Chen u8 mode; 2126*73b01e57SJeff Chen u8 action; 2127*73b01e57SJeff Chen __le16 exprsize; 2128*73b01e57SJeff Chen u8 expr[]; 2129*73b01e57SJeff Chen } __packed; 2130*73b01e57SJeff Chen 2131*73b01e57SJeff Chen struct host_cmd_ds_mef_cfg { 2132*73b01e57SJeff Chen __le32 criteria; 2133*73b01e57SJeff Chen __le16 num_entries; 2134*73b01e57SJeff Chen u8 mef_entry_data[]; 2135*73b01e57SJeff Chen } __packed; 2136*73b01e57SJeff Chen 2137*73b01e57SJeff Chen #define CONNECTION_TYPE_INFRA 0 2138*73b01e57SJeff Chen #define CONNECTION_TYPE_AP 2 2139*73b01e57SJeff Chen 2140*73b01e57SJeff Chen struct host_cmd_ds_set_bss_mode { 2141*73b01e57SJeff Chen u8 con_type; 2142*73b01e57SJeff Chen } __packed; 2143*73b01e57SJeff Chen 2144*73b01e57SJeff Chen struct host_cmd_ds_pcie_details { 2145*73b01e57SJeff Chen /* TX buffer descriptor ring address */ 2146*73b01e57SJeff Chen __le32 txbd_addr_lo; 2147*73b01e57SJeff Chen __le32 txbd_addr_hi; 2148*73b01e57SJeff Chen /* TX buffer descriptor ring count */ 2149*73b01e57SJeff Chen __le32 txbd_count; 2150*73b01e57SJeff Chen 2151*73b01e57SJeff Chen /* RX buffer descriptor ring address */ 2152*73b01e57SJeff Chen __le32 rxbd_addr_lo; 2153*73b01e57SJeff Chen __le32 rxbd_addr_hi; 2154*73b01e57SJeff Chen /* RX buffer descriptor ring count */ 2155*73b01e57SJeff Chen __le32 rxbd_count; 2156*73b01e57SJeff Chen 2157*73b01e57SJeff Chen /* Event buffer descriptor ring address */ 2158*73b01e57SJeff Chen __le32 evtbd_addr_lo; 2159*73b01e57SJeff Chen __le32 evtbd_addr_hi; 2160*73b01e57SJeff Chen /* Event buffer descriptor ring count */ 2161*73b01e57SJeff Chen __le32 evtbd_count; 2162*73b01e57SJeff Chen 2163*73b01e57SJeff Chen /* Sleep cookie buffer physical address */ 2164*73b01e57SJeff Chen __le32 sleep_cookie_addr_lo; 2165*73b01e57SJeff Chen __le32 sleep_cookie_addr_hi; 2166*73b01e57SJeff Chen } __packed; 2167*73b01e57SJeff Chen 2168*73b01e57SJeff Chen struct nxpwifi_ie_types_rssi_threshold { 2169*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 2170*73b01e57SJeff Chen u8 abs_value; 2171*73b01e57SJeff Chen u8 evt_freq; 2172*73b01e57SJeff Chen } __packed; 2173*73b01e57SJeff Chen 2174*73b01e57SJeff Chen #define NXPWIFI_DFS_REC_HDR_LEN 8 2175*73b01e57SJeff Chen #define NXPWIFI_DFS_REC_HDR_NUM 10 2176*73b01e57SJeff Chen #define NXPWIFI_BIN_COUNTER_LEN 7 2177*73b01e57SJeff Chen 2178*73b01e57SJeff Chen struct nxpwifi_radar_det_event { 2179*73b01e57SJeff Chen __le32 detect_count; 2180*73b01e57SJeff Chen u8 reg_domain; /*1=fcc, 2=etsi, 3=mic*/ 2181*73b01e57SJeff Chen u8 det_type; /*0=none, 1=pw(chirp), 2=pri(radar)*/ 2182*73b01e57SJeff Chen __le16 pw_chirp_type; 2183*73b01e57SJeff Chen u8 pw_chirp_idx; 2184*73b01e57SJeff Chen u8 pw_value; 2185*73b01e57SJeff Chen u8 pri_radar_type; 2186*73b01e57SJeff Chen u8 pri_bincnt; 2187*73b01e57SJeff Chen u8 bin_counter[NXPWIFI_BIN_COUNTER_LEN]; 2188*73b01e57SJeff Chen u8 num_dfs_records; 2189*73b01e57SJeff Chen u8 dfs_record_hdr[NXPWIFI_DFS_REC_HDR_NUM][NXPWIFI_DFS_REC_HDR_LEN]; 2190*73b01e57SJeff Chen __le32 passed; 2191*73b01e57SJeff Chen } __packed; 2192*73b01e57SJeff Chen 2193*73b01e57SJeff Chen struct nxpwifi_ie_types_multi_chan_info { 2194*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 2195*73b01e57SJeff Chen __le16 status; 2196*73b01e57SJeff Chen u8 tlv_buffer[]; 2197*73b01e57SJeff Chen } __packed; 2198*73b01e57SJeff Chen 2199*73b01e57SJeff Chen struct nxpwifi_ie_types_mc_group_info { 2200*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 2201*73b01e57SJeff Chen u8 chan_group_id; 2202*73b01e57SJeff Chen u8 chan_buf_weight; 2203*73b01e57SJeff Chen u8 band_config; 2204*73b01e57SJeff Chen u8 chan_num; 2205*73b01e57SJeff Chen __le32 chan_time; 2206*73b01e57SJeff Chen __le32 reserved; 2207*73b01e57SJeff Chen union { 2208*73b01e57SJeff Chen u8 sdio_func_num; 2209*73b01e57SJeff Chen u8 usb_ep_num; 2210*73b01e57SJeff Chen } hid_num; 2211*73b01e57SJeff Chen u8 intf_num; 2212*73b01e57SJeff Chen u8 bss_type_numlist[]; 2213*73b01e57SJeff Chen } __packed; 2214*73b01e57SJeff Chen 2215*73b01e57SJeff Chen #define MEAS_RPT_MAP_RADAR_MASK 0x08 2216*73b01e57SJeff Chen #define MEAS_RPT_MAP_RADAR_SHIFT_BIT 3 2217*73b01e57SJeff Chen 2218*73b01e57SJeff Chen struct nxpwifi_ie_types_chan_rpt_data { 2219*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 2220*73b01e57SJeff Chen u8 meas_rpt_map; 2221*73b01e57SJeff Chen } __packed; 2222*73b01e57SJeff Chen 2223*73b01e57SJeff Chen struct host_cmd_ds_802_11_subsc_evt { 2224*73b01e57SJeff Chen __le16 action; 2225*73b01e57SJeff Chen __le16 events; 2226*73b01e57SJeff Chen } __packed; 2227*73b01e57SJeff Chen 2228*73b01e57SJeff Chen struct chan_switch_result { 2229*73b01e57SJeff Chen u8 cur_chan; 2230*73b01e57SJeff Chen u8 status; 2231*73b01e57SJeff Chen u8 reason; 2232*73b01e57SJeff Chen } __packed; 2233*73b01e57SJeff Chen 2234*73b01e57SJeff Chen struct nxpwifi_ie { 2235*73b01e57SJeff Chen __le16 ie_index; 2236*73b01e57SJeff Chen __le16 mgmt_subtype_mask; 2237*73b01e57SJeff Chen __le16 ie_length; 2238*73b01e57SJeff Chen u8 ie_buffer[IEEE_MAX_IE_SIZE]; 2239*73b01e57SJeff Chen } __packed; 2240*73b01e57SJeff Chen 2241*73b01e57SJeff Chen #define MAX_MGMT_IE_INDEX 16 2242*73b01e57SJeff Chen struct nxpwifi_ie_list { 2243*73b01e57SJeff Chen __le16 type; 2244*73b01e57SJeff Chen __le16 len; 2245*73b01e57SJeff Chen struct nxpwifi_ie ie_list[MAX_MGMT_IE_INDEX]; 2246*73b01e57SJeff Chen } __packed; 2247*73b01e57SJeff Chen 2248*73b01e57SJeff Chen struct coalesce_filt_field_param { 2249*73b01e57SJeff Chen u8 operation; 2250*73b01e57SJeff Chen u8 operand_len; 2251*73b01e57SJeff Chen __le16 offset; 2252*73b01e57SJeff Chen u8 operand_byte_stream[4]; 2253*73b01e57SJeff Chen }; 2254*73b01e57SJeff Chen 2255*73b01e57SJeff Chen struct coalesce_receive_filt_rule { 2256*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 2257*73b01e57SJeff Chen u8 num_of_fields; 2258*73b01e57SJeff Chen u8 pkt_type; 2259*73b01e57SJeff Chen __le16 max_coalescing_delay; 2260*73b01e57SJeff Chen struct coalesce_filt_field_param params[]; 2261*73b01e57SJeff Chen } __packed; 2262*73b01e57SJeff Chen 2263*73b01e57SJeff Chen struct host_cmd_ds_coalesce_cfg { 2264*73b01e57SJeff Chen __le16 action; 2265*73b01e57SJeff Chen __le16 num_of_rules; 2266*73b01e57SJeff Chen u8 rule_data[]; 2267*73b01e57SJeff Chen } __packed; 2268*73b01e57SJeff Chen 2269*73b01e57SJeff Chen struct host_cmd_ds_multi_chan_policy { 2270*73b01e57SJeff Chen __le16 action; 2271*73b01e57SJeff Chen __le16 policy; 2272*73b01e57SJeff Chen } __packed; 2273*73b01e57SJeff Chen 2274*73b01e57SJeff Chen struct host_cmd_ds_robust_coex { 2275*73b01e57SJeff Chen __le16 action; 2276*73b01e57SJeff Chen __le16 reserved; 2277*73b01e57SJeff Chen } __packed; 2278*73b01e57SJeff Chen 2279*73b01e57SJeff Chen struct host_cmd_ds_wakeup_reason { 2280*73b01e57SJeff Chen __le16 wakeup_reason; 2281*73b01e57SJeff Chen } __packed; 2282*73b01e57SJeff Chen 2283*73b01e57SJeff Chen struct host_cmd_ds_gtk_rekey_params { 2284*73b01e57SJeff Chen __le16 action; 2285*73b01e57SJeff Chen u8 kck[NL80211_KCK_LEN]; 2286*73b01e57SJeff Chen u8 kek[NL80211_KEK_LEN]; 2287*73b01e57SJeff Chen __le32 replay_ctr_low; 2288*73b01e57SJeff Chen __le32 replay_ctr_high; 2289*73b01e57SJeff Chen } __packed; 2290*73b01e57SJeff Chen 2291*73b01e57SJeff Chen struct host_cmd_ds_chan_region_cfg { 2292*73b01e57SJeff Chen __le16 action; 2293*73b01e57SJeff Chen } __packed; 2294*73b01e57SJeff Chen 2295*73b01e57SJeff Chen struct host_cmd_ds_pkt_aggr_ctrl { 2296*73b01e57SJeff Chen __le16 action; 2297*73b01e57SJeff Chen __le16 enable; 2298*73b01e57SJeff Chen __le16 tx_aggr_max_size; 2299*73b01e57SJeff Chen __le16 tx_aggr_max_num; 2300*73b01e57SJeff Chen __le16 tx_aggr_align; 2301*73b01e57SJeff Chen } __packed; 2302*73b01e57SJeff Chen 2303*73b01e57SJeff Chen struct host_cmd_ds_sta_configure { 2304*73b01e57SJeff Chen __le16 action; 2305*73b01e57SJeff Chen u8 tlv_buffer[]; 2306*73b01e57SJeff Chen } __packed; 2307*73b01e57SJeff Chen 2308*73b01e57SJeff Chen struct nxpwifi_ie_types_sta_flag { 2309*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 2310*73b01e57SJeff Chen __le32 sta_flags; 2311*73b01e57SJeff Chen } __packed; 2312*73b01e57SJeff Chen 2313*73b01e57SJeff Chen struct host_cmd_ds_add_station { 2314*73b01e57SJeff Chen __le16 action; 2315*73b01e57SJeff Chen __le16 aid; 2316*73b01e57SJeff Chen u8 peer_mac[ETH_ALEN]; 2317*73b01e57SJeff Chen __le32 listen_interval; 2318*73b01e57SJeff Chen __le16 cap_info; 2319*73b01e57SJeff Chen u8 tlv[]; 2320*73b01e57SJeff Chen } __packed; 2321*73b01e57SJeff Chen 2322*73b01e57SJeff Chen struct host_cmd_11ax_cfg { 2323*73b01e57SJeff Chen __le16 action; 2324*73b01e57SJeff Chen u8 band_config; 2325*73b01e57SJeff Chen u8 tlv[]; 2326*73b01e57SJeff Chen } __packed; 2327*73b01e57SJeff Chen 2328*73b01e57SJeff Chen struct host_cmd_11ax_cmd { 2329*73b01e57SJeff Chen __le16 action; 2330*73b01e57SJeff Chen __le16 sub_id; 2331*73b01e57SJeff Chen u8 val[]; 2332*73b01e57SJeff Chen } __packed; 2333*73b01e57SJeff Chen 2334*73b01e57SJeff Chen struct nxpwifi_802_11_net_monitor { 2335*73b01e57SJeff Chen u32 enable_net_mon; 2336*73b01e57SJeff Chen u32 filter_flag; 2337*73b01e57SJeff Chen u32 band; 2338*73b01e57SJeff Chen u32 channel; 2339*73b01e57SJeff Chen u32 chan_bandwidth; 2340*73b01e57SJeff Chen }; 2341*73b01e57SJeff Chen 2342*73b01e57SJeff Chen struct band_config { 2343*73b01e57SJeff Chen /* Band: 00=2.4, 01=5, 10=6 GHz */ 2344*73b01e57SJeff Chen u8 chan_band : 2; 2345*73b01e57SJeff Chen /* Width: 00=20, 10=40, 11=80 MHz */ 2346*73b01e57SJeff Chen u8 chan_width : 2; 2347*73b01e57SJeff Chen /* Sec offset: 00=None, 01=Above, 11=Below */ 2348*73b01e57SJeff Chen u8 chan_2O_ffset : 2; 2349*73b01e57SJeff Chen /* Chan sel: 00=manual, 01=ACS, 02=Adoption */ 2350*73b01e57SJeff Chen u8 scan_mode : 2; 2351*73b01e57SJeff Chen } __packed; 2352*73b01e57SJeff Chen 2353*73b01e57SJeff Chen struct chan_band_param { 2354*73b01e57SJeff Chen struct band_config band_cfg; 2355*73b01e57SJeff Chen u8 chan_number; 2356*73b01e57SJeff Chen } __packed; 2357*73b01e57SJeff Chen 2358*73b01e57SJeff Chen struct nxpwifi_ie_types_chan_band_list { 2359*73b01e57SJeff Chen struct nxpwifi_ie_types_header header; 2360*73b01e57SJeff Chen struct chan_band_param chan_band_param[]; 2361*73b01e57SJeff Chen } __packed; 2362*73b01e57SJeff Chen 2363*73b01e57SJeff Chen struct host_cmd_ds_802_11_net_monitor { 2364*73b01e57SJeff Chen __le16 action; 2365*73b01e57SJeff Chen __le16 enable_net_mon; 2366*73b01e57SJeff Chen __le16 filter_flag; 2367*73b01e57SJeff Chen struct nxpwifi_ie_types_chan_band_list monitor_chan; 2368*73b01e57SJeff Chen } __packed; 2369*73b01e57SJeff Chen 2370*73b01e57SJeff Chen struct host_cmd_twt_cfg { 2371*73b01e57SJeff Chen __le16 action; 2372*73b01e57SJeff Chen __le16 sub_id; 2373*73b01e57SJeff Chen u8 val[]; 2374*73b01e57SJeff Chen } __packed; 2375*73b01e57SJeff Chen 2376*73b01e57SJeff Chen struct host_cmd_ds_command { 2377*73b01e57SJeff Chen __le16 command; 2378*73b01e57SJeff Chen __le16 size; 2379*73b01e57SJeff Chen __le16 seq_num; 2380*73b01e57SJeff Chen __le16 result; 2381*73b01e57SJeff Chen union { 2382*73b01e57SJeff Chen struct host_cmd_ds_get_hw_spec hw_spec; 2383*73b01e57SJeff Chen struct host_cmd_ds_mac_control mac_ctrl; 2384*73b01e57SJeff Chen struct host_cmd_ds_802_11_mac_address mac_addr; 2385*73b01e57SJeff Chen struct host_cmd_ds_mac_multicast_adr mc_addr; 2386*73b01e57SJeff Chen struct host_cmd_ds_802_11_get_log get_log; 2387*73b01e57SJeff Chen struct host_cmd_ds_802_11_rssi_info rssi_info; 2388*73b01e57SJeff Chen struct host_cmd_ds_802_11_rssi_info_rsp rssi_info_rsp; 2389*73b01e57SJeff Chen struct host_cmd_ds_802_11_snmp_mib smib; 2390*73b01e57SJeff Chen struct host_cmd_ds_tx_rate_query tx_rate; 2391*73b01e57SJeff Chen struct host_cmd_ds_tx_rate_cfg tx_rate_cfg; 2392*73b01e57SJeff Chen struct host_cmd_ds_txpwr_cfg txp_cfg; 2393*73b01e57SJeff Chen struct host_cmd_ds_rf_tx_pwr txp; 2394*73b01e57SJeff Chen struct host_cmd_ds_rf_ant_mimo ant_mimo; 2395*73b01e57SJeff Chen struct host_cmd_ds_rf_ant_siso ant_siso; 2396*73b01e57SJeff Chen struct host_cmd_ds_802_11_ps_mode_enh psmode_enh; 2397*73b01e57SJeff Chen struct host_cmd_ds_802_11_hs_cfg_enh opt_hs_cfg; 2398*73b01e57SJeff Chen struct host_cmd_ds_802_11_scan scan; 2399*73b01e57SJeff Chen struct host_cmd_ds_802_11_scan_ext ext_scan; 2400*73b01e57SJeff Chen struct host_cmd_ds_802_11_scan_rsp scan_resp; 2401*73b01e57SJeff Chen struct host_cmd_ds_802_11_bg_scan_config bg_scan_config; 2402*73b01e57SJeff Chen struct host_cmd_ds_802_11_bg_scan_query bg_scan_query; 2403*73b01e57SJeff Chen struct host_cmd_ds_802_11_bg_scan_query_rsp bg_scan_query_resp; 2404*73b01e57SJeff Chen struct host_cmd_ds_802_11_associate associate; 2405*73b01e57SJeff Chen struct host_cmd_ds_802_11_associate_rsp associate_rsp; 2406*73b01e57SJeff Chen struct host_cmd_ds_802_11_deauthenticate deauth; 2407*73b01e57SJeff Chen struct host_cmd_ds_802_11d_domain_info domain_info; 2408*73b01e57SJeff Chen struct host_cmd_ds_802_11d_domain_info_rsp domain_info_resp; 2409*73b01e57SJeff Chen struct host_cmd_ds_11n_addba_req add_ba_req; 2410*73b01e57SJeff Chen struct host_cmd_ds_11n_addba_rsp add_ba_rsp; 2411*73b01e57SJeff Chen struct host_cmd_ds_11n_delba del_ba; 2412*73b01e57SJeff Chen struct host_cmd_ds_txbuf_cfg tx_buf; 2413*73b01e57SJeff Chen struct host_cmd_ds_amsdu_aggr_ctrl amsdu_aggr_ctrl; 2414*73b01e57SJeff Chen struct host_cmd_ds_11n_cfg htcfg; 2415*73b01e57SJeff Chen struct host_cmd_ds_wmm_get_status get_wmm_status; 2416*73b01e57SJeff Chen struct host_cmd_ds_802_11_key_material key_material; 2417*73b01e57SJeff Chen struct host_cmd_ds_version_ext verext; 2418*73b01e57SJeff Chen struct host_cmd_ds_mgmt_frame_reg reg_mask; 2419*73b01e57SJeff Chen struct host_cmd_ds_remain_on_chan roc_cfg; 2420*73b01e57SJeff Chen struct host_cmd_ds_802_11_ibss_status ibss_coalescing; 2421*73b01e57SJeff Chen struct host_cmd_ds_mef_cfg mef_cfg; 2422*73b01e57SJeff Chen struct host_cmd_ds_mem_access mem; 2423*73b01e57SJeff Chen struct host_cmd_ds_mac_reg_access mac_reg; 2424*73b01e57SJeff Chen struct host_cmd_ds_bbp_reg_access bbp_reg; 2425*73b01e57SJeff Chen struct host_cmd_ds_rf_reg_access rf_reg; 2426*73b01e57SJeff Chen struct host_cmd_ds_pmic_reg_access pmic_reg; 2427*73b01e57SJeff Chen struct host_cmd_ds_set_bss_mode bss_mode; 2428*73b01e57SJeff Chen struct host_cmd_ds_pcie_details pcie_host_spec; 2429*73b01e57SJeff Chen struct host_cmd_ds_802_11_eeprom_access eeprom; 2430*73b01e57SJeff Chen struct host_cmd_ds_802_11_subsc_evt subsc_evt; 2431*73b01e57SJeff Chen struct host_cmd_ds_sys_config uap_sys_config; 2432*73b01e57SJeff Chen struct host_cmd_ds_sta_deauth sta_deauth; 2433*73b01e57SJeff Chen struct host_cmd_ds_sta_list sta_list; 2434*73b01e57SJeff Chen struct host_cmd_11ac_vht_cfg vht_cfg; 2435*73b01e57SJeff Chen struct host_cmd_ds_coalesce_cfg coalesce_cfg; 2436*73b01e57SJeff Chen struct host_cmd_ds_chan_rpt_req chan_rpt_req; 2437*73b01e57SJeff Chen struct host_cmd_sdio_sp_rx_aggr_cfg sdio_rx_aggr_cfg; 2438*73b01e57SJeff Chen struct host_cmd_ds_multi_chan_policy mc_policy; 2439*73b01e57SJeff Chen struct host_cmd_ds_robust_coex coex; 2440*73b01e57SJeff Chen struct host_cmd_ds_wakeup_reason hs_wakeup_reason; 2441*73b01e57SJeff Chen struct host_cmd_ds_gtk_rekey_params rekey; 2442*73b01e57SJeff Chen struct host_cmd_ds_chan_region_cfg reg_cfg; 2443*73b01e57SJeff Chen struct host_cmd_ds_pkt_aggr_ctrl pkt_aggr_ctrl; 2444*73b01e57SJeff Chen struct host_cmd_ds_sta_configure sta_cfg; 2445*73b01e57SJeff Chen struct host_cmd_ds_add_station sta_info; 2446*73b01e57SJeff Chen struct host_cmd_11ax_cfg ax_cfg; 2447*73b01e57SJeff Chen struct host_cmd_11ax_cmd ax_cmd; 2448*73b01e57SJeff Chen struct host_cmd_ds_802_11_net_monitor net_mon; 2449*73b01e57SJeff Chen struct host_cmd_twt_cfg twt_cfg; 2450*73b01e57SJeff Chen } params; 2451*73b01e57SJeff Chen } __packed; 2452*73b01e57SJeff Chen 2453*73b01e57SJeff Chen struct nxpwifi_opt_sleep_confirm { 2454*73b01e57SJeff Chen __le16 command; 2455*73b01e57SJeff Chen __le16 size; 2456*73b01e57SJeff Chen __le16 seq_num; 2457*73b01e57SJeff Chen __le16 result; 2458*73b01e57SJeff Chen __le16 action; 2459*73b01e57SJeff Chen __le16 resp_ctrl; 2460*73b01e57SJeff Chen } __packed; 2461*73b01e57SJeff Chen 2462*73b01e57SJeff Chen #define VDLL_IND_TYPE_REQ 0 2463*73b01e57SJeff Chen #define VDLL_IND_TYPE_OFFSET 1 2464*73b01e57SJeff Chen #define VDLL_IND_TYPE_ERR_SIG 2 2465*73b01e57SJeff Chen #define VDLL_IND_TYPE_ERR_ID 3 2466*73b01e57SJeff Chen #define VDLL_IND_TYPE_SEC_ERR_ID 4 2467*73b01e57SJeff Chen #define VDLL_IND_TYPE_INTF_RESET 5 2468*73b01e57SJeff Chen 2469*73b01e57SJeff Chen struct vdll_ind_event { 2470*73b01e57SJeff Chen __le16 type; 2471*73b01e57SJeff Chen __le16 vdll_id; 2472*73b01e57SJeff Chen __le32 offset; 2473*73b01e57SJeff Chen __le16 block_len; 2474*73b01e57SJeff Chen } __packed; 2475*73b01e57SJeff Chen #endif /* !_NXPWIFI_FW_H_ */ 2476