diff --git a/fw/htt.h b/fw/htt.h index aa0a44891c80..664695a76e75 100644 --- a/fw/htt.h +++ b/fw/htt.h @@ -215,9 +215,11 @@ * 3.91 Add HTT_T2H_MSG_TYPE_MLO_RX_PEER_MAP, _UNMAP defs. * 3.92 Add HTT_H2T_MSG_TYPE_RXDMA_RXOLE_PPE_CFG def. * 3.93 Add HTT_T2H_MSG_TYPE_PEER_MAP_V3 def. + * 3.94 Add HTT_H2T_MSG_TYPE_VDEVS_TXRX_STATS_CFG, + * HTT_T2H_MSG_TYPE_VDEVS_TXRX_STATS_PERIODIC_IND defs. */ #define HTT_CURRENT_VERSION_MAJOR 3 -#define HTT_CURRENT_VERSION_MINOR 93 +#define HTT_CURRENT_VERSION_MINOR 94 #define HTT_NUM_TX_FRAG_DESC 1024 @@ -501,6 +503,184 @@ PREPACK struct htt_option_tlv_support_tx_msdu_desc_ext_t { A_UINT16 tx_msdu_desc_ext_support; /* SUPPORT_TX_MSDU_DESC_EXT enum */ } POSTPACK; +typedef struct { + union { + /* BIT [11 : 0] :- tag + * BIT [23 : 12] :- length + * BIT [31 : 24] :- reserved + */ + A_UINT32 tag__length; + /* + * The following struct is not endian-portable. + * It is suitable for use within the target, which is known to be + * little-endian. + * The host should use the above endian-portable macros to access + * 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] */ + }; + }; +} htt_tlv_hdr_t; + +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_HW_WAR_TAG = 89, /* htt_hw_war_stats_tlv */ + HTT_STATS_RING_BACKPRESSURE_STATS_TAG = 90, /* htt_ring_backpressure_stats_tlv */ + HTT_STATS_LATENCY_PROF_STATS_TAG = 91, /* htt_latency_prof_stats_tlv */ + HTT_STATS_LATENCY_CTX_TAG = 92, /* htt_latency_prof_ctx_tlv */ + HTT_STATS_LATENCY_CNT_TAG = 93, /* htt_latency_prof_cnt_tlv */ + HTT_STATS_RX_PDEV_UL_TRIG_STATS_TAG = 94, /* htt_rx_pdev_ul_trigger_stats_tlv */ + HTT_STATS_RX_PDEV_UL_OFDMA_USER_STATS_TAG = 95, /* htt_rx_pdev_ul_ofdma_user_stats_tlv */ + HTT_STATS_RX_PDEV_UL_MIMO_USER_STATS_TAG = 96, /* htt_rx_pdev_ul_mimo_user_stats_tlv */ + HTT_STATS_RX_PDEV_UL_MUMIMO_TRIG_STATS_TAG = 97, /* htt_rx_pdev_ul_mumimo_trig_stats_tlv */ + HTT_STATS_RX_FSE_STATS_TAG = 98, /* htt_rx_fse_stats_tlv */ + HTT_STATS_PEER_SCHED_STATS_TAG = 99, /* htt_peer_sched_stats_tlv */ + HTT_STATS_SCHED_TXQ_SUPERCYCLE_TRIGGER_TAG = 100, /* htt_sched_txq_supercycle_triggers_tlv_v */ + HTT_STATS_PEER_CTRL_PATH_TXRX_STATS_TAG = 101, /* htt_peer_ctrl_path_txrx_stats_tlv */ + HTT_STATS_PDEV_CTRL_PATH_TX_STATS_TAG = 102, /* htt_pdev_ctrl_path_tx_stats_tlv */ + HTT_STATS_RX_PDEV_RATE_EXT_STATS_TAG = 103, /* htt_rx_pdev_rate_ext_stats_tlv */ + HTT_STATS_TX_PDEV_DL_MU_MIMO_STATS_TAG = 104, /* htt_tx_pdev_dl_mu_mimo_sch_stats_tlv */ + HTT_STATS_TX_PDEV_UL_MU_MIMO_STATS_TAG = 105, /* htt_tx_pdev_ul_mu_mimo_sch_stats_tlv */ + HTT_STATS_TX_PDEV_DL_MU_OFDMA_STATS_TAG = 106, /* htt_tx_pdev_dl_mu_ofdma_sch_stats_tlv */ + HTT_STATS_TX_PDEV_UL_MU_OFDMA_STATS_TAG = 107, /* htt_tx_pdev_ul_mu_ofdma_sch_stats_tlv */ + HTT_STATS_PDEV_TX_RATE_TXBF_STATS_TAG = 108, /* htt_tx_peer_rate_txbf_stats_tlv */ + HTT_STATS_UNSUPPORTED_ERROR_STATS_TAG = 109, /* htt_stats_error_tlv_v */ + HTT_STATS_UNAVAILABLE_ERROR_STATS_TAG = 110, /* htt_stats_error_tlv_v */ + HTT_STATS_TX_SELFGEN_AC_SCHED_STATUS_STATS_TAG = 111, /* htt_tx_selfgen_ac_sched_status_stats_tlv */ + HTT_STATS_TX_SELFGEN_AX_SCHED_STATUS_STATS_TAG = 112, /* htt_tx_selfgen_ax_sched_status_stats_tlv */ + HTT_STATS_TXBF_OFDMA_NDPA_STATS_TAG = 113, /* htt_txbf_ofdma_ndpa_stats_tlv */ + HTT_STATS_TXBF_OFDMA_NDP_STATS_TAG = 114, /* htt_txbf_ofdma_ndp_stats_tlv */ + HTT_STATS_TXBF_OFDMA_BRP_STATS_TAG = 115, /* htt_txbf_ofdma_brp_stats_tlv */ + HTT_STATS_TXBF_OFDMA_STEER_STATS_TAG = 116, /* htt_txbf_ofdma_steer_stats_tlv */ + HTT_STATS_STA_UL_OFDMA_STATS_TAG = 117, /* htt_sta_ul_ofdma_stats_tlv */ + HTT_STATS_VDEV_RTT_RESP_STATS_TAG = 118, /* htt_vdev_rtt_resp_stats_tlv */ + HTT_STATS_PKTLOG_AND_HTT_RING_STATS_TAG = 119, /* htt_pktlog_and_htt_ring_stats_tlv */ + HTT_STATS_DLPAGER_STATS_TAG = 120, /* htt_dlpager_stats_tlv */ + HTT_STATS_PHY_COUNTERS_TAG = 121, /* htt_phy_counters_tlv */ + HTT_STATS_PHY_STATS_TAG = 122, /* htt_phy_stats_tlv */ + HTT_STATS_PHY_RESET_COUNTERS_TAG = 123, /* htt_phy_reset_counters_tlv */ + HTT_STATS_PHY_RESET_STATS_TAG = 124, /* htt_phy_reset_stats_tlv */ + HTT_STATS_SOC_TXRX_STATS_COMMON_TAG = 125, /* htt_t2h_soc_txrx_stats_common_tlv */ + HTT_STATS_VDEV_TXRX_STATS_HW_STATS_TAG = 126, /* htt_t2h_vdev_txrx_stats_hw_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_GET(_var) \ + (((_var) & HTT_STATS_TLV_TAG_M) >> \ + 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) + +#define HTT_STATS_TLV_LENGTH_GET(_var) \ + (((_var) & HTT_STATS_TLV_LENGTH_M) >> \ + 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) + /*=== host -> target messages ===============================================*/ @@ -531,6 +711,7 @@ enum htt_h2t_msg_type { HTT_H2T_MSG_TYPE_RX_FULL_MONITOR_MODE = 0x17, HTT_H2T_MSG_TYPE_HOST_PADDR_SIZE = 0x18, HTT_H2T_MSG_TYPE_RXDMA_RXOLE_PPE_CFG = 0x19, + HTT_H2T_MSG_TYPE_VDEVS_TXRX_STATS_CFG = 0x1a, /* keep this last */ HTT_H2T_NUM_MSGS @@ -7130,61 +7311,149 @@ PREPACK struct htt_h2t_msg_type_rxdma_rxole_ppe_cfg_t { ((_var) |= ((_val) << HTT_PPE_CFG_IP_FRAG_OVERRIDE_EN_S)); \ } while (0) +/* + * MSG_TYPE => HTT_H2T_MSG_TYPE_VDEVS_TXRX_STATS_CFG + * + * @details + * The following field definitions describe the format of the HTT host + * to target FW VDEV TX RX stats retrieve message. + * The message specifies the type of stats the host wants to retrieve. + * + * |31 27|26 25|24 17|16|15 8|7 0| + * |-----------------------------------------------------------| + * | rsvd | R | Periodic Int| E| pdev_id | msg type | + * |-----------------------------------------------------------| + * | vdev_id lower bitmask | + * |-----------------------------------------------------------| + * | vdev_id upper bitmask | + * |-----------------------------------------------------------| + * Header fields: + * Where: + * dword0 - b'7:0 - msg_type: This will be set to + * 0x1a (HTT_H2T_MSG_TYPE_VDEVS_TXRX_STATS_CFG) + * b'15:8 - pdev id + * b'16(E) - Enable/Disable the vdev HW stats + * b'17:24(PI) - Periodic Interval, units = 8 ms, e.g. 125 -> 1000 ms + * b'25:26(R) - Reset stats bits + * 0: don't reset stats + * 1: reset stats once + * 2: reset stats at the start of each periodic interval + * b'27:31 - reserved for future use + * dword1 - b'0:31 - vdev_id lower bitmask + * dword2 - b'0:31 - vdev_id upper bitmask + */ + +PREPACK struct htt_h2t_vdevs_txrx_stats_cfg { + A_UINT32 msg_type :8, + pdev_id :8, + enable :1, + periodic_interval :8, + reset_stats_bits :2, + reserved0 :5; + A_UINT32 vdev_id_lower_bitmask; + A_UINT32 vdev_id_upper_bitmask; +} POSTPACK; + +#define HTT_H2T_VDEVS_TXRX_STATS_PDEV_ID_M 0xFF00 +#define HTT_H2T_VDEVS_TXRX_STATS_PDEV_ID_S 8 +#define HTT_H2T_VDEVS_TXRX_STATS_PDEV_ID_GET(_var) \ + (((_var) & HTT_H2T_VDEVS_TXRX_STATS_PDEV_ID_M) >> \ + HTT_H2T_VDEVS_TXRX_STATS_PDEV_ID_S) +#define HTT_RX_VDEVS_TXRX_STATS_PDEV_ID_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_H2T_VDEVS_TXRX_STATS_PDEV_ID, _val); \ + ((_var) |= ((_val) << HTT_H2T_VDEVS_TXRX_STATS_PDEV_ID_S)); \ + } while (0) + +#define HTT_H2T_VDEVS_TXRX_STATS_ENABLE_M 0x10000 +#define HTT_H2T_VDEVS_TXRX_STATS_ENABLE_S 16 +#define HTT_H2T_VDEVS_TXRX_STATS_ENABLE_GET(_var) \ + (((_var) & HTT_H2T_VDEVS_TXRX_STATS_ENABLE_M) >> \ + HTT_H2T_VDEVS_TXRX_STATS_ENABLE_S) +#define HTT_RX_VDEVS_TXRX_STATS_ENABLE_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_H2T_VDEVS_TXRX_STATS_ENABLE, _val); \ + ((_var) |= ((_val) << HTT_H2T_VDEVS_TXRX_STATS_ENABLE_S)); \ + } while (0) + +#define HTT_H2T_VDEVS_TXRX_STATS_PERIODIC_INTERVAL_M 0x1FE0000 +#define HTT_H2T_VDEVS_TXRX_STATS_PERIODIC_INTERVAL_S 17 +#define HTT_H2T_VDEVS_TXRX_STATS_PERIODIC_INTERVAL_GET(_var) \ + (((_var) & HTT_H2T_VDEVS_TXRX_STATS_PERIODIC_INTERVAL_M) >> \ + HTT_H2T_VDEVS_TXRX_STATS_PERIODIC_INTERVAL_S) +#define HTT_RX_VDEVS_TXRX_STATS_PERIODIC_INTERVAL_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_H2T_VDEVS_TXRX_STATS_PERIODIC_INTERVAL, _val); \ + ((_var) |= ((_val) << HTT_H2T_VDEVS_TXRX_STATS_PERIODIC_INTERVAL_S)); \ + } while (0) + +#define HTT_H2T_VDEVS_TXRX_STATS_RESET_STATS_BITS_M 0x6000000 +#define HTT_H2T_VDEVS_TXRX_STATS_RESET_STATS_BITS_S 25 +#define HTT_H2T_VDEVS_TXRX_STATS_RESET_STATS_BITS_GET(_var) \ + (((_var) & HTT_H2T_VDEVS_TXRX_STATS_RESET_STATS_BITS_M) >> \ + HTT_H2T_VDEVS_TXRX_STATS_RESET_STATS_BITS_S) +#define HTT_RX_VDEVS_TXRX_STATS_RESET_STATS_BITS_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_H2T_VDEVS_TXRX_STATS_RESET_STATS_BITS, _val); \ + ((_var) |= ((_val) << HTT_H2T_VDEVS_TXRX_STATS_RESET_STATS_BITS_S)); \ + } while (0) + /*=== target -> host messages ===============================================*/ enum htt_t2h_msg_type { - HTT_T2H_MSG_TYPE_VERSION_CONF = 0x0, - HTT_T2H_MSG_TYPE_RX_IND = 0x1, - HTT_T2H_MSG_TYPE_RX_FLUSH = 0x2, - HTT_T2H_MSG_TYPE_PEER_MAP = 0x3, - HTT_T2H_MSG_TYPE_PEER_UNMAP = 0x4, - HTT_T2H_MSG_TYPE_RX_ADDBA = 0x5, - HTT_T2H_MSG_TYPE_RX_DELBA = 0x6, - HTT_T2H_MSG_TYPE_TX_COMPL_IND = 0x7, - HTT_T2H_MSG_TYPE_PKTLOG = 0x8, - HTT_T2H_MSG_TYPE_STATS_CONF = 0x9, - HTT_T2H_MSG_TYPE_RX_FRAG_IND = 0xa, - HTT_T2H_MSG_TYPE_SEC_IND = 0xb, - DEPRECATED_HTT_T2H_MSG_TYPE_RC_UPDATE_IND = 0xc, /* no longer used */ - HTT_T2H_MSG_TYPE_TX_INSPECT_IND = 0xd, - HTT_T2H_MSG_TYPE_MGMT_TX_COMPL_IND = 0xe, + HTT_T2H_MSG_TYPE_VERSION_CONF = 0x0, + HTT_T2H_MSG_TYPE_RX_IND = 0x1, + HTT_T2H_MSG_TYPE_RX_FLUSH = 0x2, + HTT_T2H_MSG_TYPE_PEER_MAP = 0x3, + HTT_T2H_MSG_TYPE_PEER_UNMAP = 0x4, + HTT_T2H_MSG_TYPE_RX_ADDBA = 0x5, + HTT_T2H_MSG_TYPE_RX_DELBA = 0x6, + HTT_T2H_MSG_TYPE_TX_COMPL_IND = 0x7, + HTT_T2H_MSG_TYPE_PKTLOG = 0x8, + HTT_T2H_MSG_TYPE_STATS_CONF = 0x9, + HTT_T2H_MSG_TYPE_RX_FRAG_IND = 0xa, + HTT_T2H_MSG_TYPE_SEC_IND = 0xb, + DEPRECATED_HTT_T2H_MSG_TYPE_RC_UPDATE_IND = 0xc, /* no longer used */ + HTT_T2H_MSG_TYPE_TX_INSPECT_IND = 0xd, + HTT_T2H_MSG_TYPE_MGMT_TX_COMPL_IND = 0xe, /* only used for HL, add HTT MSG for HTT CREDIT update */ - HTT_T2H_MSG_TYPE_TX_CREDIT_UPDATE_IND = 0xf, - HTT_T2H_MSG_TYPE_RX_PN_IND = 0x10, - HTT_T2H_MSG_TYPE_RX_OFFLOAD_DELIVER_IND = 0x11, - HTT_T2H_MSG_TYPE_RX_IN_ORD_PADDR_IND = 0x12, + HTT_T2H_MSG_TYPE_TX_CREDIT_UPDATE_IND = 0xf, + HTT_T2H_MSG_TYPE_RX_PN_IND = 0x10, + HTT_T2H_MSG_TYPE_RX_OFFLOAD_DELIVER_IND = 0x11, + HTT_T2H_MSG_TYPE_RX_IN_ORD_PADDR_IND = 0x12, /* 0x13 is reserved for RX_RING_LOW_IND (RX Full reordering related) */ - HTT_T2H_MSG_TYPE_WDI_IPA_OP_RESPONSE = 0x14, - HTT_T2H_MSG_TYPE_CHAN_CHANGE = 0x15, - HTT_T2H_MSG_TYPE_RX_OFLD_PKT_ERR = 0x16, - HTT_T2H_MSG_TYPE_RATE_REPORT = 0x17, - HTT_T2H_MSG_TYPE_FLOW_POOL_MAP = 0x18, - HTT_T2H_MSG_TYPE_FLOW_POOL_UNMAP = 0x19, - HTT_T2H_MSG_TYPE_SRING_SETUP_DONE = 0x1a, - HTT_T2H_MSG_TYPE_MAP_FLOW_INFO = 0x1b, - HTT_T2H_MSG_TYPE_EXT_STATS_CONF = 0x1c, - HTT_T2H_MSG_TYPE_PPDU_STATS_IND = 0x1d, - HTT_T2H_MSG_TYPE_PEER_MAP_V2 = 0x1e, - HTT_T2H_MSG_TYPE_PEER_UNMAP_V2 = 0x1f, - HTT_T2H_MSG_TYPE_MONITOR_MAC_HEADER_IND = 0x20, - HTT_T2H_MSG_TYPE_FLOW_POOL_RESIZE = 0x21, - HTT_T2H_MSG_TYPE_CFR_DUMP_COMPL_IND = 0x22, - HTT_T2H_MSG_TYPE_PEER_STATS_IND = 0x23, - HTT_T2H_MSG_TYPE_BKPRESSURE_EVENT_IND = 0x24, + HTT_T2H_MSG_TYPE_WDI_IPA_OP_RESPONSE = 0x14, + HTT_T2H_MSG_TYPE_CHAN_CHANGE = 0x15, + HTT_T2H_MSG_TYPE_RX_OFLD_PKT_ERR = 0x16, + HTT_T2H_MSG_TYPE_RATE_REPORT = 0x17, + HTT_T2H_MSG_TYPE_FLOW_POOL_MAP = 0x18, + HTT_T2H_MSG_TYPE_FLOW_POOL_UNMAP = 0x19, + HTT_T2H_MSG_TYPE_SRING_SETUP_DONE = 0x1a, + HTT_T2H_MSG_TYPE_MAP_FLOW_INFO = 0x1b, + HTT_T2H_MSG_TYPE_EXT_STATS_CONF = 0x1c, + HTT_T2H_MSG_TYPE_PPDU_STATS_IND = 0x1d, + HTT_T2H_MSG_TYPE_PEER_MAP_V2 = 0x1e, + HTT_T2H_MSG_TYPE_PEER_UNMAP_V2 = 0x1f, + HTT_T2H_MSG_TYPE_MONITOR_MAC_HEADER_IND = 0x20, + HTT_T2H_MSG_TYPE_FLOW_POOL_RESIZE = 0x21, + HTT_T2H_MSG_TYPE_CFR_DUMP_COMPL_IND = 0x22, + HTT_T2H_MSG_TYPE_PEER_STATS_IND = 0x23, + HTT_T2H_MSG_TYPE_BKPRESSURE_EVENT_IND = 0x24, /* TX_OFFLOAD_DELIVER_IND: * Forward the target's locally-generated packets to the host, * to provide to the monitor mode interface. */ - HTT_T2H_MSG_TYPE_TX_OFFLOAD_DELIVER_IND = 0x25, - HTT_T2H_MSG_TYPE_CHAN_CALDATA = 0x26, - HTT_T2H_MSG_TYPE_FSE_CMEM_BASE_SEND = 0x27, - HTT_T2H_MSG_TYPE_MLO_TIMESTAMP_OFFSET_IND = 0x28, - HTT_T2H_MSG_TYPE_MLO_RX_PEER_MAP = 0x29, - HTT_T2H_MSG_TYPE_MLO_RX_PEER_UNMAP = 0x2a, - HTT_T2H_MSG_TYPE_PEER_MAP_V3 = 0x2b, + HTT_T2H_MSG_TYPE_TX_OFFLOAD_DELIVER_IND = 0x25, + HTT_T2H_MSG_TYPE_CHAN_CALDATA = 0x26, + HTT_T2H_MSG_TYPE_FSE_CMEM_BASE_SEND = 0x27, + HTT_T2H_MSG_TYPE_MLO_TIMESTAMP_OFFSET_IND = 0x28, + HTT_T2H_MSG_TYPE_MLO_RX_PEER_MAP = 0x29, + HTT_T2H_MSG_TYPE_MLO_RX_PEER_UNMAP = 0x2a, + HTT_T2H_MSG_TYPE_PEER_MAP_V3 = 0x2b, + HTT_T2H_MSG_TYPE_VDEVS_TXRX_STATS_PERIODIC_IND = 0x2c, HTT_T2H_MSG_TYPE_TEST, @@ -15474,5 +15743,122 @@ typedef struct { reserved3: 10; /* bits 31:22 */ } htt_t2h_mlo_offset_ind_t; +/* + * @brief target -> host VDEV TX RX STATS + * + * MSG_TYPE => HTT_T2H_MSG_TYPE_VDEVS_TXRX_STATS_PERIODIC_IND + * + * @details + * HTT_T2H_MSG_TYPE_VDEVS_TXRX_STATS_PERIODIC_IND message is sent by the target + * every periodic interval programmed in HTT_H2T_MSG_TYPE_VDEVS_TXRX_STATS_CFG. + * After the host sends an initial HTT_H2T_MSG_TYPE_VDEVS_TXRX_STATS_CFG, + * this HTT_T2H_MSG_TYPE_VDEVS_TXRX_STATS_PERIODIC_IND message will be sent + * periodically by target even in the absence of any further HTT request + * messages from host. + * + * The message is formatted as follows: + * + * |31 16|15 8|7 0| + * |---------------------------------+----------------+----------------| + * | payload_size | pdev_id | msg_type | + * |---------------------------------+----------------+----------------| + * | reserved0 | + * |-------------------------------------------------------------------| + * | reserved1 | + * |-------------------------------------------------------------------| + * | reserved2 | + * |-------------------------------------------------------------------| + * | | + * | VDEV specific Tx Rx stats info | + * | | + * |-------------------------------------------------------------------| + * + * The message is interpreted as follows: + * dword0 - b'0:7 - msg_type: This will be set to 0x2c + * (HTT_T2H_MSG_TYPE_VDEVS_TXRX_STATS_PERIODIC_IND) + * b'8:15 - pdev_id + * b'16:31 - size in bytes of the payload that follows the 16-byte + * message header fields (msg_type through reserved2) + * dword1 - b'0:31 - reserved0. + * dword2 - b'0:31 - reserved1. + * dword3 - b'0:31 - reserved2. + */ +typedef struct { + A_UINT32 msg_type: 8, + pdev_id: 8, + payload_size: 16; + A_UINT32 reserved0; + A_UINT32 reserved1; + A_UINT32 reserved2; +} htt_t2h_vdevs_txrx_stats_periodic_hdr_t; + +#define HTT_T2H_VDEVS_TXRX_STATS_PERIODIC_IND_HDR_SIZE 16 + +#define HTT_T2H_VDEVS_TXRX_STATS_PERIODIC_IND_PDEV_ID_M 0x0000FF00 +#define HTT_T2H_VDEVS_TXRX_STATS_PERIODIC_IND_PDEV_ID_S 8 + +#define HTT_T2H_VDEVS_TXRX_STATS_PERIODIC_IND_PDEV_ID_GET(_var) \ + (((_var) & HTT_T2H_VDEVS_TXRX_STATS_PERIODIC_IND_PDEV_ID_M) >> HTT_T2H_VDEVS_TXRX_STATS_PERIODIC_IND_PDEV_ID_S) +#define HTT_T2H_VDEVS_TXRX_STATS_PERIODIC_IND_PDEV_ID_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_T2H_VDEVS_TXRX_STATS_PERIODIC_IND_PDEV_ID, _val); \ + ((_var) |= ((_val) << HTT_T2H_VDEVS_TXRX_STATS_PERIODIC_IND_PDEV_ID_S)); \ + } while (0) + +#define HTT_T2H_VDEVS_TXRX_STATS_PERIODIC_IND_PAYLOAD_SIZE_M 0xFFFF0000 +#define HTT_T2H_VDEVS_TXRX_STATS_PERIODIC_IND_PAYLOAD_SIZE_S 16 + +#define HTT_T2H_VDEVS_TXRX_STATS_PERIODIC_IND_PAYLOAD_SIZE_GET(_var) \ + (((_var) & HTT_T2H_VDEVS_TXRX_STATS_PERIODIC_IND_PAYLOAD_SIZE_M) >> HTT_T2H_VDEVS_TXRX_STATS_PERIODIC_IND_PAYLOAD_SIZE_S) +#define HTT_T2H_VDEVS_TXRX_STATS_PERIODIC_IND_PAYLOAD_SIZE_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_T2H_VDEVS_TXRX_STATS_PERIODIC_IND_PAYLOAD_SIZE, _val); \ + ((_var) |= ((_val) << HTT_T2H_VDEVS_TXRX_STATS_PERIODIC_IND_PAYLOAD_SIZE_S)); \ + } while (0) + +/* SOC related stats */ +typedef struct { + htt_tlv_hdr_t tlv_hdr; + + /* When TQM is not able to find the peers during Tx, then it drops the packets + * This can be due to either the peer is deleted or deletion is ongoing + * */ + A_UINT32 inv_peers_msdu_drop_count_lo; + A_UINT32 inv_peers_msdu_drop_count_hi; +} htt_t2h_soc_txrx_stats_common_tlv; + +/* VDEV HW Tx/Rx stats */ +typedef struct { + htt_tlv_hdr_t tlv_hdr; + A_UINT32 vdev_id; + + /* Rx msdu byte cnt */ + A_UINT32 rx_msdu_byte_cnt_lo; + A_UINT32 rx_msdu_byte_cnt_hi; + + /* Rx msdu cnt */ + A_UINT32 rx_msdu_cnt_lo; + A_UINT32 rx_msdu_cnt_hi; + + /* tx msdu byte cnt */ + A_UINT32 tx_msdu_byte_cnt_lo; + A_UINT32 tx_msdu_byte_cnt_hi; + + /* tx msdu cnt */ + A_UINT32 tx_msdu_cnt_lo; + A_UINT32 tx_msdu_cnt_hi; + + /* tx excessive retry discarded msdu cnt*/ + A_UINT32 tx_msdu_excessive_retry_discard_cnt_lo; + A_UINT32 tx_msdu_excessive_retry_discard_cnt_hi; + + /* TX congestion ctrl msdu drop cnt */ + A_UINT32 tx_msdu_cong_ctrl_drop_cnt_lo; + A_UINT32 tx_msdu_cong_ctrl_drop_cnt_hi; + + /* discarded tx msdus cnt coz of time to live expiry */ + A_UINT32 tx_msdu_ttl_expire_drop_cnt_lo; + A_UINT32 tx_msdu_ttl_expire_drop_cnt_hi; +} htt_t2h_vdev_txrx_stats_hw_stats_tlv; #endif diff --git a/fw/htt_stats.h b/fw/htt_stats.h index 6852e81c3aa3..612697ef0f88 100644 --- a/fw/htt_stats.h +++ b/fw/htt_stats.h @@ -392,6 +392,14 @@ enum htt_dbg_ext_stats_type { */ HTT_DBG_EXT_PHY_COUNTERS_AND_PHY_STATS = 37, + /* HTT_DBG_EXT_VDEVS_TXRX_STATS + * PARAMS: + * - No Params + * RESP MSG: + * - htt_vdevs_txrx_stats_t + */ + HTT_DBG_EXT_VDEVS_TXRX_STATS = 38, + /* keep this last */ HTT_DBG_NUM_EXT_STATS = 256, @@ -416,137 +424,6 @@ enum htt_dbg_ext_stats_type { #define HTT_STATS_SUBTYPE_MAX 16 -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_HW_WAR_TAG = 89, /* htt_hw_war_stats_tlv */ - HTT_STATS_RING_BACKPRESSURE_STATS_TAG = 90, /* htt_ring_backpressure_stats_tlv */ - HTT_STATS_LATENCY_PROF_STATS_TAG = 91, /* htt_latency_prof_stats_tlv */ - HTT_STATS_LATENCY_CTX_TAG = 92, /* htt_latency_prof_ctx_tlv */ - HTT_STATS_LATENCY_CNT_TAG = 93, /* htt_latency_prof_cnt_tlv */ - HTT_STATS_RX_PDEV_UL_TRIG_STATS_TAG = 94, /* htt_rx_pdev_ul_trigger_stats_tlv */ - HTT_STATS_RX_PDEV_UL_OFDMA_USER_STATS_TAG = 95, /* htt_rx_pdev_ul_ofdma_user_stats_tlv */ - HTT_STATS_RX_PDEV_UL_MIMO_USER_STATS_TAG = 96, /* htt_rx_pdev_ul_mimo_user_stats_tlv */ - HTT_STATS_RX_PDEV_UL_MUMIMO_TRIG_STATS_TAG = 97, /* htt_rx_pdev_ul_mumimo_trig_stats_tlv */ - HTT_STATS_RX_FSE_STATS_TAG = 98, /* htt_rx_fse_stats_tlv */ - HTT_STATS_PEER_SCHED_STATS_TAG = 99, /* htt_peer_sched_stats_tlv */ - HTT_STATS_SCHED_TXQ_SUPERCYCLE_TRIGGER_TAG = 100, /* htt_sched_txq_supercycle_triggers_tlv_v */ - HTT_STATS_PEER_CTRL_PATH_TXRX_STATS_TAG = 101, /* htt_peer_ctrl_path_txrx_stats_tlv */ - HTT_STATS_PDEV_CTRL_PATH_TX_STATS_TAG = 102, /* htt_pdev_ctrl_path_tx_stats_tlv */ - HTT_STATS_RX_PDEV_RATE_EXT_STATS_TAG = 103, /* htt_rx_pdev_rate_ext_stats_tlv */ - HTT_STATS_TX_PDEV_DL_MU_MIMO_STATS_TAG = 104, /* htt_tx_pdev_dl_mu_mimo_sch_stats_tlv */ - HTT_STATS_TX_PDEV_UL_MU_MIMO_STATS_TAG = 105, /* htt_tx_pdev_ul_mu_mimo_sch_stats_tlv */ - HTT_STATS_TX_PDEV_DL_MU_OFDMA_STATS_TAG = 106, /* htt_tx_pdev_dl_mu_ofdma_sch_stats_tlv */ - HTT_STATS_TX_PDEV_UL_MU_OFDMA_STATS_TAG = 107, /* htt_tx_pdev_ul_mu_ofdma_sch_stats_tlv */ - HTT_STATS_PDEV_TX_RATE_TXBF_STATS_TAG = 108, /* htt_tx_peer_rate_txbf_stats_tlv */ - HTT_STATS_UNSUPPORTED_ERROR_STATS_TAG = 109, /* htt_stats_error_tlv_v */ - HTT_STATS_UNAVAILABLE_ERROR_STATS_TAG = 110, /* htt_stats_error_tlv_v */ - HTT_STATS_TX_SELFGEN_AC_SCHED_STATUS_STATS_TAG = 111, /* htt_tx_selfgen_ac_sched_status_stats_tlv */ - HTT_STATS_TX_SELFGEN_AX_SCHED_STATUS_STATS_TAG = 112, /* htt_tx_selfgen_ax_sched_status_stats_tlv */ - HTT_STATS_TXBF_OFDMA_NDPA_STATS_TAG = 113, /* htt_txbf_ofdma_ndpa_stats_tlv */ - HTT_STATS_TXBF_OFDMA_NDP_STATS_TAG = 114, /* htt_txbf_ofdma_ndp_stats_tlv */ - HTT_STATS_TXBF_OFDMA_BRP_STATS_TAG = 115, /* htt_txbf_ofdma_brp_stats_tlv */ - HTT_STATS_TXBF_OFDMA_STEER_STATS_TAG = 116, /* htt_txbf_ofdma_steer_stats_tlv */ - HTT_STATS_STA_UL_OFDMA_STATS_TAG = 117, /* htt_sta_ul_ofdma_stats_tlv */ - HTT_STATS_VDEV_RTT_RESP_STATS_TAG = 118, /* htt_vdev_rtt_resp_stats_tlv */ - HTT_STATS_PKTLOG_AND_HTT_RING_STATS_TAG = 119, /* htt_pktlog_and_htt_ring_stats_tlv */ - HTT_STATS_DLPAGER_STATS_TAG = 120, /* htt_dlpager_stats_tlv */ - HTT_STATS_PHY_COUNTERS_TAG = 121, /* htt_phy_counters_tlv */ - HTT_STATS_PHY_STATS_TAG = 122, /* htt_phy_stats_tlv */ - HTT_STATS_PHY_RESET_COUNTERS_TAG = 123, /* htt_phy_reset_counters_tlv */ - HTT_STATS_PHY_RESET_STATS_TAG = 124, /* htt_phy_reset_stats_tlv */ - - - HTT_STATS_MAX_TAG, -} htt_tlv_tag_t; - /* htt_mu_stats_upload_t * Enumerations for specifying whether to upload all MU stats in response to * HTT_DBG_EXT_STATS_PDEV_TX_MU, or if not all, then which subset. @@ -569,52 +446,6 @@ typedef enum { HTT_UPLOAD_UL_MU_OFDMA_STATS, } htt_mu_stats_upload_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_GET(_var) \ - (((_var) & HTT_STATS_TLV_TAG_M) >> \ - 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) - -#define HTT_STATS_TLV_LENGTH_GET(_var) \ - (((_var) & HTT_STATS_TLV_LENGTH_M) >> \ - 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) - -typedef struct { - union { - /* BIT [11 : 0] :- tag - * BIT [23 : 12] :- length - * BIT [31 : 24] :- reserved - */ - A_UINT32 tag__length; - /* - * The following struct is not endian-portable. - * It is suitable for use within the target, which is known to be - * little-endian. - * The host should use the above endian-portable macros to access - * 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] */ - }; - }; -} 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 @@ -5695,4 +5526,13 @@ typedef struct { htt_phy_reset_stats_tlv phy_reset_stats; } htt_phy_counters_and_phy_stats_t; +/* NOTE: + * This structure is for documentation, and cannot be safely used directly. + * Instead, use the constituent TLV structures to fill/parse. + */ +typedef struct { + htt_t2h_soc_txrx_stats_common_tlv soc_common_stats; + htt_t2h_vdev_txrx_stats_hw_stats_tlv vdev_hw_stats[1/*or more*/]; +} htt_vdevs_txrx_stats_t; + #endif /* __HTT_STATS_H__ */