diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2019-09-16 00:56:04 -0700 |
|---|---|---|
| committer | Linux Build Service Account <lnxbuild@localhost> | 2019-09-16 00:56:04 -0700 |
| commit | b8e9de2e52644837994b0b22a46e135dd2b393b6 (patch) | |
| tree | b4d09b339cecae2a4e0587735241267e661e112a | |
| parent | 131c0efd04310be6fdb4d010055db17200f82d05 (diff) | |
| parent | a97a917c1a361a11d8b40490aaf0d885e1dd1632 (diff) | |
Merge a97a917c1a361a11d8b40490aaf0d885e1dd1632 on remote branch
Change-Id: Ice3ee6da4e4e8b6f64cedebf5f242d869b908f24
| -rw-r--r-- | fw/htt_ppdu_stats.h | 111 | ||||
| -rw-r--r-- | fw/htt_stats.h | 300 | ||||
| -rwxr-xr-x | fw/wmi_services.h | 4 | ||||
| -rwxr-xr-x | fw/wmi_tlv_defs.h | 112 | ||||
| -rwxr-xr-x | fw/wmi_unified.h | 442 | ||||
| -rwxr-xr-x | fw/wmi_version.h | 2 |
6 files changed, 914 insertions, 57 deletions
diff --git a/fw/htt_ppdu_stats.h b/fw/htt_ppdu_stats.h index 9cc2677de5d7..91eb1d1b6783 100644 --- a/fw/htt_ppdu_stats.h +++ b/fw/htt_ppdu_stats.h @@ -26,6 +26,9 @@ #include <htt.h> #include <htt_stats.h> +#define HTT_STATS_MAX_CHAINS 8 +#define HTT_STATS_NUM_SUPPORTED_BW_SMART_ANTENNA 4 /* 20, 40, 80, 160 MHz */ + #define HTT_BA_64_BIT_MAP_SIZE_DWORDS 2 #define HTT_BA_256_BIT_MAP_SIZE_DWORDS 8 enum htt_ppdu_stats_tlv_tag { @@ -1510,6 +1513,84 @@ typedef enum HTT_PPDU_STATS_RESP_TYPE HTT_PPDU_STATS_RESP_TYPE; ((_var) |= ((_val) << HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_RESP_TYPE_S)); \ } while (0) +#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_CHAIN_RSSI_M 0xffffffff +#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_CHAIN_RSSI_S 0 + +#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_CHAIN_RSSI_GET(_var) \ + (((_var) & HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_CHAIN_RSSI_M) >> \ + HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_CHAIN_RSSI_S) + +#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_CHAIN_RSSI_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_CHAIN_RSSI, _val); \ + ((_var) |= ((_val) << HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_CHAIN_RSSI_S)); \ + } while (0) + +#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_TX_ANTENNA_MASK_M 0xffffffff +#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_TX_ANTENNA_MASK_S 0 + +#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_TX_ANTENNA_MASK_GET(_var) \ + (((_var) & HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_TX_ANTENNA_MASK_M) >> \ + HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_TX_ANTENNA_MASK_S) + +#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_TX_ANTENNA_MASK_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_TX_ANTENNA_MASK, _val); \ + ((_var) |= ((_val) << HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_TX_ANTENNA_MASK_S)); \ + } while (0) + +#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_IS_TRAINING_M 0x00010000 +#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_IS_TRAINING_S 16 + +#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_IS_TRAINING_GET(_var) \ + (((_var) & HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_IS_TRAINING_M) >> \ + HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_IS_TRAINING_S) + +#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_IS_TRAINING_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_IS_TRAINING, _val); \ + ((_var) |= ((_val) << HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_IS_TRAINING_S)); \ + } while (0) + +#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PENDING_TRAINING_PKTS_M 0x0000ffff +#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PENDING_TRAINING_PKTS_S 0 + +#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PENDING_TRAINING_PKTS_GET(_var) \ + (((_var) & HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PENDING_TRAINING_PKTS_M) >> \ + HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PENDING_TRAINING_PKTS_S) + +#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PENDING_TRAINING_PKTS_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PENDING_TRAINING_PKTS, _val); \ + ((_var) |= ((_val) << HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PENDING_TRAINING_PKTS_S)); \ + } while (0) + +#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_MAX_RATES_M 0xffffffff +#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_MAX_RATES_S 0 + +#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_MAX_RATES_GET(_var) \ + (((_var) & HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_MAX_RATES_M) >> \ + HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_MAX_RATES_S) + +#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_MAX_RATES_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_MAX_RATES, _val); \ + ((_var) |= ((_val) << HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_MAX_RATES_S)); \ + } while (0) + +#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_CURRENT_RATE_PER_M 0xffffffff +#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_CURRENT_RATE_PER_S 0 + +#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_CURRENT_RATE_PER_GET(_var) \ + (((_var) & HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_CURRENT_RATE_PER_M) >> \ + HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_CURRENT_RATE_PER_S) + +#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_CURRENT_RATE_PER_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_CURRENT_RATE_PER, _val); \ + ((_var) |= ((_val) << HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_CURRENT_RATE_PER_S)); \ + } while (0) + enum HTT_PPDU_STATS_USER_COMPLETION_STATUS { HTT_PPDU_STATS_USER_STATUS_OK, HTT_PPDU_STATS_USER_STATUS_FILTERED, @@ -1564,6 +1645,36 @@ typedef struct { reserved0: 19; }; }; + + /* + * ack RSSI per chain for last transmission to the peer-TID + * (value in dB w.r.t noise floor) + */ + A_UINT32 chain_rssi[HTT_STATS_MAX_CHAINS]; + + /* Tx Antenna mask for last packet transmission */ + A_UINT32 tx_antenna_mask; + + /* For SmartAntenna + * BIT [15:0] :- pending_training_pkts + * Holds number of pending training packets during training. + * BIT [16] :- is_training + * This flag indicates if peer is under training. + * BIT [31:17] :- reserved1 + */ + A_UINT32 pending_training_pkts:16, + is_training:1, + reserved1:15; + + /* + * Max rates configured per BW: + * for BW supported by Smart Antenna - 20MHZ, 40MHZ and 80MHZ and 160MHZ + * (Note: 160 MHz is currently not supported by Smart Antenna) + */ + A_UINT32 max_rates[HTT_STATS_NUM_SUPPORTED_BW_SMART_ANTENNA]; + + /* PER of the last transmission to the peer-TID (in percent) */ + A_UINT32 current_rate_per; } htt_ppdu_stats_user_cmpltn_common_tlv; #define HTT_PPDU_STATS_USER_CMPLTN_BA_BITMAP_TLV_TID_NUM_M 0x000000ff diff --git a/fw/htt_stats.h b/fw/htt_stats.h index 3d41c1fda4d9..388154d9ccfb 100644 --- a/fw/htt_stats.h +++ b/fw/htt_stats.h @@ -294,6 +294,29 @@ enum htt_dbg_ext_stats_type { */ HTT_DBG_EXT_STATS_LATENCY_PROF_STATS = 25, + /* HTT_DBG_EXT_STATS_PDEV_UL_TRIGGER + * PARAMS: + * - No Params + * RESP MSG: + * - htt_rx_pdev_ul_trig_stats_t + */ + HTT_DBG_EXT_STATS_PDEV_UL_TRIG_STATS = 26, + + /* HTT_DBG_EXT_STATS_PDEV_UL_MUMIMO_TRIG_STATS = 27 + * PARAMS: + * - No Params + * RESP MSG: + * - htt_rx_pdev_ul_mumimo_trig_stats_t + */ + HTT_DBG_EXT_STATS_PDEV_UL_MUMIMO_TRIG_STATS = 27, + + /* HTT_DBG_EXT_STATS_FSE_RX + * PARAMS: + * - No Params + * RESP MSG: + * - htt_rx_fse_stats_t + */ + HTT_DBG_EXT_STATS_FSE_RX = 28, /* keep this last */ HTT_DBG_NUM_EXT_STATS = 256, @@ -411,6 +434,11 @@ typedef enum { HTT_STATS_LATENCY_PROF_STATS_TAG = 91, /* htt_latency_prof_stats_tlv */ HTT_STATS_LATENCY_CTX_TAG = 92, /* htt_latency_prof_ctx_tlv */ HTT_STATS_LATENCY_CNT_TAG = 93, /* htt_latency_prof_cnt_tlv */ + HTT_STATS_RX_PDEV_UL_TRIG_STATS_TAG = 94, /* htt_rx_pdev_ul_trigger_stats_tlv */ + HTT_STATS_RX_PDEV_UL_OFDMA_USER_STATS_TAG = 95, /* htt_rx_pdev_ul_ofdma_user_stats_tlv */ + HTT_STATS_RX_PDEV_UL_MIMO_USER_STATS_TAG = 96, /* htt_rx_pdev_ul_mimo_user_stats_tlv */ + HTT_STATS_RX_PDEV_UL_MUMIMO_TRIG_STATS_TAG = 97, /* htt_rx_pdev_ul_mumimo_trig_stats_tlv */ + HTT_STATS_RX_FSE_STATS_TAG = 98, /* htt_rx_fse_stats_tlv */ HTT_STATS_MAX_TAG, } htt_tlv_tag_t; @@ -1187,6 +1215,12 @@ typedef enum { } HTT_STATS_PREAM_TYPE; #define HTT_TX_PEER_STATS_NUM_MCS_COUNTERS 12 +/* HTT_TX_PEER_STATS_NUM_GI_COUNTERS: + * GI Index 0: WHAL_GI_800 + * GI Index 1: WHAL_GI_400 + * GI Index 2: WHAL_GI_1600 + * GI Index 3: WHAL_GI_3200 + */ #define HTT_TX_PEER_STATS_NUM_GI_COUNTERS 4 #define HTT_TX_PEER_STATS_NUM_DCM_COUNTERS 5 /* HTT_TX_PEER_STATS_NUM_BW_COUNTERS: @@ -1753,6 +1787,7 @@ typedef struct { #define HTT_TX_PDEV_STATS_NUM_AC_MUMIMO_USER_STATS 4 #define HTT_TX_PDEV_STATS_NUM_AX_MUMIMO_USER_STATS 8 #define HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS 74 +#define HTT_TX_PDEV_STATS_NUM_UL_MUMIMO_USER_STATS 8 typedef struct { htt_tlv_hdr_t tlv_hdr; @@ -1774,6 +1809,18 @@ typedef struct { A_UINT32 ax_ul_ofdma_bsr_sch_nusers[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS]; A_UINT32 ax_ul_ofdma_bar_sch_nusers[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS]; A_UINT32 ax_ul_ofdma_brp_sch_nusers[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS]; + + /* UL MUMIMO */ + /* + * ax_ul_mumimo_basic_sch_nusers[i] is the number of basic triggers sent + * for (i+1) users + */ + A_UINT32 ax_ul_mumimo_basic_sch_nusers[HTT_TX_PDEV_STATS_NUM_UL_MUMIMO_USER_STATS]; + /* + * ax_ul_mumimo_brp_sch_nusers[i] is the number of brp triggers sent + * for (i+1) users + */ + A_UINT32 ax_ul_mumimo_brp_sch_nusers[HTT_TX_PDEV_STATS_NUM_UL_MUMIMO_USER_STATS]; } htt_tx_pdev_mu_mimo_sch_stats_tlv; typedef struct { @@ -3061,11 +3108,30 @@ typedef struct { #define HTT_RX_PDEV_STATS_NUM_DCM_COUNTERS 5 #define HTT_RX_PDEV_STATS_NUM_BW_COUNTERS 4 #define HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS 8 +#define HTT_RX_PDEV_STATS_ULMUMIMO_NUM_SPATIAL_STREAMS 8 #define HTT_RX_PDEV_STATS_NUM_PREAMBLE_TYPES HTT_STATS_PREAM_COUNT #define HTT_RX_PDEV_MAX_OFDMA_NUM_USER 8 #define HTT_RX_PDEV_MAX_ULMUMIMO_NUM_USER 8 #define HTT_RX_PDEV_STATS_RXEVM_MAX_PILOTS_PER_NSS 16 +/*HTT_RX_PDEV_STATS_NUM_RU_SIZE_COUNTERS: + * RU size index 0: HTT_UL_OFDMA_V0_RU_SIZE_RU_26 + * RU size index 1: HTT_UL_OFDMA_V0_RU_SIZE_RU_52 + * RU size index 2: HTT_UL_OFDMA_V0_RU_SIZE_RU_106 + * RU size index 3: HTT_UL_OFDMA_V0_RU_SIZE_RU_242 + * RU size index 4: HTT_UL_OFDMA_V0_RU_SIZE_RU_484 + * RU size index 5: HTT_UL_OFDMA_V0_RU_SIZE_RU_996 + */ #define HTT_RX_PDEV_STATS_NUM_RU_SIZE_COUNTERS 6 +/* HTT_RX_PDEV_STATS_NUM_RU_SIZE_160MHZ_CNTRS: + * RU size index 0: HTT_UL_OFDMA_V0_RU_SIZE_RU_26 + * RU size index 1: HTT_UL_OFDMA_V0_RU_SIZE_RU_52 + * RU size index 2: HTT_UL_OFDMA_V0_RU_SIZE_RU_106 + * RU size index 3: HTT_UL_OFDMA_V0_RU_SIZE_RU_242 + * RU size index 4: HTT_UL_OFDMA_V0_RU_SIZE_RU_484 + * RU size index 5: HTT_UL_OFDMA_V0_RU_SIZE_RU_996 + * RU size index 6: HTT_UL_OFDMA_V0_RU_SIZE_RU_996x2 + */ +#define HTT_RX_PDEV_STATS_NUM_RU_SIZE_160MHZ_CNTRS 7 /* includes 996x2 */ #define HTT_RX_PDEV_RATE_STATS_MAC_ID_M 0x000000ff #define HTT_RX_PDEV_RATE_STATS_MAC_ID_S 0 @@ -3182,10 +3248,112 @@ typedef struct { htt_rx_pdev_rate_stats_tlv rate_tlv; } htt_rx_pdev_rate_stats_t; +#define HTT_STATS_CMN_MAC_ID_M 0x000000ff +#define HTT_STATS_CMN_MAC_ID_S 0 + +#define HTT_STATS_CMN_MAC_ID_GET(_var) \ + (((_var) & HTT_STATS_CMN_MAC_ID_M) >> \ + HTT_STATS_CMN_MAC_ID_S) + +#define HTT_STATS_CMN_MAC_ID_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_CMN_MAC_ID, _val); \ + ((_var) |= ((_val) << HTT_STATS_CMN_MAC_ID_S)); \ + } while (0) + +typedef struct { + htt_tlv_hdr_t tlv_hdr; + + /* BIT [ 7 : 0] :- mac_id + * BIT [31 : 8] :- reserved + */ + A_UINT32 mac_id__word; + + A_UINT32 rx_11ax_ul_ofdma; + + A_UINT32 ul_ofdma_rx_mcs[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS]; + A_UINT32 ul_ofdma_rx_gi[HTT_RX_PDEV_STATS_NUM_GI_COUNTERS][HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS]; + A_UINT32 ul_ofdma_rx_nss[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS]; + A_UINT32 ul_ofdma_rx_bw[HTT_RX_PDEV_STATS_NUM_BW_COUNTERS]; + A_UINT32 ul_ofdma_rx_stbc; + A_UINT32 ul_ofdma_rx_ldpc; + + /* + * These are arrays to hold the number of PPDUs that we received per RU. + * E.g. PPDUs (data or non data) received in RU26 will be incremented in + * array offset 0 and similarly RU52 will be incremented in array offset 1 + */ + A_UINT32 rx_ulofdma_data_ru_size_ppdu[HTT_RX_PDEV_STATS_NUM_RU_SIZE_160MHZ_CNTRS]; /* ppdu level */ + A_UINT32 rx_ulofdma_non_data_ru_size_ppdu[HTT_RX_PDEV_STATS_NUM_RU_SIZE_160MHZ_CNTRS]; /* ppdu level */ + +} htt_rx_pdev_ul_trigger_stats_tlv; + +/* STATS_TYPE : HTT_DBG_EXT_STATS_PDEV_UL_TRIG_STATS + * TLV_TAGS: + * - HTT_STATS_RX_PDEV_UL_TRIG_STATS_TAG + * NOTE: + * This structure is for documentation, and cannot be safely used directly. + * Instead, use the constituent TLV structures to fill/parse. + */ +typedef struct { + htt_rx_pdev_ul_trigger_stats_tlv ul_trigger_tlv; +} htt_rx_pdev_ul_trigger_stats_t; + +typedef struct { + htt_tlv_hdr_t tlv_hdr; + + A_UINT32 user_index; + A_UINT32 rx_ulofdma_non_data_ppdu; /* ppdu level */ + A_UINT32 rx_ulofdma_data_ppdu; /* ppdu level */ + A_UINT32 rx_ulofdma_mpdu_ok; /* mpdu level */ + A_UINT32 rx_ulofdma_mpdu_fail; /* mpdu level */ + A_UINT32 rx_ulofdma_non_data_nusers; + A_UINT32 rx_ulofdma_data_nusers; +} htt_rx_pdev_ul_ofdma_user_stats_tlv; + +typedef struct { + htt_tlv_hdr_t tlv_hdr; + + A_UINT32 user_index; + A_UINT32 rx_ulmumimo_non_data_ppdu; /* ppdu level */ + A_UINT32 rx_ulmumimo_data_ppdu; /* ppdu level */ + A_UINT32 rx_ulmumimo_mpdu_ok; /* mpdu level */ + A_UINT32 rx_ulmumimo_mpdu_fail; /* mpdu level */ +} htt_rx_pdev_ul_mimo_user_stats_tlv; + /* == RX PDEV/SOC STATS == */ typedef struct { htt_tlv_hdr_t tlv_hdr; + + /* + * BIT [7:0] :- mac_id + * BIT [31:8] :- reserved + * + * Refer to HTT_STATS_CMN_MAC_ID_GET/SET macros. + */ + A_UINT32 mac_id__word; + + A_UINT32 rx_11ax_ul_mumimo; + + A_UINT32 ul_mumimo_rx_mcs[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS]; + A_UINT32 ul_mumimo_rx_gi[HTT_RX_PDEV_STATS_NUM_GI_COUNTERS][HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS]; + A_UINT32 ul_mumimo_rx_nss[HTT_RX_PDEV_STATS_ULMUMIMO_NUM_SPATIAL_STREAMS]; + A_UINT32 ul_mumimo_rx_bw[HTT_RX_PDEV_STATS_NUM_BW_COUNTERS]; + A_UINT32 ul_mumimo_rx_stbc; + A_UINT32 ul_mumimo_rx_ldpc; +} htt_rx_pdev_ul_mumimo_trig_stats_tlv; + +/* STATS_TYPE : HTT_DBG_EXT_STATS_PDEV_UL_MUMIMO_TRIG_STATS + * TLV_TAGS: + * - HTT_STATS_RX_PDEV_UL_MUMIMO_TRIG_STATS_TAG + */ +typedef struct { + htt_rx_pdev_ul_mumimo_trig_stats_tlv ul_mumimo_trig_tlv; +} htt_rx_pdev_ul_mumimo_trig_stats_t; + +typedef struct { + htt_tlv_hdr_t tlv_hdr; /* Num Packets received on REO FW ring */ A_UINT32 fw_reo_ring_data_msdu; /* Num bc/mc packets indicated from fw to host */ @@ -3867,12 +4035,15 @@ typedef struct { A_UINT32 num_obss_tx_ppdu_success; A_UINT32 num_obss_tx_ppdu_failure; - /* num_sr_tx_tranmissions: + /* num_sr_tx_transmissions: * Counter of TX done by aborting other BSS RX with spatial reuse * (for cases where rx RSSI from other BSS is below the packet-detection * threshold for doing spatial reuse) */ - A_UINT32 num_sr_tx_tranmissions; + union { + A_UINT32 num_sr_tx_transmissions; /* CORRECTED - use this one */ + A_UINT32 num_sr_tx_tranmissions; /* DEPRECATED - has typo in name */ + }; /* num_sr_rx_ge_pd_rssi_thr * counter of rx from other BSS for which RSSI was above the * packet-detection threshold specified for enabling spatial reuse @@ -3994,5 +4165,130 @@ typedef struct { htt_latency_prof_cnt_tlv latency_cnt_stat; } htt_soc_latency_stats_t; +#define HTT_RX_MAX_PEAK_OCCUPANCY_INDEX 10 +#define HTT_RX_MAX_CURRENT_OCCUPANCY_INDEX 10 +#define HTT_RX_SQUARE_INDEX 6 +#define HTT_RX_MAX_PEAK_SEARCH_INDEX 4 +#define HTT_RX_MAX_PENDING_SEARCH_INDEX 4 + +/* STATS_TYPE : HTT_DBG_EXT_RX_FSE_STATS + * TLV_TAGS: + * - HTT_STATS_RX_FSE_STATS_TAG + */ +typedef struct { + htt_tlv_hdr_t tlv_hdr; + + /* + * Number of times host requested for fse enable/disable + */ + A_UINT32 fse_enable_cnt; + A_UINT32 fse_disable_cnt; + /* + * Number of times host requested for fse cache invalidation + * individual entries or full cache + */ + A_UINT32 fse_cache_invalidate_entry_cnt; + A_UINT32 fse_full_cache_invalidate_cnt; + + /* + * Cache hits count will increase if there is a matching flow in the cache + * There is no register for cache miss but the number of cache misses can + * be calculated as + * cache miss = (num_searches - cache_hits) + * Thus, there is no need to have a separate variable for cache misses. + * Num searches is flow search times done in the cache. + */ + A_UINT32 fse_num_cache_hits_cnt; + A_UINT32 fse_num_searches_cnt; + /** + * Cache Occupancy holds 2 types of values: Peak and Current. + * 10 bins are used to keep track of peak occupancy. + * 8 of these bins represent ranges of values, while the first and last + * bins represent the extreme cases of the cache being completely empty + * or completely full. + * For the non-extreme bins, the number of cache occupancy values per + * bin is the maximum cache occupancy (128), divided by the number of + * non-extreme bins (8), so 128/8 = 16 values per bin. + * The range of values for each histogram bins is specified below: + * Bin0 = Counter increments when cache occupancy is empty + * Bin1 = Counter increments when cache occupancy is within [1 to 16] + * Bin2 = Counter increments when cache occupancy is within [17 to 32] + * Bin3 = Counter increments when cache occupancy is within [33 to 48] + * Bin4 = Counter increments when cache occupancy is within [49 to 64] + * Bin5 = Counter increments when cache occupancy is within [65 to 80] + * Bin6 = Counter increments when cache occupancy is within [81 to 96] + * Bin7 = Counter increments when cache occupancy is within [97 to 112] + * Bin8 = Counter increments when cache occupancy is within [113 to 127] + * Bin9 = Counter increments when cache occupancy is equal to 128 + * The above histogram bin definitions apply to both the peak-occupancy + * histogram and the current-occupancy histogram. + * + * @fse_cache_occupancy_peak_cnt: + * Array records periodically PEAK cache occupancy values. + * Peak Occupancy will increment only if it is greater than current + * occupancy value. + * + * @fse_cache_occupancy_curr_cnt: + * Array records periodically current cache occupancy value. + * Current Cache occupancy always holds instant snapshot of + * current number of cache entries. + **/ + A_UINT32 fse_cache_occupancy_peak_cnt[HTT_RX_MAX_PEAK_OCCUPANCY_INDEX]; + A_UINT32 fse_cache_occupancy_curr_cnt[HTT_RX_MAX_CURRENT_OCCUPANCY_INDEX]; + /* + * Square stat is sum of squares of cache occupancy to better understand + * any variation/deviation within each cache set, over a given time-window. + * + * Square stat is calculated this way: + * Square = SUM(Squares of all Occupancy in a Set) / 8 + * The cache has 16-way set associativity, so the occupancy of a + * set can vary from 0 to 16. There are 8 sets within the cache. + * Therefore, the minimum possible square value is 0, and the maximum + * possible square value is (8*16^2) / 8 = 256. + * + * 6 bins are used to keep track of square stats: + * Bin0 = increments when square of current cache occupancy is zero + * Bin1 = increments when square of current cache occupancy is within + * [1 to 50] + * Bin2 = increments when square of current cache occupancy is within + * [51 to 100] + * Bin3 = increments when square of current cache occupancy is within + * [101 to 200] + * Bin4 = increments when square of current cache occupancy is within + * [201 to 255] + * Bin5 = increments when square of current cache occupancy is 256 + */ + A_UINT32 fse_search_stat_square_cnt[HTT_RX_SQUARE_INDEX]; + /** + * Search stats has 2 types of values: Peak Pending and Number of + * Search Pending. + * GSE command ring for FSE can hold maximum of 5 Pending searches + * at any given time. + * + * 4 bins are used to keep track of search stats: + * Bin0 = Counter increments when there are NO pending searches + * (For peak, it will be number of pending searches greater + * than GSE command ring FIFO outstanding requests. + * For Search Pending, it will be number of pending search + * inside GSE command ring FIFO.) + * Bin1 = Counter increments when number of pending searches are within + * [1 to 2] + * Bin2 = Counter increments when number of pending searches are within + * [3 to 4] + * Bin3 = Counter increments when number of pending searches are + * greater/equal to [ >= 5] + */ + A_UINT32 fse_search_stat_peak_cnt[HTT_RX_MAX_PEAK_SEARCH_INDEX]; + A_UINT32 fse_search_stat_search_pending_cnt[HTT_RX_MAX_PENDING_SEARCH_INDEX]; +} htt_rx_fse_stats_tlv; + +/* NOTE: + * This structure is for documentation, and cannot be safely used directly. + * Instead, use the constituent TLV structures to fill/parse. + */ +typedef struct { + htt_rx_fse_stats_tlv rx_fse_stats; +} htt_rx_fse_stats_t; + #endif /* __HTT_STATS_H__ */ diff --git a/fw/wmi_services.h b/fw/wmi_services.h index 095940f3f522..1d3f9d1c7305 100755 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -402,6 +402,10 @@ typedef enum { WMI_SERVICE_WMI_CHAN_RF_CHARACTERIZATION_INFO_EVENT= 217, /* target will send WMI_CHAN_RF_CHARACTERIZATION_INFO_EVENT */ WMI_SERVICE_RX_FSE_SUPPORT = 218, /* target supports flow search through RxOLE FSE hw block */ WMI_SERVICE_FREQINFO_IN_METADATA = 219, /* FW provides freq_info during spectral scan */ + WMI_SERVICE_EXT2_MSG = 220, /* WMI_SERVICE_READY_EXT2 msg is sent by target */ + WMI_SERVICE_WPA3_SAE_ROAM_SUPPORT = 221, /* Indicates FW supports WPA3 SAE roaming */ + WMI_SERVICE_WPA3_OWE_ROAM_SUPPORT = 222, /* Indicates FW supports WPA3 OWE roaming */ + WMI_SERVICE_AUDIO_AGGR = 223, /* Indicates FW supports audio frame aggregation */ /******* ADD NEW SERVICES HERE *******/ diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index 984e69e44862..3b8d219dffc2 100755 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -994,6 +994,20 @@ typedef enum { WMITLV_TAG_STRUC_wmi_chan_rf_characterization_info_event_fixed_param, WMITLV_TAG_STRUC_wmi_oem_data_cmd_fixed_param, WMITLV_TAG_STRUC_wmi_roam_enable_disable_trigger_reason_fixed_param, + WMITLV_TAG_STRUC_wmi_service_ready_ext2_event_fixed_param, + WMITLV_TAG_STRUC_wmi_roam_preauth_status_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_roam_preauth_start_event_fixed_param, + WMITLV_TAG_STRUC_wmi_set_elna_bypass_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_get_elna_bypass_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_get_elna_bypass_event_fixed_param, + WMITLV_TAG_STRUC_wmi_roam_pmkid_request_event_fixed_param, + WMITLV_TAG_STRUC_wmi_peer_cfr_capture_event_phase_fixed_param, + WMITLV_TAG_STRUC_wmi_audio_aggr_enable_cmd_fixed_param, + WMITLV_TAG_STRUC_audio_aggr_rate_set, + WMITLV_TAG_STRUC_wmi_audio_aggr_add_group, + WMITLV_TAG_STRUC_wmi_audio_aggr_del_group, + WMITLV_TAG_STRUC_wmi_audio_aggr_set_group_rate, + WMITLV_TAG_STRUC_wmi_audio_aggr_set_group_retry, } WMITLV_TAG_ID; /* @@ -1398,6 +1412,14 @@ typedef enum { OP(WMI_VDEV_DELETE_ALL_PEER_CMDID) \ OP(WMI_OEM_DATA_CMDID) \ OP(WMI_ROAM_ENABLE_DISABLE_TRIGGER_REASON_CMDID) \ + OP(WMI_ROAM_PREAUTH_STATUS_CMDID) \ + OP(WMI_SET_ELNA_BYPASS_CMDID) \ + OP(WMI_GET_ELNA_BYPASS_CMDID) \ + OP(WMI_AUDIO_AGGR_ENABLE_CMDID) \ + OP(WMI_AUDIO_AGGR_ADD_GROUP_CMDID) \ + OP(WMI_AUDIO_AGGR_DEL_GROUP_CMDID) \ + OP(WMI_AUDIO_AGGR_SET_GROUP_RATE_CMDID) \ + OP(WMI_AUDIO_AGGR_SET_GROUP_RETRY_CMDID) \ /* add new CMD_LIST elements above this line */ @@ -1408,6 +1430,7 @@ typedef enum { #define WMITLV_ALL_EVT_LIST(OP) \ OP(WMI_SERVICE_READY_EVENTID) \ OP(WMI_SERVICE_READY_EXT_EVENTID) \ + OP(WMI_SERVICE_READY_EXT2_EVENTID) \ OP(WMI_READY_EVENTID) \ OP(WMI_SCAN_EVENTID) \ OP(WMI_PDEV_TPC_CONFIG_EVENTID) \ @@ -1630,6 +1653,9 @@ typedef enum { OP(WMI_TWT_BTWT_REMOVE_STA_COMPLETE_EVENTID) \ OP(WMI_VDEV_DELETE_ALL_PEER_RESP_EVENTID) \ OP(WMI_CHAN_RF_CHARACTERIZATION_INFO_EVENTID) \ + OP(WMI_ROAM_PREAUTH_START_EVENTID) \ + OP(WMI_GET_ELNA_BYPASS_EVENTID) \ + OP(WMI_ROAM_PMKID_REQUEST_EVENTID) \ /* add new EVT_LIST elements above this line */ @@ -3076,6 +3102,19 @@ WMITLV_CREATE_PARAM_STRUC(WMI_ROAM_DEAUTH_CONFIG_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_roam_idle_config_cmd_fixed_param, wmi_roam_idle_config_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_ROAM_IDLE_CONFIG_CMDID); +/* Roam Pre-Authentication completion status */ +#define WMITLV_TABLE_WMI_ROAM_PREAUTH_STATUS_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_roam_preauth_status_cmd_fixed_param, wmi_roam_preauth_status_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, pmkid, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, pmk, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_ROAM_PREAUTH_STATUS_CMDID); + +/** Roam PMKID request event */ +#define WMITLV_TABLE_WMI_ROAM_PMKID_REQUEST_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_roam_pmkid_request_event_fixed_param, wmi_roam_pmkid_request_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_roam_pmkid_request_tlv_param, pmkid_request, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_ROAM_PMKID_REQUEST_EVENTID); + /* Screen Status Command parameters */ #define WMITLV_TABLE_WMI_IDLE_TRIGGER_MONITOR_CMDID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_idle_trigger_monitor_cmd_fixed_param, wmi_idle_trigger_monitor_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) @@ -3097,6 +3136,11 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_DSM_FILTER_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_roam_blacklist_with_timeout_tlv_param, blacklist_with_timeout, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_ROAM_BLACKLIST_EVENTID); +/* Roam Pre-Authentication Start Event */ +#define WMITLV_TABLE_WMI_ROAM_PREAUTH_START_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_roam_preauth_start_event_fixed_param, wmi_roam_preauth_start_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_ROAM_PREAUTH_START_EVENTID); + #define WMITLV_TABLE_WMI_LPI_RESULT_EVENTID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_lpi_result_event_fixed_param, wmi_lpi_result_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, data, WMITLV_SIZE_VAR) @@ -3239,7 +3283,8 @@ WMITLV_CREATE_PARAM_STRUC(WMI_REQUEST_STATS_EXT_CMDID); #define WMITLV_TABLE_WMI_OBSS_SCAN_ENABLE_CMDID(id,op,buf,len) \ WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_STRUC_wmi_obss_scan_enable_cmd_fixed_param, wmi_obss_scan_enable_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, channels, WMITLV_SIZE_VAR) \ - WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, ie_field, WMITLV_SIZE_VAR) + WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, ie_field, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, chan_freqs, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_OBSS_SCAN_ENABLE_CMDID); /* 2.4Ghz HT40 OBSS scan disable */ @@ -3981,6 +4026,22 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_OBSS_PD_SPATIAL_REUSE_CMDID); /* Peer CFR capture cmd */ #define WMITLV_TABLE_WMI_PEER_CFR_CAPTURE_CMDID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_cfr_capture_cmd_fixed_param, wmi_peer_cfr_capture_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) +/* + * NOTE: from approximately 7/25/19 to 8/16/19, the below TLV was incorrectly + * added to this WMI_PEER_CFR_CAPTURE_CMDID message. + * Any targets compiled with these versions of the WMI definitions will + * expect that if there is a 2nd TLV in the WMI_PEER_CFR_CAPTURE_CMDID, + * it will be + * WMITLV_TAG_STRUC_wmi_peer_cfr_capture_event_phase_fixed_param + * If in the future a new 2nd TLV is added to this WMI_PEER_CFR_CAPTURE_CMDID + * message, that would cause a target compiled with the erroneous old + * definitions to reject the WMI_PEER_CFR_CAPTURE_CMDID message containing + * the new 2nd TLV, because it would not match the + * WMITLV_TAG_STRUC_wmi_peer_cfr_capture_event_phase_fixed_param + * tag expected by the old target. + * + * WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_cfr_capture_event_phase_fixed_param, wmi_peer_cfr_capture_event_phase_fixed_param, phase_param, WMITLV_SIZE_FIX) + */ WMITLV_CREATE_PARAM_STRUC(WMI_PEER_CFR_CAPTURE_CMDID); /* CHANNEL WIDTH SWITCH commands for peers. */ @@ -4025,6 +4086,39 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_SET_RAP_CONFIG_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, oem_data, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_OEM_DATA_CMDID); +/* Set ELNA BYPASS cmd */ +#define WMITLV_TABLE_WMI_SET_ELNA_BYPASS_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_STRUC_wmi_set_elna_bypass_cmd_fixed_param, wmi_set_elna_bypass_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_SET_ELNA_BYPASS_CMDID); + +/* Get ELNA BYPASS cmd */ +#define WMITLV_TABLE_WMI_GET_ELNA_BYPASS_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_STRUC_wmi_get_elna_bypass_cmd_fixed_param, wmi_get_elna_bypass_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_GET_ELNA_BYPASS_CMDID); + +/* Audio aggr config cmd */ +#define WMITLV_TABLE_WMI_AUDIO_AGGR_ENABLE_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_audio_aggr_enable_cmd_fixed_param, wmi_audio_aggr_enable_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_AUDIO_AGGR_ENABLE_CMDID); + +#define WMITLV_TABLE_WMI_AUDIO_AGGR_ADD_GROUP_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_audio_aggr_add_group, wmi_audio_aggr_add_group_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_FIXED_STRUC, wmi_mac_addr, client_addr, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_AUDIO_AGGR_ADD_GROUP_CMDID); + +#define WMITLV_TABLE_WMI_AUDIO_AGGR_DEL_GROUP_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_audio_aggr_del_group, wmi_audio_aggr_del_group_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_AUDIO_AGGR_DEL_GROUP_CMDID); + +#define WMITLV_TABLE_WMI_AUDIO_AGGR_SET_GROUP_RATE_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_audio_aggr_set_group_rate, wmi_audio_aggr_set_group_rate_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, WMI_AUDIO_AGGR_RATE_SET_T, rate_set, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_AUDIO_AGGR_SET_GROUP_RATE_CMDID); + +#define WMITLV_TABLE_WMI_AUDIO_AGGR_SET_GROUP_RETRY_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_audio_aggr_set_group_retry, wmi_audio_aggr_set_group_retry_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_AUDIO_AGGR_SET_GROUP_RETRY_CMDID); + /************************** TLV definitions of WMI events *******************************/ @@ -4059,6 +4153,13 @@ WMITLV_CREATE_PARAM_STRUC(WMI_SERVICE_AVAILABLE_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, WMI_CHAN_RF_CHARACTERIZATION_INFO, wmi_chan_rf_characterization_info, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_SERVICE_READY_EXT_EVENTID); +/* SERVICE_READY_EXT2 event */ +#define WMITLV_TABLE_WMI_SERVICE_READY_EXT2_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_service_ready_ext2_event_fixed_param, wmi_service_ready_ext2_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, WMI_DMA_RING_CAPABILITIES, dma_ring_caps, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_spectral_bin_scaling_params, wmi_bin_scaling_params, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_SERVICE_READY_EXT2_EVENTID); + #define WMITLV_TABLE_WMI_CHAN_RF_CHARACTERIZATION_INFO_EVENTID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_chan_rf_characterization_info_event_fixed_param, wmi_chan_rf_characterization_info_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, WMI_CHAN_RF_CHARACTERIZATION_INFO, wmi_chan_rf_characterization_info, WMITLV_SIZE_VAR) @@ -5434,7 +5535,8 @@ WMITLV_CREATE_PARAM_STRUC(WMI_ESP_ESTIMATE_EVENTID); /* Peer CFR capture event */ #define WMITLV_TABLE_WMI_PEER_CFR_CAPTURE_EVENTID(id,op,buf,len) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_cfr_capture_event_fixed_param, wmi_peer_cfr_capture_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_cfr_capture_event_fixed_param, wmi_peer_cfr_capture_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_cfr_capture_event_phase_fixed_param, wmi_peer_cfr_capture_event_phase_fixed_param, phase_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_PEER_CFR_CAPTURE_EVENTID); #define WMITLV_TABLE_WMI_PDEV_COLD_BOOT_CAL_DATA_EVENTID(id,op,buf,len) \ @@ -5453,6 +5555,12 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_RAP_INFO_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, bufp, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_MGMT_OFFLOAD_EVENTID); +/* get ELNA BYPASS status event */ +#define WMITLV_TABLE_WMI_GET_ELNA_BYPASS_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_get_elna_bypass_event_fixed_param, wmi_get_elna_bypass_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_GET_ELNA_BYPASS_EVENTID); + + #ifdef __cplusplus } #endif diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index fe9438cbdd47..5645c895940e 100755 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -257,6 +257,7 @@ typedef enum { WMI_GRP_SPATIAL_REUSE, /* 0x40 */ WMI_GRP_ESP, /* 0x41 Estimate Service Parameters (802.11mc) */ WMI_GRP_HPCS_PULSE, /* 0x42 */ + WMI_GRP_AUDIO, /* 0x43 */ } WMI_GRP_ID; #define WMI_CMD_GRP_START_ID(grp_id) (((grp_id) << 12) | 0x1) @@ -708,6 +709,8 @@ typedef enum { DEPRECATED__WMI_ROAM_DSM_FILTER_CMDID, /** Enable or disable roaming triggers */ WMI_ROAM_ENABLE_DISABLE_TRIGGER_REASON_CMDID, + /** Pre-Authentication completion status command */ + WMI_ROAM_PREAUTH_STATUS_CMDID, /** offload scan specific commands */ /** set offload scan AP profile */ @@ -748,7 +751,7 @@ typedef enum { /** 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 */ + /** set AP UAPSD coex specific param */ WMI_AP_PS_PEER_UAPSD_COEX_CMDID, /** set Enhanced Green AP param */ WMI_AP_PS_EGAP_PARAM_CMDID, @@ -985,6 +988,10 @@ typedef enum { WMI_GET_TPC_POWER_CMDID, /* Specify when to start monitoring for idle state */ WMI_IDLE_TRIGGER_MONITOR_CMDID, + /** set ELNA BYPASS status */ + WMI_SET_ELNA_BYPASS_CMDID, + /** get ELNA BYPASS status */ + WMI_GET_ELNA_BYPASS_CMDID, /* Offload 11k related requests */ WMI_11K_OFFLOAD_REPORT_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_11K_OFFLOAD), @@ -1235,6 +1242,13 @@ typedef enum { /** WMI commands related to High Precision Clock Synchronization feature **/ WMI_HPCS_PULSE_START_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_HPCS_PULSE), + + /** WMI commands related to Audio Frame aggregation feature **/ + WMI_AUDIO_AGGR_ENABLE_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_AUDIO), + WMI_AUDIO_AGGR_ADD_GROUP_CMDID, + WMI_AUDIO_AGGR_DEL_GROUP_CMDID, + WMI_AUDIO_AGGR_SET_GROUP_RATE_CMDID, + WMI_AUDIO_AGGR_SET_GROUP_RETRY_CMDID, } WMI_CMD_ID; typedef enum { @@ -1345,6 +1359,9 @@ typedef enum { WMI_CHAN_RF_CHARACTERIZATION_INFO_EVENTID, + /** 2nd extension of SERVICE_READY msg with extra target capability info */ + WMI_SERVICE_READY_EXT2_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), @@ -1529,6 +1546,10 @@ typedef enum { WMI_ROAM_SCAN_STATS_EVENTID, /** Blacklisted AP information event */ WMI_ROAM_BLACKLIST_EVENTID, + /** Roam Pre-Authentication start event */ + WMI_ROAM_PREAUTH_START_EVENTID, + /** Roaming PMKID request event */ + WMI_ROAM_PMKID_REQUEST_EVENTID, /** P2P disc found */ WMI_P2P_DISC_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_P2P), @@ -1731,6 +1752,9 @@ typedef enum { /** event to provide MU-EDCA Parameters (to update host's beacon config) */ WMI_MUEDCA_PARAMS_CONFIG_EVENTID, + /** event to get ELNA BYPASS status */ + WMI_GET_ELNA_BYPASS_EVENTID, + /* GPIO Event */ WMI_GPIO_INPUT_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_GPIO), /** upload H_CV info WMI event @@ -1891,7 +1915,7 @@ typedef struct { A_UINT32 info; /** contains min power, max power, reg power and reg class id. */ A_UINT32 reg_info_1; - /** contains antennamax */ + /** contains antennamax, max bandwidth */ A_UINT32 reg_info_2; } wmi_channel; @@ -1965,6 +1989,12 @@ typedef enum { } while (0) #define WMI_GET_CHANNEL_MAX_TX_POWER(pwmi_channel) ((((pwmi_channel)->reg_info_2)>>8) & 0xff) +/* max bw supported for each channel, enum wmi_channel_width as value */ +#define WMI_SET_CHANNEL_MAX_BANDWIDTH(pwmi_channel,val) do { \ + (pwmi_channel)->reg_info_2 &= 0xff00ffff; \ + (pwmi_channel)->reg_info_2 |= ((val & 0xff) << 16); \ + } while (0) +#define WMI_GET_CHANNEL_MAX_BANDWIDTH(pwmi_channel) ((((pwmi_channel)->reg_info_2) >> 16) & 0xff) /** HT Capabilities*/ #define WMI_HT_CAP_ENABLED 0x0001 /* HT Enabled/ disabled */ @@ -2542,6 +2572,58 @@ typedef struct { */ } wmi_service_ready_ext_event_fixed_param; +/* + * regdb version GET/SET APIs + */ +#define WMI_REG_DB_VERSION_MAJOR_BITPOS 0 +#define WMI_REG_DB_VERSION_MINOR_BITPOS 8 +#define WMI_BDF_REG_DB_VERSION_MAJOR_BITPOS 16 +#define WMI_BDF_REG_DB_VERSION_MINOR_BITPOS 24 +#define WMI_REG_DB_VERSION_NUM_BITS 8 + +#define WMI_REG_DB_VERSION_MAJOR_GET(dword) \ + WMI_GET_BITS(dword, WMI_REG_DB_VERSION_MAJOR_BITPOS, WMI_REG_DB_VERSION_NUM_BITS) +#define WMI_REG_DB_VERSION_MAJOR_SET(dword, value) \ + WMI_SET_BITS(dword, WMI_REG_DB_VERSION_MAJOR_BITPOS, WMI_REG_DB_VERSION_NUM_BITS, value) + +#define WMI_REG_DB_VERSION_MINOR_GET(dword) \ + WMI_GET_BITS(dword, WMI_REG_DB_VERSION_MINOR_BITPOS, WMI_REG_DB_VERSION_NUM_BITS) +#define WMI_REG_DB_VERSION_MINOR_SET(dword, value) \ + WMI_SET_BITS(dword, WMI_REG_DB_VERSION_MINOR_BITPOS, WMI_REG_DB_VERSION_NUM_BITS, value) + +#define WMI_BDF_REG_DB_VERSION_MAJOR_GET(dword) \ + WMI_GET_BITS(dword, WMI_BDF_REG_DB_VERSION_MAJOR_BITPOS, WMI_REG_DB_VERSION_NUM_BITS) +#define WMI_BDF_REG_DB_VERSION_MAJOR_SET(dword, value) \ + WMI_SET_BITS(dword, WMI_BDF_REG_DB_VERSION_MAJOR_BITPOS, WMI_REG_DB_VERSION_NUM_BITS, value) + +#define WMI_BDF_REG_DB_VERSION_MINOR_GET(dword) \ + WMI_GET_BITS(dword, WMI_BDF_REG_DB_VERSION_MINOR_BITPOS, WMI_REG_DB_VERSION_NUM_BITS) +#define WMI_BDF_REG_DB_VERSION_MINOR_SET(dword, value) \ + WMI_SET_BITS(dword, WMI_BDF_REG_DB_VERSION_MINOR_BITPOS, WMI_REG_DB_VERSION_NUM_BITS, value) + +#define WMI_REG_DB_VERSION_SET(dword, reg_db_ver_major, reg_db_ver_minor, bdf_reg_db_ver_major, bdf_reg_db_ver_minor) \ + do { \ + WMI_REG_DB_VERSION_MAJOR_SET(dword, reg_db_ver_major); \ + WMI_REG_DB_VERSION_MINOR_SET(dword, reg_db_ver_minor); \ + WMI_BDF_REG_DB_VERSION_MAJOR_SET(dword, bdf_reg_db_ver_major); \ + WMI_BDF_REG_DB_VERSION_MINOR_SET(dword, bdf_reg_db_ver_minor); \ + } while (0) + +typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_service_ready_ext2_event_fixed_param.*/ + + /* + * regDB Version to be sent to Host on WMI service ready ext2 event. + * [7:0] - regDbVersionMajor + * [15:8] - regDbVersionMinor + * [23:16] - bdfRegDbVersionMajor + * [31:24] - bdfRegDbVersionMinor + * The WMI_*REG_DB_VERSION_[MAJOR,MINOR]_[SET,GET] macros are used to + * access these bitfields. + */ + A_UINT32 reg_db_version; +} wmi_service_ready_ext2_event_fixed_param; + typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_chan_rf_characterization_info_event_fixed_param */ /* @@ -2678,6 +2760,23 @@ typedef struct { * A 0x0 value for max_ast_index means the target has not specified a limit. */ A_UINT32 max_ast_index; + /* pktlog_defs_checksum: + * checksum computed from the definitions of the enums and structs + * used within pktlog traces. + * This pktlog defs checksum needs to be embedded into pktlog trace files + * (specifically in ath_pktlog_bufhdr.version). + * + * If pktlog_defs_checksum is zero then it is invalid; it should be ignored + * and ath_pktlog_bufhdr.magic_num needs to be PKTLOG_MAGIC_NUM_LEGACY + * (i.e. 7735225). + * + * If pktlog_defs_checksum is non-zero then it is valid, and the host + * should put it into the pktlog trace file header and set + * ath_pktlog_bufhdr.magic_num as PKTLOG_MAGIC_NUM_VERSION_IS_CHECKSUM + * (i.e. 2453506), to indicate that the file header version field contains + * a checksum. + */ + A_UINT32 pktlog_defs_checksum; /* * This fixed_param TLV is followed by these additional TLVs: @@ -3692,7 +3791,7 @@ typedef struct { /** * TLV (tag length value) parameters follow the scan_cmd * structure. The TLV's are: - * A_UINT32 channel_list[num_chan]; + * A_UINT32 channel_list[num_chan]; // in MHz * wmi_ssid ssid_list[num_ssids]; * wmi_mac_addr bssid_list[num_bssid]; * A_UINT8 ie_data[ie_len]; @@ -3829,6 +3928,7 @@ typedef struct { #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 +#define CHANNEL_MAX_BANDWIDTH_VALID 2 typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_scan_chan_list_cmd_fixed_param */ @@ -4170,7 +4270,7 @@ typedef struct { 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. */ + /** channel on which this frame is received (channel number) */ A_UINT32 channel; /** snr information used to cal rssi */ A_UINT32 snr; @@ -4213,6 +4313,9 @@ typedef struct { */ A_UINT32 pdev_id; + /** freq in MHz of the channel on which this frame was received */ + A_UINT32 chan_freq; + /* This TLV is followed by array of bytes: * A_UINT8 bufp[]; <-- management frame buffer */ @@ -4616,6 +4719,9 @@ typedef struct { #define WMI_TX_SEND_PARAM_FRAME_TYPE_GET(tx_param_dword1) WMI_GET_BITS(tx_param_dword1, 20, 1) #define WMI_TX_SEND_PARAM_FRAME_TYPE_SET(tx_param_dword1, value) WMI_SET_BITS(tx_param_dword1, 20, 1, value) +#define WMI_TX_SEND_PARAM_CFR_CAPTURE_GET(tx_param_dword1) WMI_GET_BITS(tx_param_dword1, 21, 1) +#define WMI_TX_SEND_PARAM_CFR_CAPTURE_SET(tx_param_dword1, value) WMI_SET_BITS(tx_param_dword1, 21, 1, value) + typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_tx_send_params */ @@ -4716,7 +4822,7 @@ typedef struct { /* chain_mask - specify which chains to transmit from * If not set, target will choose what chain_mask to use. */ - chain_mask: 8, + chain_mask: 8, /* The bits in this mask correspond to the values as below * bit 0 -> 5MHz @@ -4728,7 +4834,7 @@ typedef struct { * bit 6 -> 80_80MHz * If no bits are set, target can choose what BW to use. */ - bw_mask: 7, + bw_mask: 7, /* preamble_type_mask - * Specify which preamble types (CCK, OFDM, HT, VHT) the target @@ -4741,15 +4847,19 @@ typedef struct { * bit 4: if set, HE * If no bits are set, target can choose what preamble type to use. */ - preamble_type: 5, + preamble_type: 5, /* Data:1 Mgmt:0 */ - frame_type: 1, + frame_type: 1, - reserved1_31_21: 11; - }; - A_UINT32 tx_param_dword1; + /* Capture CFR when bit is set + */ + cfr_capture: 1, + + reserved1_31_22: 10; + }; + A_UINT32 tx_param_dword1; }; } wmi_tx_send_params; @@ -8018,6 +8128,14 @@ typedef struct { A_UINT32 last_rx_bitrate_kbps; /** combined RSSI of the last received PPDU, in unit of dBm */ A_INT32 peer_rssi; + /** number of succeed transmissions (MPDUs) (ACK) */ + A_UINT32 tx_succeed; + /** + * The RSSI values are in dBm units, and are exponentially time-averaged. + * The averaging is performed on the dB values (rather than the linear + * values). + */ + A_INT32 peer_rssi_per_chain[WMI_MAX_CHAINS]; } wmi_peer_stats_info; typedef struct { @@ -8462,6 +8580,11 @@ typedef struct { * added to AST table for traffic flow between mesh stations */ #define WMI_UNIFIED_VDEV_SUBTYPE_MESH_11S 0x6 +/* Subtype to indicate that the AP VAP is in smart monitor mode + * This is needed to differentiate in firmware betweem normal AP mode + * with smart monitor AP mode + */ +#define WMI_UNIFIED_VDEV_SUBTYPE_SMART_MON 0x7 /** values for vdev_start_request flags */ /** Indicates that AP VDEV uses hidden ssid. only valid for @@ -9997,6 +10120,9 @@ typedef enum { */ WMI_VDEV_PARAM_MSDU_FLOW_OVERRIDE_CONFIG, /* 0x95 */ + /* Enable/Disable using NULL frame for leaky AP */ + WMI_VDEV_PARAM_ENABLE_NULL_FOR_LEAKY_AP, /* 0x96 */ + /*=== ADD NEW VDEV PARAM TYPES ABOVE THIS LINE === * The below vdev param types are used for prototyping, and are @@ -10794,8 +10920,18 @@ typedef enum { WMI_AP_PS_EGAP_FLAG_MAX = 0x8000 } wmi_ap_ps_egap_flag_type; +#define WMI_EGAP_GET_REDUCED_2G_TX_CHM(txrx_chm) WMI_GET_BITS(txrx_chm, 0, 8) +#define WMI_EGAP_GET_REDUCED_2G_RX_CHM(txrx_chm) WMI_GET_BITS(txrx_chm, 8, 8) +#define WMI_EGAP_GET_REDUCED_5G_TX_CHM(txrx_chm) WMI_GET_BITS(txrx_chm, 16, 8) +#define WMI_EGAP_GET_REDUCED_5G_RX_CHM(txrx_chm) WMI_GET_BITS(txrx_chm, 24, 8) + +#define WMI_EGAP_SET_REDUCED_2G_TX_CHM(txrx_chm, val) WMI_SET_BITS(txrx_chm, 0, 8, val) +#define WMI_EGAP_SET_REDUCED_2G_RX_CHM(txrx_chm, val) WMI_SET_BITS(txrx_chm, 8, 8, val) +#define WMI_EGAP_SET_REDUCED_5G_TX_CHM(txrx_chm, val) WMI_SET_BITS(txrx_chm, 16, 8, val) +#define WMI_EGAP_SET_REDUCED_5G_RX_CHM(txrx_chm, val) WMI_SET_BITS(txrx_chm, 24, 8, val) + /** - * configure ehanced green ap parameters + * configure enhanced green ap parameters */ typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals wmi_ap_powersave_egap_param_cmd_fixed_param */ @@ -10815,6 +10951,13 @@ typedef struct { /** The param is used to turn on/off some functions within E-GAP. */ A_UINT32 flags; /* wmi_ap_ps_egap_flag_type bitmap */ + /** Reduced_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 reduced_txrx_chainmask; } wmi_ap_ps_egap_param_cmd_fixed_param; typedef enum { @@ -12142,7 +12285,7 @@ typedef struct { * Default value: 300 will be set if invalid value is given */ A_UINT32 stick_time_seconds; - /* Disassoc time threshold in milli seconds + /* Disassoc time threshold in milliseconds * This time threshold allows the target to judge whether the STA * should can move to another AP immediately, or if the STA has time * to calculate roaming candidates. @@ -12191,15 +12334,17 @@ typedef struct { /** unique id identifying the VDEV, generated by the caller */ A_UINT32 vdev_id; /** roam scan period value */ - A_UINT32 roam_scan_period; + A_UINT32 roam_scan_period; /* units = milliseconds */ /** Aging for Roam scans */ A_UINT32 roam_scan_age; /** Inactivity monitoring time to consider device is in inactive state with data count is less than roam_inactive_count */ - A_UINT32 inactivity_time_period; /* units = milli seconds */ + A_UINT32 inactivity_time_period; /* units = milliseconds */ /** Maximum allowed data packets count during inactivity_time_period */ A_UINT32 roam_inactive_count; /** New roam scan period after device is in inactivity state */ - A_UINT32 roam_scan_period_after_inactivity; /* units = milli seconds */ + A_UINT32 roam_scan_period_after_inactivity; /* units = milliseconds */ + /** roam full scan period value */ + A_UINT32 roam_full_scan_period; /* units = milliseconds */ } wmi_roam_scan_period_fixed_param; /** @@ -12237,7 +12382,7 @@ typedef struct { /** * TLV (tag length value) parameters follow the wmi_roam_chan_list * structure. The TLV's are: - * A_UINT32 channel_list[]; + * A_UINT32 channel_list[]; // in MHz **/ } wmi_roam_chan_list_fixed_param; @@ -12270,6 +12415,8 @@ enum { WMI_AUTH_FT_RSNA_SUITE_B_8021X_SHA384, WMI_AUTH_FT_RSNA_FILS_SHA256, WMI_AUTH_FT_RSNA_FILS_SHA384, + WMI_AUTH_WPA3_SAE, + WMI_AUTH_WPA3_OWE, }; typedef enum { @@ -12877,7 +13024,7 @@ typedef struct { A_UINT32 tlv_header; /** Blaclisted AP mac address */ wmi_mac_addr bssid; - /** How much time in milli seconds to keep AP in blacklist */ + /** How much time in milliseconds to keep AP in blacklist */ A_UINT32 timeout; } wmi_roam_blacklist_with_timeout_tlv_param; @@ -12893,6 +13040,21 @@ typedef struct { */ } wmi_roam_blacklist_event_fixed_param; +typedef struct { + A_UINT32 tlv_header; + /** candidate AP mac address */ + wmi_mac_addr bssid; +} wmi_roam_pmkid_request_tlv_param; + +/** WMI_ROAM_PMKID_REQUEST_EVENT: generated whenever FW needs the PMKID while roaming **/ +typedef struct { + A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_roam_pmkid_request_event_fixed_param */ + A_UINT32 vdev_id; + /* This TLV is followed by further TLVs: + * wmi_roam_pmkid_request_tlv_param pmkid_request[] + */ +} wmi_roam_pmkid_request_event_fixed_param; + /** WMI_ROAM_EVENT: roam event triggering the host roam logic. * generated when ever a better AP is found in the recent roam scan (or) * when beacon miss is detected (or) when a DEAUTH/DISASSOC is received @@ -13081,7 +13243,7 @@ typedef struct { /** * TLV (tag length value) parameters follows roam_invoke_req * The TLV's are: - * A_UINT32 channel_list[]; + * A_UINT32 channel_list[]; // in MHz * wmi_mac_addr bssid_list[]; * wmi_tlv_buf_len_param bcn_prb_buf_list[]; * A_UINT8 bcn_prb_frm[]; @@ -13337,13 +13499,13 @@ typedef struct { A_UINT32 disc_type; /* p2p find perodic */ A_UINT32 perodic; - /* p2p find listen channel */ + /* p2p find listen channel in MHz */ A_UINT32 listen_channel; /* p2p find full channel number */ A_UINT32 num_scan_chans; /** * TLV (tag length value) paramerters follow the pattern structure. - * TLV contain channel list + * TLV contain channel list in MHz */ } wmi_p2p_disc_offload_config_cmd; @@ -13618,6 +13780,8 @@ typedef enum event_type_e { WOW_SAP_OBSS_DETECTION_EVENT, WOW_BSS_COLOR_COLLISION_DETECT_EVENT, WOW_TKIP_MIC_ERR_FRAME_RECVD_EVENT, + WOW_ROAM_PREAUTH_START_EVENT, + WOW_ROAM_PMKID_REQUEST_EVENT, } WOW_WAKE_EVENT_TYPE; typedef enum wake_reason_e { @@ -13682,6 +13846,8 @@ typedef enum wake_reason_e { WOW_REASON_NTH_BCN_OFLD, /* nth beacon forward to host */ WOW_REASON_PKT_CAPTURE_MODE_WAKE, WOW_REASON_PAGE_FAULT, /* Host wake up due to page fault */ + WOW_REASON_ROAM_PREAUTH_START, + WOW_REASON_ROAM_PMKID_REQUEST, /* add new WOW_REASON_ defs before this line */ WOW_REASON_MAX, @@ -14611,7 +14777,7 @@ typedef struct wmi_nlo_config { A_UINT32 num_cnlo_band_pref; /* The TLVs will follow. * nlo_configured_parameters nlo_list[]; - * A_UINT32 channel_list[num_of_channels]; + * A_UINT32 channel_list[num_of_channels]; // in MHz * nlo_channel_prediction_cfg ch_prediction_cfg; * enlo_candidate_score_params candidate_score_params; * wmi_vendor_oui vendor_oui[num_vendor_oui]; @@ -15126,6 +15292,10 @@ typedef struct { A_UINT32 off_duration; /* uint in mill seconds, channel off duraiton for path loss frame sending */ wmi_mac_addr dest_mac; /* multicast DA, for path loss frame */ A_UINT32 num_chans; +/* + * This fixed_param TLV is followed by other TLVs: + * A_UINT32 channel_list[num_chans]; // in MHz + */ } wmi_vdev_plmreq_start_cmd_fixed_param; typedef struct { @@ -15695,6 +15865,8 @@ typedef struct { A_UINT32 pref_offchan_num; /* Preferred off channel bandwidth as configured by user */ A_UINT32 pref_offchan_bw; + /* Preferred off channel frequency in MHz as configured by user */ + A_UINT32 pref_offchan_freq; /** Followed by the variable length TLV peer_chan_list: * wmi_channel peer_chan_list[]. @@ -15832,14 +16004,16 @@ typedef struct { A_UINT32 offchan_mode; /** peer MAC address */ wmi_mac_addr peer_macaddr; - /* Is peer initiator or responder of TDLS setup request */ + /* Is peer initiator or responder of TDLS setup request */ A_UINT32 is_peer_responder; /* off channel number*/ A_UINT32 offchan_num; /* off channel bandwidth bitmap, e.g. WMI_OFFCHAN_20MHZ */ A_UINT32 offchan_bw_bitmap; - /* operating class for offchan */ - A_UINT32 offchan_oper_class; + /* operating class for offchan */ + A_UINT32 offchan_oper_class; + /* off channel frequency in MHz */ + A_UINT32 offchan_freq; } wmi_tdls_set_offchan_mode_cmd_fixed_param; @@ -16300,10 +16474,11 @@ typedef struct A_UINT32 tlv_header; wmi_mac_addr bssid; /* BSSID */ wmi_ssid ssid; /* SSID */ - A_UINT32 ch; /* Channel */ + A_UINT32 ch; /* Channel number */ A_UINT32 rssi; /* RSSI or Level */ /* Timestamp when Network was found. Used to calculate age based on timestamp in GET_RSP msg header */ A_UINT32 timestamp; + A_UINT32 ch_freq; /* Channel frequency in MHz */ } wmi_batch_scan_result_network_info; typedef struct @@ -16421,7 +16596,7 @@ typedef struct { /** * TLV (tag length value) parameters follow the scan_cmd * structure. The TLV's are: - * A_UINT32 channel_list[]; + * A_UINT32 channel_list[]; // in MHz * wmi_ssid ssid_list[]; * wmi_mac_addr bssid_list[]; * A_UINT8 ie_data[]; @@ -16906,6 +17081,8 @@ typedef enum { typedef enum { /* Send null frame on the requested bw and capture CFR on ACK */ WMI_PEER_CFR_CAPTURE_METHOD_NULL_FRAME = 0, + WMI_PEER_CFR_CAPTURE_METHOD_NULL_FRAME_WITH_PHASE = 1, + WMI_PEER_CFR_CAPTURE_METHOD_PROBE_RESP = 2, /* New methods to be added here */ WMI_PEER_CFR_CAPTURE_METHOD_MAX, } WMI_PEER_CFR_CAPTURE_METHOD; @@ -18659,10 +18836,17 @@ typedef struct { /** following two parameters used by FW to fill IEs when sending 20/40 coexistence action frame to AP */ A_UINT32 forty_mhz_intolerant; /** STA 40M bandwidth intolerant capability */ A_UINT32 current_operating_class; /** STA current operating class */ - /** length of 2.4GHz channel list to scan at, channel list in tlv->channels[] */ + /** length of 2.4GHz channel list to scan at, channel number list in tlv->channels[] */ A_UINT32 channel_len; /** length of optional ie data to append to probe reqest when active scan, ie data in tlv->ie_field[] */ A_UINT32 ie_len; + +/** + * TLV (tag length value) parameters following the fixed param structure + * A_UINT8 channels[channel_len]; // channel numbers + * A_UINT8 ie_field[ie_len]; + * A_UINT32 chan_freqs[channel_len] // in MHz + */ } wmi_obss_scan_enable_cmd_fixed_param; typedef struct { @@ -18778,7 +18962,7 @@ typedef struct { typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_ARRAY_STRUC */ - /** channel number */ + /** channel in MHz */ A_UINT32 channel; /** dwell time in msec - use defaults if 0 */ @@ -18964,13 +19148,13 @@ typedef struct { typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_ARRAY_STRUC */ - /**bssid */ + /** bssid */ wmi_mac_addr bssid; - /**channel number */ + /** channel in MHz */ A_UINT32 channel; - /**upper RSSI limit */ + /** upper RSSI limit */ A_UINT32 upper_rssi_limit; - /**lower RSSI limit */ + /** lower RSSI limit */ A_UINT32 lower_rssi_limit; } wmi_extscan_wlan_change_bssid_param; @@ -19009,11 +19193,11 @@ typedef struct { typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_ARRAY_STRUC */ - /**bssid */ + /** bssid */ wmi_mac_addr bssid; - /**RSSI min threshold for reporting */ + /** RSSI min threshold for reporting */ A_UINT32 min_rssi; - /**Deprecated entry - channel number */ + /** Deprecated entry - channel in MHz */ A_UINT32 channel; /** RSSI max threshold for reporting */ A_UINT32 max_rssi; @@ -19242,25 +19426,25 @@ typedef struct { typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_ARRAY_STRUC */ - /**bssid */ + /** bssid */ wmi_mac_addr bssid; - /**ssid */ + /** ssid */ wmi_ssid ssid; - /**channel number */ + /** channel in MHz */ A_UINT32 channel; - /* capabilities */ + /** capabilities */ A_UINT32 capabilities; - /* beacon interval in TUs */ + /** beacon interval in TUs */ A_UINT32 beacon_interval; - /**time stamp in milliseconds - time last seen */ + /** time stamp in milliseconds - time last seen */ A_UINT32 tstamp; - /**flags - _tExtScanEntryFlags */ + /** flags - _tExtScanEntryFlags */ A_UINT32 flags; - /**RTT in ns */ + /** RTT in ns */ A_UINT32 rtt; - /**rtt standard deviation */ + /** rtt standard deviation */ A_UINT32 rtt_sd; - /* rssi information */ + /** rssi information */ A_UINT32 number_rssi_samples; /** IE length */ A_UINT32 ie_length; /* length of IE data */ @@ -21958,12 +22142,24 @@ typedef struct { typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_peer_smart_ant_set_train_antenna_param */ /* rate array */ - A_UINT32 train_rate_series; + union { + /* train_rate_series: + * original name, used for 8-bit rate-code implementations + */ + A_UINT32 train_rate_series; + /* train_rate_series_lo: + * Contains the lower 32 bits of rate array, for larger rate-code + * implementations. This field is paired with train_rate_series_hi. + */ + A_UINT32 train_rate_series_lo; + }; /* antenna array */ A_UINT32 train_antenna_series; /* Rate flags */ /* TODO: For future use? */ A_UINT32 rc_flags; + /* rate array -- continued */ + A_UINT32 train_rate_series_hi; /* Higher 32 bits of rate array */ } wmi_peer_smart_ant_set_train_antenna_param; typedef struct { @@ -22925,6 +23121,14 @@ typedef enum wmi_coex_config_type { * allow WLAN scan on 2.4G channel when BT SCO connectivity is alive */ WMI_COEX_CONFIG_BT_SCO_ALLOW_WLAN_2G_SCAN = 42, + /* WMI_COEX_CONFIG_ENABLE_2ND_HARMONIC_WAR + * config to enable(1)/disable(0) WAR of BT 2nd harmonic issue function + */ + WMI_COEX_CONFIG_ENABLE_2ND_HARMONIC_WAR = 43, + /* WMI_COEX_CONFIG_BTCOEX_SEPARATE_CHAIN_MODE + * config BTC separate chain mode or shared mode + */ + WMI_COEX_CONFIG_BTCOEX_SEPARATE_CHAIN_MODE = 44, } WMI_COEX_CONFIG_TYPE; typedef struct { @@ -23463,10 +23667,10 @@ typedef struct { A_UINT32 regcap2; /* REGDMN MODE, see REGDMN_MODE_ enum */ A_UINT32 wireless_modes; - A_UINT32 low_2ghz_chan; - A_UINT32 high_2ghz_chan; - A_UINT32 low_5ghz_chan; - A_UINT32 high_5ghz_chan; + A_UINT32 low_2ghz_chan; /* freq in MHz */ + A_UINT32 high_2ghz_chan; /* freq in MHz */ + A_UINT32 low_5ghz_chan; /* freq in MHz */ + A_UINT32 high_5ghz_chan; /* freq in MHz */ } WMI_HAL_REG_CAPABILITIES_EXT; typedef struct { @@ -23853,7 +24057,7 @@ static INLINE A_UINT8 *wmi_id_to_name(A_UINT32 wmi_command) /* AP power save specific config * set AP power save specific param */ WMI_RETURN_STRING(WMI_AP_PS_PEER_PARAM_CMDID); - /* set AP UAPSD coex pecific param */ + /* set AP UAPSD coex specific param */ WMI_RETURN_STRING(WMI_AP_PS_PEER_UAPSD_COEX_CMDID); /* Rate-control specific commands */ @@ -24289,6 +24493,14 @@ static INLINE A_UINT8 *wmi_id_to_name(A_UINT32 wmi_command) WMI_RETURN_STRING(WMI_TWT_BTWT_INVITE_STA_CMDID); WMI_RETURN_STRING(WMI_TWT_BTWT_REMOVE_STA_CMDID); WMI_RETURN_STRING(WMI_OEM_DATA_CMDID); + WMI_RETURN_STRING(WMI_ROAM_PREAUTH_STATUS_CMDID); + WMI_RETURN_STRING(WMI_SET_ELNA_BYPASS_CMDID); + WMI_RETURN_STRING(WMI_GET_ELNA_BYPASS_CMDID); + WMI_RETURN_STRING(WMI_AUDIO_AGGR_ENABLE_CMDID); + WMI_RETURN_STRING(WMI_AUDIO_AGGR_ADD_GROUP_CMDID); + WMI_RETURN_STRING(WMI_AUDIO_AGGR_DEL_GROUP_CMDID); + WMI_RETURN_STRING(WMI_AUDIO_AGGR_SET_GROUP_RATE_CMDID); + WMI_RETURN_STRING(WMI_AUDIO_AGGR_SET_GROUP_RETRY_CMDID); } return "Invalid WMI cmd"; @@ -25657,6 +25869,35 @@ typedef enum { */ #define WLAN_PDEV_MAX_NUM_BSSID_DISALLOW_LIST 28 +/** Roam Pre-Authentication completion status */ +typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_roam_preauth_status_cmd_fixed_param */ + A_UINT32 vdev_id; + /* preauth_status, 0 - Success, Non Zero - Failure + * Refer to IEEE Std 802.11-2016 Table 9-46 for meaning of status values. + */ + A_UINT32 preauth_status; + /* AP BSSID for which pre-authentication is completed */ + wmi_mac_addr candidate_ap_bssid; + /** + * This fixed_param TLV is followed by the below TLVs: + * + * PMKID computed after successful pre-authentication. This is valid only if preauth_status is success + * A_UINT8 pmkid[]; + * + * PMK computed after successful pre-authentication. This is valid only if preauth_status is success + * A_UINT8 pmk[]; + */ +} wmi_roam_preauth_status_cmd_fixed_param; + +/** Roam Pre-Authentication start event */ +typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_roam_preauth_start_event_fixed_param */ + A_UINT32 vdev_id; + /* AP BSSID for which host needs to start pre-authentication */ + wmi_mac_addr candidate_ap_bssid; +} wmi_roam_preauth_start_event_fixed_param; + typedef struct { /* * The timestamp is in units of ticks of a 19.2MHz clock. @@ -27094,9 +27335,40 @@ typedef struct { A_UINT32 chain_rssi[WMI_MAX_CHAINS]; } wmi_peer_cfr_capture_event_fixed_param; +#define WMI_UNIFIED_CHAIN_PHASE_MASK 0x0000ffff +#define WMI_UNIFIED_CHAIN_PHASE_GET(tlv, chain_idx) \ + ((A_UINT16) ((tlv)->chain_phase[chain_idx] & WMI_UNIFIED_CHAIN_PHASE_MASK)) +#define WMI_UNIFIED_CHAIN_PHASE_SET(tlv, chain_idx, value) \ + (tlv)->chain_phase[chain_idx] = (WMI_UNIFIED_CHAIN_PHASE_MASK & (value)) + +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_peer_cfr_capture_event_phase_fixed_param */ + A_UINT32 tlv_header; + + /* Per chain AoA phase data of the Peer, for up to WMI_MAX_CHAINS. + * USE WMI_UNIFIED_CHAIN_PHASE_GET to extract the phase value for + * a particular chain. + * Only lower 2 bytes will contain phase data for a particular chain. + * The values in phase data will be from 0 1023 as mapping of + * 0-359 degrees using the formula - + * phase data = phase in degrees * 1024 / 360 + * + * Target will set 0xFFFF for all invalid chains. + * + * The WMI_UNIFIED_CHAIN_PHASE_GET/SET macros can be used to access + * the valid portion of the 4-byte word containing the chain phase data. + */ + A_UINT32 chain_phase[WMI_MAX_CHAINS]; +} wmi_peer_cfr_capture_event_phase_fixed_param; + #define WMI_PEER_CFR_CAPTURE_EVT_STATUS_OK 0x80000000 #define WMI_PEER_CFR_CAPTURE_EVT_STATUS_OK_S 31 +/* Failed to capture CFR as peer is in power save mode */ +#define WMI_PEER_CFR_CAPTURE_EVT_STATUS_PS_FAILED 0x40000000 +#define WMI_PEER_CFR_CAPTURE_EVT_STATUS_PS_FAILED_S 30 + #define WMI_PEER_CFR_CAPTURE_EVT_STATUS_TX 0x00000003 #define WMI_PEER_CFR_CAPTURE_EVT_STATUS_TX_S 0 @@ -27281,6 +27553,72 @@ typedef struct { A_UINT32 valid_fields; } wlanfw_iface_combination; +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_set_elna_bypass_cmd_fixed_param */ + A_UINT32 tlv_header; + /* VDEV identifier */ + A_UINT32 vdev_id; + /** 1-Enable, 0-Disable */ + A_UINT32 en_dis; +} wmi_set_elna_bypass_cmd_fixed_param; + +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_get_elna_bypass_cmd_fixed_param */ + A_UINT32 tlv_header; + /* VDEV identifier */ + A_UINT32 vdev_id; +} wmi_get_elna_bypass_cmd_fixed_param; + +typedef struct { + A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_get_elna_bypass_event_fixed_param */ + /* VDEV identifier */ + A_UINT32 vdev_id; + /** 1-Enable, 0-Disable */ + A_UINT32 en_dis; +} wmi_get_elna_bypass_event_fixed_param; + +/* This command is to specify to enable/disable audio frame aggr */ +typedef struct { + A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_audio_aggr_enable_cmd_fixed_param */ + A_UINT32 aggr_enable; /* enable aggregation for audio frame */ + A_UINT32 tbd_enable; /* enable time_based discarding for audio frame */ +} wmi_audio_aggr_enable_cmd_fixed_param; + +typedef struct wmi_audio_aggr_rate_set_s { + A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_audio_aggr_rate_set */ + A_UINT32 mcs; + A_UINT32 bandwidth; /* 0 for 20M, 1 for 40M and 2 for 80M, etc. */ +} WMI_AUDIO_AGGR_RATE_SET_T; + +typedef struct { + A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_audio_aggr_add_group */ + A_UINT32 group_id; /* id of audio group */ + wmi_mac_addr multicast_addr; /* multicast address of audio group */ +} wmi_audio_aggr_add_group_cmd_fixed_param; + +typedef struct { + A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_audio_aggr_del_group */ + A_UINT32 group_id; +} wmi_audio_aggr_del_group_cmd_fixed_param; + +typedef struct { + A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_audio_aggr_set_group_rate */ + A_UINT32 group_id; + /** + * TLV (tag length value) parameters follow the + * structure. The TLV's are: + * WMI_AUDIO_AGGR_RATE_SET_T rate_set[]; + **/ +} wmi_audio_aggr_set_group_rate_cmd_fixed_param; + +typedef struct { + A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_audio_aggr_set_group_retry */ + A_UINT32 group_id; + A_UINT32 retry_thresh; +} wmi_audio_aggr_set_group_retry_cmd_fixed_param; + /* ADD NEW DEFS HERE */ diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 9788da4cb9f8..451b73066860 100755 --- a/fw/wmi_version.h +++ b/fw/wmi_version.h @@ -36,7 +36,7 @@ #define __WMI_VER_MINOR_ 0 /** WMI revision number has to be incremented when there is a * change that may or may not break compatibility. */ -#define __WMI_REVISION_ 692 +#define __WMI_REVISION_ 714 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work |
