Path: blob/main/sys/contrib/dev/athk/ath11k/debugfs_htt_stats.h
48378 views
/* SPDX-License-Identifier: BSD-3-Clause-Clear */1/*2* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.3* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.4*/56#ifndef DEBUG_HTT_STATS_H7#define DEBUG_HTT_STATS_H89#define HTT_STATS_COOKIE_LSB GENMASK_ULL(31, 0)10#define HTT_STATS_COOKIE_MSB GENMASK_ULL(63, 32)11#define HTT_STATS_MAGIC_VALUE 0xF0F0F0F01213enum htt_tlv_tag_t {14HTT_STATS_TX_PDEV_CMN_TAG = 0,15HTT_STATS_TX_PDEV_UNDERRUN_TAG = 1,16HTT_STATS_TX_PDEV_SIFS_TAG = 2,17HTT_STATS_TX_PDEV_FLUSH_TAG = 3,18HTT_STATS_TX_PDEV_PHY_ERR_TAG = 4,19HTT_STATS_STRING_TAG = 5,20HTT_STATS_TX_HWQ_CMN_TAG = 6,21HTT_STATS_TX_HWQ_DIFS_LATENCY_TAG = 7,22HTT_STATS_TX_HWQ_CMD_RESULT_TAG = 8,23HTT_STATS_TX_HWQ_CMD_STALL_TAG = 9,24HTT_STATS_TX_HWQ_FES_STATUS_TAG = 10,25HTT_STATS_TX_TQM_GEN_MPDU_TAG = 11,26HTT_STATS_TX_TQM_LIST_MPDU_TAG = 12,27HTT_STATS_TX_TQM_LIST_MPDU_CNT_TAG = 13,28HTT_STATS_TX_TQM_CMN_TAG = 14,29HTT_STATS_TX_TQM_PDEV_TAG = 15,30HTT_STATS_TX_TQM_CMDQ_STATUS_TAG = 16,31HTT_STATS_TX_DE_EAPOL_PACKETS_TAG = 17,32HTT_STATS_TX_DE_CLASSIFY_FAILED_TAG = 18,33HTT_STATS_TX_DE_CLASSIFY_STATS_TAG = 19,34HTT_STATS_TX_DE_CLASSIFY_STATUS_TAG = 20,35HTT_STATS_TX_DE_ENQUEUE_PACKETS_TAG = 21,36HTT_STATS_TX_DE_ENQUEUE_DISCARD_TAG = 22,37HTT_STATS_TX_DE_CMN_TAG = 23,38HTT_STATS_RING_IF_TAG = 24,39HTT_STATS_TX_PDEV_MU_MIMO_STATS_TAG = 25,40HTT_STATS_SFM_CMN_TAG = 26,41HTT_STATS_SRING_STATS_TAG = 27,42HTT_STATS_RX_PDEV_FW_STATS_TAG = 28,43HTT_STATS_RX_PDEV_FW_RING_MPDU_ERR_TAG = 29,44HTT_STATS_RX_PDEV_FW_MPDU_DROP_TAG = 30,45HTT_STATS_RX_SOC_FW_STATS_TAG = 31,46HTT_STATS_RX_SOC_FW_REFILL_RING_EMPTY_TAG = 32,47HTT_STATS_RX_SOC_FW_REFILL_RING_NUM_REFILL_TAG = 33,48HTT_STATS_TX_PDEV_RATE_STATS_TAG = 34,49HTT_STATS_RX_PDEV_RATE_STATS_TAG = 35,50HTT_STATS_TX_PDEV_SCHEDULER_TXQ_STATS_TAG = 36,51HTT_STATS_TX_SCHED_CMN_TAG = 37,52HTT_STATS_TX_PDEV_MUMIMO_MPDU_STATS_TAG = 38,53HTT_STATS_SCHED_TXQ_CMD_POSTED_TAG = 39,54HTT_STATS_RING_IF_CMN_TAG = 40,55HTT_STATS_SFM_CLIENT_USER_TAG = 41,56HTT_STATS_SFM_CLIENT_TAG = 42,57HTT_STATS_TX_TQM_ERROR_STATS_TAG = 43,58HTT_STATS_SCHED_TXQ_CMD_REAPED_TAG = 44,59HTT_STATS_SRING_CMN_TAG = 45,60HTT_STATS_TX_SELFGEN_AC_ERR_STATS_TAG = 46,61HTT_STATS_TX_SELFGEN_CMN_STATS_TAG = 47,62HTT_STATS_TX_SELFGEN_AC_STATS_TAG = 48,63HTT_STATS_TX_SELFGEN_AX_STATS_TAG = 49,64HTT_STATS_TX_SELFGEN_AX_ERR_STATS_TAG = 50,65HTT_STATS_TX_HWQ_MUMIMO_SCH_STATS_TAG = 51,66HTT_STATS_TX_HWQ_MUMIMO_MPDU_STATS_TAG = 52,67HTT_STATS_TX_HWQ_MUMIMO_CMN_STATS_TAG = 53,68HTT_STATS_HW_INTR_MISC_TAG = 54,69HTT_STATS_HW_WD_TIMEOUT_TAG = 55,70HTT_STATS_HW_PDEV_ERRS_TAG = 56,71HTT_STATS_COUNTER_NAME_TAG = 57,72HTT_STATS_TX_TID_DETAILS_TAG = 58,73HTT_STATS_RX_TID_DETAILS_TAG = 59,74HTT_STATS_PEER_STATS_CMN_TAG = 60,75HTT_STATS_PEER_DETAILS_TAG = 61,76HTT_STATS_PEER_TX_RATE_STATS_TAG = 62,77HTT_STATS_PEER_RX_RATE_STATS_TAG = 63,78HTT_STATS_PEER_MSDU_FLOWQ_TAG = 64,79HTT_STATS_TX_DE_COMPL_STATS_TAG = 65,80HTT_STATS_WHAL_TX_TAG = 66,81HTT_STATS_TX_PDEV_SIFS_HIST_TAG = 67,82HTT_STATS_RX_PDEV_FW_STATS_PHY_ERR_TAG = 68,83HTT_STATS_TX_TID_DETAILS_V1_TAG = 69,84HTT_STATS_PDEV_CCA_1SEC_HIST_TAG = 70,85HTT_STATS_PDEV_CCA_100MSEC_HIST_TAG = 71,86HTT_STATS_PDEV_CCA_STAT_CUMULATIVE_TAG = 72,87HTT_STATS_PDEV_CCA_COUNTERS_TAG = 73,88HTT_STATS_TX_PDEV_MPDU_STATS_TAG = 74,89HTT_STATS_PDEV_TWT_SESSIONS_TAG = 75,90HTT_STATS_PDEV_TWT_SESSION_TAG = 76,91HTT_STATS_RX_REFILL_RXDMA_ERR_TAG = 77,92HTT_STATS_RX_REFILL_REO_ERR_TAG = 78,93HTT_STATS_RX_REO_RESOURCE_STATS_TAG = 79,94HTT_STATS_TX_SOUNDING_STATS_TAG = 80,95HTT_STATS_TX_PDEV_TX_PPDU_STATS_TAG = 81,96HTT_STATS_TX_PDEV_TRIED_MPDU_CNT_HIST_TAG = 82,97HTT_STATS_TX_HWQ_TRIED_MPDU_CNT_HIST_TAG = 83,98HTT_STATS_TX_HWQ_TXOP_USED_CNT_HIST_TAG = 84,99HTT_STATS_TX_DE_FW2WBM_RING_FULL_HIST_TAG = 85,100HTT_STATS_SCHED_TXQ_SCHED_ORDER_SU_TAG = 86,101HTT_STATS_SCHED_TXQ_SCHED_INELIGIBILITY_TAG = 87,102HTT_STATS_PDEV_OBSS_PD_TAG = 88,103HTT_STATS_HW_WAR_TAG = 89,104HTT_STATS_RING_BACKPRESSURE_STATS_TAG = 90,105HTT_STATS_PEER_CTRL_PATH_TXRX_STATS_TAG = 101,106HTT_STATS_PDEV_TX_RATE_TXBF_STATS_TAG = 108,107HTT_STATS_TXBF_OFDMA_NDPA_STATS_TAG = 113,108HTT_STATS_TXBF_OFDMA_NDP_STATS_TAG = 114,109HTT_STATS_TXBF_OFDMA_BRP_STATS_TAG = 115,110HTT_STATS_TXBF_OFDMA_STEER_STATS_TAG = 116,111HTT_STATS_PHY_COUNTERS_TAG = 121,112HTT_STATS_PHY_STATS_TAG = 122,113HTT_STATS_PHY_RESET_COUNTERS_TAG = 123,114HTT_STATS_PHY_RESET_STATS_TAG = 124,115116HTT_STATS_MAX_TAG,117};118119#define HTT_STATS_MAX_STRING_SZ32 4120#define HTT_STATS_MACID_INVALID 0xff121#define HTT_TX_HWQ_MAX_DIFS_LATENCY_BINS 10122#define HTT_TX_HWQ_MAX_CMD_RESULT_STATS 13123#define HTT_TX_HWQ_MAX_CMD_STALL_STATS 5124#define HTT_TX_HWQ_MAX_FES_RESULT_STATS 10125126enum htt_tx_pdev_underrun_enum {127HTT_STATS_TX_PDEV_NO_DATA_UNDERRUN = 0,128HTT_STATS_TX_PDEV_DATA_UNDERRUN_BETWEEN_MPDU = 1,129HTT_STATS_TX_PDEV_DATA_UNDERRUN_WITHIN_MPDU = 2,130HTT_TX_PDEV_MAX_URRN_STATS = 3,131};132133#define HTT_TX_PDEV_MAX_FLUSH_REASON_STATS 71134#define HTT_TX_PDEV_MAX_SIFS_BURST_STATS 9135#define HTT_TX_PDEV_MAX_SIFS_BURST_HIST_STATS 10136#define HTT_TX_PDEV_MAX_PHY_ERR_STATS 18137#define HTT_TX_PDEV_SCHED_TX_MODE_MAX 4138#define HTT_TX_PDEV_NUM_SCHED_ORDER_LOG 20139140#define HTT_RX_STATS_REFILL_MAX_RING 4141#define HTT_RX_STATS_RXDMA_MAX_ERR 16142#define HTT_RX_STATS_FW_DROP_REASON_MAX 16143144/* Bytes stored in little endian order */145/* Length should be multiple of DWORD */146struct htt_stats_string_tlv {147/* Can be variable length */148DECLARE_FLEX_ARRAY(u32, data);149} __packed;150151#define HTT_STATS_MAC_ID GENMASK(7, 0)152153/* == TX PDEV STATS == */154struct htt_tx_pdev_stats_cmn_tlv {155u32 mac_id__word;156u32 hw_queued;157u32 hw_reaped;158u32 underrun;159u32 hw_paused;160u32 hw_flush;161u32 hw_filt;162u32 tx_abort;163u32 mpdu_requeued;164u32 tx_xretry;165u32 data_rc;166u32 mpdu_dropped_xretry;167u32 illgl_rate_phy_err;168u32 cont_xretry;169u32 tx_timeout;170u32 pdev_resets;171u32 phy_underrun;172u32 txop_ovf;173u32 seq_posted;174u32 seq_failed_queueing;175u32 seq_completed;176u32 seq_restarted;177u32 mu_seq_posted;178u32 seq_switch_hw_paused;179u32 next_seq_posted_dsr;180u32 seq_posted_isr;181u32 seq_ctrl_cached;182u32 mpdu_count_tqm;183u32 msdu_count_tqm;184u32 mpdu_removed_tqm;185u32 msdu_removed_tqm;186u32 mpdus_sw_flush;187u32 mpdus_hw_filter;188u32 mpdus_truncated;189u32 mpdus_ack_failed;190u32 mpdus_expired;191u32 mpdus_seq_hw_retry;192u32 ack_tlv_proc;193u32 coex_abort_mpdu_cnt_valid;194u32 coex_abort_mpdu_cnt;195u32 num_total_ppdus_tried_ota;196u32 num_data_ppdus_tried_ota;197u32 local_ctrl_mgmt_enqued;198u32 local_ctrl_mgmt_freed;199u32 local_data_enqued;200u32 local_data_freed;201u32 mpdu_tried;202u32 isr_wait_seq_posted;203204u32 tx_active_dur_us_low;205u32 tx_active_dur_us_high;206};207208/* NOTE: Variable length TLV, use length spec to infer array size */209struct htt_tx_pdev_stats_urrn_tlv_v {210/* HTT_TX_PDEV_MAX_URRN_STATS */211DECLARE_FLEX_ARRAY(u32, urrn_stats);212};213214/* NOTE: Variable length TLV, use length spec to infer array size */215struct htt_tx_pdev_stats_flush_tlv_v {216/* HTT_TX_PDEV_MAX_FLUSH_REASON_STATS */217DECLARE_FLEX_ARRAY(u32, flush_errs);218};219220/* NOTE: Variable length TLV, use length spec to infer array size */221struct htt_tx_pdev_stats_sifs_tlv_v {222/* HTT_TX_PDEV_MAX_SIFS_BURST_STATS */223DECLARE_FLEX_ARRAY(u32, sifs_status);224};225226/* NOTE: Variable length TLV, use length spec to infer array size */227struct htt_tx_pdev_stats_phy_err_tlv_v {228/* HTT_TX_PDEV_MAX_PHY_ERR_STATS */229DECLARE_FLEX_ARRAY(u32, phy_errs);230};231232/* NOTE: Variable length TLV, use length spec to infer array size */233struct htt_tx_pdev_stats_sifs_hist_tlv_v {234/* HTT_TX_PDEV_SIFS_BURST_HIST_STATS */235DECLARE_FLEX_ARRAY(u32, sifs_hist_status);236};237238struct htt_tx_pdev_stats_tx_ppdu_stats_tlv_v {239u32 num_data_ppdus_legacy_su;240u32 num_data_ppdus_ac_su;241u32 num_data_ppdus_ax_su;242u32 num_data_ppdus_ac_su_txbf;243u32 num_data_ppdus_ax_su_txbf;244};245246/* NOTE: Variable length TLV, use length spec to infer array size .247*248* Tried_mpdu_cnt_hist is the histogram of MPDUs tries per HWQ.249* The tries here is the count of the MPDUS within a PPDU that the250* HW had attempted to transmit on air, for the HWSCH Schedule251* command submitted by FW.It is not the retry attempts.252* The histogram bins are 0-29, 30-59, 60-89 and so on. The are253* 10 bins in this histogram. They are defined in FW using the254* following macros255* #define WAL_MAX_TRIED_MPDU_CNT_HISTOGRAM 9256* #define WAL_TRIED_MPDU_CNT_HISTOGRAM_INTERVAL 30257*/258struct htt_tx_pdev_stats_tried_mpdu_cnt_hist_tlv_v {259u32 hist_bin_size;260u32 tried_mpdu_cnt_hist[]; /* HTT_TX_PDEV_TRIED_MPDU_CNT_HIST */261};262263/* == SOC ERROR STATS == */264265/* =============== PDEV ERROR STATS ============== */266#define HTT_STATS_MAX_HW_INTR_NAME_LEN 8267struct htt_hw_stats_intr_misc_tlv {268/* Stored as little endian */269u8 hw_intr_name[HTT_STATS_MAX_HW_INTR_NAME_LEN];270u32 mask;271u32 count;272};273274#define HTT_STATS_MAX_HW_MODULE_NAME_LEN 8275struct htt_hw_stats_wd_timeout_tlv {276/* Stored as little endian */277u8 hw_module_name[HTT_STATS_MAX_HW_MODULE_NAME_LEN];278u32 count;279};280281struct htt_hw_stats_pdev_errs_tlv {282u32 mac_id__word; /* BIT [ 7 : 0] : mac_id */283u32 tx_abort;284u32 tx_abort_fail_count;285u32 rx_abort;286u32 rx_abort_fail_count;287u32 warm_reset;288u32 cold_reset;289u32 tx_flush;290u32 tx_glb_reset;291u32 tx_txq_reset;292u32 rx_timeout_reset;293};294295struct htt_hw_stats_whal_tx_tlv {296u32 mac_id__word;297u32 last_unpause_ppdu_id;298u32 hwsch_unpause_wait_tqm_write;299u32 hwsch_dummy_tlv_skipped;300u32 hwsch_misaligned_offset_received;301u32 hwsch_reset_count;302u32 hwsch_dev_reset_war;303u32 hwsch_delayed_pause;304u32 hwsch_long_delayed_pause;305u32 sch_rx_ppdu_no_response;306u32 sch_selfgen_response;307u32 sch_rx_sifs_resp_trigger;308};309310/* ============ PEER STATS ============ */311#define HTT_MSDU_FLOW_STATS_TX_FLOW_NO GENMASK(15, 0)312#define HTT_MSDU_FLOW_STATS_TID_NUM GENMASK(19, 16)313#define HTT_MSDU_FLOW_STATS_DROP_RULE BIT(20)314315struct htt_msdu_flow_stats_tlv {316u32 last_update_timestamp;317u32 last_add_timestamp;318u32 last_remove_timestamp;319u32 total_processed_msdu_count;320u32 cur_msdu_count_in_flowq;321u32 sw_peer_id;322u32 tx_flow_no__tid_num__drop_rule;323u32 last_cycle_enqueue_count;324u32 last_cycle_dequeue_count;325u32 last_cycle_drop_count;326u32 current_drop_th;327};328329#define MAX_HTT_TID_NAME 8330331#define HTT_TX_TID_STATS_SW_PEER_ID GENMASK(15, 0)332#define HTT_TX_TID_STATS_TID_NUM GENMASK(31, 16)333#define HTT_TX_TID_STATS_NUM_SCHED_PENDING GENMASK(7, 0)334#define HTT_TX_TID_STATS_NUM_PPDU_IN_HWQ GENMASK(15, 8)335336/* Tidq stats */337struct htt_tx_tid_stats_tlv {338/* Stored as little endian */339u8 tid_name[MAX_HTT_TID_NAME];340u32 sw_peer_id__tid_num;341u32 num_sched_pending__num_ppdu_in_hwq;342u32 tid_flags;343u32 hw_queued;344u32 hw_reaped;345u32 mpdus_hw_filter;346347u32 qdepth_bytes;348u32 qdepth_num_msdu;349u32 qdepth_num_mpdu;350u32 last_scheduled_tsmp;351u32 pause_module_id;352u32 block_module_id;353u32 tid_tx_airtime;354};355356#define HTT_TX_TID_STATS_V1_SW_PEER_ID GENMASK(15, 0)357#define HTT_TX_TID_STATS_V1_TID_NUM GENMASK(31, 16)358#define HTT_TX_TID_STATS_V1_NUM_SCHED_PENDING GENMASK(7, 0)359#define HTT_TX_TID_STATS_V1_NUM_PPDU_IN_HWQ GENMASK(15, 8)360361/* Tidq stats */362struct htt_tx_tid_stats_v1_tlv {363/* Stored as little endian */364u8 tid_name[MAX_HTT_TID_NAME];365u32 sw_peer_id__tid_num;366u32 num_sched_pending__num_ppdu_in_hwq;367u32 tid_flags;368u32 max_qdepth_bytes;369u32 max_qdepth_n_msdus;370u32 rsvd;371372u32 qdepth_bytes;373u32 qdepth_num_msdu;374u32 qdepth_num_mpdu;375u32 last_scheduled_tsmp;376u32 pause_module_id;377u32 block_module_id;378u32 tid_tx_airtime;379u32 allow_n_flags;380u32 sendn_frms_allowed;381};382383#define HTT_RX_TID_STATS_SW_PEER_ID GENMASK(15, 0)384#define HTT_RX_TID_STATS_TID_NUM GENMASK(31, 16)385386struct htt_rx_tid_stats_tlv {387u32 sw_peer_id__tid_num;388u8 tid_name[MAX_HTT_TID_NAME];389u32 dup_in_reorder;390u32 dup_past_outside_window;391u32 dup_past_within_window;392u32 rxdesc_err_decrypt;393u32 tid_rx_airtime;394};395396#define HTT_MAX_COUNTER_NAME 8397struct htt_counter_tlv {398u8 counter_name[HTT_MAX_COUNTER_NAME];399u32 count;400};401402struct htt_peer_stats_cmn_tlv {403u32 ppdu_cnt;404u32 mpdu_cnt;405u32 msdu_cnt;406u32 pause_bitmap;407u32 block_bitmap;408u32 current_timestamp;409u32 peer_tx_airtime;410u32 peer_rx_airtime;411s32 rssi;412u32 peer_enqueued_count_low;413u32 peer_enqueued_count_high;414u32 peer_dequeued_count_low;415u32 peer_dequeued_count_high;416u32 peer_dropped_count_low;417u32 peer_dropped_count_high;418u32 ppdu_transmitted_bytes_low;419u32 ppdu_transmitted_bytes_high;420u32 peer_ttl_removed_count;421u32 inactive_time;422};423424#define HTT_PEER_DETAILS_VDEV_ID GENMASK(7, 0)425#define HTT_PEER_DETAILS_PDEV_ID GENMASK(15, 8)426#define HTT_PEER_DETAILS_AST_IDX GENMASK(31, 16)427428struct htt_peer_details_tlv {429u32 peer_type;430u32 sw_peer_id;431u32 vdev_pdev_ast_idx;432struct htt_mac_addr mac_addr;433u32 peer_flags;434u32 qpeer_flags;435};436437enum htt_stats_param_type {438HTT_STATS_PREAM_OFDM,439HTT_STATS_PREAM_CCK,440HTT_STATS_PREAM_HT,441HTT_STATS_PREAM_VHT,442HTT_STATS_PREAM_HE,443HTT_STATS_PREAM_RSVD,444HTT_STATS_PREAM_RSVD1,445446HTT_STATS_PREAM_COUNT,447};448449#define HTT_TX_PEER_STATS_NUM_MCS_COUNTERS 12450#define HTT_TX_PEER_STATS_NUM_GI_COUNTERS 4451#define HTT_TX_PEER_STATS_NUM_DCM_COUNTERS 5452#define HTT_TX_PEER_STATS_NUM_BW_COUNTERS 4453#define HTT_TX_PEER_STATS_NUM_SPATIAL_STREAMS 8454#define HTT_TX_PEER_STATS_NUM_PREAMBLE_TYPES HTT_STATS_PREAM_COUNT455456struct htt_tx_peer_rate_stats_tlv {457u32 tx_ldpc;458u32 rts_cnt;459u32 ack_rssi;460461u32 tx_mcs[HTT_TX_PEER_STATS_NUM_MCS_COUNTERS];462u32 tx_su_mcs[HTT_TX_PEER_STATS_NUM_MCS_COUNTERS];463u32 tx_mu_mcs[HTT_TX_PEER_STATS_NUM_MCS_COUNTERS];464/* element 0,1, ...7 -> NSS 1,2, ...8 */465u32 tx_nss[HTT_TX_PEER_STATS_NUM_SPATIAL_STREAMS];466/* element 0: 20 MHz, 1: 40 MHz, 2: 80 MHz, 3: 160 and 80+80 MHz */467u32 tx_bw[HTT_TX_PEER_STATS_NUM_BW_COUNTERS];468u32 tx_stbc[HTT_TX_PEER_STATS_NUM_MCS_COUNTERS];469u32 tx_pream[HTT_TX_PEER_STATS_NUM_PREAMBLE_TYPES];470471/* Counters to track number of tx packets in each GI472* (400us, 800us, 1600us & 3200us) in each mcs (0-11)473*/474u32 tx_gi[HTT_TX_PEER_STATS_NUM_GI_COUNTERS][HTT_TX_PEER_STATS_NUM_MCS_COUNTERS];475476/* Counters to track packets in dcm mcs (MCS 0, 1, 3, 4) */477u32 tx_dcm[HTT_TX_PEER_STATS_NUM_DCM_COUNTERS];478479};480481#define HTT_RX_PEER_STATS_NUM_MCS_COUNTERS 12482#define HTT_RX_PEER_STATS_NUM_GI_COUNTERS 4483#define HTT_RX_PEER_STATS_NUM_DCM_COUNTERS 5484#define HTT_RX_PEER_STATS_NUM_BW_COUNTERS 4485#define HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS 8486#define HTT_RX_PEER_STATS_NUM_PREAMBLE_TYPES HTT_STATS_PREAM_COUNT487488struct htt_rx_peer_rate_stats_tlv {489u32 nsts;490491/* Number of rx ldpc packets */492u32 rx_ldpc;493/* Number of rx rts packets */494u32 rts_cnt;495496u32 rssi_mgmt; /* units = dB above noise floor */497u32 rssi_data; /* units = dB above noise floor */498u32 rssi_comb; /* units = dB above noise floor */499u32 rx_mcs[HTT_RX_PEER_STATS_NUM_MCS_COUNTERS];500/* element 0,1, ...7 -> NSS 1,2, ...8 */501u32 rx_nss[HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS];502u32 rx_dcm[HTT_RX_PEER_STATS_NUM_DCM_COUNTERS];503u32 rx_stbc[HTT_RX_PEER_STATS_NUM_MCS_COUNTERS];504/* element 0: 20 MHz, 1: 40 MHz, 2: 80 MHz, 3: 160 and 80+80 MHz */505u32 rx_bw[HTT_RX_PEER_STATS_NUM_BW_COUNTERS];506u32 rx_pream[HTT_RX_PEER_STATS_NUM_PREAMBLE_TYPES];507/* units = dB above noise floor */508u8 rssi_chain[HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS]509[HTT_RX_PEER_STATS_NUM_BW_COUNTERS];510511/* Counters to track number of rx packets in each GI in each mcs (0-11) */512u32 rx_gi[HTT_RX_PEER_STATS_NUM_GI_COUNTERS]513[HTT_RX_PEER_STATS_NUM_MCS_COUNTERS];514};515516enum htt_peer_stats_req_mode {517HTT_PEER_STATS_REQ_MODE_NO_QUERY,518HTT_PEER_STATS_REQ_MODE_QUERY_TQM,519HTT_PEER_STATS_REQ_MODE_FLUSH_TQM,520};521522enum htt_peer_stats_tlv_enum {523HTT_PEER_STATS_CMN_TLV = 0,524HTT_PEER_DETAILS_TLV = 1,525HTT_TX_PEER_RATE_STATS_TLV = 2,526HTT_RX_PEER_RATE_STATS_TLV = 3,527HTT_TX_TID_STATS_TLV = 4,528HTT_RX_TID_STATS_TLV = 5,529HTT_MSDU_FLOW_STATS_TLV = 6,530531HTT_PEER_STATS_MAX_TLV = 31,532};533534/* =========== MUMIMO HWQ stats =========== */535/* MU MIMO stats per hwQ */536struct htt_tx_hwq_mu_mimo_sch_stats_tlv {537u32 mu_mimo_sch_posted;538u32 mu_mimo_sch_failed;539u32 mu_mimo_ppdu_posted;540};541542struct htt_tx_hwq_mu_mimo_mpdu_stats_tlv {543u32 mu_mimo_mpdus_queued_usr;544u32 mu_mimo_mpdus_tried_usr;545u32 mu_mimo_mpdus_failed_usr;546u32 mu_mimo_mpdus_requeued_usr;547u32 mu_mimo_err_no_ba_usr;548u32 mu_mimo_mpdu_underrun_usr;549u32 mu_mimo_ampdu_underrun_usr;550};551552#define HTT_TX_HWQ_STATS_MAC_ID GENMASK(7, 0)553#define HTT_TX_HWQ_STATS_HWQ_ID GENMASK(15, 8)554555struct htt_tx_hwq_mu_mimo_cmn_stats_tlv {556u32 mac_id__hwq_id__word;557};558559/* == TX HWQ STATS == */560struct htt_tx_hwq_stats_cmn_tlv {561u32 mac_id__hwq_id__word;562563/* PPDU level stats */564u32 xretry;565u32 underrun_cnt;566u32 flush_cnt;567u32 filt_cnt;568u32 null_mpdu_bmap;569u32 user_ack_failure;570u32 ack_tlv_proc;571u32 sched_id_proc;572u32 null_mpdu_tx_count;573u32 mpdu_bmap_not_recvd;574575/* Selfgen stats per hwQ */576u32 num_bar;577u32 rts;578u32 cts2self;579u32 qos_null;580581/* MPDU level stats */582u32 mpdu_tried_cnt;583u32 mpdu_queued_cnt;584u32 mpdu_ack_fail_cnt;585u32 mpdu_filt_cnt;586u32 false_mpdu_ack_count;587588u32 txq_timeout;589};590591/* NOTE: Variable length TLV, use length spec to infer array size */592struct htt_tx_hwq_difs_latency_stats_tlv_v {593u32 hist_intvl;594/* histogram of ppdu post to hwsch - > cmd status received */595u32 difs_latency_hist[]; /* HTT_TX_HWQ_MAX_DIFS_LATENCY_BINS */596};597598/* NOTE: Variable length TLV, use length spec to infer array size */599struct htt_tx_hwq_cmd_result_stats_tlv_v {600/* Histogram of sched cmd result, HTT_TX_HWQ_MAX_CMD_RESULT_STATS */601DECLARE_FLEX_ARRAY(u32, cmd_result);602};603604/* NOTE: Variable length TLV, use length spec to infer array size */605struct htt_tx_hwq_cmd_stall_stats_tlv_v {606/* Histogram of various pause conitions, HTT_TX_HWQ_MAX_CMD_STALL_STATS */607DECLARE_FLEX_ARRAY(u32, cmd_stall_status);608};609610/* NOTE: Variable length TLV, use length spec to infer array size */611struct htt_tx_hwq_fes_result_stats_tlv_v {612/* Histogram of number of user fes result, HTT_TX_HWQ_MAX_FES_RESULT_STATS */613DECLARE_FLEX_ARRAY(u32, fes_result);614};615616/* NOTE: Variable length TLV, use length spec to infer array size617*618* The hwq_tried_mpdu_cnt_hist is a histogram of MPDUs tries per HWQ.619* The tries here is the count of the MPDUS within a PPDU that the HW620* had attempted to transmit on air, for the HWSCH Schedule command621* submitted by FW in this HWQ .It is not the retry attempts. The622* histogram bins are 0-29, 30-59, 60-89 and so on. The are 10 bins623* in this histogram.624* they are defined in FW using the following macros625* #define WAL_MAX_TRIED_MPDU_CNT_HISTOGRAM 9626* #define WAL_TRIED_MPDU_CNT_HISTOGRAM_INTERVAL 30627*/628struct htt_tx_hwq_tried_mpdu_cnt_hist_tlv_v {629u32 hist_bin_size;630/* Histogram of number of mpdus on tried mpdu */631u32 tried_mpdu_cnt_hist[]; /* HTT_TX_HWQ_TRIED_MPDU_CNT_HIST */632};633634/* NOTE: Variable length TLV, use length spec to infer array size635*636* The txop_used_cnt_hist is the histogram of txop per burst. After637* completing the burst, we identify the txop used in the burst and638* incr the corresponding bin.639* Each bin represents 1ms & we have 10 bins in this histogram.640* they are defined in FW using the following macros641* #define WAL_MAX_TXOP_USED_CNT_HISTOGRAM 10642* #define WAL_TXOP_USED_HISTOGRAM_INTERVAL 1000 ( 1 ms )643*/644struct htt_tx_hwq_txop_used_cnt_hist_tlv_v {645/* Histogram of txop used cnt, HTT_TX_HWQ_TXOP_USED_CNT_HIST */646DECLARE_FLEX_ARRAY(u32, txop_used_cnt_hist);647};648649/* == TX SELFGEN STATS == */650struct htt_tx_selfgen_cmn_stats_tlv {651u32 mac_id__word;652u32 su_bar;653u32 rts;654u32 cts2self;655u32 qos_null;656u32 delayed_bar_1; /* MU user 1 */657u32 delayed_bar_2; /* MU user 2 */658u32 delayed_bar_3; /* MU user 3 */659u32 delayed_bar_4; /* MU user 4 */660u32 delayed_bar_5; /* MU user 5 */661u32 delayed_bar_6; /* MU user 6 */662u32 delayed_bar_7; /* MU user 7 */663};664665struct htt_tx_selfgen_ac_stats_tlv {666/* 11AC */667u32 ac_su_ndpa;668u32 ac_su_ndp;669u32 ac_mu_mimo_ndpa;670u32 ac_mu_mimo_ndp;671u32 ac_mu_mimo_brpoll_1; /* MU user 1 */672u32 ac_mu_mimo_brpoll_2; /* MU user 2 */673u32 ac_mu_mimo_brpoll_3; /* MU user 3 */674};675676struct htt_tx_selfgen_ax_stats_tlv {677/* 11AX */678u32 ax_su_ndpa;679u32 ax_su_ndp;680u32 ax_mu_mimo_ndpa;681u32 ax_mu_mimo_ndp;682u32 ax_mu_mimo_brpoll_1; /* MU user 1 */683u32 ax_mu_mimo_brpoll_2; /* MU user 2 */684u32 ax_mu_mimo_brpoll_3; /* MU user 3 */685u32 ax_mu_mimo_brpoll_4; /* MU user 4 */686u32 ax_mu_mimo_brpoll_5; /* MU user 5 */687u32 ax_mu_mimo_brpoll_6; /* MU user 6 */688u32 ax_mu_mimo_brpoll_7; /* MU user 7 */689u32 ax_basic_trigger;690u32 ax_bsr_trigger;691u32 ax_mu_bar_trigger;692u32 ax_mu_rts_trigger;693u32 ax_ulmumimo_trigger;694};695696struct htt_tx_selfgen_ac_err_stats_tlv {697/* 11AC error stats */698u32 ac_su_ndp_err;699u32 ac_su_ndpa_err;700u32 ac_mu_mimo_ndpa_err;701u32 ac_mu_mimo_ndp_err;702u32 ac_mu_mimo_brp1_err;703u32 ac_mu_mimo_brp2_err;704u32 ac_mu_mimo_brp3_err;705};706707struct htt_tx_selfgen_ax_err_stats_tlv {708/* 11AX error stats */709u32 ax_su_ndp_err;710u32 ax_su_ndpa_err;711u32 ax_mu_mimo_ndpa_err;712u32 ax_mu_mimo_ndp_err;713u32 ax_mu_mimo_brp1_err;714u32 ax_mu_mimo_brp2_err;715u32 ax_mu_mimo_brp3_err;716u32 ax_mu_mimo_brp4_err;717u32 ax_mu_mimo_brp5_err;718u32 ax_mu_mimo_brp6_err;719u32 ax_mu_mimo_brp7_err;720u32 ax_basic_trigger_err;721u32 ax_bsr_trigger_err;722u32 ax_mu_bar_trigger_err;723u32 ax_mu_rts_trigger_err;724u32 ax_ulmumimo_trigger_err;725};726727/* == TX MU STATS == */728#define HTT_TX_PDEV_STATS_NUM_AC_MUMIMO_USER_STATS 4729#define HTT_TX_PDEV_STATS_NUM_AX_MUMIMO_USER_STATS 8730#define HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS 74731#define HTT_TX_PDEV_STATS_NUM_UL_MUMIMO_USER_STATS 8732733struct htt_tx_pdev_mu_mimo_sch_stats_tlv {734/* mu-mimo sw sched cmd stats */735u32 mu_mimo_sch_posted;736u32 mu_mimo_sch_failed;737/* MU PPDU stats per hwQ */738u32 mu_mimo_ppdu_posted;739/*740* Counts the number of users in each transmission of741* the given TX mode.742*743* Index is the number of users - 1.744*/745u32 ac_mu_mimo_sch_nusers[HTT_TX_PDEV_STATS_NUM_AC_MUMIMO_USER_STATS];746u32 ax_mu_mimo_sch_nusers[HTT_TX_PDEV_STATS_NUM_AX_MUMIMO_USER_STATS];747u32 ax_ofdma_sch_nusers[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];748u32 ax_ul_ofdma_basic_sch_nusers[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];749u32 ax_ul_ofdma_bsr_sch_nusers[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];750u32 ax_ul_ofdma_bar_sch_nusers[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];751u32 ax_ul_ofdma_brp_sch_nusers[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];752753/* UL MU-MIMO */754/* ax_ul_mumimo_basic_sch_nusers[i] is the number of basic triggers sent755* for (i+1) users756*/757u32 ax_ul_mumimo_basic_sch_nusers[HTT_TX_PDEV_STATS_NUM_UL_MUMIMO_USER_STATS];758759/* ax_ul_mumimo_brp_sch_nusers[i] is the number of brp triggers sent760* for (i+1) users761*/762u32 ax_ul_mumimo_brp_sch_nusers[HTT_TX_PDEV_STATS_NUM_UL_MUMIMO_USER_STATS];763764u32 ac_mu_mimo_sch_posted_per_grp_sz[HTT_TX_PDEV_STATS_NUM_AC_MUMIMO_USER_STATS];765u32 ax_mu_mimo_sch_posted_per_grp_sz[HTT_TX_PDEV_STATS_NUM_AX_MUMIMO_USER_STATS];766};767768struct htt_tx_pdev_mu_mimo_mpdu_stats_tlv {769u32 mu_mimo_mpdus_queued_usr;770u32 mu_mimo_mpdus_tried_usr;771u32 mu_mimo_mpdus_failed_usr;772u32 mu_mimo_mpdus_requeued_usr;773u32 mu_mimo_err_no_ba_usr;774u32 mu_mimo_mpdu_underrun_usr;775u32 mu_mimo_ampdu_underrun_usr;776777u32 ax_mu_mimo_mpdus_queued_usr;778u32 ax_mu_mimo_mpdus_tried_usr;779u32 ax_mu_mimo_mpdus_failed_usr;780u32 ax_mu_mimo_mpdus_requeued_usr;781u32 ax_mu_mimo_err_no_ba_usr;782u32 ax_mu_mimo_mpdu_underrun_usr;783u32 ax_mu_mimo_ampdu_underrun_usr;784785u32 ax_ofdma_mpdus_queued_usr;786u32 ax_ofdma_mpdus_tried_usr;787u32 ax_ofdma_mpdus_failed_usr;788u32 ax_ofdma_mpdus_requeued_usr;789u32 ax_ofdma_err_no_ba_usr;790u32 ax_ofdma_mpdu_underrun_usr;791u32 ax_ofdma_ampdu_underrun_usr;792};793794#define HTT_STATS_TX_SCHED_MODE_MU_MIMO_AC 1795#define HTT_STATS_TX_SCHED_MODE_MU_MIMO_AX 2796#define HTT_STATS_TX_SCHED_MODE_MU_OFDMA_AX 3797798struct htt_tx_pdev_mpdu_stats_tlv {799/* mpdu level stats */800u32 mpdus_queued_usr;801u32 mpdus_tried_usr;802u32 mpdus_failed_usr;803u32 mpdus_requeued_usr;804u32 err_no_ba_usr;805u32 mpdu_underrun_usr;806u32 ampdu_underrun_usr;807u32 user_index;808u32 tx_sched_mode; /* HTT_STATS_TX_SCHED_MODE_xxx */809};810811/* == TX SCHED STATS == */812/* NOTE: Variable length TLV, use length spec to infer array size */813struct htt_sched_txq_cmd_posted_tlv_v {814/* HTT_TX_PDEV_SCHED_TX_MODE_MAX */815DECLARE_FLEX_ARRAY(u32, sched_cmd_posted);816};817818/* NOTE: Variable length TLV, use length spec to infer array size */819struct htt_sched_txq_cmd_reaped_tlv_v {820/* HTT_TX_PDEV_SCHED_TX_MODE_MAX */821DECLARE_FLEX_ARRAY(u32, sched_cmd_reaped);822};823824/* NOTE: Variable length TLV, use length spec to infer array size */825struct htt_sched_txq_sched_order_su_tlv_v {826/* HTT_TX_PDEV_NUM_SCHED_ORDER_LOG */827DECLARE_FLEX_ARRAY(u32, sched_order_su);828};829830enum htt_sched_txq_sched_ineligibility_tlv_enum {831HTT_SCHED_TID_SKIP_SCHED_MASK_DISABLED = 0,832HTT_SCHED_TID_SKIP_NOTIFY_MPDU,833HTT_SCHED_TID_SKIP_MPDU_STATE_INVALID,834HTT_SCHED_TID_SKIP_SCHED_DISABLED,835HTT_SCHED_TID_SKIP_TQM_BYPASS_CMD_PENDING,836HTT_SCHED_TID_SKIP_SECOND_SU_SCHEDULE,837838HTT_SCHED_TID_SKIP_CMD_SLOT_NOT_AVAIL,839HTT_SCHED_TID_SKIP_NO_ENQ,840HTT_SCHED_TID_SKIP_LOW_ENQ,841HTT_SCHED_TID_SKIP_PAUSED,842HTT_SCHED_TID_SKIP_UL,843HTT_SCHED_TID_REMOVE_PAUSED,844HTT_SCHED_TID_REMOVE_NO_ENQ,845HTT_SCHED_TID_REMOVE_UL,846HTT_SCHED_TID_QUERY,847HTT_SCHED_TID_SU_ONLY,848HTT_SCHED_TID_ELIGIBLE,849HTT_SCHED_INELIGIBILITY_MAX,850};851852/* NOTE: Variable length TLV, use length spec to infer array size */853struct htt_sched_txq_sched_ineligibility_tlv_v {854/* indexed by htt_sched_txq_sched_ineligibility_tlv_enum */855DECLARE_FLEX_ARRAY(u32, sched_ineligibility);856};857858#define HTT_TX_PDEV_STATS_SCHED_PER_TXQ_MAC_ID GENMASK(7, 0)859#define HTT_TX_PDEV_STATS_SCHED_PER_TXQ_ID GENMASK(15, 8)860861struct htt_tx_pdev_stats_sched_per_txq_tlv {862u32 mac_id__txq_id__word;863u32 sched_policy;864u32 last_sched_cmd_posted_timestamp;865u32 last_sched_cmd_compl_timestamp;866u32 sched_2_tac_lwm_count;867u32 sched_2_tac_ring_full;868u32 sched_cmd_post_failure;869u32 num_active_tids;870u32 num_ps_schedules;871u32 sched_cmds_pending;872u32 num_tid_register;873u32 num_tid_unregister;874u32 num_qstats_queried;875u32 qstats_update_pending;876u32 last_qstats_query_timestamp;877u32 num_tqm_cmdq_full;878u32 num_de_sched_algo_trigger;879u32 num_rt_sched_algo_trigger;880u32 num_tqm_sched_algo_trigger;881u32 notify_sched;882u32 dur_based_sendn_term;883};884885struct htt_stats_tx_sched_cmn_tlv {886/* BIT [ 7 : 0] :- mac_id887* BIT [31 : 8] :- reserved888*/889u32 mac_id__word;890/* Current timestamp */891u32 current_timestamp;892};893894/* == TQM STATS == */895#define HTT_TX_TQM_MAX_GEN_MPDU_END_REASON 16896#define HTT_TX_TQM_MAX_LIST_MPDU_END_REASON 16897#define HTT_TX_TQM_MAX_LIST_MPDU_CNT_HISTOGRAM_BINS 16898899/* NOTE: Variable length TLV, use length spec to infer array size */900struct htt_tx_tqm_gen_mpdu_stats_tlv_v {901/* HTT_TX_TQM_MAX_GEN_MPDU_END_REASON */902DECLARE_FLEX_ARRAY(u32, gen_mpdu_end_reason);903};904905/* NOTE: Variable length TLV, use length spec to infer array size */906struct htt_tx_tqm_list_mpdu_stats_tlv_v {907/* HTT_TX_TQM_MAX_LIST_MPDU_END_REASON */908DECLARE_FLEX_ARRAY(u32, list_mpdu_end_reason);909};910911/* NOTE: Variable length TLV, use length spec to infer array size */912struct htt_tx_tqm_list_mpdu_cnt_tlv_v {913/* HTT_TX_TQM_MAX_LIST_MPDU_CNT_HISTOGRAM_BINS */914DECLARE_FLEX_ARRAY(u32, list_mpdu_cnt_hist);915};916917struct htt_tx_tqm_pdev_stats_tlv_v {918u32 msdu_count;919u32 mpdu_count;920u32 remove_msdu;921u32 remove_mpdu;922u32 remove_msdu_ttl;923u32 send_bar;924u32 bar_sync;925u32 notify_mpdu;926u32 sync_cmd;927u32 write_cmd;928u32 hwsch_trigger;929u32 ack_tlv_proc;930u32 gen_mpdu_cmd;931u32 gen_list_cmd;932u32 remove_mpdu_cmd;933u32 remove_mpdu_tried_cmd;934u32 mpdu_queue_stats_cmd;935u32 mpdu_head_info_cmd;936u32 msdu_flow_stats_cmd;937u32 remove_msdu_cmd;938u32 remove_msdu_ttl_cmd;939u32 flush_cache_cmd;940u32 update_mpduq_cmd;941u32 enqueue;942u32 enqueue_notify;943u32 notify_mpdu_at_head;944u32 notify_mpdu_state_valid;945/*946* On receiving TQM_FLOW_NOT_EMPTY_STATUS from TQM, (on MSDUs being enqueued947* the flow is non empty), if the number of MSDUs is greater than the threshold,948* notify is incremented. UDP_THRESH counters are for UDP MSDUs, and NONUDP are949* for non-UDP MSDUs.950* MSDUQ_SWNOTIFY_UDP_THRESH1 threshold - sched_udp_notify1 is incremented951* MSDUQ_SWNOTIFY_UDP_THRESH2 threshold - sched_udp_notify2 is incremented952* MSDUQ_SWNOTIFY_NONUDP_THRESH1 threshold - sched_nonudp_notify1 is incremented953* MSDUQ_SWNOTIFY_NONUDP_THRESH2 threshold - sched_nonudp_notify2 is incremented954*955* Notify signifies that we trigger the scheduler.956*/957u32 sched_udp_notify1;958u32 sched_udp_notify2;959u32 sched_nonudp_notify1;960u32 sched_nonudp_notify2;961};962963struct htt_tx_tqm_cmn_stats_tlv {964u32 mac_id__word;965u32 max_cmdq_id;966u32 list_mpdu_cnt_hist_intvl;967968/* Global stats */969u32 add_msdu;970u32 q_empty;971u32 q_not_empty;972u32 drop_notification;973u32 desc_threshold;974};975976struct htt_tx_tqm_error_stats_tlv {977/* Error stats */978u32 q_empty_failure;979u32 q_not_empty_failure;980u32 add_msdu_failure;981};982983/* == TQM CMDQ stats == */984#define HTT_TX_TQM_CMDQ_STATUS_MAC_ID GENMASK(7, 0)985#define HTT_TX_TQM_CMDQ_STATUS_CMDQ_ID GENMASK(15, 8)986987struct htt_tx_tqm_cmdq_status_tlv {988u32 mac_id__cmdq_id__word;989u32 sync_cmd;990u32 write_cmd;991u32 gen_mpdu_cmd;992u32 mpdu_queue_stats_cmd;993u32 mpdu_head_info_cmd;994u32 msdu_flow_stats_cmd;995u32 remove_mpdu_cmd;996u32 remove_msdu_cmd;997u32 flush_cache_cmd;998u32 update_mpduq_cmd;999u32 update_msduq_cmd;1000};10011002/* == TX-DE STATS == */1003/* Structures for tx de stats */1004struct htt_tx_de_eapol_packets_stats_tlv {1005u32 m1_packets;1006u32 m2_packets;1007u32 m3_packets;1008u32 m4_packets;1009u32 g1_packets;1010u32 g2_packets;1011};10121013struct htt_tx_de_classify_failed_stats_tlv {1014u32 ap_bss_peer_not_found;1015u32 ap_bcast_mcast_no_peer;1016u32 sta_delete_in_progress;1017u32 ibss_no_bss_peer;1018u32 invalid_vdev_type;1019u32 invalid_ast_peer_entry;1020u32 peer_entry_invalid;1021u32 ethertype_not_ip;1022u32 eapol_lookup_failed;1023u32 qpeer_not_allow_data;1024u32 fse_tid_override;1025u32 ipv6_jumbogram_zero_length;1026u32 qos_to_non_qos_in_prog;1027};10281029struct htt_tx_de_classify_stats_tlv {1030u32 arp_packets;1031u32 igmp_packets;1032u32 dhcp_packets;1033u32 host_inspected;1034u32 htt_included;1035u32 htt_valid_mcs;1036u32 htt_valid_nss;1037u32 htt_valid_preamble_type;1038u32 htt_valid_chainmask;1039u32 htt_valid_guard_interval;1040u32 htt_valid_retries;1041u32 htt_valid_bw_info;1042u32 htt_valid_power;1043u32 htt_valid_key_flags;1044u32 htt_valid_no_encryption;1045u32 fse_entry_count;1046u32 fse_priority_be;1047u32 fse_priority_high;1048u32 fse_priority_low;1049u32 fse_traffic_ptrn_be;1050u32 fse_traffic_ptrn_over_sub;1051u32 fse_traffic_ptrn_bursty;1052u32 fse_traffic_ptrn_interactive;1053u32 fse_traffic_ptrn_periodic;1054u32 fse_hwqueue_alloc;1055u32 fse_hwqueue_created;1056u32 fse_hwqueue_send_to_host;1057u32 mcast_entry;1058u32 bcast_entry;1059u32 htt_update_peer_cache;1060u32 htt_learning_frame;1061u32 fse_invalid_peer;1062/*1063* mec_notify is HTT TX WBM multicast echo check notification1064* from firmware to host. FW sends SA addresses to host for all1065* multicast/broadcast packets received on STA side.1066*/1067u32 mec_notify;1068};10691070struct htt_tx_de_classify_status_stats_tlv {1071u32 eok;1072u32 classify_done;1073u32 lookup_failed;1074u32 send_host_dhcp;1075u32 send_host_mcast;1076u32 send_host_unknown_dest;1077u32 send_host;1078u32 status_invalid;1079};10801081struct htt_tx_de_enqueue_packets_stats_tlv {1082u32 enqueued_pkts;1083u32 to_tqm;1084u32 to_tqm_bypass;1085};10861087struct htt_tx_de_enqueue_discard_stats_tlv {1088u32 discarded_pkts;1089u32 local_frames;1090u32 is_ext_msdu;1091};10921093struct htt_tx_de_compl_stats_tlv {1094u32 tcl_dummy_frame;1095u32 tqm_dummy_frame;1096u32 tqm_notify_frame;1097u32 fw2wbm_enq;1098u32 tqm_bypass_frame;1099};11001101/*1102* The htt_tx_de_fw2wbm_ring_full_hist_tlv is a histogram of time we waited1103* for the fw2wbm ring buffer. we are requesting a buffer in FW2WBM release1104* ring,which may fail, due to non availability of buffer. Hence we sleep for1105* 200us & again request for it. This is a histogram of time we wait, with1106* bin of 200ms & there are 10 bin (2 seconds max)1107* They are defined by the following macros in FW1108* #define ENTRIES_PER_BIN_COUNT 1000 // per bin 1000 * 200us = 200ms1109* #define RING_FULL_BIN_ENTRIES (WAL_TX_DE_FW2WBM_ALLOC_TIMEOUT_COUNT /1110* ENTRIES_PER_BIN_COUNT)1111*/1112struct htt_tx_de_fw2wbm_ring_full_hist_tlv {1113DECLARE_FLEX_ARRAY(u32, fw2wbm_ring_full_hist);1114};11151116struct htt_tx_de_cmn_stats_tlv {1117u32 mac_id__word;11181119/* Global Stats */1120u32 tcl2fw_entry_count;1121u32 not_to_fw;1122u32 invalid_pdev_vdev_peer;1123u32 tcl_res_invalid_addrx;1124u32 wbm2fw_entry_count;1125u32 invalid_pdev;1126};11271128/* == RING-IF STATS == */1129#define HTT_STATS_LOW_WM_BINS 51130#define HTT_STATS_HIGH_WM_BINS 511311132#define HTT_RING_IF_STATS_NUM_ELEMS GENMASK(15, 0)1133#define HTT_RING_IF_STATS_PREFETCH_TAIL_INDEX GENMASK(31, 16)1134#define HTT_RING_IF_STATS_HEAD_IDX GENMASK(15, 0)1135#define HTT_RING_IF_STATS_TAIL_IDX GENMASK(31, 16)1136#define HTT_RING_IF_STATS_SHADOW_HEAD_IDX GENMASK(15, 0)1137#define HTT_RING_IF_STATS_SHADOW_TAIL_IDX GENMASK(31, 16)1138#define HTT_RING_IF_STATS_LWM_THRESH GENMASK(15, 0)1139#define HTT_RING_IF_STATS_HWM_THRESH GENMASK(31, 16)11401141struct htt_ring_if_stats_tlv {1142u32 base_addr; /* DWORD aligned base memory address of the ring */1143u32 elem_size;1144u32 num_elems__prefetch_tail_idx;1145u32 head_idx__tail_idx;1146u32 shadow_head_idx__shadow_tail_idx;1147u32 num_tail_incr;1148u32 lwm_thresh__hwm_thresh;1149u32 overrun_hit_count;1150u32 underrun_hit_count;1151u32 prod_blockwait_count;1152u32 cons_blockwait_count;1153u32 low_wm_hit_count[HTT_STATS_LOW_WM_BINS];1154u32 high_wm_hit_count[HTT_STATS_HIGH_WM_BINS];1155};11561157struct htt_ring_if_cmn_tlv {1158u32 mac_id__word;1159u32 num_records;1160};11611162/* == SFM STATS == */1163/* NOTE: Variable length TLV, use length spec to infer array size */1164struct htt_sfm_client_user_tlv_v {1165/* Number of DWORDS used per user and per client */1166DECLARE_FLEX_ARRAY(u32, dwords_used_by_user_n);1167};11681169struct htt_sfm_client_tlv {1170/* Client ID */1171u32 client_id;1172/* Minimum number of buffers */1173u32 buf_min;1174/* Maximum number of buffers */1175u32 buf_max;1176/* Number of Busy buffers */1177u32 buf_busy;1178/* Number of Allocated buffers */1179u32 buf_alloc;1180/* Number of Available/Usable buffers */1181u32 buf_avail;1182/* Number of users */1183u32 num_users;1184};11851186struct htt_sfm_cmn_tlv {1187u32 mac_id__word;1188/* Indicates the total number of 128 byte buffers1189* in the CMEM that are available for buffer sharing1190*/1191u32 buf_total;1192/* Indicates for certain client or all the clients1193* there is no dowrd saved in SFM, refer to SFM_R1_MEM_EMPTY1194*/1195u32 mem_empty;1196/* DEALLOCATE_BUFFERS, refer to register SFM_R0_DEALLOCATE_BUFFERS */1197u32 deallocate_bufs;1198/* Number of Records */1199u32 num_records;1200};12011202/* == SRNG STATS == */1203#define HTT_SRING_STATS_MAC_ID GENMASK(7, 0)1204#define HTT_SRING_STATS_RING_ID GENMASK(15, 8)1205#define HTT_SRING_STATS_ARENA GENMASK(23, 16)1206#define HTT_SRING_STATS_EP BIT(24)1207#define HTT_SRING_STATS_NUM_AVAIL_WORDS GENMASK(15, 0)1208#define HTT_SRING_STATS_NUM_VALID_WORDS GENMASK(31, 16)1209#define HTT_SRING_STATS_HEAD_PTR GENMASK(15, 0)1210#define HTT_SRING_STATS_TAIL_PTR GENMASK(31, 16)1211#define HTT_SRING_STATS_CONSUMER_EMPTY GENMASK(15, 0)1212#define HTT_SRING_STATS_PRODUCER_FULL GENMASK(31, 16)1213#define HTT_SRING_STATS_PREFETCH_COUNT GENMASK(15, 0)1214#define HTT_SRING_STATS_INTERNAL_TAIL_PTR GENMASK(31, 16)12151216struct htt_sring_stats_tlv {1217u32 mac_id__ring_id__arena__ep;1218u32 base_addr_lsb; /* DWORD aligned base memory address of the ring */1219u32 base_addr_msb;1220u32 ring_size;1221u32 elem_size;12221223u32 num_avail_words__num_valid_words;1224u32 head_ptr__tail_ptr;1225u32 consumer_empty__producer_full;1226u32 prefetch_count__internal_tail_ptr;1227};12281229struct htt_sring_cmn_tlv {1230u32 num_records;1231};12321233/* == PDEV TX RATE CTRL STATS == */1234#define HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS 121235#define HTT_TX_PDEV_STATS_NUM_GI_COUNTERS 41236#define HTT_TX_PDEV_STATS_NUM_DCM_COUNTERS 51237#define HTT_TX_PDEV_STATS_NUM_BW_COUNTERS 41238#define HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS 81239#define HTT_TX_PDEV_STATS_NUM_PREAMBLE_TYPES HTT_STATS_PREAM_COUNT1240#define HTT_TX_PDEV_STATS_NUM_LEGACY_CCK_STATS 41241#define HTT_TX_PDEV_STATS_NUM_LEGACY_OFDM_STATS 81242#define HTT_TX_PDEV_STATS_NUM_LTF 412431244#define HTT_TX_NUM_OF_SOUNDING_STATS_WORDS \1245(HTT_TX_PDEV_STATS_NUM_BW_COUNTERS * \1246HTT_TX_PDEV_STATS_NUM_AX_MUMIMO_USER_STATS)12471248struct htt_tx_pdev_rate_stats_tlv {1249u32 mac_id__word;1250u32 tx_ldpc;1251u32 rts_cnt;1252/* RSSI value of last ack packet (units = dB above noise floor) */1253u32 ack_rssi;12541255u32 tx_mcs[HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];12561257u32 tx_su_mcs[HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];1258u32 tx_mu_mcs[HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];12591260/* element 0,1, ...7 -> NSS 1,2, ...8 */1261u32 tx_nss[HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS];1262/* element 0: 20 MHz, 1: 40 MHz, 2: 80 MHz, 3: 160 and 80+80 MHz */1263u32 tx_bw[HTT_TX_PDEV_STATS_NUM_BW_COUNTERS];1264u32 tx_stbc[HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];1265u32 tx_pream[HTT_TX_PDEV_STATS_NUM_PREAMBLE_TYPES];12661267/* Counters to track number of tx packets1268* in each GI (400us, 800us, 1600us & 3200us) in each mcs (0-11)1269*/1270u32 tx_gi[HTT_TX_PDEV_STATS_NUM_GI_COUNTERS][HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];12711272/* Counters to track packets in dcm mcs (MCS 0, 1, 3, 4) */1273u32 tx_dcm[HTT_TX_PDEV_STATS_NUM_DCM_COUNTERS];1274/* Number of CTS-acknowledged RTS packets */1275u32 rts_success;12761277/*1278* Counters for legacy 11a and 11b transmissions.1279*1280* The index corresponds to:1281*1282* CCK: 0: 1 Mbps, 1: 2 Mbps, 2: 5.5 Mbps, 3: 11 Mbps1283*1284* OFDM: 0: 6 Mbps, 1: 9 Mbps, 2: 12 Mbps, 3: 18 Mbps,1285* 4: 24 Mbps, 5: 36 Mbps, 6: 48 Mbps, 7: 54 Mbps1286*/1287u32 tx_legacy_cck_rate[HTT_TX_PDEV_STATS_NUM_LEGACY_CCK_STATS];1288u32 tx_legacy_ofdm_rate[HTT_TX_PDEV_STATS_NUM_LEGACY_OFDM_STATS];12891290u32 ac_mu_mimo_tx_ldpc;1291u32 ax_mu_mimo_tx_ldpc;1292u32 ofdma_tx_ldpc;12931294/*1295* Counters for 11ax HE LTF selection during TX.1296*1297* The index corresponds to:1298*1299* 0: unused, 1: 1x LTF, 2: 2x LTF, 3: 4x LTF1300*/1301u32 tx_he_ltf[HTT_TX_PDEV_STATS_NUM_LTF];13021303u32 ac_mu_mimo_tx_mcs[HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];1304u32 ax_mu_mimo_tx_mcs[HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];1305u32 ofdma_tx_mcs[HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];13061307u32 ac_mu_mimo_tx_nss[HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS];1308u32 ax_mu_mimo_tx_nss[HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS];1309u32 ofdma_tx_nss[HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS];13101311u32 ac_mu_mimo_tx_bw[HTT_TX_PDEV_STATS_NUM_BW_COUNTERS];1312u32 ax_mu_mimo_tx_bw[HTT_TX_PDEV_STATS_NUM_BW_COUNTERS];1313u32 ofdma_tx_bw[HTT_TX_PDEV_STATS_NUM_BW_COUNTERS];13141315u32 ac_mu_mimo_tx_gi[HTT_TX_PDEV_STATS_NUM_GI_COUNTERS]1316[HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];1317u32 ax_mu_mimo_tx_gi[HTT_TX_PDEV_STATS_NUM_GI_COUNTERS]1318[HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];1319u32 ofdma_tx_gi[HTT_TX_PDEV_STATS_NUM_GI_COUNTERS]1320[HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];1321};13221323/* == PDEV RX RATE CTRL STATS == */1324#define HTT_RX_PDEV_STATS_NUM_LEGACY_CCK_STATS 41325#define HTT_RX_PDEV_STATS_NUM_LEGACY_OFDM_STATS 81326#define HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS 121327#define HTT_RX_PDEV_STATS_NUM_GI_COUNTERS 41328#define HTT_RX_PDEV_STATS_NUM_DCM_COUNTERS 51329#define HTT_RX_PDEV_STATS_NUM_BW_COUNTERS 41330#define HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS 81331#define HTT_RX_PDEV_STATS_NUM_PREAMBLE_TYPES HTT_STATS_PREAM_COUNT1332#define HTT_RX_PDEV_MAX_OFDMA_NUM_USER 81333#define HTT_RX_PDEV_STATS_RXEVM_MAX_PILOTS_PER_NSS 161334#define HTT_RX_PDEV_STATS_NUM_RU_SIZE_COUNTERS 61335#define HTT_RX_PDEV_MAX_ULMUMIMO_NUM_USER 813361337struct htt_rx_pdev_rate_stats_tlv {1338u32 mac_id__word;1339u32 nsts;13401341u32 rx_ldpc;1342u32 rts_cnt;13431344u32 rssi_mgmt; /* units = dB above noise floor */1345u32 rssi_data; /* units = dB above noise floor */1346u32 rssi_comb; /* units = dB above noise floor */1347u32 rx_mcs[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];1348/* element 0,1, ...7 -> NSS 1,2, ...8 */1349u32 rx_nss[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS];1350u32 rx_dcm[HTT_RX_PDEV_STATS_NUM_DCM_COUNTERS];1351u32 rx_stbc[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];1352/* element 0: 20 MHz, 1: 40 MHz, 2: 80 MHz, 3: 160 and 80+80 MHz */1353u32 rx_bw[HTT_RX_PDEV_STATS_NUM_BW_COUNTERS];1354u32 rx_pream[HTT_RX_PDEV_STATS_NUM_PREAMBLE_TYPES];1355u8 rssi_chain[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS]1356[HTT_RX_PDEV_STATS_NUM_BW_COUNTERS];1357/* units = dB above noise floor */13581359/* Counters to track number of rx packets1360* in each GI in each mcs (0-11)1361*/1362u32 rx_gi[HTT_RX_PDEV_STATS_NUM_GI_COUNTERS][HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];1363s32 rssi_in_dbm; /* rx Signal Strength value in dBm unit */13641365u32 rx_11ax_su_ext;1366u32 rx_11ac_mumimo;1367u32 rx_11ax_mumimo;1368u32 rx_11ax_ofdma;1369u32 txbf;1370u32 rx_legacy_cck_rate[HTT_RX_PDEV_STATS_NUM_LEGACY_CCK_STATS];1371u32 rx_legacy_ofdm_rate[HTT_RX_PDEV_STATS_NUM_LEGACY_OFDM_STATS];1372u32 rx_active_dur_us_low;1373u32 rx_active_dur_us_high;13741375u32 rx_11ax_ul_ofdma;13761377u32 ul_ofdma_rx_mcs[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];1378u32 ul_ofdma_rx_gi[HTT_TX_PDEV_STATS_NUM_GI_COUNTERS]1379[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];1380u32 ul_ofdma_rx_nss[HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS];1381u32 ul_ofdma_rx_bw[HTT_TX_PDEV_STATS_NUM_BW_COUNTERS];1382u32 ul_ofdma_rx_stbc;1383u32 ul_ofdma_rx_ldpc;13841385/* record the stats for each user index */1386u32 rx_ulofdma_non_data_ppdu[HTT_RX_PDEV_MAX_OFDMA_NUM_USER]; /* ppdu level */1387u32 rx_ulofdma_data_ppdu[HTT_RX_PDEV_MAX_OFDMA_NUM_USER]; /* ppdu level */1388u32 rx_ulofdma_mpdu_ok[HTT_RX_PDEV_MAX_OFDMA_NUM_USER]; /* mpdu level */1389u32 rx_ulofdma_mpdu_fail[HTT_RX_PDEV_MAX_OFDMA_NUM_USER]; /* mpdu level */13901391u32 nss_count;1392u32 pilot_count;1393/* RxEVM stats in dB */1394s32 rx_pilot_evm_db[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS]1395[HTT_RX_PDEV_STATS_RXEVM_MAX_PILOTS_PER_NSS];1396/* rx_pilot_evm_db_mean:1397* EVM mean across pilots, computed as1398* mean(10*log10(rx_pilot_evm_linear)) = mean(rx_pilot_evm_db)1399*/1400s32 rx_pilot_evm_db_mean[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS];1401s8 rx_ul_fd_rssi[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS]1402[HTT_RX_PDEV_MAX_OFDMA_NUM_USER]; /* dBm units */1403/* per_chain_rssi_pkt_type:1404* This field shows what type of rx frame the per-chain RSSI was computed1405* on, by recording the frame type and sub-type as bit-fields within this1406* field:1407* BIT [3 : 0] :- IEEE80211_FC0_TYPE1408* BIT [7 : 4] :- IEEE80211_FC0_SUBTYPE1409* BIT [31 : 8] :- Reserved1410*/1411u32 per_chain_rssi_pkt_type;1412s8 rx_per_chain_rssi_in_dbm[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS]1413[HTT_RX_PDEV_STATS_NUM_BW_COUNTERS];14141415u32 rx_su_ndpa;1416u32 rx_11ax_su_txbf_mcs[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];1417u32 rx_mu_ndpa;1418u32 rx_11ax_mu_txbf_mcs[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];1419u32 rx_br_poll;1420u32 rx_11ax_dl_ofdma_mcs[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];1421u32 rx_11ax_dl_ofdma_ru[HTT_RX_PDEV_STATS_NUM_RU_SIZE_COUNTERS];14221423u32 rx_ulmumimo_non_data_ppdu[HTT_RX_PDEV_MAX_ULMUMIMO_NUM_USER];1424u32 rx_ulmumimo_data_ppdu[HTT_RX_PDEV_MAX_ULMUMIMO_NUM_USER];1425u32 rx_ulmumimo_mpdu_ok[HTT_RX_PDEV_MAX_ULMUMIMO_NUM_USER];1426u32 rx_ulmumimo_mpdu_fail[HTT_RX_PDEV_MAX_ULMUMIMO_NUM_USER];1427u32 rx_ulofdma_non_data_nusers[HTT_RX_PDEV_MAX_OFDMA_NUM_USER];1428u32 rx_ulofdma_data_nusers[HTT_RX_PDEV_MAX_OFDMA_NUM_USER];1429};14301431/* == RX PDEV/SOC STATS == */1432struct htt_rx_soc_fw_stats_tlv {1433u32 fw_reo_ring_data_msdu;1434u32 fw_to_host_data_msdu_bcmc;1435u32 fw_to_host_data_msdu_uc;1436u32 ofld_remote_data_buf_recycle_cnt;1437u32 ofld_remote_free_buf_indication_cnt;14381439u32 ofld_buf_to_host_data_msdu_uc;1440u32 reo_fw_ring_to_host_data_msdu_uc;14411442u32 wbm_sw_ring_reap;1443u32 wbm_forward_to_host_cnt;1444u32 wbm_target_recycle_cnt;14451446u32 target_refill_ring_recycle_cnt;1447};14481449/* NOTE: Variable length TLV, use length spec to infer array size */1450struct htt_rx_soc_fw_refill_ring_empty_tlv_v {1451/* HTT_RX_STATS_REFILL_MAX_RING */1452DECLARE_FLEX_ARRAY(u32, refill_ring_empty_cnt);1453};14541455/* NOTE: Variable length TLV, use length spec to infer array size */1456struct htt_rx_soc_fw_refill_ring_num_refill_tlv_v {1457/* HTT_RX_STATS_REFILL_MAX_RING */1458DECLARE_FLEX_ARRAY(u32, refill_ring_num_refill);1459};14601461/* RXDMA error code from WBM released packets */1462enum htt_rx_rxdma_error_code_enum {1463HTT_RX_RXDMA_OVERFLOW_ERR = 0,1464HTT_RX_RXDMA_MPDU_LENGTH_ERR = 1,1465HTT_RX_RXDMA_FCS_ERR = 2,1466HTT_RX_RXDMA_DECRYPT_ERR = 3,1467HTT_RX_RXDMA_TKIP_MIC_ERR = 4,1468HTT_RX_RXDMA_UNECRYPTED_ERR = 5,1469HTT_RX_RXDMA_MSDU_LEN_ERR = 6,1470HTT_RX_RXDMA_MSDU_LIMIT_ERR = 7,1471HTT_RX_RXDMA_WIFI_PARSE_ERR = 8,1472HTT_RX_RXDMA_AMSDU_PARSE_ERR = 9,1473HTT_RX_RXDMA_SA_TIMEOUT_ERR = 10,1474HTT_RX_RXDMA_DA_TIMEOUT_ERR = 11,1475HTT_RX_RXDMA_FLOW_TIMEOUT_ERR = 12,1476HTT_RX_RXDMA_FLUSH_REQUEST = 13,1477HTT_RX_RXDMA_ERR_CODE_RVSD0 = 14,1478HTT_RX_RXDMA_ERR_CODE_RVSD1 = 15,14791480/* This MAX_ERR_CODE should not be used in any host/target messages,1481* so that even though it is defined within a host/target interface1482* definition header file, it isn't actually part of the host/target1483* interface, and thus can be modified.1484*/1485HTT_RX_RXDMA_MAX_ERR_CODE1486};14871488/* NOTE: Variable length TLV, use length spec to infer array size */1489struct htt_rx_soc_fw_refill_ring_num_rxdma_err_tlv_v {1490DECLARE_FLEX_ARRAY(u32, rxdma_err); /* HTT_RX_RXDMA_MAX_ERR_CODE */1491};14921493/* REO error code from WBM released packets */1494enum htt_rx_reo_error_code_enum {1495HTT_RX_REO_QUEUE_DESC_ADDR_ZERO = 0,1496HTT_RX_REO_QUEUE_DESC_NOT_VALID = 1,1497HTT_RX_AMPDU_IN_NON_BA = 2,1498HTT_RX_NON_BA_DUPLICATE = 3,1499HTT_RX_BA_DUPLICATE = 4,1500HTT_RX_REGULAR_FRAME_2K_JUMP = 5,1501HTT_RX_BAR_FRAME_2K_JUMP = 6,1502HTT_RX_REGULAR_FRAME_OOR = 7,1503HTT_RX_BAR_FRAME_OOR = 8,1504HTT_RX_BAR_FRAME_NO_BA_SESSION = 9,1505HTT_RX_BAR_FRAME_SN_EQUALS_SSN = 10,1506HTT_RX_PN_CHECK_FAILED = 11,1507HTT_RX_2K_ERROR_HANDLING_FLAG_SET = 12,1508HTT_RX_PN_ERROR_HANDLING_FLAG_SET = 13,1509HTT_RX_QUEUE_DESCRIPTOR_BLOCKED_SET = 14,1510HTT_RX_REO_ERR_CODE_RVSD = 15,15111512/* This MAX_ERR_CODE should not be used in any host/target messages,1513* so that even though it is defined within a host/target interface1514* definition header file, it isn't actually part of the host/target1515* interface, and thus can be modified.1516*/1517HTT_RX_REO_MAX_ERR_CODE1518};15191520/* NOTE: Variable length TLV, use length spec to infer array size */1521struct htt_rx_soc_fw_refill_ring_num_reo_err_tlv_v {1522DECLARE_FLEX_ARRAY(u32, reo_err); /* HTT_RX_REO_MAX_ERR_CODE */1523};15241525/* == RX PDEV STATS == */1526#define HTT_STATS_SUBTYPE_MAX 1615271528struct htt_rx_pdev_fw_stats_tlv {1529u32 mac_id__word;1530u32 ppdu_recvd;1531u32 mpdu_cnt_fcs_ok;1532u32 mpdu_cnt_fcs_err;1533u32 tcp_msdu_cnt;1534u32 tcp_ack_msdu_cnt;1535u32 udp_msdu_cnt;1536u32 other_msdu_cnt;1537u32 fw_ring_mpdu_ind;1538u32 fw_ring_mgmt_subtype[HTT_STATS_SUBTYPE_MAX];1539u32 fw_ring_ctrl_subtype[HTT_STATS_SUBTYPE_MAX];1540u32 fw_ring_mcast_data_msdu;1541u32 fw_ring_bcast_data_msdu;1542u32 fw_ring_ucast_data_msdu;1543u32 fw_ring_null_data_msdu;1544u32 fw_ring_mpdu_drop;1545u32 ofld_local_data_ind_cnt;1546u32 ofld_local_data_buf_recycle_cnt;1547u32 drx_local_data_ind_cnt;1548u32 drx_local_data_buf_recycle_cnt;1549u32 local_nondata_ind_cnt;1550u32 local_nondata_buf_recycle_cnt;15511552u32 fw_status_buf_ring_refill_cnt;1553u32 fw_status_buf_ring_empty_cnt;1554u32 fw_pkt_buf_ring_refill_cnt;1555u32 fw_pkt_buf_ring_empty_cnt;1556u32 fw_link_buf_ring_refill_cnt;1557u32 fw_link_buf_ring_empty_cnt;15581559u32 host_pkt_buf_ring_refill_cnt;1560u32 host_pkt_buf_ring_empty_cnt;1561u32 mon_pkt_buf_ring_refill_cnt;1562u32 mon_pkt_buf_ring_empty_cnt;1563u32 mon_status_buf_ring_refill_cnt;1564u32 mon_status_buf_ring_empty_cnt;1565u32 mon_desc_buf_ring_refill_cnt;1566u32 mon_desc_buf_ring_empty_cnt;1567u32 mon_dest_ring_update_cnt;1568u32 mon_dest_ring_full_cnt;15691570u32 rx_suspend_cnt;1571u32 rx_suspend_fail_cnt;1572u32 rx_resume_cnt;1573u32 rx_resume_fail_cnt;1574u32 rx_ring_switch_cnt;1575u32 rx_ring_restore_cnt;1576u32 rx_flush_cnt;1577u32 rx_recovery_reset_cnt;1578};15791580#define HTT_STATS_PHY_ERR_MAX 4315811582struct htt_rx_pdev_fw_stats_phy_err_tlv {1583u32 mac_id__word;1584u32 total_phy_err_cnt;1585/* Counts of different types of phy errs1586* The mapping of PHY error types to phy_err array elements is HW dependent.1587* The only currently-supported mapping is shown below:1588*1589* 0 phyrx_err_phy_off Reception aborted due to receiving a PHY_OFF TLV1590* 1 phyrx_err_synth_off1591* 2 phyrx_err_ofdma_timing1592* 3 phyrx_err_ofdma_signal_parity1593* 4 phyrx_err_ofdma_rate_illegal1594* 5 phyrx_err_ofdma_length_illegal1595* 6 phyrx_err_ofdma_restart1596* 7 phyrx_err_ofdma_service1597* 8 phyrx_err_ppdu_ofdma_power_drop1598* 9 phyrx_err_cck_blokker1599* 10 phyrx_err_cck_timing1600* 11 phyrx_err_cck_header_crc1601* 12 phyrx_err_cck_rate_illegal1602* 13 phyrx_err_cck_length_illegal1603* 14 phyrx_err_cck_restart1604* 15 phyrx_err_cck_service1605* 16 phyrx_err_cck_power_drop1606* 17 phyrx_err_ht_crc_err1607* 18 phyrx_err_ht_length_illegal1608* 19 phyrx_err_ht_rate_illegal1609* 20 phyrx_err_ht_zlf1610* 21 phyrx_err_false_radar_ext1611* 22 phyrx_err_green_field1612* 23 phyrx_err_bw_gt_dyn_bw1613* 24 phyrx_err_leg_ht_mismatch1614* 25 phyrx_err_vht_crc_error1615* 26 phyrx_err_vht_siga_unsupported1616* 27 phyrx_err_vht_lsig_len_invalid1617* 28 phyrx_err_vht_ndp_or_zlf1618* 29 phyrx_err_vht_nsym_lt_zero1619* 30 phyrx_err_vht_rx_extra_symbol_mismatch1620* 31 phyrx_err_vht_rx_skip_group_id01621* 32 phyrx_err_vht_rx_skip_group_id1to621622* 33 phyrx_err_vht_rx_skip_group_id631623* 34 phyrx_err_ofdm_ldpc_decoder_disabled1624* 35 phyrx_err_defer_nap1625* 36 phyrx_err_fdomain_timeout1626* 37 phyrx_err_lsig_rel_check1627* 38 phyrx_err_bt_collision1628* 39 phyrx_err_unsupported_mu_feedback1629* 40 phyrx_err_ppdu_tx_interrupt_rx1630* 41 phyrx_err_unsupported_cbf1631* 42 phyrx_err_other1632*/1633u32 phy_err[HTT_STATS_PHY_ERR_MAX];1634};16351636/* NOTE: Variable length TLV, use length spec to infer array size */1637struct htt_rx_pdev_fw_ring_mpdu_err_tlv_v {1638/* Num error MPDU for each RxDMA error type */1639DECLARE_FLEX_ARRAY(u32, fw_ring_mpdu_err); /* HTT_RX_STATS_RXDMA_MAX_ERR */1640};16411642/* NOTE: Variable length TLV, use length spec to infer array size */1643struct htt_rx_pdev_fw_mpdu_drop_tlv_v {1644/* Num MPDU dropped */1645DECLARE_FLEX_ARRAY(u32, fw_mpdu_drop); /* HTT_RX_STATS_FW_DROP_REASON_MAX */1646};16471648#define HTT_PDEV_CCA_STATS_TX_FRAME_INFO_PRESENT (0x1)1649#define HTT_PDEV_CCA_STATS_RX_FRAME_INFO_PRESENT (0x2)1650#define HTT_PDEV_CCA_STATS_RX_CLEAR_INFO_PRESENT (0x4)1651#define HTT_PDEV_CCA_STATS_MY_RX_FRAME_INFO_PRESENT (0x8)1652#define HTT_PDEV_CCA_STATS_USEC_CNT_INFO_PRESENT (0x10)1653#define HTT_PDEV_CCA_STATS_MED_RX_IDLE_INFO_PRESENT (0x20)1654#define HTT_PDEV_CCA_STATS_MED_TX_IDLE_GLOBAL_INFO_PRESENT (0x40)1655#define HTT_PDEV_CCA_STATS_CCA_OBBS_USEC_INFO_PRESENT (0x80)16561657struct htt_pdev_stats_cca_counters_tlv {1658/* Below values are obtained from the HW Cycles counter registers */1659u32 tx_frame_usec;1660u32 rx_frame_usec;1661u32 rx_clear_usec;1662u32 my_rx_frame_usec;1663u32 usec_cnt;1664u32 med_rx_idle_usec;1665u32 med_tx_idle_global_usec;1666u32 cca_obss_usec;1667};16681669struct htt_pdev_cca_stats_hist_v1_tlv {1670u32 chan_num;1671/* num of CCA records (Num of htt_pdev_stats_cca_counters_tlv)*/1672u32 num_records;1673u32 valid_cca_counters_bitmap;1674u32 collection_interval;16751676/* This will be followed by an array which contains the CCA stats1677* collected in the last N intervals,1678* if the indication is for last N intervals CCA stats.1679* Then the pdev_cca_stats[0] element contains the oldest CCA stats1680* and pdev_cca_stats[N-1] will have the most recent CCA stats.1681* htt_pdev_stats_cca_counters_tlv cca_hist_tlv[1];1682*/1683};16841685struct htt_pdev_stats_twt_session_tlv {1686u32 vdev_id;1687struct htt_mac_addr peer_mac;1688u32 flow_id_flags;16891690/* TWT_DIALOG_ID_UNAVAILABLE is used1691* when TWT session is not initiated by host1692*/1693u32 dialog_id;1694u32 wake_dura_us;1695u32 wake_intvl_us;1696u32 sp_offset_us;1697};16981699struct htt_pdev_stats_twt_sessions_tlv {1700u32 pdev_id;1701u32 num_sessions;1702struct htt_pdev_stats_twt_session_tlv twt_session[];1703};17041705enum htt_rx_reo_resource_sample_id_enum {1706/* Global link descriptor queued in REO */1707HTT_RX_REO_RESOURCE_GLOBAL_LINK_DESC_COUNT_0 = 0,1708HTT_RX_REO_RESOURCE_GLOBAL_LINK_DESC_COUNT_1 = 1,1709HTT_RX_REO_RESOURCE_GLOBAL_LINK_DESC_COUNT_2 = 2,1710/*Number of queue descriptors of this aging group */1711HTT_RX_REO_RESOURCE_BUFFERS_USED_AC0 = 3,1712HTT_RX_REO_RESOURCE_BUFFERS_USED_AC1 = 4,1713HTT_RX_REO_RESOURCE_BUFFERS_USED_AC2 = 5,1714HTT_RX_REO_RESOURCE_BUFFERS_USED_AC3 = 6,1715/* Total number of MSDUs buffered in AC */1716HTT_RX_REO_RESOURCE_AGING_NUM_QUEUES_AC0 = 7,1717HTT_RX_REO_RESOURCE_AGING_NUM_QUEUES_AC1 = 8,1718HTT_RX_REO_RESOURCE_AGING_NUM_QUEUES_AC2 = 9,1719HTT_RX_REO_RESOURCE_AGING_NUM_QUEUES_AC3 = 10,17201721HTT_RX_REO_RESOURCE_STATS_MAX = 161722};17231724struct htt_rx_reo_resource_stats_tlv_v {1725/* Variable based on the Number of records. HTT_RX_REO_RESOURCE_STATS_MAX */1726u32 sample_id;1727u32 total_max;1728u32 total_avg;1729u32 total_sample;1730u32 non_zeros_avg;1731u32 non_zeros_sample;1732u32 last_non_zeros_max;1733u32 last_non_zeros_min;1734u32 last_non_zeros_avg;1735u32 last_non_zeros_sample;1736};17371738/* == TX SOUNDING STATS == */17391740enum htt_txbf_sound_steer_modes {1741HTT_IMPLICIT_TXBF_STEER_STATS = 0,1742HTT_EXPLICIT_TXBF_SU_SIFS_STEER_STATS = 1,1743HTT_EXPLICIT_TXBF_SU_RBO_STEER_STATS = 2,1744HTT_EXPLICIT_TXBF_MU_SIFS_STEER_STATS = 3,1745HTT_EXPLICIT_TXBF_MU_RBO_STEER_STATS = 4,1746HTT_TXBF_MAX_NUM_OF_MODES = 51747};17481749enum htt_stats_sounding_tx_mode {1750HTT_TX_AC_SOUNDING_MODE = 0,1751HTT_TX_AX_SOUNDING_MODE = 1,1752};17531754struct htt_tx_sounding_stats_tlv {1755u32 tx_sounding_mode; /* HTT_TX_XX_SOUNDING_MODE */1756/* Counts number of soundings for all steering modes in each bw */1757u32 cbf_20[HTT_TXBF_MAX_NUM_OF_MODES];1758u32 cbf_40[HTT_TXBF_MAX_NUM_OF_MODES];1759u32 cbf_80[HTT_TXBF_MAX_NUM_OF_MODES];1760u32 cbf_160[HTT_TXBF_MAX_NUM_OF_MODES];1761/*1762* The sounding array is a 2-D array stored as an 1-D array of1763* u32. The stats for a particular user/bw combination is1764* referenced with the following:1765*1766* sounding[(user* max_bw) + bw]1767*1768* ... where max_bw == 4 for 160mhz1769*/1770u32 sounding[HTT_TX_NUM_OF_SOUNDING_STATS_WORDS];1771};17721773struct htt_pdev_obss_pd_stats_tlv {1774u32 num_obss_tx_ppdu_success;1775u32 num_obss_tx_ppdu_failure;1776u32 num_sr_tx_transmissions;1777u32 num_spatial_reuse_opportunities;1778u32 num_non_srg_opportunities;1779u32 num_non_srg_ppdu_tried;1780u32 num_non_srg_ppdu_success;1781u32 num_srg_opportunities;1782u32 num_srg_ppdu_tried;1783u32 num_srg_ppdu_success;1784u32 num_psr_opportunities;1785u32 num_psr_ppdu_tried;1786u32 num_psr_ppdu_success;1787};17881789struct htt_ring_backpressure_stats_tlv {1790u32 pdev_id;1791u32 current_head_idx;1792u32 current_tail_idx;1793u32 num_htt_msgs_sent;1794/* Time in milliseconds for which the ring has been in1795* its current backpressure condition1796*/1797u32 backpressure_time_ms;1798/* backpressure_hist - histogram showing how many times1799* different degrees of backpressure duration occurred:1800* Index 0 indicates the number of times ring was1801* continuously in backpressure state for 100 - 200ms.1802* Index 1 indicates the number of times ring was1803* continuously in backpressure state for 200 - 300ms.1804* Index 2 indicates the number of times ring was1805* continuously in backpressure state for 300 - 400ms.1806* Index 3 indicates the number of times ring was1807* continuously in backpressure state for 400 - 500ms.1808* Index 4 indicates the number of times ring was1809* continuously in backpressure state beyond 500ms.1810*/1811u32 backpressure_hist[5];1812};18131814#define HTT_TX_TXBF_RATE_STATS_NUM_MCS_COUNTERS 141815#define HTT_TX_TXBF_RATE_STATS_NUM_BW_COUNTERS 51816#define HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS 818171818struct htt_pdev_txrate_txbf_stats_tlv {1819/* SU TxBF TX MCS stats */1820u32 tx_su_txbf_mcs[HTT_TX_TXBF_RATE_STATS_NUM_MCS_COUNTERS];1821/* Implicit BF TX MCS stats */1822u32 tx_su_ibf_mcs[HTT_TX_TXBF_RATE_STATS_NUM_MCS_COUNTERS];1823/* Open loop TX MCS stats */1824u32 tx_su_ol_mcs[HTT_TX_TXBF_RATE_STATS_NUM_MCS_COUNTERS];1825/* SU TxBF TX NSS stats */1826u32 tx_su_txbf_nss[HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS];1827/* Implicit BF TX NSS stats */1828u32 tx_su_ibf_nss[HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS];1829/* Open loop TX NSS stats */1830u32 tx_su_ol_nss[HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS];1831/* SU TxBF TX BW stats */1832u32 tx_su_txbf_bw[HTT_TX_TXBF_RATE_STATS_NUM_BW_COUNTERS];1833/* Implicit BF TX BW stats */1834u32 tx_su_ibf_bw[HTT_TX_TXBF_RATE_STATS_NUM_BW_COUNTERS];1835/* Open loop TX BW stats */1836u32 tx_su_ol_bw[HTT_TX_TXBF_RATE_STATS_NUM_BW_COUNTERS];1837};18381839struct htt_txbf_ofdma_ndpa_stats_tlv {1840/* 11AX HE OFDMA NDPA frame queued to the HW */1841u32 ax_ofdma_ndpa_queued[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];1842/* 11AX HE OFDMA NDPA frame sent over the air */1843u32 ax_ofdma_ndpa_tried[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];1844/* 11AX HE OFDMA NDPA frame flushed by HW */1845u32 ax_ofdma_ndpa_flushed[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];1846/* 11AX HE OFDMA NDPA frame completed with error(s) */1847u32 ax_ofdma_ndpa_err[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];1848};18491850struct htt_txbf_ofdma_ndp_stats_tlv {1851/* 11AX HE OFDMA NDP frame queued to the HW */1852u32 ax_ofdma_ndp_queued[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];1853/* 11AX HE OFDMA NDPA frame sent over the air */1854u32 ax_ofdma_ndp_tried[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];1855/* 11AX HE OFDMA NDPA frame flushed by HW */1856u32 ax_ofdma_ndp_flushed[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];1857/* 11AX HE OFDMA NDPA frame completed with error(s) */1858u32 ax_ofdma_ndp_err[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];1859};18601861struct htt_txbf_ofdma_brp_stats_tlv {1862/* 11AX HE OFDMA MU BRPOLL frame queued to the HW */1863u32 ax_ofdma_brpoll_queued[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];1864/* 11AX HE OFDMA MU BRPOLL frame sent over the air */1865u32 ax_ofdma_brpoll_tried[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];1866/* 11AX HE OFDMA MU BRPOLL frame flushed by HW */1867u32 ax_ofdma_brpoll_flushed[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];1868/* 11AX HE OFDMA MU BRPOLL frame completed with error(s) */1869u32 ax_ofdma_brp_err[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];1870/* Number of CBF(s) received when 11AX HE OFDMA MU BRPOLL frame1871* completed with error(s).1872*/1873u32 ax_ofdma_brp_err_num_cbf_rcvd[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS + 1];1874};18751876struct htt_txbf_ofdma_steer_stats_tlv {1877/* 11AX HE OFDMA PPDUs that were sent over the air with steering (TXBF + OFDMA) */1878u32 ax_ofdma_num_ppdu_steer[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];1879/* 11AX HE OFDMA PPDUs that were sent over the air in open loop */1880u32 ax_ofdma_num_ppdu_ol[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];1881/* 11AX HE OFDMA number of users for which CBF prefetch was1882* initiated to PHY HW during TX.1883*/1884u32 ax_ofdma_num_usrs_prefetch[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];1885/* 11AX HE OFDMA number of users for which sounding was initiated during TX */1886u32 ax_ofdma_num_usrs_sound[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];1887/* 11AX HE OFDMA number of users for which sounding was forced during TX */1888u32 ax_ofdma_num_usrs_force_sound[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];1889};18901891#define HTT_MAX_RX_PKT_CNT 81892#define HTT_MAX_RX_PKT_CRC_PASS_CNT 81893#define HTT_MAX_PER_BLK_ERR_CNT 201894#define HTT_MAX_RX_OTA_ERR_CNT 141895#define HTT_STATS_MAX_CHAINS 81896#define ATH11K_STATS_MGMT_FRM_TYPE_MAX 1618971898struct htt_phy_counters_tlv {1899/* number of RXTD OFDMA OTA error counts except power surge and drop */1900u32 rx_ofdma_timing_err_cnt;1901/* rx_cck_fail_cnt:1902* number of cck error counts due to rx reception failure because of1903* timing error in cck1904*/1905u32 rx_cck_fail_cnt;1906/* number of times tx abort initiated by mac */1907u32 mactx_abort_cnt;1908/* number of times rx abort initiated by mac */1909u32 macrx_abort_cnt;1910/* number of times tx abort initiated by phy */1911u32 phytx_abort_cnt;1912/* number of times rx abort initiated by phy */1913u32 phyrx_abort_cnt;1914/* number of rx deferred count initiated by phy */1915u32 phyrx_defer_abort_cnt;1916/* number of sizing events generated at LSTF */1917u32 rx_gain_adj_lstf_event_cnt;1918/* number of sizing events generated at non-legacy LTF */1919u32 rx_gain_adj_non_legacy_cnt;1920/* rx_pkt_cnt -1921* Received EOP (end-of-packet) count per packet type;1922* [0] = 11a; [1] = 11b; [2] = 11n; [3] = 11ac; [4] = 11ax; [5] = GF1923* [6-7]=RSVD1924*/1925u32 rx_pkt_cnt[HTT_MAX_RX_PKT_CNT];1926/* rx_pkt_crc_pass_cnt -1927* Received EOP (end-of-packet) count per packet type;1928* [0] = 11a; [1] = 11b; [2] = 11n; [3] = 11ac; [4] = 11ax; [5] = GF1929* [6-7]=RSVD1930*/1931u32 rx_pkt_crc_pass_cnt[HTT_MAX_RX_PKT_CRC_PASS_CNT];1932/* per_blk_err_cnt -1933* Error count per error source;1934* [0] = unknown; [1] = LSIG; [2] = HTSIG; [3] = VHTSIG; [4] = HESIG;1935* [5] = RXTD_OTA; [6] = RXTD_FATAL; [7] = DEMF; [8] = ROBE;1936* [9] = PMI; [10] = TXFD; [11] = TXTD; [12] = PHYRF1937* [13-19]=RSVD1938*/1939u32 per_blk_err_cnt[HTT_MAX_PER_BLK_ERR_CNT];1940/* rx_ota_err_cnt -1941* RXTD OTA (over-the-air) error count per error reason;1942* [0] = voting fail; [1] = weak det fail; [2] = strong sig fail;1943* [3] = cck fail; [4] = power surge; [5] = power drop;1944* [6] = btcf timing timeout error; [7] = btcf packet detect error;1945* [8] = coarse timing timeout error1946* [9-13]=RSVD1947*/1948u32 rx_ota_err_cnt[HTT_MAX_RX_OTA_ERR_CNT];1949};19501951struct htt_phy_stats_tlv {1952/* per chain hw noise floor values in dBm */1953s32 nf_chain[HTT_STATS_MAX_CHAINS];1954/* number of false radars detected */1955u32 false_radar_cnt;1956/* number of channel switches happened due to radar detection */1957u32 radar_cs_cnt;1958/* ani_level -1959* ANI level (noise interference) corresponds to the channel1960* the desense levels range from -5 to 15 in dB units,1961* higher values indicating more noise interference.1962*/1963s32 ani_level;1964/* running time in minutes since FW boot */1965u32 fw_run_time;1966};19671968struct htt_phy_reset_counters_tlv {1969u32 pdev_id;1970u32 cf_active_low_fail_cnt;1971u32 cf_active_low_pass_cnt;1972u32 phy_off_through_vreg_cnt;1973u32 force_calibration_cnt;1974u32 rf_mode_switch_phy_off_cnt;1975};19761977struct htt_phy_reset_stats_tlv {1978u32 pdev_id;1979u32 chan_mhz;1980u32 chan_band_center_freq1;1981u32 chan_band_center_freq2;1982u32 chan_phy_mode;1983u32 chan_flags;1984u32 chan_num;1985u32 reset_cause;1986u32 prev_reset_cause;1987u32 phy_warm_reset_src;1988u32 rx_gain_tbl_mode;1989u32 xbar_val;1990u32 force_calibration;1991u32 phyrf_mode;1992u32 phy_homechan;1993u32 phy_tx_ch_mask;1994u32 phy_rx_ch_mask;1995u32 phybb_ini_mask;1996u32 phyrf_ini_mask;1997u32 phy_dfs_en_mask;1998u32 phy_sscan_en_mask;1999u32 phy_synth_sel_mask;2000u32 phy_adfs_freq;2001u32 cck_fir_settings;2002u32 phy_dyn_pri_chan;2003u32 cca_thresh;2004u32 dyn_cca_status;2005u32 rxdesense_thresh_hw;2006u32 rxdesense_thresh_sw;2007};20082009struct htt_peer_ctrl_path_txrx_stats_tlv {2010/* peer mac address */2011u8 peer_mac_addr[ETH_ALEN];2012u8 rsvd[2];2013/* Num of tx mgmt frames with subtype on peer level */2014u32 peer_tx_mgmt_subtype[ATH11K_STATS_MGMT_FRM_TYPE_MAX];2015/* Num of rx mgmt frames with subtype on peer level */2016u32 peer_rx_mgmt_subtype[ATH11K_STATS_MGMT_FRM_TYPE_MAX];2017};20182019#ifdef CONFIG_ATH11K_DEBUGFS20202021void ath11k_debugfs_htt_stats_init(struct ath11k *ar);2022void ath11k_debugfs_htt_ext_stats_handler(struct ath11k_base *ab,2023struct sk_buff *skb);2024int ath11k_debugfs_htt_stats_req(struct ath11k *ar);20252026#else /* CONFIG_ATH11K_DEBUGFS */20272028static inline void ath11k_debugfs_htt_stats_init(struct ath11k *ar)2029{2030}20312032static inline void ath11k_debugfs_htt_ext_stats_handler(struct ath11k_base *ab,2033struct sk_buff *skb)2034{2035}20362037static inline int ath11k_debugfs_htt_stats_req(struct ath11k *ar)2038{2039return 0;2040}20412042#endif /* CONFIG_ATH11K_DEBUGFS */20432044#endif204520462047