blob: 9896a3adfc218f9ab0ba4853acb27c41fc538f34 [file] [log] [blame]
/*
* Copyright (c) 2017, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* * Neither the name of The Linux Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef MARLON_WMI_H_
#define MARLON_WMI_H_
#include "basic_types.h"
#if defined(_MSC_VER) // Microsoft
#pragma pack (push, marlon_wmi, 1) /* set alignment to 1 byte boundary */
#endif
/**
* **********************************************************************************************************************************
* General
* **********************************************************************************************************************************
*/
#define WMI_CONTROL_MSG_MAX_LEN 256
#define WMI_MAC_LEN 6 /* length of mac in bytes */
#define WMI_PROX_RANGE_NUM 3
enum wmi_phy_capability_e {
WMI_11A_CAPABILITY = 1,
WMI_11G_CAPABILITY = 2,
WMI_11AG_CAPABILITY = 3,
WMI_11NA_CAPABILITY = 4,
WMI_11NG_CAPABILITY = 5,
WMI_11NAG_CAPABILITY = 6,
WMI_11AD_CAPABILITY = 7,
// END CAPABILITY
WMI_11N_CAPABILITY_OFFSET = (WMI_11NA_CAPABILITY - WMI_11A_CAPABILITY),
} ;
/**
* Marlon Mailbox interface
* used for commands and events
*/
#define WMI_GET_DEVICE_ID(info1) ((info1) & 0xF)
typedef struct {
U16 padding;
U16 commandId;
/*
* info1 - 16 bits
* b03:b00 - id
* b15:b04 - unused
*/
U16 info1;
U16 reserved; /* For alignment */
} WMI_CMD_HDR;
/**
* **********************************************************************************************************************************
* WMI Commands
* **********************************************************************************************************************************
*/
/*
* List of Commands
*/
typedef enum {
WMI_CONNECT_CMDID = 0x0001,
WMI_DISCONNECT_CMDID = 0x0003,
WMI_START_SCAN_CMDID = 0x0007,
WMI_SET_BSS_FILTER_CMDID = 0x0009,
WMI_SET_PROBED_SSID_CMDID = 0x000a,
WMI_SET_LISTEN_INT_CMDID = 0x000b,
WMI_BCON_CTRL_CMDID = 0x000f,
WMI_ADD_CIPHER_KEY_CMDID = 0x0016,
WMI_DELETE_CIPHER_KEY_CMDID = 0x0017,
WMI_SET_APPIE_CMDID = 0x003f,
WMI_GET_APPIE_CMDID = 0x0040,
WMI_SET_WSC_STATUS_CMDID = 0x0041,
WMI_PXMT_RANGE_CFG_CMDID = 0x0042,
WMI_PXMT_SNR2_RANGE_CFG_CMDID = 0x0043,
WMI_FAST_MEM_ACC_MODE_CMDID = 0x0300,
WMI_MEM_READ_CMDID = 0x0800,
WMI_MEM_WR_CMDID = 0x0801,
WMI_ECHO_CMDID = 0x0803,
WMI_DEEP_ECHO_CMDID = 0x0804,
WMI_CONFIG_MAC_CMDID = 0x0805,
WMI_CONFIG_PHY_DEBUG_CMDID = 0x0806,
WMI_ADD_STATION_CMDID = 0x0807,
WMI_ADD_DEBUG_TX_PCKT_CMDID = 0x0808,
WMI_PHY_GET_STATISTICS_CMDID = 0x0809,
WMI_FS_TUNE_CMDID = 0x080A,
WMI_CORR_MEASURE_CMDID = 0x080B,
WMI_TEMP_SENSE_CMDID = 0x080E,
WMI_DC_CALIB_CMDID = 0x080F,
WMI_SEND_TONE_CMDID = 0x0810,
WMI_IQ_TX_CALIB_CMDID = 0x0811,
WMI_IQ_RX_CALIB_CMDID = 0x0812,
WMI_SET_UCODE_IDLE_CMDID = 0x0813,
WMI_SET_WORK_MODE_CMDID = 0x0815,
WMI_LO_LEAKAGE_CALIB_CMDID = 0x0816,
WMI_MARLON_R_ACTIVATE_CMDID = 0x0817,
WMI_MARLON_R_READ_CMDID = 0x0818,
WMI_MARLON_R_WRITE_CMDID = 0x0819,
WMI_MARLON_R_TXRX_SEL_CMDID = 0x081A,
MAC_IO_STATIC_PARAMS_CMDID = 0x081B,
MAC_IO_DYNAMIC_PARAMS_CMDID = 0x081C,
WMI_SILENT_RSSI_CALIB_CMDID = 0x081D,
WMI_CFG_RX_CHAIN_CMDID = 0x0820,
WMI_VRING_CFG_CMDID = 0x0821,
WMI_RX_ON_CMDID = 0x0822,
WMI_VRING_BA_EN_CMDID = 0x0823,
WMI_VRING_BA_DIS_CMDID = 0x0824,
WMI_RCP_ADDBA_RESP_CMDID = 0x0825,
WMI_RCP_DELBA_CMDID = 0x0826,
WMI_SET_SSID_CMDID = 0x0827,
WMI_GET_SSID_CMDID = 0x0828,
WMI_SET_PCP_CHANNEL_CMDID = 0x0829,
WMI_GET_PCP_CHANNEL_CMDID = 0x082a,
WMI_SW_TX_REQ_CMDID = 0x082b,
WMI_READ_MAC_RXQ_CMDID = 0x0830,
WMI_READ_MAC_TXQ_CMDID = 0x0831,
WMI_WRITE_MAC_RXQ_CMDID = 0x0832,
WMI_WRITE_MAC_TXQ_CMDID = 0x0833,
WMI_WRITE_MAC_XQ_FIELD_CMDID = 0x0834,
WMI_MLME_PUSH_CMDID = 0x0835,
WMI_BEAMFORMING_MGMT_CMDID = 0x0836,
WMI_BF_TXSS_MGMT_CMDID = 0x0837,
WMI_BF_SM_MGMT_CMDID = 0x0838,
WMI_BF_RXSS_MGMT_CMDID = 0x0839,
WMI_SET_SECTORS_CMDID = 0x0849,
WMI_MAINTAIN_PAUSE_CMDID = 0x0850,
WMI_MAINTAIN_RESUME_CMDID = 0x0851,
WMI_RS_MGMT_CMDID = 0x0852,
WMI_RF_MGMT_CMDID = 0x0853,
/* Performance monitoring commands */
WMI_BF_CTRL_CMDID = 0x0862,
WMI_NOTIFY_REQ_CMDID = 0x0863,
WMI_GET_STATUS_CMDID = 0x0864,
WMI_UNIT_TEST_CMDID = 0x0900,
WMI_HICCUP_CMDID = 0x0901,
WMI_FLASH_READ_CMDID = 0x0902,
WMI_FLASH_WRITE_CMDID = 0x0903,
WMI_SECURITY_UNIT_TEST_CMDID = 0x0904,
WMI_SET_MAC_ADDRESS_CMDID = 0xF003,
WMI_ABORT_SCAN_CMDID = 0xF007,
WMI_SET_PMK_CMDID = 0xF028,
WMI_SET_PROMISCUOUS_MODE_CMDID = 0xF041,
WMI_GET_PMK_CMDID = 0xF048,
WMI_SET_PASSPHRASE_CMDID = 0xF049,
WMI_SEND_ASSOC_RES_CMDID = 0xF04a,
WMI_SET_ASSOC_REQ_RELAY_CMDID = 0xF04b,
WMI_EAPOL_TX_CMDID = 0xF04c,
WMI_MAC_ADDR_REQ_CMDID = 0xF04d,
WMI_FW_VER_CMDID = 0xF04e,
} WMI_COMMAND_ID;
/*******************************************************************************************************************
* Commands data structures
*******************************************************************************************************************/
/*
* Frame Types
*/
enum wmi_mgmt_frame_type_e {
WMI_FRAME_BEACON = 0,
WMI_FRAME_PROBE_REQ,
WMI_FRAME_PROBE_RESP,
WMI_FRAME_ASSOC_REQ,
WMI_FRAME_ASSOC_RESP,
WMI_NUM_MGMT_FRAME
} ;
/*
* WMI_CONNECT_CMDID
*/
enum wmi_network_type_e {
INFRA_NETWORK = 0x01,
ADHOC_NETWORK = 0x02,
ADHOC_CREATOR = 0x04,
AP_NETWORK = 0x10,
P2P_NETWORK = 0x20,
WBE_NETWORK = 0x40,
} ;
enum wmi_dot11_auth_mode_e {
OPEN_AUTH = 0x01,
SHARED_AUTH = 0x02,
LEAP_AUTH = 0x04,
WSC_AUTH = 0x08
} ;
enum wmi_auth_mode_e {
NONE_AUTH = 0x01,
WPA_AUTH = 0x02,
WPA2_AUTH = 0x04,
WPA_PSK_AUTH = 0x08,
WPA2_PSK_AUTH = 0x10,
WPA_AUTH_CCKM = 0x20,
WPA2_AUTH_CCKM = 0x40,
} ;
enum wmi_crypto_type_e {
NONE_CRYPT = 0x01,
WEP_CRYPT = 0x02,
TKIP_CRYPT = 0x04,
AES_CRYPT = 0x08,
AES_GCMP_CRYPT = 0x20
} ;
enum wmi_connect_ctrl_flag_bits_e {
CONNECT_ASSOC_POLICY_USER = 0x0001,
CONNECT_SEND_REASSOC = 0x0002,
CONNECT_IGNORE_WPAx_GROUP_CIPHER = 0x0004,
CONNECT_PROFILE_MATCH_DONE = 0x0008,
CONNECT_IGNORE_AAC_BEACON = 0x0010,
CONNECT_CSA_FOLLOW_BSS = 0x0020,
CONNECT_DO_WPA_OFFLOAD = 0x0040,
CONNECT_DO_NOT_DEAUTH = 0x0080,
} ;
#define WMI_MAX_SSID_LEN 32
typedef PREPACK struct {
U08 networkType;
U08 dot11AuthMode;
U08 authMode;
U08 pairwiseCryptoType;
U08 pairwiseCryptoLen;
U08 groupCryptoType;
U08 groupCryptoLen;
U08 ssidLength;
U08 ssid[WMI_MAX_SSID_LEN];
U16 channel;
U08 bssid[WMI_MAC_LEN];
U32 ctrl_flags;
U08 destMacAddr[WMI_MAC_LEN];
U16 reserved;
} POSTPACK WMI_CONNECT_CMD;
/*
* WMI_RECONNECT_CMDID
*/
typedef PREPACK struct {
U16 channel; /* hint */
U08 bssid[WMI_MAC_LEN]; /* mandatory if set */
} POSTPACK WMI_RECONNECT_CMD;
/*
* WMI_SET_PMK_CMDID
*/
#define WMI_MIN_KEY_INDEX 0
#define WMI_MAX_KEY_INDEX 3
#define WMI_MAX_KEY_LEN 32
#define WMI_PASSPHRASE_LEN 64
#define WMI_PMK_LEN 32
typedef PREPACK struct {
U08 pmk[WMI_PMK_LEN];
} POSTPACK WMI_SET_PMK_CMD;
/*
* WMI_SET_PASSPHRASE_CMDID
*/
typedef PREPACK struct {
U08 ssid[WMI_MAX_SSID_LEN];
U08 passphrase[WMI_PASSPHRASE_LEN];
U08 ssid_len;
U08 passphrase_len;
} POSTPACK WMI_SET_PASSPHRASE_CMD;
/*
* WMI_ADD_CIPHER_KEY_CMDID
*/
enum wmi_connect_key_usage_e {
PAIRWISE_USAGE = 0x00,
GROUP_USAGE = 0x01,
TX_USAGE = 0x02, /* default Tx Key - Static WEP only */
} ;
typedef PREPACK struct {
U08 keyIndex;
U08 keyType;
U08 keyUsage; /* wmi_connect_key_usage_e */
U08 keyLength;
U08 keyRSC[8]; /* key replay sequence counter */
U08 key[WMI_MAX_KEY_LEN];
U08 key_op_ctrl; /* Additional Key Control information */
U08 key_macaddr[WMI_MAC_LEN];
} POSTPACK WMI_ADD_CIPHER_KEY_CMD;
/*
* WMI_DELETE_CIPHER_KEY_CMDID
*/
typedef PREPACK struct {
U08 keyIndex;
U08 key_macaddr[WMI_MAC_LEN];
} POSTPACK WMI_DELETE_CIPHER_KEY_CMD;
/*
* WMI_START_SCAN_CMD
*/
enum wmi_scan_type_e {
WMI_LONG_SCAN = 0,
WMI_SHORT_SCAN = 1,
WMI_PBC_SCAN = 2
} ;
typedef PREPACK struct {
S32 forceFgScan;
S32 isLegacy; /* For Legacy Cisco AP compatibility */
U32 homeDwellTime; /* Maximum duration in the home channel(milliseconds) */
U32 forceScanInterval; /* Time interval between scans (milliseconds)*/
U08 scanType; /* wmi_scan_type_e */
U08 numChannels; /* how many channels follow */
U16 channelList[4]; /* channels in Mhz */
} POSTPACK WMI_START_SCAN_CMD;
/*
* WMI_SET_PROBED_SSID_CMDID
*/
#define MAX_PROBED_SSID_INDEX 15
enum wmi_ssid_flag_e {
DISABLE_SSID_FLAG = 0, /* disables entry */
SPECIFIC_SSID_FLAG = 0x01, /* probes specified ssid */
ANY_SSID_FLAG = 0x02, /* probes for any ssid */
} ;
typedef PREPACK struct {
U08 entryIndex; /* 0 to MAX_PROBED_SSID_INDEX */
U08 flag; /* wmi_ssid_flag_e */
U08 ssidLength;
U08 ssid[WMI_MAX_SSID_LEN];
} POSTPACK WMI_PROBED_SSID_CMD;
/*
* Add Application specified IE to a management frame
*/
#define WMI_MAX_IE_LEN 255
#ifdef _WINDOWS
#pragma warning( disable : 4200 ) //suppress warning
#endif
typedef PREPACK struct {
U08 mgmtFrmType; /* one of wmi_mgmt_frame_type_e */
U08 ieLen; /* Length of the IE that should be added to the MGMT frame */
U08 ieInfo[EMPTY_ARRAY_SIZE];
} POSTPACK WMI_SET_APPIE_CMD;
typedef PREPACK struct {
U08 destMacAddr[WMI_MAC_LEN];
U16 range;
} POSTPACK WMI_PXMT_RANGE_CFG_CMD;
typedef PREPACK struct {
S08 snr2range_arr[WMI_PROX_RANGE_NUM-1];
} POSTPACK WMI_PXMT_SNR2_RANGE_CFG_CMD;
/*
* WMI_RF_MGMT_CMDID
*/
typedef enum wmi_rf_mgmt_type_e {
WMI_RF_MGMT_W_DISABLE = 0x0,
WMI_RF_MGMT_W_ENABLE = 0x1,
WMI_RF_MGMT_GET_STATUS = 0x2
} WMI_RF_MGMT_TYPE;
typedef PREPACK struct {
U32 rf_mgmt_type;
} POSTPACK WMI_RF_MGMT_CMD;
/*
* WMI_SET_SSID_CMDID
*/
typedef PREPACK struct {
U32 ssid_len;
U08 ssid[WMI_MAX_SSID_LEN];
} POSTPACK WMI_SET_SSID_CMD;
/*
* WMI_SET_PCP_CHANNEL_CMDID
*/
typedef PREPACK struct {
U08 channel_index;
U08 reserved[3];
} POSTPACK WMI_SET_PCP_CHANNEL_CMD;
/*
* WMI_BCON_CTRL_CMDID
*/
typedef PREPACK struct {
U16 bcon_interval;
U16 frag_num;
U32 ss_mask_low;
U32 ss_mask_high;
U16 network_type;
U08 disable_sec_offload;
U08 disable_sec;
} POSTPACK WMI_BCON_CTRL_CMD;
/*
* WMI_SW_TX_REQ_CMDID
*/
typedef PREPACK struct {
U08 destMacAddr[WMI_MAC_LEN];
U16 length;
} POSTPACK WMI_SW_TX_REQ_CMD;
/*
* WMI_VRING_CFG_CMDID
*/
typedef PREPACK struct {
U32 ring_mem_base_l;
U16 ring_mem_base_h;
U16 reserved0;
U16 ring_size;
U16 max_mpdu_size;
} POSTPACK wmi_sw_ring_cfg_s;
enum wmi_vring_cfg_schd_params_priority_e {
REGULAR = 0x0,
HIGH = 0x1,
};
typedef PREPACK struct {
U16 priority;
U16 timeslot_us;
} POSTPACK wmi_vring_cfg_schd_s;
enum wmi_vring_cfg_encap_trans_type_e {
ENC_TYPE_802_3 = 0x0,
ENC_TYPE_NATIVE_WIFI = 0x1
};
enum wmi_vring_cfg_ds_cfg_e {
DS_PBSS_MODE = 0x0,
DS_STA_MODE = 0x1,
DS_AP_MODE = 0x2,
DS_ADDR4_MODE = 0x3
};
enum wmi_vring_cfg_nwifi_ds_trans_type_e {
NWIFI_TX_NO_TRANS_MODE = 0x0,
NWIFI_TX_AP2PBSS_TRANS_MODE = 0x1,
NWIFI_TX_STA2PBSS_TRANS_MODE = 0x2
};
typedef PREPACK struct {
wmi_sw_ring_cfg_s tx_sw_ring;
U08 ringid; /* 0-23 vrings */
#define CIDXTID_CID_POS 0
#define CIDXTID_CID_LEN 4
#define CIDXTID_CID_MSK 0xF
#define CIDXTID_TID_POS 4
#define CIDXTID_TID_LEN 4
#define CIDXTID_TID_MSK 0xF0
U08 cidxtid_byte;
U08 encap_trans_type;
U08 ds_cfg; /* 802.3 DS cfg */
U08 nwifi_ds_trans_type;
#define VRING_CFG_MAC_CTRL_LIFETIME_EN_POS 0
#define VRING_CFG_MAC_CTRL_LIFETIME_EN_LEN 1
#define VRING_CFG_MAC_CTRL_LIFETIME_EN_MSK 0x1
#define VRING_CFG_MAC_CTRL_AGGR_EN_POS 1
#define VRING_CFG_MAC_CTRL_AGGR_EN_LEN 1
#define VRING_CFG_MAC_CTRL_AGGR_EN_MSK 0x2
U08 mac_ctrl_byte;
#define VRING_CFG_TO_RESOLUTION_VALUE_POS 0
#define VRING_CFG_TO_RESOLUTION_VALUE_LEN 6
#define VRING_CFG_TO_RESOLUTION_VALUE_MSK 0x3F
U08 to_resolution_byte;
U08 agg_max_wsize;
wmi_vring_cfg_schd_s schd_params;
} POSTPACK wmi_vring_cfg_s;
enum wmi_vring_cfg_cmd_action_e {
ADD_VRING = 0x0,
MODIFY_VRING = 0x1,
DELETE_VRING = 0x2
};
typedef PREPACK struct {
U32 action;
wmi_vring_cfg_s vring_cfg;
} POSTPACK WMI_VRING_CFG_CMD;
/*
* WMI_VRING_BA_EN_CMDID
*/
typedef PREPACK struct {
U08 ringid;
U08 agg_max_wsize;
U16 ba_timeout;
} POSTPACK WMI_VRING_BA_EN_CMD;
/*
* WMI_VRING_BA_DIS_CMDID
*/
typedef PREPACK struct {
U08 ringid;
U08 reserved0;
U16 reason;
} POSTPACK WMI_VRING_BA_DIS_CMD;
/*
* WMI_START_SCAN_CMDID
*/
enum wmi_scan_ctrl_cmd_scan_mode_e {
ACTIVE_SCAN = 0x0,
PASSIV_SCAN = 0x1,
NO_SCAN = 0x2
};
typedef PREPACK struct {
U16 in_channel_interval;
U16 num_of_channels;
U16 channel_list;
U16 scan_param;
U32 scan_mode;
} POSTPACK WMI_SCAN_CTRL_CMD;
/*
* WMI_NOTIFY_REQ_CMDID
*/
typedef PREPACK struct {
U32 cid;
U32 interval_usec;
} POSTPACK WMI_NOTIFY_REQ_CMD;
/*
* WMI_CFG_RX_CHAIN_CMDID
*/
enum wmi_sniffer_cfg_mode_e {
SNIFFER_OFF = 0x0,
SNIFFER_ON = 0x1
};
enum wmi_sniffer_cfg_phy_info_mode_e {
SNIFFER_PHY_INFO_DISABLED = 0x0,
SNIFFER_PHY_INFO_ENABLED = 0x1
};
enum wmi_sniffer_cfg_phy_support_e {
SNIFFER_CP = 0x0,
SNIFFER_DP = 0x1,
SNIFFER_BOTH_PHYS = 0x2
};
typedef PREPACK struct {
U32 mode;
U32 phy_info_mode;
U32 phy_support;
U32 channel_id;
} POSTPACK wmi_sniffer_cfg_s;
enum wmi_cfg_rx_chain_cmd_action_e {
ADD_RX_CHAIN = 0x0,
DELETE_RX_CHAIN = 0x1
};
enum wmi_cfg_rx_chain_cmd_decap_trans_type_e {
DECAP_TYPE_802_3 = 0x0,
DECAP_TYPE_NATIVE_WIFI = 0x1
};
enum wmi_cfg_rx_chain_cmd_nwifi_ds_trans_type_e {
NWIFI_RX_NO_TRANS_MODE = 0x0,
NWIFI_RX_PBSS2AP_TRANS_MODE = 0x1,
NWIFI_RX_PBSS2STA_TRANS_MODE = 0x2
};
typedef PREPACK struct {
U32 action;
wmi_sw_ring_cfg_s rx_sw_ring;
U08 mid;
U08 decap_trans_type;
#define CFG_RX_CHAIN_CMD_L2_802_3_OFFLOAD_CTRL_VLAN_TAG_INSERTION_POS 0
#define CFG_RX_CHAIN_CMD_L2_802_3_OFFLOAD_CTRL_VLAN_TAG_INSERTION_LEN 1
#define CFG_RX_CHAIN_CMD_L2_802_3_OFFLOAD_CTRL_VLAN_TAG_INSERTION_MSK 0x1
U08 l2_802_3_offload_ctrl_byte;
#define CFG_RX_CHAIN_CMD_L2_NWIFI_OFFLOAD_CTRL_REMOVE_QOS_POS 0
#define CFG_RX_CHAIN_CMD_L2_NWIFI_OFFLOAD_CTRL_REMOVE_QOS_LEN 1
#define CFG_RX_CHAIN_CMD_L2_NWIFI_OFFLOAD_CTRL_REMOVE_QOS_MSK 0x1
#define CFG_RX_CHAIN_CMD_L2_NWIFI_OFFLOAD_CTRL_REMOVE_PN_POS 1
#define CFG_RX_CHAIN_CMD_L2_NWIFI_OFFLOAD_CTRL_REMOVE_PN_LEN 1
#define CFG_RX_CHAIN_CMD_L2_NWIFI_OFFLOAD_CTRL_REMOVE_PN_MSK 0x2
U08 l2_nwifi_offload_ctrl_byte;
U08 vlan_id;
U08 nwifi_ds_trans_type;
#define CFG_RX_CHAIN_CMD_L3_L4_CTRL_IPV4_CHECKSUM_EN_POS 0
#define CFG_RX_CHAIN_CMD_L3_L4_CTRL_IPV4_CHECKSUM_EN_LEN 1
#define CFG_RX_CHAIN_CMD_L3_L4_CTRL_IPV4_CHECKSUM_EN_MSK 0x1
#define CFG_RX_CHAIN_CMD_L3_L4_CTRL_TCPIP_CHECKSUM_EN_POS 1
#define CFG_RX_CHAIN_CMD_L3_L4_CTRL_TCPIP_CHECKSUM_EN_LEN 1
#define CFG_RX_CHAIN_CMD_L3_L4_CTRL_TCPIP_CHECKSUM_EN_MSK 0x2
U08 l3_l4_ctrl_byte;
#define CFG_RX_CHAIN_CMD_RING_CTRL_OVERRIDE_PREFETCH_THRSH_POS 0
#define CFG_RX_CHAIN_CMD_RING_CTRL_OVERRIDE_PREFETCH_THRSH_LEN 1
#define CFG_RX_CHAIN_CMD_RING_CTRL_OVERRIDE_PREFETCH_THRSH_MSK 0x1
#define CFG_RX_CHAIN_CMD_RING_CTRL_OVERRIDE_WB_THRSH_POS 1
#define CFG_RX_CHAIN_CMD_RING_CTRL_OVERRIDE_WB_THRSH_LEN 1
#define CFG_RX_CHAIN_CMD_RING_CTRL_OVERRIDE_WB_THRSH_MSK 0x2
#define CFG_RX_CHAIN_CMD_RING_CTRL_OVERRIDE_ITR_THRSH_POS 2
#define CFG_RX_CHAIN_CMD_RING_CTRL_OVERRIDE_ITR_THRSH_LEN 1
#define CFG_RX_CHAIN_CMD_RING_CTRL_OVERRIDE_ITR_THRSH_MSK 0x4
#define CFG_RX_CHAIN_CMD_RING_CTRL_OVERRIDE_HOST_THRSH_POS 3
#define CFG_RX_CHAIN_CMD_RING_CTRL_OVERRIDE_HOST_THRSH_LEN 1
#define CFG_RX_CHAIN_CMD_RING_CTRL_OVERRIDE_HOST_THRSH_MSK 0x8
U08 ring_ctrl;
U16 prefetch_thrsh;
U16 wb_thrsh;
U32 itr_value;
U16 host_thrsh;
U16 reserved;
wmi_sniffer_cfg_s sniffer_cfg;
} POSTPACK WMI_CFG_RX_CHAIN_CMD;
/*
* WMI_RCP_ADDBA_RESP_CMDID
*/
typedef PREPACK struct {
#define CIDXTID_CID_POS 0
#define CIDXTID_CID_LEN 4
#define CIDXTID_CID_MSK 0xF
#define CIDXTID_TID_POS 4
#define CIDXTID_TID_LEN 4
#define CIDXTID_TID_MSK 0xF0
U08 cidxtid_byte;
U08 dialog_token;
U16 status_code;
U16 ba_param_set; /* ieee80211_ba_parameterset field to send */
U16 ba_timeout;
} POSTPACK WMI_RCP_ADDBA_RESP_CMD;
/*
* WMI_RCP_DELBA_CMDID
*/
typedef PREPACK struct {
#define CIDXTID_CID_POS 0
#define CIDXTID_CID_LEN 4
#define CIDXTID_CID_MSK 0xF
#define CIDXTID_TID_POS 4
#define CIDXTID_TID_LEN 4
#define CIDXTID_TID_MSK 0xF0
U08 cidxtid_byte;
U08 rsvd;
U16 reason;
} POSTPACK WMI_RCP_DELBA_CMD;
/*
* WMI_RCP_ADDBA_REQ_CMDID
*/
typedef PREPACK struct {
#define CIDXTID_CID_POS 0
#define CIDXTID_CID_LEN 4
#define CIDXTID_CID_MSK 0xF
#define CIDXTID_TID_POS 4
#define CIDXTID_TID_LEN 4
#define CIDXTID_TID_MSK 0xF0
U08 cidxtid_byte;
U08 dialog_token;
U16 ba_param_set; /* ieee80211_ba_parameterset field as it received */
U16 ba_timeout;
U16 ba_seq_ctrl; /* ieee80211_ba_seqstrl field as it received */
} POSTPACK WMI_RCP_ADDBA_REQ_CMD;
/**
* WMI_SET_MAC_ADDRESS_CMDID
*/
typedef PREPACK struct {
U08 macaddr[WMI_MAC_LEN];
U16 reserved;
} POSTPACK WMI_SET_MAC_ADDRESS_CMD;
/*
* WMI_EAPOL_TX_CMDID
*/
typedef PREPACK struct {
U08 dst_mac[WMI_MAC_LEN];
U16 eapol_len;
U08 eapol[EMPTY_ARRAY_SIZE];
} POSTPACK WMI_EAPOL_TX_CMD;
/*
* WMI_ECHO_CMDID
*/
typedef PREPACK struct {
U32 value;
} POSTPACK WMI_ECHO_CMD;
/**
* **********************************************************************************************************************************
* WMI Events
* **********************************************************************************************************************************
*/
/*
* List of Events (target to host)
*/
enum WMI_EVENT_ID {
WMI_IMM_RSP_EVENTID = 0x0000,
WMI_READY_EVENTID = 0x1001,
WMI_CONNECT_EVENTID = 0x1002,
WMI_DISCONNECT_EVENTID = 0x1003,
WMI_SCAN_COMPLETE_EVENTID = 0x100a,
WMI_REPORT_STATISTICS_EVENTID = 0x100b,
WMI_RD_MEM_RSP_EVENTID = 0x1800,
WMI_FW_READY_EVENTID = 0x1801,
WMI_EXIT_FAST_MEM_ACC_MODE_EVENTID = 0x0200,
WMI_ECHO_RSP_EVENTID = 0x1803,
WMI_CONFIG_MAC_DONE_EVENTID = 0x1805,
WMI_CONFIG_PHY_DEBUG_DONE_EVENTID = 0x1806,
WMI_ADD_STATION_DONE_EVENTID = 0x1807,
WMI_ADD_DEBUG_TX_PCKT_DONE_EVENTID = 0x1808,
WMI_PHY_GET_STATISTICS_EVENTID = 0x1809,
WMI_FS_TUNE_DONE_EVENTID = 0x180A,
WMI_CORR_MEASURE_DONE_EVENTID = 0x180B,
WMI_TEMP_SENSE_DONE_EVENTID = 0x180E,
WMI_DC_CALIB_DONE_EVENTID = 0x180F,
WMI_IQ_TX_CALIB_DONE_EVENTID = 0x1811,
WMI_IQ_RX_CALIB_DONE_EVENTID = 0x1812,
WMI_SET_WORK_MODE_DONE_EVENTID = 0x1815,
WMI_LO_LEAKAGE_CALIB_DONE_EVENTID = 0x1816,
WMI_MARLON_R_ACTIVATE_DONE_EVENTID = 0x1817,
WMI_MARLON_R_READ_DONE_EVENTID = 0x1818,
WMI_MARLON_R_WRITE_DONE_EVENTID = 0x1819,
WMI_MARLON_R_TXRX_SEL_DONE_EVENTID = 0x181A,
WMI_SILENT_RSSI_CALIB_DONE_EVENTID = 0x181D,
WMI_CFG_RX_CHAIN_DONE_EVENTID = 0x1820,
WMI_VRING_CFG_DONE_EVENTID = 0x1821,
WMI_RX_ON_EVENTID = 0x1822,
WMI_BA_STATUS_EVENTID = 0x1823,
WMI_RCP_ADDBA_REQ_EVENTID = 0x1824,
WMI_ADDBA_RESP_SENT_EVENTID = 0x1825,
WMI_DELBA_EVENTID = 0x1826,
WMI_GET_SSID_EVENTID = 0x1828,
WMI_GET_PCP_CHANNEL_EVENTID = 0x182a,
WMI_SW_TX_COMPLETE_EVENTID = 0x182b,
WMI_READ_MAC_RXQ_EVENTID = 0x1830,
WMI_READ_MAC_TXQ_EVENTID = 0x1831,
WMI_WRITE_MAC_RXQ_EVENTID = 0x1832,
WMI_WRITE_MAC_TXQ_EVENTID = 0x1833,
WMI_WRITE_MAC_XQ_FIELD_EVENTID = 0x1834,
WMI_BEAFORMING_MGMT_DONE_EVENTID = 0x1836,
WMI_BF_TXSS_MGMT_DONE_EVENTID = 0x1837,
WMI_BF_RXSS_MGMT_DONE_EVENTID = 0x1839,
WMI_RS_MGMT_DONE_EVENTID = 0x1852,
WMI_RF_MGMT_STATUS_EVENTID = 0x1853,
WMI_BF_SM_MGMT_DONE_EVENTID = 0x1838,
WMI_RX_MGMT_PACKET_EVENTID = 0x1840,
/* Performance monitoring events */
WMI_DATA_PORT_OPEN_EVENTID = 0x1860,
WMI_WBE_LINKDOWN_EVENTID = 0x1861,
WMI_BF_CTRL_DONE_EVENTID = 0x1862,
WMI_NOTIFY_REQ_DONE_EVENTID = 0x1863,
WMI_GET_STATUS_DONE_EVENTID = 0x1864,
WMI_UNIT_TEST_EVENTID = 0x1900,
WMI_FLASH_READ_DONE_EVENTID = 0x1902,
WMI_FLASH_WRITE_DONE_EVENTID = 0x1903,
WMI_SET_CHANNEL_EVENTID = 0x9000,
WMI_ASSOC_REQ_EVENTID = 0x9001,
WMI_EAPOL_RX_EVENTID = 0x9002,
WMI_MAC_ADDR_RESP_EVENTID = 0x9003,
WMI_FW_VER_EVENTID = 0x9004,
} ;
/*******************************************************************************************************************
* Events data structures
*******************************************************************************************************************/
/*
* WMI_RF_MGMT_STATUS_EVENTID
*/
enum wmi_rf_status_e {
WMI_RF_ENABLED = 0x0,
WMI_RF_DISABLED_HW = 0x1,
WMI_RF_DISABLED_SW = 0x2,
WMI_RF_DISABLED_HW_SW = 0x3
};
typedef PREPACK struct {
U32 rf_status;
} POSTPACK WMI_RF_MGMT_STATUS_EVENT;
/*
* WMI_GET_STATUS_DONE_EVENTID
*/
typedef PREPACK struct {
U32 is_associated;
U32 cid;
U16 bssid[3];
U16 channel;
U32 network_type;
U32 ssid_len;
U08 ssid[WMI_MAX_SSID_LEN];
U32 rf_status;
U32 is_secured;
} POSTPACK WMI_GET_STATUS_DONE_EVENT;
/**
* WMI_FW_VER_EVENTID
*/
typedef PREPACK struct {
U08 major;
U08 minor;
U16 subminor;
U16 build;
} POSTPACK WMI_FW_VER_EVENT;
/*
* WMI_MAC_ADDR_RESP_EVENTID
*/
typedef PREPACK struct {
U08 mac_addr[WMI_MAC_LEN];
U08 auth_mode;
U08 crypt_mode;
U32 offload_mode; // 0/1
} POSTPACK WMI_MAC_ADDR_RESP_EVENT;
/*
* WMI_EAPOL_RX_EVENTID
*/
typedef PREPACK struct {
U08 src_mac[WMI_MAC_LEN];
U16 eapol_len;
U08 eapol[EMPTY_ARRAY_SIZE];
} POSTPACK WMI_EAPOL_RX_EVENT;
/*
* WMI_READY_EVENTID
*/
typedef PREPACK struct {
U32 sw_version;
U32 abi_version;
U08 macaddr[WMI_MAC_LEN];
U08 phyCapability; /* wmi_phy_capability_e */
U08 reserved;
U32 extend_mem_addr;
U32 extend_mem_size;
} POSTPACK WMI_READY_EVENT;
/*
* WMI_NOTIFY_REQ_DONE_EVENTID
*/
typedef PREPACK struct {
U32 status;
U32 tsf_low;
U32 tsf_high;
U32 snr_val;
U32 tx_tpt;
U32 tx_goodput;
U32 rx_goodput;
U16 bf_mcs;
U16 my_rx_sector;
U16 my_tx_sector;
U16 other_rx_sector;
U16 other_tx_sector;
U16 range;
} POSTPACK WMI_NOTIFY_REQ_DONE_EVENT;
/*
* WMI_CONNECT_EVENTID
*/
typedef PREPACK struct {
U16 channel;
U08 bssid[WMI_MAC_LEN];
U16 listenInterval;
U16 beaconInterval;
U32 networkType;
U08 beaconIeLen;
U08 assocReqLen;
U08 assocRespLen;
U08 cid;
U08 reserved0;
U16 reserved1;
U08 assocInfo[EMPTY_ARRAY_SIZE];
} POSTPACK WMI_CONNECT_EVENT;
/*
* WMI_DISCONNECT_EVENTID
*/
enum wmi_disconnect_reason_e {
NO_NETWORK_AVAIL = 0x01,
LOST_LINK = 0x02, /* bmiss */
DISCONNECT_CMD = 0x03,
BSS_DISCONNECTED = 0x04,
AUTH_FAILED = 0x05,
ASSOC_FAILED = 0x06,
NO_RESOURCES_AVAIL = 0x07,
CSERV_DISCONNECT = 0x08,
INVALID_PROFILE = 0x0a,
DOT11H_CHANNEL_SWITCH = 0x0b,
PROFILE_MISMATCH = 0x0c,
CONNECTION_EVICTED = 0x0d,
IBSS_MERGE = 0xe
};
typedef PREPACK struct {
U16 protocolReasonStatus; /* reason code, see 802.11 spec. */
U08 bssid[WMI_MAC_LEN]; /* set if known */
U08 disconnectReason ; /* see wmi_disconnect_reason_e */
U08 assocRespLen;
U08 assocInfo[EMPTY_ARRAY_SIZE];
} POSTPACK WMI_DISCONNECT_EVENT;
/*
* WMI_SCAN_COMPLETE_EVENTID
*/
typedef PREPACK struct {
U32 status;
} POSTPACK WMI_SCAN_COMPLETE_EVENT;
/*
* WMI_BA_STATUS_EVENTID
*/
enum wmi_vring_ba_status_e {
AGREED = 0x0,
NON_AGREED = 0x1,
} ;
typedef PREPACK struct {
U16 status;
U16 reserved0;
U08 ringid;
U08 agg_wsize;
U16 ba_timeout;
} POSTPACK WMI_VRING_BA_STATUS_EVENT;
/*
* WMI_DELBA_EVENTID
*/
typedef PREPACK struct {
#define CIDXTID_CID_POS 0
#define CIDXTID_CID_LEN 4
#define CIDXTID_CID_MSK 0xF
#define CIDXTID_TID_POS 4
#define CIDXTID_TID_LEN 4
#define CIDXTID_TID_MSK 0xF0
U08 cidxtid_byte;
U08 from_initiator;
U16 reason;
} POSTPACK WMI_DELBA_EVENT;
/*
* WMI_VRING_CFG_DONE_EVENTID
*/
enum wmi_vring_cfg_status {
VRING_CFG_SUCCESS = 0x0,
VRING_CFG_FAILURE = 0x1
};
typedef PREPACK struct {
U08 ringid;
U08 status;
U16 reserved;
U32 tx_vring_tail_ptr;
} POSTPACK WMI_VRING_CFG_DONE_EVENT;
/*
* WMI_ADDBA_RESP_SENT_EVENTID
*/
enum wmi_rcp_addba_resp_sent_event_status_e {
SUCCESS = 0x0,
FAIL = 0x1
};
typedef PREPACK struct {
#define CIDXTID_CID_POS 0
#define CIDXTID_CID_LEN 4
#define CIDXTID_CID_MSK 0xF
#define CIDXTID_TID_POS 4
#define CIDXTID_TID_LEN 4
#define CIDXTID_TID_MSK 0xF0
U08 cidxtid_byte;
U08 rsvd;
U16 status;
} POSTPACK WMI_RCP_ADDBA_RESP_SENT_EVENT;
/*
* WMI_RCP_ADDBA_REQ_EVENTID
*/
typedef PREPACK struct {
#define CIDXTID_CID_POS 0
#define CIDXTID_CID_LEN 4
#define CIDXTID_CID_MSK 0xF
#define CIDXTID_TID_POS 4
#define CIDXTID_TID_LEN 4
#define CIDXTID_TID_MSK 0xF0
U08 cidxtid_byte;
U08 dialog_token;
U16 ba_param_set; /* ieee80211_ba_parameterset field as it received */
U16 ba_timeout;
U16 ba_seq_ctrl; /* ieee80211_ba_seqstrl field as it received */
} POSTPACK WMI_RCP_ADDBA_REQ_EVENT;
/*
* WMI_CFG_RX_CHAIN_DONE_EVENTID
*/
enum wmi_cfg_rx_chain_done_event_status_e {
CFG_RX_CHAIN_SUCCESS = 0x1,
};
typedef PREPACK struct {
U32 rx_ring_tail_ptr; /* Rx V-Ring Tail pointer */
U32 status;
} POSTPACK WMI_CFG_RX_CHAIN_DONE_EVENT;
/*
* WMI_WBE_LINKDOWN_EVENTID
*/
enum wmi_wbe_link_down_event_reason_e {
USER_REQUEST = 0x0,
RX_DISASSOC = 0x1,
BAD_PHY_LINK = 0x2,
};
typedef PREPACK struct {
U08 cid;
U08 reserved[3];
U32 reason;
} POSTPACK WMI_WBE_LINK_DOWN_EVENT;
/*
* WMI_DATA_PORT_OPEN_EVENTID
*/
typedef PREPACK struct {
U08 cid;
U08 reserved0[3];
} POSTPACK WMI_DATA_PORT_OPEN_EVENT;
/*
* WMI_GET_PCP_CHANNEL_EVENTID
*/
typedef PREPACK struct {
U08 channel_index;
U08 reserved[3];
} POSTPACK WMI_GET_PCP_CHANNEL_EVENT;
/*
* WMI_SW_TX_COMPLETE_EVENTID
*/
enum wmi_sw_tx_status_e {
TX_SW_STATUS_SUCCESS = 0x0,
TX_SW_STATUS_FAILED_NO_RESOURCES = 0x1,
TX_SW_STATUS_FAILED_TX = 0x2
};
typedef PREPACK struct {
U08 status;
U08 reserved[3];
} POSTPACK WMI_SW_TX_COMPLETE_EVENT;
/*
* WMI_GET_SSID_EVENTID
*/
typedef PREPACK struct {
U32 ssid_len;
U08 ssid[WMI_MAX_SSID_LEN];
} POSTPACK WMI_GET_SSID_EVENT;
/*
* WMI_RX_MGMT_PACKET_EVENTID
*/
typedef PREPACK struct {
U08 mcs;
S08 snr;
U16 range;
U16 stype;
U16 status;
U32 length;
U08 qid; /* Not resolved when == 0xFFFFFFFF ==> Broadcast to all MIDS */
U08 mid; /* Not resolved when == 0xFFFFFFFF ==> Broadcast to all MIDS */
U08 cid;
U08 channel; /* From Radio MNGR */
} POSTPACK wmi_rx_mgmt_info_s;
typedef PREPACK struct {
wmi_rx_mgmt_info_s info;
U32 payload;//[EMPTY_ARRAY_SIZE];
} POSTPACK WMI_RX_MGMT_PACKET_EVENT;
/*
* WMI_ECHO_RSP_EVENTID
*/
typedef PREPACK struct {
U32 echoed_value;
} POSTPACK WMI_ECHO_EVENT;
#if defined(_MSC_VER) // Microsoft
#pragma pack (pop, marlon_wmi) /* restore original alignment from stack */
#endif
#endif /* MARLON_WMI_H_ */