blob: 354f5fe3de1c81cc95b3c554ec6e3eca0dd9bed8 [file] [log] [blame]
/*
* Copyright (c) 2013-2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
* above copyright notice and this permission notice appear in all
* copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
/*
* This file was originally distributed by Qualcomm Atheros, Inc.
* under proprietary terms before Copyright ownership was assigned
* to the Linux Foundation.
*/
/**
* @addtogroup WMIAPI
*@{
*/
/** @file
* This file specifies the WMI interface for the Software Architecture.
*
* It includes definitions of all the commands and events. Commands are messages
* from the host to the target. Events and Replies are messages from the target
* to the host.
*
* Ownership of correctness in regards to WMI commands
* belongs to the host driver and the target is not required to validate
* parameters for value, proper range, or any other checking.
*
* Guidelines for extending this interface are below.
*
* 1. Add new WMI commands ONLY within the specified range - 0x9000 - 0x9fff
* 2. Use ONLY A_UINT32 type for defining member variables within WMI command/event
* structures. Do not use A_UINT8, A_UINT16, A_BOOL or enum types within these structures.
* 3. DO NOT define bit fields within structures. Implement bit fields using masks
* if necessary. Do not use the programming language's bit field definition.
* 4. Define macros for encode/decode of A_UINT8, A_UINT16 fields within the A_UINT32
* variables. Use these macros for set/get of these fields. Try to use this to
* optimize the structure without bloating it with A_UINT32 variables for every lower
* sized field.
* 5. Do not use PACK/UNPACK attributes for the structures as each member variable is
* already 4-byte aligned by virtue of being a A_UINT32 type.
* 6. Comment each parameter part of the WMI command/event structure by using the
* 2 stars at the begining of C comment instead of one star to enable HTML document
* generation using Doxygen.
*
*/
#ifndef _WMI_UNIFIED_H_
#define _WMI_UNIFIED_H_
#ifdef __cplusplus
extern "C" {
#endif
#include <wlan_defs.h>
#include <wmi_services.h>
#include <dbglog.h>
#define ATH_MAC_LEN 6 /**< length of MAC in bytes */
#define WMI_EVENT_STATUS_SUCCESS 0 /* Success return status to host */
#define WMI_EVENT_STATUS_FAILURE 1 /* Failure return status to host */
#define MAX_TX_RATE_VALUES 10 /*Max Tx Rates*/
#define MAX_RSSI_VALUES 10 /*Max Rssi values*/
#define WMI_MAX_CHAINS 8
/* The WLAN_MAX_AC macro cannot be changed without breaking
WMI compatibility. */
//The maximum value of access category
#define WLAN_MAX_AC 4
/*
* These don't necessarily belong here; but as the MS/SM macros require
* ar6000_internal.h to be included, it may not be defined as yet.
*/
#define WMI_F_MS(_v, _f) \
( ((_v) & (_f)) >> (_f##_S) )
/*
* This breaks the "good macro practice" of only referencing each
* macro field once (to avoid things like field++ from causing issues.)
*/
#define WMI_F_RMW(_var, _v, _f) \
do { \
(_var) &= ~(_f); \
(_var) |= ( ((_v) << (_f##_S)) & (_f)); \
} while (0)
#define WMI_GET_BITS(_val,_index,_num_bits) \
(((_val) >> (_index)) & ((1 << (_num_bits)) - 1))
#define WMI_SET_BITS(_var,_index,_num_bits,_val) do { \
(_var) &= ~(((1 << (_num_bits)) - 1) << (_index)); \
(_var) |= (((_val) & ((1 << (_num_bits)) - 1)) << (_index)); \
} while(0)
/**
* A packed array is an array where each entry in the array is less than
* or equal to 16 bits, and the entries are stuffed into an A_UINT32 array.
* For example, if each entry in the array is 11 bits, then you can stuff
* an array of 4 11-bit values into an array of 2 A_UINT32 values.
* The first 2 11-bit values will be stored in the first A_UINT32,
* and the last 2 11-bit values will be stored in the second A_UINT32.
*/
#define WMI_PACKED_ARR_SIZE(num_entries,bits_per_entry) \
(((num_entries) / (32 / (bits_per_entry))) + \
(((num_entries) % (32 / (bits_per_entry))) ? 1 : 0))
#define WMI_RETURN_STRING(str) case ((str)): return (uint8_t *)(# str);
static INLINE A_UINT32 wmi_packed_arr_get_bits(A_UINT32 *arr,
A_UINT32 entry_index, A_UINT32 bits_per_entry)
{
A_UINT32 entries_per_uint = (32 / bits_per_entry);
A_UINT32 uint_index = (entry_index / entries_per_uint);
A_UINT32 num_entries_in_prev_uints = (uint_index * entries_per_uint);
A_UINT32 index_in_uint = (entry_index - num_entries_in_prev_uints);
A_UINT32 start_bit_in_uint = (index_in_uint * bits_per_entry);
return ((arr[uint_index] >> start_bit_in_uint) &
(( 1 << bits_per_entry) - 1));
}
static INLINE void wmi_packed_arr_set_bits(A_UINT32 *arr, A_UINT32 entry_index,
A_UINT32 bits_per_entry, A_UINT32 val)
{
A_UINT32 entries_per_uint = (32 / bits_per_entry);
A_UINT32 uint_index = (entry_index / entries_per_uint);
A_UINT32 num_entries_in_prev_uints = (uint_index * entries_per_uint);
A_UINT32 index_in_uint = (entry_index - num_entries_in_prev_uints);
A_UINT32 start_bit_in_uint = (index_in_uint * bits_per_entry);
arr[uint_index] &= ~(((1 << bits_per_entry) - 1) << start_bit_in_uint);
arr[uint_index] |=
((val & ((1 << bits_per_entry) - 1)) << start_bit_in_uint);
}
/** 2 word representation of MAC addr */
typedef struct {
/** upper 4 bytes of MAC address */
A_UINT32 mac_addr31to0;
/** lower 2 bytes of MAC address */
A_UINT32 mac_addr47to32;
} wmi_mac_addr;
/** macro to convert MAC address from WMI word format to char array */
#define WMI_MAC_ADDR_TO_CHAR_ARRAY(pwmi_mac_addr,c_macaddr) do { \
(c_macaddr)[0] = ((pwmi_mac_addr)->mac_addr31to0) & 0xff; \
(c_macaddr)[1] = ( ((pwmi_mac_addr)->mac_addr31to0) >> 8) & 0xff; \
(c_macaddr)[2] = ( ((pwmi_mac_addr)->mac_addr31to0) >> 16) & 0xff; \
(c_macaddr)[3] = ( ((pwmi_mac_addr)->mac_addr31to0) >> 24) & 0xff; \
(c_macaddr)[4] = ((pwmi_mac_addr)->mac_addr47to32) & 0xff; \
(c_macaddr)[5] = ( ((pwmi_mac_addr)->mac_addr47to32) >> 8) & 0xff; \
} while(0)
/** macro to convert MAC address from char array to WMI word format */
#define WMI_CHAR_ARRAY_TO_MAC_ADDR(c_macaddr,pwmi_mac_addr) do { \
(pwmi_mac_addr)->mac_addr31to0 = \
( (c_macaddr)[0] | ((c_macaddr)[1] << 8) \
| ((c_macaddr)[2] << 16) | ((c_macaddr)[3] << 24) ); \
(pwmi_mac_addr)->mac_addr47to32 = \
( (c_macaddr)[4] | ((c_macaddr)[5] << 8)); \
} while(0)
/*
* wmi command groups.
*/
typedef enum {
/* 0 to 2 are reserved */
WMI_GRP_START=0x3,
WMI_GRP_SCAN=WMI_GRP_START, /* 0x3 */
WMI_GRP_PDEV, /* 0x4 */
WMI_GRP_VDEV, /* 0x5 */
WMI_GRP_PEER, /* 0x6 */
WMI_GRP_MGMT, /* 0x7 */
WMI_GRP_BA_NEG, /* 0x8 */
WMI_GRP_STA_PS, /* 0x9 */
WMI_GRP_DFS, /* 0xa */
WMI_GRP_ROAM, /* 0xb */
WMI_GRP_OFL_SCAN, /* 0xc */
WMI_GRP_P2P, /* 0xd */
WMI_GRP_AP_PS, /* 0xe */
WMI_GRP_RATE_CTRL, /* 0xf */
WMI_GRP_PROFILE, /* 0x10 */
WMI_GRP_SUSPEND, /* 0x11 */
WMI_GRP_BCN_FILTER, /* 0x12 */
WMI_GRP_WOW, /* 0x13 */
WMI_GRP_RTT, /* 0x14 */
WMI_GRP_SPECTRAL, /* 0x15 */
WMI_GRP_STATS, /* 0x16 */
WMI_GRP_ARP_NS_OFL, /* 0x17 */
WMI_GRP_NLO_OFL, /* 0x18 */
WMI_GRP_GTK_OFL, /* 0x19 */
WMI_GRP_CSA_OFL, /* 0x1a */
WMI_GRP_CHATTER, /* 0x1b */
WMI_GRP_TID_ADDBA, /* 0x1c */
WMI_GRP_MISC, /* 0x1d */
WMI_GRP_GPIO, /* 0x1e */
WMI_GRP_FWTEST, /* 0x1f */
WMI_GRP_TDLS, /* 0x20 */
WMI_GRP_RESMGR, /* 0x21 */
WMI_GRP_STA_SMPS, /* 0x22 */
WMI_GRP_WLAN_HB, /* 0x23 */
WMI_GRP_RMC, /* 0x24 */
WMI_GRP_MHF_OFL, /* 0x25 */
WMI_GRP_LOCATION_SCAN, /* 0x26 */
WMI_GRP_OEM, /* 0x27 */
WMI_GRP_NAN, /* 0x28 */
WMI_GRP_COEX, /* 0x29 */
WMI_GRP_OBSS_OFL, /* 0x2a */
WMI_GRP_LPI, /* 0x2b */
WMI_GRP_EXTSCAN, /* 0x2c */
WMI_GRP_DHCP_OFL, /* 0x2d */
WMI_GRP_IPA, /* 0x2e */
WMI_GRP_MDNS_OFL, /* 0x2f */
WMI_GRP_SAP_OFL, /* 0x30 */
WMI_GRP_OCB, /* 0x31 */
WMI_GRP_SOC, /* 0x32 */
WMI_GRP_PKT_FILTER, /* 0x33 */
WMI_GRP_MAWC, /* 0x34 */
WMI_GRP_PMF_OFFLOAD, /* 0x35 */
WMI_GRP_BPF_OFFLOAD, /* 0x36 Berkeley Packet Filter */
WMI_GRP_NAN_DATA, /* 0x37 */
WMI_GRP_PROTOTYPE, /* 0x38 */
WMI_GRP_MONITOR, /* 0x39 */
WMI_GRP_REGULATORY, /* 0x3a */
WMI_GRP_HW_DATA_FILTER, /* 0x3b */
WMI_GRP_WLM, /* 0x3c WLAN Latency Manager */
WMI_GRP_11K_OFFLOAD, /* 0x3d */
} WMI_GRP_ID;
#define WMI_CMD_GRP_START_ID(grp_id) (((grp_id) << 12) | 0x1)
#define WMI_EVT_GRP_START_ID(grp_id) (((grp_id) << 12) | 0x1)
/**
* Command IDs and commange events
*/
typedef enum {
/** initialize the wlan sub system */
WMI_INIT_CMDID=0x1,
/* Scan specific commands */
/** start scan request to FW */
WMI_START_SCAN_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_SCAN) ,
/** stop scan request to FW */
WMI_STOP_SCAN_CMDID,
/** full list of channels as defined by the regulatory that will be used by scanner */
WMI_SCAN_CHAN_LIST_CMDID,
/** overwrite default priority table in scan scheduler */
WMI_SCAN_SCH_PRIO_TBL_CMDID,
/** This command to adjust the priority and min.max_rest_time
* of an on ongoing scan request.
*/
WMI_SCAN_UPDATE_REQUEST_CMDID,
/** set OUI to be used in probe request if enabled */
WMI_SCAN_PROB_REQ_OUI_CMDID,
/** config adaptive dwell scan */
WMI_SCAN_ADAPTIVE_DWELL_CONFIG_CMDID,
/** Only applicable to DBS capable product */
WMI_SET_SCAN_DBS_DUTY_CYCLE_CMDID,
/* PDEV(physical device) specific commands */
/** set regulatorty ctl id used by FW to determine the exact ctl power limits */
WMI_PDEV_SET_REGDOMAIN_CMDID=WMI_CMD_GRP_START_ID(WMI_GRP_PDEV),
/** set channel. mainly used for supporting monitor mode */
WMI_PDEV_SET_CHANNEL_CMDID,
/** set pdev specific parameters */
WMI_PDEV_SET_PARAM_CMDID,
/** enable packet log */
WMI_PDEV_PKTLOG_ENABLE_CMDID,
/** disable packet log*/
WMI_PDEV_PKTLOG_DISABLE_CMDID,
/** set wmm parameters */
WMI_PDEV_SET_WMM_PARAMS_CMDID,
/** set HT cap ie that needs to be carried probe requests HT/VHT channels */
WMI_PDEV_SET_HT_CAP_IE_CMDID,
/** set VHT cap ie that needs to be carried on probe requests on VHT channels */
WMI_PDEV_SET_VHT_CAP_IE_CMDID,
/** Command to send the DSCP-to-TID map to the target */
WMI_PDEV_SET_DSCP_TID_MAP_CMDID,
/** set quiet ie parameters. primarily used in AP mode */
WMI_PDEV_SET_QUIET_MODE_CMDID,
/** Enable/Disable Green AP Power Save */
WMI_PDEV_GREEN_AP_PS_ENABLE_CMDID,
/** get TPC config for the current operating channel */
WMI_PDEV_GET_TPC_CONFIG_CMDID,
/** set the base MAC address for the physical device before a VDEV is created.
* For firmware that doesn't support this feature and this command, the pdev
* MAC address will not be changed. */
WMI_PDEV_SET_BASE_MACADDR_CMDID,
/* eeprom content dump , the same to bdboard data */
WMI_PDEV_DUMP_CMDID,
/* set LED configuration */
WMI_PDEV_SET_LED_CONFIG_CMDID,
/* Get Current temprature of chip in Celcius degree*/
WMI_PDEV_GET_TEMPERATURE_CMDID,
/* Set LED flashing behavior */
WMI_PDEV_SET_LED_FLASHING_CMDID,
/** Enable/Disable Smart Antenna */
WMI_PDEV_SMART_ANT_ENABLE_CMDID,
/** Set Smart Antenna RX antenna*/
WMI_PDEV_SMART_ANT_SET_RX_ANTENNA_CMDID,
/** Override the antenna switch table */
WMI_PDEV_SET_ANTENNA_SWITCH_TABLE_CMDID,
/** Override the CTL table */
WMI_PDEV_SET_CTL_TABLE_CMDID,
/** Override the array gain table */
WMI_PDEV_SET_MIMOGAIN_TABLE_CMDID,
/** FIPS test mode command */
WMI_PDEV_FIPS_CMDID,
/** get CCK ANI level */
WMI_PDEV_GET_ANI_CCK_CONFIG_CMDID,
/** get OFDM ANI level */
WMI_PDEV_GET_ANI_OFDM_CONFIG_CMDID,
/** NF Cal Power dBr/dBm */
WMI_PDEV_GET_NFCAL_POWER_CMDID,
/** TxPPDU TPC */
WMI_PDEV_GET_TPC_CMDID,
/* Set to enable MIB stats collection */
WMI_MIB_STATS_ENABLE_CMDID,
/** Set preferred channel list for DBS Mgr */
WMI_PDEV_SET_PCL_CMDID,
/** Set HW mode. Eg: single MAC, DBS & SBS, see soc_hw_mode_t for values */
WMI_PDEV_SET_HW_MODE_CMDID,
/** Set DFS, SCAN modes and other FW configurations */
WMI_PDEV_SET_MAC_CONFIG_CMDID,
/** Set per band and per pdev antenna chains */
WMI_PDEV_SET_ANTENNA_MODE_CMDID,
/** Periodic channel stats request command */
WMI_SET_PERIODIC_CHANNEL_STATS_CONFIG_CMDID,
/** WMI command for power debug framework */
WMI_PDEV_WAL_POWER_DEBUG_CMDID,
/** set per-AC rx reorder timeouts */
WMI_PDEV_SET_REORDER_TIMEOUT_VAL_CMDID,
/** WMI command for WOW gpio and type */
WMI_PDEV_SET_WAKEUP_CONFIG_CMDID,
/* Get current ANT's per chain's RSSI info */
WMI_PDEV_GET_ANTDIV_STATUS_CMDID,
/** WMI command for getting Chip Power Stats */
WMI_PDEV_GET_CHIP_POWER_STATS_CMDID,
/** set stats reporting thresholds - see WMI_REPORT_STATS_EVENTID */
WMI_PDEV_SET_STATS_THRESHOLD_CMDID,
/** vdev restart request for multiple vdevs */
WMI_PDEV_MULTIPLE_VDEV_RESTART_REQUEST_CMDID,
/** Pdev update packet routing command */
WMI_PDEV_UPDATE_PKT_ROUTING_CMDID,
/** Get Calibration data version details */
WMI_PDEV_CHECK_CAL_VERSION_CMDID,
/* Set Diversity Gain */
WMI_PDEV_SET_DIVERSITY_GAIN_CMDID,
/** Get chain RSSI and antena index command */
WMI_PDEV_DIV_GET_RSSI_ANTID_CMDID,
/** get bss chan info */
WMI_PDEV_BSS_CHAN_INFO_REQUEST_CMDID,
/** update pmk cache info */
WMI_PDEV_UPDATE_PMK_CACHE_CMDID,
/** update fils HLP */
WMI_PDEV_UPDATE_FILS_HLP_PKT_CMDID,
/** update ctltable request **/
WMI_PDEV_UPDATE_CTLTABLE_REQUEST_CMDID,
/** Command to set beacon OUI **/
WMI_PDEV_CONFIG_VENDOR_OUI_ACTION_CMDID,
/** enable/disable per-AC tx queue optimizations */
WMI_PDEV_SET_AC_TX_QUEUE_OPTIMIZED_CMDID,
/** enable/disable rx promiscuous mode */
WMI_PDEV_SET_RX_FILTER_PROMISCUOUS_CMDID,
/* set a generic direct DMA ring config */
WMI_PDEV_DMA_RING_CFG_REQ_CMDID,
/* VDEV (virtual device) specific commands */
/** vdev create */
WMI_VDEV_CREATE_CMDID=WMI_CMD_GRP_START_ID(WMI_GRP_VDEV),
/** vdev delete */
WMI_VDEV_DELETE_CMDID,
/** vdev start request */
WMI_VDEV_START_REQUEST_CMDID,
/** vdev restart request (RX only, NO TX, used for CAC period)*/
WMI_VDEV_RESTART_REQUEST_CMDID,
/** vdev up request */
WMI_VDEV_UP_CMDID,
/** vdev stop request */
WMI_VDEV_STOP_CMDID,
/** vdev down request */
WMI_VDEV_DOWN_CMDID,
/* set a vdev param */
WMI_VDEV_SET_PARAM_CMDID,
/* set a key (used for setting per peer unicast and per vdev multicast) */
WMI_VDEV_INSTALL_KEY_CMDID,
/* wnm sleep mode command */
WMI_VDEV_WNM_SLEEPMODE_CMDID,
WMI_VDEV_WMM_ADDTS_CMDID,
WMI_VDEV_WMM_DELTS_CMDID,
WMI_VDEV_SET_WMM_PARAMS_CMDID,
WMI_VDEV_SET_GTX_PARAMS_CMDID,
WMI_VDEV_IPSEC_NATKEEPALIVE_FILTER_CMDID,
WMI_VDEV_PLMREQ_START_CMDID,
WMI_VDEV_PLMREQ_STOP_CMDID,
/* TSF timestamp action for specified vdev */
WMI_VDEV_TSF_TSTAMP_ACTION_CMDID,
/** set the additional IEs in probe requests for scan or
* assoc req etc for frames FW locally generates */
WMI_VDEV_SET_IE_CMDID,
WMI_VDEV_RATEMASK_CMDID,
/** ATF VDEV REQUEST commands. */
WMI_VDEV_ATF_REQUEST_CMDID,
/** Command to send the DSCP-to-TID map to the target for VAP */
WMI_VDEV_SET_DSCP_TID_MAP_CMDID,
/* Configure filter for Neighbor Rx Pkt (smart mesh selective listening) */
WMI_VDEV_FILTER_NEIGHBOR_RX_PACKETS_CMDID,
/** set quiet ie parameters. primarily used in AP mode */
WMI_VDEV_SET_QUIET_MODE_CMDID,
/** To set custom aggregation size for per vdev */
WMI_VDEV_SET_CUSTOM_AGGR_SIZE_CMDID,
/* DISA feature: Encrypt-decrypt data request */
WMI_VDEV_ENCRYPT_DECRYPT_DATA_REQ_CMDID,
/** Command to enable mac randomizaton **/
WMI_VDEV_ADD_MAC_ADDR_TO_RX_FILTER_CMDID,
/** WMI commands related to dbg arp stats */
WMI_VDEV_SET_ARP_STAT_CMDID,
WMI_VDEV_GET_ARP_STAT_CMDID,
/** get tx power for the current vdev */
WMI_VDEV_GET_TX_POWER_CMDID,
/* limit STA offchannel activity */
WMI_VDEV_LIMIT_OFFCHAN_CMDID,
/* peer specific commands */
/** create a peer */
WMI_PEER_CREATE_CMDID=WMI_CMD_GRP_START_ID(WMI_GRP_PEER),
/** delete a peer */
WMI_PEER_DELETE_CMDID,
/** flush specific tid queues of a peer */
WMI_PEER_FLUSH_TIDS_CMDID,
/** set a parameter of a peer */
WMI_PEER_SET_PARAM_CMDID,
/** set peer to associated state. will cary all parameters determined during assocication time */
WMI_PEER_ASSOC_CMDID,
/**add a wds (4 address ) entry. used only for testing WDS feature on AP products */
WMI_PEER_ADD_WDS_ENTRY_CMDID,
/**remove wds (4 address ) entry. used only for testing WDS feature on AP products */
WMI_PEER_REMOVE_WDS_ENTRY_CMDID,
/** set up mcast group infor for multicast to unicast conversion */
WMI_PEER_MCAST_GROUP_CMDID,
/** request peer info from FW. FW shall respond with PEER_INFO_EVENTID */
WMI_PEER_INFO_REQ_CMDID,
/** request the estimated link speed for the peer. FW shall respond with
* WMI_PEER_ESTIMATED_LINKSPEED_EVENTID.
*/
WMI_PEER_GET_ESTIMATED_LINKSPEED_CMDID,
/** Set the conditions to report peer justified rate to driver
* The justified rate means the user-rate is justified by PER.
*/
WMI_PEER_SET_RATE_REPORT_CONDITION_CMDID,
/** update a wds (4 address) entry */
WMI_PEER_UPDATE_WDS_ENTRY_CMDID,
/** add a proxy sta entry */
WMI_PEER_ADD_PROXY_STA_ENTRY_CMDID,
/** Set Smart Antenna TX antenna */
WMI_PEER_SMART_ANT_SET_TX_ANTENNA_CMDID,
/** Set Smart Antenna TX train info */
WMI_PEER_SMART_ANT_SET_TRAIN_INFO_CMDID,
/** Set SA node config options */
WMI_PEER_SMART_ANT_SET_NODE_CONFIG_OPS_CMDID,
/** ATF PEER REQUEST commands */
WMI_PEER_ATF_REQUEST_CMDID,
/** bandwidth fairness (BWF) peer configuration request command */
WMI_PEER_BWF_REQUEST_CMDID,
/** rx reorder queue setup for peer/tid */
WMI_PEER_REORDER_QUEUE_SETUP_CMDID,
/** rx reorder queue remove for peer/tid */
WMI_PEER_REORDER_QUEUE_REMOVE_CMDID,
/** specify a limit for rx A-MPDU block size */
WMI_PEER_SET_RX_BLOCKSIZE_CMDID,
/**
* request peer antdiv info from FW. FW shall respond with
* PEER_ANTDIV_INFO_EVENTID
*/
WMI_PEER_ANTDIV_INFO_REQ_CMDID,
/** Peer/Tid/Msduq threshold update */
WMI_PEER_TID_MSDUQ_QDEPTH_THRESH_UPDATE_CMDID,
/* beacon/management specific commands */
/** transmit beacon by reference . used for transmitting beacon on low latency interface like pcie */
WMI_BCN_TX_CMDID=WMI_CMD_GRP_START_ID(WMI_GRP_MGMT),
/** transmit beacon by value */
WMI_PDEV_SEND_BCN_CMDID,
/** set the beacon template. used in beacon offload mode to setup the
* the common beacon template with the FW to be used by FW to generate beacons */
WMI_BCN_TMPL_CMDID,
/** set beacon filter with FW */
WMI_BCN_FILTER_RX_CMDID,
/* enable/disable filtering of probe requests in the firmware */
WMI_PRB_REQ_FILTER_RX_CMDID,
/** transmit management frame by value. will be deprecated */
WMI_MGMT_TX_CMDID,
/** set the probe response template. used in beacon offload mode to setup the
* the common probe response template with the FW to be used by FW to generate
* probe responses */
WMI_PRB_TMPL_CMDID,
/** Transmit Mgmt frame by reference */
WMI_MGMT_TX_SEND_CMDID,
/** Transmit data frame by reference */
WMI_OFFCHAN_DATA_TX_SEND_CMDID,
/** transmit FILS Discovery frame by value */
WMI_PDEV_SEND_FD_CMDID,
/** Cmd to enable/disable offloaded beacons */
WMI_BCN_OFFLOAD_CTRL_CMDID,
/** commands to directly control ba negotiation directly from host. only used in test mode */
/** turn off FW Auto addba mode and let host control addba */
WMI_ADDBA_CLEAR_RESP_CMDID=WMI_CMD_GRP_START_ID(WMI_GRP_BA_NEG),
/** send add ba request */
WMI_ADDBA_SEND_CMDID,
WMI_ADDBA_STATUS_CMDID,
/** send del ba */
WMI_DELBA_SEND_CMDID,
/** set add ba response will be used by FW to generate addba response*/
WMI_ADDBA_SET_RESP_CMDID,
/** send single VHT MPDU with AMSDU */
WMI_SEND_SINGLEAMSDU_CMDID,
/** Station power save specific config */
/** enable/disable station powersave */
WMI_STA_POWERSAVE_MODE_CMDID=WMI_CMD_GRP_START_ID(WMI_GRP_STA_PS),
/** set station power save specific parameter */
WMI_STA_POWERSAVE_PARAM_CMDID,
/** set station mimo powersave mode */
WMI_STA_MIMO_PS_MODE_CMDID,
/** DFS-specific commands */
/** enable DFS (radar detection)*/
WMI_PDEV_DFS_ENABLE_CMDID=WMI_CMD_GRP_START_ID(WMI_GRP_DFS),
/** disable DFS (radar detection)*/
WMI_PDEV_DFS_DISABLE_CMDID,
/** enable DFS phyerr/parse filter offload */
WMI_DFS_PHYERR_FILTER_ENA_CMDID,
/** enable DFS phyerr/parse filter offload */
WMI_DFS_PHYERR_FILTER_DIS_CMDID,
/** enable DFS phyerr processing offload */
WMI_PDEV_DFS_PHYERR_OFFLOAD_ENABLE_CMDID,
/** disable DFS phyerr processing offload */
WMI_PDEV_DFS_PHYERR_OFFLOAD_DISABLE_CMDID,
/** set ADFS channel config */
WMI_VDEV_ADFS_CH_CFG_CMDID,
/** abort ADFS off-channel-availability-check currently in progress */
WMI_VDEV_ADFS_OCAC_ABORT_CMDID,
/* Roaming specific commands */
/** set roam scan mode */
WMI_ROAM_SCAN_MODE=WMI_CMD_GRP_START_ID(WMI_GRP_ROAM),
/** set roam scan rssi threshold below which roam scan is enabled */
WMI_ROAM_SCAN_RSSI_THRESHOLD,
/** set roam scan period for periodic roam scan mode */
WMI_ROAM_SCAN_PERIOD,
/** set roam scan trigger rssi change threshold */
WMI_ROAM_SCAN_RSSI_CHANGE_THRESHOLD,
/** set roam AP profile */
WMI_ROAM_AP_PROFILE,
/** set channel list for roam scans */
WMI_ROAM_CHAN_LIST,
/** Stop scan command */
WMI_ROAM_SCAN_CMD,
/** roaming sme offload sync complete */
WMI_ROAM_SYNCH_COMPLETE,
/** set ric request element for 11r roaming */
WMI_ROAM_SET_RIC_REQUEST_CMDID,
/** Invoke roaming forcefully */
WMI_ROAM_INVOKE_CMDID,
/** roaming filter cmd to allow further filtering of roaming candidate */
WMI_ROAM_FILTER_CMDID,
/** set gateway ip, mac and retries for subnet change detection */
WMI_ROAM_SUBNET_CHANGE_CONFIG_CMDID,
/** configure thresholds for MAWC */
WMI_ROAM_CONFIGURE_MAWC_CMDID,
/** configure MultiBand Operation(refer WFA MBO spec) parameter */
WMI_ROAM_SET_MBO_PARAM_CMDID, /* DEPRECATED */
/** configure packet error rate threshold for triggering roaming */
WMI_ROAM_PER_CONFIG_CMDID,
/** configure BSS Transition Management (BTM) offload for roaming */
WMI_ROAM_BTM_CONFIG_CMDID,
/** Enable or Disable Fast Initial Link Setup (FILS) feature */
WMI_ENABLE_FILS_CMDID,
/** offload scan specific commands */
/** set offload scan AP profile */
WMI_OFL_SCAN_ADD_AP_PROFILE=WMI_CMD_GRP_START_ID(WMI_GRP_OFL_SCAN),
/** remove offload scan AP profile */
WMI_OFL_SCAN_REMOVE_AP_PROFILE,
/** set offload scan period */
WMI_OFL_SCAN_PERIOD,
/* P2P specific commands */
/**set P2P device info. FW will used by FW to create P2P IE to be carried in probe response
* generated during p2p listen and for p2p discoverability */
WMI_P2P_DEV_SET_DEVICE_INFO=WMI_CMD_GRP_START_ID(WMI_GRP_P2P),
/** enable/disable p2p discoverability on STA/AP VDEVs */
WMI_P2P_DEV_SET_DISCOVERABILITY,
/** set p2p ie to be carried in beacons generated by FW for GO */
WMI_P2P_GO_SET_BEACON_IE,
/** set p2p ie to be carried in probe response frames generated by FW for GO */
WMI_P2P_GO_SET_PROBE_RESP_IE,
/** set the vendor specific p2p ie data. FW will use this to parse the P2P NoA
* attribute in the beacons/probe responses received.
*/
WMI_P2P_SET_VENDOR_IE_DATA_CMDID,
/** set the configure of p2p find offload */
WMI_P2P_DISC_OFFLOAD_CONFIG_CMDID,
/** set the vendor specific p2p ie data for p2p find offload using */
WMI_P2P_DISC_OFFLOAD_APPIE_CMDID,
/** set the BSSID/device name pattern of p2p find offload */
WMI_P2P_DISC_OFFLOAD_PATTERN_CMDID,
/** set OppPS related parameters **/
WMI_P2P_SET_OPPPS_PARAM_CMDID,
/** set listen offload start related parameters */
WMI_P2P_LISTEN_OFFLOAD_START_CMDID,
/** set listen offload stop related parameters */
WMI_P2P_LISTEN_OFFLOAD_STOP_CMDID,
/** AP power save specific config */
/** set AP power save specific param */
WMI_AP_PS_PEER_PARAM_CMDID=WMI_CMD_GRP_START_ID(WMI_GRP_AP_PS),
/** set AP UAPSD coex pecific param */
WMI_AP_PS_PEER_UAPSD_COEX_CMDID,
/** set Enhanced Green AP param */
WMI_AP_PS_EGAP_PARAM_CMDID,
/** Rate-control specific commands */
WMI_PEER_RATE_RETRY_SCHED_CMDID=WMI_CMD_GRP_START_ID(WMI_GRP_RATE_CTRL),
/** WLAN Profiling commands. */
WMI_WLAN_PROFILE_TRIGGER_CMDID=WMI_CMD_GRP_START_ID(WMI_GRP_PROFILE),
WMI_WLAN_PROFILE_SET_HIST_INTVL_CMDID,
WMI_WLAN_PROFILE_GET_PROFILE_DATA_CMDID,
WMI_WLAN_PROFILE_ENABLE_PROFILE_ID_CMDID,
WMI_WLAN_PROFILE_LIST_PROFILE_ID_CMDID,
/** Suspend resume command Ids */
WMI_PDEV_SUSPEND_CMDID=WMI_CMD_GRP_START_ID(WMI_GRP_SUSPEND),
WMI_PDEV_RESUME_CMDID,
/* Beacon filter commands */
/** add a beacon filter */
WMI_ADD_BCN_FILTER_CMDID=WMI_CMD_GRP_START_ID(WMI_GRP_BCN_FILTER),
/** remove a beacon filter */
WMI_RMV_BCN_FILTER_CMDID,
/* WOW Specific WMI commands*/
/** add pattern for awake */
WMI_WOW_ADD_WAKE_PATTERN_CMDID=WMI_CMD_GRP_START_ID(WMI_GRP_WOW),
/** deleta a wake pattern */
WMI_WOW_DEL_WAKE_PATTERN_CMDID,
/** enable/deisable wake event */
WMI_WOW_ENABLE_DISABLE_WAKE_EVENT_CMDID,
/** enable WOW */
WMI_WOW_ENABLE_CMDID,
/** host woke up from sleep event to FW. Generated in response to WOW Hardware event */
WMI_WOW_HOSTWAKEUP_FROM_SLEEP_CMDID,
/* IOAC add keep alive cmd. */
WMI_WOW_IOAC_ADD_KEEPALIVE_CMDID,
/* IOAC del keep alive cmd. */
WMI_WOW_IOAC_DEL_KEEPALIVE_CMDID,
/* IOAC add pattern for awake */
WMI_WOW_IOAC_ADD_WAKE_PATTERN_CMDID,
/* IOAC deleta a wake pattern */
WMI_WOW_IOAC_DEL_WAKE_PATTERN_CMDID,
/* D0-WOW enable or disable cmd */
WMI_D0_WOW_ENABLE_DISABLE_CMDID,
/* enable extend WoW */
WMI_EXTWOW_ENABLE_CMDID,
/* Extend WoW command to configure app type1 parameter */
WMI_EXTWOW_SET_APP_TYPE1_PARAMS_CMDID,
/* Extend WoW command to configure app type2 parameter */
WMI_EXTWOW_SET_APP_TYPE2_PARAMS_CMDID,
/* enable ICMPv6 Network advertisement filtering */
WMI_WOW_ENABLE_ICMPV6_NA_FLT_CMDID,
/*
* Set a pattern to match UDP packet in WOW mode.
* If match, construct a tx frame in a local buffer
* to send through the peer AP to the entity in the
* IP network that sent the UDP packet to this STA.
*/
WMI_WOW_UDP_SVC_OFLD_CMDID,
/* configure WOW host wakeup PIN pattern */
WMI_WOW_HOSTWAKEUP_GPIO_PIN_PATTERN_CONFIG_CMDID,
/* Set which action category should wake the host from suspend */
WMI_WOW_SET_ACTION_WAKE_UP_CMDID,
/* RTT measurement related cmd */
/** request to make an RTT measurement */
WMI_RTT_MEASREQ_CMDID=WMI_CMD_GRP_START_ID(WMI_GRP_RTT),
/** request to report a tsf measurement */
WMI_RTT_TSF_CMDID,
/** spectral scan command */
/** configure spectral scan */
WMI_VDEV_SPECTRAL_SCAN_CONFIGURE_CMDID=WMI_CMD_GRP_START_ID(WMI_GRP_SPECTRAL),
/** enable/disable spectral scan and trigger */
WMI_VDEV_SPECTRAL_SCAN_ENABLE_CMDID,
/* F/W stats */
/** one time request for stats */
WMI_REQUEST_STATS_CMDID=WMI_CMD_GRP_START_ID(WMI_GRP_STATS),
/** Push MCC Adaptive Scheduler Stats to Firmware */
WMI_MCC_SCHED_TRAFFIC_STATS_CMDID,
/** one time request for txrx stats */
WMI_REQUEST_STATS_EXT_CMDID,
/* Link Layer stats */
/** Request for link layer stats */
WMI_REQUEST_LINK_STATS_CMDID,
/** Request for setting params to link layer stats */
WMI_START_LINK_STATS_CMDID,
/** Request to clear stats*/
WMI_CLEAR_LINK_STATS_CMDID,
/** Request for getting the Firmware Memory Dump */
WMI_GET_FW_MEM_DUMP_CMDID,
/** Request to flush of the buffered debug messages */
WMI_DEBUG_MESG_FLUSH_CMDID,
/** Cmd to configure the verbose level */
WMI_DIAG_EVENT_LOG_CONFIG_CMDID,
/** One time request for wlan stats */
WMI_REQUEST_WLAN_STATS_CMDID,
/** Request for getting RCPI of peer */
WMI_REQUEST_RCPI_CMDID,
/** One time request for peer stats info */
WMI_REQUEST_PEER_STATS_INFO_CMDID,
/** One time request for radio channel stats */
WMI_REQUEST_RADIO_CHAN_STATS_CMDID,
/** ARP OFFLOAD REQUEST*/
WMI_SET_ARP_NS_OFFLOAD_CMDID=WMI_CMD_GRP_START_ID(WMI_GRP_ARP_NS_OFL),
/** Proactive ARP Response Add Pattern Command*/
WMI_ADD_PROACTIVE_ARP_RSP_PATTERN_CMDID,
/** Proactive ARP Response Del Pattern Command*/
WMI_DEL_PROACTIVE_ARP_RSP_PATTERN_CMDID,
/** NS offload confid*/
WMI_NETWORK_LIST_OFFLOAD_CONFIG_CMDID=WMI_CMD_GRP_START_ID(WMI_GRP_NLO_OFL),
/** APFIND Config */
WMI_APFIND_CMDID,
/** Passpoint list config */
WMI_PASSPOINT_LIST_CONFIG_CMDID,
/** configure supprssing parameters for MAWC */
WMI_NLO_CONFIGURE_MAWC_CMDID,
/* GTK offload Specific WMI commands*/
WMI_GTK_OFFLOAD_CMDID=WMI_CMD_GRP_START_ID(WMI_GRP_GTK_OFL),
/* CSA offload Specific WMI commands*/
/** csa offload enable */
WMI_CSA_OFFLOAD_ENABLE_CMDID=WMI_CMD_GRP_START_ID(WMI_GRP_CSA_OFL),
/** chan switch command */
WMI_CSA_OFFLOAD_CHANSWITCH_CMDID,
/* Chatter commands*/
/* Change chatter mode of operation */
WMI_CHATTER_SET_MODE_CMDID=WMI_CMD_GRP_START_ID(WMI_GRP_CHATTER),
/** chatter add coalescing filter command */
WMI_CHATTER_ADD_COALESCING_FILTER_CMDID,
/** chatter delete coalescing filter command */
WMI_CHATTER_DELETE_COALESCING_FILTER_CMDID,
/** chatter coalecing query command */
WMI_CHATTER_COALESCING_QUERY_CMDID,
/**addba specific commands */
/** start the aggregation on this TID */
WMI_PEER_TID_ADDBA_CMDID=WMI_CMD_GRP_START_ID(WMI_GRP_TID_ADDBA),
/** stop the aggregation on this TID */
WMI_PEER_TID_DELBA_CMDID,
/** set station mimo powersave method */
WMI_STA_DTIM_PS_METHOD_CMDID,
/** Configure the Station UAPSD AC Auto Trigger Parameters */
WMI_STA_UAPSD_AUTO_TRIG_CMDID,
/** Configure the Keep Alive Parameters */
WMI_STA_KEEPALIVE_CMDID,
/* Request ssn from target for a sta/tid pair */
WMI_BA_REQ_SSN_CMDID,
/* misc command group */
/** echo command mainly used for testing */
WMI_ECHO_CMDID=WMI_CMD_GRP_START_ID(WMI_GRP_MISC),
/* !!IMPORTANT!!
* If you need to add a new WMI command to the WMI_GRP_MISC sub-group,
* please make sure you add it BEHIND WMI_PDEV_UTF_CMDID,
* as we MUST have a fixed value here to maintain compatibility between
* UTF and the ART2 driver
*/
/** UTF WMI commands */
WMI_PDEV_UTF_CMDID,
/** set debug log config */
WMI_DBGLOG_CFG_CMDID,
/* QVIT specific command id */
WMI_PDEV_QVIT_CMDID,
/* Factory Testing Mode request command
* used for integrated chipsets */
WMI_PDEV_FTM_INTG_CMDID,
/* set and get keepalive parameters command */
WMI_VDEV_SET_KEEPALIVE_CMDID,
WMI_VDEV_GET_KEEPALIVE_CMDID,
/* For fw recovery test command */
WMI_FORCE_FW_HANG_CMDID,
/* Set Mcast/Bdcast filter */
WMI_SET_MCASTBCAST_FILTER_CMDID,
/** set thermal management params **/
WMI_THERMAL_MGMT_CMDID,
/** set host auto shutdown params **/
WMI_HOST_AUTO_SHUTDOWN_CFG_CMDID,
/** set tpc chainmask config command */
WMI_TPC_CHAINMASK_CONFIG_CMDID,
/** set Antenna diversity command */
WMI_SET_ANTENNA_DIVERSITY_CMDID,
/** Set OCB Sched Request, deprecated */
WMI_OCB_SET_SCHED_CMDID,
/** Set rssi monitoring config command */
WMI_RSSI_BREACH_MONITOR_CONFIG_CMDID,
/** Enable/disable Large Receive Offload processing; provide cfg params */
WMI_LRO_CONFIG_CMDID,
/** transfer data from host to firmware to write flash */
WMI_TRANSFER_DATA_TO_FLASH_CMDID,
/** Command to enable/disable filtering of multicast IP with unicast mac */
WMI_CONFIG_ENHANCED_MCAST_FILTER_CMDID,
/** Command to control WISA mode */
WMI_VDEV_WISA_CMDID,
/** set debug log time stamp sync up with host */
WMI_DBGLOG_TIME_STAMP_SYNC_CMDID,
/** Command for host to set/delete multiple mcast filters */
WMI_SET_MULTIPLE_MCAST_FILTER_CMDID,
/** upload a requested section of data from firmware flash to host */
WMI_READ_DATA_FROM_FLASH_CMDID,
/* Thermal Throttling SET CONF commands */
WMI_THERM_THROT_SET_CONF_CMDID,
/* Offload 11k related requests */
WMI_11K_OFFLOAD_REPORT_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_11K_OFFLOAD),
/* invoke neighbor report from FW */
WMI_11K_INVOKE_NEIGHBOR_REPORT_CMDID,
/* GPIO Configuration */
WMI_GPIO_CONFIG_CMDID=WMI_CMD_GRP_START_ID(WMI_GRP_GPIO),
WMI_GPIO_OUTPUT_CMDID,
/* Txbf configuration command */
WMI_TXBF_CMDID,
/* FWTEST Commands */
WMI_FWTEST_VDEV_MCC_SET_TBTT_MODE_CMDID=WMI_CMD_GRP_START_ID(WMI_GRP_FWTEST),
/** set NoA descs **/
WMI_FWTEST_P2P_SET_NOA_PARAM_CMDID,
/* UNIT Tests */
WMI_UNIT_TEST_CMDID,
/* set debug and tuning parameters */
WMI_FWTEST_CMDID,
/* Q-Boost configuration test commands */
WMI_QBOOST_CFG_CMDID,
/** TDLS Configuration */
/** enable/disable TDLS */
WMI_TDLS_SET_STATE_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_TDLS),
/** set tdls peer state */
WMI_TDLS_PEER_UPDATE_CMDID,
/** TDLS Offchannel control */
WMI_TDLS_SET_OFFCHAN_MODE_CMDID,
/** Resmgr Configuration */
/** Adaptive OCS is enabled by default in the FW. This command is used to
* disable FW based adaptive OCS.
*/
WMI_RESMGR_ADAPTIVE_OCS_ENABLE_DISABLE_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_RESMGR),
/** set the requested channel time quota for the home channels */
WMI_RESMGR_SET_CHAN_TIME_QUOTA_CMDID,
/** set the requested latency for the home channels */
WMI_RESMGR_SET_CHAN_LATENCY_CMDID,
/** STA SMPS Configuration */
/** force SMPS mode */
WMI_STA_SMPS_FORCE_MODE_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_STA_SMPS),
/** set SMPS parameters */
WMI_STA_SMPS_PARAM_CMDID,
/* Wlan HB commands*/
/* enalbe/disable wlan HB */
WMI_HB_SET_ENABLE_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_WLAN_HB),
/* set tcp parameters for wlan HB */
WMI_HB_SET_TCP_PARAMS_CMDID,
/* set tcp pkt filter for wlan HB */
WMI_HB_SET_TCP_PKT_FILTER_CMDID,
/* set udp parameters for wlan HB */
WMI_HB_SET_UDP_PARAMS_CMDID,
/* set udp pkt filter for wlan HB */
WMI_HB_SET_UDP_PKT_FILTER_CMDID,
/* OIC ping keep alive */
WMI_HB_OIC_PING_OFFLOAD_PARAM_CMDID,
WMI_HB_OIC_PING_OFFLOAD_SET_ENABLE_CMDID,
/* WMI commands related to DHCP Lease Renew Offload **/
WMI_HB_DHCP_LEASE_RENEW_OFFLOAD_CMDID,
/** Wlan RMC commands*/
/** enable/disable RMC */
WMI_RMC_SET_MODE_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_RMC),
/** configure action frame period */
WMI_RMC_SET_ACTION_PERIOD_CMDID,
/** For debug/future enhancement purposes only,
* configures/finetunes RMC algorithms */
WMI_RMC_CONFIG_CMDID,
_place_holder_cmd_1,
/** WLAN MHF offload commands */
/** enable/disable MHF offload */
WMI_MHF_OFFLOAD_SET_MODE_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_MHF_OFL),
/** Plumb routing table for MHF offload */
WMI_MHF_OFFLOAD_PLUMB_ROUTING_TBL_CMDID,
/*location scan commands*/
/*start batch scan*/
WMI_BATCH_SCAN_ENABLE_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_LOCATION_SCAN),
/*stop batch scan*/
WMI_BATCH_SCAN_DISABLE_CMDID,
/*get batch scan result*/
WMI_BATCH_SCAN_TRIGGER_RESULT_CMDID,
/* OEM related cmd */
WMI_OEM_REQ_CMDID=WMI_CMD_GRP_START_ID(WMI_GRP_OEM),
WMI_OEM_REQUEST_CMDID, /* UNUSED */
/* OEM related cmd used for Low Power ranging */
WMI_LPI_OEM_REQ_CMDID,
WMI_OEM_DMA_RING_CFG_REQ_CMDID,
/** Nan Request */
WMI_NAN_CMDID=WMI_CMD_GRP_START_ID(WMI_GRP_NAN),
/** Modem power state command */
WMI_MODEM_POWER_STATE_CMDID=WMI_CMD_GRP_START_ID(WMI_GRP_COEX),
WMI_CHAN_AVOID_UPDATE_CMDID,
WMI_COEX_CONFIG_CMDID,
WMI_CHAN_AVOID_RPT_ALLOW_CMDID,
WMI_COEX_GET_ANTENNA_ISOLATION_CMDID,
WMI_SAR_LIMITS_CMDID,
WMI_SAR_GET_LIMITS_CMDID,
/**
* OBSS scan offload enable/disable commands
* OBSS scan enable CMD will send to FW after VDEV UP, if these conditions are true:
* 1. WMI_SERVICE_OBSS_SCAN is reported by FW in service ready,
* 2. STA connect to a 2.4Ghz ht20/ht40 AP,
* 3. AP enable 20/40 coexistence (OBSS_IE-74 can be found in beacon or association response)
* If OBSS parameters from beacon changed, also use enable CMD to update parameters.
* OBSS scan disable CMD will send to FW if have enabled when tearing down connection.
*/
WMI_OBSS_SCAN_ENABLE_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_OBSS_OFL),
WMI_OBSS_SCAN_DISABLE_CMDID,
/**LPI commands*/
/**LPI mgmt snooping config command*/
WMI_LPI_MGMT_SNOOPING_CONFIG_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_LPI),
/**LPI scan start command*/
WMI_LPI_START_SCAN_CMDID,
/**LPI scan stop command*/
WMI_LPI_STOP_SCAN_CMDID,
/** ExtScan commands */
WMI_EXTSCAN_START_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_EXTSCAN),
WMI_EXTSCAN_STOP_CMDID,
WMI_EXTSCAN_CONFIGURE_WLAN_CHANGE_MONITOR_CMDID,
WMI_EXTSCAN_CONFIGURE_HOTLIST_MONITOR_CMDID,
WMI_EXTSCAN_GET_CACHED_RESULTS_CMDID,
WMI_EXTSCAN_GET_WLAN_CHANGE_RESULTS_CMDID,
WMI_EXTSCAN_SET_CAPABILITIES_CMDID,
WMI_EXTSCAN_GET_CAPABILITIES_CMDID,
WMI_EXTSCAN_CONFIGURE_HOTLIST_SSID_MONITOR_CMDID,
WMI_EXTSCAN_CONFIGURE_MAWC_CMDID,
/** DHCP server offload commands */
WMI_SET_DHCP_SERVER_OFFLOAD_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_DHCP_OFL),
/** IPA Offload features related commands */
WMI_IPA_OFFLOAD_ENABLE_DISABLE_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_IPA),
/** mDNS responder offload commands */
WMI_MDNS_OFFLOAD_ENABLE_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_MDNS_OFL),
WMI_MDNS_SET_FQDN_CMDID,
WMI_MDNS_SET_RESPONSE_CMDID,
WMI_MDNS_GET_STATS_CMDID,
/* enable/disable AP Authentication offload */
WMI_SAP_OFL_ENABLE_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_SAP_OFL),
WMI_SAP_SET_BLACKLIST_PARAM_CMDID,
WMI_SAP_OBSS_DETECTION_CFG_CMDID,
/** Out-of-context-of-BSS (OCB) commands */
WMI_OCB_SET_CONFIG_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_OCB),
WMI_OCB_SET_UTC_TIME_CMDID,
WMI_OCB_START_TIMING_ADVERT_CMDID,
WMI_OCB_STOP_TIMING_ADVERT_CMDID,
WMI_OCB_GET_TSF_TIMER_CMDID,
WMI_DCC_GET_STATS_CMDID,
WMI_DCC_CLEAR_STATS_CMDID,
WMI_DCC_UPDATE_NDL_CMDID,
/* System-On-Chip commands */
WMI_SOC_SET_PCL_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_SOC),
WMI_SOC_SET_HW_MODE_CMDID,
WMI_SOC_SET_DUAL_MAC_CONFIG_CMDID,
WMI_SOC_SET_ANTENNA_MODE_CMDID,
/* packet filter commands */
WMI_PACKET_FILTER_CONFIG_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_PKT_FILTER),
WMI_PACKET_FILTER_ENABLE_CMDID,
/** Motion Aided WiFi Connectivity (MAWC) commands */
WMI_MAWC_SENSOR_REPORT_IND_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_MAWC),
/** WMI commands related to PMF 11w Offload */
WMI_PMF_OFFLOAD_SET_SA_QUERY_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_PMF_OFFLOAD),
/** WMI commands related to pkt filter (BPF) offload */
WMI_BPF_GET_CAPABILITY_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_BPF_OFFLOAD),
WMI_BPF_GET_VDEV_STATS_CMDID,
WMI_BPF_SET_VDEV_INSTRUCTIONS_CMDID,
WMI_BPF_DEL_VDEV_INSTRUCTIONS_CMDID,
WMI_BPF_SET_VDEV_ACTIVE_MODE_CMDID,
/** WMI commands related to monitor mode. */
WMI_MNT_FILTER_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_MONITOR),
/** WMI commands related to regulatory offload */
WMI_SET_CURRENT_COUNTRY_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_REGULATORY),
WMI_11D_SCAN_START_CMDID,
WMI_11D_SCAN_STOP_CMDID,
WMI_SET_INIT_COUNTRY_CMDID,
/**
* Nan Data commands
* NDI - NAN Data Interface
* NDP - NAN Data Path
*/
/* Commands in prototyping phase */
WMI_NDI_GET_CAP_REQ_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_PROTOTYPE),
WMI_NDP_INITIATOR_REQ_CMDID,
WMI_NDP_RESPONDER_REQ_CMDID,
WMI_NDP_END_REQ_CMDID,
/** WMI commands related to HW data filtering **/
WMI_HW_DATA_FILTER_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_HW_DATA_FILTER),
/** WMI commands related to WLAN latency module **/
WMI_WLM_CONFIG_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_WLM),
} WMI_CMD_ID;
typedef enum {
/** WMI service is ready; after this event WMI messages can be sent/received */
WMI_SERVICE_READY_EVENTID=0x1,
/** WMI is ready; after this event the wlan subsystem is initialized and can process commands. */
WMI_READY_EVENTID,
/**
* Specify what WMI services the target supports
* (for services beyond what fits in the WMI_SERVICE_READY_EVENT
* message's wmi_service_bitmap)
*/
WMI_SERVICE_AVAILABLE_EVENTID,
/** Scan specific events */
WMI_SCAN_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_SCAN) ,
/* PDEV specific events */
/** TPC config for the current operating channel */
WMI_PDEV_TPC_CONFIG_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_PDEV) ,
/** Channel stats event */
WMI_CHAN_INFO_EVENTID,
/** PHY Error specific WMI event */
WMI_PHYERR_EVENTID,
/** eeprom dump event */
WMI_PDEV_DUMP_EVENTID,
/** traffic pause event */
WMI_TX_PAUSE_EVENTID,
/** DFS radar event */
WMI_DFS_RADAR_EVENTID,
/** track L1SS entry and residency event */
WMI_PDEV_L1SS_TRACK_EVENTID,
/** Report current temprature of the chip in Celcius degree */
WMI_PDEV_TEMPERATURE_EVENTID,
/** Extension of WMI_SERVICE_READY msg with extra target capability info */
WMI_SERVICE_READY_EXT_EVENTID,
/** FIPS test mode event */
WMI_PDEV_FIPS_EVENTID,
/** Channel hopping avoidance */
WMI_PDEV_CHANNEL_HOPPING_EVENTID,
/** CCK ANI level event */
WMI_PDEV_ANI_CCK_LEVEL_EVENTID,
/** OFDM ANI level event */
WMI_PDEV_ANI_OFDM_LEVEL_EVENTID,
/** Tx PPDU params */
WMI_PDEV_TPC_EVENTID,
/** NF Cal Power in DBR/DBM for all channels */
WMI_PDEV_NFCAL_POWER_ALL_CHANNELS_EVENTID,
/** SOC/PDEV events */
WMI_PDEV_SET_HW_MODE_RESP_EVENTID,
WMI_PDEV_HW_MODE_TRANSITION_EVENTID,
WMI_PDEV_SET_MAC_CONFIG_RESP_EVENTID,
/** Report ANT DIV feature's status */
WMI_PDEV_ANTDIV_STATUS_EVENTID,
/** Chip level Power stats */
WMI_PDEV_CHIP_POWER_STATS_EVENTID,
/** Power Save Failure Detected */
WMI_PDEV_CHIP_POWER_SAVE_FAILURE_DETECTED_EVENTID,
/* Event to report the switch count in csa of one or more VDEVs */
WMI_PDEV_CSA_SWITCH_COUNT_STATUS_EVENTID,
/** Report the caldata version to host */
WMI_PDEV_CHECK_CAL_VERSION_EVENTID,
/** Report chain RSSI and antenna index to host */
WMI_PDEV_DIV_RSSI_ANTID_EVENTID,
/** provide noise floor and cycle counts for a channel */
WMI_PDEV_BSS_CHAN_INFO_EVENTID,
/** Response received the ctl table to host */
WMI_PDEV_UPDATE_CTLTABLE_EVENTID,
WMI_PDEV_DMA_RING_CFG_RSP_EVENTID,
WMI_PDEV_DMA_RING_BUF_RELEASE_EVENTID,
/* VDEV specific events */
/** VDEV started event in response to VDEV_START request */
WMI_VDEV_START_RESP_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_VDEV),
/** vdev stopped event , generated in response to VDEV_STOP request */
WMI_VDEV_STOPPED_EVENTID,
/* Indicate the set key (used for setting per
* peer unicast and per vdev multicast)
* operation has completed */
WMI_VDEV_INSTALL_KEY_COMPLETE_EVENTID,
/* NOTE: WMI_VDEV_MCC_BCN_INTERVAL_CHANGE_REQ_EVENTID would be deprecated. Please
don't use this for any new implementations */
/* Firmware requests dynamic change to a specific beacon interval for a specific vdev ID in MCC scenario.
This request is valid only for vdevs operating in soft AP or P2P GO mode */
WMI_VDEV_MCC_BCN_INTERVAL_CHANGE_REQ_EVENTID,
/* Return the TSF timestamp of specified vdev */
WMI_VDEV_TSF_REPORT_EVENTID,
/* FW response to Host for vdev delete cmdid */
WMI_VDEV_DELETE_RESP_EVENTID,
/**
* DISA feature: FW response to Host with encrypted/decrypted
* 802.11 DISA frame
*/
WMI_VDEV_ENCRYPT_DECRYPT_DATA_RESP_EVENTID,
/** event to report mac randomization success **/
WMI_VDEV_ADD_MAC_ADDR_TO_RX_FILTER_STATUS_EVENTID,
/* event for ARP stats collection */
WMI_VDEV_GET_ARP_STAT_EVENTID,
/** get tx power event in response to VDEV_GET_TX_POWER request */
WMI_VDEV_GET_TX_POWER_EVENTID,
/* peer specific events */
/** FW reauet to kick out the station for reasons like inactivity,lack of response ..etc */
WMI_PEER_STA_KICKOUT_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_PEER),
/** Peer Info Event with data_rate, rssi, tx_fail_cnt etc */
WMI_PEER_INFO_EVENTID,
/** Event indicating that TX fail count reaching threshold */
WMI_PEER_TX_FAIL_CNT_THR_EVENTID,
/** Return the estimate link speed for the Peer specified in the
* WMI_PEER_GET_ESTIMATED_LINKSPEED_CMDID command.
*/
WMI_PEER_ESTIMATED_LINKSPEED_EVENTID,
/* Return the peer state
* WMI_PEER_SET_PARAM_CMDID, WMI_PEER_AUTHORIZE
*/
WMI_PEER_STATE_EVENTID,
/* Peer Assoc Conf event to confirm fw had received PEER_ASSOC_CMD.
* After that, host will send Mx message.
* Otherwise, host will pause any Mx(STA:M2/M4) message
*/
WMI_PEER_ASSOC_CONF_EVENTID,
/* FW response to Host for peer delete cmdid */
WMI_PEER_DELETE_RESP_EVENTID,
/** Valid rate code list for peer */
WMI_PEER_RATECODE_LIST_EVENTID,
WMI_WDS_PEER_EVENTID,
WMI_PEER_STA_PS_STATECHG_EVENTID,
/** Peer Ant Div Info Event with rssi per chain, etc */
WMI_PEER_ANTDIV_INFO_EVENTID,
/** Peer operating mode change indication sent to host to update stats */
WMI_PEER_OPER_MODE_CHANGE_EVENTID,
/* beacon/mgmt specific events */
/** RX management frame. the entire frame is carried along with the event. */
WMI_MGMT_RX_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_MGMT),
/** software beacon alert event to Host requesting host to Queue a beacon for transmission
use only in host beacon mode */
WMI_HOST_SWBA_EVENTID,
/** beacon tbtt offset event indicating the tsf offset of the tbtt from the theoretical value.
tbtt offset is normally 0 and will be non zero if there are multiple VDEVs operating in
staggered beacon transmission mode */
WMI_TBTTOFFSET_UPDATE_EVENTID,
/** event after the first beacon is transmitted following
a change in the template.*/
WMI_OFFLOAD_BCN_TX_STATUS_EVENTID,
/** event after the first probe response is transmitted following
a change in the template.*/
WMI_OFFLOAD_PROB_RESP_TX_STATUS_EVENTID,
/** Event for Mgmt TX completion event */
WMI_MGMT_TX_COMPLETION_EVENTID,
/** Event for Mgmt TX bundle completion event */
WMI_MGMT_TX_BUNDLE_COMPLETION_EVENTID,
/** vdev_map used in WMI_TBTTOFFSET_UPDATE_EVENTID supports max 32 vdevs
* Use this event if number of vdevs > 32.
*/
WMI_TBTTOFFSET_EXT_UPDATE_EVENTID,
/** Event for offchan data TX completion event */
WMI_OFFCHAN_DATA_TX_COMPLETION_EVENTID,
/** software FILS Discovery Frame alert event to Host, requesting host to Queue an FD frame for transmission */
WMI_HOST_SWFDA_EVENTID,
/* ADDBA Related WMI Events*/
/** Indication the completion of the prior
WMI_PEER_TID_DELBA_CMDID(initiator) */
WMI_TX_DELBA_COMPLETE_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_BA_NEG),
/** Indication the completion of the prior
*WMI_PEER_TID_ADDBA_CMDID(initiator) */
WMI_TX_ADDBA_COMPLETE_EVENTID,
/* Seq num returned from hw for a sta/tid pair */
WMI_BA_RSP_SSN_EVENTID,
/* Aggregation state requested by BTC */
WMI_AGGR_STATE_TRIG_EVENTID,
/** Roam event to trigger roaming on host */
WMI_ROAM_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_ROAM),
/** matching AP found from list of profiles */
WMI_PROFILE_MATCH,
/** roam synch event */
WMI_ROAM_SYNCH_EVENTID,
/** roam synch frame event */
WMI_ROAM_SYNCH_FRAME_EVENTID,
/** P2P disc found */
WMI_P2P_DISC_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_P2P),
/*send noa info to host when noa is changed for beacon tx offload enable*/
WMI_P2P_NOA_EVENTID,
/** send p2p listen offload stopped event with different reason */
WMI_P2P_LISTEN_OFFLOAD_STOPPED_EVENTID,
/** Send EGAP Info to host */
WMI_AP_PS_EGAP_INFO_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_AP_PS),
/* send pdev resume event to host after pdev resume. */
WMI_PDEV_RESUME_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_SUSPEND),
/** WOW wake up host event.generated in response to WMI_WOW_HOSTWAKEUP_FROM_SLEEP_CMDID.
will cary wake reason */
WMI_WOW_WAKEUP_HOST_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_WOW),
WMI_D0_WOW_DISABLE_ACK_EVENTID,
WMI_WOW_INITIAL_WAKEUP_EVENTID,
/*RTT related event ID*/
/** RTT measurement report */
WMI_RTT_MEASUREMENT_REPORT_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_RTT),
/** TSF measurement report */
WMI_TSF_MEASUREMENT_REPORT_EVENTID,
/** RTT error report */
WMI_RTT_ERROR_REPORT_EVENTID,
/*STATS specific events*/
/** txrx stats event requested by host */
WMI_STATS_EXT_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_STATS),
/** FW iface link stats Event */
WMI_IFACE_LINK_STATS_EVENTID,
/** FW iface peer link stats Event */
WMI_PEER_LINK_STATS_EVENTID,
/** FW Update radio stats Event */
WMI_RADIO_LINK_STATS_EVENTID,
/** Firmware memory dump Complete event*/
WMI_UPDATE_FW_MEM_DUMP_EVENTID,
/** Event indicating the DIAG logs/events supported by FW */
WMI_DIAG_EVENT_LOG_SUPPORTED_EVENTID,
/** Instantaneous RSSI event */
WMI_INST_RSSI_STATS_EVENTID,
/** FW update tx power levels event */
WMI_RADIO_TX_POWER_LEVEL_STATS_EVENTID,
/** This event is used to report wlan stats to host.
* It is triggered under 3 conditions:
* (a) Periodic timer timed out, based on the period specified
* by WMI_PDEV_PARAM_STATS_OBSERVATION_PERIOD
* (b) Whenever any of the (enabled) stats thresholds specified
* in the WMI_PDEV_SET_STATS_THRESHOLD_CMD message is exceeded
* within the current stats period.
* (c) In response to the one-time wlan stats request of
* WMI_REQUEST_WLAN_STATS_CMDID from host.
*
* If this event is triggered by condition a or b,
* the stats counters are cleared at the start of each period.
* But if it is triggered by condition c, stats counters won't be cleared.
*/
WMI_REPORT_STATS_EVENTID,
/** Event indicating RCPI of the peer requested by host in the
* WMI_REQUEST_RCPI_CMDID */
WMI_UPDATE_RCPI_EVENTID,
/** This event is used to respond to WMI_REQUEST_PEER_STATS_INFO_CMDID
* and report peer stats info to host */
WMI_PEER_STATS_INFO_EVENTID,
/** This event is used to respond to WMI_REQUEST_RADIO_CHAN_STATS_CMDID
* and report radio channel stats to host */
WMI_RADIO_CHAN_STATS_EVENTID,
/* NLO specific events */
/** NLO match event after the first match */
WMI_NLO_MATCH_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_NLO_OFL),
/** NLO scan complete event */
WMI_NLO_SCAN_COMPLETE_EVENTID,
/** APFIND specific events */
WMI_APFIND_EVENTID,
/** passpoint network match event */
WMI_PASSPOINT_MATCH_EVENTID,
/** GTK offload stautus event requested by host */
WMI_GTK_OFFLOAD_STATUS_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_GTK_OFL),
/** GTK offload failed to rekey event */
WMI_GTK_REKEY_FAIL_EVENTID,
/* CSA IE received event */
WMI_CSA_HANDLING_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_CSA_OFL),
/*chatter query reply event*/
WMI_CHATTER_PC_QUERY_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_CHATTER),
/** DFS related events */
WMI_PDEV_DFS_RADAR_DETECTION_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_DFS),
/** Indicate channel-availability-check completion event to host */
WMI_VDEV_DFS_CAC_COMPLETE_EVENTID,
/** Indicate off-channel-availability-check completion event to host */
WMI_VDEV_ADFS_OCAC_COMPLETE_EVENTID,
/** echo event in response to echo command */
WMI_ECHO_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_MISC),
/* !!IMPORTANT!!
* If you need to add a new WMI event ID to the WMI_GRP_MISC sub-group,
* please make sure you add it BEHIND WMI_PDEV_UTF_EVENTID,
* as we MUST have a fixed value here to maintain compatibility between
* UTF and the ART2 driver
*/
/** UTF specific WMI event */
WMI_PDEV_UTF_EVENTID,
/** event carries buffered debug messages */
WMI_DEBUG_MESG_EVENTID,
/** FW stats(periodic or on shot) */
WMI_UPDATE_STATS_EVENTID,
/** debug print message used for tracing FW code while debugging */
WMI_DEBUG_PRINT_EVENTID,
/** DCS wlan or non-wlan interference event
*/
WMI_DCS_INTERFERENCE_EVENTID,
/** VI spoecific event */
WMI_PDEV_QVIT_EVENTID,
/** FW code profile data in response to profile request */
WMI_WLAN_PROFILE_DATA_EVENTID,
/* Factory Testing Mode request event
* used for integrated chipsets */
WMI_PDEV_FTM_INTG_EVENTID,
/* avoid list of frequencies .
*/
WMI_WLAN_FREQ_AVOID_EVENTID,
/* Indicate the keepalive parameters */
WMI_VDEV_GET_KEEPALIVE_EVENTID,
/* Thermal Management event */
WMI_THERMAL_MGMT_EVENTID,
/* Container for QXDM/DIAG events */
WMI_DIAG_DATA_CONTAINER_EVENTID,
/* host auto shutdown event */
WMI_HOST_AUTO_SHUTDOWN_EVENTID,
/*update mib counters together with WMI_UPDATE_STATS_EVENTID*/
WMI_UPDATE_WHAL_MIB_STATS_EVENTID,
/*update ht/vht info based on vdev (rx and tx NSS and preamble)*/
WMI_UPDATE_VDEV_RATE_STATS_EVENTID,
WMI_DIAG_EVENTID,
/** Set OCB Sched Response, deprecated */
WMI_OCB_SET_SCHED_EVENTID,
/** event to indicate the flush of the buffered debug messages is complete*/
WMI_DEBUG_MESG_FLUSH_COMPLETE_EVENTID,
/** event to report mix/max RSSI breach events */
WMI_RSSI_BREACH_EVENTID,
/** event to report completion of data storage into flash memory */
WMI_TRANSFER_DATA_TO_FLASH_COMPLETE_EVENTID,
/** event to report SCPC calibrated data to host */
WMI_PDEV_UTF_SCPC_EVENTID,
/** event to provide requested data from the target's flash memory */
WMI_READ_DATA_FROM_FLASH_EVENTID,
/** event to report rx aggregation failure frame information */
WMI_REPORT_RX_AGGR_FAILURE_EVENTID,
/** event to upload a PKGID to host to identify chip for various products */
WMI_PKGID_EVENTID,
/* Thermal Throttling stats event id for every pdev and zones, etc */
WMI_THERM_THROT_STATS_EVENTID,
/* WMI UNIT TEST event */
WMI_UNIT_TEST_EVENTID,
/** event to report result of host configure SAR2 */
WMI_SAR2_RESULT_EVENTID,
/* GPIO Event */
WMI_GPIO_INPUT_EVENTID=WMI_EVT_GRP_START_ID(WMI_GRP_GPIO),
/** upload H_CV info WMI event
* to indicate uploaded H_CV info to host
*/
WMI_UPLOADH_EVENTID,
/** capture H info WMI event
* to indicate captured H info to host
*/
WMI_CAPTUREH_EVENTID,
/* hw RFkill */
WMI_RFKILL_STATE_CHANGE_EVENTID,
/* TDLS Event */
WMI_TDLS_PEER_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_TDLS),
/** STA SMPS Event */
/** force SMPS mode */
WMI_STA_SMPS_FORCE_MODE_COMPLETE_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_STA_SMPS),
/*location scan event*/
/*report the firmware's capability of batch scan*/
WMI_BATCH_SCAN_ENABLED_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_LOCATION_SCAN),
/*batch scan result*/
WMI_BATCH_SCAN_RESULT_EVENTID,
/* OEM Event */
WMI_OEM_CAPABILITY_EVENTID=WMI_EVT_GRP_START_ID(WMI_GRP_OEM), /*DEPRECATED*/
WMI_OEM_MEASUREMENT_REPORT_EVENTID, /* DEPRECATED */
WMI_OEM_ERROR_REPORT_EVENTID, /* DEPRECATED */
WMI_OEM_RESPONSE_EVENTID,
WMI_OEM_DMA_RING_CFG_RSP_EVENTID,
WMI_OEM_DMA_BUF_RELEASE_EVENTID,
/* NAN Event */
WMI_NAN_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_NAN),
WMI_NAN_DISC_IFACE_CREATED_EVENTID,
WMI_NAN_DISC_IFACE_DELETED_EVENTID,
WMI_NAN_STARTED_CLUSTER_EVENTID,
WMI_NAN_JOINED_CLUSTER_EVENTID,
/* Coex Event */
WMI_COEX_REPORT_ANTENNA_ISOLATION_EVENTID =
WMI_EVT_GRP_START_ID(WMI_GRP_COEX),
WMI_SAR_GET_LIMITS_EVENTID,
/* LPI Event */
WMI_LPI_RESULT_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_LPI),
WMI_LPI_STATUS_EVENTID,
WMI_LPI_HANDOFF_EVENTID,
/* ExtScan events */
WMI_EXTSCAN_START_STOP_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_EXTSCAN),
WMI_EXTSCAN_OPERATION_EVENTID,
WMI_EXTSCAN_TABLE_USAGE_EVENTID,
WMI_EXTSCAN_CACHED_RESULTS_EVENTID,
WMI_EXTSCAN_WLAN_CHANGE_RESULTS_EVENTID,
WMI_EXTSCAN_HOTLIST_MATCH_EVENTID,
WMI_EXTSCAN_CAPABILITIES_EVENTID,
WMI_EXTSCAN_HOTLIST_SSID_MATCH_EVENTID,
/* mDNS offload events */
WMI_MDNS_STATS_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_MDNS_OFL),
/* SAP Authentication offload events */
WMI_SAP_OFL_ADD_STA_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_SAP_OFL),
WMI_SAP_OFL_DEL_STA_EVENTID,
WMI_SAP_OBSS_DETECTION_REPORT_EVENTID,
/** Out-of-context-of-bss (OCB) events */
WMI_OCB_SET_CONFIG_RESP_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_OCB),
WMI_OCB_GET_TSF_TIMER_RESP_EVENTID,
WMI_DCC_GET_STATS_RESP_EVENTID,
WMI_DCC_UPDATE_NDL_RESP_EVENTID,
WMI_DCC_STATS_EVENTID,
/* System-On-Chip events */
WMI_SOC_SET_HW_MODE_RESP_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_SOC),
WMI_SOC_HW_MODE_TRANSITION_EVENTID,
WMI_SOC_SET_DUAL_MAC_CONFIG_RESP_EVENTID,
/** Motion Aided WiFi Connectivity (MAWC) events */
WMI_MAWC_ENABLE_SENSOR_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_MAWC),
/** pkt filter (BPF) offload relevant events */
WMI_BPF_CAPABILIY_INFO_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_BPF_OFFLOAD),
WMI_BPF_VDEV_STATS_INFO_EVENTID,
/** WMI events related to regulatory offload */
WMI_REG_CHAN_LIST_CC_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_REGULATORY),
WMI_11D_NEW_COUNTRY_EVENTID,
_place_holder_evt_1 = WMI_EVT_GRP_START_ID(WMI_GRP_RMC),
/** Events in Prototyping phase */
WMI_NDI_CAP_RSP_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_PROTOTYPE),
WMI_NDP_INITIATOR_RSP_EVENTID,
WMI_NDP_RESPONDER_RSP_EVENTID,
WMI_NDP_END_RSP_EVENTID,
WMI_NDP_INDICATION_EVENTID,
WMI_NDP_CONFIRM_EVENTID,
WMI_NDP_END_INDICATION_EVENTID,
WMI_WLAN_COEX_BT_ACTIVITY_EVENTID,
WMI_NDL_SCHEDULE_UPDATE_EVENTID,
} WMI_EVT_ID;
/* defines for OEM message sub-types */
#define WMI_OEM_CAPABILITY_REQ 0x01
#define WMI_OEM_CAPABILITY_RSP 0x02
#define WMI_OEM_MEASUREMENT_REQ 0x03
#define WMI_OEM_MEASUREMENT_RSP 0x04
#define WMI_OEM_ERROR_REPORT_RSP 0x05
#define WMI_OEM_NAN_MEAS_REQ 0x06
#define WMI_OEM_NAN_MEAS_RSP 0x07
#define WMI_OEM_NAN_PEER_INFO 0x08
#define WMI_OEM_CONFIGURE_LCR 0x09
#define WMI_OEM_CONFIGURE_LCI 0x0A
/* below message subtype is internal to CLD. Target should
* never use internal response type
*/
#define WMI_OEM_INTERNAL_RSP 0xdeadbeef
#define WMI_CHAN_LIST_TAG 0x1
#define WMI_SSID_LIST_TAG 0x2
#define WMI_BSSID_LIST_TAG 0x3
#define WMI_IE_TAG 0x4
#define WMI_SCAN_START_OFFSET_TAG 0x5
typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_channel */
/** primary 20 MHz channel frequency in mhz */
A_UINT32 mhz;
/** Center frequency 1 in MHz*/
A_UINT32 band_center_freq1;
/** Center frequency 2 in MHz - valid only for 11acvht 80plus80 mode*/
A_UINT32 band_center_freq2;
/** channel info described below */
A_UINT32 info;
/** contains min power, max power, reg power and reg class id. */
A_UINT32 reg_info_1;
/** contains antennamax */
A_UINT32 reg_info_2;
} wmi_channel;
typedef enum{
WMI_CHANNEL_CHANGE_CAUSE_NONE = 0,
WMI_CHANNEL_CHANGE_CAUSE_CSA,
}wmi_channel_change_cause;
/** channel info consists of 6 bits of channel mode */
#define WMI_SET_CHANNEL_MODE(pwmi_channel,val) do { \
(pwmi_channel)->info &= 0xffffffc0; \
(pwmi_channel)->info |= (val); \
} while(0)
#define WMI_GET_CHANNEL_MODE(pwmi_channel) ((pwmi_channel)->info & 0x0000003f )
#define WMI_CHAN_FLAG_HT40_PLUS 6
#define WMI_CHAN_FLAG_PASSIVE 7
#define WMI_CHAN_ADHOC_ALLOWED 8
#define WMI_CHAN_AP_DISABLED 9
#define WMI_CHAN_FLAG_DFS 10
#define WMI_CHAN_FLAG_ALLOW_HT 11 /* HT is allowed on this channel */
#define WMI_CHAN_FLAG_ALLOW_VHT 12 /* VHT is allowed on this channel */
#define WMI_CHANNEL_CHANGE_CAUSE_CSA 13 /*Indicate reason for channel switch */
#define WMI_CHAN_FLAG_HALF_RATE 14 /* Indicates half rate channel */
#define WMI_CHAN_FLAG_QUARTER_RATE 15 /* Indicates quarter rate channel */
#define WMI_CHAN_FLAG_DFS_CFREQ2 16 /* Enable radar event reporting for sec80 in VHT80p80 */
#define WMI_CHAN_FLAG_ALLOW_HE 17 /* HE (11ax) is allowed on this channel */
#define WMI_SET_CHANNEL_FLAG(pwmi_channel,flag) do { \
(pwmi_channel)->info |= (1 << flag); \
} while(0)
#define WMI_GET_CHANNEL_FLAG(pwmi_channel,flag) \
(((pwmi_channel)->info & (1 << flag)) >> flag)
#define WMI_SET_CHANNEL_MIN_POWER(pwmi_channel,val) do { \
(pwmi_channel)->reg_info_1 &= 0xffffff00; \
(pwmi_channel)->reg_info_1 |= (val&0xff); \
} while(0)
#define WMI_GET_CHANNEL_MIN_POWER(pwmi_channel) ((pwmi_channel)->reg_info_1 & 0xff )
#define WMI_SET_CHANNEL_MAX_POWER(pwmi_channel,val) do { \
(pwmi_channel)->reg_info_1 &= 0xffff00ff; \
(pwmi_channel)->reg_info_1 |= ((val&0xff) << 8); \
} while(0)
#define WMI_GET_CHANNEL_MAX_POWER(pwmi_channel) ( (((pwmi_channel)->reg_info_1) >> 8) & 0xff )
#define WMI_SET_CHANNEL_REG_POWER(pwmi_channel,val) do { \
(pwmi_channel)->reg_info_1 &= 0xff00ffff; \
(pwmi_channel)->reg_info_1 |= ((val&0xff) << 16); \
} while(0)
#define WMI_GET_CHANNEL_REG_POWER(pwmi_channel) ( (((pwmi_channel)->reg_info_1) >> 16) & 0xff )
#define WMI_SET_CHANNEL_REG_CLASSID(pwmi_channel,val) do { \
(pwmi_channel)->reg_info_1 &= 0x00ffffff; \
(pwmi_channel)->reg_info_1 |= ((val&0xff) << 24); \
} while(0)
#define WMI_GET_CHANNEL_REG_CLASSID(pwmi_channel) ( (((pwmi_channel)->reg_info_1) >> 24) & 0xff )
#define WMI_SET_CHANNEL_ANTENNA_MAX(pwmi_channel,val) do { \
(pwmi_channel)->reg_info_2 &= 0xffffff00; \
(pwmi_channel)->reg_info_2 |= (val&0xff); \
} while(0)
#define WMI_GET_CHANNEL_ANTENNA_MAX(pwmi_channel) ((pwmi_channel)->reg_info_2 & 0xff )
/* max tx power is in 1 dBm units */
#define WMI_SET_CHANNEL_MAX_TX_POWER(pwmi_channel,val) do { \
(pwmi_channel)->reg_info_2 &= 0xffff00ff; \
(pwmi_channel)->reg_info_2 |= ((val&0xff)<<8); \
} while(0)
#define WMI_GET_CHANNEL_MAX_TX_POWER(pwmi_channel) ( (((pwmi_channel)->reg_info_2)>>8) & 0xff )
/** HT Capabilities*/
#define WMI_HT_CAP_ENABLED 0x0001 /* HT Enabled/ disabled */
#define WMI_HT_CAP_HT20_SGI 0x0002 /* Short Guard Interval with HT20 */
#define WMI_HT_CAP_DYNAMIC_SMPS 0x0004 /* Dynamic MIMO powersave */
#define WMI_HT_CAP_TX_STBC 0x0008 /* B3 TX STBC */
#define WMI_HT_CAP_TX_STBC_MASK_SHIFT 3
#define WMI_HT_CAP_RX_STBC 0x0030 /* B4-B5 RX STBC */
#define WMI_HT_CAP_RX_STBC_MASK_SHIFT 4
#define WMI_HT_CAP_LDPC 0x0040 /* LDPC supported */
#define WMI_HT_CAP_L_SIG_TXOP_PROT 0x0080 /* L-SIG TXOP Protection */
#define WMI_HT_CAP_MPDU_DENSITY 0x0700 /* MPDU Density */
#define WMI_HT_CAP_MPDU_DENSITY_MASK_SHIFT 8
#define WMI_HT_CAP_HT40_SGI 0x0800
#define WMI_HT_CAP_RX_LDPC 0x1000 /* LDPC RX support */
#define WMI_HT_CAP_TX_LDPC 0x2000 /* LDPC TX support */
/* These macros should be used when we wish to advertise STBC support for
* only 1SS or 2SS or 3SS. */
#define WMI_HT_CAP_RX_STBC_1SS 0x0010 /* B4-B5 RX STBC */
#define WMI_HT_CAP_RX_STBC_2SS 0x0020 /* B4-B5 RX STBC */
#define WMI_HT_CAP_RX_STBC_3SS 0x0030 /* B4-B5 RX STBC */
#define WMI_HT_CAP_DEFAULT_ALL (WMI_HT_CAP_ENABLED | \
WMI_HT_CAP_HT20_SGI | \
WMI_HT_CAP_HT40_SGI | \
WMI_HT_CAP_TX_STBC | \
WMI_HT_CAP_RX_STBC | \
WMI_HT_CAP_LDPC | \
WMI_HT_CAP_TX_LDPC | \
WMI_HT_CAP_RX_LDPC)
/* WMI_VHT_CAP_* these maps to ieee 802.11ac vht capability information
field. The fields not defined here are not supported, or reserved.
Do not change these masks and if you have to add new one follow the
bitmask as specified by 802.11ac draft.
*/
#define WMI_VHT_CAP_MAX_MPDU_LEN_7935 0x00000001
#define WMI_VHT_CAP_MAX_MPDU_LEN_11454 0x00000002
#define WMI_VHT_CAP_MAX_MPDU_LEN_MASK 0x00000003
#define WMI_VHT_CAP_CH_WIDTH_160MHZ 0x00000004
#define WMI_VHT_CAP_CH_WIDTH_80P80_160MHZ 0x00000008
#define WMI_VHT_CAP_RX_LDPC 0x00000010
#define WMI_VHT_CAP_SGI_80MHZ 0x00000020
#define WMI_VHT_CAP_SGI_160MHZ 0x00000040
#define WMI_VHT_CAP_TX_STBC 0x00000080
#define WMI_VHT_CAP_RX_STBC_MASK 0x00000300
#define WMI_VHT_CAP_RX_STBC_MASK_SHIFT 8
#define WMI_VHT_CAP_SU_BFORMER 0x00000800
#define WMI_VHT_CAP_SU_BFORMEE 0x00001000
#define WMI_VHT_CAP_MAX_CS_ANT_MASK 0x0000E000
#define WMI_VHT_CAP_MAX_CS_ANT_MASK_SHIFT 13
#define WMI_VHT_CAP_MAX_SND_DIM_MASK 0x00070000
#define WMI_VHT_CAP_MAX_SND_DIM_MASK_SHIFT 16
#define WMI_VHT_CAP_MU_BFORMER 0x00080000
#define WMI_VHT_CAP_MU_BFORMEE 0x00100000
#define WMI_VHT_CAP_TXOP_PS 0x00200000
#define WMI_VHT_CAP_MAX_AMPDU_LEN_EXP 0x03800000
#define WMI_VHT_CAP_MAX_AMPDU_LEN_EXP_SHIFT 23
#define WMI_VHT_CAP_RX_FIXED_ANT 0x10000000
#define WMI_VHT_CAP_TX_FIXED_ANT 0x20000000
#define WMI_VHT_CAP_TX_LDPC 0x40000000
/* TEMPORARY:
* Preserve the incorrect old name as an alias for the correct new name
* until all references to the old name have been removed from all hosts
* and targets.
*/
#define WMI_VHT_CAP_MAX_AMPDU_LEN_EXP_SHIT WMI_VHT_CAP_MAX_AMPDU_LEN_EXP_SHIFT
/* These macros should be used when we wish to advertise STBC support for
* only 1SS or 2SS or 3SS. */
#define WMI_VHT_CAP_RX_STBC_1SS 0x00000100
#define WMI_VHT_CAP_RX_STBC_2SS 0x00000200
#define WMI_VHT_CAP_RX_STBC_3SS 0x00000300
/* TEMPORARY:
* Preserve the incorrect old name as an alias for the correct new name
* until all references to the old name have been removed from all hosts
* and targets.
*/
#define WMI_vHT_CAP_RX_STBC_3SS WMI_VHT_CAP_RX_STBC_3SS
#define WMI_VHT_CAP_DEFAULT_ALL (WMI_VHT_CAP_MAX_MPDU_LEN_11454 | \
WMI_VHT_CAP_SGI_80MHZ | \
WMI_VHT_CAP_TX_STBC | \
WMI_VHT_CAP_RX_STBC_MASK | \
WMI_VHT_CAP_RX_LDPC | \
WMI_VHT_CAP_TX_LDPC | \
WMI_VHT_CAP_MAX_AMPDU_LEN_EXP | \
WMI_VHT_CAP_RX_FIXED_ANT | \
WMI_VHT_CAP_TX_FIXED_ANT)
/* Interested readers refer to Rx/Tx MCS Map definition as defined in
802.11ac
*/
#define WMI_VHT_MAX_MCS_4_SS_MASK(r,ss) ((3 & (r)) << (((ss) - 1) << 1))
#define WMI_VHT_MAX_SUPP_RATE_MASK 0x1fff0000
#define WMI_VHT_MAX_SUPP_RATE_MASK_SHIFT 16
/** 11ax capabilities */
#define WMI_HE_CAP_PPE_PRESENT 0x00000001
#define WMI_HE_CAP_TWT_RESPONDER_SUPPORT 0x00000002
#define WMI_HE_CAP_TWT_REQUESTER_SUPPORT 0x00000004
#define WMI_HE_FRAG_SUPPORT_MASK 0x00000018
#define WMI_HE_FRAG_SUPPORT_SHIFT 3
/* Interested readers refer to Rx/Tx MCS Map definition as defined in 802.11ax
*/
#define WMI_HE_MAX_MCS_4_SS_MASK(r,ss) ((3 & (r)) << (((ss) - 1) << 1))
/* fragmentation support field value */
enum {
WMI_HE_FRAG_SUPPORT_LEVEL0, /* No Fragmentation support */
WMI_HE_FRAG_SUPPORT_LEVEL1, /* support for fragments within a VHT single MPDU, no support for fragments within AMPDU */
WMI_HE_FRAG_SUPPORT_LEVEL2, /* support for up to 1 fragment per MSDU within a single A-MPDU */
WMI_HE_FRAG_SUPPORT_LEVEL3, /* support for multiple fragments per MSDU within an A-MPDU */
};
/** NOTE: This defs cannot be changed in the future without breaking WMI compatibility */
#define WMI_MAX_NUM_SS MAX_HE_NSS
#define WMI_MAX_NUM_RU MAX_HE_RU
/*
* Figure 8 554ae: -PPE Threshold Info field format
* we pack PPET16 and PPT8 for four RU's in one element of array.
*
* ppet16_ppet8_ru3_ru0 array element 0 holds:
* | PPET8 | PPET16 | PPET8 | PPET16 | PPET8 | PPET16 | PPET8 | PPET16 |
*rsvd |NSS1,RU4|NSS1,RU4|NSS1,RU3|NSS1,RU3|NSS1,RU2|NSS1,RU2|NSS1,RU1|NSS1,RU1|
*31:23| 22:20 | 19:17 | 17:15 | 14:12 | 11:9 | 8:6 | 5:3 | 2:0 |
*
* ppet16_ppet8_ru3_ru0 array element 1 holds:
* | PPET8 | PPET16 | PPET8 | PPET16 | PPET8 | PPET16 | PPET8 | PPET16 |
*rsvd |NSS2,RU4|NSS2,RU4|NSS2,RU3|NSS2,RU3|NSS2,RU2|NSS2,RU2|NSS2,RU1|NSS2,RU1|
*31:23| 22:20 | 19:17 | 17:15 | 14:12 | 11:9 | 8:6 | 5:3 | 2:0 |
*
* etc.
*/
/*
* Note that in these macros, "ru" is one-based, not zero-based, while
* nssm1 is zero-based.
*/
#define WMI_SET_PPET16(ppet16_ppet8_ru3_ru0, ru, nssm1, ppet) \
do { \
ppet16_ppet8_ru3_ru0[nssm1] &= ~(7 << (((ru-1)&3)*6)); \
ppet16_ppet8_ru3_ru0[nssm1] |= ((ppet&7) << (((ru-1)&3)*6)); \
} while (0)
#define WMI_GET_PPET16(ppet16_ppet8_ru3_ru0, ru, nssm1) \
((ppet16_ppet8_ru3_ru0[nssm1] >> (((ru-1)&3)*6))&7)
#define WMI_SET_PPET8(ppet16_ppet8_ru3_ru0, ru, nssm1, ppet) \
do { \
ppet16_ppet8_ru3_ru0[nssm1] &= ~(7 << (((ru-1)&3)*6+3)); \
ppet16_ppet8_ru3_ru0[nssm1] |= ((ppet&7) << (((ru-1)&3)*6+3)); \
} while (0)
#define WMI_GET_PPET8(ppet16_ppet8_ru3_ru0, ru, nssm1) \
((ppet16_ppet8_ru3_ru0[nssm1] >> (((ru-1)&3)*6+3))&7)
typedef struct _wmi_ppe_threshold {
A_UINT32 numss_m1; /** NSS - 1*/
union {
A_UINT32 ru_count; /** RU COUNT OBSOLETE to be removed after few versions */
A_UINT32 ru_mask; /** RU index mask */
};
A_UINT32 ppet16_ppet8_ru3_ru0[WMI_MAX_NUM_SS]; /** ppet8 and ppet16 for max num ss */
} wmi_ppe_threshold;
/* WMI_SYS_CAPS_* refer to the capabilities that system support
*/
#define WMI_SYS_CAP_ENABLE 0x00000001
#define WMI_SYS_CAP_TXPOWER 0x00000002
/*
* WMI Dual Band Simultaneous (DBS) hardware mode list bit-mask definitions.
* Bits 5:0 are reserved
*/
#define WMI_DBS_HW_MODE_MAC0_TX_STREAMS_BITPOS (28)
#define WMI_DBS_HW_MODE_MAC0_RX_STREAMS_BITPOS (24)
#define WMI_DBS_HW_MODE_MAC1_TX_STREAMS_BITPOS (20)
#define WMI_DBS_HW_MODE_MAC1_RX_STREAMS_BITPOS (16)
#define WMI_DBS_HW_MODE_MAC0_BANDWIDTH_BITPOS (12)
#define WMI_DBS_HW_MODE_MAC1_BANDWIDTH_BITPOS (8)
#define WMI_DBS_HW_MODE_DBS_MODE_BITPOS (7)
#define WMI_DBS_HW_MODE_AGILE_DFS_MODE_BITPOS (6)
#define WMI_DBS_HW_MODE_MAC0_TX_STREAMS_MASK (0xf << WMI_DBS_HW_MODE_MAC0_TX_STREAMS_BITPOS)
#define WMI_DBS_HW_MODE_MAC0_RX_STREAMS_MASK (0xf << WMI_DBS_HW_MODE_MAC0_RX_STREAMS_BITPOS)
#define WMI_DBS_HW_MODE_MAC1_TX_STREAMS_MASK (0xf << WMI_DBS_HW_MODE_MAC1_TX_STREAMS_BITPOS)
#define WMI_DBS_HW_MODE_MAC1_RX_STREAMS_MASK (0xf << WMI_DBS_HW_MODE_MAC1_RX_STREAMS_BITPOS)
#define WMI_DBS_HW_MODE_MAC0_BANDWIDTH_MASK (0xf << WMI_DBS_HW_MODE_MAC0_BANDWIDTH_BITPOS)
#define WMI_DBS_HW_MODE_MAC1_BANDWIDTH_MASK (0xf << WMI_DBS_HW_MODE_MAC1_BANDWIDTH_BITPOS)
#define WMI_DBS_HW_MODE_DBS_MODE_MASK (0x1 << WMI_DBS_HW_MODE_DBS_MODE_BITPOS)
#define WMI_DBS_HW_MODE_AGILE_DFS_MODE_MASK (0x1 << WMI_DBS_HW_MODE_AGILE_DFS_MODE_BITPOS)
#define WMI_DBS_HW_MODE_MAC0_TX_STREAMS_SET(hw_mode, value) \
WMI_SET_BITS(hw_mode, WMI_DBS_HW_MODE_MAC0_TX_STREAMS_BITPOS, 4, value)
#define WMI_DBS_HW_MODE_MAC0_RX_STREAMS_SET(hw_mode, value) \
WMI_SET_BITS(hw_mode, WMI_DBS_HW_MODE_MAC0_RX_STREAMS_BITPOS, 4, value)
#define WMI_DBS_HW_MODE_MAC1_TX_STREAMS_SET(hw_mode, value) \
WMI_SET_BITS(hw_mode, WMI_DBS_HW_MODE_MAC1_TX_STREAMS_BITPOS, 4, value)
#define WMI_DBS_HW_MODE_MAC1_RX_STREAMS_SET(hw_mode, value) \
WMI_SET_BITS(hw_mode, WMI_DBS_HW_MODE_MAC1_RX_STREAMS_BITPOS, 4, value)
#define WMI_DBS_HW_MODE_MAC0_BANDWIDTH_SET(hw_mode, value) \
WMI_SET_BITS(hw_mode, WMI_DBS_HW_MODE_MAC0_BANDWIDTH_BITPOS, 4, value)
#define WMI_DBS_HW_MODE_MAC1_BANDWIDTH_SET(hw_mode, value) \
WMI_SET_BITS(hw_mode, WMI_DBS_HW_MODE_MAC1_BANDWIDTH_BITPOS, 4, value)
#define WMI_DBS_HW_MODE_DBS_MODE_SET(hw_mode, value) \
WMI_SET_BITS(hw_mode, WMI_DBS_HW_MODE_DBS_MODE_BITPOS, 1, value)
#define WMI_DBS_HW_MODE_AGILE_DFS_SET(hw_mode, value) \
WMI_SET_BITS(hw_mode, WMI_DBS_HW_MODE_AGILE_DFS_MODE_BITPOS, 1, value)
#define WMI_DBS_HW_MODE_MAC0_TX_STREAMS_GET(hw_mode) \
((hw_mode & WMI_DBS_HW_MODE_MAC0_TX_STREAMS_MASK) >> WMI_DBS_HW_MODE_MAC0_TX_STREAMS_BITPOS)
#define WMI_DBS_HW_MODE_MAC0_RX_STREAMS_GET(hw_mode) \
((hw_mode & WMI_DBS_HW_MODE_MAC0_RX_STREAMS_MASK) >> WMI_DBS_HW_MODE_MAC0_RX_STREAMS_BITPOS)
#define WMI_DBS_HW_MODE_MAC1_TX_STREAMS_GET(hw_mode) \
((hw_mode & WMI_DBS_HW_MODE_MAC1_TX_STREAMS_MASK) >> WMI_DBS_HW_MODE_MAC1_TX_STREAMS_BITPOS)
#define WMI_DBS_HW_MODE_MAC1_RX_STREAMS_GET(hw_mode) \
((hw_mode & WMI_DBS_HW_MODE_MAC1_RX_STREAMS_MASK) >> WMI_DBS_HW_MODE_MAC1_RX_STREAMS_BITPOS)
#define WMI_DBS_HW_MODE_MAC0_BANDWIDTH_GET(hw_mode) \
((hw_mode & WMI_DBS_HW_MODE_MAC0_BANDWIDTH_MASK) >> WMI_DBS_HW_MODE_MAC0_BANDWIDTH_BITPOS)
#define WMI_DBS_HW_MODE_MAC1_BANDWIDTH_GET(hw_mode) \
((hw_mode & WMI_DBS_HW_MODE_MAC1_BANDWIDTH_MASK) >> WMI_DBS_HW_MODE_MAC1_BANDWIDTH_BITPOS)
#define WMI_DBS_HW_MODE_DBS_MODE_GET(hw_mode) \
((hw_mode & WMI_DBS_HW_MODE_DBS_MODE_MASK) >> WMI_DBS_HW_MODE_DBS_MODE_BITPOS)
#define WMI_DBS_HW_MODE_AGILE_DFS_GET(hw_mode) \
((hw_mode & WMI_DBS_HW_MODE_AGILE_DFS_MODE_MASK) >> WMI_DBS_HW_MODE_AGILE_DFS_MODE_BITPOS)
#define WMI_DBS_CONC_SCAN_CFG_DBS_SCAN_BITPOS (31)
#define WMI_DBS_CONC_SCAN_CFG_AGILE_SCAN_BITPOS (30)
#define WMI_DBS_CONC_SCAN_CFG_AGILE_DFS_SCAN_BITPOS (29)
#define WMI_DBS_CONC_SCAN_CFG_ASYNC_DBS_SCAN_BITPOS (28)
#define WMI_DBS_CONC_SCAN_CFG_SYNC_DBS_SCAN_BITPOS (27)
#define WMI_DBS_CONC_SCAN_CFG_DBS_SCAN_MASK (0x1 << WMI_DBS_CONC_SCAN_CFG_DBS_SCAN_BITPOS)
#define WMI_DBS_CONC_SCAN_CFG_AGILE_SCAN_MASK (0x1 << WMI_DBS_CONC_SCAN_CFG_AGILE_SCAN_BITPOS)
#define WMI_DBS_CONC_SCAN_CFG_AGILE_DFS_SCAN_MASK (0x1 << WMI_DBS_CONC_SCAN_CFG_AGILE_DFS_SCAN_BITPOS)
#define WMI_DBS_CONC_SCAN_CFG_ASYC_DBS_SCAN_MASK (0x1 << WMI_DBS_CONC_SCAN_CFG_ASYNC_DBS_SCAN_BITPOS)
#define WMI_DBS_CONC_SCAN_CFG_SYNC_DBS_SCAN_MASK (0x1 << WMI_DBS_CONC_SCAN_CFG_SYNC_DBS_SCAN_BITPOS)
#define WMI_DBS_CONC_SCAN_CFG_DBS_SCAN_SET(scan_cfg, value) \
WMI_SET_BITS(scan_cfg, WMI_DBS_CONC_SCAN_CFG_DBS_SCAN_BITPOS, 1, value)
#define WMI_DBS_CONC_SCAN_CFG_AGILE_SCAN_SET(scan_cfg, value) \
WMI_SET_BITS(scan_cfg, WMI_DBS_CONC_SCAN_CFG_AGILE_SCAN_BITPOS, 1, value)
#define WMI_DBS_CONC_SCAN_CFG_AGILE_DFS_SCAN_SET(scan_cfg, value) \
WMI_SET_BITS(scan_cfg, WMI_DBS_CONC_SCAN_CFG_AGILE_DFS_SCAN_BITPOS, 1, value)
#define WMI_DBS_CONC_SCAN_CFG_ASYNC_DBS_SCAN_SET(scan_cfg, value) \
WMI_SET_BITS(scan_cfg, WMI_DBS_CONC_SCAN_CFG_ASYNC_DBS_SCAN_BITPOS, 1, value)
#define WMI_DBS_CONC_SCAN_CFG_SYNC_DBS_SCAN_SET(scan_cfg, value) \
WMI_SET_BITS(scan_cfg, WMI_DBS_CONC_SCAN_CFG_SYNC_DBS_SCAN_BITPOS, 1, value)
#define WMI_DBS_CONC_SCAN_CFG_DBS_SCAN_GET(scan_cfg) \
((scan_cfg & WMI_DBS_CONC_SCAN_CFG_DBS_SCAN_MASK) >> WMI_DBS_CONC_SCAN_CFG_DBS_SCAN_BITPOS)
#define WMI_DBS_CONC_SCAN_CFG_AGILE_SCAN_GET(scan_cfg) \
((scan_cfg & WMI_DBS_CONC_SCAN_CFG_AGILE_SCAN_MASK) >> WMI_DBS_CONC_SCAN_CFG_AGILE_SCAN_BITPOS)
#define WMI_DBS_CONC_SCAN_CFG_AGILE_DFS_SCAN_GET(scan_cfg) \
((scan_cfg & WMI_DBS_CONC_SCAN_CFG_AGILE_DFS_SCAN_MASK) >> WMI_DBS_CONC_SCAN_CFG_AGILE_DFS_SCAN_BITPOS)
#define WMI_DBS_CONC_SCAN_CFG_ASYNC_DBS_SCAN_GET(scan_cfg) \
((scan_cfg & WMI_DBS_CONC_SCAN_CFG_ASYC_DBS_SCAN_MASK) >> WMI_DBS_CONC_SCAN_CFG_ASYNC_DBS_SCAN_BITPOS)
#define WMI_DBS_CONC_SCAN_CFG_SYNC_DBS_SCAN_GET(scan_cfg) \
((scan_cfg & WMI_DBS_CONC_SCAN_CFG_SYNC_DBS_SCAN_MASK) >> WMI_DBS_CONC_SCAN_CFG_SYNC_DBS_SCAN_BITPOS)
#define WMI_DBS_FW_MODE_CFG_DBS_BITPOS (31)
#define WMI_DBS_FW_MODE_CFG_AGILE_DFS_BITPOS (30)
#define WMI_DBS_FW_MODE_CFG_DBS_FOR_CXN_BITPOS (29)
#define WMI_DBS_FW_MODE_CFG_DBS_MASK (0x1 << WMI_DBS_FW_MODE_CFG_DBS_BITPOS)
#define WMI_DBS_FW_MODE_CFG_AGILE_DFS_MASK (0x1 << WMI_DBS_FW_MODE_CFG_AGILE_DFS_BITPOS)
#define WMI_DBS_FW_MODE_CFG_DBS_FOR_CXN_DFS_MASK (0x1 << WMI_DBS_FW_MODE_CFG_DBS_FOR_CXN_BITPOS)
#define WMI_DBS_FW_MODE_CFG_DBS_SET(fw_mode, value) \
WMI_SET_BITS(fw_mode, WMI_DBS_FW_MODE_CFG_DBS_BITPOS, 1, value)
#define WMI_DBS_FW_MODE_CFG_AGILE_DFS_SET(fw_mode, value) \
WMI_SET_BITS(fw_mode, WMI_DBS_FW_MODE_CFG_AGILE_DFS_BITPOS, 1, value)
#define WMI_DBS_FW_MODE_CFG_DBS_FOR_CXN_SET(fw_mode, value) \
WMI_SET_BITS(fw_mode, WMI_DBS_FW_MODE_CFG_DBS_FOR_CXN_BITPOS, 1, value)
#define WMI_DBS_FW_MODE_CFG_DBS_GET(fw_mode) \
((fw_mode & WMI_DBS_FW_MODE_CFG_DBS_MASK) >> WMI_DBS_FW_MODE_CFG_DBS_BITPOS)
#define WMI_DBS_FW_MODE_CFG_AGILE_DFS_GET(fw_mode) \
((fw_mode & WMI_DBS_FW_MODE_CFG_AGILE_DFS_MAS) >> WMI_DBS_FW_MODE_CFG_AGILE_DFS_BITPOS)
#define WMI_DBS_FW_MODE_CFG_DBS_FOR_CXN_GET(fw_mode) \
((fw_mode & WMI_DBS_FW_MODE_CFG_DBS_FOR_CXN_DFS_MASK) >> WMI_DBS_FW_MODE_CFG_DBS_FOR_CXN_BITPOS)
/** NOTE: This structure cannot be extended in the future without breaking WMI compatibility */
typedef struct _wmi_abi_version {
A_UINT32 abi_version_0; /** WMI Major and Minor versions */
A_UINT32 abi_version_1; /** WMI change revision */
A_UINT32 abi_version_ns_0; /** ABI version namespace first four dwords */
A_UINT32 abi_version_ns_1; /** ABI version namespace second four dwords */
A_UINT32 abi_version_ns_2; /** ABI version namespace third four dwords */
A_UINT32 abi_version_ns_3; /** ABI version namespace fourth four dwords */
} wmi_abi_version;
/*
* maximum number of memroy requests allowed from FW.
*/
#define WMI_MAX_MEM_REQS 16
/* !!NOTE!!:
* This HW_BD_INFO_SIZE cannot be changed without breaking compatibility.
* Please don't change it.
*/
#define HW_BD_INFO_SIZE 5
/**
* PDEV ID to identify the physical device,
* value 0 reserved for SOC level commands/event
*/
#define WMI_PDEV_ID_SOC 0 /* SOC level, applicable to all PDEVs */
#define WMI_PDEV_ID_1ST 1 /* first pdev (pdev 0) */
#define WMI_PDEV_ID_2ND 2 /* second pdev (pdev 1) */
#define WMI_PDEV_ID_3RD 3 /* third pdev (pdev 2) */
/**
* The following struct holds optional payload for
* wmi_service_ready_event_fixed_param,e.g., 11ac pass some of the
* device capability to the host.
*/
typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_WMI_SERVICE_READY_EVENT */
A_UINT32 fw_build_vers; /* firmware build number */
wmi_abi_version fw_abi_vers;
A_UINT32 phy_capability; /* WMI_PHY_CAPABILITY */
A_UINT32 max_frag_entry; /* Maximum number of frag table entries that SW will populate less 1 */
A_UINT32 num_rf_chains;
/* The following field is only valid for service type WMI_SERVICE_11AC */
A_UINT32 ht_cap_info; /* WMI HT Capability */
A_UINT32 vht_cap_info; /* VHT capability info field of 802.11ac */
A_UINT32 vht_supp_mcs; /* VHT Supported MCS Set field Rx/Tx same */
A_UINT32 hw_min_tx_power;
A_UINT32 hw_max_tx_power;
/* sys_cap_info:
* bits 1:0 - RXTX LED + RFKILL enable flags (see WMI_LEDRFKILL_FLAGS)
* bits 31:2 - reserved (must be set to zero)
*/
A_UINT32 sys_cap_info;
A_UINT32 min_pkt_size_enable; /* Enterprise mode short pkt enable */
/** Max beacon and Probe Response IE offload size (includes
* optional P2P IEs) */
A_UINT32 max_bcn_ie_size;
/*
* request to host to allocate a chuck of memory and pss it down to FW via WM_INIT.
* FW uses this as FW extesnsion memory for saving its data structures. Only valid
* for low latency interfaces like PCIE where FW can access this memory directly (or)
* by DMA.
*/
A_UINT32 num_mem_reqs;
/* Max No. scan channels target can support
* If FW is too old and doesn't indicate this number, host side value will default to
* 0, and host will take the original compatible value (62) for future scan channel
* setup.
*/
A_UINT32 max_num_scan_channels;
/* Hardware board specific ID. Values defined in enum WMI_HWBOARD_ID.
* Default 0 means tha hw_bd_info[] is invalid(legacy board).
*/
A_UINT32 hw_bd_id;
A_UINT32 hw_bd_info[HW_BD_INFO_SIZE]; /* Board specific information. Invalid if hw_hd_id is zero. */
/*
* Number of MACs supported, i.e. a DBS-capable device will return 2
*/
A_UINT32 max_supported_macs;
/*
* FW sub-feature capabilities to be used in concurrence with wmi_service_bitmap
*/
A_UINT32 wmi_fw_sub_feat_caps; //values from enum WMI_FW_SUB_FEAT_CAPS
/*
* Number of Dual Band Simultaneous (DBS) hardware modes
*/
A_UINT32 num_dbs_hw_modes;
/*
* txrx_chainmask
* [7:0] - 2G band tx chain mask
* [15:8] - 2G band rx chain mask
* [23:16] - 5G band tx chain mask
* [31:24] - 5G band rx chain mask
*
*/
A_UINT32 txrx_chainmask;
/*
* default Dual Band Simultaneous (DBS) hardware mode
*/
A_UINT32 default_dbs_hw_mode_index;
/*
* Number of msdu descriptors target would use
*/
A_UINT32 num_msdu_desc;
/* The TLVs for hal_reg_capabilities, wmi_service_bitmap and mem_reqs[] will follow this TLV.
* HAL_REG_CAPABILITIES hal_reg_capabilities;
* A_UINT32 wmi_service_bitmap[WMI_SERVICE_BM_SIZE];
* wlan_host_mem_req mem_reqs[];
* wlan_dbs_hw_mode_list[];
*/
} wmi_service_ready_event_fixed_param;
typedef enum {
WMI_RXTX_LED_ENABLE = 0x00000001,
WMI_RFKILL_ENABLE = 0x00000002,
} WMI_LEDRFKILL_FLAGS;
#define WMI_SERVICE_SEGMENT_BM_SIZE32 4 /* 4x A_UINT32 = 128 bits */
typedef struct {
/**
* TLV tag and len; tag equals
* WMITLV_TAG_STRUC_wmi_service_available_event_fixed_param
*/
A_UINT32 tlv_header;
/**
* The wmi_service_segment offset field specifies the position within
* the logical bitmap of WMI service flags at which the WMI service
* flags specified within this message begin.
* Since the first 128 WMI service flags are specified within the
* wmi_service_bitmap field of the WMI_SERVICE_READY_EVENT message,
* the wmi_service_segment_offset value is expected to be 128 or more.
*/
A_UINT32 wmi_service_segment_offset;
A_UINT32 wmi_service_segment_bitmap[WMI_SERVICE_SEGMENT_BM_SIZE32];
} wmi_service_available_event_fixed_param;
typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_WMI_SERVICE_EXT_READY_EVENT */
/* which WMI_DBS_CONC_SCAN_CFG setting the FW is initialized with */
A_UINT32 default_conc_scan_config_bits;
/* which WMI_DBS_FW_MODE_CFG setting the FW is initialized with */
A_UINT32 default_fw_config_bits;
wmi_ppe_threshold ppet;
/*
* see section 8.4.2.213 from draft r8 of 802.11ax;
* see WMI_HE_FRAG_SUPPORT enum
*/
A_UINT32 he_cap_info;
/*
* An HT STA shall not allow transmission of more than one MPDU start
* within the time limit described in the MPDU maximum density field.
*/
A_UINT32 mpdu_density; /* units are microseconds */
/*
* Maximum no of BSSID based RX filters host can program
* Value 0 means FW hasn't given any limit to host.
*/
A_UINT32 max_bssid_rx_filters;
/*
* Extended FW build version information:
* bits 27:0 -> reserved
* bits 31:28 -> CRM sub ID
*/
A_UINT32 fw_build_vers_ext;
} wmi_service_ready_ext_event_fixed_param;
typedef enum {
WMI_FW_STA_RTT_INITR = 0x00000001,
WMI_FW_STA_RTT_RESPR = 0x00000002,
WMI_FW_P2P_CLI_RTT_INITR = 0x00000004,
WMI_FW_P2P_CLI_RTT_RESPR = 0x00000008,
WMI_FW_P2P_GO_RTT_INITR = 0x00000010,
WMI_FW_P2P_GO_RTT_RESPR = 0x00000020,
WMI_FW_AP_RTT_INITR = 0x00000040,
WMI_FW_AP_RTT_RESPR = 0x00000080,
WMI_FW_NAN_RTT_INITR = 0x00000100,
WMI_FW_NAN_RTT_RESPR = 0x00000200,
WMI_FW_SCAN_DBS_POLICY = 0x00000400,
/*
* New fw sub feature capabilites before
* WMI_FW_MAX_SUB_FEAT_CAP
*/
WMI_FW_MAX_SUB_FEAT_CAP = 0x80000000,
} WMI_FW_SUB_FEAT_CAPS;
typedef enum {
WMI_HWBD_NONE = 0, /* No hw board information is given */
WMI_HWBD_QCA6174 = 1, /* Rome(AR6320) */
WMI_HWBD_QCA2582 = 2, /* Killer 1525*/
} WMI_HWBD_ID;
#define ATH_BD_DATA_REV_MASK 0x000000FF
#define ATH_BD_DATA_REV_SHIFT 0
#define ATH_BD_DATA_PROJ_ID_MASK 0x0000FF00
#define ATH_BD_DATA_PROJ_ID_SHIFT 8
#define ATH_BD_DATA_CUST_ID_MASK 0x00FF0000
#define ATH_BD_DATA_CUST_ID_SHIFT 16
#define ATH_BD_DATA_REF_DESIGN_ID_MASK 0xFF000000
#define ATH_BD_DATA_REF_DESIGN_ID_SHIFT 24
#define SET_BD_DATA_REV(bd_data_ver, value) \
((bd_data_ver) &= ~ATH_BD_DATA_REV_MASK, (bd_data_ver) |= ((value) << ATH_BD_DATA_REV_SHIFT))
#define GET_BD_DATA_REV(bd_data_ver) \
(((bd_data_ver) & ATH_BD_DATA_REV_MASK) >> ATH_BD_DATA_REV_SHIFT)
#define SET_BD_DATA_PROJ_ID(bd_data_ver, value) \
((bd_data_ver) &= ~ATH_BD_DATA_PROJ_ID_MASK, (bd_data_ver) |= ((value) << ATH_BD_DATA_PROJ_ID_SHIFT))
#define GET_BD_DATA_PROJ_ID(bd_data_ver) \
(((bd_data_ver) & ATH_BD_DATA_PROJ_ID_MASK) >> ATH_BD_DATA_PROJ_ID_SHIFT)
#define SET_BD_DATA_CUST_ID(bd_data_ver, value) \
((bd_data_ver) &= ~ATH_BD_DATA_CUST_ID_MASK, (bd_data_ver) |= ((value) << ATH_BD_DATA_CUST_ID_SHIFT))
#define GET_BD_DATA_CUST_ID(bd_data_ver) \
(((bd_data_ver) & ATH_BD_DATA_CUST_ID_MASK) >> ATH_BD_DATA_CUST_ID_SHIFT)
#define SET_BD_DATA_REF_DESIGN_ID(bd_data_ver, value) \
((bd_data_ver) &= ~ATH_BD_DATA_REF_DESIGN_ID_MASK, (bd_data_ver) |= ((value) << ATH_BD_DATA_REF_DESIGN_ID_SHIFT))
#define GET_BD_DATA_REF_DESIGN_ID(bd_data_ver) \
(((bd_data_ver) & ATH_BD_DATA_REF_DESIGN_ID_MASK) >> ATH_BD_DATA_REF_DESIGN_ID_SHIFT)
#ifdef ROME_LTE_COEX_FREQ_AVOID
typedef struct {
A_UINT32 start_freq; //start frequency, not channel center freq
A_UINT32 end_freq;//end frequency
}avoid_freq_range_desc;
typedef struct {
//bad channel range count, multi range is allowed, 0 means all channel clear
A_UINT32 num_freq_ranges;
//multi range with num_freq_ranges, LTE advance multi carrier, CDMA,etc
avoid_freq_range_desc avd_freq_range[0];
}wmi_wlan_avoid_freq_ranges_event;
#endif
/** status consists of upper 16 bits fo A_STATUS status and lower 16 bits of module ID that retuned status */
#define WLAN_INIT_STATUS_SUCCESS 0x0
#define WLAN_INIT_STATUS_GEN_FAILED 0x1
#define WLAN_GET_INIT_STATUS_REASON(status) ((status) & 0xffff)
#define WLAN_GET_INIT_STATUS_MODULE_ID(status) (((status) >> 16) & 0xffff)
typedef A_UINT32 WLAN_INIT_STATUS;
typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_ready_event_fixed_param */
wmi_abi_version fw_abi_vers;
/*
* mac_addr is always filled; in addition, there can be a mac_addr_list
* TLV following this fixed_param TLV to specify additional MAC addresses,
* for cases where the target specifies one MAC address per pdev
* (so the host can treat the pdevs within the target as separately
* as possible) rather than one MAC address for the whole SOC.
*/
wmi_mac_addr mac_addr;
A_UINT32 status;
A_UINT32 num_dscp_table;
/* num_extra_mac_addr -
* how many additional MAC addresses besides the above mac_addr
* are provided in the subsequent mac_addr_list TLV
*/
A_UINT32 num_extra_mac_addr;
/*
* Total number of "real" peers (remote peers of an AP vdev,
* BSS peer of a STA vdev, TDLS peer of a STA vdev) that FW supports.
* If 0, then Host can use param_tlv->resource_config->num_peers as
* total number of peers.
*/
A_UINT32 num_total_peers;
/*
* Number of extra peers that Firmware adds.
* These are self peers and/or other FW only peers that don't represent
* a 802.11 transceiver, but instead are used for convenience, e.g. to
* provide a pseudo-peer object for an AP vdev's bcast/mcast tx queues,
* to allow each tx queue to belong to a peer object.
* Peer ID can be up to num_total_peers + num_extra_peers.
*/
A_UINT32 num_extra_peers;
/*
* This fixed_param TLV is followed by these additional TLVs:
* mac_addr_list[num_extra_mac_addr];
*/
} wmi_ready_event_fixed_param;
typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_resource_config */
/**
* @brief num_vdev - number of virtual devices (VAPs) to support
*/
A_UINT32 num_vdevs;
/**
* @brief num_peers - number of peer nodes to support
*/
A_UINT32 num_peers;
/*
* @brief In offload mode target supports features like WOW, chatter and other
* protocol offloads. In order to support them some functionalities like
* reorder buffering, PN checking need to be done in target. This determines
* maximum number of peers suported by target in offload mode
*/
A_UINT32 num_offload_peers;
/* @brief Number of reorder buffers available for doing target based reorder
* Rx reorder buffering
*/
A_UINT32 num_offload_reorder_buffs;
/**
* @brief num_peer_keys - number of keys per peer
*/
A_UINT32 num_peer_keys;
/**
* @brief num_peer_tids - number of TIDs to provide storage for per peer.
*/
A_UINT32 num_tids;
/**
* @brief ast_skid_limit - max skid for resolving hash collisions
* @details
* The address search table is sparse, so that if two MAC addresses
* result in the same hash value, the second of these conflicting
* entries can slide to the next index in the address search table,
* and use it, if it is unoccupied. This ast_skid_limit parameter
* specifies the upper bound on how many subsequent indices to search
* over to find an unoccupied space.
*/
A_UINT32 ast_skid_limit;
/**
* @brief tx_chain_mask - the nominal chain mask for transmit
* @details
* The chain mask may be modified dynamically, e.g. to operate AP tx with
* a reduced number of chains if no clients are associated.
* This configuration parameter specifies the nominal chain-mask that
* should be used when not operating with a reduced set of tx chains.
*/
A_UINT32 tx_chain_mask;
/**
* @brief rx_chain_mask - the nominal chain mask for receive
* @details
* The chain mask may be modified dynamically, e.g. for a client to use
* a reduced number of chains for receive if the traffic to the client
* is low enough that it doesn't require downlink MIMO or antenna
* diversity.
* This configuration parameter specifies the nominal chain-mask that
* should be used when not operating with a reduced set of rx chains.
*/
A_UINT32 rx_chain_mask;
/**
* @brief rx_timeout_pri - what rx reorder timeout (ms) to use for the AC
* @details
* Each WMM access class (voice, video, best-effort, background) will
* have its own timeout value to dictate how long to wait for missing
* rx MPDUs to arrive before flushing subsequent MPDUs that have already
* been received.
* This parameter specifies the timeout in milliseconds for each class .
* NOTE: the number of class (defined as 4) cannot be
* changed in the future without breaking WMI compatibility.
*/
A_UINT32 rx_timeout_pri[4];
/**
* @brief rx_decap mode - what mode the rx should decap packets to
* @details
* MAC can decap to RAW (no decap), native wifi or Ethernet types
* THis setting also determines the default TX behavior, however TX
* behavior can be modified on a per VAP basis during VAP init
*/
A_UINT32 rx_decap_mode;
/**
* @brief scan_max_pending_req - what is the maximum scan requests than can be queued
*/
A_UINT32 scan_max_pending_req;
/**
* @brief maximum VDEV that could use BMISS offload
*/
A_UINT32 bmiss_offload_max_vdev;
/**
* @brief maximum VDEV that could use offload roaming
*/
A_UINT32 roam_offload_max_vdev;
/**
* @brief maximum AP profiles that would push to offload roaming
*/
A_UINT32 roam_offload_max_ap_profiles;
/**
* @brief num_mcast_groups - how many groups to use for mcast->ucast conversion
* @details
* The target's WAL maintains a table to hold information regarding which
* peers belong to a given multicast group, so that if multicast->unicast
* conversion is enabled, the target can convert multicast tx frames to a
* series of unicast tx frames, to each peer within the multicast group.
* This num_mcast_groups configuration parameter tells the target how
* many multicast groups to provide storage for within its multicast
* group membership table.
*/
A_UINT32 num_mcast_groups;
/**
* @brief num_mcast_table_elems - size to alloc for the mcast membership table
* @details
* This num_mcast_table_elems configuration parameter tells the target
* how many peer elements it needs to provide storage for in its
* multicast group membership table.
* These multicast group membership table elements are shared by the
* multicast groups stored within the table.
*/
A_UINT32 num_mcast_table_elems;
/**
* @brief mcast2ucast_mode - whether/how to do multicast->unicast conversion
* @details
* This configuration parameter specifies whether the target should
* perform multicast --> unicast conversion on transmit, and if so,
* what to do if it finds no entries in its multicast group membership
* table for the multicast IP address in the tx frame.
* Configuration value:
* 0 -> Do not perform multicast to unicast conversion.
* 1 -> Convert multicast frames to unicast, if the IP multicast address
* from the tx frame is found in the multicast group membership
* table. If the IP multicast address is not found, drop the frame.
* 2 -> Convert multicast frames to unicast, if the IP multicast address
* from the tx frame is found in the multicast group membership
* table. If the IP multicast address is not found, transmit the
* frame as multicast.
*/
A_UINT32 mcast2ucast_mode;
/**
* @brief tx_dbg_log_size - how much memory to allocate for a tx PPDU dbg log
* @details
* This parameter controls how much memory the target will allocate to
* store a log of tx PPDU meta-information (how large the PPDU was,
* when it was sent, whether it was successful, etc.)
*/
A_UINT32 tx_dbg_log_size;
/**
* @brief num_wds_entries - how many AST entries to be allocated for WDS
*/
A_UINT32 num_wds_entries;
/**
* @brief dma_burst_size - MAC DMA burst size, e.g., on Peregrine on PCI
* this limit can be 0 -default, 1 256B
*/
A_UINT32 dma_burst_size;
/**
* @brief mac_aggr_delim - Fixed delimiters to be inserted after every MPDU
* to account for interface latency to avoid underrun.
*/
A_UINT32 mac_aggr_delim;
/**
* @brief rx_skip_defrag_timeout_dup_detection_check
* @details
* determine whether target is responsible for detecting duplicate
* non-aggregate MPDU and timing out stale fragments.
*
* A-MPDU reordering is always performed on the target.
*
* 0: target responsible for frag timeout and dup checking
* 1: host responsible for frag timeout and dup checking
*/
A_UINT32 rx_skip_defrag_timeout_dup_detection_check;
/**
* @brief vow_config - Configuration for VoW : No of Video Nodes to be supported
* and Max no of descriptors for each Video link (node).
*/
A_UINT32 vow_config;
/**
* @brief maximum VDEV that could use GTK offload
*/
A_UINT32 gtk_offload_max_vdev;
/**
* @brief num_msdu_desc - Number of msdu descriptors target should use
*/
A_UINT32 num_msdu_desc; /* Number of msdu desc */
/**
* @brief max_frag_entry - Max. number of Tx fragments per MSDU
* @details
* This parameter controls the max number of Tx fragments per MSDU.
* This is sent by the target as part of the WMI_SERVICE_READY event
* and is overriden by the OS shim as required.
*/
A_UINT32 max_frag_entries;
/**
* @brief num_tdls_vdevs - Max. number of vdevs that can support TDLS
* @brief num_msdu_desc - Number of vdev that can support beacon offload
*/
A_UINT32 num_tdls_vdevs; /* number of vdevs allowed to do tdls */
/**
* @brief num_tdls_conn_table_entries - Number of peers tracked by tdls vdev
* @details
* Each TDLS enabled vdev can track outgoing transmits/rssi/rates to/of
* peers in a connection tracking table for possible TDLS link creation
* or deletion. This controls the number of tracked peers per vdev.
*/
A_UINT32 num_tdls_conn_table_entries; /* number of peers to track per TDLS vdev */
A_UINT32 beacon_tx_offload_max_vdev;
A_UINT32 num_multicast_filter_entries;
A_UINT32 num_wow_filters; /*host can configure the number of wow filters*/
/**
* @brief num_keep_alive_pattern - Num of keep alive patterns configured
* from host.
*/
A_UINT32 num_keep_alive_pattern;
/**
* @brief keep_alive_pattern_size - keep alive pattern size.
*/
A_UINT32 keep_alive_pattern_size;
/**
* @brief max_tdls_concurrent_sleep_sta - Number of tdls sleep sta supported
* @details
* Each TDLS STA can become a sleep STA independently. This parameter
* mentions how many such sleep STAs can be supported concurrently.
*/
A_UINT32 max_tdls_concurrent_sleep_sta;
/**
* @brief max_tdls_concurrent_buffer_sta - Number of tdls buffer sta supported
* @details
* Each TDLS STA can become a buffer STA independently. This parameter
* mentions how many such buffer STAs can be supported concurrently.
*/
A_UINT32 max_tdls_concurrent_buffer_sta;
/**
* @brief wmi_send_separate - host configures fw to send the wmi separately
*/
A_UINT32 wmi_send_separate;
/**
* @brief num_ocb_vdevs - Number of vdevs used for OCB support
*/
A_UINT32 num_ocb_vdevs;
/**
* @brief num_ocb_channels - The supported number of simultaneous OCB channels
*/
A_UINT32 num_ocb_channels;
/**
* @brief num_ocb_schedules - The supported number of OCB schedule segments
*/
A_UINT32 num_ocb_schedules;
/**
* @brief specific configuration from host, such as per platform configuration
*/
#define WMI_RSRC_CFG_FLAG_WOW_IGN_PCIE_RST_S 0
#define WMI_RSRC_CFG_FLAG_WOW_IGN_PCIE_RST_M 0x1
#define WMI_RSRC_CFG_FLAG_LTEU_SUPPORT_S 1
#define WMI_RSRC_CFG_FLAG_LTEU_SUPPORT_M 0x2
#define WMI_RSRC_CFG_FLAG_COEX_GPIO_SUPPORT_S 2
#define WMI_RSRC_CFG_FLAG_COEX_GPIO_SUPPORT_M 0x4
#define WMI_RSRC_CFG_FLAG_AUX_RADIO_SPECTRAL_INTF_S 3
#define WMI_RSRC_CFG_FLAG_AUX_RADIO_SPECTRAL_INTF_M 0x8
#define WMI_RSRC_CFG_FLAG_AUX_RADIO_CHAN_LOAD_INTF_S 4
#define WMI_RSRC_CFG_FLAG_AUX_RADIO_CHAN_LOAD_INTF_M 0x10
#define WMI_RSRC_CFG_FLAG_BSS_CHANNEL_INFO_64_S 5
#define WMI_RSRC_CFG_FLAG_BSS_CHANNEL_INFO_64_M 0x20
#define WMI_RSRC_CFG_FLAG_ATF_CONFIG_ENABLE_S 6
#define WMI_RSRC_CFG_FLAG_ATF_CONFIG_ENABLE_M 0x40
#define WMI_RSRC_CFG_FLAG_IPHR_PAD_CONFIG_ENABLE_S 7
#define WMI_RSRC_CFG_FLAG_IPHR_PAD_CONFIG_ENABLE_M 0x80
#define WMI_RSRC_CFG_FLAG_QWRAP_MODE_ENABLE_S 8
#define WMI_RSRC_CFG_FLAG_QWRAP_MODE_ENABLE_M 0x100
#define WMI_RSRC_CFG_FLAG_MGMT_COMP_EVT_BUNDLE_SUPPORT_S 9
#define WMI_RSRC_CFG_FLAG_MGMT_COMP_EVT_BUNDLE_SUPPORT_M 0x200
#define WMI_RSRC_CFG_FLAG_TX_MSDU_ID_NEW_PARTITION_SUPPORT_S 10
#define WMI_RSRC_CFG_FLAG_TX_MSDU_ID_NEW_PARTITION_SUPPORT_M 0x400
#define WMI_RSRC_CFG_FLAG_TX_PPDU_STATS_ENABLE_S 11
#define WMI_RSRC_CFG_FLAG_TX_PPDU_STATS_ENABLE_M 0x800
#define WMI_RSRC_CFG_FLAG_TCL_CCE_DISABLE_S 12
#define WMI_RSRC_CFG_FLAG_TCL_CCE_DISABLE_M 0x1000
A_UINT32 flag1;
/** @brief smart_ant_cap - Smart Antenna capabilities information
* @details
* 1 - Smart antenna is enabled.
* 0 - Smart antenna is disabled.
* In future this can contain smart antenna specifc capabilities.
*/
A_UINT32 smart_ant_cap;
/**
* User can configure the buffers allocated for each AC (BE, BK, VI, VO)
* during init
*/
A_UINT32 BK_Minfree;
A_UINT32 BE_Minfree;
A_UINT32 VI_Minfree;
A_UINT32 VO_Minfree;
/**
* @brief alloc_frag_desc_for_data_pkt . Controls data packet fragment
* descriptor memory allocation.
* 1 - Allocate fragment descriptor memory for data packet in firmware.
* If host wants to transmit data packet at its desired rate,
* this field must be set.
* 0 - Don't allocate fragment descriptor for data packet.
*/
A_UINT32 alloc_frag_desc_for_data_pkt;
/** how much space to allocate for NDP NS (neighbor solicitation) specs */
A_UINT32 num_ns_ext_tuples_cfg;
/**
* size (in bytes) of the buffer the FW shall allocate to store
* packet filtering instructions
*/
A_UINT32 bpf_instruction_size;
/**
* Maximum no of BSSID based RX filters host would program
* Value 0 means host doesn't given any limit to FW.
*/
A_UINT32 max_bssid_rx_filters;
/**
* Use PDEV ID instead of MAC ID, added for backward compatibility with older host
* which is using MAC ID. 1 means PDEV ID, 0 means MAC ID.
*/
A_UINT32 use_pdev_id;
/** Maximum number of scan clients whose DBS scan duty cycle can be configured */
A_UINT32 max_num_dbs_scan_duty_cycle;
/** Maximum number of Multi group key to support */
A_UINT32 max_num_group_keys;
/**
* HTT peer map/unmap V2 format support
* 0 -> host doesn't support HTT peer map/unmap v2 format.
* 1 -> host supports HTT peer map/unmap v2 format; the target is
* allowed but not required to use peer map/unmap v2 format.
*/
A_UINT32 peer_map_unmap_v2_support;
/** Sched config params for all pdevs
* These tx scheduling configuration parameters are currently only
* used for internal testing purposes; therefore the non-default
* values for this field are not currently documented.
* For regular use, this field should be set to 0x0.
*/
A_UINT32 sched_params;
} wmi_resource_config;
#define WMI_RSRC_CFG_FLAG_SET(word32, flag, value) \
do { \
(word32) &= ~WMI_RSRC_CFG_FLAG_ ## flag ## _M; \
(word32) |= ((value) << WMI_RSRC_CFG_FLAG_ ## flag ## _S) & \
WMI_RSRC_CFG_FLAG_ ## flag ## _M; \
} while (0)
#define WMI_RSRC_CFG_FLAG_GET(word32, flag) \
(((word32) & WMI_RSRC_CFG_FLAG_ ## flag ## _M) >> \
WMI_RSRC_CFG_FLAG_ ## flag ## _S)
#define WMI_RSRC_CFG_FLAG_WOW_IGN_PCIE_RST_SET(word32, value) \
WMI_RSRC_CFG_FLAG_SET((word32), WOW_IGN_PCIE_RST, (value))
#define WMI_RSRC_CFG_FLAG_WOW_IGN_PCIE_RST_GET(word32) \
WMI_RSRC_CFG_FLAG_GET((word32), WOW_IGN_PCIE_RST)
#define WMI_RSRC_CFG_FLAG_LTEU_SUPPORT_SET(word32, value) \
WMI_RSRC_CFG_FLAG_SET((word32), LTEU_SUPPORT, (value))
#define WMI_RSRC_CFG_FLAG_LTEU_SUPPORT_GET(word32) \
WMI_RSRC_CFG_FLAG_GET((word32), LTEU_SUPPORT)
#define WMI_RSRC_CFG_FLAG_COEX_GPIO_SUPPORT_SET(word32, value) \
WMI_RSRC_CFG_FLAG_SET((word32), COEX_GPIO_SUPPORT, (value))
#define WMI_RSRC_CFG_FLAG_COEX_GPIO_SUPPORT_GET(word32) \
WMI_RSRC_CFG_FLAG_GET((word32), COEX_GPIO_SUPPORT)
#define WMI_RSRC_CFG_FLAG_AUX_RADIO_SPECTRAL_INTF_SET(word32, value) \
WMI_RSRC_CFG_FLAG_SET((word32), AUX_RADIO_SPECTRAL_INTF, (value))
#define WMI_RSRC_CFG_FLAG_AUX_RADIO_SPECTRAL_INTF_GET(word32) \
WMI_RSRC_CFG_FLAG_GET((word32), AUX_RADIO_SPECTRAL_INTF)
#define WMI_RSRC_CFG_FLAG_AUX_RADIO_CHAN_LOAD_INTF_SET(word32, value) \
WMI_RSRC_CFG_FLAG_SET((word32), AUX_RADIO_CHAN_LOAD_INTF, (value))
#define WMI_RSRC_CFG_FLAG_AUX_RADIO_CHAN_LOAD_INTF_GET(word32) \
WMI_RSRC_CFG_FLAG_GET((word32), AUX_RADIO_CHAN_LOAD_INTF)
#define WMI_RSRC_CFG_FLAG_BSS_CHANNEL_INFO_64_SET(word32, value) \
WMI_RSRC_CFG_FLAG_SET((word32), BSS_CHANNEL_INFO_64, (value))
#define WMI_RSRC_CFG_FLAG_BSS_CHANNEL_INFO_64_GET(word32) \
WMI_RSRC_CFG_FLAG_GET((word32), BSS_CHANNEL_INFO_64)
#define WMI_RSRC_CFG_FLAG_ATF_CONFIG_ENABLE_SET(word32, value) \
WMI_RSRC_CFG_FLAG_SET((word32), ATF_CONFIG_ENABLE, (value))
#define WMI_RSRC_CFG_FLAG_ATF_CONFIG_ENABLE_GET(word32) \
WMI_RSRC_CFG_FLAG_GET((word32), ATF_CONFIG_ENABLE)
#define WMI_RSRC_CFG_FLAG_IPHR_PAD_CONFIG_ENABLE_SET(word32, value) \
WMI_RSRC_CFG_FLAG_SET((word32), IPHR_PAD_CONFIG_ENABLE, (value))
#define WMI_RSRC_CFG_FLAG_IPHR_PAD_CONFIG_ENABLE_GET(word32) \
WMI_RSRC_CFG_FLAG_GET((word32), IPHR_PAD_CONFIG_ENABLE)
#define WMI_RSRC_CFG_FLAG_QWRAP_MODE_ENABLE_SET(word32, value) \
WMI_RSRC_CFG_FLAG_SET((word32), QWRAP_MODE_ENABLE, (value))
#define WMI_RSRC_CFG_FLAG_QWRAP_MODE_ENABLE_GET(word32) \
WMI_RSRC_CFG_FLAG_GET((word32), QWRAP_MODE_ENABLE)
#define WMI_RSRC_CFG_FLAG_MGMT_COMP_EVT_BUNDLE_SUPPORT_SET(word32, value) \
WMI_RSRC_CFG_FLAG_SET((word32), MGMT_COMP_EVT_BUNDLE_SUPPORT, (value))
#define WMI_RSRC_CFG_FLAG_MGMT_COMP_EVT_BUNDLE_SUPPORT_GET(word32) \
WMI_RSRC_CFG_FLAG_GET((word32), MGMT_COMP_EVT_BUNDLE_SUPPORT)
#define WMI_RSRC_CFG_FLAG_TX_MSDU_ID_NEW_PARTITION_SUPPORT_SET(word32, value) \
WMI_RSRC_CFG_FLAG_SET((word32), TX_MSDU_ID_NEW_PARTITION_SUPPORT, (value))
#define WMI_RSRC_CFG_FLAG_TX_MSDU_ID_NEW_PARTITION_SUPPORT_GET(word32) \
WMI_RSRC_CFG_FLAG_GET((word32), TX_MSDU_ID_NEW_PARTITION_SUPPORT)
#define WMI_RSRC_CFG_FLAG_TCL_CCE_DISABLE_SET(word32, value) \
WMI_RSRC_CFG_FLAG_SET((word32), TCL_CCE_DISABLE, (value))
#define WMI_RSRC_CFG_FLAG_TCL_CCE_DISABLE_GET(word32) \
WMI_RSRC_CFG_FLAG_GET((word32), TCL_CCE_DISABLE)
typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_init_cmd_fixed_param */
/** The following indicate the WMI versions to be supported by
* the host driver. Note that the host driver decide to
* "downgrade" its WMI version support and this may not be the
* native version of the host driver. */
wmi_abi_version host_abi_vers;
A_UINT32 num_host_mem_chunks; /** size of array host_mem_chunks[] */
/* The TLVs for resource_config, host_mem_chunks[], and hw_mode_config
* will follow.
* wmi_resource_config resource_config;
* wlan_host_memory_chunk host_mem_chunks[];
* wmi_pdev_set_hw_mode_cmd_fixed_param hw_mode_config;
* Note that the hw_mode_config, in spite of its "pdev" name,
* applies to the entire target rather than for a single pdev
* within the target.
* To avoid specifying a HW mode for the target, the host should
* fill hw_mode_config's fields with 0x0.
*/
} wmi_init_cmd_fixed_param;
/**
* TLV for channel list
*/
typedef struct {
/** WMI_CHAN_LIST_TAG */
A_UINT32 tag;
/** # of channels to scan */
A_UINT32 num_chan;
/** channels in Mhz */
A_UINT32 channel_list[1];
} wmi_chan_list;
/**
* TLV for bssid list
*/
typedef struct {
/** WMI_BSSID_LIST_TAG */
A_UINT32 tag;
/** number of bssids */
A_UINT32 num_bssid;
/** bssid list */
wmi_mac_addr bssid_list[1];
} wmi_bssid_list;
/**
* TLV for ie data.
*/
typedef struct {
/** WMI_IE_TAG */
A_UINT32 tag;
/** number of bytes in ie data */
A_UINT32 ie_len;
/** ie data array (ie_len adjusted to number of words (ie_len + 4)/4 ) */
A_UINT32 ie_data[1];
} wmi_ie_data;
/**
* TLV used for length/buffer
*/
typedef struct {
/**
* TLV tag and len; tag equals
* WMITLV_TAG_STRUC_wmi_tlv_buf_len_param
*/
A_UINT32 tlv_header;
A_UINT32 buf_len; /** Length of buf */
/**
* Following this structure is the TLV byte stream of buf
* of length buf_len:
* A_UINT8 buf[];
*
*/
} wmi_tlv_buf_len_param;
typedef struct {
/** Len of the SSID */
A_UINT32 ssid_len;
/** SSID */
A_UINT32 ssid[8];
} wmi_ssid;
typedef struct {
/** WMI_SSID_LIST_TAG */
A_UINT32 tag;
A_UINT32 num_ssids;
wmi_ssid ssids[1];
} wmi_ssid_list;
typedef struct {
/** WMI_SCAN_START_OFFSET_TAG */
A_UINT32 tag;
/** Number of start TSF offsets */
A_UINT32 num_offset;
/** Array of start TSF offsets provided in milliseconds */
A_UINT32 start_tsf_offset[1];
} wmi_scan_start_offset;
/**
* WLAN_SCAN_CHAN_MODE Macros defined for A_UINT8 phymode_list[]
*/
/** enum WLAN_PHY_MODE _mode starts from 0, but the WMI message requires
* 0 to be used to represent unspecified / don't care / default values.
* Therefore, WMI phy mode = WLAN phy mode + 1.
*/
/** If the received WMI phy mode is 0 then it is ignored by the FW,
* and the FW will use any mode as long as the frequency matches.
*/
/** The number of phy_mode's (BW+mode) passed in the TLV phymode_list[] must
* be equal to num_chan. (Unless the host does not specify phymode_list values
* at all, in which case the number of phymode_list elements will be zero.)
* The indexing of the phymode_list[] array corresponds to same index of
* the chan_list[] array.
*/
#define WMI_SCAN_CHAN_SET_MODE(_c) ((_c) + 1)
#define WMI_SCAN_CHAN_GET_MODE(_c) ((_c) - 1)
#define WMI_SCAN_CHAN_MODE_IS_SET(_c) (_c)
/* prefix used by scan requestor ids on the host */
#define WMI_HOST_SCAN_REQUESTOR_ID_PREFIX 0xA000
/* prefix used by scan request ids generated on the host */
/* host cycles through the lower 12 bits to generate ids */
#define WMI_HOST_SCAN_REQ_ID_PREFIX 0xA000
#define WLAN_SCAN_PARAMS_MAX_SSID 16
#define WLAN_SCAN_PARAMS_MAX_BSSID 4
#define WLAN_SCAN_PARAMS_MAX_IE_LEN 512
/* NOTE: This constant cannot be changed without breaking WMI compatibility */
#define WMI_IE_BITMAP_SIZE 8
typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_start_scan_cmd_fixed_param */
/** Scan ID (lower 16 bits) MSB 4 bits is used to identify scan client based on enum WMI_SCAN_CLIENT_ID */
A_UINT32 scan_id;
/** Scan requestor ID (lower 16 bits) is used by scan client to classify the scan source, reason, ...etc */
A_UINT32 scan_req_id;
/** VDEV id(interface) that is requesting scan */
A_UINT32 vdev_id;
/** Scan Priority, input to scan scheduler */
A_UINT32 scan_priority;
/** Scan events subscription */
A_UINT32 notify_scan_events;
/** dwell time in msec on active channels */
A_UINT32 dwell_time_active;
/** dwell time in msec on passive channels */
A_UINT32 dwell_time_passive;
/** min time in msec on the BSS channel,only valid if atleast one VDEV is active*/
A_UINT32 min_rest_time;
/** max rest time in msec on the BSS channel,only valid if at least one VDEV is active*/
/** the scanner will rest on the bss channel at least min_rest_time. after min_rest_time the scanner
* will start checking for tx/rx activity on all VDEVs. if there is no activity the scanner will
* switch to off channel. if there is activity the scanner will let the radio on the bss channel
* until max_rest_time expires.at max_rest_time scanner will switch to off channel
* irrespective of activity. activity is determined by the idle_time parameter.
*/
A_UINT32 max_rest_time;
/** time before sending next set of probe requests.
* The scanner keeps repeating probe requests transmission with period specified by repeat_probe_time.
* The number of probe requests specified depends on the ssid_list and bssid_list
*/
A_UINT32 repeat_probe_time;
/** time in msec between 2 consequetive probe requests with in a set. */
A_UINT32 probe_spacing_time;
/** data inactivity time in msec on bss channel that will be used by scanner for measuring the inactivity */
A_UINT32 idle_time;
/** maximum time in msec allowed for scan */
A_UINT32 max_scan_time;
/** delay in msec before sending first probe request after switching to a channel */
A_UINT32 probe_delay;
/** Scan control flags */
A_UINT32 scan_ctrl_flags;
/** Burst duration time in msec*/
A_UINT32 burst_duration;
/** # if channels to scan. In the TLV channel_list[] */
A_UINT32 num_chan;
/** number of bssids. In the TLV bssid_list[] */
A_UINT32 num_bssid;
/** number of ssid. In the TLV ssid_list[] */
A_UINT32 num_ssids;
/** number of bytes in ie data. In the TLV ie_data[]. Max len is defined by WLAN_SCAN_PARAMS_MAX_IE_LEN */
A_UINT32 ie_len;
/** Max number of probes to be sent */
A_UINT32 n_probes;
/** MAC Address to use in Probe Req as SA **/
wmi_mac_addr mac_addr;
/** Mask on which MAC has to be randomized **/
wmi_mac_addr mac_mask;
/** ie bitmap to use in probe req **/
A_UINT32 ie_bitmap[WMI_IE_BITMAP_SIZE];
/** Number of vendor OUIs. In the TLV vendor_oui[] **/
A_UINT32 num_vendor_oui;
/** Scan control flags extended **/
A_UINT32 scan_ctrl_flags_ext;
/**
* TLV (tag length value ) parameters follow the scan_cmd
* structure. The TLV's are:
* A_UINT32 channel_list[num_chan];
* wmi_ssid ssid_list[num_ssids];
* wmi_mac_addr bssid_list[num_bssid];
* A_UINT8 ie_data[ie_len];
* wmi_vendor_oui vendor_oui[num_vendor_oui];
* A_UINT8 phymode_list[0 or num_chan]; // see WMI_SCAN_CHAN_MODE macros
*/
} wmi_start_scan_cmd_fixed_param;
/**
* scan control flags.
*/
/** passively scan all channels including active channels */
#define WMI_SCAN_FLAG_PASSIVE 0x1
/** add wild card ssid probe request even though ssid_list is specified. */
#define WMI_SCAN_ADD_BCAST_PROBE_REQ 0x2
/** add cck rates to rates/xrate ie for the generated probe request */
#define WMI_SCAN_ADD_CCK_RATES 0x4
/** add ofdm rates to rates/xrate ie for the generated probe request */
#define WMI_SCAN_ADD_OFDM_RATES 0x8
/** To enable indication of Chan load and Noise floor to host */
#define WMI_SCAN_CHAN_STAT_EVENT 0x10
/** Filter Probe request frames */
#define WMI_SCAN_FILTER_PROBE_REQ 0x20
/**When set, not to scan DFS channels*/
#define WMI_SCAN_BYPASS_DFS_CHN 0x40
/**When set, certain errors are ignored and scan continues.
* Different FW scan engine may use its own logic to decide what errors to ignore*/
#define WMI_SCAN_CONTINUE_ON_ERROR 0x80
/** Enable promiscous mode for ese */
#define WMI_SCAN_FILTER_PROMISCOUS 0x100
/** allow to send probe req on DFS channel */
#define WMI_SCAN_FLAG_FORCE_ACTIVE_ON_DFS 0x200
/** add TPC content in probe req frame */
#define WMI_SCAN_ADD_TPC_IE_IN_PROBE_REQ 0x400
/** add DS content in probe req frame */
#define WMI_SCAN_ADD_DS_IE_IN_PROBE_REQ 0x800
/** use random mac address for TA for probe request frame and add
* oui specified by WMI_SCAN_PROB_REQ_OUI_CMDID to the probe req frame.
* if oui is not set by WMI_SCAN_PROB_REQ_OUI_CMDID then the flag is ignored*/
#define WMI_SCAN_ADD_SPOOFED_MAC_IN_PROBE_REQ 0x1000
/** allow mgmt transmission during off channel scan */
#define WMI_SCAN_OFFCHAN_MGMT_TX 0x2000
/** allow data transmission during off channel scan */
#define WMI_SCAN_OFFCHAN_DATA_TX 0x4000
/** allow capture ppdu with phy errrors */
#define WMI_SCAN_CAPTURE_PHY_ERROR 0x8000
/** always do passive scan on passive channels */
#define WMI_SCAN_FLAG_STRICT_PASSIVE_ON_PCHN 0x10000
/** set HALF (10MHz) rate support */
#define WMI_SCAN_FLAG_HALF_RATE_SUPPORT 0x20000
/** set Quarter (5MHz) rate support */
#define WMI_SCAN_FLAG_QUARTER_RATE_SUPPORT 0x40000
#define WMI_SCAN_RANDOM_SEQ_NO_IN_PROBE_REQ 0x80000
#define WMI_SCAN_ENABLE_IE_WHTELIST_IN_PROBE_REQ 0x100000
/** for adaptive scan mode using 3 bits (21 - 23 bits) */
#define WMI_SCAN_DWELL_MODE_MASK 0x00E00000
#define WMI_SCAN_DWELL_MODE_SHIFT 21
typedef enum {
WMI_SCAN_DWELL_MODE_DEFAULT = 0,
WMI_SCAN_DWELL_MODE_CONSERVATIVE = 1,
WMI_SCAN_DWELL_MODE_MODERATE = 2,
WMI_SCAN_DWELL_MODE_AGGRESSIVE = 3,
WMI_SCAN_DWELL_MODE_STATIC = 4,
} WMI_SCAN_DWELL_MODE;
#define WMI_SCAN_SET_DWELL_MODE(flag, mode) \
do { \
(flag) |= (((mode) << WMI_SCAN_DWELL_MODE_SHIFT) & \
WMI_SCAN_DWELL_MODE_MASK); \
} while(0)
#define WMI_SCAN_GET_DWELL_MODE(flag) \
(((flag) & WMI_SCAN_DWELL_MODE_MASK) >> WMI_SCAN_DWELL_MODE_SHIFT)
/** WMI_SCAN_CLASS_MASK must be the same value as IEEE80211_SCAN_CLASS_MASK */
#define WMI_SCAN_CLASS_MASK 0xFF000000
/*
* Masks identifying types/ID of scans
* Scan_Stop macros should be the same value as below defined in UMAC
* #define IEEE80211_SPECIFIC_SCAN 0x00000000
* #define IEEE80211_VAP_SCAN 0x01000000
* #define IEEE80211_ALL_SCANS 0x04000000
*/
#define WMI_SCAN_STOP_ONE 0x00000000
#define WMI_SCN_STOP_VAP_ALL 0x01000000
#define WMI_SCAN_STOP_ALL 0x04000000
/** extended Scan ctrl flags **/
#define WMI_SCAN_FLAG_EXT_DBS_SCAN_POLICY_MASK 0x00000003 /* Bit 0-1 reserved for DBS scan selection policy.*/
#define WMI_SCAN_DBS_POLICY_DEFAULT 0x0 /** Select duty cycle if configured, else fall back to whatever
policy scan manager computes */
#define WMI_SCAN_DBS_POLICY_FORCE_NONDBS 0x1 /** Force to select Non-DBS scan */
#define WMI_SCAN_DBS_POLICY_IGNORE_DUTY 0x2 /** Ignore duty cycle even if configured and fall back to whatever
policy scan manager computes*/
#define WMI_SCAN_DBS_POLICY_RESERVED 0x3
#define WMI_SCAN_DBS_POLICY_MAX 0x3
/** Enable Reception of Public Action frame with this flag
* (inside scan_ctrl_flags_ext field of wmi_start_scan_cmd_fixed_param)
*/
#define WMI_SCAN_FLAG_EXT_FILTER_PUBLIC_ACTION_FRAME 0x4
typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_stop_scan_cmd_fixed_param */
/** requestor requesting cancel */
A_UINT32 requestor;
/** Scan ID */
A_UINT32 scan_id;
/**
* Req Type
* req_type should be WMI_SCAN_STOP_ONE, WMI_SCN_STOP_VAP_ALL or WMI_SCAN_STOP_ALL
* WMI_SCAN_STOP_ONE indicates to stop a specific scan with scan_id
* WMI_SCN_STOP_VAP_ALL indicates to stop all scan requests on a specific
* vDev with vdev_id and pdev with pdev_id
* WMI_SCAN_STOP_ALL indicates to stop all scan requests in both Scheduler's queue and Scan Engine
*/
A_UINT32 req_type;
/**
* vDev ID
* used when req_type equals to WMI_SCN_STOP_VAP_ALL, it indexed the vDev on which to stop the scan
*/
A_UINT32 vdev_id;
/** pdev_id for identifying the MAC
* See macros starting with WMI_PDEV_ID_ for values.
* In non-DBDC case host should set it to 0
*/
A_UINT32 pdev_id;
} wmi_stop_scan_cmd_fixed_param;
#define MAX_NUM_CHAN_PER_WMI_CMD 58 // each WMI cmd can hold 58 channel entries at most
#define APPEND_TO_EXISTING_CHAN_LIST 1
typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_scan_chan_list_cmd_fixed_param */
A_UINT32 num_scan_chans; /** no of elements in chan_info[] */
A_UINT32 flags; /* Flags used to control the behavior of channel list update on target side */
A_UINT32 pdev_id; /* pdev_id for identifying the MAC. See macros starting with WMI_PDEV_ID_ for values */
/** Followed by the variable length TLV chan_info:
* wmi_channel chan_info[] */
} wmi_scan_chan_list_cmd_fixed_param;
/*
* Priority numbers must be sequential, starting with 0.
*/
/* NOTE: WLAN SCAN_PRIORITY_COUNT can't be changed without breaking the compatibility */
typedef enum {
WMI_SCAN_PRIORITY_VERY_LOW = 0,
WMI_SCAN_PRIORITY_LOW,
WMI_SCAN_PRIORITY_MEDIUM,
WMI_SCAN_PRIORITY_HIGH,
WMI_SCAN_PRIORITY_VERY_HIGH,
WMI_SCAN_PRIORITY_COUNT /* number of priorities supported */
} wmi_scan_priority;
/* Five Levels for Requested Priority */
/* VERY_LOW LOW MEDIUM HIGH VERY_HIGH */
typedef A_UINT32 WLAN_PRIORITY_MAPPING[WMI_SCAN_PRIORITY_COUNT];
/**
* to keep align with UMAC implementation, we pass only vdev_type but not vdev_subtype when we overwrite an entry for a specific vdev_subtype
* ex. if we need overwrite P2P Client prority entry, we will overwrite the whole table for WLAN_M_STA
* we will generate the new WLAN_M_STA table with modified P2P Client Entry but keep STA entry intact
*/
typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_scan_sch_priority_table_cmd_fixed_param */
/**
* used as an index to find the proper table for a specific vdev type in default_scan_priority_mapping_table
* vdev_type should be one of enum in WLAN_OPMODE which inculdes WLAN_M_IBSS, WLAN_M_STA, WLAN_M_AP and WLAN_M_MONITOR currently
*/
A_UINT32 vdev_type;
/**
* number of rows in mapping_table for a specific vdev
* for WLAN_M_STA type, there are 3 entries in the table (refer to default_scan_priority_mapping_table definition)
*/
A_UINT32 number_rows;
/**
* pdev_id for identifying the MAC. See macros starting with
* WMI_PDEV_ID_ for values.In non-DBDC case host should
* set it to 0.
*/
A_UINT32 pdev_id;
/** mapping_table for a specific vdev follows this TLV
* WLAN_PRIORITY_MAPPING mapping_table[]; */
}wmi_scan_sch_priority_table_cmd_fixed_param;
/** update flags */
#define WMI_SCAN_UPDATE_SCAN_PRIORITY 0x1
#define WMI_SCAN_UPDATE_SCAN_MIN_REST_TIME 0x2
#define WMI_SCAN_UPDATE_SCAN_MAX_REST_TIME 0x4
typedef struct {
A_UINT32 tlv_header;
/** requestor requesting update scan request */
A_UINT32 requestor;
/** Scan ID of the scan request that need to be update */
A_UINT32 scan_id;
/** update flags, indicating which of the following fields are valid and need to be updated*/
A_UINT32 scan_update_flags;
/** scan priority. Only valid if WMI_SCAN_UPDATE_SCAN_PRIORITY flag is set in scan_update_flag */
A_UINT32 scan_priority;
/** min rest time. Only valid if WMI_SCAN_UPDATE_MIN_REST_TIME flag is set in scan_update_flag */
A_UINT32 min_rest_time;
/** min rest time. Only valid if WMI_SCAN_UPDATE_MAX_REST_TIME flag is set in scan_update_flag */
A_UINT32 max_rest_time;
/**
* pdev_id for identifying the MAC. See macros starting with
* WMI_PDEV_ID_ for values. In non-DBDC case host should set it to 0
*/
A_UINT32 pdev_id;
} wmi_scan_update_request_cmd_fixed_param;
#define WMI_SCAN_PROBE_OUI_SPOOFED_MAC_IN_PROBE_REQ 0x1
#define WMI_SCAN_PROBE_OUI_RANDOM_SEQ_NO_IN_PROBE_REQ 0x2
#define WMI_SCAN_PROBE_OUI_ENABLE_IE_WHITELIST_IN_PROBE_REQ 0x4
typedef struct _wmi_vendor_oui {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_vendor_oui */
A_UINT32 oui_type_subtype; /** Vendor OUI type and subtype, lower 3 bytes is type and highest byte is subtype**/
}wmi_vendor_oui;
typedef struct {
A_UINT32 tlv_header;
/** oui to be used in probe request frame when random mac addresss is
* requested part of scan parameters. this is applied to both FW internal scans and
* host initated scans. host can request for random mac address with
* WMI_SCAN_ADD_SPOOFED_MAC_IN_PROBE_REQ flag. */
A_UINT32 prob_req_oui;
A_UINT32 vdev_id;
/** Control Flags **/
A_UINT32 flags;
/** ie bitmap to use in probe req **/
A_UINT32 ie_bitmap[WMI_IE_BITMAP_SIZE];
/** Number of vendor OUIs. In the TLV vendor_oui[] **/
A_UINT32 num_vendor_oui;
/**
* pdev_id for identifying the MAC. See macros starting with
* WMI_PDEV_ID_ for values. In non-DBDC case host should set it to 0
*/
A_UINT32 pdev_id;
/* Following this tlv, there comes an array of structure of type wmi_vendor_ouiwmi_vendor_oui vendor_oui[];*/
} wmi_scan_prob_req_oui_cmd_fixed_param;
enum wmi_scan_event_type {
WMI_SCAN_EVENT_STARTED=0x1,
WMI_SCAN_EVENT_COMPLETED=0x2,
WMI_SCAN_EVENT_BSS_CHANNEL=0x4,
WMI_SCAN_EVENT_FOREIGN_CHANNEL = 0x8,
WMI_SCAN_EVENT_DEQUEUED=0x10, /* scan request got dequeued */
WMI_SCAN_EVENT_PREEMPTED=0x20, /* preempted by other high priority scan */
WMI_SCAN_EVENT_START_FAILED=0x40, /* scan start failed */
WMI_SCAN_EVENT_RESTARTED=0x80, /* Scan restarted */
WMI_SCAN_EVENT_FOREIGN_CHANNEL_EXIT = 0x100,
WMI_SCAN_EVENT_SUSPENDED = 0x200, /* scan request is suspended */
WMI_SCAN_EVENT_RESUMED = 0x400, /* scan request is resumed */
WMI_SCAN_EVENT_MAX=0x8000
};
enum wmi_scan_completion_reason {
/** scan related events */
WMI_SCAN_REASON_NONE = 0xFF,
WMI_SCAN_REASON_COMPLETED = 0,
WMI_SCAN_REASON_CANCELLED = 1,
WMI_SCAN_REASON_PREEMPTED = 2,
WMI_SCAN_REASON_TIMEDOUT = 3,
WMI_SCAN_REASON_INTERNAL_FAILURE = 4, /* This reason indication failures when performaing scan */
WMI_SCAN_REASON_SUSPENDED = 5,
WMI_SCAN_REASON_MAX,
};
typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_scan_event_fixed_param */
/** scan event (wmi_scan_event_type) */
A_UINT32 event;
/** status of the scan completion event */
A_UINT32 reason;
/** channel freq , only valid for FOREIGN channel event*/
A_UINT32 channel_freq;
/**id of the requestor whose scan is in progress */
A_UINT32 requestor;
/**id of the scan that is in progress */
A_UINT32 scan_id;
/**id of VDEV that requested the scan */
A_UINT32 vdev_id;
/** TSF Timestamp when the scan event (wmi_scan_event_type) is completed
* In case of AP it is TSF of the AP vdev
* In case of STA connected state this is the TSF of the AP
* In case of STA not connected it will be the free running HW timer
*/
A_UINT32 tsf_timestamp;
} wmi_scan_event_fixed_param;
/* WMI Diag event */
typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag is WMITLV_TAG_STRUC_wmi_diag_event_fixed_param */
A_UINT32 time_stamp; /* Reference timestamp. diag frame contains diff value */
A_UINT32 count; /* Number of diag frames added to current event */
A_UINT32 dropped;
/* followed by WMITLV_TAG_ARRAY_BYTE */
} wmi_diag_event_fixed_param;
#define WMI_11K_OFFLOAD_BITMAP_NEIGHBOR_REPORT_REQ 0x1
typedef struct {
A_UINT32 time_offset; /* positive offset in secs from the time 11k offload command has been received, 0xFFFFFFFF if offset is not valid */
A_UINT32 low_rssi_offset; /* positive offset in dB from current low rssi roaming trigger to send neighbor req, 0xFFFFFFFF if offset is not valid */
A_UINT32 bmiss_count_trigger; /* value 1 is to send neighbor report at 1st BMISS, 0xFFFFFFFF if input is not valid */
A_UINT32 per_threshold_offset; /* percentage offset from the current per_threshold, 0xFFFFFFFF if input is not valid */
A_UINT32 neighbor_report_cache_timeout; /* cache timeout in secs after which neighbor cache is not valid in FW, 0xFFFFFFFF if input is not valid */
A_UINT32 max_neighbor_report_req_cap; /* 0xFFFFFFFF if input is not valid, else positive number per every roam, these are the maximum number of
* neighbor report requests that will be sent by FW after every roam */
wmi_ssid ssid; /* ssid of current connected AP FW might choose to use this SSID in the neighbor report req frame if it is
* interested in candidate of the same SSID */
} wmi_neighbor_report_offload;
typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_offload_11k_report_fixed_param */
A_UINT32 vdev_id;
A_UINT32 offload_11k; /* bitmask to indicate to FW what all 11k features are offloaded */
} wmi_11k_offload_report_fixed_param;
typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_neighbor_report_offload_tlv_param */
wmi_neighbor_report_offload neighbor_rep_ofld_params;
} wmi_neighbor_report_11k_offload_tlv_param;
#define WMI_INVOKE_NEIGHBOR_REPORT_FLAGS_SEND_RESP_TO_HOST 0x1
typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_invoke_neighbor_report_fixed_param */
A_UINT32 vdev_id;
A_UINT32 flags;
wmi_ssid ssid; /* if ssid.len == 0, firmware doesn't include ssid sub-element.
* In that case AP gives all the candidates in ESS without SSID filter
* If host wants to insert ssid subelement in the neighbor report request frame, then it can specify the ssid here */
} wmi_11k_offload_invoke_neighbor_report_fixed_param;
#define WMI_MAX_PMKID_LEN 16
#define WMI_MAX_PMK_LEN 64
#define WMI_PMK_CACHE_CAT_FLAG_BSSID 0x1
#define WMI_PMK_CACHE_CAT_FLAG_SSID_CACHE_ID 0x2
#define WMI_PMK_CACHE_ACTION_FLAG_ADD_ENTRY 0x1
#define WMI_PMK_CACHE_ACTION_FLAG_DEL_ENTRY 0x2
typedef struct {
A_UINT32 tlv_header;
A_UINT32 pmk_len;
A_UINT8 pmk[WMI_MAX_PMK_LEN];/* for big-endian hosts, manual endian conversion will be needed to keep the array values in their original order,
in spite of the automatic byte-swap applied to WMI messages during download*/
A_UINT32 pmkid_len;
A_UINT8 pmkid[WMI_MAX_PMKID_LEN];
wmi_mac_addr bssid;
wmi_ssid ssid;
A_UINT32 cache_id;
A_UINT32 cat_flag; // whether (bssid) or (ssid,cache_id) is valid
A_UINT32 action_flag; // add/delete the entry
} wmi_pmk_cache;
#define WMI_PMK_CACHE_OP_FLAG_FLUSH_ALL 0x1
typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_pdev_update_pmk_cache_cmd_fixed_param */
A_UINT32 op_flag; //option to flush all the cache at once
A_UINT32 vdev_id;
A_UINT32 num_cache;
/**
* TLV (tag length value) parameters follow the update_pmk_cache cmd
* structure. The TLV's are:
* wmi_pmk_cache cache_list[];
*/
} wmi_pdev_update_pmk_cache_cmd_fixed_param;
#define WMI_FILS_MAX_USERNAME_LEN 16
#define WMI_FILS_MAX_REALM_LEN 256
#define WMI_FILS_MAX_RRK_LEN 64
#define WMI_FILS_MAX_RIK_LEN 64
/* for big-endian hosts, manual endian conversion will be needed to keep the array values in their original order,
in spite of the automatic byte-swap applied to WMI messages during download*/
typedef struct {
A_UINT8 username[WMI_FILS_MAX_USERNAME_LEN];
A_UINT32 username_length;
A_UINT32 next_erp_seq_num;
A_UINT8 rRk[WMI_FILS_MAX_RRK_LEN];
A_UINT32 rRk_length;
A_UINT8 rIk[WMI_FILS_MAX_RIK_LEN];
A_UINT32 rIk_length;
A_UINT8 realm[WMI_FILS_MAX_REALM_LEN];
A_UINT32 realm_len;
} wmi_erp_info;
enum wmi_fils_hlp_pkt_type {
WMI_FILS_HLP_PKT_TYPE_DHCP_DISCOVER = 1,
};
typedef struct {
A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_roam_fils_offload_tlv_param */
A_UINT32 flags;
wmi_erp_info vdev_erp_info;
} wmi_roam_fils_offload_tlv_param;
typedef struct {
A_UINT32 tlv_header; /** tag WMITLV_TAG_STRUC_wmi_pdev_update_fils_hlp_pkt_cmd_fixed_param**/
A_UINT32 flags;
A_UINT32 vdev_id;
A_UINT32 size;
A_UINT32 pkt_type; // filled using enum wmi_fils_hlp_pkt_type
// A_UINT8 fils_hlp_pkt[];
} wmi_pdev_update_fils_hlp_pkt_cmd_fixed_param;
#define WMI_MAX_KEK_LEN 64
#define GTK_OFFLOAD_KEK_EXTENDED_BYTES WMI_MAX_KEK_LEN /*KEK len has been increased to 64 to support FILS security.
To not break backward compatibility, new GTK_OFFLOAD_KEK_EXTENDED_BYTES has been defined without modifying old GTK_OFFLOAD_KEK_BYTES */
typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_roam_fils_synch_tlv_param */
A_UINT32 update_erp_next_seq_num;// Boolean denoting whether next erp_seq_num changed or not.
A_UINT32 next_erp_seq_num;
A_UINT32 kek_len;
A_UINT8 kek[WMI_MAX_KEK_LEN];
A_UINT32 pmk_len;
A_UINT8 pmk[WMI_MAX_PMK_LEN];
A_UINT8 pmkid[WMI_MAX_PMKID_LEN];
A_UINT8 realm[WMI_FILS_MAX_REALM_LEN];
A_UINT32 realm_len;
} wmi_roam_fils_synch_tlv_param;
/*
* If FW has multiple active channels due to MCC(multi channel concurrency),
* then these stats are combined stats for all the active channels.
*/
typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_update_whal_mib_stats_event_fixed_param */
/** ack count, it is an incremental number, not accumulated number */
A_UINT32 ackRcvBad;
/** bad rts count, it is an incremental number, not accumulated number */
A_UINT32 rtsBad;
/** good rts, it is an incremental number, not accumulated number */
A_UINT32 rtsGood;
/** fcs count, it is an incremental number, not accumulated number */
A_UINT32 fcsBad;
/** beacon count, it is an incremental number, not accumulated number */
A_UINT32 noBeacons;
} wmi_update_whal_mib_stats_event_fixed_param;
/*
* This defines how much headroom is kept in the
* receive frame between the descriptor and the
* payload, in order for the WMI PHY error and
* management handler to insert header contents.
*
* This is in bytes.
*/
#define WMI_MGMT_RX_HDR_HEADROOM sizeof(wmi_comb_phyerr_rx_hdr) + WMI_TLV_HDR_SIZE + sizeof(wmi_single_phyerr_rx_hdr)
/** This event will be used for sending scan results
* as well as rx mgmt frames to the host. The rx buffer
* will be sent as part of this WMI event. It would be a
* good idea to pass all the fields in the RX status
* descriptor up to the host.
*/
/* ATH_MAX_ANTENNA value (4) can't be changed without breaking the compatibility */
#define ATH_MAX_ANTENNA 4 /* To support beelinear, which is up to 4 chains */
/** flag indicating that the mgmt frame (probe req/beacon) is received in the context of extscan performed by FW */
#define WMI_MGMT_RX_HDR_EXTSCAN 0x01
/** flag indicating that the mgmt frame (probe req/beacon) is received in the context of matched network by FW ENLO */
#define WMI_MGMT_RX_HDR_ENLO 0x02
#define MAX_ANTENNA_EIGHT 8
typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_mgmt_rx_hdr */
/** channel on which this frame is received. */
A_UINT32 channel;
/** snr information used to cal rssi */
A_UINT32 snr;
/** Rate kbps */
A_UINT32 rate;
/** rx phy mode WLAN_PHY_MODE */
A_UINT32 phy_mode;
/** length of the frame */
A_UINT32 buf_len;
/** rx status */
A_UINT32 status;
/** RSSI of PRI 20MHz for each chain. */
A_UINT32 rssi_ctl[ATH_MAX_ANTENNA];
/** information about the management frame e.g. can give a scan source for a scan result mgmt frame */
A_UINT32 flags;
/** combined RSSI, i.e. the sum of the snr + noise floor (dBm units) */
A_INT32 rssi;
/** delta between local TSF(TSF timestamp when frame was RXd)
* and remote TSF(TSF timestamp in the IE for mgmt frame -
* beacon,proberesp for e.g). If remote TSF is not available,
* delta set to 0.
* Although tsf_delta is stored as A_UINT32, it can be negative,
* and thus would need to be sign-extended if added to a value
* larger than 32 bits.
*/
A_UINT32 tsf_delta;
/* The lower 32 bits of the TSF (rx_tsf_l32) is copied by FW from
* TSF timestamp in the RX MAC descriptor provided by HW.
*/
A_UINT32 rx_tsf_l32;
/* The Upper 32 bits (rx_tsf_u32) is filled by reading the TSF register
* after the packet is received.
*/
A_UINT32 rx_tsf_u32;
/** pdev_id for identifying the MAC the rx mgmt frame was received by
* See macros starting with WMI_PDEV_ID_ for values.
*/
A_UINT32 pdev_id;
/* This TLV is followed by array of bytes:
* // management frame buffer
* A_UINT8 bufp[];
*/
/* This TLV is optionally followed by array of struct:
* wmi_rssi_ctl_ext rssi_ctl_ext;
*/
} wmi_mgmt_rx_hdr;
/*
* Instead of universally increasing the RX_HDR_HEADROOM size which may cause problems for older targets,
* this new ext_hdr can be used for extending the header and will be only applicable for new targets.
*/
typedef struct
{
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_rssi_ctl_ext */
/** RSSI of PRI 20MHz for each chain, in dB w.r.t. noise floor */
A_UINT32 rssi_ctl_ext[MAX_ANTENNA_EIGHT - ATH_MAX_ANTENNA];
} wmi_rssi_ctl_ext;
typedef struct {
/** TSF timestamp */
A_UINT32 tsf_timestamp;
/**
* Current freq1, freq2
*
* [7:0]: freq1[lo]
* [15:8] : freq1[hi]
* [23:16]: freq2[lo]
* [31:24]: freq2[hi]
*/
A_UINT32 freq_info_1;
/**
* Combined RSSI over all chains and channel width for this PHY error
*
* [7:0]: RSSI combined
* [15:8]: Channel width (MHz)
* [23:16]: PHY error code
* [24:16]: reserved (future use)
*/
A_UINT32 freq_info_2;
/**
* RSSI on chain 0 through 3
*
* This is formatted the same as the PPDU_START RX descriptor
* field:
*
* [7:0]: pri20
* [15:8]: sec20
* [23:16]: sec40
* [31:24]: sec80
*/
A_UINT32 rssi_chain0;
A_UINT32 rssi_chain1;
A_UINT32 rssi_chain2;
A_UINT32 rssi_chain3;
/**
* Last calibrated NF value for chain 0 through 3
*
* nf_list_1:
*
* + [15:0] - chain 0
* + [31:16] - chain 1
*
* nf_list_2:
*
* + [15:0] - chain 2
* + [31:16] - chain 3
*/
A_UINT32 nf_list_1;
A_UINT32 nf_list_2;
/** Length of the frame */
A_UINT32 buf_len;
} wmi_single_phyerr_rx_hdr;
typedef struct {