diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2018-11-01 23:11:48 -0700 |
|---|---|---|
| committer | Linux Build Service Account <lnxbuild@localhost> | 2018-11-01 23:11:48 -0700 |
| commit | 5e99c7cfbcdacbe25cc34422164f115b83f4f64a (patch) | |
| tree | 339090da510aeb3aea838f0e416bd78c0e54c37c | |
| parent | c76d6044a7b7d5f7adffc1dba89e5c6895573462 (diff) | |
| parent | da911f79d360210fb551ba9da9006317473e557f (diff) | |
Merge da911f79d360210fb551ba9da9006317473e557f on remote branch
Change-Id: I8b48104e470c38769e3b5f994d74cc854e6e921d
| -rw-r--r-- | fw/a_usb_defs.h | 27 | ||||
| -rw-r--r-- | fw/htt.h | 99 | ||||
| -rw-r--r-- | fw/htt_ppdu_stats.h | 3 | ||||
| -rw-r--r-- | fw/htt_stats.h | 1 | ||||
| -rwxr-xr-x | fw/wlan_defs.h | 184 | ||||
| -rwxr-xr-x | fw/wmi_services.h | 5 | ||||
| -rwxr-xr-x | fw/wmi_tlv_defs.h | 50 | ||||
| -rwxr-xr-x | fw/wmi_unified.h | 361 | ||||
| -rwxr-xr-x | fw/wmi_version.h | 2 |
9 files changed, 667 insertions, 65 deletions
diff --git a/fw/a_usb_defs.h b/fw/a_usb_defs.h index 90a847f4e143..2657d56b6950 100644 --- a/fw/a_usb_defs.h +++ b/fw/a_usb_defs.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012 The Linux Foundation. All rights reserved. + * Copyright (c) 2012, 2018 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -25,13 +25,7 @@ * to the Linux Foundation. */ -/* - * Shared USB definitions - * - * - * - * - */ +/* USB definitions shared between host and target */ #ifndef __A_USB_DEFS_H__ #define __A_USB_DEFS_H__ @@ -41,19 +35,32 @@ #endif /* USB endpoint definitions */ +#ifdef PLATFORM_GENOA + +#define USB_EP_ADDR_APP_CTRL_IN 0x88 +#define USB_EP_ADDR_APP_DATA_IN 0x89 +#define USB_EP_ADDR_APP_QMI_IN 0x8A +#define USB_EP_ADDR_APP_DIAG_IN 0x8B + +#define USB_EP_ADDR_APP_CTRL_OUT 0x08 +#define USB_EP_ADDR_APP_DATA_OUT 0x09 +#define USB_EP_ADDR_APP_QMI_OUT 0x0A +#define USB_EP_ADDR_APP_DIAG_OUT 0x0B + +#else /* PLATFORM_GENOA */ #define USB_EP_ADDR_APP_CTRL_IN 0x81 #define USB_EP_ADDR_APP_DATA_IN 0x82 #define USB_EP_ADDR_APP_DATA2_IN 0x83 #define USB_EP_ADDR_APP_INT_IN 0x84 - - #define USB_EP_ADDR_APP_CTRL_OUT 0x01 #define USB_EP_ADDR_APP_DATA_LP_OUT 0x02 #define USB_EP_ADDR_APP_DATA_MP_OUT 0x03 #define USB_EP_ADDR_APP_DATA_HP_OUT 0x04 +#endif /* PLATFORM_GENOA */ + #define USB_CONTROL_REQ_SEND_BMI_CMD 1 #define USB_CONTROL_REQ_RECV_BMI_RESP 2 #define USB_CONTROL_REQ_DIAG_CMD 3 @@ -171,9 +171,11 @@ * 3.54 Define mcast and mcast_valid flags within htt_tx_wbm_transmit_status * 3.55 Add initiator / responder flags to RX_DELBA indication * 3.56 Fix HTT_RX_RING_SELECTION_CFG_PKT_TYPE_ENABLE bit-mask defs + * 3.57 Add support for in-band data within HTT_T2H_MSG_TYPE_CFR_DUMP_COMPL_IND + * 3.58 Add optional MSDU ack RSSI array to end of HTT_T2H TX_COMPL_IND msg */ #define HTT_CURRENT_VERSION_MAJOR 3 -#define HTT_CURRENT_VERSION_MINOR 56 +#define HTT_CURRENT_VERSION_MINOR 58 #define HTT_NUM_TX_FRAG_DESC 1024 @@ -8066,22 +8068,27 @@ PREPACK struct htt_txq_group { * The following diagram shows the format of the TX completion indication sent * from the target to the host * - * |31 27|26|25|24|23 16| 15 |14 11|10 8|7 0| - * |------------------------------------------------------------| - * header: | rsvd |TP|A1|A0| num | t_i| tid |status| msg_type | - * |------------------------------------------------------------| - * payload: | MSDU1 ID | MSDU0 ID | - * |------------------------------------------------------------| - * : MSDU3 ID : MSDU2 ID : - * |------------------------------------------------------------| - * | struct htt_tx_compl_ind_append_retries | - * |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -| - * | struct htt_tx_compl_ind_append_tx_tstamp | - * |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -| + * |31 28|27|26|25|24|23 16| 15 |14 11|10 8|7 0| + * |-------------------------------------------------------------| + * header: |rsvd |A2|TP|A1|A0| num | t_i| tid |status| msg_type | + * |-------------------------------------------------------------| + * payload: | MSDU1 ID | MSDU0 ID | + * |-------------------------------------------------------------| + * : MSDU3 ID : MSDU2 ID : + * |-------------------------------------------------------------| + * | struct htt_tx_compl_ind_append_retries | + * |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -| + * | struct htt_tx_compl_ind_append_tx_tstamp | + * |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -| + * | MSDU1 ACK RSSI | MSDU0 ACK RSSI | + * |-------------------------------------------------------------| + * : MSDU3 ACK RSSI : MSDU2 ACK RSSI : + * |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -| * Where: * A0 = append (a.k.a. append0) * A1 = append1 * TP = MSDU tx power presence + * A2 = append2 * * The following field definitions describe the format of the TX completion * indication sent from the target to the host @@ -8135,6 +8142,19 @@ PREPACK struct htt_txq_group { * which MSDU ID. * Value: 0 indicates MSDU tx power reports are not appended, * 1 indicates MSDU tx power reports are appended + * - append2 + * Bits 27:27 + * Purpose: Indicate whether data ACK RSSI is appended for each MSDU in + * TX_COMP_IND message. The order of the per-MSDU ACK RSSI report + * matches the order of the MSDU IDs. Although the ACK RSSI is the + * same for all MSDUs witin a single PPDU, the RSSI is duplicated + * for each MSDU, for convenience. + * The ACK RSSI values are valid when status is COMPLETE_OK (and + * this append2 bit is set). + * The ACK RSSI values are SNR in dB, i.e. are the RSSI in units of + * dB above the noise floor. + * Value: 0 indicates MSDU ACK RSSI values are not appended, + * 1 indicates MSDU ACK RSSI values are appended. * Payload fields: * - hmsdu_id * Bits 15:0 @@ -8156,6 +8176,8 @@ PREPACK struct htt_txq_group { #define HTT_TX_COMPL_IND_APPEND1_M 0x02000000 #define HTT_TX_COMPL_IND_TX_POWER_S 26 #define HTT_TX_COMPL_IND_TX_POWER_M 0x04000000 +#define HTT_TX_COMPL_IND_APPEND2_S 27 +#define HTT_TX_COMPL_IND_APPEND2_M 0x08000000 #define HTT_TX_COMPL_IND_STATUS_SET(_info, _val) \ do { \ @@ -8207,6 +8229,14 @@ PREPACK struct htt_txq_group { } while (0) #define HTT_TX_COMPL_IND_TX_POWER_GET(_info) \ (((_info) & HTT_TX_COMPL_IND_TX_POWER_M) >> HTT_TX_COMPL_IND_TX_POWER_S) +#define HTT_TX_COMPL_IND_APPEND2_SET(_info, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_TX_COMPL_IND_APPEND2, _val); \ + ((_info) |= ((_val) << HTT_TX_COMPL_IND_APPEND2_S)); \ + } while (0) +#define HTT_TX_COMPL_IND_APPEND2_GET(_info) \ + (((_info) & HTT_TX_COMPL_IND_APPEND2_M) >> HTT_TX_COMPL_IND_APPEND2_S) + #define HTT_TX_COMPL_INV_TX_POWER 0xffff #define HTT_TX_COMPL_CTXT_SZ sizeof(A_UINT16) @@ -10756,8 +10786,12 @@ typedef enum { /* This message type is currently used for the below purpose: * * - capture_method = WMI_PEER_CFR_CAPTURE_METHOD_NULL_FRAME in the - * wmi_peer_cfr_capture_cmd. The associated memory region gets allocated - * through WMI_CHANNEL_CAPTURE_HOST_MEM_REQ_ID + * wmi_peer_cfr_capture_cmd. + * If payload_present bit is set to 0 then the associated memory region + * gets allocated through WMI_CHANNEL_CAPTURE_HOST_MEM_REQ_ID. + * If payload_present bit is set to 1 then CFR dump is part of the HTT + * message; the CFR dump will be present at the end of the message, + * after the chan_phy_mode. */ HTT_PEER_CFR_CAPTURE_MSG_TYPE_1 = 0x1, @@ -10781,10 +10815,10 @@ typedef enum { * * ************************************************************************** * - * |31 16|15 |7 0| + * |31 16|15 |8|7 0| * |----------------------------------------------------------------| - * header: | reserved | msg_type | - * word 0 | | | + * header: | reserved |P| msg_type | + * word 0 | | | | * |----------------------------------------------------------------| * payload: | cfr_capture_msg_type | * word 1 | | @@ -10823,6 +10857,7 @@ typedef enum { * word 12 | | * |----------------------------------------------------------------| * where, + * P - payload present bit (payload_present explained below) * req_id - memory request id (mem_req_id explained below) * S - status field (status explained below) * capbw - capture bandwidth (capture_bw explained below) @@ -10841,8 +10876,15 @@ typedef enum { * Bits 7:0 * Purpose: Identifies this as CFR TX completion indication * Value: HTT_T2H_MSG_TYPE_CFR_DUMP_COMPL_IND + * - payload_present + * Bit 8 + * Purpose: Identifies how CFR data is sent to host + * Value: 0 - If CFR Payload is written to host memory + * 1 - If CFR Payload is sent as part of HTT message + * (This is the requirement for SDIO/USB where it is + * not possible to write CFR data to host memory) * - reserved - * Bits 31:8 + * Bits 31:9 * Purpose: Reserved * Value: 0 * @@ -10861,7 +10903,8 @@ typedef enum { * Bits 6:0 * Purpose: Contain the mem request id of the region where the CFR capture * has been stored - of type WMI_HOST_MEM_REQ_ID - * Value: WMI_CHANNEL_CAPTURE_HOST_MEM_REQ_ID + * Value: WMI_CHANNEL_CAPTURE_HOST_MEM_REQ_ID (if payload_present is 1, + this value is invalid) * - status * Bit 7 * Purpose: Boolean value carrying the status of the CFR capture of the peer @@ -10991,6 +11034,22 @@ PREPACK struct htt_cfr_dump_compl_ind { } POSTPACK; /* + * Get / set macros for the bit fields within WORD-1 of htt_cfr_dump_compl_ind, + * msg_type = HTT_PEER_CFR_CAPTURE_MSG_TYPE_1 + */ +#define HTT_T2H_CFR_DUMP_PAYLOAD_PRESENT_ID_M 0x00000100 +#define HTT_T2H_CFR_DUMP_PAYLOAD_PRESENT_ID_S 8 + +#define HTT_T2H_CFR_DUMP_PAYLOAD_PRESENT_ID_SET(word, value) \ + do { \ + HTT_CHECK_SET_VAL(HTT_T2H_CFR_DUMP_PAYLOAD_PRESENT_ID, value); \ + (word) |= (value) << HTT_T2H_CFR_DUMP_PAYLOAD_PRESENT_ID_S; \ + } while(0) +#define HTT_T2H_CFR_DUMP_PAYLOAD_PRESENT_ID_GET(word) \ + (((word) & HTT_T2H_CFR_DUMP_PAYLOAD_PRESENT_ID_M) >> \ + HTT_T2H_CFR_DUMP_PAYLOAD_PRESENT_ID_S) + +/* * Get / set macros for the bit fields within WORD-2 of htt_cfr_dump_compl_ind, * msg_type = HTT_PEER_CFR_CAPTURE_MSG_TYPE_1 */ diff --git a/fw/htt_ppdu_stats.h b/fw/htt_ppdu_stats.h index d2f2f49c99fd..e88fcc3abeef 100644 --- a/fw/htt_ppdu_stats.h +++ b/fw/htt_ppdu_stats.h @@ -296,8 +296,11 @@ enum HTT_STATS_FTYPE { HTT_STATS_FTYPE_SGEN_MU_RTS, HTT_STATS_FTYPE_SGEN_MU_BSR, HTT_STATS_FTYPE_SGEN_UL_BSR, + HTT_STATS_FTYPE_SGEN_UL_BSR_TRIGGER = HTT_STATS_FTYPE_SGEN_UL_BSR, /*alias*/ HTT_STATS_FTYPE_TIDQ_DATA_SU, HTT_STATS_FTYPE_TIDQ_DATA_MU, + HTT_STATS_FTYPE_SGEN_UL_BSR_RESP, + HTT_STATS_FTYPE_SGEN_QOS_NULL, HTT_STATS_FTYPE_MAX, }; typedef enum HTT_STATS_FTYPE HTT_STATS_FTYPE; diff --git a/fw/htt_stats.h b/fw/htt_stats.h index 1da4a55e849b..97957fd83c0f 100644 --- a/fw/htt_stats.h +++ b/fw/htt_stats.h @@ -1007,6 +1007,7 @@ typedef struct { /* Total ppdu transmitted bytes for peer: includes MAC header overhead */ A_UINT32 ppdu_transmitted_bytes_low; A_UINT32 ppdu_transmitted_bytes_high; + A_UINT32 peer_ttl_removed_count; } htt_peer_stats_cmn_tlv; typedef struct { diff --git a/fw/wlan_defs.h b/fw/wlan_defs.h index 4dd6292a7bfa..f1841e6416f9 100755 --- a/fw/wlan_defs.h +++ b/fw/wlan_defs.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013-2017 The Linux Foundation. All rights reserved. + * Copyright (c) 2013-2016, 2018 The Linux Foundation. All rights reserved.* * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -597,7 +597,61 @@ typedef enum { * so that it is easy to handle the statistics in BE host. */ -struct wlan_dbg_tx_stats { +/* + * wlan_dbg_tx_stats_v1, _v2: + * differing versions of the wlan_dbg_tx_stats struct used by different + * targets + */ +struct wlan_dbg_tx_stats_v1 { + /* Num HTT cookies queued to dispatch list */ + A_INT32 comp_queued; + /* Num HTT cookies dispatched */ + A_INT32 comp_delivered; + /* Num MSDU queued to WAL */ + A_INT32 msdu_enqued; + /* Num MPDU queue to WAL */ + A_INT32 mpdu_enqued; + /* Num MSDUs dropped by WMM limit */ + A_INT32 wmm_drop; + /* Num Local frames queued */ + A_INT32 local_enqued; + /* Num Local frames done */ + A_INT32 local_freed; + /* Num queued to HW */ + A_INT32 hw_queued; + /* Num PPDU reaped from HW */ + A_INT32 hw_reaped; + /* Num underruns */ + A_INT32 underrun; + /* Num PPDUs cleaned up in TX abort */ + A_INT32 tx_abort; + /* Num MPDUs requed by SW */ + A_INT32 mpdus_requed; + /* excessive retries */ + A_UINT32 tx_ko; + /* data hw rate code */ + A_UINT32 data_rc; + /* Scheduler self triggers */ + A_UINT32 self_triggers; + /* frames dropped due to excessive sw retries */ + A_UINT32 sw_retry_failure; + /* illegal rate phy errors */ + A_UINT32 illgl_rate_phy_err; + /* wal pdev continous xretry */ + A_UINT32 pdev_cont_xretry; + /* wal pdev continous xretry */ + A_UINT32 pdev_tx_timeout; + /* wal pdev resets */ + A_UINT32 pdev_resets; + /* frames dropped due to non-availability of stateless TIDs */ + A_UINT32 stateless_tid_alloc_failure; + /* PhY/BB underrun */ + A_UINT32 phy_underrun; + /* MPDU is more than txop limit */ + A_UINT32 txop_ovf; +}; + +struct wlan_dbg_tx_stats_v2 { /* Num HTT cookies queued to dispatch list */ A_INT32 comp_queued; /* Num HTT cookies dispatched */ @@ -618,19 +672,15 @@ struct wlan_dbg_tx_stats { A_INT32 hw_reaped; /* Num underruns */ A_INT32 underrun; -#if defined(AR900B) /* HW Paused. */ A_UINT32 hw_paused; -#endif /* Num PPDUs cleaned up in TX abort */ A_INT32 tx_abort; /* Num MPDUs requed by SW */ A_INT32 mpdus_requed; /* excessive retries */ A_UINT32 tx_ko; -#if defined(AR900B) A_UINT32 tx_xretry; -#endif /* data hw rate code */ A_UINT32 data_rc; /* Scheduler self triggers */ @@ -651,7 +701,6 @@ struct wlan_dbg_tx_stats { A_UINT32 phy_underrun; /* MPDU is more than txop limit */ A_UINT32 txop_ovf; -#if defined(AR900B) /* Number of Sequences posted */ A_UINT32 seq_posted; /* Number of Sequences failed queueing */ @@ -672,10 +721,46 @@ struct wlan_dbg_tx_stats { A_INT32 mpdus_ack_failed; /* Num MPDUs that was dropped du to expiry. */ A_INT32 mpdus_expired; +}; + +#if defined(AR900B) +#define wlan_dbg_tx_stats wlan_dbg_tx_stats_v2 +#else +#define wlan_dbg_tx_stats wlan_dbg_tx_stats_v1 #endif + +/* + * wlan_dbg_rx_stats_v1, _v2: + * differing versions of the wlan_dbg_rx_stats struct used by different + * targets + */ +struct wlan_dbg_rx_stats_v1 { + /* Cnts any change in ring routing mid-ppdu */ + A_INT32 mid_ppdu_route_change; + /* Total number of statuses processed */ + A_INT32 status_rcvd; + /* Extra frags on rings 0-3 */ + A_INT32 r0_frags; + A_INT32 r1_frags; + A_INT32 r2_frags; + A_INT32 r3_frags; + /* MSDUs / MPDUs delivered to HTT */ + A_INT32 htt_msdus; + A_INT32 htt_mpdus; + /* MSDUs / MPDUs delivered to local stack */ + A_INT32 loc_msdus; + A_INT32 loc_mpdus; + /* AMSDUs that have more MSDUs than the status ring size */ + A_INT32 oversize_amsdu; + /* Number of PHY errors */ + A_INT32 phy_errs; + /* Number of PHY errors drops */ + A_INT32 phy_err_drop; + /* Number of mpdu errors - FCS, MIC, ENC etc. */ + A_INT32 mpdu_errs; }; -struct wlan_dbg_rx_stats { +struct wlan_dbg_rx_stats_v2 { /* Cnts any change in ring routing mid-ppdu */ A_INT32 mid_ppdu_route_change; /* Total number of statuses processed */ @@ -699,12 +784,15 @@ struct wlan_dbg_rx_stats { A_INT32 phy_err_drop; /* Number of mpdu errors - FCS, MIC, ENC etc. */ A_INT32 mpdu_errs; -#if defined(AR900B) /* Number of rx overflow errors. */ A_INT32 rx_ovfl_errs; -#endif }; +#if defined(AR900B) +#define wlan_dbg_rx_stats wlan_dbg_rx_stats_v2 +#else +#define wlan_dbg_rx_stats wlan_dbg_rx_stats_v1 +#endif struct wlan_dbg_mem_stats { A_UINT32 iram_free_size; @@ -716,6 +804,28 @@ struct wlan_dbg_peer_stats { A_INT32 dummy; /* REMOVE THIS ONCE REAL PEER STAT COUNTERS ARE ADDED */ }; +/* + * wlan_dbg_rx_rate_info_v1a_t, _v1b_t: + * differing versions of the wlan_dbg_rx_rate_info struct used by different + * targets + */ +typedef struct { + A_UINT32 mcs[10]; + A_UINT32 sgi[10]; + A_UINT32 nss[4]; + A_UINT32 nsts; + A_UINT32 stbc[10]; + A_UINT32 bw[3]; + A_UINT32 pream[6]; + A_UINT32 ldpc; + A_UINT32 txbf; + A_UINT32 mgmt_rssi; + A_UINT32 data_rssi; + A_UINT32 rssi_chain0; + A_UINT32 rssi_chain1; + A_UINT32 rssi_chain2; +} wlan_dbg_rx_rate_info_v1a_t; + typedef struct { A_UINT32 mcs[10]; A_UINT32 sgi[10]; @@ -734,12 +844,15 @@ typedef struct { /* * TEMPORARY: leave rssi_chain3 in place for AR900B builds until code using * rssi_chain3 has been converted to use wlan_dbg_rx_rate_info_v2_t. - * At that time, this rssi_chain3 field will be deleted. */ -#if defined(AR900B) A_UINT32 rssi_chain3; +} wlan_dbg_rx_rate_info_v1b_t; + +#if defined(AR900B) +#define wlan_dbg_rx_rate_info_t wlan_dbg_rx_rate_info_v1b_t +#else +#define wlan_dbg_rx_rate_info_t wlan_dbg_rx_rate_info_v1a_t #endif -} wlan_dbg_rx_rate_info_t ; typedef struct { A_UINT32 mcs[10]; @@ -930,25 +1043,56 @@ typedef struct wlan_dbg_stats_wifi2 { wlan_dgb_sifs_resp_stats_t sifs_resp_info; } wlan_dbg_wifi2_stats_t; +/* + * wlan_dbg_rx_rate_info_v1a, _v1b: + * differing versions of the wlan_dbg_rx_rate_info struct used by different + * targets + */ typedef struct { - wlan_dbg_rx_rate_info_t rx_phy_info; + wlan_dbg_rx_rate_info_v1a_t rx_phy_info; wlan_dbg_tx_rate_info_t tx_rate_info; -} wlan_dbg_rate_info_t; +} wlan_dbg_rate_info_v1a_t; + +typedef struct { + wlan_dbg_rx_rate_info_v1b_t rx_phy_info; + wlan_dbg_tx_rate_info_t tx_rate_info; +} wlan_dbg_rate_info_v1b_t; + +#if defined(AR900B) +#define wlan_dbg_rate_info_t wlan_dbg_rate_info_v1b_t +#else +#define wlan_dbg_rate_info_t wlan_dbg_rate_info_v1a_t +#endif typedef struct { wlan_dbg_rx_rate_info_v2_t rx_phy_info; wlan_dbg_tx_rate_info_v2_t tx_rate_info; } wlan_dbg_rate_info_v2_t; -struct wlan_dbg_stats { - struct wlan_dbg_tx_stats tx; - struct wlan_dbg_rx_stats rx; -#if defined(AR900B) +/* + * wlan_dbg_stats_v1, _v2: + * differing versions of the wlan_dbg_stats struct used by different + * targets + */ +struct wlan_dbg_stats_v1 { + struct wlan_dbg_tx_stats_v1 tx; + struct wlan_dbg_rx_stats_v1 rx; + struct wlan_dbg_peer_stats peer; +}; + +struct wlan_dbg_stats_v2 { + struct wlan_dbg_tx_stats_v2 tx; + struct wlan_dbg_rx_stats_v2 rx; struct wlan_dbg_mem_stats mem; -#endif struct wlan_dbg_peer_stats peer; }; +#if defined(AR900B) +#define wlan_dbg_stats wlan_dbg_stats_v2 +#else +#define wlan_dbg_stats wlan_dbg_stats_v1 +#endif + #define DBG_STATS_MAX_HWQ_NUM 10 #define DBG_STATS_MAX_TID_NUM 20 #define DBG_STATS_MAX_CONG_NUM 16 diff --git a/fw/wmi_services.h b/fw/wmi_services.h index a67dada36748..cf6b14d27544 100755 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -263,6 +263,11 @@ typedef enum { WMI_SERVICE_NDI_SAP_SUPPORT=167, /* Support SAP Concurrency for NAN Data interface */ WMI_SERVICE_CFR_CAPTURE_SUPPORT=168, /* Support to capture uncompressed Channel Frequency Response (CFR) */ WMI_SERVICE_CFR_CAPTURE_IND_MSG_TYPE_1=169, /* Message type HTT_PEER_CFR_CAPTURE_MSG_TYPE_1 in HTT_T2H_MSG_TYPE_CFR_DUMP_COMPL_IND */ + WMI_SERVICE_ESP_SUPPORT=170, /* Support for Estimated Service Params IE */ + WMI_SERVICE_PEER_CHWIDTH_CHANGE = 171, /* Support for host to update/re-intersect the node capability */ + WMI_SERVICE_WLAN_HPCS_PULSE=172, /* Support for High Precision Clock Synchronization feature */ + WMI_SERVICE_PER_VDEV_CHAINMASK_CONFIG_SUPPORT=173, /* Support for configuring chainmask per VDEV */ + WMI_SERVICE_TX_DATA_MGMT_ACK_RSSI=174, /* ACK RSSI indication to host for host TX data and mgmt frame */ /******* ADD NEW SERVICES HERE *******/ diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index 96c2b9176c7b..d2236b8d0d17 100755 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -930,6 +930,13 @@ typedef enum { WMITLV_TAG_STRUC_wmi_peer_cfr_capture_cmd_fixed_param, WMITLV_TAG_STRUC_wmi_peer_chan_width_switch_cmd_fixed_param, WMITLV_TAG_STRUC_wmi_chan_width_peer_list, + WMITLV_TAG_STRUC_wmi_obss_spatial_reuse_set_def_obss_thresh_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_pdev_he_tb_action_frm_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_peer_extd2_stats, + WMITLV_TAG_STRUC_wmi_hpcs_pulse_start_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_pdev_ctl_failsafe_check_fixed_param, + WMITLV_TAG_STRUC_wmi_vdev_chainmask_config_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_vdev_bcn_offload_quiet_config_cmd_fixed_param, } WMITLV_TAG_ID; /* @@ -1310,6 +1317,11 @@ typedef enum { OP(WMI_PDEV_OBSS_PD_SPATIAL_REUSE_CMDID) \ OP(WMI_PEER_CFR_CAPTURE_CMDID) \ OP(WMI_PEER_CHAN_WIDTH_SWITCH_CMDID) \ + OP(WMI_PDEV_OBSS_PD_SPATIAL_REUSE_SET_DEF_OBSS_THRESH_CMDID) \ + OP(WMI_PDEV_HE_TB_ACTION_FRM_CMDID) \ + OP(WMI_HPCS_PULSE_START_CMDID) \ + OP(WMI_VDEV_CHAINMASK_CONFIG_CMDID) \ + OP(WMI_VDEV_BCN_OFFLOAD_QUIET_CONFIG_CMDID) \ /* add new CMD_LIST elements above this line */ @@ -1520,6 +1532,7 @@ typedef enum { OP(WMI_MOTION_DET_HOST_EVENTID) \ OP(WMI_MOTION_DET_BASE_LINE_HOST_EVENTID) \ OP(WMI_ESP_ESTIMATE_EVENTID) \ + OP(WMI_PDEV_CTL_FAILSAFE_CHECK_EVENTID) \ /* add new EVT_LIST elements above this line */ @@ -2426,6 +2439,11 @@ WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_LIMIT_OFFCHAN_CMDID); WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_SET_CUSTOM_SW_RETRY_TH_CMDID); +#define WMITLV_TABLE_WMI_VDEV_CHAINMASK_CONFIG_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_chainmask_config_cmd_fixed_param, wmi_vdev_chainmask_config_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) + +WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_CHAINMASK_CONFIG_CMDID); + /* PDEV Set Base Mac Address Cmd */ #define WMITLV_TABLE_WMI_PDEV_SET_BASE_MACADDR_CMDID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_pdev_set_base_macaddr_cmd_fixed_param, wmi_pdev_set_base_macaddr_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) @@ -2600,6 +2618,12 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_SET_QUIET_MODE_CMDID); WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_SET_QUIET_MODE_CMDID); +/* vdev set offload quiet Cmd */ +#define WMITLV_TABLE_WMI_VDEV_BCN_OFFLOAD_QUIET_CONFIG_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_bcn_offload_quiet_config_cmd_fixed_param, wmi_vdev_bcn_offload_quiet_config_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) + +WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_BCN_OFFLOAD_QUIET_CONFIG_CMDID); + /* Setting custom aggregation size using command */ #define WMITLV_TABLE_WMI_VDEV_SET_CUSTOM_AGGR_SIZE_CMDID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_set_custom_aggr_size_cmd_fixed_param, wmi_vdev_set_custom_aggr_size_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) @@ -3774,6 +3798,22 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PEER_CFR_CAPTURE_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_chan_width_peer_list, peer_info, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_PEER_CHAN_WIDTH_SWITCH_CMDID); +/* OBSS_PD Spatial_Reuse Set Default OBSS Thresholds */ +#define WMITLV_TABLE_WMI_PDEV_OBSS_PD_SPATIAL_REUSE_SET_DEF_OBSS_THRESH_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_obss_spatial_reuse_set_def_obss_thresh_cmd_fixed_param, wmi_obss_spatial_reuse_set_def_obss_thresh_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_OBSS_PD_SPATIAL_REUSE_SET_DEF_OBSS_THRESH_CMDID); + +/* HE TB Action frame enable/disable */ +#define WMITLV_TABLE_WMI_PDEV_HE_TB_ACTION_FRM_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_pdev_he_tb_action_frm_cmd_fixed_param, \ + wmi_pdev_he_tb_action_frm_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, data, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_HE_TB_ACTION_FRM_CMDID); + +/* HPCS Pulse cmd */ +#define WMITLV_TABLE_WMI_HPCS_PULSE_START_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_hpcs_pulse_start_cmd_fixed_param, wmi_hpcs_pulse_start_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_HPCS_PULSE_START_CMDID); /************************** TLV definitions of WMI events *******************************/ @@ -3941,7 +3981,8 @@ WMITLV_CREATE_PARAM_STRUC(WMI_OFFCHAN_DATA_TX_COMPLETION_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_mgmt_tx_compl_bundle_event_fixed_param, wmi_mgmt_tx_compl_bundle_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, desc_ids, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, status, WMITLV_SIZE_VAR) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, ppdu_id, WMITLV_SIZE_VAR) + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, ppdu_id, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, ack_rssi, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_MGMT_TX_BUNDLE_COMPLETION_EVENTID); /* VDEV Start response Event */ @@ -4222,7 +4263,8 @@ WMITLV_CREATE_PARAM_STRUC(WMI_HOST_SWFDA_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, data, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_per_chain_rssi_stats, wmi_per_chain_rssi_stats, chain_stats, WMITLV_SIZE_FIX) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_rssi_stats, rssi_stats, WMITLV_SIZE_VAR) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_congestion_stats, congestion_stats, WMITLV_SIZE_VAR) + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_congestion_stats, congestion_stats, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_extd2_stats, peer_extd2_stats, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_UPDATE_STATS_EVENTID); /* For vdev based ht/vht info upload*/ @@ -5010,6 +5052,10 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_DMA_RING_CFG_RSP_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_dma_buf_release_spectral_meta_data, meta_data, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_DMA_RING_BUF_RELEASE_EVENTID); +/* ctl failsafe check event */ +#define WMITLV_TABLE_WMI_PDEV_CTL_FAILSAFE_CHECK_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_pdev_ctl_failsafe_check_fixed_param, wmi_pdev_ctl_failsafe_check_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_CTL_FAILSAFE_CHECK_EVENTID); /* UNIT-TEST Event */ #define WMITLV_TABLE_WMI_UNIT_TEST_EVENTID(id,op,buf,len) \ diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 17d5a0791cfa..0a5e6d445fd9 100755 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -256,6 +256,7 @@ typedef enum { WMI_GRP_MOTION_DET, /* 0x3f */ WMI_GRP_SPATIAL_REUSE, /* 0x40 */ WMI_GRP_ESP, /* 0x41 Estimate Service Parameters (802.11mc) */ + WMI_GRP_HPCS_PULSE, /* 0x42 */ } WMI_GRP_ID; #define WMI_CMD_GRP_START_ID(grp_id) (((grp_id) << 12) | 0x1) @@ -400,6 +401,8 @@ typedef enum { WMI_PDEV_SET_RX_FILTER_PROMISCUOUS_CMDID, /* set a generic direct DMA ring config */ WMI_PDEV_DMA_RING_CFG_REQ_CMDID, + /* enable/disable Action frame response as HE TB PPDU */ + WMI_PDEV_HE_TB_ACTION_FRM_CMDID, /* VDEV (virtual device) specific commands */ /** vdev create */ @@ -465,6 +468,8 @@ typedef enum { WMI_VDEV_LIMIT_OFFCHAN_CMDID, /** To set custom software retries per-AC for vdev */ WMI_VDEV_SET_CUSTOM_SW_RETRY_TH_CMDID, + /** To set chainmask configuration for vdev */ + WMI_VDEV_CHAINMASK_CONFIG_CMDID, /* peer specific commands */ @@ -575,6 +580,8 @@ typedef enum { WMI_BCN_OFFLOAD_CTRL_CMDID, /** Cmd to enable FW handling BSS color change notification from AP. */ WMI_BSS_COLOR_CHANGE_ENABLE_CMDID, + /** To configure Beacon offload quiet-ie params */ + WMI_VDEV_BCN_OFFLOAD_QUIET_CONFIG_CMDID, /** commands to directly control ba negotiation directly from host. only used in test mode */ @@ -1163,6 +1170,10 @@ typedef enum { /** WMI commands related to OBSS PD Spatial Reuse **/ WMI_PDEV_OBSS_PD_SPATIAL_REUSE_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_SPATIAL_REUSE), + WMI_PDEV_OBSS_PD_SPATIAL_REUSE_SET_DEF_OBSS_THRESH_CMDID, + + /** WMI commands related to High Precision Clock Synchronization feature **/ + WMI_HPCS_PULSE_START_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_HPCS_PULSE), } WMI_CMD_ID; typedef enum { @@ -1254,6 +1265,9 @@ typedef enum { WMI_PDEV_DMA_RING_BUF_RELEASE_EVENTID, + /** WMI Event to deliver CTL Failsafe application */ + WMI_PDEV_CTL_FAILSAFE_CHECK_EVENTID, + /* VDEV specific events */ /** VDEV started event in response to VDEV_START request */ @@ -1936,6 +1950,9 @@ typedef enum { /* Interested readers refer to Rx/Tx MCS Map definition as defined in 802.11ac */ +#define WMI_VHT_MAX_MCS_EXT_SS_GET(vht_mcs_map, index) WMI_GET_BITS(vht_mcs_map, 16 + index, 1) +#define WMI_VHT_MAX_MCS_EXT_SS_SET(vht_mcs_map, index, value) WMI_SET_BITS(vht_mcs_map, 16 + index, 1, value) + #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 @@ -1947,6 +1964,25 @@ typedef enum { #define WMI_HE_FRAG_SUPPORT_MASK 0x00000018 #define WMI_HE_FRAG_SUPPORT_SHIFT 3 +#define WMI_HE_CAP_1X_LTF_400NS_GI_SUPPORT 0x00000001 +#define WMI_HE_CAP_2X_LTF_400NS_GI_SUPPORT 0x00000002 +#define WMI_HE_CAP_2X_LTF_160_80_80_SUPPORT 0x00000004 + +#define WMI_HE_CAP_1X_LTF_400NS_GI_SUPPORT_GET(he_cap_info_dword1) \ + WMI_GET_BITS(he_cap_info_dword1, 0, 1) +#define WMI_HE_CAP_1X_LTF_400NS_GI_SUPPORT_SET(he_cap_info_dword1, value) \ + WMI_SET_BITS(he_cap_info_dword1, 0, 1, value) + +#define WMI_HE_CAP_2X_LTF_400NS_GI_SUPPORT_GET(he_cap_info_dword1) \ + WMI_GET_BITS(he_cap_info_dword1, 1, 1) +#define WMI_HE_CAP_2X_LTF_400NS_GI_SUPPORT_SET(he_cap_info_dword1, value) \ + WMI_SET_BITS(he_cap_info_dword1, 1, 1, value) + +#define WMI_HE_CAP_2X_LTF_160_80_80_SUPPORT_GET(he_cap_info_dword1) \ + WMI_GET_BITS(he_cap_info_dword1, 2, 1) +#define WMI_HE_CAP_2X_LTF_160_80_80_SUPPORT_SET(he_cap_info_dword1, value) \ + WMI_SET_BITS(he_cap_info_dword1, 2, 1, value) + /* 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)) @@ -2809,6 +2845,15 @@ typedef struct { #define WMI_RSRC_CFG_FLAG_EAPOL_AC_OVERRIDE_S 16 #define WMI_RSRC_CFG_FLAG_EAPOL_AC_OVERRIDE_M 0x30000 + /* + * If TX_ACK_RSSI is set, then the target should populate the ack_rssi + * field within the WMI_MGMT_TX_COMPLETION_EVENT message, the ack_rssi + * TLV within the WMI_MGMT_TX_BUNDLE_COMPLETION_EVENT message, and the + * "MSDU ACK RSSI" array within the HTT_T2H TX_COMPL_IND message. + */ + #define WMI_RSRC_CFG_FLAG_TX_ACK_RSSI_S 18 + #define WMI_RSRC_CFG_FLAG_TX_ACK_RSSI_M 0x40000 + A_UINT32 flag1; /** @brief smart_ant_cap - Smart Antenna capabilities information @@ -3037,6 +3082,12 @@ typedef struct { #define WMI_RSRC_CFG_FLAG_EAPOL_AC_OVERRIDE_GET(word32) \ WMI_RSRC_CFG_FLAG_GET((word32), EAPOL_AC_OVERRIDE) +#define WMI_RSRC_CFG_FLAG_TX_ACK_RSSI_SET(word32, value) \ + WMI_RSRC_CFG_FLAG_SET((word32), TX_ACK_RSSI, (value)) +#define WMI_RSRC_CFG_FLAG_TX_ACK_RSSI_GET(word32) \ + WMI_RSRC_CFG_FLAG_GET((word32), TX_ACK_RSSI) + + typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_init_cmd_fixed_param */ @@ -3503,6 +3554,7 @@ enum wmi_scan_completion_reason { 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_DFS_VIOLATION = 6, /* Failure when tried to SCAN channel in NOL list */ WMI_SCAN_REASON_MAX, }; @@ -4375,6 +4427,27 @@ typedef struct { A_UINT32 enabled; /* enable/disable */ } wmi_vdev_set_quiet_cmd_fixed_param; +/* + * START_STOP flag value: 1 - Start, 0 - Stop + */ +#define WMI_OFFLOAD_QUIET_FLAG_START_STOP 0x00000001 +/* + * ONE_SHOT flag value: 1 - One shot, 0 - Repeat + * This flag is only relevant if the START_STOP flag == 1 (start). + */ +#define WMI_OFFLOAD_QUIET_FLAG_ONE_SHOT 0x00000002 + +typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_vdev_bcn_offload_quiet_config_cmd_fixed_param */ + A_UINT32 vdev_id; /* Virtual interface ID */ + A_UINT32 period; /* period in TUs */ + A_UINT32 duration; /* duration in TUs */ + A_UINT32 next_start; /* offset in TUs from beacon */ + A_UINT32 flags; /* STOP or START (and single vs. repeated) Quiet IE + * See WMI_OFFLOAD_QUIET_FLAG_xxx defs. + */ +} wmi_vdev_bcn_offload_quiet_config_cmd_fixed_param; + typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_vdev_set_custom_aggr_size_cmd_fixed_param */ A_UINT32 vdev_id; /* vdev id indicating to which the vdev custom aggregation size will be applied. */ @@ -4466,6 +4539,35 @@ typedef struct { A_UINT32 sw_retry_th; /* max retry count per AC base on ac_type for the vdev mentioned in vdev id*/ } wmi_vdev_set_custom_sw_retry_th_cmd_fixed_param; +typedef struct { + /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_vdev_chainmask_config_cmd_fixed_param */ + A_UINT32 tlv_header; + /* vdev id indicating to which the vdev, this chainmask configuration will be applied. */ + A_UINT32 vdev_id; + /* number of chains to use for transmissions in 2.4 GHz band */ + A_UINT32 num_tx_chains_2g; + /* number of chains to use for reception in 2.4 GHz band */ + A_UINT32 num_rx_chains_2g; + /* nss to use for transmissions in 2.4 GHz band */ + A_UINT32 tx_nss_2g; + /* nss to use for reception in 2.4 GHz band */ + A_UINT32 rx_nss_2g; + /* number of chains to use for 11b transmissions. Valid only in 2.4 GHz */ + A_UINT32 num_tx_chains_b; + /* number of chains to use for 11g transmissions. Valid only in 2.4 GHz */ + A_UINT32 num_tx_chains_g; + /* number of chains to use for transmissions in 5 GHz band */ + A_UINT32 num_tx_chains_5g; + /* number of chains to use for reception in 5 GHz band */ + A_UINT32 num_rx_chains_5g; + /* nss to use for transmissions in 5 GHz band */ + A_UINT32 tx_nss_5g; + /* nss to use for reception in 5 GHz band */ + A_UINT32 rx_nss_5g; + /* number of chains to use for 11a transmissions. Valid only in 5 GHz */ + A_UINT32 num_tx_chains_a; +} wmi_vdev_chainmask_config_cmd_fixed_param; + /* * Command to enable/disable Green AP Power Save. * This helps conserve power during AP operation. When the AP has no @@ -5200,6 +5302,43 @@ typedef enum { * Value 0: Disable this feature */ WMI_PDEV_PARAM_ENABLE_OPTIMIZED_PERIODIC_CFR_TIMER, + + /* + * Configures a portion of the Estimated Service Params indication + * (802.11mc) settings, which together specify estimated throughput. + * The accompanying A_UINT32 parameter is the ESP BA WINDOW size advertised + * Value 0: Disable this feature + * Non zero Value: ESP BA WINDOW size + */ + WMI_PDEV_PARAM_ESP_BA_WINDOW, + + /* + * Configures a portion of the Estimated Service Params indication + * (802.11mc) settings, which together specify estimated throughput. + * The accompanying A_UINT32 parameter is the air time fraction to be + * advertised in the ESP IE + * Value 0: Disable this feature + * Non zero Value: Air time fraction in percentage + */ + WMI_PDEV_PARAM_ESP_AIRTIME_FRACTION, + + /* + * Configures a portion of the Estimated Service Params indication + * (802.11mc) settings, which together specify estimated throughput. + * The accompanying A_UINT32 parameter specifies PPDU duration in units + * of milliseconds. + * Value 0: Disable this feature + * Non zero Value: PPDU duration in milliseconds + */ + WMI_PDEV_PARAM_ESP_PPDU_DURATION, + + /* + * Enable/Disable NOL(Non Occupancy list) in firmware + * 1- Use NOL in firmware + * 0- Don't use NOL in firmware + */ + WMI_PDEV_PARAM_USE_NOL, + } WMI_PDEV_PARAM; typedef struct { @@ -5423,6 +5562,13 @@ typedef struct { * A ppdu_id value of 0x0 is invalid, and should be ignored. */ A_UINT32 ppdu_id; + /* ack_rssi + * TX mgmt ack RSSI report to host. + * Only valid when status == COMPLETE_OK and the ACK_RSSI report is enabled + * ACK RSSI is reported as SNR dB, i.e. how many dB the RSSI is above + * the noise floor. + */ + A_UINT32 ack_rssi; } wmi_mgmt_tx_compl_event_fixed_param; typedef struct { @@ -5447,6 +5593,8 @@ typedef struct { * A_UINT32 desc_ids[num_reports]; <- from tx_send_cmd * A_UINT32 status[num_reports]; <- WMI_MGMT_TX_COMP_STATUS_TYPE * A_UINT32 ppdu_id[num_reports]; <- list of PPDU IDs + * A_UINT32 ack_rssi[num_reports]; <- list of ack RSSI + * RSSI units = dB w.r.t. noise floor */ } wmi_mgmt_tx_compl_bundle_event_fixed_param; @@ -5811,6 +5959,7 @@ typedef enum { WMI_REQUEST_PEER_EXTD_STAT = 0x0400, WMI_REQUEST_BCN_STAT = 0x0800, WMI_REQUEST_BCN_STAT_RESET = 0x1000, + WMI_REQUEST_PEER_EXTD2_STAT = 0x2000, } wmi_stats_id; /* @@ -6428,6 +6577,8 @@ typedef struct { A_UINT32 num_bcn_stats; /** number of extended peer stats event structures (wmi_peer_extd_stats) */ A_UINT32 num_peer_extd_stats; + /** number of extd2 peer stats event structures (wmi_peer_extd2_stats) */ + A_UINT32 num_peer_extd2_stats; /* This TLV is followed by another TLV of array of bytes * A_UINT8 data[]; @@ -7014,8 +7165,23 @@ typedef struct { /** * PDEV statistics - * @todo - * add all PDEV stats here + * + * This struct incorporates the wlan_dbg_stats struct, which is + * conditionally defined, based on the AR900B flag. + * The below _v1 struct variant is the unconditional definition + * that matches what would be conditionally defined by builds that + * don't use the AR900B flag. The _v2 struct variant is the + * unconditional definition that matches what would be conditionally + * defined by builds that use the AR900B flag. + * The _v2 struct def can be used within host or target builds + * that don't use the AR900B flag, but needs to interoperate with a + * target or host build that does use the AR900B flag. + * Similarly, the _v1 struct def can be used by a host or target build + * that does use the AR900B flag, but needs to interoperate with a + * target or host build that doesn't use the AR900B flag. + * + * For backwards compatibility, wmi_pdev_stats is still (conditionally) + * defined, as an alias for either the _v1 or _v2 variant. */ typedef struct { /** Channel noise floor */ @@ -7033,9 +7199,33 @@ typedef struct { /** Channel Tx Power */ A_UINT32 chan_tx_pwr; /** WAL dbg stats */ - struct wlan_dbg_stats pdev_stats; + struct wlan_dbg_stats_v1 pdev_stats; +} wmi_pdev_stats_v1; -} wmi_pdev_stats; +typedef struct { + /** Channel noise floor */ + A_INT32 chan_nf; + /** TX frame count */ + A_UINT32 tx_frame_count; + /** RX frame count */ + A_UINT32 rx_frame_count; + /** rx clear count */ + A_UINT32 rx_clear_count; + /** cycle count */ + A_UINT32 cycle_count; + /** Phy error count */ + A_UINT32 phy_err_count; + /** Channel Tx Power */ + A_UINT32 chan_tx_pwr; + /** WAL dbg stats */ + struct wlan_dbg_stats_v2 pdev_stats; +} wmi_pdev_stats_v2; + +#if defined(AR900B) +#define wmi_pdev_stats wmi_pdev_stats_v2 +#else +#define wmi_pdev_stats wmi_pdev_stats_v1 +#endif /** * VDEV statistics @@ -7114,6 +7304,26 @@ typedef struct { } wmi_peer_extd_stats; typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_peer_extd2_stats */ + /** peer MAC address */ + wmi_mac_addr peer_macaddr; + /* + * The following rx_bytes field (lower/upper pair) counts only the + * MSDU bytes (after 802.11 decap, if applicable), and thus doesn't + * count the 802.11 header, unlike the wmi_peer_extd_stats.peer_rx_bytes + * and wmi_peer_stats_info.rx_bytes fields. + */ + /** Lower 32 bits of the rx_bytes (size of MSDUs) excluding dot11 header from this peer */ + A_UINT32 rx_bytes_l32; + /** Upper 32 bits of the rx_bytes (size of MSDUs) excluding dot11 header from this peer */ + A_UINT32 rx_bytes_u32; + /** Number of MPDUS received with FCS error from this peer */ + A_UINT32 rx_fcs_err; + /** Number of MPDUs(both data and non data) received from this peer */ + A_UINT32 rx_mpdus; +} wmi_peer_extd2_stats; + +typedef struct { /** Primary channel freq of the channel for which stats are sent */ A_UINT32 chan_mhz; /** Time spent on the channel */ @@ -9075,6 +9285,7 @@ typedef struct { #define WMI_VDEV_START_RESPONSE_STATUS_SUCCESS 0x0 /** VDEV succesfully started */ #define WMI_VDEV_START_RESPONSE_INVALID_VDEVID 0x1 /** requested VDEV not found */ #define WMI_VDEV_START_RESPONSE_NOT_SUPPORTED 0x2 /** unsupported VDEV combination */ +#define WMI_VDEV_START_RESPONSE_DFS_VIOLATION 0x3 /** DFS_VIOLATION since channel in the NOL is selected */ /** Beacon processing related command and event structures */ typedef struct { @@ -10153,6 +10364,11 @@ typedef struct { * This parameter controls the UL OFDMA and UL MU-MIMO peer fixed rate. */ #define WMI_PEER_PARAM_UL_FIXED_RATE 0x1b +/** send specific OMI to peer via QoS-null frame + * param_value = follow 11ax spec definition + * bit0:VHT(1), bit1:HE(1), bit2-31:A-Control + */ +#define WMI_PEER_RARAM_XMIT_OMI 0x1c /** mimo ps values for the parameter WMI_PEER_MIMO_PS_STATE */ #define WMI_PEER_MIMO_PS_NONE 0x0 @@ -10420,6 +10636,15 @@ typedef struct { /* 2nd DWORD of 11ax MAC Capabilities */ A_UINT32 peer_he_cap_info_ext; + /* + * bit 0 : Indicated support for RX 1xLTF + 0.4us + * bit 1 : Indicates support for RX 2xLTF + 0.4us + * bit 2 : Indicates support for 2xLTF in 160/80+80 MHz HE PPDU + * bit[31:3] : Reserved + * Refer to WMI_HE_CAP_xx_LTF_xxx_SUPPORT_GET/SET macros + */ + A_UINT32 peer_he_cap_info_internal; + /* Following this struct are the TLV's: * A_UINT8 peer_legacy_rates[]; * A_UINT8 peer_ht_rates[]; @@ -11481,6 +11706,10 @@ typedef struct { A_UINT32 rssi; /** roam notification */ A_UINT32 notif; + /** roam notification param + * Refer to WMI_ROAM_NOTIF_ defs to interpret the notif_params value. + */ + A_UINT32 notif_params; } wmi_roam_event_fixed_param; @@ -11552,6 +11781,7 @@ typedef enum #define WMI_ROAM_NOTIF_SCAN_MODE_FAIL 0x5 /** indicate that roaming scan mode is failed due to internal roaming state */ #define WMI_ROAM_NOTIF_DISCONNECT 0x6 /** indicate that roaming not allowed due BTM req */ #define WMI_ROAM_NOTIF_SUBNET_CHANGED 0x7 /** indicate that subnet has changed */ +#define WMI_ROAM_NOTIF_SCAN_START 0x8 /** indicate roam scan start, notif_params to be sent as WMI_ROAM_TRIGGER_REASON_ID */ /**whenever RIC request information change, host driver should pass all ric related information to firmware (now only support tsepc) * Once, 11r roaming happens, firmware can generate RIC request in reassoc request based on these informations @@ -20073,6 +20303,12 @@ typedef struct { * byte 40 */ A_UINT32 toeplitz_hash_ipv6_40; + + /** + * @brief pdev_id - identifies the MAC + * See macros starting with WMI_PDEV_ID_ for values. + */ + A_UINT32 pdev_id; } wmi_lro_info_cmd_fixed_param; typedef struct { @@ -20898,6 +21134,11 @@ typedef enum wmi_coex_config_type { arg4 medium - upper limit arg5 high - lower limit arg6 high - upper limit */ + WMI_COEX_CONFIG_WLAN_OVER_ZBLOW = 28, /* config to boost WiFi traffic over 15.4 Low prio traffic */ + WMI_COEX_CONFIG_WLAN_MGMT_OVER_BT_A2DP = 29, /* config to raise WLAN priority higher than BT in coex scenario of SAP + BT or 15.4 */ + WMI_COEX_CONFIG_WLAN_CONN_OVER_LE = 30, /* config to elevate Wifi priority over BLE during WLAN association */ + WMI_COEX_CONFIG_LE_OVER_WLAN_TRAFFIC = 31, /* config to elevate BLE traffic over WiFi traffic */ + WMI_COEX_CONFIG_THREE_WAY_COEX_RESET = 32, /* config to reset the weights to default */ } WMI_COEX_CONFIG_TYPE; typedef struct { @@ -21200,7 +21441,17 @@ typedef struct { * - 0 indicates support for VHT-MCS 0-7 for n spatial streams * - 1 indicates support for VHT-MCS 0-8 for n spatial streams * - 2 indicates support for VHT-MCS 0-9 for n spatial streams - * - 3 indicates that n spatial streams is not supported */ + * - 3 indicates that n spatial streams is not supported + * - bit [15:0] Each NSS takes 2 bit. + * - bit [23:16] Indicates support for VHT-MCS 10 and 11 for + * n spatial streams + * - bit 16 - for NSS 1 + * - bit 17 - for NSS 2 + * - . + * - . + * - bit 23 - for NSS 8 + * Refer to the WMI_VHT_MAX_MCS_EXT_SS_GET/SET macros. + */ A_UINT32 vht_supp_mcs_2G; /*HE capability info field of 802.11ax, WMI_HE_CAP defines */ A_UINT32 he_cap_info_2G; @@ -21228,11 +21479,21 @@ typedef struct { /* VHT capability info field of 802.11ac, WMI_VHT_CAP defines */ A_UINT32 vht_cap_info_5G; /* VHT Supported MCS Set field Rx/Tx same - * The max VHT-MCS for n SS subfield (where n = 1,...,8) is encoded as follows - * - 0 indicates support for VHT-MCS 0-7 for n spatial streams - * - 1 indicates support for VHT-MCS 0-8 for n spatial streams - * - 2 indicates support for VHT-MCS 0-9 for n spatial streams - * - 3 indicates that n spatial streams is not supported */ + * The max VHT-MCS for n SS subfield (where n = 1,...,8) is encoded as follows + * - 0 indicates support for VHT-MCS 0-7 for n spatial streams + * - 1 indicates support for VHT-MCS 0-8 for n spatial streams + * - 2 indicates support for VHT-MCS 0-9 for n spatial streams + * - 3 indicates that n spatial streams is not supported + * - bit [15:0] Each NSS takes 2 bit. + * - bit [23:16] Indicates support for VHT-MCS 10 and 11 for + * n spatial streams + * - bit 16 - for NSS 1 + * - bit 17 - for NSS 2 + * - . + * - . + * - bit 23 - for NSS 8 + * Refer to the WMI_VHT_MAX_MCS_EXT_SS_GET/SET macros. + */ A_UINT32 vht_supp_mcs_5G; /*HE capability info field of 802.11ax, WMI_HE_CAP defines */ A_UINT32 he_cap_info_5G; @@ -21269,6 +21530,14 @@ typedef struct { /* 2nd DWORD of HE capability info field of 802.11ax, support Draft 3+ */ A_UINT32 he_cap_info_2G_ext; A_UINT32 he_cap_info_5G_ext; + /* + * bit 0 : Indicated support for RX 1xLTF + 0.4us + * bit 1 : Indicates support for RX 2xLTF + 0.4us + * bit 2 : Indicates support for 2xLTF in 160/80+80 MHz HE PPDU + * bit[31:3] : Reserved + * Refer to WMI_HE_CAP_xx_LTF_xxx_SUPPORT_GET/SET macros + */ + A_UINT32 he_cap_info_internal; } WMI_MAC_PHY_CAPABILITIES; typedef struct { @@ -22198,6 +22467,11 @@ static INLINE A_UINT8 *wmi_id_to_name(A_UINT32 wmi_command) WMI_RETURN_STRING(WMI_SAR_LIMITS_CMDID); WMI_RETURN_STRING(WMI_SAR_GET_LIMITS_CMDID); WMI_RETURN_STRING(WMI_PEER_CHAN_WIDTH_SWITCH_CMDID); + WMI_RETURN_STRING(WMI_PDEV_OBSS_PD_SPATIAL_REUSE_SET_DEF_OBSS_THRESH_CMDID); + WMI_RETURN_STRING(WMI_PDEV_HE_TB_ACTION_FRM_CMDID); + WMI_RETURN_STRING(WMI_HPCS_PULSE_START_CMDID); + WMI_RETURN_STRING(WMI_VDEV_CHAINMASK_CONFIG_CMDID); + WMI_RETURN_STRING(WMI_VDEV_BCN_OFFLOAD_QUIET_CONFIG_CMDID); } return "Invalid WMI cmd"; @@ -23128,8 +23402,7 @@ typedef enum { AGC_GAIN_RSSI_CORR_BASED = 1, } WMI_SPECTRAL_SCALING_FORMULA_ID; -typedef struct -{ +typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_spectral_bin_scaling_params */ A_UINT32 pdev_id; /* ID of pdev to which the scaling parameters are to be applied */ WMI_SPECTRAL_SCALING_FORMULA_ID formula_id; /* Represets the formula to be used */ @@ -23140,6 +23413,12 @@ typedef struct } wmi_spectral_bin_scaling_params; typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_pdev_ctl_failsafe_event_params */ + A_UINT32 pdev_id; /* ID of pdev to which ctl failsafe status is sent */ + A_UINT32 ctl_FailsafeStatus; /* To indicate if Failsafe value is imposed on CTL. 0- Success, 1- Failsafe imposed */ +} wmi_pdev_ctl_failsafe_check_fixed_param; + +typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_runtime_dpd_recal_cmd_fixed_param */ A_UINT32 enable; /* Enable/disable */ @@ -23426,6 +23705,35 @@ typedef struct { A_UINT32 vdev_id; } wmi_obss_spatial_reuse_set_cmd_fixed_param; +/* + * Below structure is related to WMI CMD that configures the default + * mimimum (OBSS_MIN) and maximum (OBSS_MAX) Other BSS levels (RSSI in dbm) + * for VDEV of a give type (STA or AP). These thresholds are configured + * within the Host and passed down to the FW. FW will use these + * default OBSS_MIN and OBSS_MAX values during roaming if the assoc response + * from the AP does not include spatial reuse parameter set Info Element. + */ +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_obss_spatial_reuse_set_def_obss_thresh_cmd_fixed_param + */ + A_UINT32 tlv_header; + /* + * In the below fields, "OBSS level" refers to the power of the + * signals received from "Other BSS". + * Spatial reuse will only be permitted if the Other BSS's signal power + * is witin the min to max range specified by the below fields. + */ + /** Minimum OBSS level to use */ + A_INT32 obss_min; /* RSSI in dBm */ + /** Maximum OBSS level to use */ + A_INT32 obss_max; /* RSSI in dBm */ + /** Type of VDEV for which these threshold are applicable. + * vdev_type should be one of WMI_VDEV_TYPE_STA or WMI_VDEV_TYPE_AP + */ + A_UINT32 vdev_type; +} wmi_obss_spatial_reuse_set_def_obss_thresh_cmd_fixed_param; + typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUCT_wmi_chan_width_peer_list */ wmi_mac_addr peer_macaddr; @@ -23441,6 +23749,35 @@ typedef struct { */ } wmi_peer_chan_width_switch_cmd_fixed_param; +typedef struct { + /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_pdev_he_tb_action_frm_cmd_fixed_param */ + A_UINT32 tlv_header; + /* enable or disable HE TB Action frame */ + A_UINT32 enable; + /* length of action frame body in bytes */ + A_UINT32 data_len; +/* This TLV is followed by another TLV of array of bytes + * A_UINT8 data[]; + * This data array contains the action frame raw data + */ +} wmi_pdev_he_tb_action_frm_cmd_fixed_param; + +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_hpcs_pulse_start_cmd_fixed_param */ + A_UINT32 tlv_header; /** TLV Header */ + A_UINT32 vdev_id; /** Vdev ID */ + A_UINT32 start; /** Start/Stop */ + A_UINT32 sync_time; /** Lower 32-bit of the TSF at which the + * pulse should be synced. */ + A_UINT32 pulse_interval; /** Periodicity of pulses in micro seconds */ + A_UINT32 active_sync_period; /** Number of beacons to sync before generating + * pulse in units of beacon interval. + * Valid for clock slaves only. */ + A_UINT32 gpio_pin; /** GPIO Pin number to be used */ + A_UINT32 pulse_width; /** Duration of pulse in micro seconds */ +} wmi_hpcs_pulse_start_cmd_fixed_param; + /* Default PE Duration subfield indicates the PE duration in units of 4 us */ #define WMI_HEOPS_DEFPE_GET_D3(he_ops) WMI_GET_BITS(he_ops, 0, 3) #define WMI_HEOPS_DEFPE_SET_D3(he_ops, value) WMI_SET_BITS(he_ops, 0, 3, value) diff --git a/fw/wmi_version.h b/fw/wmi_version.h index b4d2f04fb35c..f39b6b8a29eb 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_ 570 +#define __WMI_REVISION_ 586 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work |
