diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2019-05-01 04:37:05 -0700 |
|---|---|---|
| committer | Linux Build Service Account <lnxbuild@localhost> | 2019-05-01 04:37:05 -0700 |
| commit | e6dadf9971435d582840eae68359178881967711 (patch) | |
| tree | e82947707dcb1fdaed503951c0b76aa3f1716d88 | |
| parent | 90c4e0aaa3eeecaf12141cca1de6a0743fd42ab0 (diff) | |
| parent | cac1fc5e5a665df80170c0d74ea33269ae75ded7 (diff) | |
Merge cac1fc5e5a665df80170c0d74ea33269ae75ded7 on remote branch
Change-Id: I262464b29f0d5bb882b5b166be065d25ac9cbd76
| -rw-r--r-- | fw/htt.h | 188 | ||||
| -rw-r--r-- | fw/htt_stats.h | 1938 | ||||
| -rwxr-xr-x | fw/wlan_defs.h | 2 | ||||
| -rwxr-xr-x | fw/wmi_services.h | 10 | ||||
| -rwxr-xr-x | fw/wmi_tlv_defs.h | 70 | ||||
| -rwxr-xr-x | fw/wmi_unified.h | 603 | ||||
| -rwxr-xr-x | fw/wmi_version.h | 2 |
7 files changed, 1827 insertions, 986 deletions
@@ -175,9 +175,11 @@ * 3.58 Add optional MSDU ack RSSI array to end of HTT_T2H TX_COMPL_IND msg * 3.59 Add HTT_RXDMA_HOST_BUF_RING2 def * 3.60 Add HTT_T2H_MSG_TYPE_PEER_STATS_IND def + * 3.61 Add rx offset fields to HTT_H2T_MSG_TYPE_RX_RING_SELECTION_CFG msg + * 3.62 Add antenna mask to reserved space in htt_rx_ind_hl_rx_desc_t */ #define HTT_CURRENT_VERSION_MAJOR 3 -#define HTT_CURRENT_VERSION_MINOR 60 +#define HTT_CURRENT_VERSION_MINOR 62 #define HTT_NUM_TX_FRAG_DESC 1024 @@ -4728,9 +4730,9 @@ enum htt_srng_ring_id { * * The message would appear as follows: * - * |31 26|25|24|23 16|15 8|7 0| + * |31 27|26|25|24|23 16|15 8|7 0| * |-----------------+----------------+----------------+---------------| - * | rsvd1 |PS|SS| ring_id | pdev_id | msg_type | + * | rsvd1 |OV|PS|SS| ring_id | pdev_id | msg_type | * |-------------------------------------------------------------------| * | rsvd2 | ring_buffer_size | * |-------------------------------------------------------------------| @@ -4744,9 +4746,18 @@ enum htt_srng_ring_id { * |-------------------------------------------------------------------| * | tlv_filter_in_flags | * |-------------------------------------------------------------------| + * | rx_header_offset | rx_packet_offset | + * |-------------------------------------------------------------------| + * | rx_mpdu_start_offset | rx_mpdu_end_offset | + * |-------------------------------------------------------------------| + * | rx_msdu_start_offset | rx_msdu_end_offset | + * |-------------------------------------------------------------------| + * | rsvd3 | rx_attention_offset | + * |-------------------------------------------------------------------| * Where: * PS = pkt_swap * SS = status_swap + * OV = rx_offsets_valid * The message is interpreted as follows: * dword0 - b'0:7 - msg_type: This will be set to * HTT_H2T_MSG_TYPE_RX_RING_SELECTION_CFG @@ -4755,9 +4766,15 @@ enum htt_srng_ring_id { * 1/2/3 mac id (for rings at LMAC level) * b'16:23 - ring_id : Identify the ring to configure. * More details can be got from enum htt_srng_ring_id - * b'24 - status_swap: 1 is to swap status TLV - * b'25 - pkt_swap: 1 is to swap packet TLV - * b'26:31 - rsvd1: reserved for future use + * b'24 - status_swap (SS): 1 is to swap status TLV - refer to + * BUF_RING_CFG_0 defs within HW .h files, + * e.g. wmac_top_reg_seq_hwioreg.h + * b'25 - pkt_swap (PS): 1 is to swap packet TLV - refer to + * BUF_RING_CFG_0 defs within HW .h files, + * e.g. wmac_top_reg_seq_hwioreg.h + * b'26 - rx_offset_valid (OV): flag to indicate rx offsets + * configuration fields are valid + * b'27:31 - rsvd1: reserved for future use * dword1 - b'0:16 - ring_buffer_size: size of bufferes referenced by rx ring, * in byte units. * Valid only for HW_TO_SW_RING and SW_TO_HW_RING @@ -4786,14 +4803,51 @@ enum htt_srng_ring_id { * dword6 - b'0:31 - tlv_filter_in_flags: * Filter in Attention/MPDU/PPDU/Header/User tlvs * Refer to CFG_TLV_FILTER_IN_FLAG defs + * dword7 - b'0:15 - rx_packet_offset: rx_packet_offset in byte units + * Valid only for HW_TO_SW_RING and SW_TO_HW_RING + * A value of 0 will be considered as ignore this config. + * Refer to BUF_RING_CFG_1 defs within HW .h files, + * e.g. wmac_top_reg_seq_hwioreg.h + * - b'16:31 - rx_header_offset: rx_header_offset in byte units + * Valid only for HW_TO_SW_RING and SW_TO_HW_RING + * A value of 0 will be considered as ignore this config. + * Refer to BUF_RING_CFG_1 defs within HW .h files, + * e.g. wmac_top_reg_seq_hwioreg.h + * dword8 - b'0:15 - rx_mpdu_end_offset: rx_mpdu_end_offset in byte units + * Valid only for HW_TO_SW_RING and SW_TO_HW_RING + * A value of 0 will be considered as ignore this config. + * Refer to BUF_RING_CFG_2 defs within HW .h files, + * e.g. wmac_top_reg_seq_hwioreg.h + * - b'16:31 - rx_mpdu_start_offset: rx_mpdu_start_offset in byte units + * Valid only for HW_TO_SW_RING and SW_TO_HW_RING + * A value of 0 will be considered as ignore this config. + * Refer to BUF_RING_CFG_2 defs within HW .h files, + * e.g. wmac_top_reg_seq_hwioreg.h + * dword9 - b'0:15 - rx_msdu_end_offset: rx_msdu_end_offset in byte units + * Valid only for HW_TO_SW_RING and SW_TO_HW_RING + * A value of 0 will be considered as ignore this config. + * Refer to BUF_RING_CFG_3 defs within HW .h files, + * e.g. wmac_top_reg_seq_hwioreg.h + * - b'16:31 - rx_msdu_start_offset: rx_msdu_start_offset in byte units + * Valid only for HW_TO_SW_RING and SW_TO_HW_RING + * A value of 0 will be considered as ignore this config. + * Refer to BUF_RING_CFG_3 defs within HW .h files, + * e.g. wmac_top_reg_seq_hwioreg.h + * dword10 - b'0:15 - rx_attention_offset: rx_attention_offset in byte units + * Valid only for HW_TO_SW_RING and SW_TO_HW_RING + * A value of 0 will be considered as ignore this config. + * Refer to BUF_RING_CFG_4 defs within HW .h files, + * e.g. wmac_top_reg_seq_hwioreg.h + * - b'16-31 - rsvd3 for future use */ PREPACK struct htt_rx_ring_selection_cfg_t { - A_UINT32 msg_type: 8, - pdev_id: 8, - ring_id: 8, - status_swap: 1, - pkt_swap: 1, - rsvd1: 6; + A_UINT32 msg_type: 8, + pdev_id: 8, + ring_id: 8, + status_swap: 1, + pkt_swap: 1, + rx_offsets_valid: 1, + rsvd1: 5; A_UINT32 ring_buffer_size: 16, rsvd2: 16; A_UINT32 packet_type_enable_flags_0; @@ -4801,6 +4855,14 @@ PREPACK struct htt_rx_ring_selection_cfg_t { A_UINT32 packet_type_enable_flags_2; A_UINT32 packet_type_enable_flags_3; A_UINT32 tlv_filter_in_flags; + A_UINT32 rx_packet_offset: 16, + rx_header_offset: 16; + A_UINT32 rx_mpdu_end_offset: 16, + rx_mpdu_start_offset: 16; + A_UINT32 rx_msdu_end_offset: 16, + rx_msdu_start_offset: 16; + A_UINT32 rx_attn_offset: 16, + rsvd3: 16; } POSTPACK; #define HTT_RX_RING_SELECTION_CFG_SZ (sizeof(struct htt_rx_ring_selection_cfg_t)) @@ -4849,6 +4911,17 @@ PREPACK struct htt_rx_ring_selection_cfg_t { ((_var) |= ((_val) << HTT_RX_RING_SELECTION_CFG_PKT_TLV_SWAP_S)); \ } while (0) +#define HTT_RX_RING_SELECTION_CFG_RX_OFFSETS_VALID_M 0x04000000 +#define HTT_RX_RING_SELECTION_CFG_RX_OFFSETS_VALID_S 26 +#define HTT_RX_RING_SELECTION_CFG_RX_OFFSETS_VALID_GET(_var) \ + (((_var) & HTT_RX_RING_SELECTION_CFG_RX_OFFSETS_VALID_M) >> \ + HTT_RX_RING_SELECTION_CFG_RX_OFFSETS_VALID_S) +#define HTT_RX_RING_SELECTION_CFG_RX_OFFSETS_VALID_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_RX_RING_SELECTION_CFG_RX_OFFSETS_VALID, _val); \ + ((_var) |= ((_val) << HTT_RX_RING_SELECTION_CFG_RX_OFFSETS_VALID_S)); \ + } while (0) + #define HTT_RX_RING_SELECTION_CFG_RING_BUFFER_SIZE_M 0x0000ffff #define HTT_RX_RING_SELECTION_CFG_RING_BUFFER_SIZE_S 0 #define HTT_RX_RING_SELECTION_CFG_RING_BUFFER_SIZE_GET(_var) \ @@ -4915,6 +4988,83 @@ PREPACK struct htt_rx_ring_selection_cfg_t { ((_var) |= ((_val) << HTT_RX_RING_SELECTION_CFG_TLV_FILTER_IN_FLAG_S)); \ } while (0) +#define HTT_RX_RING_SELECTION_CFG_RX_PACKET_OFFSET_M 0x0000ffff +#define HTT_RX_RING_SELECTION_CFG_RX_PACKET_OFFSET_S 0 +#define HTT_RX_RING_SELECTION_CFG_RX_PACKET_OFFSET_GET(_var) \ + (((_var) & HTT_RX_RING_SELECTION_CFG_RX_PACKET_OFFSET_M) >> \ + HTT_RX_RING_SELECTION_CFG_RX_PACKET_OFFSET_S) +#define HTT_RX_RING_SELECTION_CFG_RX_PACKET_OFFSET_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_RX_RING_SELECTION_CFG_RX_PACKET_OFFSET, _val); \ + ((_var) |= ((_val) << HTT_RX_RING_SELECTION_CFG_RX_PACKET_OFFSET_S)); \ + } while (0) + +#define HTT_RX_RING_SELECTION_CFG_RX_HEADER_OFFSET_M 0xffff0000 +#define HTT_RX_RING_SELECTION_CFG_RX_HEADER_OFFSET_S 16 +#define HTT_RX_RING_SELECTION_CFG_RX_HEADER_OFFSET_GET(_var) \ + (((_var) & HTT_RX_RING_SELECTION_CFG_RX_HEADER_OFFSET_M) >> \ + HTT_RX_RING_SELECTION_CFG_RX_HEADER_OFFSET_S) +#define HTT_RX_RING_SELECTION_CFG_RX_HEADER_OFFSET_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_RX_RING_SELECTION_CFG_RX_HEADER_OFFSET, _val); \ + ((_var) |= ((_val) << HTT_RX_RING_SELECTION_CFG_RX_HEADER_OFFSET_S)); \ + } while (0) + +#define HTT_RX_RING_SELECTION_CFG_RX_MPDU_END_OFFSET_M 0x0000ffff +#define HTT_RX_RING_SELECTION_CFG_RX_MPDU_END_OFFSET_S 0 +#define HTT_RX_RING_SELECTION_CFG_RX_MPDU_END_OFFSET_GET(_var) \ + (((_var) & HTT_RX_RING_SELECTION_CFG_RX_MPDU_END_OFFSET_M) >> \ + HTT_RX_RING_SELECTION_CFG_RX_MPDU_END_OFFSET_S) +#define HTT_RX_RING_SELECTION_CFG_RX_MPDU_END_OFFSET_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_RX_RING_SELECTION_CFG_RX_MPDU_END_OFFSET, _val); \ + ((_var) |= ((_val) << HTT_RX_RING_SELECTION_CFG_RX_MPDU_END_OFFSET_S)); \ + } while (0) + +#define HTT_RX_RING_SELECTION_CFG_RX_MPDU_START_OFFSET_M 0xffff0000 +#define HTT_RX_RING_SELECTION_CFG_RX_MPDU_START_OFFSET_S 16 +#define HTT_RX_RING_SELECTION_CFG_RX_MPDU_START_OFFSET_GET(_var) \ + (((_var) & HTT_RX_RING_SELECTION_CFG_RX_MPDU_START_OFFSET_M) >> \ + HTT_RX_RING_SELECTION_CFG_RX_MPDU_START_OFFSET_S) +#define HTT_RX_RING_SELECTION_CFG_RX_MPDU_START_OFFSET_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_RX_RING_SELECTION_CFG_RX_MPDU_START_OFFSET, _val); \ + ((_var) |= ((_val) << HTT_RX_RING_SELECTION_CFG_RX_MPDU_START_OFFSET_S)); \ + } while (0) + +#define HTT_RX_RING_SELECTION_CFG_RX_MSDU_END_OFFSET_M 0x0000ffff +#define HTT_RX_RING_SELECTION_CFG_RX_MSDU_END_OFFSET_S 0 +#define HTT_RX_RING_SELECTION_CFG_RX_MSDU_END_OFFSET_GET(_var) \ + (((_var) & HTT_RX_RING_SELECTION_CFG_RX_MSDU_END_OFFSET_M) >> \ + HTT_RX_RING_SELECTION_CFG_RX_MSDU_END_OFFSET_S) +#define HTT_RX_RING_SELECTION_CFG_RX_MSDU_END_OFFSET_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_RX_RING_SELECTION_CFG_RX_MSDU_END_OFFSET, _val); \ + ((_var) |= ((_val) << HTT_RX_RING_SELECTION_CFG_RX_MSDU_END_OFFSET_S)); \ + } while (0) + +#define HTT_RX_RING_SELECTION_CFG_RX_MSDU_START_OFFSET_M 0xffff0000 +#define HTT_RX_RING_SELECTION_CFG_RX_MSDU_START_OFFSET_S 16 +#define HTT_RX_RING_SELECTION_CFG_RX_MSDU_START_OFFSET_GET(_var) \ + (((_var) & HTT_RX_RING_SELECTION_CFG_RX_MSDU_START_OFFSET_M) >> \ + HTT_RX_RING_SELECTION_CFG_RX_MSDU_START_OFFSET_S) +#define HTT_RX_RING_SELECTION_CFG_RX_MSDU_START_OFFSET_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_RX_RING_SELECTION_CFG_RX_MSDU_START_OFFSET, _val); \ + ((_var) |= ((_val) << HTT_RX_RING_SELECTION_CFG_RX_MSDU_START_OFFSET_S)); \ + } while (0) + +#define HTT_RX_RING_SELECTION_CFG_RX_ATTENTION_OFFSET_M 0x0000ffff +#define HTT_RX_RING_SELECTION_CFG_RX_ATTENTION_OFFSET_S 0 +#define HTT_RX_RING_SELECTION_CFG_RX_ATTENTION_OFFSET_GET(_var) \ + (((_var) & HTT_RX_RING_SELECTION_CFG_RX_ATTENTION_OFFSET_M) >> \ + HTT_RX_RING_SELECTION_CFG_RX_ATTENTION_OFFSET_S) +#define HTT_RX_RING_SELECTION_CFG_RX_ATTENTION_OFFSET_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_RX_RING_SELECTION_CFG_RX_ATTENTION_OFFSET, _val); \ + ((_var) |= ((_val) << HTT_RX_RING_SELECTION_CFG_RX_ATTENTION_OFFSET_S)); \ + } while (0) + /* * Subtype based MGMT frames enable bits. * FP: Filter_Pass, MD: Monitor_Direct MO: Monitor_Other @@ -6781,7 +6931,7 @@ A_COMPILE_TIME_ASSERT(HTT_RX_IND_hdr_size_quantum, #define HTT_RX_IND_HL_BYTES \ (HTT_RX_IND_HDR_BYTES + \ - 4 /* single FW rx MSDU descriptor, plus padding */ + \ + 4 /* single FW rx MSDU descriptor */ + \ 4 /* single MPDU range information element */) #define HTT_RX_IND_HL_SIZE32 (HTT_RX_IND_HL_BYTES >> 2) @@ -6818,6 +6968,14 @@ struct htt_rx_ind_hl_rx_desc_t { udp: 1, reserved: 1; } flags; + /* sa_ant_matrix + * For cases where a single rx chain has options to be connected to + * different rx antennas, show which rx antennas were in use during + * receipt of a given PPDU. + * This sa_ant_matrix provides a bitmask of the antennas used while + * receiving this frame. + */ + A_UINT8 sa_ant_matrix; }; #define HTT_RX_IND_HL_RX_DESC_VER_OFFSET \ @@ -6833,6 +6991,10 @@ struct htt_rx_ind_hl_rx_desc_t { (HTT_RX_IND_HL_RX_DESC_BASE_OFFSET \ + offsetof(struct htt_rx_ind_hl_rx_desc_t, flags)) +#define HTT_RX_IND_HL_SA_ANT_MATRIX_OFFSET \ + (HTT_RX_IND_HL_RX_DESC_BASE_OFFSET \ + + offsetof(struct htt_rx_ind_hl_rx_desc_t, sa_ant_matrix)) + #define HTT_RX_IND_HL_FLAG_FIRST_MSDU (0x01 << 0) #define HTT_RX_IND_HL_FLAG_LAST_MSDU (0x01 << 1) #define HTT_RX_IND_HL_FLAG_C3_FAILED (0x01 << 2) /* L3 checksum failed */ diff --git a/fw/htt_stats.h b/fw/htt_stats.h index d2c8b03a8d5d..d093f25b4de6 100644 --- a/fw/htt_stats.h +++ b/fw/htt_stats.h @@ -35,7 +35,6 @@ * Max supported stats :- 256. */ enum htt_dbg_ext_stats_type { - /* HTT_DBG_EXT_STATS_RESET * PARAM: * - config_param0 : start_offset (stats type) @@ -45,7 +44,7 @@ enum htt_dbg_ext_stats_type { * RESP MSG: * - No response sent. */ - HTT_DBG_EXT_STATS_RESET = 0, + HTT_DBG_EXT_STATS_RESET = 0, /* HTT_DBG_EXT_STATS_PDEV_TX * PARAMS: @@ -53,7 +52,7 @@ enum htt_dbg_ext_stats_type { * RESP MSG: * - htt_tx_pdev_stats_t */ - HTT_DBG_EXT_STATS_PDEV_TX = 1, + HTT_DBG_EXT_STATS_PDEV_TX = 1, /* HTT_DBG_EXT_STATS_PDEV_RX * PARAMS: @@ -61,7 +60,7 @@ enum htt_dbg_ext_stats_type { * RESP MSG: * - htt_rx_pdev_stats_t */ - HTT_DBG_EXT_STATS_PDEV_RX = 2, + HTT_DBG_EXT_STATS_PDEV_RX = 2, /* HTT_DBG_EXT_STATS_PDEV_TX_HWQ * PARAMS: @@ -69,7 +68,7 @@ enum htt_dbg_ext_stats_type { * RESP MSG: * - htt_tx_hwq_stats_t */ - HTT_DBG_EXT_STATS_PDEV_TX_HWQ = 3, + HTT_DBG_EXT_STATS_PDEV_TX_HWQ = 3, /* HTT_DBG_EXT_STATS_PDEV_TX_SCHED * PARAMS: @@ -77,7 +76,7 @@ enum htt_dbg_ext_stats_type { * RESP MSG: * - htt_stats_tx_sched_t */ - HTT_DBG_EXT_STATS_PDEV_TX_SCHED = 4, + HTT_DBG_EXT_STATS_PDEV_TX_SCHED = 4, /* HTT_DBG_EXT_STATS_PDEV_ERROR * PARAMS: @@ -85,7 +84,7 @@ enum htt_dbg_ext_stats_type { * RESP MSG: * - htt_hw_err_stats_t */ - HTT_DBG_EXT_STATS_PDEV_ERROR = 5, + HTT_DBG_EXT_STATS_PDEV_ERROR = 5, /* HTT_DBG_EXT_STATS_PDEV_TQM * PARAMS: @@ -93,7 +92,7 @@ enum htt_dbg_ext_stats_type { * RESP MSG: * - htt_tx_tqm_pdev_stats_t */ - HTT_DBG_EXT_STATS_PDEV_TQM = 6, + HTT_DBG_EXT_STATS_PDEV_TQM = 6, /* HTT_DBG_EXT_STATS_TQM_CMDQ * PARAMS: @@ -103,7 +102,7 @@ enum htt_dbg_ext_stats_type { * RESP MSG: * - htt_tx_tqm_cmdq_stats_t */ - HTT_DBG_EXT_STATS_TQM_CMDQ = 7, + HTT_DBG_EXT_STATS_TQM_CMDQ = 7, /* HTT_DBG_EXT_STATS_TX_DE_INFO * PARAMS: @@ -111,7 +110,7 @@ enum htt_dbg_ext_stats_type { * RESP MSG: * - htt_tx_de_stats_t */ - HTT_DBG_EXT_STATS_TX_DE_INFO = 8, + HTT_DBG_EXT_STATS_TX_DE_INFO = 8, /* HTT_DBG_EXT_STATS_PDEV_TX_RATE * PARAMS: @@ -119,7 +118,7 @@ enum htt_dbg_ext_stats_type { * RESP MSG: * - htt_tx_pdev_rate_stats_t */ - HTT_DBG_EXT_STATS_PDEV_TX_RATE = 9, + HTT_DBG_EXT_STATS_PDEV_TX_RATE = 9, /* HTT_DBG_EXT_STATS_PDEV_RX_RATE * PARAMS: @@ -127,7 +126,7 @@ enum htt_dbg_ext_stats_type { * RESP MSG: * - htt_rx_pdev_rate_stats_t */ - HTT_DBG_EXT_STATS_PDEV_RX_RATE = 10, + HTT_DBG_EXT_STATS_PDEV_RX_RATE = 10, /* HTT_DBG_EXT_STATS_PEER_INFO * PARAMS: @@ -150,7 +149,7 @@ enum htt_dbg_ext_stats_type { * RESP MSG: * - htt_peer_stats_t */ - HTT_DBG_EXT_STATS_PEER_INFO = 11, + HTT_DBG_EXT_STATS_PEER_INFO = 11, /* HTT_DBG_EXT_STATS_TX_SELFGEN_INFO * PARAMS: @@ -158,7 +157,7 @@ enum htt_dbg_ext_stats_type { * RESP MSG: * - htt_tx_pdev_selfgen_stats_t */ - HTT_DBG_EXT_STATS_TX_SELFGEN_INFO = 12, + HTT_DBG_EXT_STATS_TX_SELFGEN_INFO = 12, /* HTT_DBG_EXT_STATS_TX_MU_HWQ * PARAMS: @@ -166,7 +165,7 @@ enum htt_dbg_ext_stats_type { * RESP MSG: * - htt_tx_hwq_mu_mimo_stats_t */ - HTT_DBG_EXT_STATS_TX_MU_HWQ = 13, + HTT_DBG_EXT_STATS_TX_MU_HWQ = 13, /* HTT_DBG_EXT_STATS_RING_IF_INFO * PARAMS: @@ -176,7 +175,7 @@ enum htt_dbg_ext_stats_type { * RESP MSG: * - htt_ring_if_stats_t */ - HTT_DBG_EXT_STATS_RING_IF_INFO = 14, + HTT_DBG_EXT_STATS_RING_IF_INFO = 14, /* HTT_DBG_EXT_STATS_SRNG_INFO * PARAMS: @@ -187,7 +186,7 @@ enum htt_dbg_ext_stats_type { * RESP MSG: * - htt_sring_stats_t */ - HTT_DBG_EXT_STATS_SRNG_INFO = 15, + HTT_DBG_EXT_STATS_SRNG_INFO = 15, /* HTT_DBG_EXT_STATS_SFM_INFO * PARAMS: @@ -195,7 +194,7 @@ enum htt_dbg_ext_stats_type { * RESP MSG: * - htt_sfm_stats_t */ - HTT_DBG_EXT_STATS_SFM_INFO = 16, + HTT_DBG_EXT_STATS_SFM_INFO = 16, /* HTT_DBG_EXT_STATS_PDEV_TX_MU * PARAMS: @@ -203,7 +202,7 @@ enum htt_dbg_ext_stats_type { * RESP MSG: * - htt_tx_pdev_mu_mimo_stats_t */ - HTT_DBG_EXT_STATS_PDEV_TX_MU = 17, + HTT_DBG_EXT_STATS_PDEV_TX_MU = 17, /* HTT_DBG_EXT_STATS_ACTIVE_PEERS_LIST * PARAMS: @@ -214,7 +213,7 @@ enum htt_dbg_ext_stats_type { * RESP MSG: * - htt_active_peer_details_list_t */ - HTT_DBG_EXT_STATS_ACTIVE_PEERS_LIST = 18, + HTT_DBG_EXT_STATS_ACTIVE_PEERS_LIST = 18, /* HTT_DBG_EXT_STATS_PDEV_CCA_STATS * PARAMS: @@ -225,7 +224,7 @@ enum htt_dbg_ext_stats_type { * RESP MSG: * - htt_pdev_cca_stats_t */ - HTT_DBG_EXT_STATS_PDEV_CCA_STATS = 19, + HTT_DBG_EXT_STATS_PDEV_CCA_STATS = 19, /* HTT_DBG_EXT_STATS_TWT_SESSIONS * PARAMS: @@ -234,7 +233,7 @@ enum htt_dbg_ext_stats_type { * RESP MSG: * - htt_pdev_twt_sessions_stats_t */ - HTT_DBG_EXT_STATS_TWT_SESSIONS = 20, + HTT_DBG_EXT_STATS_TWT_SESSIONS = 20, /* HTT_DBG_EXT_STATS_REO_CNTS * PARAMS: @@ -243,7 +242,7 @@ enum htt_dbg_ext_stats_type { * RESP MSG: * - htt_soc_reo_resource_stats_t */ - HTT_DBG_EXT_STATS_REO_RESOURCE_STATS = 21, + HTT_DBG_EXT_STATS_REO_RESOURCE_STATS = 21, /* HTT_DBG_EXT_STATS_TX_SOUNDING_INFO * PARAMS: @@ -257,7 +256,7 @@ enum htt_dbg_ext_stats_type { * RESP MSG: * - htt_tx_sounding_stats_t */ - HTT_DBG_EXT_STATS_TX_SOUNDING_INFO = 22, + HTT_DBG_EXT_STATS_TX_SOUNDING_INFO = 22, /* HTT_DBG_EXT_STATS_PDEV_OBSS_PD_STATS * PARAMS: @@ -266,131 +265,129 @@ enum htt_dbg_ext_stats_type { * RESP MSG: * - htt_pdev_obss_pd_stats_t */ - HTT_DBG_EXT_STATS_PDEV_OBSS_PD_STATS = 23, - + HTT_DBG_EXT_STATS_PDEV_OBSS_PD_STATS = 23, /* keep this last */ - HTT_DBG_NUM_EXT_STATS = 256, + HTT_DBG_NUM_EXT_STATS = 256, }; typedef enum { - HTT_STATS_TX_PDEV_CMN_TAG = 0, /* htt_tx_pdev_stats_cmn_tlv */ - HTT_STATS_TX_PDEV_UNDERRUN_TAG = 1, /* htt_tx_pdev_stats_urrn_tlv_v */ - HTT_STATS_TX_PDEV_SIFS_TAG = 2, /* htt_tx_pdev_stats_sifs_tlv_v */ - HTT_STATS_TX_PDEV_FLUSH_TAG = 3, /* htt_tx_pdev_stats_flush_tlv_v */ - HTT_STATS_TX_PDEV_PHY_ERR_TAG = 4, /* htt_tx_pdev_stats_phy_err_tlv_v */ - HTT_STATS_STRING_TAG = 5, /* htt_stats_string_tlv */ - HTT_STATS_TX_HWQ_CMN_TAG = 6, /* htt_tx_hwq_stats_cmn_tlv */ - HTT_STATS_TX_HWQ_DIFS_LATENCY_TAG = 7, /* htt_tx_hwq_difs_latency_stats_tlv_v */ - HTT_STATS_TX_HWQ_CMD_RESULT_TAG = 8, /* htt_tx_hwq_cmd_result_stats_tlv_v */ - HTT_STATS_TX_HWQ_CMD_STALL_TAG = 9, /* htt_tx_hwq_cmd_stall_stats_tlv_v */ - HTT_STATS_TX_HWQ_FES_STATUS_TAG = 10, /* htt_tx_hwq_fes_result_stats_tlv_v */ - HTT_STATS_TX_TQM_GEN_MPDU_TAG = 11, /* htt_tx_tqm_gen_mpdu_stats_tlv_v */ - HTT_STATS_TX_TQM_LIST_MPDU_TAG = 12, /* htt_tx_tqm_list_mpdu_stats_tlv_v */ - HTT_STATS_TX_TQM_LIST_MPDU_CNT_TAG = 13, /* htt_tx_tqm_list_mpdu_cnt_tlv_v */ - HTT_STATS_TX_TQM_CMN_TAG = 14, /* htt_tx_tqm_cmn_stats_tlv */ - HTT_STATS_TX_TQM_PDEV_TAG = 15, /* htt_tx_tqm_pdev_stats_tlv_v */ - HTT_STATS_TX_TQM_CMDQ_STATUS_TAG = 16, /* htt_tx_tqm_cmdq_status_tlv */ - HTT_STATS_TX_DE_EAPOL_PACKETS_TAG = 17, /* htt_tx_de_eapol_packets_stats_tlv */ - HTT_STATS_TX_DE_CLASSIFY_FAILED_TAG = 18, /* htt_tx_de_classify_failed_stats_tlv */ - HTT_STATS_TX_DE_CLASSIFY_STATS_TAG = 19, /* htt_tx_de_classify_stats_tlv */ - HTT_STATS_TX_DE_CLASSIFY_STATUS_TAG = 20, /* htt_tx_de_classify_status_stats_tlv */ - HTT_STATS_TX_DE_ENQUEUE_PACKETS_TAG = 21, /* htt_tx_de_enqueue_packets_stats_tlv */ - HTT_STATS_TX_DE_ENQUEUE_DISCARD_TAG = 22, /* htt_tx_de_enqueue_discard_stats_tlv */ - HTT_STATS_TX_DE_CMN_TAG = 23, /* htt_tx_de_cmn_stats_tlv */ - HTT_STATS_RING_IF_TAG = 24, /* htt_ring_if_stats_tlv */ - HTT_STATS_TX_PDEV_MU_MIMO_STATS_TAG = 25, /* htt_tx_pdev_mu_mimo_sch_stats_tlv */ - HTT_STATS_SFM_CMN_TAG = 26, /* htt_sfm_cmn_tlv */ - HTT_STATS_SRING_STATS_TAG = 27, /* htt_sring_stats_tlv */ - HTT_STATS_RX_PDEV_FW_STATS_TAG = 28, /* htt_rx_pdev_fw_stats_tlv */ - HTT_STATS_RX_PDEV_FW_RING_MPDU_ERR_TAG = 29, /* htt_rx_pdev_fw_ring_mpdu_err_tlv_v */ - HTT_STATS_RX_PDEV_FW_MPDU_DROP_TAG = 30, /* htt_rx_pdev_fw_mpdu_drop_tlv_v */ - HTT_STATS_RX_SOC_FW_STATS_TAG = 31, /* htt_rx_soc_fw_stats_tlv */ - HTT_STATS_RX_SOC_FW_REFILL_RING_EMPTY_TAG = 32, /* htt_rx_soc_fw_refill_ring_empty_tlv_v */ - HTT_STATS_RX_SOC_FW_REFILL_RING_NUM_REFILL_TAG = 33, /* htt_rx_soc_fw_refill_ring_num_refill_tlv_v */ - HTT_STATS_TX_PDEV_RATE_STATS_TAG = 34, /* htt_tx_pdev_rate_stats_tlv */ - HTT_STATS_RX_PDEV_RATE_STATS_TAG = 35, /* htt_rx_pdev_rate_stats_tlv */ - HTT_STATS_TX_PDEV_SCHEDULER_TXQ_STATS_TAG = 36, /* htt_tx_pdev_stats_sched_per_txq_tlv */ - HTT_STATS_TX_SCHED_CMN_TAG = 37, /* htt_stats_tx_sched_cmn_tlv */ - HTT_STATS_TX_PDEV_MUMIMO_MPDU_STATS_TAG = 38, /* htt_tx_pdev_mu_mimo_mpdu_stats_tlv */ - HTT_STATS_SCHED_TXQ_CMD_POSTED_TAG = 39, /* htt_sched_txq_cmd_posted_tlv_v */ - HTT_STATS_RING_IF_CMN_TAG = 40, /* htt_ring_if_cmn_tlv */ - HTT_STATS_SFM_CLIENT_USER_TAG = 41, /* htt_sfm_client_user_tlv_v */ - HTT_STATS_SFM_CLIENT_TAG = 42, /* htt_sfm_client_tlv */ - HTT_STATS_TX_TQM_ERROR_STATS_TAG = 43, /* htt_tx_tqm_error_stats_tlv */ - HTT_STATS_SCHED_TXQ_CMD_REAPED_TAG = 44, /* htt_sched_txq_cmd_reaped_tlv_v */ - HTT_STATS_SRING_CMN_TAG = 45, /* htt_sring_cmn_tlv */ - HTT_STATS_TX_SELFGEN_AC_ERR_STATS_TAG = 46, /* htt_tx_selfgen_ac_err_stats_tlv */ - HTT_STATS_TX_SELFGEN_CMN_STATS_TAG = 47, /* htt_tx_selfgen_cmn_stats_tlv */ - HTT_STATS_TX_SELFGEN_AC_STATS_TAG = 48, /* htt_tx_selfgen_ac_stats_tlv */ - HTT_STATS_TX_SELFGEN_AX_STATS_TAG = 49, /* htt_tx_selfgen_ax_stats_tlv */ - HTT_STATS_TX_SELFGEN_AX_ERR_STATS_TAG = 50, /* htt_tx_selfgen_ax_err_stats_tlv */ - HTT_STATS_TX_HWQ_MUMIMO_SCH_STATS_TAG = 51, /* htt_tx_hwq_mu_mimo_sch_stats_tlv */ - HTT_STATS_TX_HWQ_MUMIMO_MPDU_STATS_TAG = 52, /* htt_tx_hwq_mu_mimo_mpdu_stats_tlv */ - HTT_STATS_TX_HWQ_MUMIMO_CMN_STATS_TAG = 53, /* htt_tx_hwq_mu_mimo_cmn_stats_tlv */ - HTT_STATS_HW_INTR_MISC_TAG = 54, /* htt_hw_stats_intr_misc_tlv */ - HTT_STATS_HW_WD_TIMEOUT_TAG = 55, /* htt_hw_stats_wd_timeout_tlv */ - HTT_STATS_HW_PDEV_ERRS_TAG = 56, /* htt_hw_stats_pdev_errs_tlv */ - HTT_STATS_COUNTER_NAME_TAG = 57, /* htt_counter_tlv */ - HTT_STATS_TX_TID_DETAILS_TAG = 58, /* htt_tx_tid_stats_tlv */ - HTT_STATS_RX_TID_DETAILS_TAG = 59, /* htt_rx_tid_stats_tlv */ - HTT_STATS_PEER_STATS_CMN_TAG = 60, /* htt_peer_stats_cmn_tlv */ - HTT_STATS_PEER_DETAILS_TAG = 61, /* htt_peer_details_tlv */ - HTT_STATS_PEER_TX_RATE_STATS_TAG = 62, /* htt_tx_peer_rate_stats_tlv */ - HTT_STATS_PEER_RX_RATE_STATS_TAG = 63, /* htt_rx_peer_rate_stats_tlv */ - HTT_STATS_PEER_MSDU_FLOWQ_TAG = 64, /* htt_msdu_flow_stats_tlv */ - HTT_STATS_TX_DE_COMPL_STATS_TAG = 65, /* htt_tx_de_compl_stats_tlv */ - HTT_STATS_WHAL_TX_TAG = 66, /* htt_hw_stats_whal_tx_tlv */ - HTT_STATS_TX_PDEV_SIFS_HIST_TAG = 67, /* htt_tx_pdev_stats_sifs_hist_tlv_v */ - HTT_STATS_RX_PDEV_FW_STATS_PHY_ERR_TAG = 68, /* htt_rx_pdev_fw_stats_phy_err_tlv */ - HTT_STATS_TX_TID_DETAILS_V1_TAG = 69, /* htt_tx_tid_stats_v1_tlv */ - HTT_STATS_PDEV_CCA_1SEC_HIST_TAG = 70, /* htt_pdev_cca_stats_hist_tlv (for 1 sec interval stats) */ - HTT_STATS_PDEV_CCA_100MSEC_HIST_TAG = 71, /* htt_pdev_cca_stats_hist_tlv (for 100 msec interval stats) */ - HTT_STATS_PDEV_CCA_STAT_CUMULATIVE_TAG = 72, /* htt_pdev_stats_cca_stats_tlv */ - HTT_STATS_PDEV_CCA_COUNTERS_TAG = 73, /* htt_pdev_stats_cca_counters_tlv */ - HTT_STATS_TX_PDEV_MPDU_STATS_TAG = 74, /* htt_tx_pdev_mpdu_stats_tlv */ - HTT_STATS_PDEV_TWT_SESSIONS_TAG = 75, /* htt_pdev_stats_twt_sessions_tlv */ - HTT_STATS_PDEV_TWT_SESSION_TAG = 76, /* htt_pdev_stats_twt_session_tlv */ - HTT_STATS_RX_REFILL_RXDMA_ERR_TAG = 77, /* htt_rx_soc_fw_refill_ring_num_rxdma_err_tlv_v */ - HTT_STATS_RX_REFILL_REO_ERR_TAG = 78, /* htt_rx_soc_fw_refill_ring_num_reo_err_tlv_v */ - HTT_STATS_RX_REO_RESOURCE_STATS_TAG = 79, /* htt_rx_reo_debug_stats_tlv_v */ - HTT_STATS_TX_SOUNDING_STATS_TAG = 80, /* htt_tx_sounding_stats_tlv */ - HTT_STATS_TX_PDEV_TX_PPDU_STATS_TAG = 81, /* htt_tx_pdev_stats_tx_ppdu_stats_tlv_v */ - HTT_STATS_TX_PDEV_TRIED_MPDU_CNT_HIST_TAG = 82, /* htt_tx_pdev_stats_tried_mpdu_cnt_hist_tlv_v */ - HTT_STATS_TX_HWQ_TRIED_MPDU_CNT_HIST_TAG = 83, /* htt_tx_hwq_tried_mpdu_cnt_hist_tlv_v */ - HTT_STATS_TX_HWQ_TXOP_USED_CNT_HIST_TAG = 84, /* htt_tx_hwq_txop_used_cnt_hist_tlv_v */ - HTT_STATS_TX_DE_FW2WBM_RING_FULL_HIST_TAG = 85, /* htt_tx_de_fw2wbm_ring_full_hist_tlv */ - HTT_STATS_SCHED_TXQ_SCHED_ORDER_SU_TAG = 86, /* htt_sched_txq_sched_order_su_tlv */ - HTT_STATS_SCHED_TXQ_SCHED_INELIGIBILITY_TAG = 87, /* htt_sched_txq_sched_eligibility_tlv */ - HTT_STATS_PDEV_OBSS_PD_TAG = 88, /* htt_pdev_obss_pd_stats_tlv */ + HTT_STATS_TX_PDEV_CMN_TAG = 0, /* htt_tx_pdev_stats_cmn_tlv */ + HTT_STATS_TX_PDEV_UNDERRUN_TAG = 1, /* htt_tx_pdev_stats_urrn_tlv_v */ + HTT_STATS_TX_PDEV_SIFS_TAG = 2, /* htt_tx_pdev_stats_sifs_tlv_v */ + HTT_STATS_TX_PDEV_FLUSH_TAG = 3, /* htt_tx_pdev_stats_flush_tlv_v */ + HTT_STATS_TX_PDEV_PHY_ERR_TAG = 4, /* htt_tx_pdev_stats_phy_err_tlv_v */ + HTT_STATS_STRING_TAG = 5, /* htt_stats_string_tlv */ + HTT_STATS_TX_HWQ_CMN_TAG = 6, /* htt_tx_hwq_stats_cmn_tlv */ + HTT_STATS_TX_HWQ_DIFS_LATENCY_TAG = 7, /* htt_tx_hwq_difs_latency_stats_tlv_v */ + HTT_STATS_TX_HWQ_CMD_RESULT_TAG = 8, /* htt_tx_hwq_cmd_result_stats_tlv_v */ + HTT_STATS_TX_HWQ_CMD_STALL_TAG = 9, /* htt_tx_hwq_cmd_stall_stats_tlv_v */ + HTT_STATS_TX_HWQ_FES_STATUS_TAG = 10, /* htt_tx_hwq_fes_result_stats_tlv_v */ + HTT_STATS_TX_TQM_GEN_MPDU_TAG = 11, /* htt_tx_tqm_gen_mpdu_stats_tlv_v */ + HTT_STATS_TX_TQM_LIST_MPDU_TAG = 12, /* htt_tx_tqm_list_mpdu_stats_tlv_v */ + HTT_STATS_TX_TQM_LIST_MPDU_CNT_TAG = 13, /* htt_tx_tqm_list_mpdu_cnt_tlv_v */ + HTT_STATS_TX_TQM_CMN_TAG = 14, /* htt_tx_tqm_cmn_stats_tlv */ + HTT_STATS_TX_TQM_PDEV_TAG = 15, /* htt_tx_tqm_pdev_stats_tlv_v */ + HTT_STATS_TX_TQM_CMDQ_STATUS_TAG = 16, /* htt_tx_tqm_cmdq_status_tlv */ + HTT_STATS_TX_DE_EAPOL_PACKETS_TAG = 17, /* htt_tx_de_eapol_packets_stats_tlv */ + HTT_STATS_TX_DE_CLASSIFY_FAILED_TAG = 18, /* htt_tx_de_classify_failed_stats_tlv */ + HTT_STATS_TX_DE_CLASSIFY_STATS_TAG = 19, /* htt_tx_de_classify_stats_tlv */ + HTT_STATS_TX_DE_CLASSIFY_STATUS_TAG = 20, /* htt_tx_de_classify_status_stats_tlv */ + HTT_STATS_TX_DE_ENQUEUE_PACKETS_TAG = 21, /* htt_tx_de_enqueue_packets_stats_tlv */ + HTT_STATS_TX_DE_ENQUEUE_DISCARD_TAG = 22, /* htt_tx_de_enqueue_discard_stats_tlv */ + HTT_STATS_TX_DE_CMN_TAG = 23, /* htt_tx_de_cmn_stats_tlv */ + HTT_STATS_RING_IF_TAG = 24, /* htt_ring_if_stats_tlv */ + HTT_STATS_TX_PDEV_MU_MIMO_STATS_TAG = 25, /* htt_tx_pdev_mu_mimo_sch_stats_tlv */ + HTT_STATS_SFM_CMN_TAG = 26, /* htt_sfm_cmn_tlv */ + HTT_STATS_SRING_STATS_TAG = 27, /* htt_sring_stats_tlv */ + HTT_STATS_RX_PDEV_FW_STATS_TAG = 28, /* htt_rx_pdev_fw_stats_tlv */ + HTT_STATS_RX_PDEV_FW_RING_MPDU_ERR_TAG = 29, /* htt_rx_pdev_fw_ring_mpdu_err_tlv_v */ + HTT_STATS_RX_PDEV_FW_MPDU_DROP_TAG = 30, /* htt_rx_pdev_fw_mpdu_drop_tlv_v */ + HTT_STATS_RX_SOC_FW_STATS_TAG = 31, /* htt_rx_soc_fw_stats_tlv */ + HTT_STATS_RX_SOC_FW_REFILL_RING_EMPTY_TAG = 32, /* htt_rx_soc_fw_refill_ring_empty_tlv_v */ + HTT_STATS_RX_SOC_FW_REFILL_RING_NUM_REFILL_TAG = 33, /* htt_rx_soc_fw_refill_ring_num_refill_tlv_v */ + HTT_STATS_TX_PDEV_RATE_STATS_TAG = 34, /* htt_tx_pdev_rate_stats_tlv */ + HTT_STATS_RX_PDEV_RATE_STATS_TAG = 35, /* htt_rx_pdev_rate_stats_tlv */ + HTT_STATS_TX_PDEV_SCHEDULER_TXQ_STATS_TAG = 36, /* htt_tx_pdev_stats_sched_per_txq_tlv */ + HTT_STATS_TX_SCHED_CMN_TAG = 37, /* htt_stats_tx_sched_cmn_tlv */ + HTT_STATS_TX_PDEV_MUMIMO_MPDU_STATS_TAG = 38, /* htt_tx_pdev_mu_mimo_mpdu_stats_tlv */ + HTT_STATS_SCHED_TXQ_CMD_POSTED_TAG = 39, /* htt_sched_txq_cmd_posted_tlv_v */ + HTT_STATS_RING_IF_CMN_TAG = 40, /* htt_ring_if_cmn_tlv */ + HTT_STATS_SFM_CLIENT_USER_TAG = 41, /* htt_sfm_client_user_tlv_v */ + HTT_STATS_SFM_CLIENT_TAG = 42, /* htt_sfm_client_tlv */ + HTT_STATS_TX_TQM_ERROR_STATS_TAG = 43, /* htt_tx_tqm_error_stats_tlv */ + HTT_STATS_SCHED_TXQ_CMD_REAPED_TAG = 44, /* htt_sched_txq_cmd_reaped_tlv_v */ + HTT_STATS_SRING_CMN_TAG = 45, /* htt_sring_cmn_tlv */ + HTT_STATS_TX_SELFGEN_AC_ERR_STATS_TAG = 46, /* htt_tx_selfgen_ac_err_stats_tlv */ + HTT_STATS_TX_SELFGEN_CMN_STATS_TAG = 47, /* htt_tx_selfgen_cmn_stats_tlv */ + HTT_STATS_TX_SELFGEN_AC_STATS_TAG = 48, /* htt_tx_selfgen_ac_stats_tlv */ + HTT_STATS_TX_SELFGEN_AX_STATS_TAG = 49, /* htt_tx_selfgen_ax_stats_tlv */ + HTT_STATS_TX_SELFGEN_AX_ERR_STATS_TAG = 50, /* htt_tx_selfgen_ax_err_stats_tlv */ + HTT_STATS_TX_HWQ_MUMIMO_SCH_STATS_TAG = 51, /* htt_tx_hwq_mu_mimo_sch_stats_tlv */ + HTT_STATS_TX_HWQ_MUMIMO_MPDU_STATS_TAG = 52, /* htt_tx_hwq_mu_mimo_mpdu_stats_tlv */ + HTT_STATS_TX_HWQ_MUMIMO_CMN_STATS_TAG = 53, /* htt_tx_hwq_mu_mimo_cmn_stats_tlv */ + HTT_STATS_HW_INTR_MISC_TAG = 54, /* htt_hw_stats_intr_misc_tlv */ + HTT_STATS_HW_WD_TIMEOUT_TAG = 55, /* htt_hw_stats_wd_timeout_tlv */ + HTT_STATS_HW_PDEV_ERRS_TAG = 56, /* htt_hw_stats_pdev_errs_tlv */ + HTT_STATS_COUNTER_NAME_TAG = 57, /* htt_counter_tlv */ + HTT_STATS_TX_TID_DETAILS_TAG = 58, /* htt_tx_tid_stats_tlv */ + HTT_STATS_RX_TID_DETAILS_TAG = 59, /* htt_rx_tid_stats_tlv */ + HTT_STATS_PEER_STATS_CMN_TAG = 60, /* htt_peer_stats_cmn_tlv */ + HTT_STATS_PEER_DETAILS_TAG = 61, /* htt_peer_details_tlv */ + HTT_STATS_PEER_TX_RATE_STATS_TAG = 62, /* htt_tx_peer_rate_stats_tlv */ + HTT_STATS_PEER_RX_RATE_STATS_TAG = 63, /* htt_rx_peer_rate_stats_tlv */ + HTT_STATS_PEER_MSDU_FLOWQ_TAG = 64, /* htt_msdu_flow_stats_tlv */ + HTT_STATS_TX_DE_COMPL_STATS_TAG = 65, /* htt_tx_de_compl_stats_tlv */ + HTT_STATS_WHAL_TX_TAG = 66, /* htt_hw_stats_whal_tx_tlv */ + HTT_STATS_TX_PDEV_SIFS_HIST_TAG = 67, /* htt_tx_pdev_stats_sifs_hist_tlv_v */ + HTT_STATS_RX_PDEV_FW_STATS_PHY_ERR_TAG = 68, /* htt_rx_pdev_fw_stats_phy_err_tlv */ + HTT_STATS_TX_TID_DETAILS_V1_TAG = 69, /* htt_tx_tid_stats_v1_tlv */ + HTT_STATS_PDEV_CCA_1SEC_HIST_TAG = 70, /* htt_pdev_cca_stats_hist_tlv (for 1 sec interval stats) */ + HTT_STATS_PDEV_CCA_100MSEC_HIST_TAG = 71, /* htt_pdev_cca_stats_hist_tlv (for 100 msec interval stats) */ + HTT_STATS_PDEV_CCA_STAT_CUMULATIVE_TAG = 72, /* htt_pdev_stats_cca_stats_tlv */ + HTT_STATS_PDEV_CCA_COUNTERS_TAG = 73, /* htt_pdev_stats_cca_counters_tlv */ + HTT_STATS_TX_PDEV_MPDU_STATS_TAG = 74, /* htt_tx_pdev_mpdu_stats_tlv */ + HTT_STATS_PDEV_TWT_SESSIONS_TAG = 75, /* htt_pdev_stats_twt_sessions_tlv */ + HTT_STATS_PDEV_TWT_SESSION_TAG = 76, /* htt_pdev_stats_twt_session_tlv */ + HTT_STATS_RX_REFILL_RXDMA_ERR_TAG = 77, /* htt_rx_soc_fw_refill_ring_num_rxdma_err_tlv_v */ + HTT_STATS_RX_REFILL_REO_ERR_TAG = 78, /* htt_rx_soc_fw_refill_ring_num_reo_err_tlv_v */ + HTT_STATS_RX_REO_RESOURCE_STATS_TAG = 79, /* htt_rx_reo_debug_stats_tlv_v */ + HTT_STATS_TX_SOUNDING_STATS_TAG = 80, /* htt_tx_sounding_stats_tlv */ + HTT_STATS_TX_PDEV_TX_PPDU_STATS_TAG = 81, /* htt_tx_pdev_stats_tx_ppdu_stats_tlv_v */ + HTT_STATS_TX_PDEV_TRIED_MPDU_CNT_HIST_TAG = 82, /* htt_tx_pdev_stats_tried_mpdu_cnt_hist_tlv_v */ + HTT_STATS_TX_HWQ_TRIED_MPDU_CNT_HIST_TAG = 83, /* htt_tx_hwq_tried_mpdu_cnt_hist_tlv_v */ + HTT_STATS_TX_HWQ_TXOP_USED_CNT_HIST_TAG = 84, /* htt_tx_hwq_txop_used_cnt_hist_tlv_v */ + HTT_STATS_TX_DE_FW2WBM_RING_FULL_HIST_TAG = 85, /* htt_tx_de_fw2wbm_ring_full_hist_tlv */ + HTT_STATS_SCHED_TXQ_SCHED_ORDER_SU_TAG = 86, /* htt_sched_txq_sched_order_su_tlv */ + HTT_STATS_SCHED_TXQ_SCHED_INELIGIBILITY_TAG = 87, /* htt_sched_txq_sched_eligibility_tlv */ + HTT_STATS_PDEV_OBSS_PD_TAG = 88, /* htt_pdev_obss_pd_stats_tlv */ HTT_STATS_MAX_TAG, } htt_tlv_tag_t; - -#define HTT_STATS_TLV_TAG_M 0x00000fff -#define HTT_STATS_TLV_TAG_S 0 -#define HTT_STATS_TLV_LENGTH_M 0x00fff000 -#define HTT_STATS_TLV_LENGTH_S 12 +#define HTT_STATS_TLV_TAG_M 0x00000fff +#define HTT_STATS_TLV_TAG_S 0 +#define HTT_STATS_TLV_LENGTH_M 0x00fff000 +#define HTT_STATS_TLV_LENGTH_S 12 #define HTT_STATS_TLV_TAG_GET(_var) \ (((_var) & HTT_STATS_TLV_TAG_M) >> \ - HTT_STATS_TLV_TAG_S) + HTT_STATS_TLV_TAG_S) #define HTT_STATS_TLV_TAG_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_STATS_TLV_TAG, _val); \ - ((_var) |= ((_val) << HTT_STATS_TLV_TAG_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_TLV_TAG, _val); \ + ((_var) |= ((_val) << HTT_STATS_TLV_TAG_S)); \ + } while (0) #define HTT_STATS_TLV_LENGTH_GET(_var) \ (((_var) & HTT_STATS_TLV_LENGTH_M) >> \ - HTT_STATS_TLV_LENGTH_S) + HTT_STATS_TLV_LENGTH_S) #define HTT_STATS_TLV_LENGTH_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_STATS_TLV_LENGTH, _val); \ - ((_var) |= ((_val) << HTT_STATS_TLV_LENGTH_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_TLV_LENGTH, _val); \ + ((_var) |= ((_val) << HTT_STATS_TLV_LENGTH_S)); \ + } while (0) typedef struct { union { @@ -407,59 +404,57 @@ typedef struct { * the tag and length bitfields in an endian-neutral manner. */ struct { - A_UINT32 tag: 12, /* BIT [11 : 0] */ - length: 12, /* BIT [23 : 12] */ - reserved: 8; /* BIT [31 : 24] */ + A_UINT32 tag : 12, /* BIT [11 : 0] */ + length : 12, /* BIT [23 : 12] */ + reserved : 8; /* BIT [31 : 24] */ }; }; } htt_tlv_hdr_t; -#define HTT_STATS_MAX_STRING_SZ32 4 -#define HTT_STATS_MACID_INVALID 0xff -#define HTT_TX_HWQ_MAX_DIFS_LATENCY_BINS 10 -#define HTT_TX_HWQ_MAX_CMD_RESULT_STATS 13 -#define HTT_TX_HWQ_MAX_CMD_STALL_STATS 5 -#define HTT_TX_HWQ_MAX_FES_RESULT_STATS 10 +#define HTT_STATS_MAX_STRING_SZ32 4 +#define HTT_STATS_MACID_INVALID 0xff +#define HTT_TX_HWQ_MAX_DIFS_LATENCY_BINS 10 +#define HTT_TX_HWQ_MAX_CMD_RESULT_STATS 13 +#define HTT_TX_HWQ_MAX_CMD_STALL_STATS 5 +#define HTT_TX_HWQ_MAX_FES_RESULT_STATS 10 typedef enum { - HTT_STATS_TX_PDEV_NO_DATA_UNDERRUN = 0, + HTT_STATS_TX_PDEV_NO_DATA_UNDERRUN = 0, HTT_STATS_TX_PDEV_DATA_UNDERRUN_BETWEEN_MPDU = 1, - HTT_STATS_TX_PDEV_DATA_UNDERRUN_WITHIN_MPDU = 2, - HTT_TX_PDEV_MAX_URRN_STATS = 3, + HTT_STATS_TX_PDEV_DATA_UNDERRUN_WITHIN_MPDU = 2, + HTT_TX_PDEV_MAX_URRN_STATS = 3, } htt_tx_pdev_underrun_enum; -#define HTT_TX_PDEV_MAX_FLUSH_REASON_STATS 71 -#define HTT_TX_PDEV_MAX_SIFS_BURST_STATS 9 -#define HTT_TX_PDEV_MAX_SIFS_BURST_HIST_STATS 10 -#define HTT_TX_PDEV_MAX_PHY_ERR_STATS 18 -#define HTT_TX_PDEV_SCHED_TX_MODE_MAX 4 -#define HTT_TX_PDEV_NUM_SCHED_ORDER_LOG 20 +#define HTT_TX_PDEV_MAX_FLUSH_REASON_STATS 71 +#define HTT_TX_PDEV_MAX_SIFS_BURST_STATS 9 +#define HTT_TX_PDEV_MAX_SIFS_BURST_HIST_STATS 10 +#define HTT_TX_PDEV_MAX_PHY_ERR_STATS 18 +#define HTT_TX_PDEV_SCHED_TX_MODE_MAX 4 +#define HTT_TX_PDEV_NUM_SCHED_ORDER_LOG 20 -#define HTT_RX_STATS_REFILL_MAX_RING 4 -#define HTT_RX_STATS_RXDMA_MAX_ERR 16 -#define HTT_RX_STATS_FW_DROP_REASON_MAX 16 +#define HTT_RX_STATS_REFILL_MAX_RING 4 +#define HTT_RX_STATS_RXDMA_MAX_ERR 16 +#define HTT_RX_STATS_FW_DROP_REASON_MAX 16 /* Bytes stored in little endian order */ /* Length should be multiple of DWORD */ typedef struct { htt_tlv_hdr_t tlv_hdr; - A_UINT32 data[1]; /* Can be variable length */ + A_UINT32 data[1]; /* Can be variable length */ } htt_stats_string_tlv; - -#define HTT_TX_PDEV_STATS_CMN_MAC_ID_M 0x000000ff -#define HTT_TX_PDEV_STATS_CMN_MAC_ID_S 0 +#define HTT_TX_PDEV_STATS_CMN_MAC_ID_M 0x000000ff +#define HTT_TX_PDEV_STATS_CMN_MAC_ID_S 0 #define HTT_TX_PDEV_STATS_CMN_MAC_ID_GET(_var) \ (((_var) & HTT_TX_PDEV_STATS_CMN_MAC_ID_M) >> \ - HTT_TX_PDEV_STATS_CMN_MAC_ID_S) + HTT_TX_PDEV_STATS_CMN_MAC_ID_S) #define HTT_TX_PDEV_STATS_CMN_MAC_ID_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_TX_PDEV_STATS_CMN_MAC_ID, _val); \ - ((_var) |= ((_val) << HTT_TX_PDEV_STATS_CMN_MAC_ID_S)); \ - } while (0) - + do { \ + HTT_CHECK_SET_VAL(HTT_TX_PDEV_STATS_CMN_MAC_ID, _val); \ + ((_var) |= ((_val) << HTT_TX_PDEV_STATS_CMN_MAC_ID_S)); \ + } while (0) /* == TX PDEV STATS == */ typedef struct { @@ -575,50 +570,52 @@ typedef struct { A_UINT32 tx_active_dur_us_low; A_UINT32 tx_active_dur_us_high; + /* Number of MPDUs dropped after max retries */ + A_UINT32 remove_mpdus_max_retries; } htt_tx_pdev_stats_cmn_tlv; #define HTT_TX_PDEV_STATS_URRN_TLV_SZ(_num_elems) (sizeof(A_UINT32) * (_num_elems)) /* NOTE: Variable length TLV, use length spec to infer array size */ typedef struct { htt_tlv_hdr_t tlv_hdr; - A_UINT32 urrn_stats[1]; /* HTT_TX_PDEV_MAX_URRN_STATS */ + A_UINT32 urrn_stats[1]; /* HTT_TX_PDEV_MAX_URRN_STATS */ } htt_tx_pdev_stats_urrn_tlv_v; #define HTT_TX_PDEV_STATS_FLUSH_TLV_SZ(_num_elems) (sizeof(A_UINT32) * (_num_elems)) /* NOTE: Variable length TLV, use length spec to infer array size */ typedef struct { htt_tlv_hdr_t tlv_hdr; - A_UINT32 flush_errs[1]; /* HTT_TX_PDEV_MAX_FLUSH_REASON_STATS */ + A_UINT32 flush_errs[1]; /* HTT_TX_PDEV_MAX_FLUSH_REASON_STATS */ } htt_tx_pdev_stats_flush_tlv_v; #define HTT_TX_PDEV_STATS_SIFS_TLV_SZ(_num_elems) (sizeof(A_UINT32) * (_num_elems)) /* NOTE: Variable length TLV, use length spec to infer array size */ typedef struct { htt_tlv_hdr_t tlv_hdr; - A_UINT32 sifs_status[1]; /* HTT_TX_PDEV_MAX_SIFS_BURST_STATS */ + A_UINT32 sifs_status[1]; /* HTT_TX_PDEV_MAX_SIFS_BURST_STATS */ } htt_tx_pdev_stats_sifs_tlv_v; #define HTT_TX_PDEV_STATS_PHY_ERR_TLV_SZ(_num_elems) (sizeof(A_UINT32) * (_num_elems)) /* NOTE: Variable length TLV, use length spec to infer array size */ typedef struct { htt_tlv_hdr_t tlv_hdr; - A_UINT32 phy_errs[1]; /* HTT_TX_PDEV_MAX_PHY_ERR_STATS */ + A_UINT32 phy_errs[1]; /* HTT_TX_PDEV_MAX_PHY_ERR_STATS */ } htt_tx_pdev_stats_phy_err_tlv_v; #define HTT_TX_PDEV_STATS_SIFS_HIST_TLV_SZ(_num_elems) (sizeof(A_UINT32) * (_num_elems)) /* NOTE: Variable length TLV, use length spec to infer array size */ typedef struct { htt_tlv_hdr_t tlv_hdr; - A_UINT32 sifs_hist_status[1]; /* HTT_TX_PDEV_SIFS_BURST_HIST_STATS */ + A_UINT32 sifs_hist_status[1]; /* HTT_TX_PDEV_SIFS_BURST_HIST_STATS */ } htt_tx_pdev_stats_sifs_hist_tlv_v; typedef struct { htt_tlv_hdr_t tlv_hdr; - A_UINT32 num_data_ppdus_legacy_su; - A_UINT32 num_data_ppdus_ac_su; - A_UINT32 num_data_ppdus_ax_su; - A_UINT32 num_data_ppdus_ac_su_txbf; - A_UINT32 num_data_ppdus_ax_su_txbf; + A_UINT32 num_data_ppdus_legacy_su; + A_UINT32 num_data_ppdus_ac_su; + A_UINT32 num_data_ppdus_ax_su; + A_UINT32 num_data_ppdus_ac_su_txbf; + A_UINT32 num_data_ppdus_ax_su_txbf; } htt_tx_pdev_stats_tx_ppdu_stats_tlv_v; #define HTT_TX_PDEV_STATS_TRIED_MPDU_CNT_HIST_TLV_SZ(_num_elems) (sizeof(A_UINT32) * (_num_elems)) @@ -637,8 +634,8 @@ typedef struct { */ typedef struct { htt_tlv_hdr_t tlv_hdr; - A_UINT32 hist_bin_size; - A_UINT32 tried_mpdu_cnt_hist[1]; /* HTT_TX_PDEV_TRIED_MPDU_CNT_HIST */ + A_UINT32 hist_bin_size; + A_UINT32 tried_mpdu_cnt_hist[1]; /* HTT_TX_PDEV_TRIED_MPDU_CNT_HIST */ } htt_tx_pdev_stats_tried_mpdu_cnt_hist_tlv_v; /* STATS_TYPE: HTT_DBG_EXT_STATS_PDEV_TX @@ -657,13 +654,13 @@ typedef struct { * Instead, use the constituent TLV structures to fill/parse. */ typedef struct _htt_tx_pdev_stats { - htt_tx_pdev_stats_cmn_tlv cmn_tlv; - htt_tx_pdev_stats_urrn_tlv_v underrun_tlv; - htt_tx_pdev_stats_sifs_tlv_v sifs_tlv; - htt_tx_pdev_stats_flush_tlv_v flush_tlv; - htt_tx_pdev_stats_phy_err_tlv_v phy_err_tlv; - htt_tx_pdev_stats_sifs_hist_tlv_v sifs_hist_tlv; - htt_tx_pdev_stats_tx_ppdu_stats_tlv_v tx_su_tlv; + htt_tx_pdev_stats_cmn_tlv cmn_tlv; + htt_tx_pdev_stats_urrn_tlv_v underrun_tlv; + htt_tx_pdev_stats_sifs_tlv_v sifs_tlv; + htt_tx_pdev_stats_flush_tlv_v flush_tlv; + htt_tx_pdev_stats_phy_err_tlv_v phy_err_tlv; + htt_tx_pdev_stats_sifs_hist_tlv_v sifs_hist_tlv; + htt_tx_pdev_stats_tx_ppdu_stats_tlv_v tx_su_tlv; htt_tx_pdev_stats_tried_mpdu_cnt_hist_tlv_v tried_mpdu_cnt_hist_tlv; } htt_tx_pdev_stats_t; @@ -674,7 +671,7 @@ typedef struct _htt_tx_pdev_stats { typedef struct { htt_tlv_hdr_t tlv_hdr; /* Stored as little endian */ - A_UINT8 hw_intr_name[HTT_STATS_MAX_HW_INTR_NAME_LEN]; + A_UINT8 hw_intr_name[HTT_STATS_MAX_HW_INTR_NAME_LEN]; A_UINT32 mask; A_UINT32 count; } htt_hw_stats_intr_misc_tlv; @@ -683,24 +680,22 @@ typedef struct { typedef struct { htt_tlv_hdr_t tlv_hdr; /* Stored as little endian */ - A_UINT8 hw_module_name[HTT_STATS_MAX_HW_MODULE_NAME_LEN]; + A_UINT8 hw_module_name[HTT_STATS_MAX_HW_MODULE_NAME_LEN]; A_UINT32 count; } htt_hw_stats_wd_timeout_tlv; - -#define HTT_HW_STATS_PDEV_ERRS_MAC_ID_M 0x000000ff -#define HTT_HW_STATS_PDEV_ERRS_MAC_ID_S 0 +#define HTT_HW_STATS_PDEV_ERRS_MAC_ID_M 0x000000ff +#define HTT_HW_STATS_PDEV_ERRS_MAC_ID_S 0 #define HTT_HW_STATS_PDEV_ERRS_MAC_ID_GET(_var) \ (((_var) & HTT_HW_STATS_PDEV_ERRS_MAC_ID_M) >> \ - HTT_HW_STATS_PDEV_ERRS_MAC_ID_S) + HTT_HW_STATS_PDEV_ERRS_MAC_ID_S) #define HTT_HW_STATS_PDEV_ERRS_MAC_ID_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_HW_STATS_PDEV_ERRS_MAC_ID, _val); \ - ((_var) |= ((_val) << HTT_HW_STATS_PDEV_ERRS_MAC_ID_S)); \ - } while (0) - + do { \ + HTT_CHECK_SET_VAL(HTT_HW_STATS_PDEV_ERRS_MAC_ID, _val); \ + ((_var) |= ((_val) << HTT_HW_STATS_PDEV_ERRS_MAC_ID_S)); \ + } while (0) typedef struct { htt_tlv_hdr_t tlv_hdr; @@ -708,17 +703,31 @@ typedef struct { /* BIT [ 7 : 0] :- mac_id * BIT [31 : 8] :- reserved */ - A_UINT32 mac_id__word; - A_UINT32 tx_abort; - A_UINT32 tx_abort_fail_count; - A_UINT32 rx_abort; - A_UINT32 rx_abort_fail_count; - A_UINT32 warm_reset; - A_UINT32 cold_reset; - A_UINT32 tx_flush; - A_UINT32 tx_glb_reset; - A_UINT32 tx_txq_reset; - A_UINT32 rx_timeout_reset; + A_UINT32 mac_id__word; + A_UINT32 tx_abort; + A_UINT32 tx_abort_fail_count; + A_UINT32 rx_abort; + A_UINT32 rx_abort_fail_count; + A_UINT32 warm_reset; + A_UINT32 cold_reset; + A_UINT32 tx_flush; + A_UINT32 tx_glb_reset; + A_UINT32 tx_txq_reset; + A_UINT32 rx_timeout_reset; + A_UINT32 mac_cold_reset_restore_cal; + A_UINT32 mac_cold_reset; + A_UINT32 mac_warm_reset; + A_UINT32 mac_only_reset; + A_UINT32 phy_warm_reset; + A_UINT32 phy_warm_reset_ucode_trig; + A_UINT32 mac_warm_reset_restore_cal; + A_UINT32 mac_sfm_reset; + A_UINT32 phy_warm_reset_m3_ssr; + A_UINT32 phy_warm_reset_reason_phy_m3; + A_UINT32 phy_warm_reset_reason_tx_hw_stuck; + A_UINT32 phy_warm_reset_reason_num_cca_rx_frame_stuck; + A_UINT32 phy_warm_reset_reason_wal_rx_recovery_rst_rx_busy; + A_UINT32 phy_warm_reset_reason_wal_rx_recovery_rst_mac_hang; } htt_hw_stats_pdev_errs_tlv; typedef struct { @@ -753,53 +762,54 @@ typedef struct { * Instead, use the constituent TLV structures to fill/parse. */ typedef struct _htt_pdev_err_stats { - htt_hw_stats_pdev_errs_tlv pdev_errs; - htt_hw_stats_intr_misc_tlv misc_stats[1]; + htt_hw_stats_pdev_errs_tlv pdev_errs; + htt_hw_stats_intr_misc_tlv misc_stats[1]; htt_hw_stats_wd_timeout_tlv wd_timeout[1]; - htt_hw_stats_whal_tx_tlv whal_tx_stats; + htt_hw_stats_whal_tx_tlv whal_tx_stats; } htt_hw_err_stats_t; /* ============ PEER STATS ============ */ -#define HTT_MSDU_FLOW_STATS_TX_FLOW_NUM_M 0x0000ffff -#define HTT_MSDU_FLOW_STATS_TX_FLOW_NUM_S 0 -#define HTT_MSDU_FLOW_STATS_TID_NUM_M 0x000f0000 -#define HTT_MSDU_FLOW_STATS_TID_NUM_S 16 -#define HTT_MSDU_FLOW_STATS_DROP_M 0x00100000 -#define HTT_MSDU_FLOW_STATS_DROP_S 20 +#define HTT_MSDU_FLOW_STATS_TX_FLOW_NUM_M 0x0000ffff +#define HTT_MSDU_FLOW_STATS_TX_FLOW_NUM_S 0 +#define HTT_MSDU_FLOW_STATS_TID_NUM_M 0x000f0000 +#define HTT_MSDU_FLOW_STATS_TID_NUM_S 16 +#define HTT_MSDU_FLOW_STATS_DROP_M 0x00100000 +#define HTT_MSDU_FLOW_STATS_DROP_S 20 #define HTT_MSDU_FLOW_STATS_TX_FLOW_NUM_GET(_var) \ (((_var) & HTT_MSDU_FLOW_STATS_TX_FLOW_NUM_M) >> \ - HTT_MSDU_FLOW_STATS_TX_FLOW_NUM_S) + HTT_MSDU_FLOW_STATS_TX_FLOW_NUM_S) #define HTT_MSDU_FLOW_STATS_TX_FLOW_NUM_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_MSDU_FLOW_STATS_TX_FLOW_NUM, _val); \ - ((_var) |= ((_val) << HTT_MSDU_FLOW_STATS_TX_FLOW_NUM_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_MSDU_FLOW_STATS_TX_FLOW_NUM, _val); \ + ((_var) |= ((_val) << HTT_MSDU_FLOW_STATS_TX_FLOW_NUM_S)); \ + } while (0) #define HTT_MSDU_FLOW_STATS_TID_NUM_GET(_var) \ (((_var) & HTT_MSDU_FLOW_STATS_TID_NUM_M) >> \ - HTT_MSDU_FLOW_STATS_TID_NUM_S) + HTT_MSDU_FLOW_STATS_TID_NUM_S) #define HTT_MSDU_FLOW_STATS_TID_NUM_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_MSDU_FLOW_STATS_TID_NUM, _val); \ - ((_var) |= ((_val) << HTT_MSDU_FLOW_STATS_TID_NUM_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_MSDU_FLOW_STATS_TID_NUM, _val); \ + ((_var) |= ((_val) << HTT_MSDU_FLOW_STATS_TID_NUM_S)); \ + } while (0) #define HTT_MSDU_FLOW_STATS_DROP_GET(_var) \ (((_var) & HTT_MSDU_FLOW_STATS_DROP_M) >> \ - HTT_MSDU_FLOW_STATS_DROP_S) + HTT_MSDU_FLOW_STATS_DROP_S) #define HTT_MSDU_FLOW_STATS_DROP_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_MSDU_FLOW_STATS_DROP, _val); \ - ((_var) |= ((_val) << HTT_MSDU_FLOW_STATS_DROP_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_MSDU_FLOW_STATS_DROP, _val); \ + ((_var) |= ((_val) << HTT_MSDU_FLOW_STATS_DROP_S)); \ + } while (0) typedef struct _htt_msdu_flow_stats_tlv { htt_tlv_hdr_t tlv_hdr; + A_UINT32 last_update_timestamp; A_UINT32 last_add_timestamp; A_UINT32 last_remove_timestamp; @@ -824,65 +834,63 @@ typedef struct _htt_msdu_flow_stats_tlv { #define MAX_HTT_TID_NAME 8 /* DWORD sw_peer_id__tid_num */ -#define HTT_TX_TID_STATS_SW_PEER_ID_M 0x0000ffff -#define HTT_TX_TID_STATS_SW_PEER_ID_S 0 -#define HTT_TX_TID_STATS_TID_NUM_M 0xffff0000 -#define HTT_TX_TID_STATS_TID_NUM_S 16 +#define HTT_TX_TID_STATS_SW_PEER_ID_M 0x0000ffff +#define HTT_TX_TID_STATS_SW_PEER_ID_S 0 +#define HTT_TX_TID_STATS_TID_NUM_M 0xffff0000 +#define HTT_TX_TID_STATS_TID_NUM_S 16 #define HTT_TX_TID_STATS_SW_PEER_ID_GET(_var) \ (((_var) & HTT_TX_TID_STATS_SW_PEER_ID_M) >> \ - HTT_TX_TID_STATS_SW_PEER_ID_S) + HTT_TX_TID_STATS_SW_PEER_ID_S) #define HTT_TX_TID_STATS_SW_PEER_ID_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_TX_TID_STATS_SW_PEER_ID, _val); \ - ((_var) |= ((_val) << HTT_TX_TID_STATS_SW_PEER_ID_S)); \ - } while (0) - + do { \ + HTT_CHECK_SET_VAL(HTT_TX_TID_STATS_SW_PEER_ID, _val); \ + ((_var) |= ((_val) << HTT_TX_TID_STATS_SW_PEER_ID_S)); \ + } while (0) #define HTT_TX_TID_STATS_TID_NUM_GET(_var) \ (((_var) & HTT_TX_TID_STATS_TID_NUM_M) >> \ - HTT_TX_TID_STATS_TID_NUM_S) + HTT_TX_TID_STATS_TID_NUM_S) #define HTT_TX_TID_STATS_TID_NUM_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_TX_TID_STATS_TID_NUM, _val); \ - ((_var) |= ((_val) << HTT_TX_TID_STATS_TID_NUM_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_TX_TID_STATS_TID_NUM, _val); \ + ((_var) |= ((_val) << HTT_TX_TID_STATS_TID_NUM_S)); \ + } while (0) /* DWORD num_sched_pending__num_ppdu_in_hwq */ -#define HTT_TX_TID_STATS_NUM_SCHED_PENDING_M 0x000000ff -#define HTT_TX_TID_STATS_NUM_SCHED_PENDING_S 0 -#define HTT_TX_TID_STATS_NUM_PPDU_IN_HWQ_M 0x0000ff00 -#define HTT_TX_TID_STATS_NUM_PPDU_IN_HWQ_S 8 +#define HTT_TX_TID_STATS_NUM_SCHED_PENDING_M 0x000000ff +#define HTT_TX_TID_STATS_NUM_SCHED_PENDING_S 0 +#define HTT_TX_TID_STATS_NUM_PPDU_IN_HWQ_M 0x0000ff00 +#define HTT_TX_TID_STATS_NUM_PPDU_IN_HWQ_S 8 #define HTT_TX_TID_STATS_NUM_SCHED_PENDING_GET(_var) \ (((_var) & HTT_TX_TID_STATS_NUM_SCHED_PENDING_M) >> \ - HTT_TX_TID_STATS_NUM_SCHED_PENDING_S) + HTT_TX_TID_STATS_NUM_SCHED_PENDING_S) #define HTT_TX_TID_STATS_NUM_SCHED_PENDING_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_TX_TID_STATS_NUM_SCHED_PENDING, _val); \ - ((_var) |= ((_val) << HTT_TX_TID_STATS_NUM_SCHED_PENDING_S)); \ - } while (0) - + do { \ + HTT_CHECK_SET_VAL(HTT_TX_TID_STATS_NUM_SCHED_PENDING, _val); \ + ((_var) |= ((_val) << HTT_TX_TID_STATS_NUM_SCHED_PENDING_S)); \ + } while (0) #define HTT_TX_TID_STATS_NUM_PPDU_IN_HWQ_GET(_var) \ (((_var) & HTT_TX_TID_STATS_NUM_PPDU_IN_HWQ_M) >> \ - HTT_TX_TID_STATS_NUM_PPDU_IN_HWQ_S) + HTT_TX_TID_STATS_NUM_PPDU_IN_HWQ_S) #define HTT_TX_TID_STATS_NUM_PPDU_IN_HWQ_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_TX_TID_STATS_NUM_PPDU_IN_HWQ, _val); \ - ((_var) |= ((_val) << HTT_TX_TID_STATS_NUM_PPDU_IN_HWQ_S)); \ - } while (0) - + do { \ + HTT_CHECK_SET_VAL(HTT_TX_TID_STATS_NUM_PPDU_IN_HWQ, _val); \ + ((_var) |= ((_val) << HTT_TX_TID_STATS_NUM_PPDU_IN_HWQ_S)); \ + } while (0) /* Tidq stats */ typedef struct _htt_tx_tid_stats_tlv { htt_tlv_hdr_t tlv_hdr; + /* Stored as little endian */ - A_UINT8 tid_name[MAX_HTT_TID_NAME]; + A_UINT8 tid_name[MAX_HTT_TID_NAME]; /* BIT [15 : 0] :- sw_peer_id * BIT [31 : 16] :- tid_num */ @@ -914,7 +922,7 @@ typedef struct _htt_tx_tid_stats_tlv { typedef struct _htt_tx_tid_stats_v1_tlv { htt_tlv_hdr_t tlv_hdr; /* Stored as little endian */ - A_UINT8 tid_name[MAX_HTT_TID_NAME]; + A_UINT8 tid_name[MAX_HTT_TID_NAME]; /* BIT [15 : 0] :- sw_peer_id * BIT [31 : 16] :- tid_num */ @@ -947,34 +955,34 @@ typedef struct _htt_tx_tid_stats_v1_tlv { A_UINT32 sendn_frms_allowed; } htt_tx_tid_stats_v1_tlv; -#define HTT_RX_TID_STATS_SW_PEER_ID_M 0x0000ffff -#define HTT_RX_TID_STATS_SW_PEER_ID_S 0 -#define HTT_RX_TID_STATS_TID_NUM_M 0xffff0000 -#define HTT_RX_TID_STATS_TID_NUM_S 16 +#define HTT_RX_TID_STATS_SW_PEER_ID_M 0x0000ffff +#define HTT_RX_TID_STATS_SW_PEER_ID_S 0 +#define HTT_RX_TID_STATS_TID_NUM_M 0xffff0000 +#define HTT_RX_TID_STATS_TID_NUM_S 16 #define HTT_RX_TID_STATS_SW_PEER_ID_GET(_var) \ (((_var) & HTT_RX_TID_STATS_SW_PEER_ID_M) >> \ - HTT_RX_TID_STATS_SW_PEER_ID_S) + HTT_RX_TID_STATS_SW_PEER_ID_S) #define HTT_RX_TID_STATS_SW_PEER_ID_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_RX_TID_STATS_SW_PEER_ID, _val); \ - ((_var) |= ((_val) << HTT_RX_TID_STATS_SW_PEER_ID_S)); \ - } while (0) - + do { \ + HTT_CHECK_SET_VAL(HTT_RX_TID_STATS_SW_PEER_ID, _val); \ + ((_var) |= ((_val) << HTT_RX_TID_STATS_SW_PEER_ID_S)); \ + } while (0) #define HTT_RX_TID_STATS_TID_NUM_GET(_var) \ (((_var) & HTT_RX_TID_STATS_TID_NUM_M) >> \ - HTT_RX_TID_STATS_TID_NUM_S) + HTT_RX_TID_STATS_TID_NUM_S) #define HTT_RX_TID_STATS_TID_NUM_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_RX_TID_STATS_TID_NUM, _val); \ - ((_var) |= ((_val) << HTT_RX_TID_STATS_TID_NUM_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_RX_TID_STATS_TID_NUM, _val); \ + ((_var) |= ((_val) << HTT_RX_TID_STATS_TID_NUM_S)); \ + } while (0) typedef struct _htt_rx_tid_stats_tlv { htt_tlv_hdr_t tlv_hdr; + /* BIT [15 : 0] : sw_peer_id * BIT [31 : 16] : tid_num */ @@ -982,7 +990,7 @@ typedef struct _htt_rx_tid_stats_tlv { /* Stored as little endian */ A_UINT8 tid_name[MAX_HTT_TID_NAME]; /* dup_in_reorder not collected per tid for now, - as there is no wal_peer back ptr in data rx peer. */ + as there is no wal_peer back ptr in data rx peer. */ A_UINT32 dup_in_reorder; A_UINT32 dup_past_outside_window; A_UINT32 dup_past_within_window; @@ -996,11 +1004,10 @@ typedef struct _htt_rx_tid_stats_tlv { typedef struct { htt_tlv_hdr_t tlv_hdr; /* Stored as little endian */ - A_UINT8 counter_name[HTT_MAX_COUNTER_NAME]; - A_UINT32 count; + A_UINT8 counter_name[HTT_MAX_COUNTER_NAME]; + A_UINT32 count; } htt_counter_tlv; - typedef struct { htt_tlv_hdr_t tlv_hdr; /* Number of rx ppdu. */ @@ -1038,6 +1045,8 @@ typedef struct { * If the peer is currently active, this inactive_time will be 0x0. */ A_UINT32 inactive_time; + /* Number of MPDUs dropped after max retries */ + A_UINT32 remove_mpdus_max_retries; } htt_peer_stats_cmn_tlv; typedef struct { @@ -1049,10 +1058,10 @@ typedef struct { * BIT [15 : 8] :- pdev_id * BIT [31 : 16] :- ast_indx */ - A_UINT32 vdev_pdev_ast_idx; + A_UINT32 vdev_pdev_ast_idx; htt_mac_addr mac_addr; - A_UINT32 peer_flags; - A_UINT32 qpeer_flags; + A_UINT32 peer_flags; + A_UINT32 qpeer_flags; } htt_peer_details_tlv; typedef enum { @@ -1067,12 +1076,12 @@ typedef enum { HTT_STATS_PREAM_COUNT, } HTT_STATS_PREAM_TYPE; -#define HTT_TX_PEER_STATS_NUM_MCS_COUNTERS 12 -#define HTT_TX_PEER_STATS_NUM_GI_COUNTERS 4 -#define HTT_TX_PEER_STATS_NUM_DCM_COUNTERS 5 -#define HTT_TX_PEER_STATS_NUM_BW_COUNTERS 4 -#define HTT_TX_PEER_STATS_NUM_SPATIAL_STREAMS 8 -#define HTT_TX_PEER_STATS_NUM_PREAMBLE_TYPES HTT_STATS_PREAM_COUNT +#define HTT_TX_PEER_STATS_NUM_MCS_COUNTERS 12 +#define HTT_TX_PEER_STATS_NUM_GI_COUNTERS 4 +#define HTT_TX_PEER_STATS_NUM_DCM_COUNTERS 5 +#define HTT_TX_PEER_STATS_NUM_BW_COUNTERS 4 +#define HTT_TX_PEER_STATS_NUM_SPATIAL_STREAMS 8 +#define HTT_TX_PEER_STATS_NUM_PREAMBLE_TYPES HTT_STATS_PREAM_COUNT typedef struct _htt_tx_peer_rate_stats_tlv { htt_tlv_hdr_t tlv_hdr; @@ -1088,7 +1097,7 @@ typedef struct _htt_tx_peer_rate_stats_tlv { A_UINT32 tx_su_mcs[HTT_TX_PEER_STATS_NUM_MCS_COUNTERS]; A_UINT32 tx_mu_mcs[HTT_TX_PEER_STATS_NUM_MCS_COUNTERS]; A_UINT32 tx_nss[HTT_TX_PEER_STATS_NUM_SPATIAL_STREAMS]; /* element 0,1, ...7 -> NSS 1,2, ...8 */ - A_UINT32 tx_bw[HTT_TX_PEER_STATS_NUM_BW_COUNTERS]; /* element 0: 20 MHz, 1: 40 MHz, 2: 80 MHz, 3: 160 and 80+80 MHz */ + A_UINT32 tx_bw[HTT_TX_PEER_STATS_NUM_BW_COUNTERS]; /* element 0: 20 MHz, 1: 40 MHz, 2: 80 MHz, 3: 160 and 80+80 MHz */ A_UINT32 tx_stbc[HTT_TX_PEER_STATS_NUM_MCS_COUNTERS]; A_UINT32 tx_pream[HTT_TX_PEER_STATS_NUM_PREAMBLE_TYPES]; @@ -1097,19 +1106,18 @@ typedef struct _htt_tx_peer_rate_stats_tlv { /* Counters to track packets in dcm mcs (MCS 0, 1, 3, 4) */ A_UINT32 tx_dcm[HTT_TX_PEER_STATS_NUM_DCM_COUNTERS]; - } htt_tx_peer_rate_stats_tlv; -#define HTT_RX_PEER_STATS_NUM_MCS_COUNTERS 12 -#define HTT_RX_PEER_STATS_NUM_GI_COUNTERS 4 -#define HTT_RX_PEER_STATS_NUM_DCM_COUNTERS 5 -#define HTT_RX_PEER_STATS_NUM_BW_COUNTERS 4 -#define HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS 8 -#define HTT_RX_PEER_STATS_NUM_PREAMBLE_TYPES HTT_STATS_PREAM_COUNT +#define HTT_RX_PEER_STATS_NUM_MCS_COUNTERS 12 +#define HTT_RX_PEER_STATS_NUM_GI_COUNTERS 4 +#define HTT_RX_PEER_STATS_NUM_DCM_COUNTERS 5 +#define HTT_RX_PEER_STATS_NUM_BW_COUNTERS 4 +#define HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS 8 +#define HTT_RX_PEER_STATS_NUM_PREAMBLE_TYPES HTT_STATS_PREAM_COUNT typedef struct _htt_rx_peer_rate_stats_tlv { htt_tlv_hdr_t tlv_hdr; - A_UINT32 nsts; + A_UINT32 nsts; /* Number of rx ldpc packets */ A_UINT32 rx_ldpc; @@ -1125,16 +1133,16 @@ typedef struct _htt_rx_peer_rate_stats_tlv { A_UINT32 rx_stbc[HTT_RX_PEER_STATS_NUM_MCS_COUNTERS]; A_UINT32 rx_bw[HTT_RX_PEER_STATS_NUM_BW_COUNTERS]; /* element 0: 20 MHz, 1: 40 MHz, 2: 80 MHz, 3: 160 and 80+80 MHz */ A_UINT32 rx_pream[HTT_RX_PEER_STATS_NUM_PREAMBLE_TYPES]; - A_UINT8 rssi_chain[HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS][HTT_RX_PEER_STATS_NUM_BW_COUNTERS]; /* units = dB above noise floor */ + A_UINT8 rssi_chain[HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS][HTT_RX_PEER_STATS_NUM_BW_COUNTERS]; /* units = dB above noise floor */ /* Counters to track number of rx packets in each GI in each mcs (0-11) */ A_UINT32 rx_gi[HTT_RX_PEER_STATS_NUM_GI_COUNTERS][HTT_RX_PEER_STATS_NUM_MCS_COUNTERS]; - 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_INT8 rx_ul_fd_rssi[HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS];/* dBm unit */ + 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_INT8 rx_ul_fd_rssi[HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS]; /* dBm unit */ /* per_chain_rssi_pkt_type: * This field shows what type of rx frame the per-chain RSSI was computed * on, by recording the frame type and sub-type as bit-fields within this @@ -1143,7 +1151,8 @@ typedef struct _htt_rx_peer_rate_stats_tlv { * BIT [7 : 4] :- IEEE80211_FC0_SUBTYPE * BIT [31 : 8] :- Reserved */ - A_UINT32 per_chain_rssi_pkt_type; + A_UINT32 per_chain_rssi_pkt_type; + A_INT8 rx_per_chain_rssi_in_dbm[HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS][HTT_RX_PEER_STATS_NUM_BW_COUNTERS]; } htt_rx_peer_rate_stats_tlv; typedef enum { @@ -1153,55 +1162,54 @@ typedef enum { } htt_peer_stats_req_mode_t; typedef enum { - HTT_PEER_STATS_CMN_TLV = 0, - HTT_PEER_DETAILS_TLV = 1, - HTT_TX_PEER_RATE_STATS_TLV = 2, - HTT_RX_PEER_RATE_STATS_TLV = 3, - HTT_TX_TID_STATS_TLV = 4, - HTT_RX_TID_STATS_TLV = 5, - HTT_MSDU_FLOW_STATS_TLV = 6, - - HTT_PEER_STATS_MAX_TLV = 31, + HTT_PEER_STATS_CMN_TLV = 0, + HTT_PEER_DETAILS_TLV = 1, + HTT_TX_PEER_RATE_STATS_TLV = 2, + HTT_RX_PEER_RATE_STATS_TLV = 3, + HTT_TX_TID_STATS_TLV = 4, + HTT_RX_TID_STATS_TLV = 5, + HTT_MSDU_FLOW_STATS_TLV = 6, + + HTT_PEER_STATS_MAX_TLV = 31, } htt_peer_stats_tlv_enum; /* config_param0 */ -#define HTT_DBG_EXT_STATS_PEER_INFO_IS_MAC_ADDR_M 0x00000001 -#define HTT_DBG_EXT_STATS_PEER_INFO_IS_MAC_ADDR_S 0 +#define HTT_DBG_EXT_STATS_PEER_INFO_IS_MAC_ADDR_M 0x00000001 +#define HTT_DBG_EXT_STATS_PEER_INFO_IS_MAC_ADDR_S 0 -#define HTT_DBG_EXT_STATS_PEER_REQ_MODE_M 0x0000FFFE -#define HTT_DBG_EXT_STATS_PEER_REQ_MODE_S 1 +#define HTT_DBG_EXT_STATS_PEER_REQ_MODE_M 0x0000FFFE +#define HTT_DBG_EXT_STATS_PEER_REQ_MODE_S 1 -#define HTT_DBG_EXT_STATS_PEER_INFO_SW_PEER_ID_M 0xFFFF0000 -#define HTT_DBG_EXT_STATS_PEER_INFO_SW_PEER_ID_S 16 +#define HTT_DBG_EXT_STATS_PEER_INFO_SW_PEER_ID_M 0xFFFF0000 +#define HTT_DBG_EXT_STATS_PEER_INFO_SW_PEER_ID_S 16 -#define HTT_DBG_EXT_STATS_PEER_INFO_IS_MAC_ADDR_SET( _var, _val)\ - do { \ - HTT_CHECK_SET_VAL(HTT_DBG_EXT_STATS_PEER_INFO_IS_MAC_ADDR, _val); \ - ((_var) |= ((_val) << HTT_DBG_EXT_STATS_PEER_INFO_IS_MAC_ADDR_S)); \ - } while (0) +#define HTT_DBG_EXT_STATS_PEER_INFO_IS_MAC_ADDR_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_DBG_EXT_STATS_PEER_INFO_IS_MAC_ADDR, _val); \ + ((_var) |= ((_val) << HTT_DBG_EXT_STATS_PEER_INFO_IS_MAC_ADDR_S)); \ + } while (0) #define HTT_DBG_EXT_STATS_PEER_INFO_IS_MAC_ADDR_GET(_var) \ (((_var) & HTT_DBG_EXT_STATS_PEER_INFO_IS_MAC_ADDR_M) >> \ - HTT_DBG_EXT_STATS_PEER_INFO_IS_MAC_ADDR_S) - + HTT_DBG_EXT_STATS_PEER_INFO_IS_MAC_ADDR_S) #define HTT_DBG_EXT_STATS_PEER_REQ_MODE_GET(_var) \ (((_var) & HTT_DBG_EXT_STATS_PEER_REQ_MODE_M) >> \ - HTT_DBG_EXT_STATS_PEER_REQ_MODE_S) + HTT_DBG_EXT_STATS_PEER_REQ_MODE_S) #define HTT_DBG_EXT_STATS_PEER_REQ_MODE_SET(_var, _val) \ - do { \ - ((_var) |= ((_val) << HTT_DBG_EXT_STATS_PEER_REQ_MODE_S)); \ - } while (0) + do { \ + ((_var) |= ((_val) << HTT_DBG_EXT_STATS_PEER_REQ_MODE_S)); \ + } while (0) #define HTT_DBG_EXT_STATS_PEER_INFO_SW_PEER_ID_GET(_var) \ (((_var) & HTT_DBG_EXT_STATS_PEER_INFO_SW_PEER_ID_M) >> \ - HTT_DBG_EXT_STATS_PEER_INFO_SW_PEER_ID_S) + HTT_DBG_EXT_STATS_PEER_INFO_SW_PEER_ID_S) #define HTT_DBG_EXT_STATS_PEER_INFO_SW_PEER_ID_SET(_var, _val) \ - do { \ - ((_var) |= ((_val) << HTT_DBG_EXT_STATS_PEER_INFO_SW_PEER_ID_S)); \ - } while (0) + do { \ + ((_var) |= ((_val) << HTT_DBG_EXT_STATS_PEER_INFO_SW_PEER_ID_S)); \ + } while (0) /* STATS_TYPE : HTT_DBG_EXT_STATS_PEER_INFO * TLV_TAGS: @@ -1220,14 +1228,15 @@ typedef enum { */ typedef struct _htt_peer_stats { htt_peer_stats_cmn_tlv cmn_tlv; + htt_peer_details_tlv peer_details; /* from g_rate_info_stats */ htt_tx_peer_rate_stats_tlv tx_rate; htt_rx_peer_rate_stats_tlv rx_rate; - htt_tx_tid_stats_tlv tx_tid_stats[1]; - htt_rx_tid_stats_tlv rx_tid_stats[1]; - htt_msdu_flow_stats_tlv msdu_flowq[1]; - htt_tx_tid_stats_v1_tlv tx_tid_stats_v1[1]; + htt_tx_tid_stats_tlv tx_tid_stats[1]; + htt_rx_tid_stats_tlv rx_tid_stats[1]; + htt_msdu_flow_stats_tlv msdu_flowq[1]; + htt_tx_tid_stats_v1_tlv tx_tid_stats_v1[1]; } htt_peer_stats_t; /* =========== ACTIVE PEER LIST ========== */ @@ -1244,56 +1253,56 @@ typedef struct { htt_peer_details_tlv peer_details[1]; } htt_active_peer_details_list_t; - /* =========== MUMIMO HWQ stats =========== */ /* MU MIMO stats per hwQ */ typedef struct { htt_tlv_hdr_t tlv_hdr; - A_UINT32 mu_mimo_sch_posted; - A_UINT32 mu_mimo_sch_failed; - A_UINT32 mu_mimo_ppdu_posted; + A_UINT32 mu_mimo_sch_posted; + A_UINT32 mu_mimo_sch_failed; + A_UINT32 mu_mimo_ppdu_posted; } htt_tx_hwq_mu_mimo_sch_stats_tlv; typedef struct { htt_tlv_hdr_t tlv_hdr; - A_UINT32 mu_mimo_mpdus_queued_usr; /* Number of mpdus queued per user */ - A_UINT32 mu_mimo_mpdus_tried_usr; /* Number of mpdus actually transmitted by TxPCU per user */ - A_UINT32 mu_mimo_mpdus_failed_usr; /* Number of mpdus failed per user */ - A_UINT32 mu_mimo_mpdus_requeued_usr; /* Number of mpdus requeued per user */ - A_UINT32 mu_mimo_err_no_ba_usr; /* Number of times BA is not received for a user in MU PPDU */ - A_UINT32 mu_mimo_mpdu_underrun_usr; - A_UINT32 mu_mimo_ampdu_underrun_usr; + A_UINT32 mu_mimo_mpdus_queued_usr; /* Number of mpdus queued per user */ + A_UINT32 mu_mimo_mpdus_tried_usr; /* Number of mpdus actually transmitted by TxPCU per user */ + A_UINT32 mu_mimo_mpdus_failed_usr; /* Number of mpdus failed per user */ + A_UINT32 mu_mimo_mpdus_requeued_usr; /* Number of mpdus requeued per user */ + A_UINT32 mu_mimo_err_no_ba_usr; /* Number of times BA is not received for a user in MU PPDU */ + A_UINT32 mu_mimo_mpdu_underrun_usr; + A_UINT32 mu_mimo_ampdu_underrun_usr; } htt_tx_hwq_mu_mimo_mpdu_stats_tlv; -#define HTT_TX_HWQ_MU_MIMO_CMN_STATS_MAC_ID_M 0x000000ff -#define HTT_TX_HWQ_MU_MIMO_CMN_STATS_MAC_ID_S 0 +#define HTT_TX_HWQ_MU_MIMO_CMN_STATS_MAC_ID_M 0x000000ff +#define HTT_TX_HWQ_MU_MIMO_CMN_STATS_MAC_ID_S 0 -#define HTT_TX_HWQ_MU_MIMO_CMN_STATS_HWQ_ID_M 0x0000ff00 -#define HTT_TX_HWQ_MU_MIMO_CMN_STATS_HWQ_ID_S 8 +#define HTT_TX_HWQ_MU_MIMO_CMN_STATS_HWQ_ID_M 0x0000ff00 +#define HTT_TX_HWQ_MU_MIMO_CMN_STATS_HWQ_ID_S 8 #define HTT_TX_HWQ_MU_MIMO_CMN_STATS_MAC_ID_GET(_var) \ (((_var) & HTT_TX_HWQ_MU_MIMO_CMN_STATS_MAC_ID_M) >> \ - HTT_TX_HWQ_MU_MIMO_CMN_STATS_MAC_ID_S) + HTT_TX_HWQ_MU_MIMO_CMN_STATS_MAC_ID_S) #define HTT_TX_HWQ_MU_MIMO_CMN_STATS_MAC_ID_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_TX_HWQ_MU_MIMO_CMN_STATS_MAC_ID, _val); \ - ((_var) |= ((_val) << HTT_TX_HWQ_MU_MIMO_CMN_STATS_MAC_ID_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_TX_HWQ_MU_MIMO_CMN_STATS_MAC_ID, _val); \ + ((_var) |= ((_val) << HTT_TX_HWQ_MU_MIMO_CMN_STATS_MAC_ID_S)); \ + } while (0) #define HTT_TX_HWQ_MU_MIMO_CMN_STATS_HWQ_ID_GET(_var) \ (((_var) & HTT_TX_HWQ_MU_MIMO_CMN_STATS_HWQ_ID_M) >> \ - HTT_TX_HWQ_MU_MIMO_CMN_STATS_HWQ_ID_S) + HTT_TX_HWQ_MU_MIMO_CMN_STATS_HWQ_ID_S) #define HTT_TX_HWQ_MU_MIMO_CMN_STATS_HWQ_ID_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_TX_HWQ_MU_MIMO_CMN_STATS_HWQ_ID, _val); \ - ((_var) |= ((_val) << HTT_TX_HWQ_MU_MIMO_CMN_STATS_HWQ_ID_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_TX_HWQ_MU_MIMO_CMN_STATS_HWQ_ID, _val); \ + ((_var) |= ((_val) << HTT_TX_HWQ_MU_MIMO_CMN_STATS_HWQ_ID_S)); \ + } while (0) typedef struct { htt_tlv_hdr_t tlv_hdr; + /* BIT [ 7 : 0] :- mac_id * BIT [15 : 8] :- hwq_id * BIT [31 : 16] :- reserved @@ -1307,41 +1316,42 @@ typedef struct { */ typedef struct { struct _hwq_mu_mimo_stats { - htt_tx_hwq_mu_mimo_cmn_stats_tlv cmn_tlv; - htt_tx_hwq_mu_mimo_sch_stats_tlv mu_mimo_sch_stats_tlv[1]; /* WAL_TX_STATS_MAX_GROUP_SIZE */ + htt_tx_hwq_mu_mimo_cmn_stats_tlv cmn_tlv; + htt_tx_hwq_mu_mimo_sch_stats_tlv mu_mimo_sch_stats_tlv[1]; /* WAL_TX_STATS_MAX_GROUP_SIZE */ htt_tx_hwq_mu_mimo_mpdu_stats_tlv mu_mimo_mpdu_stats_tlv[1]; /* WAL_TX_STATS_TX_MAX_NUM_USERS */ } hwq[1]; } htt_tx_hwq_mu_mimo_stats_t; /* == TX HWQ STATS == */ -#define HTT_TX_HWQ_STATS_CMN_MAC_ID_M 0x000000ff -#define HTT_TX_HWQ_STATS_CMN_MAC_ID_S 0 +#define HTT_TX_HWQ_STATS_CMN_MAC_ID_M 0x000000ff +#define HTT_TX_HWQ_STATS_CMN_MAC_ID_S 0 -#define HTT_TX_HWQ_STATS_CMN_HWQ_ID_M 0x0000ff00 -#define HTT_TX_HWQ_STATS_CMN_HWQ_ID_S 8 +#define HTT_TX_HWQ_STATS_CMN_HWQ_ID_M 0x0000ff00 +#define HTT_TX_HWQ_STATS_CMN_HWQ_ID_S 8 #define HTT_TX_HWQ_STATS_CMN_MAC_ID_GET(_var) \ (((_var) & HTT_TX_HWQ_STATS_CMN_MAC_ID_M) >> \ - HTT_TX_HWQ_STATS_CMN_MAC_ID_S) + HTT_TX_HWQ_STATS_CMN_MAC_ID_S) #define HTT_TX_HWQ_STATS_CMN_MAC_ID_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_TX_HWQ_STATS_CMN_MAC_ID, _val); \ - ((_var) |= ((_val) << HTT_TX_HWQ_STATS_CMN_MAC_ID_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_TX_HWQ_STATS_CMN_MAC_ID, _val); \ + ((_var) |= ((_val) << HTT_TX_HWQ_STATS_CMN_MAC_ID_S)); \ + } while (0) #define HTT_TX_HWQ_STATS_CMN_HWQ_ID_GET(_var) \ (((_var) & HTT_TX_HWQ_STATS_CMN_HWQ_ID_M) >> \ - HTT_TX_HWQ_STATS_CMN_HWQ_ID_S) + HTT_TX_HWQ_STATS_CMN_HWQ_ID_S) #define HTT_TX_HWQ_STATS_CMN_HWQ_ID_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_TX_HWQ_STATS_CMN_HWQ_ID, _val); \ - ((_var) |= ((_val) << HTT_TX_HWQ_STATS_CMN_HWQ_ID_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_TX_HWQ_STATS_CMN_HWQ_ID, _val); \ + ((_var) |= ((_val) << HTT_TX_HWQ_STATS_CMN_HWQ_ID_S)); \ + } while (0) typedef struct { htt_tlv_hdr_t tlv_hdr; + /* BIT [ 7 : 0] :- mac_id * BIT [15 : 8] :- hwq_id * BIT [31 : 16] :- reserved @@ -1349,39 +1359,39 @@ typedef struct { A_UINT32 mac_id__hwq_id__word; /* PPDU level stats */ - A_UINT32 xretry; /* Number of times ack is failed for the PPDU scheduled on this txQ */ - A_UINT32 underrun_cnt; /* Number of times sched cmd status reported mpdu underrun */ - A_UINT32 flush_cnt; /* Number of times sched cmd is flushed */ - A_UINT32 filt_cnt; /* Number of times sched cmd is filtered */ - A_UINT32 null_mpdu_bmap; /* Number of times HWSCH uploaded null mpdu bitmap */ - A_UINT32 user_ack_failure; /* Number of time user ack or ba tlv is not seen on FES ring where it is expected to be */ - A_UINT32 ack_tlv_proc; /* Number of times TQM processed ack tlv received from HWSCH */ - A_UINT32 sched_id_proc; /* Cache latest processed scheduler ID received from ack ba tlv */ - A_UINT32 null_mpdu_tx_count; /* Number of times TxPCU reported mpdus transmitted for a user is zero */ - A_UINT32 mpdu_bmap_not_recvd; /* Number of times SW did not see any mpdu info bitmap tlv on FES status ring */ + A_UINT32 xretry; /* Number of times ack is failed for the PPDU scheduled on this txQ */ + A_UINT32 underrun_cnt; /* Number of times sched cmd status reported mpdu underrun */ + A_UINT32 flush_cnt; /* Number of times sched cmd is flushed */ + A_UINT32 filt_cnt; /* Number of times sched cmd is filtered */ + A_UINT32 null_mpdu_bmap; /* Number of times HWSCH uploaded null mpdu bitmap */ + A_UINT32 user_ack_failure; /* Number of time user ack or ba tlv is not seen on FES ring where it is expected to be */ + A_UINT32 ack_tlv_proc; /* Number of times TQM processed ack tlv received from HWSCH */ + A_UINT32 sched_id_proc; /* Cache latest processed scheduler ID received from ack ba tlv */ + A_UINT32 null_mpdu_tx_count; /* Number of times TxPCU reported mpdus transmitted for a user is zero */ + A_UINT32 mpdu_bmap_not_recvd; /* Number of times SW did not see any mpdu info bitmap tlv on FES status ring */ /* Selfgen stats per hwQ */ - A_UINT32 num_bar; /* Number of SU/MU BAR frames posted to hwQ */ - A_UINT32 rts; /* Number of RTS frames posted to hwQ */ - A_UINT32 cts2self; /* Number of cts2self frames posted to hwQ */ - A_UINT32 qos_null; /* Number of qos null frames posted to hwQ */ + A_UINT32 num_bar; /* Number of SU/MU BAR frames posted to hwQ */ + A_UINT32 rts; /* Number of RTS frames posted to hwQ */ + A_UINT32 cts2self; /* Number of cts2self frames posted to hwQ */ + A_UINT32 qos_null; /* Number of qos null frames posted to hwQ */ /* MPDU level stats */ - A_UINT32 mpdu_tried_cnt; /* mpdus tried Tx by HWSCH/TQM */ - A_UINT32 mpdu_queued_cnt; /* mpdus queued to HWSCH */ - A_UINT32 mpdu_ack_fail_cnt; /* mpdus tried but ack was not received */ - A_UINT32 mpdu_filt_cnt; /* This will include sched cmd flush and time based discard */ - A_UINT32 false_mpdu_ack_count; /* Number of MPDUs for which ACK was sucessful but no Tx happened */ + A_UINT32 mpdu_tried_cnt; /* mpdus tried Tx by HWSCH/TQM */ + A_UINT32 mpdu_queued_cnt; /* mpdus queued to HWSCH */ + A_UINT32 mpdu_ack_fail_cnt; /* mpdus tried but ack was not received */ + A_UINT32 mpdu_filt_cnt; /* This will include sched cmd flush and time based discard */ + A_UINT32 false_mpdu_ack_count; /* Number of MPDUs for which ACK was sucessful but no Tx happened */ - A_UINT32 txq_timeout; /* Number of times txq timeout happened */ + A_UINT32 txq_timeout; /* Number of times txq timeout happened */ } htt_tx_hwq_stats_cmn_tlv; -#define HTT_TX_HWQ_DIFS_LATENCY_STATS_TLV_SZ(_num_elems) ( sizeof(A_UINT32) + /* hist_intvl */ \ +#define HTT_TX_HWQ_DIFS_LATENCY_STATS_TLV_SZ(_num_elems) (sizeof(A_UINT32) + /* hist_intvl */ \ (sizeof(A_UINT32) * (_num_elems))) /* NOTE: Variable length TLV, use length spec to infer array size */ typedef struct { htt_tlv_hdr_t tlv_hdr; - A_UINT32 hist_intvl; + A_UINT32 hist_intvl; /* histogram of ppdu post to hwsch - > cmd status received */ A_UINT32 difs_latency_hist[1]; /* HTT_TX_HWQ_MAX_DIFS_LATENCY_BINS */ } htt_tx_hwq_difs_latency_stats_tlv_v; @@ -1429,7 +1439,7 @@ typedef struct { * */ typedef struct { htt_tlv_hdr_t tlv_hdr; - A_UINT32 hist_bin_size; + A_UINT32 hist_bin_size; /* Histogram of number of mpdus on tried mpdu */ A_UINT32 tried_mpdu_cnt_hist[1]; /* HTT_TX_HWQ_TRIED_MPDU_CNT_HIST */ } htt_tx_hwq_tried_mpdu_cnt_hist_tlv_v; @@ -1473,30 +1483,30 @@ typedef struct { * HWQ distinctly. */ typedef struct _htt_tx_hwq_stats { - htt_stats_string_tlv hwq_str_tlv; - htt_tx_hwq_stats_cmn_tlv cmn_tlv; - htt_tx_hwq_difs_latency_stats_tlv_v difs_tlv; - htt_tx_hwq_cmd_result_stats_tlv_v cmd_result_tlv; - htt_tx_hwq_cmd_stall_stats_tlv_v cmd_stall_tlv; - htt_tx_hwq_fes_result_stats_tlv_v fes_stats_tlv; + htt_stats_string_tlv hwq_str_tlv; + htt_tx_hwq_stats_cmn_tlv cmn_tlv; + htt_tx_hwq_difs_latency_stats_tlv_v difs_tlv; + htt_tx_hwq_cmd_result_stats_tlv_v cmd_result_tlv; + htt_tx_hwq_cmd_stall_stats_tlv_v cmd_stall_tlv; + htt_tx_hwq_fes_result_stats_tlv_v fes_stats_tlv; htt_tx_hwq_tried_mpdu_cnt_hist_tlv_v tried_mpdu_tlv; - htt_tx_hwq_txop_used_cnt_hist_tlv_v txop_used_tlv; + htt_tx_hwq_txop_used_cnt_hist_tlv_v txop_used_tlv; } htt_tx_hwq_stats_t; /* == TX SELFGEN STATS == */ -#define HTT_TX_SELFGEN_CMN_STATS_MAC_ID_M 0x000000ff -#define HTT_TX_SELFGEN_CMN_STATS_MAC_ID_S 0 +#define HTT_TX_SELFGEN_CMN_STATS_MAC_ID_M 0x000000ff +#define HTT_TX_SELFGEN_CMN_STATS_MAC_ID_S 0 #define HTT_TX_SELFGEN_CMN_STATS_MAC_ID_GET(_var) \ (((_var) & HTT_TX_SELFGEN_CMN_STATS_MAC_ID_M) >> \ - HTT_TX_SELFGEN_CMN_STATS_MAC_ID_S) + HTT_TX_SELFGEN_CMN_STATS_MAC_ID_S) #define HTT_TX_SELFGEN_CMN_STATS_MAC_ID_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_TX_SELFGEN_CMN_STATS_MAC_ID, _val); \ - ((_var) |= ((_val) << HTT_TX_SELFGEN_CMN_STATS_MAC_ID_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_TX_SELFGEN_CMN_STATS_MAC_ID, _val); \ + ((_var) |= ((_val) << HTT_TX_SELFGEN_CMN_STATS_MAC_ID_S)); \ + } while (0) typedef struct { htt_tlv_hdr_t tlv_hdr; @@ -1548,6 +1558,7 @@ typedef struct { A_UINT32 ax_bsr_trigger; A_UINT32 ax_mu_bar_trigger; A_UINT32 ax_mu_rts_trigger; + A_UINT32 ax_ulmumimo_trigger; } htt_tx_selfgen_ax_stats_tlv; typedef struct { @@ -1580,6 +1591,7 @@ typedef struct { A_UINT32 ax_bsr_trigger_err; A_UINT32 ax_mu_bar_trigger_err; A_UINT32 ax_mu_rts_trigger_err; + A_UINT32 ax_ulmumimo_trigger_err; } htt_tx_selfgen_ax_err_stats_tlv; /* STATS_TYPE : HTT_DBG_EXT_STATS_TX_SELFGEN_INFO @@ -1610,7 +1622,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_OFDMA_USER_STATS 74 typedef struct { htt_tlv_hdr_t tlv_hdr; @@ -1662,8 +1674,8 @@ typedef struct { A_UINT32 ax_ofdma_ampdu_underrun_usr; } htt_tx_pdev_mu_mimo_mpdu_stats_tlv; -#define HTT_STATS_TX_SCHED_MODE_MU_MIMO_AC 1 /* SCHED_TX_MODE_MU_MIMO_AC */ -#define HTT_STATS_TX_SCHED_MODE_MU_MIMO_AX 2 /* SCHED_TX_MODE_MU_MIMO_AX */ +#define HTT_STATS_TX_SCHED_MODE_MU_MIMO_AC 1 /* SCHED_TX_MODE_MU_MIMO_AC */ +#define HTT_STATS_TX_SCHED_MODE_MU_MIMO_AX 2 /* SCHED_TX_MODE_MU_MIMO_AX */ #define HTT_STATS_TX_SCHED_MODE_MU_OFDMA_AX 3 /* SCHED_TX_MODE_MU_OFDMA_AX */ typedef struct { @@ -1764,31 +1776,31 @@ typedef struct { A_UINT32 sched_ineligibility[1]; /* indexed by htt_sched_txq_sched_ineligibility_tlv_enum */ } htt_sched_txq_sched_ineligibility_tlv_v; -#define HTT_TX_PDEV_STATS_SCHED_PER_TXQ_MAC_ID_M 0x000000ff -#define HTT_TX_PDEV_STATS_SCHED_PER_TXQ_MAC_ID_S 0 +#define HTT_TX_PDEV_STATS_SCHED_PER_TXQ_MAC_ID_M 0x000000ff +#define HTT_TX_PDEV_STATS_SCHED_PER_TXQ_MAC_ID_S 0 -#define HTT_TX_PDEV_STATS_SCHED_PER_TXQ_TXQUEUE_ID_M 0x0000ff00 -#define HTT_TX_PDEV_STATS_SCHED_PER_TXQ_TXQUEUE_ID_S 8 +#define HTT_TX_PDEV_STATS_SCHED_PER_TXQ_TXQUEUE_ID_M 0x0000ff00 +#define HTT_TX_PDEV_STATS_SCHED_PER_TXQ_TXQUEUE_ID_S 8 #define HTT_TX_PDEV_STATS_SCHED_PER_TXQ_MAC_ID_GET(_var) \ (((_var) & HTT_TX_PDEV_STATS_SCHED_PER_TXQ_MAC_ID_M) >> \ - HTT_TX_PDEV_STATS_SCHED_PER_TXQ_MAC_ID_S) + HTT_TX_PDEV_STATS_SCHED_PER_TXQ_MAC_ID_S) #define HTT_TX_PDEV_STATS_SCHED_PER_TXQ_MAC_ID_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_TX_PDEV_STATS_SCHED_PER_TXQ_MAC_ID, _val); \ - ((_var) |= ((_val) << HTT_TX_PDEV_STATS_SCHED_PER_TXQ_MAC_ID_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_TX_PDEV_STATS_SCHED_PER_TXQ_MAC_ID, _val); \ + ((_var) |= ((_val) << HTT_TX_PDEV_STATS_SCHED_PER_TXQ_MAC_ID_S)); \ + } while (0) #define HTT_TX_PDEV_STATS_SCHED_PER_TXQ_TXQUEUE_ID_GET(_var) \ (((_var) & HTT_TX_PDEV_STATS_SCHED_PER_TXQ_TXQUEUE_ID_M) >> \ - HTT_TX_PDEV_STATS_SCHED_PER_TXQ_TXQUEUE_ID_S) + HTT_TX_PDEV_STATS_SCHED_PER_TXQ_TXQUEUE_ID_S) #define HTT_TX_PDEV_STATS_SCHED_PER_TXQ_TXQUEUE_ID_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_TX_PDEV_STATS_SCHED_PER_TXQ_TXQUEUE_ID, _val); \ - ((_var) |= ((_val) << HTT_TX_PDEV_STATS_SCHED_PER_TXQ_TXQUEUE_ID_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_TX_PDEV_STATS_SCHED_PER_TXQ_TXQUEUE_ID, _val); \ + ((_var) |= ((_val) << HTT_TX_PDEV_STATS_SCHED_PER_TXQ_TXQUEUE_ID_S)); \ + } while (0) typedef struct { htt_tlv_hdr_t tlv_hdr; @@ -1840,21 +1852,22 @@ typedef struct { A_UINT32 dur_based_sendn_term; } htt_tx_pdev_stats_sched_per_txq_tlv; -#define HTT_STATS_TX_SCHED_CMN_MAC_ID_M 0x000000ff -#define HTT_STATS_TX_SCHED_CMN_MAC_ID_S 0 +#define HTT_STATS_TX_SCHED_CMN_MAC_ID_M 0x000000ff +#define HTT_STATS_TX_SCHED_CMN_MAC_ID_S 0 #define HTT_STATS_TX_SCHED_CMN_MAC_ID_GET(_var) \ (((_var) & HTT_STATS_TX_SCHED_CMN_MAC_ID_M) >> \ - HTT_STATS_TX_SCHED_CMN_MAC_ID_S) + HTT_STATS_TX_SCHED_CMN_MAC_ID_S) #define HTT_STATS_TX_SCHED_CMN_MAC_ID_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_STATS_TX_SCHED_CMN_MAC_ID, _val); \ - ((_var) |= ((_val) << HTT_STATS_TX_SCHED_CMN_MAC_ID_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_TX_SCHED_CMN_MAC_ID, _val); \ + ((_var) |= ((_val) << HTT_STATS_TX_SCHED_CMN_MAC_ID_S)); \ + } while (0) typedef struct { htt_tlv_hdr_t tlv_hdr; + /* BIT [ 7 : 0] :- mac_id * BIT [31 : 8] :- reserved */ @@ -1879,19 +1892,18 @@ typedef struct { typedef struct { htt_stats_tx_sched_cmn_tlv cmn_tlv; struct _txq_tx_sched_stats { - htt_tx_pdev_stats_sched_per_txq_tlv txq_tlv; - htt_sched_txq_cmd_posted_tlv_v cmd_posted_tlv; - htt_sched_txq_cmd_reaped_tlv_v cmd_reaped_tlv; - htt_sched_txq_sched_order_su_tlv_v sched_order_su_tlv; + htt_tx_pdev_stats_sched_per_txq_tlv txq_tlv; + htt_sched_txq_cmd_posted_tlv_v cmd_posted_tlv; + htt_sched_txq_cmd_reaped_tlv_v cmd_reaped_tlv; + htt_sched_txq_sched_order_su_tlv_v sched_order_su_tlv; htt_sched_txq_sched_ineligibility_tlv_v sched_ineligibility_tlv; } txq[1]; } htt_stats_tx_sched_t; - /* == TQM STATS == */ -#define HTT_TX_TQM_MAX_GEN_MPDU_END_REASON 16 -#define HTT_TX_TQM_MAX_LIST_MPDU_END_REASON 16 +#define HTT_TX_TQM_MAX_GEN_MPDU_END_REASON 16 +#define HTT_TX_TQM_MAX_LIST_MPDU_END_REASON 16 #define HTT_TX_TQM_MAX_LIST_MPDU_CNT_HISTOGRAM_BINS 16 #define HTT_TX_TQM_GEN_MPDU_STATS_TLV_SZ(_num_elems) (sizeof(A_UINT32) * (_num_elems)) @@ -1899,7 +1911,7 @@ typedef struct { /* NOTE: Variable length TLV, use length spec to infer array size */ typedef struct { htt_tlv_hdr_t tlv_hdr; - A_UINT32 gen_mpdu_end_reason[1]; /* HTT_TX_TQM_MAX_GEN_MPDU_END_REASON */ + A_UINT32 gen_mpdu_end_reason[1]; /* HTT_TX_TQM_MAX_GEN_MPDU_END_REASON */ } htt_tx_tqm_gen_mpdu_stats_tlv_v; #define HTT_TX_TQM_LIST_MPDU_STATS_TLV_SZ(_num_elems) (sizeof(A_UINT32) * (_num_elems)) @@ -1907,7 +1919,7 @@ typedef struct { /* NOTE: Variable length TLV, use length spec to infer array size */ typedef struct { htt_tlv_hdr_t tlv_hdr; - A_UINT32 list_mpdu_end_reason[1]; /* HTT_TX_TQM_MAX_LIST_MPDU_END_REASON */ + A_UINT32 list_mpdu_end_reason[1]; /* HTT_TX_TQM_MAX_LIST_MPDU_END_REASON */ } htt_tx_tqm_list_mpdu_stats_tlv_v; #define HTT_TX_TQM_LIST_MPDU_CNT_TLV_SZ(_num_elems) (sizeof(A_UINT32) * (_num_elems)) @@ -1915,38 +1927,38 @@ typedef struct { /* NOTE: Variable length TLV, use length spec to infer array size */ typedef struct { htt_tlv_hdr_t tlv_hdr; - A_UINT32 list_mpdu_cnt_hist[1]; /* HTT_TX_TQM_MAX_LIST_MPDU_CNT_HISTOGRAM_BINS */ + A_UINT32 list_mpdu_cnt_hist[1]; /* HTT_TX_TQM_MAX_LIST_MPDU_CNT_HISTOGRAM_BINS */ } htt_tx_tqm_list_mpdu_cnt_tlv_v; typedef struct { htt_tlv_hdr_t tlv_hdr; - A_UINT32 msdu_count; - A_UINT32 mpdu_count; - A_UINT32 remove_msdu; - A_UINT32 remove_mpdu; - A_UINT32 remove_msdu_ttl; - A_UINT32 send_bar; - A_UINT32 bar_sync; - A_UINT32 notify_mpdu; - A_UINT32 sync_cmd; - A_UINT32 write_cmd; - A_UINT32 hwsch_trigger; - A_UINT32 ack_tlv_proc; - A_UINT32 gen_mpdu_cmd; - A_UINT32 gen_list_cmd; - A_UINT32 remove_mpdu_cmd; - A_UINT32 remove_mpdu_tried_cmd; - A_UINT32 mpdu_queue_stats_cmd; - A_UINT32 mpdu_head_info_cmd; - A_UINT32 msdu_flow_stats_cmd; - A_UINT32 remove_msdu_cmd; - A_UINT32 remove_msdu_ttl_cmd; - A_UINT32 flush_cache_cmd; - A_UINT32 update_mpduq_cmd; - A_UINT32 enqueue; - A_UINT32 enqueue_notify; - A_UINT32 notify_mpdu_at_head; - A_UINT32 notify_mpdu_state_valid; + A_UINT32 msdu_count; + A_UINT32 mpdu_count; + A_UINT32 remove_msdu; + A_UINT32 remove_mpdu; + A_UINT32 remove_msdu_ttl; + A_UINT32 send_bar; + A_UINT32 bar_sync; + A_UINT32 notify_mpdu; + A_UINT32 sync_cmd; + A_UINT32 write_cmd; + A_UINT32 hwsch_trigger; + A_UINT32 ack_tlv_proc; + A_UINT32 gen_mpdu_cmd; + A_UINT32 gen_list_cmd; + A_UINT32 remove_mpdu_cmd; + A_UINT32 remove_mpdu_tried_cmd; + A_UINT32 mpdu_queue_stats_cmd; + A_UINT32 mpdu_head_info_cmd; + A_UINT32 msdu_flow_stats_cmd; + A_UINT32 remove_msdu_cmd; + A_UINT32 remove_msdu_ttl_cmd; + A_UINT32 flush_cache_cmd; + A_UINT32 update_mpduq_cmd; + A_UINT32 enqueue; + A_UINT32 enqueue_notify; + A_UINT32 notify_mpdu_at_head; + A_UINT32 notify_mpdu_state_valid; /* * On receiving TQM_FLOW_NOT_EMPTY_STATUS from TQM, (on MSDUs being enqueued * the flow is non empty), if the number of MSDUs is greater than the threshold, @@ -1965,18 +1977,18 @@ typedef struct { A_UINT32 sched_nonudp_notify2; } htt_tx_tqm_pdev_stats_tlv_v; -#define HTT_TX_TQM_CMN_STATS_MAC_ID_M 0x000000ff -#define HTT_TX_TQM_CMN_STATS_MAC_ID_S 0 +#define HTT_TX_TQM_CMN_STATS_MAC_ID_M 0x000000ff +#define HTT_TX_TQM_CMN_STATS_MAC_ID_S 0 #define HTT_TX_TQM_CMN_STATS_MAC_ID_GET(_var) \ (((_var) & HTT_TX_TQM_CMN_STATS_MAC_ID_M) >> \ - HTT_TX_TQM_CMN_STATS_MAC_ID_S) + HTT_TX_TQM_CMN_STATS_MAC_ID_S) #define HTT_TX_TQM_CMN_STATS_MAC_ID_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_TX_TQM_CMN_STATS_MAC_ID, _val); \ - ((_var) |= ((_val) << HTT_TX_TQM_CMN_STATS_MAC_ID_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_TX_TQM_CMN_STATS_MAC_ID, _val); \ + ((_var) |= ((_val) << HTT_TX_TQM_CMN_STATS_MAC_ID_S)); \ + } while (0) typedef struct { htt_tlv_hdr_t tlv_hdr; @@ -2018,40 +2030,40 @@ typedef struct { * Instead, use the constituent TLV structures to fill/parse. */ typedef struct { - htt_tx_tqm_cmn_stats_tlv cmn_tlv; - htt_tx_tqm_error_stats_tlv err_tlv; - htt_tx_tqm_gen_mpdu_stats_tlv_v gen_mpdu_stats_tlv; + htt_tx_tqm_cmn_stats_tlv cmn_tlv; + htt_tx_tqm_error_stats_tlv err_tlv; + htt_tx_tqm_gen_mpdu_stats_tlv_v gen_mpdu_stats_tlv; htt_tx_tqm_list_mpdu_stats_tlv_v list_mpdu_stats_tlv; - htt_tx_tqm_list_mpdu_cnt_tlv_v list_mpdu_cnt_tlv; - htt_tx_tqm_pdev_stats_tlv_v tqm_pdev_stats_tlv; + htt_tx_tqm_list_mpdu_cnt_tlv_v list_mpdu_cnt_tlv; + htt_tx_tqm_pdev_stats_tlv_v tqm_pdev_stats_tlv; } htt_tx_tqm_pdev_stats_t; /* == TQM CMDQ stats == */ -#define HTT_TX_TQM_CMDQ_STATUS_MAC_ID_M 0x000000ff -#define HTT_TX_TQM_CMDQ_STATUS_MAC_ID_S 0 +#define HTT_TX_TQM_CMDQ_STATUS_MAC_ID_M 0x000000ff +#define HTT_TX_TQM_CMDQ_STATUS_MAC_ID_S 0 -#define HTT_TX_TQM_CMDQ_STATUS_CMDQ_ID_M 0x0000ff00 -#define HTT_TX_TQM_CMDQ_STATUS_CMDQ_ID_S 8 +#define HTT_TX_TQM_CMDQ_STATUS_CMDQ_ID_M 0x0000ff00 +#define HTT_TX_TQM_CMDQ_STATUS_CMDQ_ID_S 8 #define HTT_TX_TQM_CMDQ_STATUS_MAC_ID_GET(_var) \ (((_var) & HTT_TX_TQM_CMDQ_STATUS_MAC_ID_M) >> \ - HTT_TX_TQM_CMDQ_STATUS_MAC_ID_S) + HTT_TX_TQM_CMDQ_STATUS_MAC_ID_S) #define HTT_TX_TQM_CMDQ_STATUS_MAC_ID_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_TX_TQM_CMDQ_STATUS_MAC_ID, _val); \ - ((_var) |= ((_val) << HTT_TX_TQM_CMDQ_STATUS_MAC_ID_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_TX_TQM_CMDQ_STATUS_MAC_ID, _val); \ + ((_var) |= ((_val) << HTT_TX_TQM_CMDQ_STATUS_MAC_ID_S)); \ + } while (0) #define HTT_TX_TQM_CMDQ_STATUS_CMDQ_ID_GET(_var) \ (((_var) & HTT_TX_TQM_CMDQ_STATUS_CMDQ_ID_M) >> \ - HTT_TX_TQM_CMDQ_STATUS_CMDQ_ID_S) + HTT_TX_TQM_CMDQ_STATUS_CMDQ_ID_S) #define HTT_TX_TQM_CMDQ_STATUS_CMDQ_ID_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_TX_TQM_CMDQ_STATUS_CMDQ_ID, _val); \ - ((_var) |= ((_val) << HTT_TX_TQM_CMDQ_STATUS_CMDQ_ID_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_TX_TQM_CMDQ_STATUS_CMDQ_ID, _val); \ + ((_var) |= ((_val) << HTT_TX_TQM_CMDQ_STATUS_CMDQ_ID_S)); \ + } while (0) typedef struct { htt_tlv_hdr_t tlv_hdr; @@ -2085,7 +2097,7 @@ typedef struct { */ typedef struct { struct _cmdq_stats { - htt_stats_string_tlv cmdq_str_tlv; + htt_stats_string_tlv cmdq_str_tlv; htt_tx_tqm_cmdq_status_tlv status_tlv; } q[1]; } htt_tx_tqm_cmdq_stats_t; @@ -2095,120 +2107,120 @@ typedef struct { /* Structures for tx de stats */ typedef struct { htt_tlv_hdr_t tlv_hdr; - A_UINT32 m1_packets; - A_UINT32 m2_packets; - A_UINT32 m3_packets; - A_UINT32 m4_packets; - A_UINT32 g1_packets; - A_UINT32 g2_packets; + A_UINT32 m1_packets; + A_UINT32 m2_packets; + A_UINT32 m3_packets; + A_UINT32 m4_packets; + A_UINT32 g1_packets; + A_UINT32 g2_packets; } htt_tx_de_eapol_packets_stats_tlv; typedef struct { htt_tlv_hdr_t tlv_hdr; - A_UINT32 ap_bss_peer_not_found; - A_UINT32 ap_bcast_mcast_no_peer; - A_UINT32 sta_delete_in_progress; - A_UINT32 ibss_no_bss_peer; - A_UINT32 invaild_vdev_type; - A_UINT32 invalid_ast_peer_entry; - A_UINT32 peer_entry_invalid; - A_UINT32 ethertype_not_ip; - A_UINT32 eapol_lookup_failed; - A_UINT32 qpeer_not_allow_data; - A_UINT32 fse_tid_override; - A_UINT32 ipv6_jumbogram_zero_length; - A_UINT32 qos_to_non_qos_in_prog; + A_UINT32 ap_bss_peer_not_found; + A_UINT32 ap_bcast_mcast_no_peer; + A_UINT32 sta_delete_in_progress; + A_UINT32 ibss_no_bss_peer; + A_UINT32 invaild_vdev_type; + A_UINT32 invalid_ast_peer_entry; + A_UINT32 peer_entry_invalid; + A_UINT32 ethertype_not_ip; + A_UINT32 eapol_lookup_failed; + A_UINT32 qpeer_not_allow_data; + A_UINT32 fse_tid_override; + A_UINT32 ipv6_jumbogram_zero_length; + A_UINT32 qos_to_non_qos_in_prog; } htt_tx_de_classify_failed_stats_tlv; typedef struct { htt_tlv_hdr_t tlv_hdr; - A_UINT32 arp_packets; - A_UINT32 igmp_packets; - A_UINT32 dhcp_packets; - A_UINT32 host_inspected; - A_UINT32 htt_included; - A_UINT32 htt_valid_mcs; - A_UINT32 htt_valid_nss; - A_UINT32 htt_valid_preamble_type; - A_UINT32 htt_valid_chainmask; - A_UINT32 htt_valid_guard_interval; - A_UINT32 htt_valid_retries; - A_UINT32 htt_valid_bw_info; - A_UINT32 htt_valid_power; - A_UINT32 htt_valid_key_flags; - A_UINT32 htt_valid_no_encryption; - A_UINT32 fse_entry_count; - A_UINT32 fse_priority_be; - A_UINT32 fse_priority_high; - A_UINT32 fse_priority_low; - A_UINT32 fse_traffic_ptrn_be; - A_UINT32 fse_traffic_ptrn_over_sub; - A_UINT32 fse_traffic_ptrn_bursty; - A_UINT32 fse_traffic_ptrn_interactive; - A_UINT32 fse_traffic_ptrn_periodic; - A_UINT32 fse_hwqueue_alloc; - A_UINT32 fse_hwqueue_created; - A_UINT32 fse_hwqueue_send_to_host; - A_UINT32 mcast_entry; - A_UINT32 bcast_entry; - A_UINT32 htt_update_peer_cache; - A_UINT32 htt_learning_frame; - A_UINT32 fse_invalid_peer; + A_UINT32 arp_packets; + A_UINT32 igmp_packets; + A_UINT32 dhcp_packets; + A_UINT32 host_inspected; + A_UINT32 htt_included; + A_UINT32 htt_valid_mcs; + A_UINT32 htt_valid_nss; + A_UINT32 htt_valid_preamble_type; + A_UINT32 htt_valid_chainmask; + A_UINT32 htt_valid_guard_interval; + A_UINT32 htt_valid_retries; + A_UINT32 htt_valid_bw_info; + A_UINT32 htt_valid_power; + A_UINT32 htt_valid_key_flags; + A_UINT32 htt_valid_no_encryption; + A_UINT32 fse_entry_count; + A_UINT32 fse_priority_be; + A_UINT32 fse_priority_high; + A_UINT32 fse_priority_low; + A_UINT32 fse_traffic_ptrn_be; + A_UINT32 fse_traffic_ptrn_over_sub; + A_UINT32 fse_traffic_ptrn_bursty; + A_UINT32 fse_traffic_ptrn_interactive; + A_UINT32 fse_traffic_ptrn_periodic; + A_UINT32 fse_hwqueue_alloc; + A_UINT32 fse_hwqueue_created; + A_UINT32 fse_hwqueue_send_to_host; + A_UINT32 mcast_entry; + A_UINT32 bcast_entry; + A_UINT32 htt_update_peer_cache; + A_UINT32 htt_learning_frame; + A_UINT32 fse_invalid_peer; /* * mec_notify is HTT TX WBM multicast echo check notification * from firmware to host. FW sends SA addresses to host for all * multicast/broadcast packets received on STA side. */ - A_UINT32 mec_notify; + A_UINT32 mec_notify; } htt_tx_de_classify_stats_tlv; typedef struct { htt_tlv_hdr_t tlv_hdr; - A_UINT32 eok; - A_UINT32 classify_done; - A_UINT32 lookup_failed; - A_UINT32 send_host_dhcp; - A_UINT32 send_host_mcast; - A_UINT32 send_host_unknown_dest; - A_UINT32 send_host; - A_UINT32 status_invalid; + A_UINT32 eok; + A_UINT32 classify_done; + A_UINT32 lookup_failed; + A_UINT32 send_host_dhcp; + A_UINT32 send_host_mcast; + A_UINT32 send_host_unknown_dest; + A_UINT32 send_host; + A_UINT32 status_invalid; } htt_tx_de_classify_status_stats_tlv; typedef struct { htt_tlv_hdr_t tlv_hdr; - A_UINT32 enqueued_pkts; - A_UINT32 to_tqm; - A_UINT32 to_tqm_bypass; + A_UINT32 enqueued_pkts; + A_UINT32 to_tqm; + A_UINT32 to_tqm_bypass; } htt_tx_de_enqueue_packets_stats_tlv; typedef struct { htt_tlv_hdr_t tlv_hdr; - A_UINT32 discarded_pkts; - A_UINT32 local_frames; - A_UINT32 is_ext_msdu; + A_UINT32 discarded_pkts; + A_UINT32 local_frames; + A_UINT32 is_ext_msdu; } htt_tx_de_enqueue_discard_stats_tlv; typedef struct { htt_tlv_hdr_t tlv_hdr; - A_UINT32 tcl_dummy_frame; - A_UINT32 tqm_dummy_frame; - A_UINT32 tqm_notify_frame; - A_UINT32 fw2wbm_enq; - A_UINT32 tqm_bypass_frame; + A_UINT32 tcl_dummy_frame; + A_UINT32 tqm_dummy_frame; + A_UINT32 tqm_notify_frame; + A_UINT32 fw2wbm_enq; + A_UINT32 tqm_bypass_frame; } htt_tx_de_compl_stats_tlv; -#define HTT_TX_DE_CMN_STATS_MAC_ID_M 0x000000ff -#define HTT_TX_DE_CMN_STATS_MAC_ID_S 0 +#define HTT_TX_DE_CMN_STATS_MAC_ID_M 0x000000ff +#define HTT_TX_DE_CMN_STATS_MAC_ID_S 0 #define HTT_TX_DE_CMN_STATS_MAC_ID_GET(_var) \ (((_var) & HTT_TX_DE_CMN_STATS_MAC_ID_M) >> \ - HTT_TX_DE_CMN_STATS_MAC_ID_S) + HTT_TX_DE_CMN_STATS_MAC_ID_S) #define HTT_TX_DE_CMN_STATS_MAC_ID_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_TX_DE_CMN_STATS_MAC_ID, _val); \ - ((_var) |= ((_val) << HTT_TX_DE_CMN_STATS_MAC_ID_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_TX_DE_CMN_STATS_MAC_ID, _val); \ + ((_var) |= ((_val) << HTT_TX_DE_CMN_STATS_MAC_ID_S)); \ + } while (0) /* * The htt_tx_de_fw2wbm_ring_full_hist_tlv is a histogram of time we waited @@ -2222,8 +2234,9 @@ typedef struct { * ENTRIES_PER_BIN_COUNT) */ typedef struct { - htt_tlv_hdr_t tlv_hdr; - A_UINT32 fw2wbm_ring_full_hist[1]; + htt_tlv_hdr_t tlv_hdr; + + A_UINT32 fw2wbm_ring_full_hist[1]; } htt_tx_de_fw2wbm_ring_full_hist_tlv; typedef struct { @@ -2231,15 +2244,15 @@ typedef struct { /* BIT [ 7 : 0] :- mac_id * BIT [31 : 8] :- reserved */ - A_UINT32 mac_id__word; + A_UINT32 mac_id__word; /* Global Stats */ - A_UINT32 tcl2fw_entry_count; - A_UINT32 not_to_fw; - A_UINT32 invalid_pdev_vdev_peer; - A_UINT32 tcl_res_invalid_addrx; - A_UINT32 wbm2fw_entry_count; - A_UINT32 invalid_pdev; + A_UINT32 tcl2fw_entry_count; + A_UINT32 not_to_fw; + A_UINT32 invalid_pdev_vdev_peer; + A_UINT32 tcl_res_invalid_addrx; + A_UINT32 wbm2fw_entry_count; + A_UINT32 invalid_pdev; } htt_tx_de_cmn_stats_tlv; /* STATS_TYPE : HTT_DBG_EXT_STATS_TX_DE_INFO @@ -2272,119 +2285,119 @@ typedef struct { /* == RING-IF STATS == */ /* DWORD num_elems__prefetch_tail_idx */ -#define HTT_RING_IF_STATS_NUM_ELEMS_M 0x0000ffff -#define HTT_RING_IF_STATS_NUM_ELEMS_S 0 +#define HTT_RING_IF_STATS_NUM_ELEMS_M 0x0000ffff +#define HTT_RING_IF_STATS_NUM_ELEMS_S 0 -#define HTT_RING_IF_STATS_PREFETCH_TAIL_IDX_M 0xffff0000 -#define HTT_RING_IF_STATS_PREFETCH_TAIL_IDX_S 16 +#define HTT_RING_IF_STATS_PREFETCH_TAIL_IDX_M 0xffff0000 +#define HTT_RING_IF_STATS_PREFETCH_TAIL_IDX_S 16 #define HTT_RING_IF_STATS_NUM_ELEMS_GET(_var) \ (((_var) & HTT_RING_IF_STATS_NUM_ELEMS_M) >> \ - HTT_RING_IF_STATS_NUM_ELEMS_S) + HTT_RING_IF_STATS_NUM_ELEMS_S) #define HTT_RING_IF_STATS_NUM_ELEMS_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_RING_IF_STATS_NUM_ELEMS, _val); \ - ((_var) |= ((_val) << HTT_RING_IF_STATS_NUM_ELEMS_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_RING_IF_STATS_NUM_ELEMS, _val); \ + ((_var) |= ((_val) << HTT_RING_IF_STATS_NUM_ELEMS_S)); \ + } while (0) #define HTT_RING_IF_STATS_PREFETCH_TAIL_IDX_GET(_var) \ (((_var) & HTT_RING_IF_STATS_PREFETCH_TAIL_IDX_M) >> \ - HTT_RING_IF_STATS_PREFETCH_TAIL_IDX_S) + HTT_RING_IF_STATS_PREFETCH_TAIL_IDX_S) #define HTT_RING_IF_STATS_PREFETCH_TAIL_IDX_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_RING_IF_STATS_PREFETCH_TAIL_IDX, _val); \ - ((_var) |= ((_val) << HTT_RING_IF_STATS_PREFETCH_TAIL_IDX_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_RING_IF_STATS_PREFETCH_TAIL_IDX, _val); \ + ((_var) |= ((_val) << HTT_RING_IF_STATS_PREFETCH_TAIL_IDX_S)); \ + } while (0) /* DWORD head_idx__tail_idx */ -#define HTT_RING_IF_STATS_HEAD_IDX_M 0x0000ffff -#define HTT_RING_IF_STATS_HEAD_IDX_S 0 +#define HTT_RING_IF_STATS_HEAD_IDX_M 0x0000ffff +#define HTT_RING_IF_STATS_HEAD_IDX_S 0 -#define HTT_RING_IF_STATS_TAIL_IDX_M 0xffff0000 -#define HTT_RING_IF_STATS_TAIL_IDX_S 16 +#define HTT_RING_IF_STATS_TAIL_IDX_M 0xffff0000 +#define HTT_RING_IF_STATS_TAIL_IDX_S 16 #define HTT_RING_IF_STATS_HEAD_IDX_GET(_var) \ (((_var) & HTT_RING_IF_STATS_HEAD_IDX_M) >> \ - HTT_RING_IF_STATS_HEAD_IDX_S) + HTT_RING_IF_STATS_HEAD_IDX_S) #define HTT_RING_IF_STATS_HEAD_IDX_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_RING_IF_STATS_HEAD_IDX, _val); \ - ((_var) |= ((_val) << HTT_RING_IF_STATS_HEAD_IDX_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_RING_IF_STATS_HEAD_IDX, _val); \ + ((_var) |= ((_val) << HTT_RING_IF_STATS_HEAD_IDX_S)); \ + } while (0) #define HTT_RING_IF_STATS_TAIL_IDX_GET(_var) \ (((_var) & HTT_RING_IF_STATS_TAIL_IDX_M) >> \ - HTT_RING_IF_STATS_TAIL_IDX_S) + HTT_RING_IF_STATS_TAIL_IDX_S) #define HTT_RING_IF_STATS_TAIL_IDX_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_RING_IF_STATS_TAIL_IDX, _val); \ - ((_var) |= ((_val) << HTT_RING_IF_STATS_TAIL_IDX_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_RING_IF_STATS_TAIL_IDX, _val); \ + ((_var) |= ((_val) << HTT_RING_IF_STATS_TAIL_IDX_S)); \ + } while (0) /* DWORD shadow_head_idx__shadow_tail_idx */ -#define HTT_RING_IF_STATS_SHADOW_HEAD_IDX_M 0x0000ffff -#define HTT_RING_IF_STATS_SHADOW_HEAD_IDX_S 0 +#define HTT_RING_IF_STATS_SHADOW_HEAD_IDX_M 0x0000ffff +#define HTT_RING_IF_STATS_SHADOW_HEAD_IDX_S 0 -#define HTT_RING_IF_STATS_SHADOW_TAIL_IDX_M 0xffff0000 -#define HTT_RING_IF_STATS_SHADOW_TAIL_IDX_S 16 +#define HTT_RING_IF_STATS_SHADOW_TAIL_IDX_M 0xffff0000 +#define HTT_RING_IF_STATS_SHADOW_TAIL_IDX_S 16 #define HTT_RING_IF_STATS_SHADOW_HEAD_IDX_GET(_var) \ (((_var) & HTT_RING_IF_STATS_SHADOW_HEAD_IDX_M) >> \ - HTT_RING_IF_STATS_SHADOW_HEAD_IDX_S) + HTT_RING_IF_STATS_SHADOW_HEAD_IDX_S) #define HTT_RING_IF_STATS_SHADOW_HEAD_IDX_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_RING_IF_STATS_SHADOW_HEAD_IDX, _val); \ - ((_var) |= ((_val) << HTT_RING_IF_STATS_SHADOW_HEAD_IDX_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_RING_IF_STATS_SHADOW_HEAD_IDX, _val); \ + ((_var) |= ((_val) << HTT_RING_IF_STATS_SHADOW_HEAD_IDX_S)); \ + } while (0) #define HTT_RING_IF_STATS_SHADOW_TAIL_IDX_GET(_var) \ (((_var) & HTT_RING_IF_STATS_SHADOW_TAIL_IDX_M) >> \ - HTT_RING_IF_STATS_SHADOW_TAIL_IDX_S) + HTT_RING_IF_STATS_SHADOW_TAIL_IDX_S) #define HTT_RING_IF_STATS_SHADOW_TAIL_IDX_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_RING_IF_STATS_SHADOW_TAIL_IDX, _val); \ - ((_var) |= ((_val) << HTT_RING_IF_STATS_SHADOW_TAIL_IDX_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_RING_IF_STATS_SHADOW_TAIL_IDX, _val); \ + ((_var) |= ((_val) << HTT_RING_IF_STATS_SHADOW_TAIL_IDX_S)); \ + } while (0) /* DWORD lwm_thresh__hwm_thresh */ -#define HTT_RING_IF_STATS_LWM_THRESHOLD_M 0x0000ffff -#define HTT_RING_IF_STATS_LWM_THRESHOLD_S 0 +#define HTT_RING_IF_STATS_LWM_THRESHOLD_M 0x0000ffff +#define HTT_RING_IF_STATS_LWM_THRESHOLD_S 0 -#define HTT_RING_IF_STATS_HWM_THRESHOLD_M 0xffff0000 -#define HTT_RING_IF_STATS_HWM_THRESHOLD_S 16 +#define HTT_RING_IF_STATS_HWM_THRESHOLD_M 0xffff0000 +#define HTT_RING_IF_STATS_HWM_THRESHOLD_S 16 #define HTT_RING_IF_STATS_LWM_THRESHOLD_GET(_var) \ (((_var) & HTT_RING_IF_STATS_LWM_THRESHOLD_M) >> \ - HTT_RING_IF_STATS_LWM_THRESHOLD_S) + HTT_RING_IF_STATS_LWM_THRESHOLD_S) #define HTT_RING_IF_STATS_LWM_THRESHOLD_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_RING_IF_STATS_LWM_THRESHOLD, _val); \ - ((_var) |= ((_val) << HTT_RING_IF_STATS_LWM_THRESHOLD_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_RING_IF_STATS_LWM_THRESHOLD, _val); \ + ((_var) |= ((_val) << HTT_RING_IF_STATS_LWM_THRESHOLD_S)); \ + } while (0) #define HTT_RING_IF_STATS_HWM_THRESHOLD_GET(_var) \ (((_var) & HTT_RING_IF_STATS_HWM_THRESHOLD_M) >> \ - HTT_RING_IF_STATS_HWM_THRESHOLD_S) + HTT_RING_IF_STATS_HWM_THRESHOLD_S) #define HTT_RING_IF_STATS_HWM_THRESHOLD_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_RING_IF_STATS_HWM_THRESHOLD, _val); \ - ((_var) |= ((_val) << HTT_RING_IF_STATS_HWM_THRESHOLD_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_RING_IF_STATS_HWM_THRESHOLD, _val); \ + ((_var) |= ((_val) << HTT_RING_IF_STATS_HWM_THRESHOLD_S)); \ + } while (0) - -#define HTT_STATS_LOW_WM_BINS 5 -#define HTT_STATS_HIGH_WM_BINS 5 +#define HTT_STATS_LOW_WM_BINS 5 +#define HTT_STATS_HIGH_WM_BINS 5 typedef struct { A_UINT32 base_addr; /* DWORD aligned base memory address of the ring */ + A_UINT32 elem_size; /* size of each ring element */ /* BIT [15 : 0] :- num_elems @@ -2408,25 +2421,25 @@ typedef struct { A_UINT32 underrun_hit_count; A_UINT32 prod_blockwait_count; A_UINT32 cons_blockwait_count; - A_UINT32 low_wm_hit_count[HTT_STATS_LOW_WM_BINS]; /* FIX THIS: explain what each array element is for */ + A_UINT32 low_wm_hit_count[HTT_STATS_LOW_WM_BINS]; /* FIX THIS: explain what each array element is for */ A_UINT32 high_wm_hit_count[HTT_STATS_HIGH_WM_BINS]; /* FIX THIS: explain what each array element is for */ } htt_ring_if_stats_tlv; -#define HTT_RING_IF_CMN_MAC_ID_M 0x000000ff -#define HTT_RING_IF_CMN_MAC_ID_S 0 +#define HTT_RING_IF_CMN_MAC_ID_M 0x000000ff +#define HTT_RING_IF_CMN_MAC_ID_S 0 #define HTT_RING_IF_CMN_MAC_ID_GET(_var) \ (((_var) & HTT_RING_IF_CMN_MAC_ID_M) >> \ - HTT_RING_IF_CMN_MAC_ID_S) + HTT_RING_IF_CMN_MAC_ID_S) #define HTT_RING_IF_CMN_MAC_ID_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_RING_IF_CMN_MAC_ID, _val); \ - ((_var) |= ((_val) << HTT_RING_IF_CMN_MAC_ID_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_RING_IF_CMN_MAC_ID, _val); \ + ((_var) |= ((_val) << HTT_RING_IF_CMN_MAC_ID_S)); \ + } while (0) typedef struct { - htt_tlv_hdr_t tlv_hdr; + htt_tlv_hdr_t tlv_hdr; /* BIT [ 7 : 0] :- mac_id * BIT [31 : 8] :- reserved @@ -2449,7 +2462,7 @@ typedef struct { htt_ring_if_cmn_tlv cmn_tlv; /* Variable based on the Number of records. */ struct _ring_if { - htt_stats_string_tlv ring_str_tlv; + htt_stats_string_tlv ring_str_tlv; htt_ring_if_stats_tlv ring_tlv; } r[1]; } htt_ring_if_stats_t; @@ -2460,13 +2473,13 @@ typedef struct { /* NOTE: Variable length TLV, use length spec to infer array size */ typedef struct { - htt_tlv_hdr_t tlv_hdr; + htt_tlv_hdr_t tlv_hdr; /* Number of DWORDS used per user and per client */ A_UINT32 dwords_used_by_user_n[1]; } htt_sfm_client_user_tlv_v; typedef struct { - htt_tlv_hdr_t tlv_hdr; + htt_tlv_hdr_t tlv_hdr; /* Client ID */ A_UINT32 client_id; /* Minimum number of buffers */ @@ -2483,21 +2496,21 @@ typedef struct { A_UINT32 num_users; } htt_sfm_client_tlv; -#define HTT_SFM_CMN_MAC_ID_M 0x000000ff -#define HTT_SFM_CMN_MAC_ID_S 0 +#define HTT_SFM_CMN_MAC_ID_M 0x000000ff +#define HTT_SFM_CMN_MAC_ID_S 0 #define HTT_SFM_CMN_MAC_ID_GET(_var) \ (((_var) & HTT_SFM_CMN_MAC_ID_M) >> \ - HTT_SFM_CMN_MAC_ID_S) + HTT_SFM_CMN_MAC_ID_S) #define HTT_SFM_CMN_MAC_ID_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_SFM_CMN_MAC_ID, _val); \ - ((_var) |= ((_val) << HTT_SFM_CMN_MAC_ID_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_SFM_CMN_MAC_ID, _val); \ + ((_var) |= ((_val) << HTT_SFM_CMN_MAC_ID_S)); \ + } while (0) typedef struct { - htt_tlv_hdr_t tlv_hdr; + htt_tlv_hdr_t tlv_hdr; /* BIT [ 7 : 0] :- mac_id * BIT [31 : 8] :- reserved @@ -2510,7 +2523,7 @@ typedef struct { /* DEALLOCATE_BUFFERS, refer to register SFM_R0_DEALLOCATE_BUFFERS */ A_UINT32 deallocate_bufs; /* Number of Records */ - A_UINT32 num_records; + A_UINT32 num_records; } htt_sfm_cmn_tlv; /* STATS_TYPE : HTT_DBG_EXT_STATS_RING_IF_INFO @@ -2528,177 +2541,176 @@ typedef struct { htt_sfm_cmn_tlv cmn_tlv; /* Variable based on the Number of records. */ struct _sfm_client { - htt_stats_string_tlv client_str_tlv; - htt_sfm_client_tlv client_tlv; + htt_stats_string_tlv client_str_tlv; + htt_sfm_client_tlv client_tlv; htt_sfm_client_user_tlv_v user_tlv; } r[1]; } htt_sfm_stats_t; /* == SRNG STATS == */ /* DWORD mac_id__ring_id__arena__ep */ -#define HTT_SRING_STATS_MAC_ID_M 0x000000ff -#define HTT_SRING_STATS_MAC_ID_S 0 +#define HTT_SRING_STATS_MAC_ID_M 0x000000ff +#define HTT_SRING_STATS_MAC_ID_S 0 -#define HTT_SRING_STATS_RING_ID_M 0x0000ff00 -#define HTT_SRING_STATS_RING_ID_S 8 +#define HTT_SRING_STATS_RING_ID_M 0x0000ff00 +#define HTT_SRING_STATS_RING_ID_S 8 -#define HTT_SRING_STATS_ARENA_M 0x00ff0000 -#define HTT_SRING_STATS_ARENA_S 16 +#define HTT_SRING_STATS_ARENA_M 0x00ff0000 +#define HTT_SRING_STATS_ARENA_S 16 -#define HTT_SRING_STATS_EP_TYPE_M 0x01000000 -#define HTT_SRING_STATS_EP_TYPE_S 24 +#define HTT_SRING_STATS_EP_TYPE_M 0x01000000 +#define HTT_SRING_STATS_EP_TYPE_S 24 #define HTT_SRING_STATS_MAC_ID_GET(_var) \ (((_var) & HTT_SRING_STATS_MAC_ID_M) >> \ - HTT_SRING_STATS_MAC_ID_S) + HTT_SRING_STATS_MAC_ID_S) #define HTT_SRING_STATS_MAC_ID_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_SRING_STATS_MAC_ID, _val); \ - ((_var) |= ((_val) << HTT_SRING_STATS_MAC_ID_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_SRING_STATS_MAC_ID, _val); \ + ((_var) |= ((_val) << HTT_SRING_STATS_MAC_ID_S)); \ + } while (0) #define HTT_SRING_STATS_RING_ID_GET(_var) \ (((_var) & HTT_SRING_STATS_RING_ID_M) >> \ - HTT_SRING_STATS_RING_ID_S) + HTT_SRING_STATS_RING_ID_S) #define HTT_SRING_STATS_RING_ID_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_SRING_STATS_RING_ID, _val); \ - ((_var) |= ((_val) << HTT_SRING_STATS_RING_ID_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_SRING_STATS_RING_ID, _val); \ + ((_var) |= ((_val) << HTT_SRING_STATS_RING_ID_S)); \ + } while (0) #define HTT_SRING_STATS_ARENA_GET(_var) \ (((_var) & HTT_SRING_STATS_ARENA_M) >> \ - HTT_SRING_STATS_ARENA_S) + HTT_SRING_STATS_ARENA_S) #define HTT_SRING_STATS_ARENA_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_SRING_STATS_ARENA, _val); \ - ((_var) |= ((_val) << HTT_SRING_STATS_ARENA_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_SRING_STATS_ARENA, _val); \ + ((_var) |= ((_val) << HTT_SRING_STATS_ARENA_S)); \ + } while (0) #define HTT_SRING_STATS_EP_TYPE_GET(_var) \ (((_var) & HTT_SRING_STATS_EP_TYPE_M) >> \ - HTT_SRING_STATS_EP_TYPE_S) + HTT_SRING_STATS_EP_TYPE_S) #define HTT_SRING_STATS_EP_TYPE_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_SRING_STATS_EP_TYPE, _val); \ - ((_var) |= ((_val) << HTT_SRING_STATS_EP_TYPE_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_SRING_STATS_EP_TYPE, _val); \ + ((_var) |= ((_val) << HTT_SRING_STATS_EP_TYPE_S)); \ + } while (0) /* DWORD num_avail_words__num_valid_words */ -#define HTT_SRING_STATS_NUM_AVAIL_WORDS_M 0x0000ffff -#define HTT_SRING_STATS_NUM_AVAIL_WORDS_S 0 +#define HTT_SRING_STATS_NUM_AVAIL_WORDS_M 0x0000ffff +#define HTT_SRING_STATS_NUM_AVAIL_WORDS_S 0 -#define HTT_SRING_STATS_NUM_VALID_WORDS_M 0xffff0000 -#define HTT_SRING_STATS_NUM_VALID_WORDS_S 16 +#define HTT_SRING_STATS_NUM_VALID_WORDS_M 0xffff0000 +#define HTT_SRING_STATS_NUM_VALID_WORDS_S 16 #define HTT_SRING_STATS_NUM_AVAIL_WORDS_GET(_var) \ (((_var) & HTT_SRING_STATS_NUM_AVAIL_WORDS_M) >> \ - HTT_SRING_STATS_NUM_AVAIL_WORDS_S) + HTT_SRING_STATS_NUM_AVAIL_WORDS_S) #define HTT_SRING_STATS_NUM_AVAIL_WORDS_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_SRING_STATS_NUM_AVAIL_WORDS, _val); \ - ((_var) |= ((_val) << HTT_SRING_STATS_NUM_AVAIL_WORDS_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_SRING_STATS_NUM_AVAIL_WORDS, _val); \ + ((_var) |= ((_val) << HTT_SRING_STATS_NUM_AVAIL_WORDS_S)); \ + } while (0) #define HTT_SRING_STATS_NUM_VALID_WORDS_GET(_var) \ (((_var) & HTT_SRING_STATS_NUM_VALID_WORDS_M) >> \ - HTT_SRING_STATS_NUM_VALID_WORDS_S) + HTT_SRING_STATS_NUM_VALID_WORDS_S) #define HTT_SRING_STATS_NUM_VALID_WORDS_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_SRING_STATS_NUM_VALID_WORDS, _val); \ - ((_var) |= ((_val) << HTT_SRING_STATS_NUM_VALID_WORDS_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_SRING_STATS_NUM_VALID_WORDS, _val); \ + ((_var) |= ((_val) << HTT_SRING_STATS_NUM_VALID_WORDS_S)); \ + } while (0) /* DWORD head_ptr__tail_ptr */ -#define HTT_SRING_STATS_HEAD_PTR_M 0x0000ffff -#define HTT_SRING_STATS_HEAD_PTR_S 0 +#define HTT_SRING_STATS_HEAD_PTR_M 0x0000ffff +#define HTT_SRING_STATS_HEAD_PTR_S 0 -#define HTT_SRING_STATS_TAIL_PTR_M 0xffff0000 -#define HTT_SRING_STATS_TAIL_PTR_S 16 +#define HTT_SRING_STATS_TAIL_PTR_M 0xffff0000 +#define HTT_SRING_STATS_TAIL_PTR_S 16 #define HTT_SRING_STATS_HEAD_PTR_GET(_var) \ (((_var) & HTT_SRING_STATS_HEAD_PTR_M) >> \ - HTT_SRING_STATS_HEAD_PTR_S) + HTT_SRING_STATS_HEAD_PTR_S) #define HTT_SRING_STATS_HEAD_PTR_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_SRING_STATS_HEAD_PTR, _val); \ - ((_var) |= ((_val) << HTT_SRING_STATS_HEAD_PTR_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_SRING_STATS_HEAD_PTR, _val); \ + ((_var) |= ((_val) << HTT_SRING_STATS_HEAD_PTR_S)); \ + } while (0) #define HTT_SRING_STATS_TAIL_PTR_GET(_var) \ (((_var) & HTT_SRING_STATS_TAIL_PTR_M) >> \ - HTT_SRING_STATS_TAIL_PTR_S) + HTT_SRING_STATS_TAIL_PTR_S) #define HTT_SRING_STATS_TAIL_PTR_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_SRING_STATS_TAIL_PTR, _val); \ - ((_var) |= ((_val) << HTT_SRING_STATS_TAIL_PTR_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_SRING_STATS_TAIL_PTR, _val); \ + ((_var) |= ((_val) << HTT_SRING_STATS_TAIL_PTR_S)); \ + } while (0) /* DWORD consumer_empty__producer_full */ -#define HTT_SRING_STATS_CONSUMER_EMPTY_M 0x0000ffff -#define HTT_SRING_STATS_CONSUMER_EMPTY_S 0 +#define HTT_SRING_STATS_CONSUMER_EMPTY_M 0x0000ffff +#define HTT_SRING_STATS_CONSUMER_EMPTY_S 0 -#define HTT_SRING_STATS_PRODUCER_FULL_M 0xffff0000 -#define HTT_SRING_STATS_PRODUCER_FULL_S 16 +#define HTT_SRING_STATS_PRODUCER_FULL_M 0xffff0000 +#define HTT_SRING_STATS_PRODUCER_FULL_S 16 #define HTT_SRING_STATS_CONSUMER_EMPTY_GET(_var) \ (((_var) & HTT_SRING_STATS_CONSUMER_EMPTY_M) >> \ - HTT_SRING_STATS_CONSUMER_EMPTY_S) + HTT_SRING_STATS_CONSUMER_EMPTY_S) #define HTT_SRING_STATS_CONSUMER_EMPTY_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_SRING_STATS_CONSUMER_EMPTY, _val); \ - ((_var) |= ((_val) << HTT_SRING_STATS_CONSUMER_EMPTY_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_SRING_STATS_CONSUMER_EMPTY, _val); \ + ((_var) |= ((_val) << HTT_SRING_STATS_CONSUMER_EMPTY_S)); \ + } while (0) #define HTT_SRING_STATS_PRODUCER_FULL_GET(_var) \ (((_var) & HTT_SRING_STATS_PRODUCER_FULL_M) >> \ - HTT_SRING_STATS_PRODUCER_FULL_S) + HTT_SRING_STATS_PRODUCER_FULL_S) #define HTT_SRING_STATS_PRODUCER_FULL_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_SRING_STATS_PRODUCER_FULL, _val); \ - ((_var) |= ((_val) << HTT_SRING_STATS_PRODUCER_FULL_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_SRING_STATS_PRODUCER_FULL, _val); \ + ((_var) |= ((_val) << HTT_SRING_STATS_PRODUCER_FULL_S)); \ + } while (0) /* DWORD prefetch_count__internal_tail_ptr */ -#define HTT_SRING_STATS_PREFETCH_COUNT_M 0x0000ffff -#define HTT_SRING_STATS_PREFETCH_COUNT_S 0 +#define HTT_SRING_STATS_PREFETCH_COUNT_M 0x0000ffff +#define HTT_SRING_STATS_PREFETCH_COUNT_S 0 -#define HTT_SRING_STATS_INTERNAL_TP_M 0xffff0000 -#define HTT_SRING_STATS_INTERNAL_TP_S 16 +#define HTT_SRING_STATS_INTERNAL_TP_M 0xffff0000 +#define HTT_SRING_STATS_INTERNAL_TP_S 16 #define HTT_SRING_STATS_PREFETCH_COUNT_GET(_var) \ (((_var) & HTT_SRING_STATS_PREFETCH_COUNT_M) >> \ - HTT_SRING_STATS_PREFETCH_COUNT_S) + HTT_SRING_STATS_PREFETCH_COUNT_S) #define HTT_SRING_STATS_PREFETCH_COUNT_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_SRING_STATS_PREFETCH_COUNT, _val); \ - ((_var) |= ((_val) << HTT_SRING_STATS_PREFETCH_COUNT_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_SRING_STATS_PREFETCH_COUNT, _val); \ + ((_var) |= ((_val) << HTT_SRING_STATS_PREFETCH_COUNT_S)); \ + } while (0) #define HTT_SRING_STATS_INTERNAL_TP_GET(_var) \ (((_var) & HTT_SRING_STATS_INTERNAL_TP_M) >> \ - HTT_SRING_STATS_INTERNAL_TP_S) + HTT_SRING_STATS_INTERNAL_TP_S) #define HTT_SRING_STATS_INTERNAL_TP_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_SRING_STATS_INTERNAL_TP, _val); \ - ((_var) |= ((_val) << HTT_SRING_STATS_INTERNAL_TP_S)); \ - } while (0) - + do { \ + HTT_CHECK_SET_VAL(HTT_SRING_STATS_INTERNAL_TP, _val); \ + ((_var) |= ((_val) << HTT_SRING_STATS_INTERNAL_TP_S)); \ + } while (0) typedef struct { - htt_tlv_hdr_t tlv_hdr; + htt_tlv_hdr_t tlv_hdr; /* BIT [ 7 : 0] :- mac_id * BIT [15 : 8] :- ring_id @@ -2738,8 +2750,8 @@ typedef struct { } htt_sring_stats_tlv; typedef struct { - htt_tlv_hdr_t tlv_hdr; - A_UINT32 num_records; + htt_tlv_hdr_t tlv_hdr; + A_UINT32 num_records; } htt_sring_cmn_tlv; /* STATS_TYPE : HTT_DBG_EXT_STATS_SRNG_INFO @@ -2757,38 +2769,38 @@ typedef struct { /* Variable based on the Number of records. */ struct _sring_stats { htt_stats_string_tlv sring_str_tlv; - htt_sring_stats_tlv sring_stats_tlv; + htt_sring_stats_tlv sring_stats_tlv; } r[1]; } htt_sring_stats_t; - /* == PDEV TX RATE CTRL STATS == */ -#define HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS 12 -#define HTT_TX_PDEV_STATS_NUM_GI_COUNTERS 4 -#define HTT_TX_PDEV_STATS_NUM_DCM_COUNTERS 5 -#define HTT_TX_PDEV_STATS_NUM_BW_COUNTERS 4 -#define HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS 8 -#define HTT_TX_PDEV_STATS_NUM_PREAMBLE_TYPES HTT_STATS_PREAM_COUNT -#define HTT_TX_PDEV_STATS_NUM_LEGACY_CCK_STATS 4 -#define HTT_TX_PDEV_STATS_NUM_LEGACY_OFDM_STATS 8 -#define HTT_TX_PDEV_STATS_NUM_LTF 4 +#define HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS 12 +#define HTT_TX_PDEV_STATS_NUM_GI_COUNTERS 4 +#define HTT_TX_PDEV_STATS_NUM_DCM_COUNTERS 5 +#define HTT_TX_PDEV_STATS_NUM_BW_COUNTERS 4 +#define HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS 8 +#define HTT_TX_PDEV_STATS_NUM_PREAMBLE_TYPES HTT_STATS_PREAM_COUNT +#define HTT_TX_PDEV_STATS_NUM_LEGACY_CCK_STATS 4 +#define HTT_TX_PDEV_STATS_NUM_LEGACY_OFDM_STATS 8 +#define HTT_TX_PDEV_STATS_NUM_LTF 4 +#define HTT_TX_PDEV_STATS_NUM_11AX_TRIGGER_TYPES 6 #define HTT_TX_NUM_OF_SOUNDING_STATS_WORDS \ (HTT_TX_PDEV_STATS_NUM_BW_COUNTERS * \ - HTT_TX_PDEV_STATS_NUM_AX_MUMIMO_USER_STATS) + HTT_TX_PDEV_STATS_NUM_AX_MUMIMO_USER_STATS) -#define HTT_TX_PDEV_RATE_STATS_MAC_ID_M 0x000000ff -#define HTT_TX_PDEV_RATE_STATS_MAC_ID_S 0 +#define HTT_TX_PDEV_RATE_STATS_MAC_ID_M 0x000000ff +#define HTT_TX_PDEV_RATE_STATS_MAC_ID_S 0 #define HTT_TX_PDEV_RATE_STATS_MAC_ID_GET(_var) \ (((_var) & HTT_TX_PDEV_RATE_STATS_MAC_ID_M) >> \ - HTT_TX_PDEV_RATE_STATS_MAC_ID_S) + HTT_TX_PDEV_RATE_STATS_MAC_ID_S) #define HTT_TX_PDEV_RATE_STATS_MAC_ID_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_TX_PDEV_RATE_STATS_MAC_ID, _val); \ - ((_var) |= ((_val) << HTT_TX_PDEV_RATE_STATS_MAC_ID_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_TX_PDEV_RATE_STATS_MAC_ID, _val); \ + ((_var) |= ((_val) << HTT_TX_PDEV_RATE_STATS_MAC_ID_S)); \ + } while (0) typedef struct { htt_tlv_hdr_t tlv_hdr; @@ -2811,7 +2823,7 @@ typedef struct { A_UINT32 tx_mu_mcs[HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS]; A_UINT32 tx_nss[HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS]; /* element 0,1, ...7 -> NSS 1,2, ...8 */ - A_UINT32 tx_bw[HTT_TX_PDEV_STATS_NUM_BW_COUNTERS]; /* element 0: 20 MHz, 1: 40 MHz, 2: 80 MHz, 3: 160 and 80+80 MHz */ + A_UINT32 tx_bw[HTT_TX_PDEV_STATS_NUM_BW_COUNTERS]; /* element 0: 20 MHz, 1: 40 MHz, 2: 80 MHz, 3: 160 and 80+80 MHz */ A_UINT32 tx_stbc[HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS]; A_UINT32 tx_pream[HTT_TX_PDEV_STATS_NUM_PREAMBLE_TYPES]; @@ -2864,6 +2876,7 @@ typedef struct { A_UINT32 ac_mu_mimo_tx_gi[HTT_TX_PDEV_STATS_NUM_GI_COUNTERS][HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS]; A_UINT32 ax_mu_mimo_tx_gi[HTT_TX_PDEV_STATS_NUM_GI_COUNTERS][HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS]; A_UINT32 ofdma_tx_gi[HTT_TX_PDEV_STATS_NUM_GI_COUNTERS][HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS]; + A_UINT32 trigger_type_11ax[HTT_TX_PDEV_STATS_NUM_11AX_TRIGGER_TYPES]; } htt_tx_pdev_rate_stats_tlv; /* STATS_TYPE : HTT_DBG_EXT_STATS_PDEV_TX_RATE @@ -2878,36 +2891,36 @@ typedef struct { htt_tx_pdev_rate_stats_tlv rate_tlv; } htt_tx_pdev_rate_stats_t; - /* == PDEV RX RATE CTRL STATS == */ -#define HTT_RX_PDEV_STATS_NUM_LEGACY_CCK_STATS 4 -#define HTT_RX_PDEV_STATS_NUM_LEGACY_OFDM_STATS 8 -#define HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS 12 -#define HTT_RX_PDEV_STATS_NUM_GI_COUNTERS 4 -#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_NUM_PREAMBLE_TYPES HTT_STATS_PREAM_COUNT -#define HTT_RX_PDEV_MAX_OFDMA_NUM_USER 8 +#define HTT_RX_PDEV_STATS_NUM_LEGACY_CCK_STATS 4 +#define HTT_RX_PDEV_STATS_NUM_LEGACY_OFDM_STATS 8 +#define HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS 12 +#define HTT_RX_PDEV_STATS_NUM_GI_COUNTERS 4 +#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_NUM_PREAMBLE_TYPES HTT_STATS_PREAM_COUNT +#define HTT_RX_PDEV_MAX_OFDMA_NUM_USER 8 #define HTT_RX_PDEV_STATS_RXEVM_MAX_PILOTS_PER_NSS 16 +#define HTT_RX_PDEV_STATS_NUM_RU_SIZE_COUNTERS 6 -#define HTT_RX_PDEV_RATE_STATS_MAC_ID_M 0x000000ff -#define HTT_RX_PDEV_RATE_STATS_MAC_ID_S 0 +#define HTT_RX_PDEV_RATE_STATS_MAC_ID_M 0x000000ff +#define HTT_RX_PDEV_RATE_STATS_MAC_ID_S 0 #define HTT_RX_PDEV_RATE_STATS_MAC_ID_GET(_var) \ (((_var) & HTT_RX_PDEV_RATE_STATS_MAC_ID_M) >> \ - HTT_RX_PDEV_RATE_STATS_MAC_ID_S) + HTT_RX_PDEV_RATE_STATS_MAC_ID_S) #define HTT_RX_PDEV_RATE_STATS_MAC_ID_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_RX_PDEV_RATE_STATS_MAC_ID, _val); \ - ((_var) |= ((_val) << HTT_RX_PDEV_RATE_STATS_MAC_ID_S)); \ - } while (0) - + do { \ + HTT_CHECK_SET_VAL(HTT_RX_PDEV_RATE_STATS_MAC_ID, _val); \ + ((_var) |= ((_val) << HTT_RX_PDEV_RATE_STATS_MAC_ID_S)); \ + } while (0) typedef struct { htt_tlv_hdr_t tlv_hdr; + /* BIT [ 7 : 0] :- mac_id * BIT [31 : 8] :- reserved */ @@ -2928,11 +2941,11 @@ typedef struct { A_UINT32 rx_stbc[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS]; A_UINT32 rx_bw[HTT_RX_PDEV_STATS_NUM_BW_COUNTERS]; /* element 0: 20 MHz, 1: 40 MHz, 2: 80 MHz, 3: 160 and 80+80 MHz */ A_UINT32 rx_pream[HTT_RX_PDEV_STATS_NUM_PREAMBLE_TYPES]; - A_UINT8 rssi_chain[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS][HTT_RX_PDEV_STATS_NUM_BW_COUNTERS]; /* units = dB above noise floor */ + A_UINT8 rssi_chain[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS][HTT_RX_PDEV_STATS_NUM_BW_COUNTERS]; /* units = dB above noise floor */ /* Counters to track number of rx packets in each GI in each mcs (0-11) */ A_UINT32 rx_gi[HTT_RX_PDEV_STATS_NUM_GI_COUNTERS][HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS]; - A_INT32 rssi_in_dbm; /* rx Signal Strength value in dBm unit */ + A_INT32 rssi_in_dbm; /* rx Signal Strength value in dBm unit */ A_UINT32 rx_11ax_su_ext; A_UINT32 rx_11ac_mumimo; @@ -2962,7 +2975,7 @@ typedef struct { A_UINT32 nss_count; A_UINT32 pilot_count; /* RxEVM stats in dB */ - A_INT32 rx_pilot_evm_dB[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS][HTT_RX_PDEV_STATS_RXEVM_MAX_PILOTS_PER_NSS]; + A_INT32 rx_pilot_evm_dB[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS][HTT_RX_PDEV_STATS_RXEVM_MAX_PILOTS_PER_NSS]; /* rx_pilot_evm_dB_mean: * EVM mean across pilots, computed as * mean(10*log10(rx_pilot_evm_linear)) = mean(rx_pilot_evm_dB) @@ -2977,10 +2990,17 @@ typedef struct { * BIT [7 : 4] :- IEEE80211_FC0_SUBTYPE * BIT [31 : 8] :- Reserved */ - A_UINT32 per_chain_rssi_pkt_type; + A_UINT32 per_chain_rssi_pkt_type; + A_INT8 rx_per_chain_rssi_in_dbm[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS][HTT_RX_PDEV_STATS_NUM_BW_COUNTERS]; + A_UINT32 rx_su_ndpa; + A_UINT32 rx_11ax_su_txbf_mcs[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS]; + A_UINT32 rx_mu_ndpa; + A_UINT32 rx_11ax_mu_txbf_mcs[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS]; + A_UINT32 rx_br_poll; + A_UINT32 rx_11ax_dl_ofdma_mcs[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS]; + A_UINT32 rx_11ax_dl_ofdma_ru[HTT_RX_PDEV_STATS_NUM_RU_SIZE_COUNTERS]; } htt_rx_pdev_rate_stats_tlv; - /* STATS_TYPE : HTT_DBG_EXT_STATS_PDEV_RX_RATE * TLV_TAGS: * - HTT_STATS_RX_PDEV_RATE_STATS_TAG @@ -2993,7 +3013,6 @@ typedef struct { htt_rx_pdev_rate_stats_tlv rate_tlv; } htt_rx_pdev_rate_stats_t; - /* == RX PDEV/SOC STATS == */ typedef struct { @@ -3034,7 +3053,6 @@ typedef struct { A_UINT32 refill_ring_empty_cnt[1]; /* HTT_RX_STATS_REFILL_MAX_RING */ } htt_rx_soc_fw_refill_ring_empty_tlv_v; - #define HTT_RX_SOC_FW_REFILL_RING_EMPTY_TLV_SZ(_num_elems) (sizeof(A_UINT32) * (_num_elems)) /* NOTE: Variable length TLV, use length spec to infer array size */ @@ -3046,22 +3064,22 @@ typedef struct { /* RXDMA error code from WBM released packets */ typedef enum { - HTT_RX_RXDMA_OVERFLOW_ERR = 0, - HTT_RX_RXDMA_MPDU_LENGTH_ERR = 1, - HTT_RX_RXDMA_FCS_ERR = 2, - HTT_RX_RXDMA_DECRYPT_ERR = 3, - HTT_RX_RXDMA_TKIP_MIC_ERR = 4, - HTT_RX_RXDMA_UNECRYPTED_ERR = 5, - HTT_RX_RXDMA_MSDU_LEN_ERR = 6, - HTT_RX_RXDMA_MSDU_LIMIT_ERR = 7, - HTT_RX_RXDMA_WIFI_PARSE_ERR = 8, - HTT_RX_RXDMA_AMSDU_PARSE_ERR = 9, - HTT_RX_RXDMA_SA_TIMEOUT_ERR = 10, - HTT_RX_RXDMA_DA_TIMEOUT_ERR = 11, - HTT_RX_RXDMA_FLOW_TIMEOUT_ERR = 12, - HTT_RX_RXDMA_FLUSH_REQUEST = 13, - HTT_RX_RXDMA_ERR_CODE_RVSD0 = 14, - HTT_RX_RXDMA_ERR_CODE_RVSD1 = 15, + HTT_RX_RXDMA_OVERFLOW_ERR = 0, + HTT_RX_RXDMA_MPDU_LENGTH_ERR = 1, + HTT_RX_RXDMA_FCS_ERR = 2, + HTT_RX_RXDMA_DECRYPT_ERR = 3, + HTT_RX_RXDMA_TKIP_MIC_ERR = 4, + HTT_RX_RXDMA_UNECRYPTED_ERR = 5, + HTT_RX_RXDMA_MSDU_LEN_ERR = 6, + HTT_RX_RXDMA_MSDU_LIMIT_ERR = 7, + HTT_RX_RXDMA_WIFI_PARSE_ERR = 8, + HTT_RX_RXDMA_AMSDU_PARSE_ERR = 9, + HTT_RX_RXDMA_SA_TIMEOUT_ERR = 10, + HTT_RX_RXDMA_DA_TIMEOUT_ERR = 11, + HTT_RX_RXDMA_FLOW_TIMEOUT_ERR = 12, + HTT_RX_RXDMA_FLUSH_REQUEST = 13, + HTT_RX_RXDMA_ERR_CODE_RVSD0 = 14, + HTT_RX_RXDMA_ERR_CODE_RVSD1 = 15, /* * This MAX_ERR_CODE should not be used in any host/target messages, @@ -3077,33 +3095,33 @@ typedef struct { htt_tlv_hdr_t tlv_hdr; /* NOTE: - * The mapping of RXDMA error types to rxdma_err array elements is HW dependent. - * It is expected but not required that the target will provide a rxdma_err element - * for each of the htt_rx_rxdma_error_code_enum values, up to but not including - * MAX_ERR_CODE. The host should ignore any array elements whose - * indices are >= the MAX_ERR_CODE value the host was compiled with. - */ + * The mapping of RXDMA error types to rxdma_err array elements is HW dependent. + * It is expected but not required that the target will provide a rxdma_err element + * for each of the htt_rx_rxdma_error_code_enum values, up to but not including + * MAX_ERR_CODE. The host should ignore any array elements whose + * indices are >= the MAX_ERR_CODE value the host was compiled with. + */ A_UINT32 rxdma_err[1]; /* HTT_RX_RXDMA_MAX_ERR_CODE */ } htt_rx_soc_fw_refill_ring_num_rxdma_err_tlv_v; /* REO error code from WBM released packets */ typedef enum { - HTT_RX_REO_QUEUE_DESC_ADDR_ZERO = 0, - HTT_RX_REO_QUEUE_DESC_NOT_VALID = 1, - HTT_RX_AMPDU_IN_NON_BA = 2, - HTT_RX_NON_BA_DUPLICATE = 3, - HTT_RX_BA_DUPLICATE = 4, - HTT_RX_REGULAR_FRAME_2K_JUMP = 5, - HTT_RX_BAR_FRAME_2K_JUMP = 6, - HTT_RX_REGULAR_FRAME_OOR = 7, - HTT_RX_BAR_FRAME_OOR = 8, - HTT_RX_BAR_FRAME_NO_BA_SESSION = 9, - HTT_RX_BAR_FRAME_SN_EQUALS_SSN = 10, - HTT_RX_PN_CHECK_FAILED = 11, - HTT_RX_2K_ERROR_HANDLING_FLAG_SET = 12, - HTT_RX_PN_ERROR_HANDLING_FLAG_SET = 13, - HTT_RX_QUEUE_DESCRIPTOR_BLOCKED_SET = 14, - HTT_RX_REO_ERR_CODE_RVSD = 15, + HTT_RX_REO_QUEUE_DESC_ADDR_ZERO = 0, + HTT_RX_REO_QUEUE_DESC_NOT_VALID = 1, + HTT_RX_AMPDU_IN_NON_BA = 2, + HTT_RX_NON_BA_DUPLICATE = 3, + HTT_RX_BA_DUPLICATE = 4, + HTT_RX_REGULAR_FRAME_2K_JUMP = 5, + HTT_RX_BAR_FRAME_2K_JUMP = 6, + HTT_RX_REGULAR_FRAME_OOR = 7, + HTT_RX_BAR_FRAME_OOR = 8, + HTT_RX_BAR_FRAME_NO_BA_SESSION = 9, + HTT_RX_BAR_FRAME_SN_EQUALS_SSN = 10, + HTT_RX_PN_CHECK_FAILED = 11, + HTT_RX_2K_ERROR_HANDLING_FLAG_SET = 12, + HTT_RX_PN_ERROR_HANDLING_FLAG_SET = 13, + HTT_RX_QUEUE_DESCRIPTOR_BLOCKED_SET = 14, + HTT_RX_REO_ERR_CODE_RVSD = 15, /* * This MAX_ERR_CODE should not be used in any host/target messages, @@ -3119,12 +3137,12 @@ typedef struct { htt_tlv_hdr_t tlv_hdr; /* NOTE: - * The mapping of REO error types to reo_err array elements is HW dependent. - * It is expected but not required that the target will provide a rxdma_err element - * for each of the htt_rx_reo_error_code_enum values, up to but not including - * MAX_ERR_CODE. The host should ignore any array elements whose - * indices are >= the MAX_ERR_CODE value the host was compiled with. - */ + * The mapping of REO error types to reo_err array elements is HW dependent. + * It is expected but not required that the target will provide a rxdma_err element + * for each of the htt_rx_reo_error_code_enum values, up to but not including + * MAX_ERR_CODE. The host should ignore any array elements whose + * indices are >= the MAX_ERR_CODE value the host was compiled with. + */ A_UINT32 reo_err[1]; /* HTT_RX_REO_MAX_ERR_CODE */ } htt_rx_soc_fw_refill_ring_num_reo_err_tlv_v; @@ -3133,28 +3151,28 @@ typedef struct { * Instead, use the constituent TLV structures to fill/parse. */ typedef struct { - htt_rx_soc_fw_stats_tlv fw_tlv; - htt_rx_soc_fw_refill_ring_empty_tlv_v fw_refill_ring_empty_tlv; - htt_rx_soc_fw_refill_ring_num_refill_tlv_v fw_refill_ring_num_refill_tlv; + htt_rx_soc_fw_stats_tlv fw_tlv; + htt_rx_soc_fw_refill_ring_empty_tlv_v fw_refill_ring_empty_tlv; + htt_rx_soc_fw_refill_ring_num_refill_tlv_v fw_refill_ring_num_refill_tlv; htt_rx_soc_fw_refill_ring_num_rxdma_err_tlv_v fw_refill_ring_num_rxdma_err_tlv; - htt_rx_soc_fw_refill_ring_num_reo_err_tlv_v fw_refill_ring_num_reo_err_tlv; + htt_rx_soc_fw_refill_ring_num_reo_err_tlv_v fw_refill_ring_num_reo_err_tlv; } htt_rx_soc_stats_t; /* == RX PDEV STATS == */ -#define HTT_RX_PDEV_FW_STATS_MAC_ID_M 0x000000ff -#define HTT_RX_PDEV_FW_STATS_MAC_ID_S 0 +#define HTT_RX_PDEV_FW_STATS_MAC_ID_M 0x000000ff +#define HTT_RX_PDEV_FW_STATS_MAC_ID_S 0 #define HTT_RX_PDEV_FW_STATS_MAC_ID_GET(_var) \ (((_var) & HTT_RX_PDEV_FW_STATS_MAC_ID_M) >> \ - HTT_RX_PDEV_FW_STATS_MAC_ID_S) + HTT_RX_PDEV_FW_STATS_MAC_ID_S) #define HTT_RX_PDEV_FW_STATS_MAC_ID_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_RX_PDEV_FW_STATS_MAC_ID, _val); \ - ((_var) |= ((_val) << HTT_RX_PDEV_FW_STATS_MAC_ID_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_RX_PDEV_FW_STATS_MAC_ID, _val); \ + ((_var) |= ((_val) << HTT_RX_PDEV_FW_STATS_MAC_ID_S)); \ + } while (0) -#define HTT_STATS_SUBTYPE_MAX 16 +#define HTT_STATS_SUBTYPE_MAX 16 typedef struct { htt_tlv_hdr_t tlv_hdr; @@ -3353,34 +3371,34 @@ typedef struct { * Instead, use the constituent TLV structures to fill/parse. */ typedef struct { - htt_rx_soc_stats_t soc_stats; - htt_rx_pdev_fw_stats_tlv fw_stats_tlv; + htt_rx_soc_stats_t soc_stats; + htt_rx_pdev_fw_stats_tlv fw_stats_tlv; htt_rx_pdev_fw_ring_mpdu_err_tlv_v fw_ring_mpdu_err_tlv; - htt_rx_pdev_fw_mpdu_drop_tlv_v fw_ring_mpdu_drop; - htt_rx_pdev_fw_stats_phy_err_tlv fw_stats_phy_err_tlv; + htt_rx_pdev_fw_mpdu_drop_tlv_v fw_ring_mpdu_drop; + htt_rx_pdev_fw_stats_phy_err_tlv fw_stats_phy_err_tlv; } htt_rx_pdev_stats_t; -#define HTT_PDEV_CCA_STATS_TX_FRAME_INFO_PRESENT (0x1) -#define HTT_PDEV_CCA_STATS_RX_FRAME_INFO_PRESENT (0x2) -#define HTT_PDEV_CCA_STATS_RX_CLEAR_INFO_PRESENT (0x4) -#define HTT_PDEV_CCA_STATS_MY_RX_FRAME_INFO_PRESENT (0x8) -#define HTT_PDEV_CCA_STATS_USEC_CNT_INFO_PRESENT (0x10) -#define HTT_PDEV_CCA_STATS_MED_RX_IDLE_INFO_PRESENT (0x20) -#define HTT_PDEV_CCA_STATS_MED_TX_IDLE_GLOBAL_INFO_PRESENT (0x40) -#define HTT_PDEV_CCA_STATS_CCA_OBBS_USEC_INFO_PRESENT (0x80) +#define HTT_PDEV_CCA_STATS_TX_FRAME_INFO_PRESENT (0x1) +#define HTT_PDEV_CCA_STATS_RX_FRAME_INFO_PRESENT (0x2) +#define HTT_PDEV_CCA_STATS_RX_CLEAR_INFO_PRESENT (0x4) +#define HTT_PDEV_CCA_STATS_MY_RX_FRAME_INFO_PRESENT (0x8) +#define HTT_PDEV_CCA_STATS_USEC_CNT_INFO_PRESENT (0x10) +#define HTT_PDEV_CCA_STATS_MED_RX_IDLE_INFO_PRESENT (0x20) +#define HTT_PDEV_CCA_STATS_MED_TX_IDLE_GLOBAL_INFO_PRESENT (0x40) +#define HTT_PDEV_CCA_STATS_CCA_OBBS_USEC_INFO_PRESENT (0x80) typedef struct { htt_tlv_hdr_t tlv_hdr; /* Below values are obtained from the HW Cycles counter registers */ - A_UINT32 tx_frame_usec; - A_UINT32 rx_frame_usec; - A_UINT32 rx_clear_usec; - A_UINT32 my_rx_frame_usec; - A_UINT32 usec_cnt; - A_UINT32 med_rx_idle_usec; - A_UINT32 med_tx_idle_global_usec; - A_UINT32 cca_obss_usec; + A_UINT32 tx_frame_usec; + A_UINT32 rx_frame_usec; + A_UINT32 rx_clear_usec; + A_UINT32 my_rx_frame_usec; + A_UINT32 usec_cnt; + A_UINT32 med_rx_idle_usec; + A_UINT32 med_tx_idle_global_usec; + A_UINT32 cca_obss_usec; } htt_pdev_stats_cca_counters_tlv; /* NOTE: THIS htt_pdev_cca_stats_hist_tlv STRUCTURE IS DEPRECATED, @@ -3391,10 +3409,10 @@ typedef struct { htt_tlv_hdr_t tlv_hdr; /* The channel number on which these stats were collected */ - A_UINT32 chan_num; + A_UINT32 chan_num; /* num of CCA records (Num of htt_pdev_stats_cca_counters_tlv)*/ - A_UINT32 num_records; + A_UINT32 num_records; /* * Bit map of valid CCA counters @@ -3409,7 +3427,7 @@ typedef struct { * * See HTT_PDEV_CCA_STATS_xxx_INFO_PRESENT defs */ - A_UINT32 valid_cca_counters_bitmap; + A_UINT32 valid_cca_counters_bitmap; /* Indicates the stats collection interval * Valid Values: @@ -3417,7 +3435,7 @@ typedef struct { * 1000 - For 1sec interval CCA histogram * 0xFFFFFFFF - For Cumulative CCA Stats */ - A_UINT32 collection_interval; + A_UINT32 collection_interval; /** * This will be followed by an array which contains the CCA stats @@ -3433,10 +3451,10 @@ typedef struct { htt_tlv_hdr_t tlv_hdr; /* The channel number on which these stats were collected */ - A_UINT32 chan_num; + A_UINT32 chan_num; /* num of CCA records (Num of htt_pdev_stats_cca_counters_tlv)*/ - A_UINT32 num_records; + A_UINT32 num_records; /* * Bit map of valid CCA counters @@ -3451,7 +3469,7 @@ typedef struct { * * See HTT_PDEV_CCA_STATS_xxx_INFO_PRESENT defs */ - A_UINT32 valid_cca_counters_bitmap; + A_UINT32 valid_cca_counters_bitmap; /* Indicates the stats collection interval * Valid Values: @@ -3459,7 +3477,7 @@ typedef struct { * 1000 - For 1sec interval CCA histogram * 0xFFFFFFFF - For Cumulative CCA Stats */ - A_UINT32 collection_interval; + A_UINT32 collection_interval; /** * This will be followed by an array which contains the CCA stats @@ -3471,77 +3489,77 @@ typedef struct { */ } htt_pdev_cca_stats_hist_v1_tlv; -#define HTT_TWT_SESSION_FLAG_FLOW_ID_M 0x0000ffff -#define HTT_TWT_SESSION_FLAG_FLOW_ID_S 0 +#define HTT_TWT_SESSION_FLAG_FLOW_ID_M 0x0000ffff +#define HTT_TWT_SESSION_FLAG_FLOW_ID_S 0 -#define HTT_TWT_SESSION_FLAG_BCAST_TWT_M 0x00010000 -#define HTT_TWT_SESSION_FLAG_BCAST_TWT_S 16 +#define HTT_TWT_SESSION_FLAG_BCAST_TWT_M 0x00010000 +#define HTT_TWT_SESSION_FLAG_BCAST_TWT_S 16 -#define HTT_TWT_SESSION_FLAG_TRIGGER_TWT_M 0x00020000 -#define HTT_TWT_SESSION_FLAG_TRIGGER_TWT_S 17 +#define HTT_TWT_SESSION_FLAG_TRIGGER_TWT_M 0x00020000 +#define HTT_TWT_SESSION_FLAG_TRIGGER_TWT_S 17 -#define HTT_TWT_SESSION_FLAG_ANNOUN_TWT_M 0x00040000 -#define HTT_TWT_SESSION_FLAG_ANNOUN_TWT_S 18 +#define HTT_TWT_SESSION_FLAG_ANNOUN_TWT_M 0x00040000 +#define HTT_TWT_SESSION_FLAG_ANNOUN_TWT_S 18 #define HTT_TWT_SESSION_FLAG_FLOW_ID_GET(_var) \ - (((_var) & HTT_TWT_SESSION_FLAG_FLOW_ID_M) >> \ - HTT_TWT_SESSION_FLAG_FLOW_ID_S) + (((_var) & HTT_TWT_SESSION_FLAG_FLOW_ID_M) >> \ + HTT_TWT_SESSION_FLAG_FLOW_ID_S) #define HTT_TWT_SESSION_FLAG_FLOW_ID_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_TWT_SESSION_FLAG_FLOW_ID, _val); \ - ((_var) |= ((_val) << HTT_TWT_SESSION_FLAG_FLOW_ID_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_TWT_SESSION_FLAG_FLOW_ID, _val); \ + ((_var) |= ((_val) << HTT_TWT_SESSION_FLAG_FLOW_ID_S)); \ + } while (0) #define HTT_TWT_SESSION_FLAG_BCAST_TWT_GET(_var) \ - (((_var) & HTT_TWT_SESSION_FLAG_BCAST_TWT_M) >> \ - HTT_TWT_SESSION_FLAG_BCAST_TWT_S) + (((_var) & HTT_TWT_SESSION_FLAG_BCAST_TWT_M) >> \ + HTT_TWT_SESSION_FLAG_BCAST_TWT_S) #define HTT_TWT_SESSION_FLAG_BCAST_TWT_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_TWT_SESSION_FLAG_BCAST_TWT, _val); \ - ((_var) |= ((_val) << HTT_TWT_SESSION_FLAG_BCAST_TWT_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_TWT_SESSION_FLAG_BCAST_TWT, _val); \ + ((_var) |= ((_val) << HTT_TWT_SESSION_FLAG_BCAST_TWT_S)); \ + } while (0) #define HTT_TWT_SESSION_FLAG_TRIGGER_TWT_GET(_var) \ - (((_var) & HTT_TWT_SESSION_FLAG_TRIGGER_TWT_M) >> \ - HTT_TWT_SESSION_FLAG_TRIGGER_TWT_S) + (((_var) & HTT_TWT_SESSION_FLAG_TRIGGER_TWT_M) >> \ + HTT_TWT_SESSION_FLAG_TRIGGER_TWT_S) #define HTT_TWT_SESSION_FLAG_TRIGGER_TWT_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_TWT_SESSION_FLAG_TRIGGER_TWT, _val); \ - ((_var) |= ((_val) << HTT_TWT_SESSION_FLAG_TRIGGER_TWT_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_TWT_SESSION_FLAG_TRIGGER_TWT, _val); \ + ((_var) |= ((_val) << HTT_TWT_SESSION_FLAG_TRIGGER_TWT_S)); \ + } while (0) #define HTT_TWT_SESSION_FLAG_ANNOUN_TWT_GET(_var) \ - (((_var) & HTT_TWT_SESSION_FLAG_ANNOUN_TWT_M) >> \ - HTT_TWT_SESSION_FLAG_ANNOUN_TWT_S) + (((_var) & HTT_TWT_SESSION_FLAG_ANNOUN_TWT_M) >> \ + HTT_TWT_SESSION_FLAG_ANNOUN_TWT_S) #define HTT_TWT_SESSION_FLAG_ANNOUN_TWT_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_TWT_SESSION_FLAG_ANNOUN_TWT, _val); \ - ((_var) |= ((_val) << HTT_TWT_SESSION_FLAG_ANNOUN_TWT_S)); \ - } while (0) + do { \ + HTT_CHECK_SET_VAL(HTT_TWT_SESSION_FLAG_ANNOUN_TWT, _val); \ + ((_var) |= ((_val) << HTT_TWT_SESSION_FLAG_ANNOUN_TWT_S)); \ + } while (0) -#define TWT_DIALOG_ID_UNAVAILABLE 0xFFFFFFFF +#define TWT_DIALOG_ID_UNAVAILABLE 0xFFFFFFFF typedef struct { - htt_tlv_hdr_t tlv_hdr; + htt_tlv_hdr_t tlv_hdr; - A_UINT32 vdev_id; - htt_mac_addr peer_mac; - A_UINT32 flow_id_flags; - A_UINT32 dialog_id; /* TWT_DIALOG_ID_UNAVAILABLE is used when TWT session is not initiated by host */ - A_UINT32 wake_dura_us; - A_UINT32 wake_intvl_us; - A_UINT32 sp_offset_us; + A_UINT32 vdev_id; + htt_mac_addr peer_mac; + A_UINT32 flow_id_flags; + A_UINT32 dialog_id; /* TWT_DIALOG_ID_UNAVAILABLE is used when TWT session is not initiated by host */ + A_UINT32 wake_dura_us; + A_UINT32 wake_intvl_us; + A_UINT32 sp_offset_us; } htt_pdev_stats_twt_session_tlv; typedef struct { - htt_tlv_hdr_t tlv_hdr; + htt_tlv_hdr_t tlv_hdr; - A_UINT32 pdev_id; - A_UINT32 num_sessions; + A_UINT32 pdev_id; + A_UINT32 num_sessions; htt_pdev_stats_twt_session_tlv twt_session[1]; } htt_pdev_stats_twt_sessions_tlv; @@ -3561,21 +3579,21 @@ typedef struct { typedef enum { /* Global link descriptor queued in REO */ - HTT_RX_REO_RESOURCE_GLOBAL_LINK_DESC_COUNT_0 = 0, - HTT_RX_REO_RESOURCE_GLOBAL_LINK_DESC_COUNT_1 = 1, - HTT_RX_REO_RESOURCE_GLOBAL_LINK_DESC_COUNT_2 = 2, + HTT_RX_REO_RESOURCE_GLOBAL_LINK_DESC_COUNT_0 = 0, + HTT_RX_REO_RESOURCE_GLOBAL_LINK_DESC_COUNT_1 = 1, + HTT_RX_REO_RESOURCE_GLOBAL_LINK_DESC_COUNT_2 = 2, /*Number of queue descriptors of this aging group */ - HTT_RX_REO_RESOURCE_BUFFERS_USED_AC0 = 3, - HTT_RX_REO_RESOURCE_BUFFERS_USED_AC1 = 4, - HTT_RX_REO_RESOURCE_BUFFERS_USED_AC2 = 5, - HTT_RX_REO_RESOURCE_BUFFERS_USED_AC3 = 6, + HTT_RX_REO_RESOURCE_BUFFERS_USED_AC0 = 3, + HTT_RX_REO_RESOURCE_BUFFERS_USED_AC1 = 4, + HTT_RX_REO_RESOURCE_BUFFERS_USED_AC2 = 5, + HTT_RX_REO_RESOURCE_BUFFERS_USED_AC3 = 6, /* Total number of MSDUs buffered in AC */ - HTT_RX_REO_RESOURCE_AGING_NUM_QUEUES_AC0 = 7, - HTT_RX_REO_RESOURCE_AGING_NUM_QUEUES_AC1 = 8, - HTT_RX_REO_RESOURCE_AGING_NUM_QUEUES_AC2 = 9, - HTT_RX_REO_RESOURCE_AGING_NUM_QUEUES_AC3 = 10, + HTT_RX_REO_RESOURCE_AGING_NUM_QUEUES_AC0 = 7, + HTT_RX_REO_RESOURCE_AGING_NUM_QUEUES_AC1 = 8, + HTT_RX_REO_RESOURCE_AGING_NUM_QUEUES_AC2 = 9, + HTT_RX_REO_RESOURCE_AGING_NUM_QUEUES_AC3 = 10, - HTT_RX_REO_RESOURCE_STATS_MAX = 16 + HTT_RX_REO_RESOURCE_STATS_MAX = 16 } htt_rx_reo_resource_sample_id_enum; typedef struct { @@ -3619,33 +3637,33 @@ typedef struct { /* config_param0 */ -#define HTT_DBG_EXT_STATS_SET_VDEV_MASK(_var) ((_var << 1) | 0x1) +#define HTT_DBG_EXT_STATS_SET_VDEV_MASK(_var) ((_var << 1) | 0x1) #define HTT_DBG_EXT_STATS_GET_VDEV_ID_FROM_VDEV_MASK(_var) ((_var >> 1) & 0xFF) -#define HTT_DBG_EXT_STATS_IS_VDEV_ID_SET(_var) ((_var) & 0x1) +#define HTT_DBG_EXT_STATS_IS_VDEV_ID_SET(_var) ((_var) & 0x1) typedef enum { /* Implicit beamforming stats */ - HTT_IMPLICIT_TXBF_STEER_STATS = 0, + HTT_IMPLICIT_TXBF_STEER_STATS = 0, /* Single user short inter frame sequence steer stats */ - HTT_EXPLICIT_TXBF_SU_SIFS_STEER_STATS = 1, + HTT_EXPLICIT_TXBF_SU_SIFS_STEER_STATS = 1, /* Single user random back off steer stats */ - HTT_EXPLICIT_TXBF_SU_RBO_STEER_STATS = 2, + HTT_EXPLICIT_TXBF_SU_RBO_STEER_STATS = 2, /* Multi user short inter frame sequence steer stats */ - HTT_EXPLICIT_TXBF_MU_SIFS_STEER_STATS = 3, + HTT_EXPLICIT_TXBF_MU_SIFS_STEER_STATS = 3, /* Multi user random back off steer stats */ - HTT_EXPLICIT_TXBF_MU_RBO_STEER_STATS = 4, + HTT_EXPLICIT_TXBF_MU_RBO_STEER_STATS = 4, /* For backward compatability new modes cannot be added */ - HTT_TXBF_MAX_NUM_OF_MODES = 5 + HTT_TXBF_MAX_NUM_OF_MODES = 5 } htt_txbf_sound_steer_modes; typedef enum { - HTT_TX_AC_SOUNDING_MODE = 0, - HTT_TX_AX_SOUNDING_MODE = 1, + HTT_TX_AC_SOUNDING_MODE = 0, + HTT_TX_AX_SOUNDING_MODE = 1, } htt_stats_sounding_tx_mode; typedef struct { htt_tlv_hdr_t tlv_hdr; - A_UINT32 tx_sounding_mode; /* HTT_TX_XX_SOUNDING_MODE */ + A_UINT32 tx_sounding_mode; /* HTT_TX_XX_SOUNDING_MODE */ /* Counts number of soundings for all steering modes in each bw */ A_UINT32 cbf_20[HTT_TXBF_MAX_NUM_OF_MODES]; A_UINT32 cbf_40[HTT_TXBF_MAX_NUM_OF_MODES]; @@ -3676,10 +3694,10 @@ typedef struct { } htt_tx_sounding_stats_t; typedef struct { - htt_tlv_hdr_t tlv_hdr; + htt_tlv_hdr_t tlv_hdr; - A_UINT32 num_obss_tx_ppdu_success; - A_UINT32 num_obss_tx_ppdu_failure; + A_UINT32 num_obss_tx_ppdu_success; + A_UINT32 num_obss_tx_ppdu_failure; } htt_pdev_obss_pd_stats_tlv; /* NOTE: diff --git a/fw/wlan_defs.h b/fw/wlan_defs.h index d2cd217c4196..beeb87b17a75 100755 --- a/fw/wlan_defs.h +++ b/fw/wlan_defs.h @@ -115,6 +115,8 @@ #define HE_PET_8_USEC 1 #define HE_PET_16_USEC 2 +#define DEFAULT_OFDMA_RU26_COUNT 0 + typedef enum { MODE_11A = 0, /* 11a Mode */ MODE_11G = 1, /* 11b/g Mode */ diff --git a/fw/wmi_services.h b/fw/wmi_services.h index 14b05734d497..c87b61838db1 100755 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -379,6 +379,16 @@ typedef enum { WMI_SERVICE_EXT_PEER_TID_CONFIGS_SUPPORT = 194, /* Extended Peer Tid configuration support for QoS related settings */ WMI_SERVICE_WPA3_FT_SAE_SUPPORT = 195, /* FW roaming support for WPA3_FT_SAE */ WMI_SERVICE_WPA3_FT_SUITE_B_SUPPORT = 196, /* FW roaming support for WPA3_FT_SUITE_B */ + WMI_SERVICE_VOW_ENABLE=197, /* FW supports a set of features to optimize VoW performance */ + WMI_SERVICE_CFR_CAPTURE_IND_EVT_TYPE_1 = 198, /* support WMI_PEER_CFR_CAPTURE_EVENT msg */ + WMI_SERVICE_BROADCAST_TWT = 199, /* support of Broadcast TWT (Target Wake Time) for STA/AP */ + WMI_SERVICE_RAP_DETECTION_SUPPORT = 200, /* indicate FW supports rogue AP detection */ + WMI_SERVICE_PS_TDCC = 201, /* FW support tx_duty_cycle_control powersave */ + WMI_SERVICE_THREE_WAY_COEX_CONFIG_LEGACY = 202, /* BTCOEX Three-way CoEx Config Legacy Feature support */ + WMI_SERVICE_THREE_WAY_COEX_CONFIG_OVERRIDE = 203, /* BTCOEX Three-way CoEx Config Override Feature support */ + WMI_SERVICE_TX_PWR_PER_PEER = 204, /* target supports per-peer tx pwr spec via WMI_PEER_USE_FIXED_PWR */ + WMI_SERVICE_STA_PLUS_STA_SUPPORT = 205, /* indicates target supports STA + STA concurrency */ + WMI_SERVICE_WPA3_FT_FILS = 206, /******* ADD NEW SERVICES HERE *******/ diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index aa17d6db91d6..14922014440c 100755 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -965,6 +965,18 @@ typedef enum { WMITLV_TAG_STRUC_wmi_request_wlm_stats_cmd_fixed_param, WMITLV_TAG_STRUC_wmi_wlm_stats_event_fixed_param, WMITLV_TAG_STRUC_wmi_key_material_ext, + WMITLV_TAG_STRUC_wmi_peer_cfr_capture_event_fixed_param, + WMITLV_TAG_STRUC_wmi_cold_boot_cal_data_fixed_param, + WMITLV_TAG_STRUC_wmi_pdev_set_rap_config_fixed_param, + WMITLV_TAG_STRUC_wmi_pdev_set_rap_config_on_sta_ps_tlv_param, + WMITLV_TAG_STRUC_wmi_pdev_rap_info_event_fixed_param, + WMITLV_TAG_STRUC_wmi_sta_tdcc_config_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_roam_deauth_config_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_roam_idle_config_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_idle_trigger_monitor_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_stats_interference, + WMITLV_TAG_STRUC_wmi_roam_score_delta_param, + WMITLV_TAG_STRUC_wmi_roam_cnd_min_rssi_param, } WMITLV_TAG_ID; /* @@ -979,6 +991,7 @@ typedef enum { OP(WMI_PEER_SET_PARAM_CMDID) \ OP(WMI_STA_POWERSAVE_MODE_CMDID) \ OP(WMI_STA_POWERSAVE_PARAM_CMDID) \ + OP(WMI_STA_TDCC_CONFIG_CMDID) \ OP(WMI_STA_DTIM_PS_METHOD_CMDID) \ OP(WMI_PDEV_SET_REGDOMAIN_CMDID) \ OP(WMI_PEER_TID_ADDBA_CMDID) \ @@ -1358,6 +1371,10 @@ typedef enum { OP(WMI_ROAM_BSS_LOAD_CONFIG_CMDID) \ OP(WMI_VDEV_GET_MWS_COEX_INFO_CMDID) \ OP(WMI_REQUEST_WLM_STATS_CMDID) \ + OP(WMI_PDEV_SET_RAP_CONFIG_CMDID) \ + OP(WMI_ROAM_DEAUTH_CONFIG_CMDID) \ + OP(WMI_ROAM_IDLE_CONFIG_CMDID) \ + OP(WMI_IDLE_TRIGGER_MONITOR_CMDID) \ /* add new CMD_LIST elements above this line */ @@ -1580,6 +1597,9 @@ typedef enum { OP(WMI_VDEV_GET_MWS_COEX_IDRX_STATE_EVENTID) \ OP(WMI_VDEV_GET_MWS_COEX_ANTENNA_SHARING_STATE_EVENTID) \ OP(WMI_WLM_STATS_EVENTID) \ + OP(WMI_PEER_CFR_CAPTURE_EVENTID) \ + OP(WMI_PDEV_COLD_BOOT_CAL_DATA_EVENTID) \ + OP(WMI_PDEV_RAP_INFO_EVENTID) \ /* add new EVT_LIST elements above this line */ @@ -1638,6 +1658,12 @@ WMITLV_CREATE_PARAM_STRUC(WMI_STA_POWERSAVE_MODE_CMDID); WMITLV_CREATE_PARAM_STRUC(WMI_STA_POWERSAVE_PARAM_CMDID); +/* STA TDCC Param Config Cmd */ +#define WMITLV_TABLE_WMI_STA_TDCC_CONFIG_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_sta_tdcc_config_cmd_fixed_param, wmi_sta_tdcc_config_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) + +WMITLV_CREATE_PARAM_STRUC(WMI_STA_TDCC_CONFIG_CMDID); + /* STA DTIM PS METHOD Cmd */ #define WMITLV_TABLE_WMI_STA_DTIM_PS_METHOD_CMDID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_sta_dtim_ps_method_cmd_fixed_param, wmi_sta_dtim_ps_method_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) @@ -2532,7 +2558,9 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PEER_MCAST_GROUP_CMDID); #define WMITLV_TABLE_WMI_ROAM_AP_PROFILE(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_roam_ap_profile_fixed_param, wmi_roam_ap_profile_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_ap_profile, wmi_ap_profile, ap_profile, WMITLV_SIZE_FIX) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_roam_cnd_scoring_param, wmi_roam_cnd_scoring_param, roam_cnd_scoring_param, WMITLV_SIZE_FIX) + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_roam_cnd_scoring_param, wmi_roam_cnd_scoring_param, roam_cnd_scoring_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_roam_score_delta_param, roam_score_delta_param_list, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_roam_cnd_min_rssi_param, roam_cnd_min_rssi_param_list, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_ROAM_AP_PROFILE); @@ -3002,6 +3030,21 @@ WMITLV_CREATE_PARAM_STRUC(WMI_REQUEST_ROAM_SCAN_STATS_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_roam_bss_load_config_cmd_fixed_param, wmi_roam_bss_load_config_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_ROAM_BSS_LOAD_CONFIG_CMDID); +/* Deauth roam trigger parameters */ +#define WMITLV_TABLE_WMI_ROAM_DEAUTH_CONFIG_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_roam_deauth_config_cmd_fixed_param, wmi_roam_deauth_config_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_ROAM_DEAUTH_CONFIG_CMDID); + +/* Idle roam trigger parameters */ +#define WMITLV_TABLE_WMI_ROAM_IDLE_CONFIG_CMDID(id,op,buf,len) \ + 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); + +/* 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) +WMITLV_CREATE_PARAM_STRUC(WMI_IDLE_TRIGGER_MONITOR_CMDID); + #define WMITLV_TABLE_WMI_ROAM_BLACKLIST_EVENTID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_roam_blacklist_event_fixed_param, wmi_roam_blacklist_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_roam_blacklist_with_timeout_tlv_param, blacklist_with_timeout, WMITLV_SIZE_VAR) @@ -3913,6 +3956,13 @@ WMITLV_CREATE_PARAM_STRUC(WMI_HPCS_PULSE_START_CMDID); WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_PKTLOG_FILTER_CMDID); +/* PDev Set Rogue AP Config cmd */ +#define WMITLV_TABLE_WMI_PDEV_SET_RAP_CONFIG_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_pdev_set_rap_config_fixed_param, wmi_pdev_set_rap_config_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_pdev_set_rap_config_on_sta_ps_tlv_param, rap_param, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_SET_RAP_CONFIG_CMDID); + + /************************** TLV definitions of WMI events *******************************/ /* Service Ready event */ @@ -5047,6 +5097,7 @@ WMITLV_CREATE_PARAM_STRUC(WMI_RMC_NEW_LEADER_EVENTID); * array index is (peer_index * WLAN_MAX_AC + ac_index) * rx_mcs_array_len + MCS index * Contains a count of rx PPDUs for each MCS of each AC of each peer. * wmi_stats_period stats_period[]; Array length is specified by stats_period_array_len + * wmi_stats_interference stats_interference[]; Array length is determied by dividing array level TLV header's length value by array-element TLV header's length value. * * For example, if there were 2 peers (X and Y) whose stats were being reported, * the message and its TLV arrays would look like this: @@ -5137,7 +5188,8 @@ WMITLV_CREATE_PARAM_STRUC(WMI_RMC_NEW_LEADER_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_rx_stats, rx_stats, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, rx_mpdu_aggr, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, rx_mcs, WMITLV_SIZE_VAR) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_stats_period, stats_period, WMITLV_SIZE_VAR) + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_stats_period, stats_period, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_stats_interference, stats_interference, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_REPORT_STATS_EVENTID); #define WMITLV_TABLE_WMI_VDEV_ENCRYPT_DECRYPT_DATA_RESP_EVENTID(id, op, buf, len) \ @@ -5280,6 +5332,20 @@ WMITLV_CREATE_PARAM_STRUC(WMI_MOTION_DET_BASE_LINE_HOST_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_esp_estimate_event_fixed_param, wmi_esp_estimate_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) 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_CREATE_PARAM_STRUC(WMI_PEER_CFR_CAPTURE_EVENTID); + +#define WMITLV_TABLE_WMI_PDEV_COLD_BOOT_CAL_DATA_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_cold_boot_cal_data_fixed_param, wmi_cold_boot_cal_data_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_COLD_BOOT_CAL_DATA_EVENTID); + +/* rogue ap info event */ +#define WMITLV_TABLE_WMI_PDEV_RAP_INFO_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_pdev_rap_info_event_fixed_param, wmi_pdev_rap_info_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_RAP_INFO_EVENTID); #ifdef __cplusplus } diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index e085b98d0bad..85c11642be34 100755 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -405,6 +405,8 @@ typedef enum { WMI_PDEV_HE_TB_ACTION_FRM_CMDID, /** filter packet log based on MAC address */ WMI_PDEV_PKTLOG_FILTER_CMDID, + /** wmi command for setting rogue ap configuration */ + WMI_PDEV_SET_RAP_CONFIG_CMDID, /* VDEV (virtual device) specific commands */ /** vdev create */ @@ -549,8 +551,21 @@ typedef enum { WMI_PEER_TID_CONFIGURATIONS_CMDID, /** Peer configuration for Channel Frequency Response (CFR) capture - * of type wmi_peer_cfr_capture_cmd. The CFR capture is communicated - * through HTT_T2H_MSG_TYPE_CFR_DUMP_COMPL_IND. + * of type wmi_peer_cfr_capture_cmd. + * + * On targets that do not use the direct DMA framework, + * completion of the CFR capture is communicated through + * HTT_T2H_MSG_TYPE_CFR_DUMP_COMPL_IND. + * Such targets will set WMI_SERVICE_CFR_CAPTURE_IND_MSG_TYPE_1 + * in WMI Service Ready. + * + * On targets that use direct DMA, completion of CFR capture is + * communicated through WMI_PDEV_DMA_RING_BUF_RELEASE_EVENTID + * using module ID WMI_DMA_RING_CONFIG_MODULE_RTT. + * Such targets will set WMI_SERVICE_CFR_CAPTURE_IND_EVT_TYPE_1 + * in WMI Service Ready and enumerate WMI_DMA_RING_CONFIG_MODULE_RTT + * in the dma_ring_caps entry of WMI_SERVICE_READY_EXT_EVENTID. + * Additional MAC metadata is provided in WMI_PEER_CFR_CAPTURE_EVENTID. */ WMI_PEER_CFR_CAPTURE_CMDID, @@ -617,6 +632,8 @@ typedef enum { WMI_STA_POWERSAVE_PARAM_CMDID, /** set station mimo powersave mode */ WMI_STA_MIMO_PS_MODE_CMDID, + /** config station TX cycle percentage in a beacon interval */ + WMI_STA_TDCC_CONFIG_CMDID, /** DFS-specific commands */ @@ -676,6 +693,10 @@ typedef enum { WMI_REQUEST_ROAM_SCAN_STATS_CMDID, /** Configure BSS load parameters for roam trigger */ WMI_ROAM_BSS_LOAD_CONFIG_CMDID, + /** Configure deauth roam trigger parameters */ + WMI_ROAM_DEAUTH_CONFIG_CMDID, + /** Configure idle roam trigger parameters */ + WMI_ROAM_IDLE_CONFIG_CMDID, /** offload scan specific commands */ /** set offload scan AP profile */ @@ -951,6 +972,8 @@ typedef enum { WMI_RUNTIME_DPD_RECAL_CMDID, /* get TX power for input HALPHY parameters */ WMI_GET_TPC_POWER_CMDID, + /* Specify when to start monitoring for idle state */ + WMI_IDLE_TRIGGER_MONITOR_CMDID, /* Offload 11k related requests */ WMI_11K_OFFLOAD_REPORT_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_11K_OFFLOAD), @@ -1291,6 +1314,12 @@ typedef enum { /* Event to report the switch count in BSS color of one or more VDEVs */ WMI_PDEV_CSC_SWITCH_COUNT_STATUS_EVENTID, + /* Event to send cold boot calibration data */ + WMI_PDEV_COLD_BOOT_CAL_DATA_EVENTID, + + /* Event to report a rogue ap info that is detected in fw */ + WMI_PDEV_RAP_INFO_EVENTID, + /* VDEV specific events */ /** VDEV started event in response to VDEV_START request */ @@ -1406,6 +1435,8 @@ typedef enum { /** report the current tx PN for the peer */ WMI_PEER_TX_PN_RESPONSE_EVENTID, + WMI_PEER_CFR_CAPTURE_EVENTID, + /* beacon/mgmt specific events */ /** RX management frame. the entire frame is carried along with the event. */ WMI_MGMT_RX_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_MGMT), @@ -2949,6 +2980,45 @@ typedef struct { #define WMI_RSRC_CFG_FLAG_PEER_TID_EXT_S 22 #define WMI_RSRC_CFG_FLAG_PEER_TID_EXT_M 0x400000 + /* + * If the VIDEO_OVER_WIFI_ENABLE flag is set, the target will use a + * series of algorithmic adjustments to optimize Video performance + * by reducing latency, reducing latency jitter, and minimizing + * dropped packets. + */ + #define WMI_RSRC_CFG_FLAG_VIDEO_OVER_WIFI_ENABLE_S 23 + #define WMI_RSRC_CFG_FLAG_VIDEO_OVER_WIFI_ENABLE_M 0x800000 + + /* + * If the THREE_WAY_COEX_CONFIG_LEGACY flag is set, the target will use + * the configuration parameters given by Host driver to WLAN FW and + * apply them along with the existing CoEx Weights Override logic to + * prioritize the WLAN-BT-Zigbee packets accordingly. + * + * The host shall only set the THREE_WAY_COEX_CONFIG_LEGACY_SUPPORT + * RSRC_CFG flag if the target has set the WMI_SERVICE + * THREE_WAY_COEX_CONFIG_LEGACY_SUPPORT flag. + * + * The logic to send GPM to BT-SOC with BT-ZB priorities remains the same. + */ + #define WMI_RSRC_CFG_FLAG_THREE_WAY_COEX_CONFIG_LEGACY_SUPPORT_S 24 + #define WMI_RSRC_CFG_FLAG_THREE_WAY_COEX_CONFIG_LEGACY_SUPPORT_M 0x1000000 + + /* + * If the THREE_WAY_COEX_CONFIG_OVERRIDE flag is set, the target will use + * the configuration parameters given by Host driver to WLAN FW and + * apply them by OVERRIDing the existing CoEx Weights Override logic to + * prioritize the WLAN-BT-Zigbee packets accordingly. + * + * The host shall only set the THREE_WAY_COEX_CONFIG_OVERRIDE_SUPPORT + * RSRC_CFG flag if the target has set the WMI_SERVICE + * THREE_WAY_COEX_CONFIG_OVERRIDE_SUPPORT flag. + * + * The logic to send GPM to BT-SOC with BT-ZB priorities remains the same. + */ + #define WMI_RSRC_CFG_FLAG_THREE_WAY_COEX_CONFIG_OVERRIDE_SUPPORT_S 25 + #define WMI_RSRC_CFG_FLAG_THREE_WAY_COEX_CONFIG_OVERRIDE_SUPPORT_M 0x2000000 + A_UINT32 flag1; /** @brief smart_ant_cap - Smart Antenna capabilities information @@ -3202,6 +3272,20 @@ typedef struct { #define WMI_RSRC_CFG_FLAG_PEER_TID_EXT_GET(word32) \ WMI_RSRC_CFG_FLAG_GET((word32), PEER_TID_EXT) +#define WMI_RSRC_CFG_FLAG_VIDEO_OVER_WIFI_ENABLE_SET(word32, value) \ + WMI_RSRC_CFG_FLAG_SET((word32), VIDEO_OVER_WIFI_ENABLE, (value)) +#define WMI_RSRC_CFG_FLAG_VIDEO_OVER_WIFI_ENABLE_GET(word32) \ + WMI_RSRC_CFG_FLAG_GET((word32), VIDEO_OVER_WIFI_ENABLE) + +#define WMI_RSRC_CFG_FLAG_THREE_WAY_COEX_CONFIG_LEGACY_SUPPORT_SET(word32, value) \ + WMI_RSRC_CFG_FLAG_SET((word32), THREE_WAY_COEX_CONFIG_LEGACY_SUPPORT, (value)) +#define WMI_RSRC_CFG_FLAG_THREE_WAY_COEX_CONFIG_LEGACY_SUPPORT_GET(word32) \ + WMI_RSRC_CFG_FLAG_GET((word32), THREE_WAY_COEX_CONFIG_LEGACY_SUPPORT) + +#define WMI_RSRC_CFG_FLAG_THREE_WAY_COEX_CONFIG_OVERRIDE_SUPPORT_SET(word32, value) \ + WMI_RSRC_CFG_FLAG_SET((word32), THREE_WAY_COEX_CONFIG_OVERRIDE_SUPPORT, (value)) +#define WMI_RSRC_CFG_FLAG_THREE_WAY_COEX_CONFIG_OVERRIDE_SUPPORT_GET(word32) \ + WMI_RSRC_CFG_FLAG_GET((word32), THREE_WAY_COEX_CONFIG_OVERRIDE_SUPPORT) typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_init_cmd_fixed_param */ @@ -4188,6 +4272,9 @@ typedef struct { ((int8_t) (WMI_F_MS((hdr)->rssi_chain##c, \ WMI_UNIFIED_RSSI_CHAN_##ch))) +#define WMI_UNIFIED_CHAIN_RSSI_GET(tlv, chain_idx, band) \ + ((A_INT8) WMI_F_MS((tlv)->chain_rssi[chain_idx], WMI_UNIFIED_RSSI_CHAN_ ## band)) + typedef struct { /** Phy error event header */ wmi_single_phyerr_rx_hdr hdr; @@ -5557,8 +5644,140 @@ typedef enum { */ WMI_PDEV_PARAM_NAV_OVERRIDE_CONFIG, + /* Set global MU PPDU duration for DL (usec units) */ + WMI_PDEV_PARAM_SET_MU_PPDU_DURATION, + + /* + * Enable / disable test mode configuration. + * By default FW will always send triggers dynamically (mix of BSR/Basic). + * The below testmode are only used for certain tests. + * A value of 1 in a given bit enables corresponding test mode. + * bit | test mode + * --------------- + * 0 | FW only sends BSR triggers. + * 1 | FW only sends Basic triggers. + * 2 | If set, FW enables MU-RTS trigger. + * | If cleared, FW uses implementation-specific internal default setting. + * 3 | FW enables unicast embedded trigger in HE MU PPDU. + * 4-31| reserved. + */ + WMI_PDEV_PARAM_SET_TEST_CMD_UL_TRIGGER_TYPE_ENABLE, + + /* + * Configure test command to set LSIG len. + * Value 0: Dynamic LSIG based on STA's qdepth. + * Non zero Value: LSIG length to be configured + * as part of trigger frame. + * bit | + * --------------- + * 0 - 30 | Bits storing the host supplied <value>. + * 31 | If set: The legitimate value closest to the value specified in + * | in bits 30:0 is directly set in UL len in trigger frame. + * | The FW performs calculations to determine which legitimate + * | value is closest to the specified value, if the specified + * | value is not already legitimate. + * | If not set: The value in lower bits is the duration (in ms), + * | from which the UL len is derived. + * | Example: if host sets 2000 (2ms), then UL Len in trigger + * | will be derived to accomodate the given duration. + */ + WMI_PDEV_PARAM_SET_TEST_CMD_UL_TRIGGER_LSIG_LEN, + + /* + * Configure test cmd for fixed rate setting used for UL Trigger + * (only Basic/BSR triggers). + * The top nibble is used to select which format to use for encoding + * the rate specification: 0xVXXXXXXX, V must be 1 for the UL + * format. + * If V == 0b0001: format is: 0x1000RRRR. + * This will be output of WMI_ASSEMBLE_RATECODE_V1 + * + */ + WMI_PDEV_PARAM_SET_TEST_CMD_UL_TRIGGER_FIXED_RATE, + + /* + * Configure test command to set the mac padding duration. + * 0 - FW set Mac Padding to 0us + * 1 - FW set Mac Padding to 8us + * 2 - FW set Mac Padding to 16us + */ + WMI_PDEV_PARAM_SET_TEST_CMD_UL_MAC_PADDING, + + /* + * Configure test command to set the fc duration in BSR trigger frame. + * value 0 - FW calulates the duration(default). + * Non zero Value: Duration to be configured. + */ + WMI_PDEV_PARAM_SET_TEST_CMD_UL_BSR_FC_DURATION, + + /* Parameter used for configuring TWT scheduling properties + * bit | config_mode + * ----------------- + * 0 | Disables DL MU for TWT peers within TWT SP + * 1 | Disables UL MU for TWT peers within TWT SP + * 2 | Disables scheduling from WMM sched context for TWT peers + * 3 | If set, FW only sends Basic triggers in TWT SP. + * 4-31| reserved. + */ + WMI_PDEV_PARAM_SET_TEST_CMD_TWT_SCHED_CONFIG, + + /* Parameter used to configure OBSS Packet Detect threshold + * for Spatial Reuse feature. + * The accepted values are in between 62 and 95, inclusive. + * The parameter value is programmed into the spatial reuse register, + * to specify how low the background signal strength from neighboring + * BSS cells must be, for this AP to employ spatial reuse. + * The value of the parameter is multiplied by -1 to get the + * OBSS RSSI threshold, in dBm, below which spatial reuse will + * be allowed. + * For example, if the parameter value is 62, the target will + * allow spatial reuse if the RSSI detected from other BSS + * is below -62 dBm. + * Similarly, if the parameter value is 80, the target will + * allow spatial reuse only if the RSSI detected from neighboring + * BSS cells is no more than -80 dBm. + */ + WMI_PDEV_PARAM_SET_CMD_OBSS_PD_THRESHOLD, + } WMI_PDEV_PARAM; +#define WMI_PDEV_ONLY_BSR_TRIG_IS_ENABLED(trig_type) WMI_GET_BITS(trig_type, 0, 1) +#define WMI_PDEV_ONLY_BSR_TRIG_ENABLE(trig_type) WMI_SET_BITS(trig_type, 0, 1, 1) +#define WMI_PDEV_ONLY_BSR_TRIG_DISABLE(trig_type) WMI_SET_BITS(trig_type, 0, 1, 0) + +#define WMI_PDEV_ONLY_BASIC_TRIG_IS_ENABLED(trig_type) WMI_GET_BITS(trig_type, 1, 1) +#define WMI_PDEV_ONLY_BASIC_TRIG_ENABLE(trig_type) WMI_SET_BITS(trig_type, 1, 1, 1) +#define WMI_PDEV_ONLY_BASIC_TRIG_DISABLE(trig_type) WMI_SET_BITS(trig_type, 1, 1, 0) + +#define WMI_PDEV_MU_RTS_IS_ENABLED(trig_type) WMI_GET_BITS(trig_type, 2, 1) +#define WMI_PDEV_MU_RTS_ENABLE(trig_type) WMI_SET_BITS(trig_type, 2, 1, 1) +#define WMI_PDEV_MU_RTS_DISABLE(trig_type) WMI_SET_BITS(trig_type, 2, 1, 0) + +#define WMI_PDEV_EMBEDDED_TRIGGER_IS_ENABLED(trig_type) WMI_GET_BITS(trig_type, 3, 1) +#define WMI_PDEV_EMBEDDED_TRIGGER_ENABLE(trig_type) WMI_SET_BITS(trig_type, 3, 1, 1) +#define WMI_PDEV_EMBEDDED_TRIGGER_DISABLE(trig_type) WMI_SET_BITS(trig_type, 3, 1, 0) + +#define WMI_PDEV_TWT_SCHED_CFG_IS_DL_MU_IS_ENABLED(twt_sched_cfg) WMI_GET_BITS(twt_sched_cfg, 0, 1) +#define WMI_PDEV_TWT_SCHED_CFG_DL_MU_ENABLE(twt_sched_cfg) WMI_SET_BITS(twt_sched_cfg, 0, 1, 1) +#define WMI_PDEV_TWT_SCHED_CFG_DL_MU_DISABLE(twt_sched_cfg) WMI_SET_BITS(twt_sched_cfg, 0, 1, 0) + +#define WMI_PDEV_TWT_SCHED_CFG_IS_UL_MU_IS_ENABLED(twt_sched_cfg) WMI_GET_BITS(twt_sched_cfg, 1, 1) +#define WMI_PDEV_TWT_SCHED_CFG_UL_MU_ENABLE(twt_sched_cfg) WMI_SET_BITS(twt_sched_cfg, 1, 1, 1) +#define WMI_PDEV_TWT_SCHED_CFG_UL_MU_DISABLE(twt_sched_cfg) WMI_SET_BITS(twt_sched_cfg, 1, 1, 0) + +#define WMI_PDEV_TWT_SCHED_CFG_IS_WMM_IS_ENABLED(twt_sched_cfg) WMI_GET_BITS(twt_sched_cfg, 2, 1) +#define WMI_PDEV_TWT_SCHED_CFG_WMM_ENABLE(twt_sched_cfg) WMI_SET_BITS(twt_sched_cfg, 2, 1, 1) +#define WMI_PDEV_TWT_SCHED_CFG_WMM_DISABLE(twt_sched_cfg) WMI_SET_BITS(twt_sched_cfg, 2, 1, 0) + +#define WMI_PDEV_TWT_SCHED_CFG_IS_USE_ONLY_BASIC_TRIGGER_IS_ENABLED(twt_sched_cfg) WMI_GET_BITS(twt_sched_cfg, 3, 1) +#define WMI_PDEV_TWT_SCHED_CFG_USE_ONLY_BASIC_TRIGGER_ENABLE(twt_sched_cfg) WMI_SET_BITS(twt_sched_cfg, 3, 1, 1) +#define WMI_PDEV_TWT_SCHED_CFG_USE_ONLY_BASIC_TRIGGER_DISABLE(twt_sched_cfg) WMI_SET_BITS(twt_sched_cfg, 3, 1, 0) + +#define WMI_PDEV_LSIG_LEN_DURATION_ENABLE(lsig_len) WMI_SET_BITS(lsig_len, 0, 31, 1) +#define WMI_PDEV_LSIG_LEN_DURATION_DISABLE(lsig_len) WMI_SET_BITS(lsig_len, 0, 31, 0) +#define WMI_PDEV_LSIG_LEN_DURATION_GET(lsig_len) WMI_GET_BITS(lsig_len, 0, 30) +#define WMI_PDEV_LSIG_LEN_DURATION_SET(lsig_len, value) WMI_SET_BITS(lsig_len, 0, 30, value) + typedef struct { A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_pdev_set_param_cmd_fixed_param */ /** pdev_id for identifying the MAC @@ -6060,8 +6279,34 @@ typedef struct { */ } wmi_pdev_pktlog_filter_cmd_fixed_param; +typedef enum { + WMI_ROGUE_AP_ON_STA_PS = 1, /* rogue ap on sta ps module */ +} WMI_ROGUE_AP_TYPE; +typedef struct { + A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_pdev_set_rap_config_fixed_param */ + /** pdev_id for identifying the MAC, the default value is WMI_PDEV_ID_SOC + * See macros starting with WMI_PDEV_ID_ for values. + */ + A_UINT32 pdev_id; + /** rogue ap type, see WMI_ROGUE_AP_TYPE */ + A_UINT32 type; + /** Enable detection of rogue ap in the ps module + * + * 0 -> disabled + * 1 -> enabled (default) + */ + A_UINT32 sta_ps_detection_enabled; +/* This TLV is followed by rap_param for each rogue ap: + * wmi_pdev_set_rap_config_on_sta_ps_tlv_param rap_param[]; + */ +} wmi_pdev_set_rap_config_fixed_param; +typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_pdev_set_rap_config_on_sta_ps_tlv_param */ + /** bssid of rogue ap */ + wmi_mac_addr bssid; +} wmi_pdev_set_rap_config_on_sta_ps_tlv_param; typedef struct { A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_mib_stats_enable_cmd_fixed_param */ @@ -7304,6 +7549,31 @@ typedef enum { TRIGGER_COND_ID_ONE_TIME_REQUEST = 0x3, } wmi_report_stats_event_trigger_cond_id; +typedef struct +{ + A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_stats_interference */ + + /** For cases where a single rx chain has options to be connected to + * different rx antennas, show which rx antennas were in use during + * receipt of a given PPDU. + * This sa_ant_matrix provides a bitmask of the antennas used while + * receiving this frame. + */ + A_UINT32 sa_ant_matrix; + + /** Count how many times the hal_rxerr_phy is marked, in this time period. + * The counter value is reset each period. The host specifies the period + * via WMI_PDEV_PARAM_STATS_OBSERVATION_PERIOD. + */ + A_UINT32 phyerr_count; + + /** The timestamp at which the WMI event is reported. + * In targets that have a WBTIMER_1 timer, this timestamp is taken + * from WBTIMER_1. + */ + A_UINT32 timestamp; +} wmi_stats_interference; + typedef struct { A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_report_stats_event_fixed_param */ /** Indicate what triggered this event, check wmi_report_stats_event_trigger_cond_id for details */ @@ -7384,6 +7654,7 @@ typedef struct { * A_UINT32 rx_mcs[][][]; Array length is (num_peer_ac_rx_stats * WLAN_MAX_AC) * rx_mcs_array_len, * array index is (peer_index * WLAN_MAX_AC + ac_index) * rx_mcs_array_len + MCS index * wmi_stats_period stats_period[]; Array length is specified by stats_period_array_len + * wmi_stats_interference stats_interference[]; Array length is determied by dividing array level TLV header's length value by array-element TLV header's length value. **/ } wmi_report_stats_event_fixed_param; @@ -9391,6 +9662,11 @@ typedef enum { */ WMI_VDEV_PARAM_MAX_MTU_SIZE, /* 0x91 */ + /** Send every nth beacon to host + * if value of n is 0, it means this Nth beacon upload is disabled + */ + WMI_VDEV_PARAM_NTH_BEACON_TO_HOST, /* 0x92 */ + /*=== ADD NEW VDEV PARAM TYPES ABOVE THIS LINE === * The below vdev param types are used for prototyping, and are @@ -9833,6 +10109,14 @@ typedef struct { A_UINT32 sta_ps_mode; } wmi_sta_powersave_mode_cmd_fixed_param; +typedef struct { + A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_sta_tdcc_config_cmd_fixed_param */ + /** Set a max tx period: percentage of one beacon interval. range: 0 - 100 */ + A_UINT32 tx_cycle_percentage; + /** Enable/disable TX Duty Cycle Control powersave */ + A_UINT32 enabled; +} wmi_sta_tdcc_config_cmd_fixed_param; + enum wmi_csa_offload_en { WMI_CSA_OFFLOAD_DISABLE = 0, WMI_CSA_OFFLOAD_ENABLE = 1, @@ -10475,6 +10759,7 @@ enum wmi_peer_type { WMI_PEER_TYPE_TDLS = 2, /* Peer is a TDLS Peer */ WMI_PEER_TYPE_OCB = 3, /* Peer is a OCB Peer */ WMI_PEER_TYPE_NAN_DATA = 4, /* Peer is NAN DATA */ + WMI_PEER_TYPE_TRANS_BSS = 5, /* For creating BSS peer when connecting with non-transmit AP */ WMI_PEER_TYPE_HOST_MAX = 127, /* Host <-> Target Peer type is assigned up to 127 */ /* Reserved from 128 - 255 for target internal use.*/ WMI_PEER_TYPE_ROAMOFFLOAD_TEMP = 128, /* Temporarily created during offload roam */ @@ -10834,6 +11119,9 @@ typedef struct { /* update peer flag for M4 sent */ #define WMI_PEER_PARAM_M4_SENT 0x21 +/* Per peer MISC stats enable or disable */ +#define WMI_PEER_PARAM_MISC_STATS_ENABLE 0x22 + /** mimo ps values for the parameter WMI_PEER_MIMO_PS_STATE */ #define WMI_PEER_MIMO_PS_NONE 0x0 #define WMI_PEER_MIMO_PS_STATIC 0x1 @@ -11135,8 +11423,11 @@ typedef struct { A_UINT32 vdev_id; } wmi_peer_add_wds_entry_cmd_fixed_param; -#define WMI_CHAN_InFO_START_RESP 0 -#define WMI_CHAN_InFO_END_RESP 1 +#define WMI_CHAN_INFO_START_RESP 0 +#define WMI_CHAN_INFO_END_RESP 1 +/* deprecated but maintained as aliases: old names containing typo */ +#define WMI_CHAN_InFO_START_RESP WMI_CHAN_INFO_START_RESP +#define WMI_CHAN_InFO_END_RESP WMI_CHAN_INFO_END_RESP typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_peer_remove_wds_entry_cmd_fixed_param */ @@ -11518,6 +11809,11 @@ typedef struct { * If roam trigger reasons are unspecified, btm_bitmap will be 0x0. */ A_UINT32 btm_bitmap; + /* + * Consider AP as roam candidate only if AP score is better than + * btm_candidate_min_score for BTM roam trigger + */ + A_UINT32 btm_candidate_min_score; } wmi_btm_config_fixed_param; #define WMI_ROAM_5G_BOOST_PENALIZE_ALGO_FIXED 0x0 @@ -11550,6 +11846,12 @@ typedef struct { A_UINT32 roam_scan_period; /** 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 */ + /** 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 */ } wmi_roam_scan_period_fixed_param; /** @@ -11618,6 +11920,8 @@ enum { WMI_AUTH_RSNA_SUITE_B_8021X_SHA384, WMI_AUTH_FT_RSNA_SAE, WMI_AUTH_FT_RSNA_SUITE_B_8021X_SHA384, + WMI_AUTH_FT_RSNA_FILS_SHA256, + WMI_AUTH_FT_RSNA_FILS_SHA384, }; typedef enum { @@ -11877,6 +12181,31 @@ typedef struct { A_UINT32 roam_score_delta_mask; } wmi_roam_cnd_scoring_param; +typedef struct { + A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_roam_score_delta_param */ + /* Roam trigger reason ID from WMI_ROAM_TRIGGER_REASON_ID */ + A_UINT32 roam_trigger_reason; + /* Roam score delta in %. + * Consider AP as roam candidate only if AP score is at least + * roam_score_delta % better than connected AP score. + * Ex: roam_score_delta = 20, and connected AP score is 4000, + * then consider candidate AP only if its score is at least + * 4800 (= 4000 * 120%) + */ + A_UINT32 roam_score_delta; +} wmi_roam_score_delta_param; + +typedef struct { + A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_roam_cnd_min_rssi_param */ + /* Roam trigger reason ID from WMI_ROAM_TRIGGER_REASON_ID */ + A_UINT32 roam_trigger_reason; + /* + * Consider AP as roam candidate only if AP rssi is better than + * candidate_min_rssi + */ + A_UINT32 candidate_min_rssi; /* units = dbm */ +} wmi_roam_cnd_min_rssi_param; + /** To match an open AP, the rs_authmode should be set to WMI_AUTH_NONE * and WMI_AP_PROFILE_FLAG_CRYPTO should be clear. * To match a WEP enabled AP, the rs_authmode should be set to WMI_AUTH_NONE @@ -12063,6 +12392,8 @@ typedef struct { * Following this structure is the TLV: * wmi_ap_profile ap_profile; <-- AP profile info * wmi_roam_cnd_scoring_param roam_cnd_scoring_param + * wmi_roam_score_delta_param roam_score_delta_param_list[] + * wmi_roam_cnd_min_rssi_param roam_cnd_min_rssi_param_list[] */ } wmi_roam_ap_profile_fixed_param; @@ -12975,6 +13306,7 @@ typedef enum wake_reason_e { WOW_REASON_TKIP_MIC_ERR_FRAME_RECVD_DETECT, WOW_REASON_WLAN_MD, /* motion detected */ WOW_REASON_WLAN_BL, /* baselining done */ + WOW_REASON_NTH_BCN_OFLD, /* nth beacon forward to host */ WOW_REASON_DEBUG_TEST = 0xFF, } WOW_WAKE_REASON_TYPE; @@ -17710,7 +18042,11 @@ typedef struct { typedef struct { /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_key_material_ext */ A_UINT32 tlv_header; - A_UINT8 key_buffer[GTK_OFFLOAD_KEK_EXTENDED_BYTES+GTK_OFFLOAD_KCK_EXTENDED_BYTES+GTK_REPLAY_COUNTER_BYTES]; /*the split of kck, kek should be known to host based on akmp*/ + /* + * key_buffer contains kck,kck2,kek,kek2,replay counter, in order + * The split between kck vs. kek should be known to host based on akmp. + */ + A_UINT8 key_buffer[GTK_OFFLOAD_KEK_EXTENDED_BYTES+GTK_OFFLOAD_KCK_EXTENDED_BYTES+GTK_REPLAY_COUNTER_BYTES]; } wmi_key_material_ext; typedef struct { @@ -22130,6 +22466,43 @@ typedef enum wmi_coex_config_type { * arg4 - priority level 4, same parameters rules as arg1 */ WMI_COEX_CONFIG_THREE_WAY_COEX_START = 34, + /* WMI_COEX_CONFIG_MPTA_HELPER_ENABLE + * config to enable(1)/disable(0) mpta-helper function + */ + WMI_COEX_CONFIG_MPTA_HELPER_ENABLE = 35, + /* WMI_COEX_CONFIG_MPTA_HELPER_ZIGBEE_STATE + * config zigbee state + * arg1: zigbee state + * (idle form-network wait-join join-network network-up HMI) + */ + WMI_COEX_CONFIG_MPTA_HELPER_ZIGBEE_STATE = 36, + /* WMI_COEX_CONFIG_MPTA_HELPER_INT_OCS_PARAMS + * config ocs wlan/nonwlan params after MPTA interrupt fired + * arg1: wlan duration (ms units) in Shape-OCS + * arg2: nonwlan duration (ms units) in Shape-OCS + */ + WMI_COEX_CONFIG_MPTA_HELPER_INT_OCS_PARAMS = 37, + /* WMI_COEX_CONFIG_MPTA_HELPER_MON_OCS_PARAMS + * config ocs wlan/nonwlan params during monitor period after + * interrupt period finished + * arg1: wlan duration (ms units) in Shape-OCS + * arg2: nonwlan duration (ms units) in Shape-OCS + */ + WMI_COEX_CONFIG_MPTA_HELPER_MON_OCS_PARAMS = 38, + /* WMI_COEX_CONFIG_MPTA_HELPER_INT_MON_DURATION + * config ocs duration in interrupt period and monitor period + * arg1: duration (ms units) in interrupt period + * arg2: duration (ms units) in monitor period + */ + WMI_COEX_CONFIG_MPTA_HELPER_INT_MON_DURATION = 39, + /* WMI_COEX_CONFIG_MPTA_HELPER_ZIGBEE_CHANNEL + * config zigbee channel 11 - 26 + */ + WMI_COEX_CONFIG_MPTA_HELPER_ZIGBEE_CHANNEL = 40, + /* WMI_COEX_CONFIG_MPTA_HELPER_WLAN_MUTE_DURATION + * config msw mute duration (ms units) after MPTA interrupt fired + */ + WMI_COEX_CONFIG_MPTA_HELPER_WLAN_MUTE_DURATION = 41, } WMI_COEX_CONFIG_TYPE; typedef struct { @@ -23477,6 +23850,11 @@ static INLINE A_UINT8 *wmi_id_to_name(A_UINT32 wmi_command) WMI_RETURN_STRING(WMI_ROAM_BSS_LOAD_CONFIG_CMDID); WMI_RETURN_STRING(WMI_VDEV_GET_MWS_COEX_INFO_CMDID); WMI_RETURN_STRING(WMI_REQUEST_WLM_STATS_CMDID); + WMI_RETURN_STRING(WMI_PDEV_SET_RAP_CONFIG_CMDID); + WMI_RETURN_STRING(WMI_STA_TDCC_CONFIG_CMDID); + WMI_RETURN_STRING(WMI_ROAM_DEAUTH_CONFIG_CMDID); + WMI_RETURN_STRING(WMI_ROAM_IDLE_CONFIG_CMDID); + WMI_RETURN_STRING(WMI_IDLE_TRIGGER_MONITOR_CMDID); } return "Invalid WMI cmd"; @@ -23812,8 +24190,28 @@ typedef enum { WMI_PDEV_ROUTING_TYPE_MLD_IPV6, WMI_PDEV_ROUTING_TYPE_DHCP_IPV4, WMI_PDEV_ROUTING_TYPE_DHCP_IPV6, + WMI_PDEV_ROUTING_TYPE_DNS_TCP_IPV4, + WMI_PDEV_ROUTING_TYPE_DNS_TCP_IPV6, + WMI_PDEV_ROUTING_TYPE_DNS_UDP_IPV4, + WMI_PDEV_ROUTING_TYPE_DNS_UDP_IPV6, + WMI_PDEV_ROUTING_TYPE_ICMP_IPV4, + WMI_PDEV_ROUTING_TYPE_ICMP_IPV6, + WMI_PDEV_ROUTING_TYPE_TCP_IPV4, + WMI_PDEV_ROUTING_TYPE_TCP_IPV6, + WMI_PDEV_ROUTING_TYPE_UDP_IPV4, + WMI_PDEV_ROUTING_TYPE_UDP_IPV6, + WMI_PDEV_ROUTING_TYPE_IPV4, + WMI_PDEV_ROUTING_TYPE_IPV6, + WMI_PDEV_ROUTING_TYPE_EAP, } wmi_pdev_pkt_routing_type; +typedef enum { + WMI_PDEV_WIFIRXCCE_USE_CCE_E = 0, + WMI_PDEV_WIFIRXCCE_USE_ASPT_E = 1, + WMI_PDEV_WIFIRXCCE_USE_FT_E = 2, + WMI_PDEV_WIFIRXCCE_USE_CCE2_E = 3, +} wmi_pdev_dest_ring_handler_type; + /* This command shall be sent only when no VDEV is up. If the command is sent after any VDEV is up, target will ignore the command */ typedef struct { /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_pdev_update_pkt_routing_cmd_fixed_param */ @@ -23832,6 +24230,11 @@ typedef struct { * CCE copies this back in RX_MSDU_END_TLV. */ A_UINT32 meta_data; + /** + * Indicates the dest ring handler type: CCE, APST, FT, CCE2 + * Refer to wmi_pdev_dest_ring_handler_type / WMI_PDEV_WIFIRXCCE_USE_xxx + */ + A_UINT32 dest_ring_handler; } wmi_pdev_update_pkt_routing_cmd_fixed_param; typedef enum { @@ -24074,6 +24477,10 @@ typedef struct { A_UINT32 flags; } wmi_wlm_config_cmd_fixed_param; +/* Broadcast TWT enable/disable */ +#define TWT_EN_DIS_FLAGS_GET_BTWT(flag) WMI_GET_BITS(flag, 0, 1) +#define TWT_EN_DIS_FLAGS_SET_BTWT(flag, val) WMI_SET_BITS(flag, 0, 1, val) + typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_twt_enable_cmd_fixed_param */ /** pdev_id for identifying the MAC. See macros starting with WMI_PDEV_ID_ for values. In non-DBDC case host should set it to 0 @@ -24106,7 +24513,8 @@ typedef struct { */ A_UINT32 mode_check_interval; /* Interval between two successive check to decide the mode of TWT */ A_UINT32 add_sta_slot_interval; /* Interval between decisions making to create TWT slots for STAs */ - A_UINT32 remove_sta_slot_interval; /* Inrerval between decisions making to remove TWT slot of STAs */ + A_UINT32 remove_sta_slot_interval; /* Interval between decisions making to remove TWT slot of STAs */ + A_UINT32 flags; /* enable/disable flags, refer to MACROs TWT_EN_DIS_FLAGS_* (TWT_EN_DIS_FLAGS_GET_BTWT etc.) */ } wmi_twt_enable_cmd_fixed_param; /* status code of enabling TWT */ @@ -24128,7 +24536,8 @@ typedef struct { typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_twt_disable_cmd_fixed_param */ /** pdev_id for identifying the MAC. See macros starting with WMI_PDEV_ID_ for values. In non-DBDC case host should set it to 0 */ - A_UINT32 pdev_id; /* host should never set it to WMI_PDEV_ID_SOC */ + A_UINT32 pdev_id; /* host should never set it to WMI_PDEV_ID_SOC */ + A_UINT32 flags; /* enable/disable flags, refer to MACROs TWT_EN_DIS_FLAGS_* (TWT_EN_DIS_FLAGS_GET_BTWT etc.) */ } wmi_twt_disable_cmd_fixed_param; typedef struct { @@ -24294,7 +24703,8 @@ typedef struct { } wmi_twt_resume_dialog_complete_event_fixed_param; typedef enum { - WMI_DMA_RING_CONFIG_MODULE_SPECTRAL, + WMI_DMA_RING_CONFIG_MODULE_SPECTRAL, + WMI_DMA_RING_CONFIG_MODULE_RTT, } WMI_DMA_RING_SUPPORTED_MODULE; typedef struct { @@ -24399,8 +24809,8 @@ typedef struct { */ A_UINT32 paddr_lo; /** - * Bits 15:0: address of data [47:32] - * Bits 31:16: reserved + * Bits 11:0: address of data [43:32] + * Bits 31:12: host context data [19:0] */ A_UINT32 paddr_hi; } wmi_dma_buf_release_entry; @@ -24489,6 +24899,8 @@ typedef enum { WMI_ROAM_TRIGGER_REASON_BTM, WMI_ROAM_TRIGGER_REASON_UNIT_TEST, WMI_ROAM_TRIGGER_REASON_BSS_LOAD, + WMI_ROAM_TRIGGER_REASON_DEAUTH, + WMI_ROAM_TRIGGER_REASON_IDLE, WMI_ROAM_TRIGGER_REASON_MAX, } WMI_ROAM_TRIGGER_REASON_ID; @@ -24526,8 +24938,85 @@ typedef struct { A_UINT32 monitor_time_window; /** BSS load threshold after which roam scan should trigger */ A_UINT32 bss_load_threshold; + /** rssi_2g_threshold + * If connected AP is in 2.4Ghz, then consider bss load roam triggered + * only if load % > bss_load_threshold && connected AP rssi is worse + * than rssi_2g_threshold. + */ + A_INT32 rssi_2g_threshold; /* units = dbm */ + /** rssi_5g_threshold + * If connected AP is in 5Ghz, then consider bss load roam triggered + * only if load % > bss_load_threshold && connected AP rssi is worse + * than rssi_5g_threshold. + */ + A_INT32 rssi_5g_threshold; /* units = dbm */ } wmi_roam_bss_load_config_cmd_fixed_param; +/** Deauth roam trigger parameters */ +typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_roam_deauth_config_cmd_fixed_param */ + A_UINT32 vdev_id; + /* 1-Enable, 0-Disable */ + A_UINT32 enable; +} wmi_roam_deauth_config_cmd_fixed_param; + +/** IDLE roam trigger parameters */ +typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_roam_idle_config_cmd_fixed_param */ + A_UINT32 vdev_id; + /* 1-Enable, 0-Disable */ + A_UINT32 enable; + /* Connected AP band. 0 - Any Band, 1 - 2.4Ghz Band, 2 - 5Ghz Band */ + A_UINT32 band; + /* Trigger Idle roaming only if rssi change of connected AP is within rssi_delta during idle time */ + A_UINT32 rssi_delta; /* units = dB */ + /* Trigger idle roam only if connected RSSI is better than min_rssi */ + A_INT32 min_rssi; /* units = dBm */ + /* Inactive/Idle time duration + * After screen is OFF (or whatever condition is suitable in a given + * system as an indication that the system is likely idle) + * and if below conditions are met then idle roaming will be triggered. + * 1. Connected AP band is matching with band value configured + * 2. No TX/RX data for more than idle_time configured + * or TX/RX data packets count is less than data_packet_count + * during idle_time + * 3. Connected AP rssi change is not more than rssi_delta + * 4. Connected AP rssi is better than min_rssi. + * The purpose of this trigger for idle scan is to issue the scan + * even if (moreover, particularly if) the connection to the + * existing AP is still good, to keep the STA from getting locked + * onto the current good AP and thus missing out on an available + * even better AP. This min_rssi threshold can be used to adjust + * the connection quality level at which the STA considers doing an + * idle scan. + */ + A_UINT32 idle_time; /* units = seconds */ + /* Maximum allowed data packets count during idle time */ + A_UINT32 data_packet_count; +} wmi_roam_idle_config_cmd_fixed_param; + +/** trigger to start/stop monitoring if system is idle command parameters */ +typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_idle_trigger_monitor_cmd_fixed_param */ + /* idle_trigger_monitor values are from WMI_IDLE_TRIGGER_MONITOR_ID */ + A_UINT32 idle_trigger_monitor; +} wmi_idle_trigger_monitor_cmd_fixed_param; + +typedef enum { + WMI_IDLE_TRIGGER_MONITOR_NONE = 0, /* no-op */ + /* IDLE_TRIGGER_MONITOR_ON + * The host's screen has turned off (or some other event indicating that + * the system is likely idle) - + * start monitoring to check if the system is idle. + */ + WMI_IDLE_TRIGGER_MONITOR_ON, + /* IDLE_TRIGGER_MONITOR_OFF + * The host's screen has turned on (or some other event indicating that + * the system is not idle) + */ + WMI_IDLE_TRIGGER_MONITOR_OFF, +} WMI_SCREEN_STATUS_NOTIFY_ID; + typedef struct { /* * The timestamp is in units of ticks of a 19.2MHz clock. @@ -25874,6 +26363,100 @@ typedef struct { #define WMI_HECAP_MAC_HTVHTTRIGRX_SET WMI_HECAP_MAC_HTVHTTRIGRX_SET_D2 #endif /* SUPPORT_11AX_D3 */ +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_cfr_capture_event_fixed_param */ + A_UINT32 tlv_header; + /* Method used to capture CFR - of type WMI_PEER_CFR_CAPTURE_METHOD */ + A_UINT32 capture_method; + /* VDEV identifier */ + A_UINT32 vdev_id; + /* Peer MAC address. In AP mode, this is the address of the connected peer + * for which CFR capture is needed. In case of STA mode, this is the address + * of the AP to which the STA is connected + */ + wmi_mac_addr mac_addr; + /* primary 20 MHz channel frequency in mhz */ + A_UINT32 chan_mhz; + /* BW of measurement - of type WMI_PEER_CFR_CAPTURE_BW */ + A_UINT32 bandwidth; + /* phy mode WLAN_PHY_MODE of the channel defined in wlan_defs.h*/ + A_UINT32 phy_mode; + /* Center frequency 1 in MHz*/ + A_UINT32 band_center_freq1; + /* Center frequency 2 in MHz - valid only for 11acvht 80plus80 mode*/ + A_UINT32 band_center_freq2; + /* Number of spatial streams */ + A_UINT32 sts_count; + /* Bits 31:0: address of data from wmi_dma_buf_release_entry [31:0] */ + A_UINT32 correlation_info_1; + /* Bits 11:0: address of data from wmi_dma_buf_release_entry [43:32] + * Bits 15:12: reserved (set to 0x0) + * Bits 31:16: hardware PPDU ID [15:0] + */ + A_UINT32 correlation_info_2; + /* Bits 1:0: TX status (if any); values defined in enum + * WMI_FRAME_TX_STATUS + * Bits 30:2: reserved (set to 0x0) + * Bit 31: Status of the CFR capture of the peer + * 1 (True) - Successful; 0 (False) - Not successful + */ + A_UINT32 status; + /* Timestamp in microseconds at which the CFR was captured in the hardware. + * The clock used for this timestamp is private to the target and + * is not visible to the host i.e., Host can interpret only the + * relative timestamp deltas from one message to the next, + * but can't interpret the absolute timestamp from a single message. + */ + A_UINT32 timestamp_us; + /* + * Count of the current CFR capture from FW. + * This is helpful to identify any drops in FW. + */ + A_UINT32 counter; + /* Per chain RSSI of the peer, for up to WMI_MAX_CHAINS. + * Each chain's entry reports the RSSI for different bands in dBm units. + * Use WMI_UNIFIED_CHAIN_RSSI_GET to extract the value for a particular + * band. + * A band value of 0x80 (-128) is invalid. + */ + A_UINT32 chain_rssi[WMI_MAX_CHAINS]; +} wmi_peer_cfr_capture_event_fixed_param; + +#define WMI_PEER_CFR_CAPTURE_EVT_STATUS_OK 0x80000000 +#define WMI_PEER_CFR_CAPTURE_EVT_STATUS_OK_S 31 + +#define WMI_PEER_CFR_CAPTURE_EVT_STATUS_TX 0x00000003 +#define WMI_PEER_CFR_CAPTURE_EVT_STATUS_TX_S 0 + +/** + * wmi_cold_boot_cal_data config flags + * BIT 0 : 1 means more data will come, 0 means last event + * BIT 1-31 : Reserved + */ +#define WMI_COLD_BOOT_CAL_DATA_SET_IS_MORE_DATA(flags, val) WMI_SET_BITS(flags, 0, 1, val) +#define WMI_COLD_BOOT_CAL_DATA_GET_IS_MORE_DATA(flags) WMI_GET_BITS(flags, 0, 1) + +typedef struct { + A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_cold_boot_cal_data_fixed_param */ + A_UINT32 data_len; /** length in byte of data[]. */ + A_UINT32 flags; /** config flags : Only 0th bit is used, bit 1-31 are reserved */ +/* Following this structure is the TLV: + * A_UINT8 data[]; <-- length in byte given by field data_len. + * This data array contains cold boot data calibration raw data. + */ +} wmi_cold_boot_cal_data_fixed_param; + +typedef struct { + A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_pdev_rap_info_event_fixed_param */ + /** pdev_id for identifying the MAC, the default value is WMI_PDEV_ID_SOC + * See macros starting with WMI_PDEV_ID_ for values. + */ + A_UINT32 pdev_id; + A_UINT32 type; /** type of the rogue ap, see WMI_ROGUE_AP_TYPE */ + wmi_mac_addr bssid; /** bssid of the rogue ap */ +} wmi_pdev_rap_info_event_fixed_param; + /* ADD NEW DEFS HERE */ diff --git a/fw/wmi_version.h b/fw/wmi_version.h index c1c746c9fcb7..7c37323f7d03 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_ 631 +#define __WMI_REVISION_ 653 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work |
