fw.h revision 2e4c14a5582addd655e53277861b7ad853bfd6c3
1/* 2 * Marvell Wireless LAN device driver: Firmware specific macros & structures 3 * 4 * Copyright (C) 2011, Marvell International Ltd. 5 * 6 * This software file (the "File") is distributed by Marvell International 7 * Ltd. under the terms of the GNU General Public License Version 2, June 1991 8 * (the "License"). You may use, redistribute and/or modify this File in 9 * accordance with the terms and conditions of the License, a copy of which 10 * is available by writing to the Free Software Foundation, Inc., 11 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA or on the 12 * worldwide web at http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. 13 * 14 * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE 16 * ARE EXPRESSLY DISCLAIMED. The License provides additional details about 17 * this warranty disclaimer. 18 */ 19 20#ifndef _MWIFIEX_FW_H_ 21#define _MWIFIEX_FW_H_ 22 23#include <linux/if_ether.h> 24 25 26#define INTF_HEADER_LEN 4 27 28struct rfc_1042_hdr { 29 u8 llc_dsap; 30 u8 llc_ssap; 31 u8 llc_ctrl; 32 u8 snap_oui[3]; 33 u16 snap_type; 34}; 35 36struct rx_packet_hdr { 37 struct ethhdr eth803_hdr; 38 struct rfc_1042_hdr rfc1042_hdr; 39}; 40 41struct tx_packet_hdr { 42 struct ethhdr eth803_hdr; 43 struct rfc_1042_hdr rfc1042_hdr; 44}; 45 46#define B_SUPPORTED_RATES 5 47#define G_SUPPORTED_RATES 9 48#define BG_SUPPORTED_RATES 13 49#define A_SUPPORTED_RATES 9 50#define HOSTCMD_SUPPORTED_RATES 14 51#define N_SUPPORTED_RATES 3 52#define ALL_802_11_BANDS (BAND_A | BAND_B | BAND_G | BAND_GN) 53 54#define FW_MULTI_BANDS_SUPPORT (BIT(8) | BIT(9) | BIT(10) | BIT(11)) 55#define IS_SUPPORT_MULTI_BANDS(adapter) \ 56 (adapter->fw_cap_info & FW_MULTI_BANDS_SUPPORT) 57#define GET_FW_DEFAULT_BANDS(adapter) \ 58 ((adapter->fw_cap_info >> 8) & ALL_802_11_BANDS) 59 60#define HostCmd_WEP_KEY_INDEX_MASK 0x3fff 61 62#define KEY_INFO_ENABLED 0x01 63enum KEY_TYPE_ID { 64 KEY_TYPE_ID_WEP = 0, 65 KEY_TYPE_ID_TKIP, 66 KEY_TYPE_ID_AES, 67 KEY_TYPE_ID_WAPI, 68}; 69#define KEY_MCAST BIT(0) 70#define KEY_UNICAST BIT(1) 71#define KEY_ENABLED BIT(2) 72 73#define WAPI_KEY_LEN 50 74 75#define MAX_POLL_TRIES 100 76 77#define MAX_MULTI_INTERFACE_POLL_TRIES 1000 78 79#define MAX_FIRMWARE_POLL_TRIES 100 80 81#define FIRMWARE_READY_SDIO 0xfedc 82#define FIRMWARE_READY_PCIE 0xfedcba00 83 84enum mwifiex_usb_ep { 85 MWIFIEX_USB_EP_CMD_EVENT = 1, 86 MWIFIEX_USB_EP_DATA = 2, 87}; 88 89enum MWIFIEX_802_11_PRIVACY_FILTER { 90 MWIFIEX_802_11_PRIV_FILTER_ACCEPT_ALL, 91 MWIFIEX_802_11_PRIV_FILTER_8021X_WEP 92}; 93 94#define CAL_SNR(RSSI, NF) ((s16)((s16)(RSSI)-(s16)(NF))) 95 96#define PROPRIETARY_TLV_BASE_ID 0x0100 97#define TLV_TYPE_KEY_MATERIAL (PROPRIETARY_TLV_BASE_ID + 0) 98#define TLV_TYPE_CHANLIST (PROPRIETARY_TLV_BASE_ID + 1) 99#define TLV_TYPE_NUMPROBES (PROPRIETARY_TLV_BASE_ID + 2) 100#define TLV_TYPE_RSSI_LOW (PROPRIETARY_TLV_BASE_ID + 4) 101#define TLV_TYPE_PASSTHROUGH (PROPRIETARY_TLV_BASE_ID + 10) 102#define TLV_TYPE_WMMQSTATUS (PROPRIETARY_TLV_BASE_ID + 16) 103#define TLV_TYPE_WILDCARDSSID (PROPRIETARY_TLV_BASE_ID + 18) 104#define TLV_TYPE_TSFTIMESTAMP (PROPRIETARY_TLV_BASE_ID + 19) 105#define TLV_TYPE_RSSI_HIGH (PROPRIETARY_TLV_BASE_ID + 22) 106#define TLV_TYPE_AUTH_TYPE (PROPRIETARY_TLV_BASE_ID + 31) 107#define TLV_TYPE_CHANNELBANDLIST (PROPRIETARY_TLV_BASE_ID + 42) 108#define TLV_TYPE_RATE_DROP_CONTROL (PROPRIETARY_TLV_BASE_ID + 82) 109#define TLV_TYPE_RATE_SCOPE (PROPRIETARY_TLV_BASE_ID + 83) 110#define TLV_TYPE_POWER_GROUP (PROPRIETARY_TLV_BASE_ID + 84) 111#define TLV_TYPE_WAPI_IE (PROPRIETARY_TLV_BASE_ID + 94) 112#define TLV_TYPE_MGMT_IE (PROPRIETARY_TLV_BASE_ID + 105) 113#define TLV_TYPE_AUTO_DS_PARAM (PROPRIETARY_TLV_BASE_ID + 113) 114#define TLV_TYPE_PS_PARAM (PROPRIETARY_TLV_BASE_ID + 114) 115 116#define MWIFIEX_TX_DATA_BUF_SIZE_2K 2048 117 118#define SSN_MASK 0xfff0 119 120#define BA_RESULT_SUCCESS 0x0 121#define BA_RESULT_TIMEOUT 0x2 122 123#define IS_BASTREAM_SETUP(ptr) (ptr->ba_status) 124 125#define BA_STREAM_NOT_ALLOWED 0xff 126 127#define IS_11N_ENABLED(priv) ((priv->adapter->config_bands & BAND_GN || \ 128 priv->adapter->config_bands & BAND_AN) && \ 129 priv->curr_bss_params.bss_descriptor.bcn_ht_cap) 130#define INITIATOR_BIT(DelBAParamSet) (((DelBAParamSet) &\ 131 BIT(DELBA_INITIATOR_POS)) >> DELBA_INITIATOR_POS) 132 133#define MWIFIEX_TX_DATA_BUF_SIZE_4K 4096 134#define MWIFIEX_TX_DATA_BUF_SIZE_8K 8192 135 136#define ISSUPP_11NENABLED(FwCapInfo) (FwCapInfo & BIT(11)) 137 138/* dev_cap bitmap 139 * BIT 140 * 0-16 reserved 141 * 17 IEEE80211_HT_CAP_SUP_WIDTH_20_40 142 * 18-22 reserved 143 * 23 IEEE80211_HT_CAP_SGI_20 144 * 24 IEEE80211_HT_CAP_SGI_40 145 * 25 IEEE80211_HT_CAP_TX_STBC 146 * 26 IEEE80211_HT_CAP_RX_STBC 147 * 27-28 reserved 148 * 29 IEEE80211_HT_CAP_GRN_FLD 149 * 30-31 reserved 150 */ 151#define ISSUPP_CHANWIDTH40(Dot11nDevCap) (Dot11nDevCap & BIT(17)) 152#define ISSUPP_SHORTGI20(Dot11nDevCap) (Dot11nDevCap & BIT(23)) 153#define ISSUPP_SHORTGI40(Dot11nDevCap) (Dot11nDevCap & BIT(24)) 154#define ISSUPP_TXSTBC(Dot11nDevCap) (Dot11nDevCap & BIT(25)) 155#define ISSUPP_RXSTBC(Dot11nDevCap) (Dot11nDevCap & BIT(26)) 156#define ISSUPP_GREENFIELD(Dot11nDevCap) (Dot11nDevCap & BIT(29)) 157 158/* httxcfg bitmap 159 * 0 reserved 160 * 1 20/40 Mhz enable(1)/disable(0) 161 * 2-3 reserved 162 * 4 green field enable(1)/disable(0) 163 * 5 short GI in 20 Mhz enable(1)/disable(0) 164 * 6 short GI in 40 Mhz enable(1)/disable(0) 165 * 7-15 reserved 166 */ 167#define MWIFIEX_FW_DEF_HTTXCFG (BIT(1) | BIT(4) | BIT(5) | BIT(6)) 168 169#define GET_RXMCSSUPP(DevMCSSupported) (DevMCSSupported & 0x0f) 170#define SETHT_MCS32(x) (x[4] |= 1) 171#define HT_STREAM_2X2 0x22 172 173#define SET_SECONDARYCHAN(RadioType, SECCHAN) (RadioType |= (SECCHAN << 4)) 174 175#define LLC_SNAP_LEN 8 176 177#define MOD_CLASS_HR_DSSS 0x03 178#define MOD_CLASS_OFDM 0x07 179#define MOD_CLASS_HT 0x08 180#define HT_BW_20 0 181#define HT_BW_40 1 182 183#define HostCmd_CMD_GET_HW_SPEC 0x0003 184#define HostCmd_CMD_802_11_SCAN 0x0006 185#define HostCmd_CMD_802_11_GET_LOG 0x000b 186#define HostCmd_CMD_MAC_MULTICAST_ADR 0x0010 187#define HostCmd_CMD_802_11_EEPROM_ACCESS 0x0059 188#define HostCmd_CMD_802_11_ASSOCIATE 0x0012 189#define HostCmd_CMD_802_11_SNMP_MIB 0x0016 190#define HostCmd_CMD_MAC_REG_ACCESS 0x0019 191#define HostCmd_CMD_BBP_REG_ACCESS 0x001a 192#define HostCmd_CMD_RF_REG_ACCESS 0x001b 193#define HostCmd_CMD_PMIC_REG_ACCESS 0x00ad 194#define HostCmd_CMD_802_11_RF_CHANNEL 0x001d 195#define HostCmd_CMD_802_11_DEAUTHENTICATE 0x0024 196#define HostCmd_CMD_MAC_CONTROL 0x0028 197#define HostCmd_CMD_802_11_AD_HOC_START 0x002b 198#define HostCmd_CMD_802_11_AD_HOC_JOIN 0x002c 199#define HostCmd_CMD_802_11_AD_HOC_STOP 0x0040 200#define HostCmd_CMD_802_11_MAC_ADDRESS 0x004D 201#define HostCmd_CMD_802_11D_DOMAIN_INFO 0x005b 202#define HostCmd_CMD_802_11_KEY_MATERIAL 0x005e 203#define HostCmd_CMD_802_11_BG_SCAN_QUERY 0x006c 204#define HostCmd_CMD_WMM_GET_STATUS 0x0071 205#define HostCmd_CMD_802_11_SUBSCRIBE_EVENT 0x0075 206#define HostCmd_CMD_802_11_TX_RATE_QUERY 0x007f 207#define HostCmd_CMD_802_11_IBSS_COALESCING_STATUS 0x0083 208#define HostCmd_CMD_VERSION_EXT 0x0097 209#define HostCmd_CMD_RSSI_INFO 0x00a4 210#define HostCmd_CMD_FUNC_INIT 0x00a9 211#define HostCmd_CMD_FUNC_SHUTDOWN 0x00aa 212#define HostCmd_CMD_11N_CFG 0x00cd 213#define HostCmd_CMD_11N_ADDBA_REQ 0x00ce 214#define HostCmd_CMD_11N_ADDBA_RSP 0x00cf 215#define HostCmd_CMD_11N_DELBA 0x00d0 216#define HostCmd_CMD_RECONFIGURE_TX_BUFF 0x00d9 217#define HostCmd_CMD_AMSDU_AGGR_CTRL 0x00df 218#define HostCmd_CMD_TXPWR_CFG 0x00d1 219#define HostCmd_CMD_TX_RATE_CFG 0x00d6 220#define HostCmd_CMD_802_11_PS_MODE_ENH 0x00e4 221#define HostCmd_CMD_802_11_HS_CFG_ENH 0x00e5 222#define HostCmd_CMD_CAU_REG_ACCESS 0x00ed 223#define HostCmd_CMD_SET_BSS_MODE 0x00f7 224#define HostCmd_CMD_PCIE_DESC_DETAILS 0x00fa 225 226enum ENH_PS_MODES { 227 EN_PS = 1, 228 DIS_PS = 2, 229 EN_AUTO_DS = 3, 230 DIS_AUTO_DS = 4, 231 SLEEP_CONFIRM = 5, 232 GET_PS = 0, 233 EN_AUTO_PS = 0xff, 234 DIS_AUTO_PS = 0xfe, 235}; 236 237#define HostCmd_RET_BIT 0x8000 238#define HostCmd_ACT_GEN_GET 0x0000 239#define HostCmd_ACT_GEN_SET 0x0001 240#define HostCmd_ACT_BITWISE_SET 0x0002 241#define HostCmd_ACT_BITWISE_CLR 0x0003 242#define HostCmd_RESULT_OK 0x0000 243 244#define HostCmd_ACT_MAC_RX_ON 0x0001 245#define HostCmd_ACT_MAC_TX_ON 0x0002 246#define HostCmd_ACT_MAC_WEP_ENABLE 0x0008 247#define HostCmd_ACT_MAC_ETHERNETII_ENABLE 0x0010 248#define HostCmd_ACT_MAC_PROMISCUOUS_ENABLE 0x0080 249#define HostCmd_ACT_MAC_ALL_MULTICAST_ENABLE 0x0100 250#define HostCmd_ACT_MAC_ADHOC_G_PROTECTION_ON 0x2000 251 252#define HostCmd_BSS_MODE_IBSS 0x0002 253#define HostCmd_BSS_MODE_ANY 0x0003 254 255#define HostCmd_SCAN_RADIO_TYPE_BG 0 256#define HostCmd_SCAN_RADIO_TYPE_A 1 257 258#define HOST_SLEEP_CFG_CANCEL 0xffffffff 259#define HOST_SLEEP_CFG_COND_DEF 0x0000000f 260#define HOST_SLEEP_CFG_GPIO_DEF 0xff 261#define HOST_SLEEP_CFG_GAP_DEF 0 262 263#define CMD_F_HOSTCMD (1 << 0) 264#define CMD_F_CANCELED (1 << 1) 265 266#define HostCmd_CMD_ID_MASK 0x0fff 267 268#define HostCmd_SEQ_NUM_MASK 0x00ff 269 270#define HostCmd_BSS_NUM_MASK 0x0f00 271 272#define HostCmd_BSS_TYPE_MASK 0xf000 273 274#define HostCmd_SET_SEQ_NO_BSS_INFO(seq, num, type) { \ 275 (((seq) & 0x00ff) | \ 276 (((num) & 0x000f) << 8)) | \ 277 (((type) & 0x000f) << 12); } 278 279#define HostCmd_GET_SEQ_NO(seq) \ 280 ((seq) & HostCmd_SEQ_NUM_MASK) 281 282#define HostCmd_GET_BSS_NO(seq) \ 283 (((seq) & HostCmd_BSS_NUM_MASK) >> 8) 284 285#define HostCmd_GET_BSS_TYPE(seq) \ 286 (((seq) & HostCmd_BSS_TYPE_MASK) >> 12) 287 288#define EVENT_DUMMY_HOST_WAKEUP_SIGNAL 0x00000001 289#define EVENT_LINK_LOST 0x00000003 290#define EVENT_LINK_SENSED 0x00000004 291#define EVENT_MIB_CHANGED 0x00000006 292#define EVENT_INIT_DONE 0x00000007 293#define EVENT_DEAUTHENTICATED 0x00000008 294#define EVENT_DISASSOCIATED 0x00000009 295#define EVENT_PS_AWAKE 0x0000000a 296#define EVENT_PS_SLEEP 0x0000000b 297#define EVENT_MIC_ERR_MULTICAST 0x0000000d 298#define EVENT_MIC_ERR_UNICAST 0x0000000e 299#define EVENT_DEEP_SLEEP_AWAKE 0x00000010 300#define EVENT_ADHOC_BCN_LOST 0x00000011 301 302#define EVENT_WMM_STATUS_CHANGE 0x00000017 303#define EVENT_BG_SCAN_REPORT 0x00000018 304#define EVENT_RSSI_LOW 0x00000019 305#define EVENT_SNR_LOW 0x0000001a 306#define EVENT_MAX_FAIL 0x0000001b 307#define EVENT_RSSI_HIGH 0x0000001c 308#define EVENT_SNR_HIGH 0x0000001d 309#define EVENT_IBSS_COALESCED 0x0000001e 310#define EVENT_DATA_RSSI_LOW 0x00000024 311#define EVENT_DATA_SNR_LOW 0x00000025 312#define EVENT_DATA_RSSI_HIGH 0x00000026 313#define EVENT_DATA_SNR_HIGH 0x00000027 314#define EVENT_LINK_QUALITY 0x00000028 315#define EVENT_PORT_RELEASE 0x0000002b 316#define EVENT_PRE_BEACON_LOST 0x00000031 317#define EVENT_ADDBA 0x00000033 318#define EVENT_DELBA 0x00000034 319#define EVENT_BA_STREAM_TIEMOUT 0x00000037 320#define EVENT_AMSDU_AGGR_CTRL 0x00000042 321#define EVENT_WEP_ICV_ERR 0x00000046 322#define EVENT_HS_ACT_REQ 0x00000047 323#define EVENT_BW_CHANGE 0x00000048 324 325#define EVENT_HOSTWAKE_STAIE 0x0000004d 326 327#define EVENT_ID_MASK 0xffff 328#define BSS_NUM_MASK 0xf 329 330#define EVENT_GET_BSS_NUM(event_cause) \ 331 (((event_cause) >> 16) & BSS_NUM_MASK) 332 333#define EVENT_GET_BSS_TYPE(event_cause) \ 334 (((event_cause) >> 24) & 0x00ff) 335 336struct mwifiex_ie_types_header { 337 __le16 type; 338 __le16 len; 339} __packed; 340 341struct mwifiex_ie_types_data { 342 struct mwifiex_ie_types_header header; 343 u8 data[1]; 344} __packed; 345 346#define MWIFIEX_TxPD_POWER_MGMT_NULL_PACKET 0x01 347#define MWIFIEX_TxPD_POWER_MGMT_LAST_PACKET 0x08 348 349struct txpd { 350 u8 bss_type; 351 u8 bss_num; 352 __le16 tx_pkt_length; 353 __le16 tx_pkt_offset; 354 __le16 tx_pkt_type; 355 __le32 tx_control; 356 u8 priority; 357 u8 flags; 358 u8 pkt_delay_2ms; 359 u8 reserved1; 360} __packed; 361 362struct rxpd { 363 u8 bss_type; 364 u8 bss_num; 365 u16 rx_pkt_length; 366 u16 rx_pkt_offset; 367 u16 rx_pkt_type; 368 u16 seq_num; 369 u8 priority; 370 u8 rx_rate; 371 s8 snr; 372 s8 nf; 373 /* Ht Info [Bit 0] RxRate format: LG=0, HT=1 374 * [Bit 1] HT Bandwidth: BW20 = 0, BW40 = 1 375 * [Bit 2] HT Guard Interval: LGI = 0, SGI = 1 */ 376 u8 ht_info; 377 u8 reserved; 378} __packed; 379 380enum mwifiex_chan_scan_mode_bitmasks { 381 MWIFIEX_PASSIVE_SCAN = BIT(0), 382 MWIFIEX_DISABLE_CHAN_FILT = BIT(1), 383}; 384 385struct mwifiex_chan_scan_param_set { 386 u8 radio_type; 387 u8 chan_number; 388 u8 chan_scan_mode_bitmap; 389 __le16 min_scan_time; 390 __le16 max_scan_time; 391} __packed; 392 393struct mwifiex_ie_types_chan_list_param_set { 394 struct mwifiex_ie_types_header header; 395 struct mwifiex_chan_scan_param_set chan_scan_param[1]; 396} __packed; 397 398struct chan_band_param_set { 399 u8 radio_type; 400 u8 chan_number; 401}; 402 403struct mwifiex_ie_types_chan_band_list_param_set { 404 struct mwifiex_ie_types_header header; 405 struct chan_band_param_set chan_band_param[1]; 406} __packed; 407 408struct mwifiex_ie_types_rates_param_set { 409 struct mwifiex_ie_types_header header; 410 u8 rates[1]; 411} __packed; 412 413struct mwifiex_ie_types_ssid_param_set { 414 struct mwifiex_ie_types_header header; 415 u8 ssid[1]; 416} __packed; 417 418struct mwifiex_ie_types_num_probes { 419 struct mwifiex_ie_types_header header; 420 __le16 num_probes; 421} __packed; 422 423struct mwifiex_ie_types_wildcard_ssid_params { 424 struct mwifiex_ie_types_header header; 425 u8 max_ssid_length; 426 u8 ssid[1]; 427} __packed; 428 429#define TSF_DATA_SIZE 8 430struct mwifiex_ie_types_tsf_timestamp { 431 struct mwifiex_ie_types_header header; 432 u8 tsf_data[1]; 433} __packed; 434 435struct mwifiex_cf_param_set { 436 u8 cfp_cnt; 437 u8 cfp_period; 438 u16 cfp_max_duration; 439 u16 cfp_duration_remaining; 440} __packed; 441 442struct mwifiex_ibss_param_set { 443 u16 atim_window; 444} __packed; 445 446struct mwifiex_ie_types_ss_param_set { 447 struct mwifiex_ie_types_header header; 448 union { 449 struct mwifiex_cf_param_set cf_param_set[1]; 450 struct mwifiex_ibss_param_set ibss_param_set[1]; 451 } cf_ibss; 452} __packed; 453 454struct mwifiex_fh_param_set { 455 u16 dwell_time; 456 u8 hop_set; 457 u8 hop_pattern; 458 u8 hop_index; 459} __packed; 460 461struct mwifiex_ds_param_set { 462 u8 current_chan; 463} __packed; 464 465struct mwifiex_ie_types_phy_param_set { 466 struct mwifiex_ie_types_header header; 467 union { 468 struct mwifiex_fh_param_set fh_param_set[1]; 469 struct mwifiex_ds_param_set ds_param_set[1]; 470 } fh_ds; 471} __packed; 472 473struct mwifiex_ie_types_auth_type { 474 struct mwifiex_ie_types_header header; 475 __le16 auth_type; 476} __packed; 477 478struct mwifiex_ie_types_vendor_param_set { 479 struct mwifiex_ie_types_header header; 480 u8 ie[MWIFIEX_MAX_VSIE_LEN]; 481}; 482 483struct mwifiex_ie_types_rsn_param_set { 484 struct mwifiex_ie_types_header header; 485 u8 rsn_ie[1]; 486} __packed; 487 488#define KEYPARAMSET_FIXED_LEN 6 489 490struct mwifiex_ie_type_key_param_set { 491 __le16 type; 492 __le16 length; 493 __le16 key_type_id; 494 __le16 key_info; 495 __le16 key_len; 496 u8 key[50]; 497} __packed; 498 499struct host_cmd_ds_802_11_key_material { 500 __le16 action; 501 struct mwifiex_ie_type_key_param_set key_param_set; 502} __packed; 503 504struct host_cmd_ds_gen { 505 u16 command; 506 u16 size; 507 u16 seq_num; 508 u16 result; 509}; 510 511#define S_DS_GEN sizeof(struct host_cmd_ds_gen) 512 513enum sleep_resp_ctrl { 514 RESP_NOT_NEEDED = 0, 515 RESP_NEEDED, 516}; 517 518struct mwifiex_ps_param { 519 __le16 null_pkt_interval; 520 __le16 multiple_dtims; 521 __le16 bcn_miss_timeout; 522 __le16 local_listen_interval; 523 __le16 adhoc_wake_period; 524 __le16 mode; 525 __le16 delay_to_ps; 526}; 527 528#define BITMAP_AUTO_DS 0x01 529#define BITMAP_STA_PS 0x10 530 531struct mwifiex_ie_types_auto_ds_param { 532 struct mwifiex_ie_types_header header; 533 __le16 deep_sleep_timeout; 534} __packed; 535 536struct mwifiex_ie_types_ps_param { 537 struct mwifiex_ie_types_header header; 538 struct mwifiex_ps_param param; 539} __packed; 540 541struct host_cmd_ds_802_11_ps_mode_enh { 542 __le16 action; 543 544 union { 545 struct mwifiex_ps_param opt_ps; 546 __le16 ps_bitmap; 547 } params; 548} __packed; 549 550struct host_cmd_ds_get_hw_spec { 551 __le16 hw_if_version; 552 __le16 version; 553 __le16 reserved; 554 __le16 num_of_mcast_adr; 555 u8 permanent_addr[ETH_ALEN]; 556 __le16 region_code; 557 __le16 number_of_antenna; 558 __le32 fw_release_number; 559 __le32 reserved_1; 560 __le32 reserved_2; 561 __le32 reserved_3; 562 __le32 fw_cap_info; 563 __le32 dot_11n_dev_cap; 564 u8 dev_mcs_support; 565 __le16 mp_end_port; /* SDIO only, reserved for other interfacces */ 566 __le16 reserved_4; 567} __packed; 568 569struct host_cmd_ds_802_11_rssi_info { 570 __le16 action; 571 __le16 ndata; 572 __le16 nbcn; 573 __le16 reserved[9]; 574 long long reserved_1; 575}; 576 577struct host_cmd_ds_802_11_rssi_info_rsp { 578 __le16 action; 579 __le16 ndata; 580 __le16 nbcn; 581 __le16 data_rssi_last; 582 __le16 data_nf_last; 583 __le16 data_rssi_avg; 584 __le16 data_nf_avg; 585 __le16 bcn_rssi_last; 586 __le16 bcn_nf_last; 587 __le16 bcn_rssi_avg; 588 __le16 bcn_nf_avg; 589 long long tsf_bcn; 590}; 591 592struct host_cmd_ds_802_11_mac_address { 593 __le16 action; 594 u8 mac_addr[ETH_ALEN]; 595}; 596 597struct host_cmd_ds_mac_control { 598 __le16 action; 599 __le16 reserved; 600}; 601 602struct host_cmd_ds_mac_multicast_adr { 603 __le16 action; 604 __le16 num_of_adrs; 605 u8 mac_list[MWIFIEX_MAX_MULTICAST_LIST_SIZE][ETH_ALEN]; 606} __packed; 607 608struct host_cmd_ds_802_11_deauthenticate { 609 u8 mac_addr[ETH_ALEN]; 610 __le16 reason_code; 611} __packed; 612 613struct host_cmd_ds_802_11_associate { 614 u8 peer_sta_addr[ETH_ALEN]; 615 __le16 cap_info_bitmap; 616 __le16 listen_interval; 617 __le16 beacon_period; 618 u8 dtim_period; 619} __packed; 620 621struct ieee_types_assoc_rsp { 622 __le16 cap_info_bitmap; 623 __le16 status_code; 624 __le16 a_id; 625 u8 ie_buffer[1]; 626} __packed; 627 628struct host_cmd_ds_802_11_associate_rsp { 629 struct ieee_types_assoc_rsp assoc_rsp; 630} __packed; 631 632struct ieee_types_cf_param_set { 633 u8 element_id; 634 u8 len; 635 u8 cfp_cnt; 636 u8 cfp_period; 637 u16 cfp_max_duration; 638 u16 cfp_duration_remaining; 639} __packed; 640 641struct ieee_types_ibss_param_set { 642 u8 element_id; 643 u8 len; 644 __le16 atim_window; 645} __packed; 646 647union ieee_types_ss_param_set { 648 struct ieee_types_cf_param_set cf_param_set; 649 struct ieee_types_ibss_param_set ibss_param_set; 650} __packed; 651 652struct ieee_types_fh_param_set { 653 u8 element_id; 654 u8 len; 655 __le16 dwell_time; 656 u8 hop_set; 657 u8 hop_pattern; 658 u8 hop_index; 659} __packed; 660 661struct ieee_types_ds_param_set { 662 u8 element_id; 663 u8 len; 664 u8 current_chan; 665} __packed; 666 667union ieee_types_phy_param_set { 668 struct ieee_types_fh_param_set fh_param_set; 669 struct ieee_types_ds_param_set ds_param_set; 670} __packed; 671 672struct host_cmd_ds_802_11_ad_hoc_start { 673 u8 ssid[IEEE80211_MAX_SSID_LEN]; 674 u8 bss_mode; 675 __le16 beacon_period; 676 u8 dtim_period; 677 union ieee_types_ss_param_set ss_param_set; 678 union ieee_types_phy_param_set phy_param_set; 679 u16 reserved1; 680 __le16 cap_info_bitmap; 681 u8 data_rate[HOSTCMD_SUPPORTED_RATES]; 682} __packed; 683 684struct host_cmd_ds_802_11_ad_hoc_result { 685 u8 pad[3]; 686 u8 bssid[ETH_ALEN]; 687} __packed; 688 689struct adhoc_bss_desc { 690 u8 bssid[ETH_ALEN]; 691 u8 ssid[IEEE80211_MAX_SSID_LEN]; 692 u8 bss_mode; 693 __le16 beacon_period; 694 u8 dtim_period; 695 u8 time_stamp[8]; 696 u8 local_time[8]; 697 union ieee_types_phy_param_set phy_param_set; 698 union ieee_types_ss_param_set ss_param_set; 699 __le16 cap_info_bitmap; 700 u8 data_rates[HOSTCMD_SUPPORTED_RATES]; 701 702 /* 703 * DO NOT ADD ANY FIELDS TO THIS STRUCTURE. 704 * It is used in the Adhoc join command and will cause a 705 * binary layout mismatch with the firmware 706 */ 707} __packed; 708 709struct host_cmd_ds_802_11_ad_hoc_join { 710 struct adhoc_bss_desc bss_descriptor; 711 u16 reserved1; 712 u16 reserved2; 713} __packed; 714 715struct host_cmd_ds_802_11_get_log { 716 __le32 mcast_tx_frame; 717 __le32 failed; 718 __le32 retry; 719 __le32 multi_retry; 720 __le32 frame_dup; 721 __le32 rts_success; 722 __le32 rts_failure; 723 __le32 ack_failure; 724 __le32 rx_frag; 725 __le32 mcast_rx_frame; 726 __le32 fcs_error; 727 __le32 tx_frame; 728 __le32 reserved; 729 __le32 wep_icv_err_cnt[4]; 730}; 731 732struct host_cmd_ds_tx_rate_query { 733 u8 tx_rate; 734 /* Ht Info [Bit 0] RxRate format: LG=0, HT=1 735 * [Bit 1] HT Bandwidth: BW20 = 0, BW40 = 1 736 * [Bit 2] HT Guard Interval: LGI = 0, SGI = 1 */ 737 u8 ht_info; 738} __packed; 739 740enum Host_Sleep_Action { 741 HS_CONFIGURE = 0x0001, 742 HS_ACTIVATE = 0x0002, 743}; 744 745struct mwifiex_hs_config_param { 746 __le32 conditions; 747 u8 gpio; 748 u8 gap; 749} __packed; 750 751struct hs_activate_param { 752 u16 resp_ctrl; 753} __packed; 754 755struct host_cmd_ds_802_11_hs_cfg_enh { 756 __le16 action; 757 758 union { 759 struct mwifiex_hs_config_param hs_config; 760 struct hs_activate_param hs_activate; 761 } params; 762} __packed; 763 764enum SNMP_MIB_INDEX { 765 OP_RATE_SET_I = 1, 766 DTIM_PERIOD_I = 3, 767 RTS_THRESH_I = 5, 768 SHORT_RETRY_LIM_I = 6, 769 LONG_RETRY_LIM_I = 7, 770 FRAG_THRESH_I = 8, 771 DOT11D_I = 9, 772}; 773 774#define MAX_SNMP_BUF_SIZE 128 775 776struct host_cmd_ds_802_11_snmp_mib { 777 __le16 query_type; 778 __le16 oid; 779 __le16 buf_size; 780 u8 value[1]; 781} __packed; 782 783struct mwifiex_rate_scope { 784 __le16 type; 785 __le16 length; 786 __le16 hr_dsss_rate_bitmap; 787 __le16 ofdm_rate_bitmap; 788 __le16 ht_mcs_rate_bitmap[8]; 789} __packed; 790 791struct mwifiex_rate_drop_pattern { 792 __le16 type; 793 __le16 length; 794 __le32 rate_drop_mode; 795} __packed; 796 797struct host_cmd_ds_tx_rate_cfg { 798 __le16 action; 799 __le16 cfg_index; 800} __packed; 801 802struct mwifiex_power_group { 803 u8 modulation_class; 804 u8 first_rate_code; 805 u8 last_rate_code; 806 s8 power_step; 807 s8 power_min; 808 s8 power_max; 809 u8 ht_bandwidth; 810 u8 reserved; 811} __packed; 812 813struct mwifiex_types_power_group { 814 u16 type; 815 u16 length; 816} __packed; 817 818struct host_cmd_ds_txpwr_cfg { 819 __le16 action; 820 __le16 cfg_index; 821 __le32 mode; 822} __packed; 823 824struct mwifiex_bcn_param { 825 u8 bssid[ETH_ALEN]; 826 u8 rssi; 827 __le64 timestamp; 828 __le16 beacon_period; 829 __le16 cap_info_bitmap; 830} __packed; 831 832#define MWIFIEX_USER_SCAN_CHAN_MAX 50 833 834#define MWIFIEX_MAX_SSID_LIST_LENGTH 10 835 836struct mwifiex_scan_cmd_config { 837 /* 838 * BSS mode to be sent in the firmware command 839 */ 840 u8 bss_mode; 841 842 /* Specific BSSID used to filter scan results in the firmware */ 843 u8 specific_bssid[ETH_ALEN]; 844 845 /* Length of TLVs sent in command starting at tlvBuffer */ 846 u32 tlv_buf_len; 847 848 /* 849 * SSID TLV(s) and ChanList TLVs to be sent in the firmware command 850 * 851 * TLV_TYPE_CHANLIST, mwifiex_ie_types_chan_list_param_set 852 * WLAN_EID_SSID, mwifiex_ie_types_ssid_param_set 853 */ 854 u8 tlv_buf[1]; /* SSID TLV(s) and ChanList TLVs are stored 855 here */ 856} __packed; 857 858struct mwifiex_user_scan_chan { 859 u8 chan_number; 860 u8 radio_type; 861 u8 scan_type; 862 u8 reserved; 863 u32 scan_time; 864} __packed; 865 866struct mwifiex_user_scan_cfg { 867 /* 868 * BSS mode to be sent in the firmware command 869 */ 870 u8 bss_mode; 871 /* Configure the number of probe requests for active chan scans */ 872 u8 num_probes; 873 u8 reserved; 874 /* BSSID filter sent in the firmware command to limit the results */ 875 u8 specific_bssid[ETH_ALEN]; 876 /* SSID filter list used in the firmware to limit the scan results */ 877 struct cfg80211_ssid *ssid_list; 878 u8 num_ssids; 879 /* Variable number (fixed maximum) of channels to scan up */ 880 struct mwifiex_user_scan_chan chan_list[MWIFIEX_USER_SCAN_CHAN_MAX]; 881} __packed; 882 883struct ie_body { 884 u8 grp_key_oui[4]; 885 u8 ptk_cnt[2]; 886 u8 ptk_body[4]; 887} __packed; 888 889struct host_cmd_ds_802_11_scan { 890 u8 bss_mode; 891 u8 bssid[ETH_ALEN]; 892 u8 tlv_buffer[1]; 893} __packed; 894 895struct host_cmd_ds_802_11_scan_rsp { 896 __le16 bss_descript_size; 897 u8 number_of_sets; 898 u8 bss_desc_and_tlv_buffer[1]; 899} __packed; 900 901struct host_cmd_ds_802_11_bg_scan_query { 902 u8 flush; 903} __packed; 904 905struct host_cmd_ds_802_11_bg_scan_query_rsp { 906 u32 report_condition; 907 struct host_cmd_ds_802_11_scan_rsp scan_resp; 908} __packed; 909 910struct mwifiex_ietypes_domain_param_set { 911 struct mwifiex_ie_types_header header; 912 u8 country_code[IEEE80211_COUNTRY_STRING_LEN]; 913 struct ieee80211_country_ie_triplet triplet[1]; 914} __packed; 915 916struct host_cmd_ds_802_11d_domain_info { 917 __le16 action; 918 struct mwifiex_ietypes_domain_param_set domain; 919} __packed; 920 921struct host_cmd_ds_802_11d_domain_info_rsp { 922 __le16 action; 923 struct mwifiex_ietypes_domain_param_set domain; 924} __packed; 925 926struct host_cmd_ds_11n_addba_req { 927 u8 add_req_result; 928 u8 peer_mac_addr[ETH_ALEN]; 929 u8 dialog_token; 930 __le16 block_ack_param_set; 931 __le16 block_ack_tmo; 932 __le16 ssn; 933} __packed; 934 935struct host_cmd_ds_11n_addba_rsp { 936 u8 add_rsp_result; 937 u8 peer_mac_addr[ETH_ALEN]; 938 u8 dialog_token; 939 __le16 status_code; 940 __le16 block_ack_param_set; 941 __le16 block_ack_tmo; 942 __le16 ssn; 943} __packed; 944 945struct host_cmd_ds_11n_delba { 946 u8 del_result; 947 u8 peer_mac_addr[ETH_ALEN]; 948 __le16 del_ba_param_set; 949 __le16 reason_code; 950 u8 reserved; 951} __packed; 952 953struct host_cmd_ds_11n_batimeout { 954 u8 tid; 955 u8 peer_mac_addr[ETH_ALEN]; 956 u8 origninator; 957} __packed; 958 959struct host_cmd_ds_11n_cfg { 960 __le16 action; 961 __le16 ht_tx_cap; 962 __le16 ht_tx_info; 963} __packed; 964 965struct host_cmd_ds_txbuf_cfg { 966 __le16 action; 967 __le16 buff_size; 968 __le16 mp_end_port; /* SDIO only, reserved for other interfacces */ 969 __le16 reserved3; 970} __packed; 971 972struct host_cmd_ds_amsdu_aggr_ctrl { 973 __le16 action; 974 __le16 enable; 975 __le16 curr_buf_size; 976} __packed; 977 978struct mwifiex_ie_types_wmm_param_set { 979 struct mwifiex_ie_types_header header; 980 u8 wmm_ie[1]; 981}; 982 983struct mwifiex_ie_types_wmm_queue_status { 984 struct mwifiex_ie_types_header header; 985 u8 queue_index; 986 u8 disabled; 987 u16 medium_time; 988 u8 flow_required; 989 u8 flow_created; 990 u32 reserved; 991}; 992 993struct ieee_types_vendor_header { 994 u8 element_id; 995 u8 len; 996 u8 oui[4]; /* 0~2: oui, 3: oui_type */ 997 u8 oui_subtype; 998 u8 version; 999} __packed; 1000 1001struct ieee_types_wmm_ac_parameters { 1002 u8 aci_aifsn_bitmap; 1003 u8 ecw_bitmap; 1004 __le16 tx_op_limit; 1005} __packed; 1006 1007struct ieee_types_wmm_parameter { 1008 /* 1009 * WMM Parameter IE - Vendor Specific Header: 1010 * element_id [221/0xdd] 1011 * Len [24] 1012 * Oui [00:50:f2] 1013 * OuiType [2] 1014 * OuiSubType [1] 1015 * Version [1] 1016 */ 1017 struct ieee_types_vendor_header vend_hdr; 1018 u8 qos_info_bitmap; 1019 u8 reserved; 1020 struct ieee_types_wmm_ac_parameters ac_params[IEEE80211_NUM_ACS]; 1021} __packed; 1022 1023struct ieee_types_wmm_info { 1024 1025 /* 1026 * WMM Info IE - Vendor Specific Header: 1027 * element_id [221/0xdd] 1028 * Len [7] 1029 * Oui [00:50:f2] 1030 * OuiType [2] 1031 * OuiSubType [0] 1032 * Version [1] 1033 */ 1034 struct ieee_types_vendor_header vend_hdr; 1035 1036 u8 qos_info_bitmap; 1037} __packed; 1038 1039struct host_cmd_ds_wmm_get_status { 1040 u8 queue_status_tlv[sizeof(struct mwifiex_ie_types_wmm_queue_status) * 1041 IEEE80211_NUM_ACS]; 1042 u8 wmm_param_tlv[sizeof(struct ieee_types_wmm_parameter) + 2]; 1043} __packed; 1044 1045struct mwifiex_wmm_ac_status { 1046 u8 disabled; 1047 u8 flow_required; 1048 u8 flow_created; 1049}; 1050 1051struct mwifiex_ie_types_htcap { 1052 struct mwifiex_ie_types_header header; 1053 struct ieee80211_ht_cap ht_cap; 1054} __packed; 1055 1056struct mwifiex_ie_types_htinfo { 1057 struct mwifiex_ie_types_header header; 1058 struct ieee80211_ht_operation ht_oper; 1059} __packed; 1060 1061struct mwifiex_ie_types_2040bssco { 1062 struct mwifiex_ie_types_header header; 1063 u8 bss_co_2040; 1064} __packed; 1065 1066struct mwifiex_ie_types_extcap { 1067 struct mwifiex_ie_types_header header; 1068 u8 ext_cap; 1069} __packed; 1070 1071struct host_cmd_ds_mac_reg_access { 1072 __le16 action; 1073 __le16 offset; 1074 __le32 value; 1075} __packed; 1076 1077struct host_cmd_ds_bbp_reg_access { 1078 __le16 action; 1079 __le16 offset; 1080 u8 value; 1081 u8 reserved[3]; 1082} __packed; 1083 1084struct host_cmd_ds_rf_reg_access { 1085 __le16 action; 1086 __le16 offset; 1087 u8 value; 1088 u8 reserved[3]; 1089} __packed; 1090 1091struct host_cmd_ds_pmic_reg_access { 1092 __le16 action; 1093 __le16 offset; 1094 u8 value; 1095 u8 reserved[3]; 1096} __packed; 1097 1098struct host_cmd_ds_802_11_eeprom_access { 1099 __le16 action; 1100 1101 __le16 offset; 1102 __le16 byte_count; 1103 u8 value; 1104} __packed; 1105 1106struct host_cmd_ds_802_11_rf_channel { 1107 __le16 action; 1108 __le16 current_channel; 1109 __le16 rf_type; 1110 __le16 reserved; 1111 u8 reserved_1[32]; 1112} __packed; 1113 1114struct host_cmd_ds_version_ext { 1115 u8 version_str_sel; 1116 char version_str[128]; 1117} __packed; 1118 1119struct host_cmd_ds_802_11_ibss_status { 1120 __le16 action; 1121 __le16 enable; 1122 u8 bssid[ETH_ALEN]; 1123 __le16 beacon_interval; 1124 __le16 atim_window; 1125 __le16 use_g_rate_protect; 1126} __packed; 1127 1128#define CONNECTION_TYPE_INFRA 0 1129#define CONNECTION_TYPE_ADHOC 1 1130 1131struct host_cmd_ds_set_bss_mode { 1132 u8 con_type; 1133} __packed; 1134 1135struct host_cmd_ds_pcie_details { 1136 /* TX buffer descriptor ring address */ 1137 u32 txbd_addr_lo; 1138 u32 txbd_addr_hi; 1139 /* TX buffer descriptor ring count */ 1140 u32 txbd_count; 1141 1142 /* RX buffer descriptor ring address */ 1143 u32 rxbd_addr_lo; 1144 u32 rxbd_addr_hi; 1145 /* RX buffer descriptor ring count */ 1146 u32 rxbd_count; 1147 1148 /* Event buffer descriptor ring address */ 1149 u32 evtbd_addr_lo; 1150 u32 evtbd_addr_hi; 1151 /* Event buffer descriptor ring count */ 1152 u32 evtbd_count; 1153 1154 /* Sleep cookie buffer physical address */ 1155 u32 sleep_cookie_addr_lo; 1156 u32 sleep_cookie_addr_hi; 1157} __packed; 1158 1159struct mwifiex_ie_types_rssi_threshold { 1160 struct mwifiex_ie_types_header header; 1161 u8 abs_value; 1162 u8 evt_freq; 1163} __packed; 1164 1165struct host_cmd_ds_802_11_subsc_evt { 1166 __le16 action; 1167 __le16 events; 1168} __packed; 1169 1170struct host_cmd_ds_command { 1171 __le16 command; 1172 __le16 size; 1173 __le16 seq_num; 1174 __le16 result; 1175 union { 1176 struct host_cmd_ds_get_hw_spec hw_spec; 1177 struct host_cmd_ds_mac_control mac_ctrl; 1178 struct host_cmd_ds_802_11_mac_address mac_addr; 1179 struct host_cmd_ds_mac_multicast_adr mc_addr; 1180 struct host_cmd_ds_802_11_get_log get_log; 1181 struct host_cmd_ds_802_11_rssi_info rssi_info; 1182 struct host_cmd_ds_802_11_rssi_info_rsp rssi_info_rsp; 1183 struct host_cmd_ds_802_11_snmp_mib smib; 1184 struct host_cmd_ds_802_11_rf_channel rf_channel; 1185 struct host_cmd_ds_tx_rate_query tx_rate; 1186 struct host_cmd_ds_tx_rate_cfg tx_rate_cfg; 1187 struct host_cmd_ds_txpwr_cfg txp_cfg; 1188 struct host_cmd_ds_802_11_ps_mode_enh psmode_enh; 1189 struct host_cmd_ds_802_11_hs_cfg_enh opt_hs_cfg; 1190 struct host_cmd_ds_802_11_scan scan; 1191 struct host_cmd_ds_802_11_scan_rsp scan_resp; 1192 struct host_cmd_ds_802_11_bg_scan_query bg_scan_query; 1193 struct host_cmd_ds_802_11_bg_scan_query_rsp bg_scan_query_resp; 1194 struct host_cmd_ds_802_11_associate associate; 1195 struct host_cmd_ds_802_11_associate_rsp associate_rsp; 1196 struct host_cmd_ds_802_11_deauthenticate deauth; 1197 struct host_cmd_ds_802_11_ad_hoc_start adhoc_start; 1198 struct host_cmd_ds_802_11_ad_hoc_result adhoc_result; 1199 struct host_cmd_ds_802_11_ad_hoc_join adhoc_join; 1200 struct host_cmd_ds_802_11d_domain_info domain_info; 1201 struct host_cmd_ds_802_11d_domain_info_rsp domain_info_resp; 1202 struct host_cmd_ds_11n_addba_req add_ba_req; 1203 struct host_cmd_ds_11n_addba_rsp add_ba_rsp; 1204 struct host_cmd_ds_11n_delba del_ba; 1205 struct host_cmd_ds_txbuf_cfg tx_buf; 1206 struct host_cmd_ds_amsdu_aggr_ctrl amsdu_aggr_ctrl; 1207 struct host_cmd_ds_11n_cfg htcfg; 1208 struct host_cmd_ds_wmm_get_status get_wmm_status; 1209 struct host_cmd_ds_802_11_key_material key_material; 1210 struct host_cmd_ds_version_ext verext; 1211 struct host_cmd_ds_802_11_ibss_status ibss_coalescing; 1212 struct host_cmd_ds_mac_reg_access mac_reg; 1213 struct host_cmd_ds_bbp_reg_access bbp_reg; 1214 struct host_cmd_ds_rf_reg_access rf_reg; 1215 struct host_cmd_ds_pmic_reg_access pmic_reg; 1216 struct host_cmd_ds_set_bss_mode bss_mode; 1217 struct host_cmd_ds_pcie_details pcie_host_spec; 1218 struct host_cmd_ds_802_11_eeprom_access eeprom; 1219 struct host_cmd_ds_802_11_subsc_evt subsc_evt; 1220 } params; 1221} __packed; 1222 1223struct mwifiex_opt_sleep_confirm { 1224 __le16 command; 1225 __le16 size; 1226 __le16 seq_num; 1227 __le16 result; 1228 __le16 action; 1229 __le16 resp_ctrl; 1230} __packed; 1231#endif /* !_MWIFIEX_FW_H_ */ 1232