156292162SKalle Valo /* SPDX-License-Identifier: BSD-3-Clause-Clear */
256292162SKalle Valo /*
356292162SKalle Valo * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
4*586c7fb1SJeff Johnson * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
556292162SKalle Valo */
656292162SKalle Valo
756292162SKalle Valo #ifndef DEBUG_HTT_STATS_H
856292162SKalle Valo #define DEBUG_HTT_STATS_H
956292162SKalle Valo
1056292162SKalle Valo #define HTT_STATS_COOKIE_LSB GENMASK_ULL(31, 0)
1156292162SKalle Valo #define HTT_STATS_COOKIE_MSB GENMASK_ULL(63, 32)
1256292162SKalle Valo #define HTT_STATS_MAGIC_VALUE 0xF0F0F0F0
1356292162SKalle Valo
1456292162SKalle Valo enum htt_tlv_tag_t {
1556292162SKalle Valo HTT_STATS_TX_PDEV_CMN_TAG = 0,
1656292162SKalle Valo HTT_STATS_TX_PDEV_UNDERRUN_TAG = 1,
1756292162SKalle Valo HTT_STATS_TX_PDEV_SIFS_TAG = 2,
1856292162SKalle Valo HTT_STATS_TX_PDEV_FLUSH_TAG = 3,
1956292162SKalle Valo HTT_STATS_TX_PDEV_PHY_ERR_TAG = 4,
2056292162SKalle Valo HTT_STATS_STRING_TAG = 5,
2156292162SKalle Valo HTT_STATS_TX_HWQ_CMN_TAG = 6,
2256292162SKalle Valo HTT_STATS_TX_HWQ_DIFS_LATENCY_TAG = 7,
2356292162SKalle Valo HTT_STATS_TX_HWQ_CMD_RESULT_TAG = 8,
2456292162SKalle Valo HTT_STATS_TX_HWQ_CMD_STALL_TAG = 9,
2556292162SKalle Valo HTT_STATS_TX_HWQ_FES_STATUS_TAG = 10,
2656292162SKalle Valo HTT_STATS_TX_TQM_GEN_MPDU_TAG = 11,
2756292162SKalle Valo HTT_STATS_TX_TQM_LIST_MPDU_TAG = 12,
2856292162SKalle Valo HTT_STATS_TX_TQM_LIST_MPDU_CNT_TAG = 13,
2956292162SKalle Valo HTT_STATS_TX_TQM_CMN_TAG = 14,
3056292162SKalle Valo HTT_STATS_TX_TQM_PDEV_TAG = 15,
3156292162SKalle Valo HTT_STATS_TX_TQM_CMDQ_STATUS_TAG = 16,
3256292162SKalle Valo HTT_STATS_TX_DE_EAPOL_PACKETS_TAG = 17,
3356292162SKalle Valo HTT_STATS_TX_DE_CLASSIFY_FAILED_TAG = 18,
3456292162SKalle Valo HTT_STATS_TX_DE_CLASSIFY_STATS_TAG = 19,
3556292162SKalle Valo HTT_STATS_TX_DE_CLASSIFY_STATUS_TAG = 20,
3656292162SKalle Valo HTT_STATS_TX_DE_ENQUEUE_PACKETS_TAG = 21,
3756292162SKalle Valo HTT_STATS_TX_DE_ENQUEUE_DISCARD_TAG = 22,
3856292162SKalle Valo HTT_STATS_TX_DE_CMN_TAG = 23,
3956292162SKalle Valo HTT_STATS_RING_IF_TAG = 24,
4056292162SKalle Valo HTT_STATS_TX_PDEV_MU_MIMO_STATS_TAG = 25,
4156292162SKalle Valo HTT_STATS_SFM_CMN_TAG = 26,
4256292162SKalle Valo HTT_STATS_SRING_STATS_TAG = 27,
4356292162SKalle Valo HTT_STATS_RX_PDEV_FW_STATS_TAG = 28,
4456292162SKalle Valo HTT_STATS_RX_PDEV_FW_RING_MPDU_ERR_TAG = 29,
4556292162SKalle Valo HTT_STATS_RX_PDEV_FW_MPDU_DROP_TAG = 30,
4656292162SKalle Valo HTT_STATS_RX_SOC_FW_STATS_TAG = 31,
4756292162SKalle Valo HTT_STATS_RX_SOC_FW_REFILL_RING_EMPTY_TAG = 32,
4856292162SKalle Valo HTT_STATS_RX_SOC_FW_REFILL_RING_NUM_REFILL_TAG = 33,
4956292162SKalle Valo HTT_STATS_TX_PDEV_RATE_STATS_TAG = 34,
5056292162SKalle Valo HTT_STATS_RX_PDEV_RATE_STATS_TAG = 35,
5156292162SKalle Valo HTT_STATS_TX_PDEV_SCHEDULER_TXQ_STATS_TAG = 36,
5256292162SKalle Valo HTT_STATS_TX_SCHED_CMN_TAG = 37,
5356292162SKalle Valo HTT_STATS_TX_PDEV_MUMIMO_MPDU_STATS_TAG = 38,
5456292162SKalle Valo HTT_STATS_SCHED_TXQ_CMD_POSTED_TAG = 39,
5556292162SKalle Valo HTT_STATS_RING_IF_CMN_TAG = 40,
5656292162SKalle Valo HTT_STATS_SFM_CLIENT_USER_TAG = 41,
5756292162SKalle Valo HTT_STATS_SFM_CLIENT_TAG = 42,
5856292162SKalle Valo HTT_STATS_TX_TQM_ERROR_STATS_TAG = 43,
5956292162SKalle Valo HTT_STATS_SCHED_TXQ_CMD_REAPED_TAG = 44,
6056292162SKalle Valo HTT_STATS_SRING_CMN_TAG = 45,
6156292162SKalle Valo HTT_STATS_TX_SELFGEN_AC_ERR_STATS_TAG = 46,
6256292162SKalle Valo HTT_STATS_TX_SELFGEN_CMN_STATS_TAG = 47,
6356292162SKalle Valo HTT_STATS_TX_SELFGEN_AC_STATS_TAG = 48,
6456292162SKalle Valo HTT_STATS_TX_SELFGEN_AX_STATS_TAG = 49,
6556292162SKalle Valo HTT_STATS_TX_SELFGEN_AX_ERR_STATS_TAG = 50,
6656292162SKalle Valo HTT_STATS_TX_HWQ_MUMIMO_SCH_STATS_TAG = 51,
6756292162SKalle Valo HTT_STATS_TX_HWQ_MUMIMO_MPDU_STATS_TAG = 52,
6856292162SKalle Valo HTT_STATS_TX_HWQ_MUMIMO_CMN_STATS_TAG = 53,
6956292162SKalle Valo HTT_STATS_HW_INTR_MISC_TAG = 54,
7056292162SKalle Valo HTT_STATS_HW_WD_TIMEOUT_TAG = 55,
7156292162SKalle Valo HTT_STATS_HW_PDEV_ERRS_TAG = 56,
7256292162SKalle Valo HTT_STATS_COUNTER_NAME_TAG = 57,
7356292162SKalle Valo HTT_STATS_TX_TID_DETAILS_TAG = 58,
7456292162SKalle Valo HTT_STATS_RX_TID_DETAILS_TAG = 59,
7556292162SKalle Valo HTT_STATS_PEER_STATS_CMN_TAG = 60,
7656292162SKalle Valo HTT_STATS_PEER_DETAILS_TAG = 61,
7756292162SKalle Valo HTT_STATS_PEER_TX_RATE_STATS_TAG = 62,
7856292162SKalle Valo HTT_STATS_PEER_RX_RATE_STATS_TAG = 63,
7956292162SKalle Valo HTT_STATS_PEER_MSDU_FLOWQ_TAG = 64,
8056292162SKalle Valo HTT_STATS_TX_DE_COMPL_STATS_TAG = 65,
8156292162SKalle Valo HTT_STATS_WHAL_TX_TAG = 66,
8256292162SKalle Valo HTT_STATS_TX_PDEV_SIFS_HIST_TAG = 67,
8356292162SKalle Valo HTT_STATS_RX_PDEV_FW_STATS_PHY_ERR_TAG = 68,
8456292162SKalle Valo HTT_STATS_TX_TID_DETAILS_V1_TAG = 69,
8556292162SKalle Valo HTT_STATS_PDEV_CCA_1SEC_HIST_TAG = 70,
8656292162SKalle Valo HTT_STATS_PDEV_CCA_100MSEC_HIST_TAG = 71,
8756292162SKalle Valo HTT_STATS_PDEV_CCA_STAT_CUMULATIVE_TAG = 72,
8856292162SKalle Valo HTT_STATS_PDEV_CCA_COUNTERS_TAG = 73,
8956292162SKalle Valo HTT_STATS_TX_PDEV_MPDU_STATS_TAG = 74,
9056292162SKalle Valo HTT_STATS_PDEV_TWT_SESSIONS_TAG = 75,
9156292162SKalle Valo HTT_STATS_PDEV_TWT_SESSION_TAG = 76,
9256292162SKalle Valo HTT_STATS_RX_REFILL_RXDMA_ERR_TAG = 77,
9356292162SKalle Valo HTT_STATS_RX_REFILL_REO_ERR_TAG = 78,
9456292162SKalle Valo HTT_STATS_RX_REO_RESOURCE_STATS_TAG = 79,
9556292162SKalle Valo HTT_STATS_TX_SOUNDING_STATS_TAG = 80,
9656292162SKalle Valo HTT_STATS_TX_PDEV_TX_PPDU_STATS_TAG = 81,
9756292162SKalle Valo HTT_STATS_TX_PDEV_TRIED_MPDU_CNT_HIST_TAG = 82,
9856292162SKalle Valo HTT_STATS_TX_HWQ_TRIED_MPDU_CNT_HIST_TAG = 83,
9956292162SKalle Valo HTT_STATS_TX_HWQ_TXOP_USED_CNT_HIST_TAG = 84,
10056292162SKalle Valo HTT_STATS_TX_DE_FW2WBM_RING_FULL_HIST_TAG = 85,
10156292162SKalle Valo HTT_STATS_SCHED_TXQ_SCHED_ORDER_SU_TAG = 86,
10256292162SKalle Valo HTT_STATS_SCHED_TXQ_SCHED_INELIGIBILITY_TAG = 87,
10356292162SKalle Valo HTT_STATS_PDEV_OBSS_PD_TAG = 88,
10456292162SKalle Valo HTT_STATS_HW_WAR_TAG = 89,
10556292162SKalle Valo HTT_STATS_RING_BACKPRESSURE_STATS_TAG = 90,
106ac83b603SVenkateswara Naralasetty HTT_STATS_PEER_CTRL_PATH_TXRX_STATS_TAG = 101,
107ac83b603SVenkateswara Naralasetty HTT_STATS_PDEV_TX_RATE_TXBF_STATS_TAG = 108,
108ac83b603SVenkateswara Naralasetty HTT_STATS_TXBF_OFDMA_NDPA_STATS_TAG = 113,
109ac83b603SVenkateswara Naralasetty HTT_STATS_TXBF_OFDMA_NDP_STATS_TAG = 114,
110ac83b603SVenkateswara Naralasetty HTT_STATS_TXBF_OFDMA_BRP_STATS_TAG = 115,
111ac83b603SVenkateswara Naralasetty HTT_STATS_TXBF_OFDMA_STEER_STATS_TAG = 116,
112ac83b603SVenkateswara Naralasetty HTT_STATS_PHY_COUNTERS_TAG = 121,
113ac83b603SVenkateswara Naralasetty HTT_STATS_PHY_STATS_TAG = 122,
1142d4f9093SNidhi Jain HTT_STATS_PHY_RESET_COUNTERS_TAG = 123,
1152d4f9093SNidhi Jain HTT_STATS_PHY_RESET_STATS_TAG = 124,
11656292162SKalle Valo
11756292162SKalle Valo HTT_STATS_MAX_TAG,
11856292162SKalle Valo };
11956292162SKalle Valo
12056292162SKalle Valo #define HTT_STATS_MAX_STRING_SZ32 4
12156292162SKalle Valo #define HTT_STATS_MACID_INVALID 0xff
12256292162SKalle Valo #define HTT_TX_HWQ_MAX_DIFS_LATENCY_BINS 10
12356292162SKalle Valo #define HTT_TX_HWQ_MAX_CMD_RESULT_STATS 13
12456292162SKalle Valo #define HTT_TX_HWQ_MAX_CMD_STALL_STATS 5
12556292162SKalle Valo #define HTT_TX_HWQ_MAX_FES_RESULT_STATS 10
12656292162SKalle Valo
12756292162SKalle Valo enum htt_tx_pdev_underrun_enum {
12856292162SKalle Valo HTT_STATS_TX_PDEV_NO_DATA_UNDERRUN = 0,
12956292162SKalle Valo HTT_STATS_TX_PDEV_DATA_UNDERRUN_BETWEEN_MPDU = 1,
13056292162SKalle Valo HTT_STATS_TX_PDEV_DATA_UNDERRUN_WITHIN_MPDU = 2,
13156292162SKalle Valo HTT_TX_PDEV_MAX_URRN_STATS = 3,
13256292162SKalle Valo };
13356292162SKalle Valo
13456292162SKalle Valo #define HTT_TX_PDEV_MAX_FLUSH_REASON_STATS 71
13556292162SKalle Valo #define HTT_TX_PDEV_MAX_SIFS_BURST_STATS 9
13656292162SKalle Valo #define HTT_TX_PDEV_MAX_SIFS_BURST_HIST_STATS 10
13756292162SKalle Valo #define HTT_TX_PDEV_MAX_PHY_ERR_STATS 18
13856292162SKalle Valo #define HTT_TX_PDEV_SCHED_TX_MODE_MAX 4
13956292162SKalle Valo #define HTT_TX_PDEV_NUM_SCHED_ORDER_LOG 20
14056292162SKalle Valo
14156292162SKalle Valo #define HTT_RX_STATS_REFILL_MAX_RING 4
14256292162SKalle Valo #define HTT_RX_STATS_RXDMA_MAX_ERR 16
14356292162SKalle Valo #define HTT_RX_STATS_FW_DROP_REASON_MAX 16
14456292162SKalle Valo
14556292162SKalle Valo /* Bytes stored in little endian order */
14656292162SKalle Valo /* Length should be multiple of DWORD */
14756292162SKalle Valo struct htt_stats_string_tlv {
1483b1088a0SGustavo A. R. Silva /* Can be variable length */
1493b1088a0SGustavo A. R. Silva DECLARE_FLEX_ARRAY(u32, data);
15056292162SKalle Valo } __packed;
15156292162SKalle Valo
1526ed73182SSeevalamuthu Mariappan #define HTT_STATS_MAC_ID GENMASK(7, 0)
1536ed73182SSeevalamuthu Mariappan
15456292162SKalle Valo /* == TX PDEV STATS == */
15556292162SKalle Valo struct htt_tx_pdev_stats_cmn_tlv {
15656292162SKalle Valo u32 mac_id__word;
15756292162SKalle Valo u32 hw_queued;
15856292162SKalle Valo u32 hw_reaped;
15956292162SKalle Valo u32 underrun;
16056292162SKalle Valo u32 hw_paused;
16156292162SKalle Valo u32 hw_flush;
16256292162SKalle Valo u32 hw_filt;
16356292162SKalle Valo u32 tx_abort;
16417818dfaSColin Ian King u32 mpdu_requeued;
16556292162SKalle Valo u32 tx_xretry;
16656292162SKalle Valo u32 data_rc;
16756292162SKalle Valo u32 mpdu_dropped_xretry;
16856292162SKalle Valo u32 illgl_rate_phy_err;
16956292162SKalle Valo u32 cont_xretry;
17056292162SKalle Valo u32 tx_timeout;
17156292162SKalle Valo u32 pdev_resets;
17256292162SKalle Valo u32 phy_underrun;
17356292162SKalle Valo u32 txop_ovf;
17456292162SKalle Valo u32 seq_posted;
17556292162SKalle Valo u32 seq_failed_queueing;
17656292162SKalle Valo u32 seq_completed;
17756292162SKalle Valo u32 seq_restarted;
17856292162SKalle Valo u32 mu_seq_posted;
17956292162SKalle Valo u32 seq_switch_hw_paused;
18056292162SKalle Valo u32 next_seq_posted_dsr;
18156292162SKalle Valo u32 seq_posted_isr;
18256292162SKalle Valo u32 seq_ctrl_cached;
18356292162SKalle Valo u32 mpdu_count_tqm;
18456292162SKalle Valo u32 msdu_count_tqm;
18556292162SKalle Valo u32 mpdu_removed_tqm;
18656292162SKalle Valo u32 msdu_removed_tqm;
18756292162SKalle Valo u32 mpdus_sw_flush;
18856292162SKalle Valo u32 mpdus_hw_filter;
18956292162SKalle Valo u32 mpdus_truncated;
19056292162SKalle Valo u32 mpdus_ack_failed;
19156292162SKalle Valo u32 mpdus_expired;
19256292162SKalle Valo u32 mpdus_seq_hw_retry;
19356292162SKalle Valo u32 ack_tlv_proc;
19456292162SKalle Valo u32 coex_abort_mpdu_cnt_valid;
19556292162SKalle Valo u32 coex_abort_mpdu_cnt;
19656292162SKalle Valo u32 num_total_ppdus_tried_ota;
19756292162SKalle Valo u32 num_data_ppdus_tried_ota;
19856292162SKalle Valo u32 local_ctrl_mgmt_enqued;
19956292162SKalle Valo u32 local_ctrl_mgmt_freed;
20056292162SKalle Valo u32 local_data_enqued;
20156292162SKalle Valo u32 local_data_freed;
20256292162SKalle Valo u32 mpdu_tried;
20356292162SKalle Valo u32 isr_wait_seq_posted;
20456292162SKalle Valo
20556292162SKalle Valo u32 tx_active_dur_us_low;
20656292162SKalle Valo u32 tx_active_dur_us_high;
20756292162SKalle Valo };
20856292162SKalle Valo
20956292162SKalle Valo /* NOTE: Variable length TLV, use length spec to infer array size */
21056292162SKalle Valo struct htt_tx_pdev_stats_urrn_tlv_v {
2113b1088a0SGustavo A. R. Silva /* HTT_TX_PDEV_MAX_URRN_STATS */
2123b1088a0SGustavo A. R. Silva DECLARE_FLEX_ARRAY(u32, urrn_stats);
21356292162SKalle Valo };
21456292162SKalle Valo
21556292162SKalle Valo /* NOTE: Variable length TLV, use length spec to infer array size */
21656292162SKalle Valo struct htt_tx_pdev_stats_flush_tlv_v {
2173b1088a0SGustavo A. R. Silva /* HTT_TX_PDEV_MAX_FLUSH_REASON_STATS */
2183b1088a0SGustavo A. R. Silva DECLARE_FLEX_ARRAY(u32, flush_errs);
21956292162SKalle Valo };
22056292162SKalle Valo
22156292162SKalle Valo /* NOTE: Variable length TLV, use length spec to infer array size */
22256292162SKalle Valo struct htt_tx_pdev_stats_sifs_tlv_v {
2233b1088a0SGustavo A. R. Silva /* HTT_TX_PDEV_MAX_SIFS_BURST_STATS */
2243b1088a0SGustavo A. R. Silva DECLARE_FLEX_ARRAY(u32, sifs_status);
22556292162SKalle Valo };
22656292162SKalle Valo
22756292162SKalle Valo /* NOTE: Variable length TLV, use length spec to infer array size */
22856292162SKalle Valo struct htt_tx_pdev_stats_phy_err_tlv_v {
2293b1088a0SGustavo A. R. Silva /* HTT_TX_PDEV_MAX_PHY_ERR_STATS */
2303b1088a0SGustavo A. R. Silva DECLARE_FLEX_ARRAY(u32, phy_errs);
23156292162SKalle Valo };
23256292162SKalle Valo
23356292162SKalle Valo /* NOTE: Variable length TLV, use length spec to infer array size */
23456292162SKalle Valo struct htt_tx_pdev_stats_sifs_hist_tlv_v {
2353b1088a0SGustavo A. R. Silva /* HTT_TX_PDEV_SIFS_BURST_HIST_STATS */
2363b1088a0SGustavo A. R. Silva DECLARE_FLEX_ARRAY(u32, sifs_hist_status);
23756292162SKalle Valo };
23856292162SKalle Valo
23956292162SKalle Valo struct htt_tx_pdev_stats_tx_ppdu_stats_tlv_v {
24056292162SKalle Valo u32 num_data_ppdus_legacy_su;
24156292162SKalle Valo u32 num_data_ppdus_ac_su;
24256292162SKalle Valo u32 num_data_ppdus_ax_su;
24356292162SKalle Valo u32 num_data_ppdus_ac_su_txbf;
24456292162SKalle Valo u32 num_data_ppdus_ax_su_txbf;
24556292162SKalle Valo };
24656292162SKalle Valo
24756292162SKalle Valo /* NOTE: Variable length TLV, use length spec to infer array size .
24856292162SKalle Valo *
24956292162SKalle Valo * Tried_mpdu_cnt_hist is the histogram of MPDUs tries per HWQ.
25056292162SKalle Valo * The tries here is the count of the MPDUS within a PPDU that the
25156292162SKalle Valo * HW had attempted to transmit on air, for the HWSCH Schedule
25256292162SKalle Valo * command submitted by FW.It is not the retry attempts.
25356292162SKalle Valo * The histogram bins are 0-29, 30-59, 60-89 and so on. The are
25456292162SKalle Valo * 10 bins in this histogram. They are defined in FW using the
25556292162SKalle Valo * following macros
25656292162SKalle Valo * #define WAL_MAX_TRIED_MPDU_CNT_HISTOGRAM 9
25756292162SKalle Valo * #define WAL_TRIED_MPDU_CNT_HISTOGRAM_INTERVAL 30
25856292162SKalle Valo */
25956292162SKalle Valo struct htt_tx_pdev_stats_tried_mpdu_cnt_hist_tlv_v {
26056292162SKalle Valo u32 hist_bin_size;
26156292162SKalle Valo u32 tried_mpdu_cnt_hist[]; /* HTT_TX_PDEV_TRIED_MPDU_CNT_HIST */
26256292162SKalle Valo };
26356292162SKalle Valo
26456292162SKalle Valo /* == SOC ERROR STATS == */
26556292162SKalle Valo
26656292162SKalle Valo /* =============== PDEV ERROR STATS ============== */
26756292162SKalle Valo #define HTT_STATS_MAX_HW_INTR_NAME_LEN 8
26856292162SKalle Valo struct htt_hw_stats_intr_misc_tlv {
26956292162SKalle Valo /* Stored as little endian */
27056292162SKalle Valo u8 hw_intr_name[HTT_STATS_MAX_HW_INTR_NAME_LEN];
27156292162SKalle Valo u32 mask;
27256292162SKalle Valo u32 count;
27356292162SKalle Valo };
27456292162SKalle Valo
27556292162SKalle Valo #define HTT_STATS_MAX_HW_MODULE_NAME_LEN 8
27656292162SKalle Valo struct htt_hw_stats_wd_timeout_tlv {
27756292162SKalle Valo /* Stored as little endian */
27856292162SKalle Valo u8 hw_module_name[HTT_STATS_MAX_HW_MODULE_NAME_LEN];
27956292162SKalle Valo u32 count;
28056292162SKalle Valo };
28156292162SKalle Valo
28256292162SKalle Valo struct htt_hw_stats_pdev_errs_tlv {
28356292162SKalle Valo u32 mac_id__word; /* BIT [ 7 : 0] : mac_id */
28456292162SKalle Valo u32 tx_abort;
28556292162SKalle Valo u32 tx_abort_fail_count;
28656292162SKalle Valo u32 rx_abort;
28756292162SKalle Valo u32 rx_abort_fail_count;
28856292162SKalle Valo u32 warm_reset;
28956292162SKalle Valo u32 cold_reset;
29056292162SKalle Valo u32 tx_flush;
29156292162SKalle Valo u32 tx_glb_reset;
29256292162SKalle Valo u32 tx_txq_reset;
29356292162SKalle Valo u32 rx_timeout_reset;
29456292162SKalle Valo };
29556292162SKalle Valo
29656292162SKalle Valo struct htt_hw_stats_whal_tx_tlv {
29756292162SKalle Valo u32 mac_id__word;
29856292162SKalle Valo u32 last_unpause_ppdu_id;
29956292162SKalle Valo u32 hwsch_unpause_wait_tqm_write;
30056292162SKalle Valo u32 hwsch_dummy_tlv_skipped;
30156292162SKalle Valo u32 hwsch_misaligned_offset_received;
30256292162SKalle Valo u32 hwsch_reset_count;
30356292162SKalle Valo u32 hwsch_dev_reset_war;
30456292162SKalle Valo u32 hwsch_delayed_pause;
30556292162SKalle Valo u32 hwsch_long_delayed_pause;
30656292162SKalle Valo u32 sch_rx_ppdu_no_response;
30756292162SKalle Valo u32 sch_selfgen_response;
30856292162SKalle Valo u32 sch_rx_sifs_resp_trigger;
30956292162SKalle Valo };
31056292162SKalle Valo
31156292162SKalle Valo /* ============ PEER STATS ============ */
3126ed73182SSeevalamuthu Mariappan #define HTT_MSDU_FLOW_STATS_TX_FLOW_NO GENMASK(15, 0)
3136ed73182SSeevalamuthu Mariappan #define HTT_MSDU_FLOW_STATS_TID_NUM GENMASK(19, 16)
3146ed73182SSeevalamuthu Mariappan #define HTT_MSDU_FLOW_STATS_DROP_RULE BIT(20)
3156ed73182SSeevalamuthu Mariappan
31656292162SKalle Valo struct htt_msdu_flow_stats_tlv {
31756292162SKalle Valo u32 last_update_timestamp;
31856292162SKalle Valo u32 last_add_timestamp;
31956292162SKalle Valo u32 last_remove_timestamp;
32056292162SKalle Valo u32 total_processed_msdu_count;
32156292162SKalle Valo u32 cur_msdu_count_in_flowq;
32256292162SKalle Valo u32 sw_peer_id;
32356292162SKalle Valo u32 tx_flow_no__tid_num__drop_rule;
32456292162SKalle Valo u32 last_cycle_enqueue_count;
32556292162SKalle Valo u32 last_cycle_dequeue_count;
32656292162SKalle Valo u32 last_cycle_drop_count;
32756292162SKalle Valo u32 current_drop_th;
32856292162SKalle Valo };
32956292162SKalle Valo
33056292162SKalle Valo #define MAX_HTT_TID_NAME 8
33156292162SKalle Valo
3326ed73182SSeevalamuthu Mariappan #define HTT_TX_TID_STATS_SW_PEER_ID GENMASK(15, 0)
3336ed73182SSeevalamuthu Mariappan #define HTT_TX_TID_STATS_TID_NUM GENMASK(31, 16)
3346ed73182SSeevalamuthu Mariappan #define HTT_TX_TID_STATS_NUM_SCHED_PENDING GENMASK(7, 0)
3356ed73182SSeevalamuthu Mariappan #define HTT_TX_TID_STATS_NUM_PPDU_IN_HWQ GENMASK(15, 8)
3366ed73182SSeevalamuthu Mariappan
33756292162SKalle Valo /* Tidq stats */
33856292162SKalle Valo struct htt_tx_tid_stats_tlv {
33956292162SKalle Valo /* Stored as little endian */
34056292162SKalle Valo u8 tid_name[MAX_HTT_TID_NAME];
34156292162SKalle Valo u32 sw_peer_id__tid_num;
34256292162SKalle Valo u32 num_sched_pending__num_ppdu_in_hwq;
34356292162SKalle Valo u32 tid_flags;
34456292162SKalle Valo u32 hw_queued;
34556292162SKalle Valo u32 hw_reaped;
34656292162SKalle Valo u32 mpdus_hw_filter;
34756292162SKalle Valo
34856292162SKalle Valo u32 qdepth_bytes;
34956292162SKalle Valo u32 qdepth_num_msdu;
35056292162SKalle Valo u32 qdepth_num_mpdu;
35156292162SKalle Valo u32 last_scheduled_tsmp;
35256292162SKalle Valo u32 pause_module_id;
35356292162SKalle Valo u32 block_module_id;
35456292162SKalle Valo u32 tid_tx_airtime;
35556292162SKalle Valo };
35656292162SKalle Valo
3576ed73182SSeevalamuthu Mariappan #define HTT_TX_TID_STATS_V1_SW_PEER_ID GENMASK(15, 0)
3586ed73182SSeevalamuthu Mariappan #define HTT_TX_TID_STATS_V1_TID_NUM GENMASK(31, 16)
3596ed73182SSeevalamuthu Mariappan #define HTT_TX_TID_STATS_V1_NUM_SCHED_PENDING GENMASK(7, 0)
3606ed73182SSeevalamuthu Mariappan #define HTT_TX_TID_STATS_V1_NUM_PPDU_IN_HWQ GENMASK(15, 8)
3616ed73182SSeevalamuthu Mariappan
36256292162SKalle Valo /* Tidq stats */
36356292162SKalle Valo struct htt_tx_tid_stats_v1_tlv {
36456292162SKalle Valo /* Stored as little endian */
36556292162SKalle Valo u8 tid_name[MAX_HTT_TID_NAME];
36656292162SKalle Valo u32 sw_peer_id__tid_num;
36756292162SKalle Valo u32 num_sched_pending__num_ppdu_in_hwq;
36856292162SKalle Valo u32 tid_flags;
36956292162SKalle Valo u32 max_qdepth_bytes;
37056292162SKalle Valo u32 max_qdepth_n_msdus;
37156292162SKalle Valo u32 rsvd;
37256292162SKalle Valo
37356292162SKalle Valo u32 qdepth_bytes;
37456292162SKalle Valo u32 qdepth_num_msdu;
37556292162SKalle Valo u32 qdepth_num_mpdu;
37656292162SKalle Valo u32 last_scheduled_tsmp;
37756292162SKalle Valo u32 pause_module_id;
37856292162SKalle Valo u32 block_module_id;
37956292162SKalle Valo u32 tid_tx_airtime;
38056292162SKalle Valo u32 allow_n_flags;
38156292162SKalle Valo u32 sendn_frms_allowed;
38256292162SKalle Valo };
38356292162SKalle Valo
3846ed73182SSeevalamuthu Mariappan #define HTT_RX_TID_STATS_SW_PEER_ID GENMASK(15, 0)
3856ed73182SSeevalamuthu Mariappan #define HTT_RX_TID_STATS_TID_NUM GENMASK(31, 16)
3866ed73182SSeevalamuthu Mariappan
38756292162SKalle Valo struct htt_rx_tid_stats_tlv {
38856292162SKalle Valo u32 sw_peer_id__tid_num;
38956292162SKalle Valo u8 tid_name[MAX_HTT_TID_NAME];
39056292162SKalle Valo u32 dup_in_reorder;
39156292162SKalle Valo u32 dup_past_outside_window;
39256292162SKalle Valo u32 dup_past_within_window;
39356292162SKalle Valo u32 rxdesc_err_decrypt;
39456292162SKalle Valo u32 tid_rx_airtime;
39556292162SKalle Valo };
39656292162SKalle Valo
39756292162SKalle Valo #define HTT_MAX_COUNTER_NAME 8
39856292162SKalle Valo struct htt_counter_tlv {
39956292162SKalle Valo u8 counter_name[HTT_MAX_COUNTER_NAME];
40056292162SKalle Valo u32 count;
40156292162SKalle Valo };
40256292162SKalle Valo
40356292162SKalle Valo struct htt_peer_stats_cmn_tlv {
40456292162SKalle Valo u32 ppdu_cnt;
40556292162SKalle Valo u32 mpdu_cnt;
40656292162SKalle Valo u32 msdu_cnt;
40756292162SKalle Valo u32 pause_bitmap;
40856292162SKalle Valo u32 block_bitmap;
40956292162SKalle Valo u32 current_timestamp;
41056292162SKalle Valo u32 peer_tx_airtime;
41156292162SKalle Valo u32 peer_rx_airtime;
41256292162SKalle Valo s32 rssi;
41356292162SKalle Valo u32 peer_enqueued_count_low;
41456292162SKalle Valo u32 peer_enqueued_count_high;
41556292162SKalle Valo u32 peer_dequeued_count_low;
41656292162SKalle Valo u32 peer_dequeued_count_high;
41756292162SKalle Valo u32 peer_dropped_count_low;
41856292162SKalle Valo u32 peer_dropped_count_high;
41956292162SKalle Valo u32 ppdu_transmitted_bytes_low;
42056292162SKalle Valo u32 ppdu_transmitted_bytes_high;
42156292162SKalle Valo u32 peer_ttl_removed_count;
42256292162SKalle Valo u32 inactive_time;
42356292162SKalle Valo };
42456292162SKalle Valo
4256ed73182SSeevalamuthu Mariappan #define HTT_PEER_DETAILS_VDEV_ID GENMASK(7, 0)
4266ed73182SSeevalamuthu Mariappan #define HTT_PEER_DETAILS_PDEV_ID GENMASK(15, 8)
4276ed73182SSeevalamuthu Mariappan #define HTT_PEER_DETAILS_AST_IDX GENMASK(31, 16)
4286ed73182SSeevalamuthu Mariappan
42956292162SKalle Valo struct htt_peer_details_tlv {
43056292162SKalle Valo u32 peer_type;
43156292162SKalle Valo u32 sw_peer_id;
43256292162SKalle Valo u32 vdev_pdev_ast_idx;
43356292162SKalle Valo struct htt_mac_addr mac_addr;
43456292162SKalle Valo u32 peer_flags;
43556292162SKalle Valo u32 qpeer_flags;
43656292162SKalle Valo };
43756292162SKalle Valo
43856292162SKalle Valo enum htt_stats_param_type {
43956292162SKalle Valo HTT_STATS_PREAM_OFDM,
44056292162SKalle Valo HTT_STATS_PREAM_CCK,
44156292162SKalle Valo HTT_STATS_PREAM_HT,
44256292162SKalle Valo HTT_STATS_PREAM_VHT,
44356292162SKalle Valo HTT_STATS_PREAM_HE,
44456292162SKalle Valo HTT_STATS_PREAM_RSVD,
44556292162SKalle Valo HTT_STATS_PREAM_RSVD1,
44656292162SKalle Valo
44756292162SKalle Valo HTT_STATS_PREAM_COUNT,
44856292162SKalle Valo };
44956292162SKalle Valo
45056292162SKalle Valo #define HTT_TX_PEER_STATS_NUM_MCS_COUNTERS 12
45156292162SKalle Valo #define HTT_TX_PEER_STATS_NUM_GI_COUNTERS 4
45256292162SKalle Valo #define HTT_TX_PEER_STATS_NUM_DCM_COUNTERS 5
45356292162SKalle Valo #define HTT_TX_PEER_STATS_NUM_BW_COUNTERS 4
45456292162SKalle Valo #define HTT_TX_PEER_STATS_NUM_SPATIAL_STREAMS 8
45556292162SKalle Valo #define HTT_TX_PEER_STATS_NUM_PREAMBLE_TYPES HTT_STATS_PREAM_COUNT
45656292162SKalle Valo
45756292162SKalle Valo struct htt_tx_peer_rate_stats_tlv {
45856292162SKalle Valo u32 tx_ldpc;
45956292162SKalle Valo u32 rts_cnt;
46056292162SKalle Valo u32 ack_rssi;
46156292162SKalle Valo
46256292162SKalle Valo u32 tx_mcs[HTT_TX_PEER_STATS_NUM_MCS_COUNTERS];
46356292162SKalle Valo u32 tx_su_mcs[HTT_TX_PEER_STATS_NUM_MCS_COUNTERS];
46456292162SKalle Valo u32 tx_mu_mcs[HTT_TX_PEER_STATS_NUM_MCS_COUNTERS];
46556292162SKalle Valo /* element 0,1, ...7 -> NSS 1,2, ...8 */
46656292162SKalle Valo u32 tx_nss[HTT_TX_PEER_STATS_NUM_SPATIAL_STREAMS];
46756292162SKalle Valo /* element 0: 20 MHz, 1: 40 MHz, 2: 80 MHz, 3: 160 and 80+80 MHz */
46856292162SKalle Valo u32 tx_bw[HTT_TX_PEER_STATS_NUM_BW_COUNTERS];
46956292162SKalle Valo u32 tx_stbc[HTT_TX_PEER_STATS_NUM_MCS_COUNTERS];
47056292162SKalle Valo u32 tx_pream[HTT_TX_PEER_STATS_NUM_PREAMBLE_TYPES];
47156292162SKalle Valo
47256292162SKalle Valo /* Counters to track number of tx packets in each GI
47356292162SKalle Valo * (400us, 800us, 1600us & 3200us) in each mcs (0-11)
47456292162SKalle Valo */
47556292162SKalle Valo u32 tx_gi[HTT_TX_PEER_STATS_NUM_GI_COUNTERS][HTT_TX_PEER_STATS_NUM_MCS_COUNTERS];
47656292162SKalle Valo
47756292162SKalle Valo /* Counters to track packets in dcm mcs (MCS 0, 1, 3, 4) */
47856292162SKalle Valo u32 tx_dcm[HTT_TX_PEER_STATS_NUM_DCM_COUNTERS];
47956292162SKalle Valo
48056292162SKalle Valo };
48156292162SKalle Valo
48256292162SKalle Valo #define HTT_RX_PEER_STATS_NUM_MCS_COUNTERS 12
48356292162SKalle Valo #define HTT_RX_PEER_STATS_NUM_GI_COUNTERS 4
48456292162SKalle Valo #define HTT_RX_PEER_STATS_NUM_DCM_COUNTERS 5
48556292162SKalle Valo #define HTT_RX_PEER_STATS_NUM_BW_COUNTERS 4
48656292162SKalle Valo #define HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS 8
48756292162SKalle Valo #define HTT_RX_PEER_STATS_NUM_PREAMBLE_TYPES HTT_STATS_PREAM_COUNT
48856292162SKalle Valo
48956292162SKalle Valo struct htt_rx_peer_rate_stats_tlv {
49056292162SKalle Valo u32 nsts;
49156292162SKalle Valo
49256292162SKalle Valo /* Number of rx ldpc packets */
49356292162SKalle Valo u32 rx_ldpc;
49456292162SKalle Valo /* Number of rx rts packets */
49556292162SKalle Valo u32 rts_cnt;
49656292162SKalle Valo
49756292162SKalle Valo u32 rssi_mgmt; /* units = dB above noise floor */
49856292162SKalle Valo u32 rssi_data; /* units = dB above noise floor */
49956292162SKalle Valo u32 rssi_comb; /* units = dB above noise floor */
50056292162SKalle Valo u32 rx_mcs[HTT_RX_PEER_STATS_NUM_MCS_COUNTERS];
50156292162SKalle Valo /* element 0,1, ...7 -> NSS 1,2, ...8 */
50256292162SKalle Valo u32 rx_nss[HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS];
50356292162SKalle Valo u32 rx_dcm[HTT_RX_PEER_STATS_NUM_DCM_COUNTERS];
50456292162SKalle Valo u32 rx_stbc[HTT_RX_PEER_STATS_NUM_MCS_COUNTERS];
50556292162SKalle Valo /* element 0: 20 MHz, 1: 40 MHz, 2: 80 MHz, 3: 160 and 80+80 MHz */
50656292162SKalle Valo u32 rx_bw[HTT_RX_PEER_STATS_NUM_BW_COUNTERS];
50756292162SKalle Valo u32 rx_pream[HTT_RX_PEER_STATS_NUM_PREAMBLE_TYPES];
50856292162SKalle Valo /* units = dB above noise floor */
50956292162SKalle Valo u8 rssi_chain[HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS]
51056292162SKalle Valo [HTT_RX_PEER_STATS_NUM_BW_COUNTERS];
51156292162SKalle Valo
51256292162SKalle Valo /* Counters to track number of rx packets in each GI in each mcs (0-11) */
51356292162SKalle Valo u32 rx_gi[HTT_RX_PEER_STATS_NUM_GI_COUNTERS]
51456292162SKalle Valo [HTT_RX_PEER_STATS_NUM_MCS_COUNTERS];
51556292162SKalle Valo };
51656292162SKalle Valo
51756292162SKalle Valo enum htt_peer_stats_req_mode {
51856292162SKalle Valo HTT_PEER_STATS_REQ_MODE_NO_QUERY,
51956292162SKalle Valo HTT_PEER_STATS_REQ_MODE_QUERY_TQM,
52056292162SKalle Valo HTT_PEER_STATS_REQ_MODE_FLUSH_TQM,
52156292162SKalle Valo };
52256292162SKalle Valo
52356292162SKalle Valo enum htt_peer_stats_tlv_enum {
52456292162SKalle Valo HTT_PEER_STATS_CMN_TLV = 0,
52556292162SKalle Valo HTT_PEER_DETAILS_TLV = 1,
52656292162SKalle Valo HTT_TX_PEER_RATE_STATS_TLV = 2,
52756292162SKalle Valo HTT_RX_PEER_RATE_STATS_TLV = 3,
52856292162SKalle Valo HTT_TX_TID_STATS_TLV = 4,
52956292162SKalle Valo HTT_RX_TID_STATS_TLV = 5,
53056292162SKalle Valo HTT_MSDU_FLOW_STATS_TLV = 6,
53156292162SKalle Valo
53256292162SKalle Valo HTT_PEER_STATS_MAX_TLV = 31,
53356292162SKalle Valo };
53456292162SKalle Valo
53556292162SKalle Valo /* =========== MUMIMO HWQ stats =========== */
53656292162SKalle Valo /* MU MIMO stats per hwQ */
53756292162SKalle Valo struct htt_tx_hwq_mu_mimo_sch_stats_tlv {
53856292162SKalle Valo u32 mu_mimo_sch_posted;
53956292162SKalle Valo u32 mu_mimo_sch_failed;
54056292162SKalle Valo u32 mu_mimo_ppdu_posted;
54156292162SKalle Valo };
54256292162SKalle Valo
54356292162SKalle Valo struct htt_tx_hwq_mu_mimo_mpdu_stats_tlv {
54456292162SKalle Valo u32 mu_mimo_mpdus_queued_usr;
54556292162SKalle Valo u32 mu_mimo_mpdus_tried_usr;
54656292162SKalle Valo u32 mu_mimo_mpdus_failed_usr;
54756292162SKalle Valo u32 mu_mimo_mpdus_requeued_usr;
54856292162SKalle Valo u32 mu_mimo_err_no_ba_usr;
54956292162SKalle Valo u32 mu_mimo_mpdu_underrun_usr;
55056292162SKalle Valo u32 mu_mimo_ampdu_underrun_usr;
55156292162SKalle Valo };
55256292162SKalle Valo
5536ed73182SSeevalamuthu Mariappan #define HTT_TX_HWQ_STATS_MAC_ID GENMASK(7, 0)
5546ed73182SSeevalamuthu Mariappan #define HTT_TX_HWQ_STATS_HWQ_ID GENMASK(15, 8)
5556ed73182SSeevalamuthu Mariappan
55656292162SKalle Valo struct htt_tx_hwq_mu_mimo_cmn_stats_tlv {
55756292162SKalle Valo u32 mac_id__hwq_id__word;
55856292162SKalle Valo };
55956292162SKalle Valo
56056292162SKalle Valo /* == TX HWQ STATS == */
56156292162SKalle Valo struct htt_tx_hwq_stats_cmn_tlv {
56256292162SKalle Valo u32 mac_id__hwq_id__word;
56356292162SKalle Valo
56456292162SKalle Valo /* PPDU level stats */
56556292162SKalle Valo u32 xretry;
56656292162SKalle Valo u32 underrun_cnt;
56756292162SKalle Valo u32 flush_cnt;
56856292162SKalle Valo u32 filt_cnt;
56956292162SKalle Valo u32 null_mpdu_bmap;
57056292162SKalle Valo u32 user_ack_failure;
57156292162SKalle Valo u32 ack_tlv_proc;
57256292162SKalle Valo u32 sched_id_proc;
57356292162SKalle Valo u32 null_mpdu_tx_count;
57456292162SKalle Valo u32 mpdu_bmap_not_recvd;
57556292162SKalle Valo
57656292162SKalle Valo /* Selfgen stats per hwQ */
57756292162SKalle Valo u32 num_bar;
57856292162SKalle Valo u32 rts;
57956292162SKalle Valo u32 cts2self;
58056292162SKalle Valo u32 qos_null;
58156292162SKalle Valo
58256292162SKalle Valo /* MPDU level stats */
58356292162SKalle Valo u32 mpdu_tried_cnt;
58456292162SKalle Valo u32 mpdu_queued_cnt;
58556292162SKalle Valo u32 mpdu_ack_fail_cnt;
58656292162SKalle Valo u32 mpdu_filt_cnt;
58756292162SKalle Valo u32 false_mpdu_ack_count;
58856292162SKalle Valo
58956292162SKalle Valo u32 txq_timeout;
59056292162SKalle Valo };
59156292162SKalle Valo
59256292162SKalle Valo /* NOTE: Variable length TLV, use length spec to infer array size */
59356292162SKalle Valo struct htt_tx_hwq_difs_latency_stats_tlv_v {
59456292162SKalle Valo u32 hist_intvl;
59556292162SKalle Valo /* histogram of ppdu post to hwsch - > cmd status received */
59656292162SKalle Valo u32 difs_latency_hist[]; /* HTT_TX_HWQ_MAX_DIFS_LATENCY_BINS */
59756292162SKalle Valo };
59856292162SKalle Valo
59956292162SKalle Valo /* NOTE: Variable length TLV, use length spec to infer array size */
60056292162SKalle Valo struct htt_tx_hwq_cmd_result_stats_tlv_v {
6013b1088a0SGustavo A. R. Silva /* Histogram of sched cmd result, HTT_TX_HWQ_MAX_CMD_RESULT_STATS */
6023b1088a0SGustavo A. R. Silva DECLARE_FLEX_ARRAY(u32, cmd_result);
60356292162SKalle Valo };
60456292162SKalle Valo
60556292162SKalle Valo /* NOTE: Variable length TLV, use length spec to infer array size */
60656292162SKalle Valo struct htt_tx_hwq_cmd_stall_stats_tlv_v {
6073b1088a0SGustavo A. R. Silva /* Histogram of various pause conitions, HTT_TX_HWQ_MAX_CMD_STALL_STATS */
6083b1088a0SGustavo A. R. Silva DECLARE_FLEX_ARRAY(u32, cmd_stall_status);
60956292162SKalle Valo };
61056292162SKalle Valo
61156292162SKalle Valo /* NOTE: Variable length TLV, use length spec to infer array size */
61256292162SKalle Valo struct htt_tx_hwq_fes_result_stats_tlv_v {
6133b1088a0SGustavo A. R. Silva /* Histogram of number of user fes result, HTT_TX_HWQ_MAX_FES_RESULT_STATS */
6143b1088a0SGustavo A. R. Silva DECLARE_FLEX_ARRAY(u32, fes_result);
61556292162SKalle Valo };
61656292162SKalle Valo
61756292162SKalle Valo /* NOTE: Variable length TLV, use length spec to infer array size
61856292162SKalle Valo *
61956292162SKalle Valo * The hwq_tried_mpdu_cnt_hist is a histogram of MPDUs tries per HWQ.
62056292162SKalle Valo * The tries here is the count of the MPDUS within a PPDU that the HW
62156292162SKalle Valo * had attempted to transmit on air, for the HWSCH Schedule command
62256292162SKalle Valo * submitted by FW in this HWQ .It is not the retry attempts. The
62356292162SKalle Valo * histogram bins are 0-29, 30-59, 60-89 and so on. The are 10 bins
62456292162SKalle Valo * in this histogram.
62556292162SKalle Valo * they are defined in FW using the following macros
62656292162SKalle Valo * #define WAL_MAX_TRIED_MPDU_CNT_HISTOGRAM 9
62756292162SKalle Valo * #define WAL_TRIED_MPDU_CNT_HISTOGRAM_INTERVAL 30
62856292162SKalle Valo */
62956292162SKalle Valo struct htt_tx_hwq_tried_mpdu_cnt_hist_tlv_v {
63056292162SKalle Valo u32 hist_bin_size;
63156292162SKalle Valo /* Histogram of number of mpdus on tried mpdu */
63256292162SKalle Valo u32 tried_mpdu_cnt_hist[]; /* HTT_TX_HWQ_TRIED_MPDU_CNT_HIST */
63356292162SKalle Valo };
63456292162SKalle Valo
63556292162SKalle Valo /* NOTE: Variable length TLV, use length spec to infer array size
63656292162SKalle Valo *
63756292162SKalle Valo * The txop_used_cnt_hist is the histogram of txop per burst. After
63856292162SKalle Valo * completing the burst, we identify the txop used in the burst and
63956292162SKalle Valo * incr the corresponding bin.
64056292162SKalle Valo * Each bin represents 1ms & we have 10 bins in this histogram.
6413fecca0eSJeff Johnson * they are defined in FW using the following macros
64256292162SKalle Valo * #define WAL_MAX_TXOP_USED_CNT_HISTOGRAM 10
64356292162SKalle Valo * #define WAL_TXOP_USED_HISTOGRAM_INTERVAL 1000 ( 1 ms )
64456292162SKalle Valo */
64556292162SKalle Valo struct htt_tx_hwq_txop_used_cnt_hist_tlv_v {
6463b1088a0SGustavo A. R. Silva /* Histogram of txop used cnt, HTT_TX_HWQ_TXOP_USED_CNT_HIST */
6473b1088a0SGustavo A. R. Silva DECLARE_FLEX_ARRAY(u32, txop_used_cnt_hist);
64856292162SKalle Valo };
64956292162SKalle Valo
65056292162SKalle Valo /* == TX SELFGEN STATS == */
65156292162SKalle Valo struct htt_tx_selfgen_cmn_stats_tlv {
65256292162SKalle Valo u32 mac_id__word;
65356292162SKalle Valo u32 su_bar;
65456292162SKalle Valo u32 rts;
65556292162SKalle Valo u32 cts2self;
65656292162SKalle Valo u32 qos_null;
65756292162SKalle Valo u32 delayed_bar_1; /* MU user 1 */
65856292162SKalle Valo u32 delayed_bar_2; /* MU user 2 */
65956292162SKalle Valo u32 delayed_bar_3; /* MU user 3 */
66056292162SKalle Valo u32 delayed_bar_4; /* MU user 4 */
66156292162SKalle Valo u32 delayed_bar_5; /* MU user 5 */
66256292162SKalle Valo u32 delayed_bar_6; /* MU user 6 */
66356292162SKalle Valo u32 delayed_bar_7; /* MU user 7 */
66456292162SKalle Valo };
66556292162SKalle Valo
66656292162SKalle Valo struct htt_tx_selfgen_ac_stats_tlv {
66756292162SKalle Valo /* 11AC */
66856292162SKalle Valo u32 ac_su_ndpa;
66956292162SKalle Valo u32 ac_su_ndp;
67056292162SKalle Valo u32 ac_mu_mimo_ndpa;
67156292162SKalle Valo u32 ac_mu_mimo_ndp;
67256292162SKalle Valo u32 ac_mu_mimo_brpoll_1; /* MU user 1 */
67356292162SKalle Valo u32 ac_mu_mimo_brpoll_2; /* MU user 2 */
67456292162SKalle Valo u32 ac_mu_mimo_brpoll_3; /* MU user 3 */
67556292162SKalle Valo };
67656292162SKalle Valo
67756292162SKalle Valo struct htt_tx_selfgen_ax_stats_tlv {
67856292162SKalle Valo /* 11AX */
67956292162SKalle Valo u32 ax_su_ndpa;
68056292162SKalle Valo u32 ax_su_ndp;
68156292162SKalle Valo u32 ax_mu_mimo_ndpa;
68256292162SKalle Valo u32 ax_mu_mimo_ndp;
68356292162SKalle Valo u32 ax_mu_mimo_brpoll_1; /* MU user 1 */
68456292162SKalle Valo u32 ax_mu_mimo_brpoll_2; /* MU user 2 */
68556292162SKalle Valo u32 ax_mu_mimo_brpoll_3; /* MU user 3 */
68656292162SKalle Valo u32 ax_mu_mimo_brpoll_4; /* MU user 4 */
68756292162SKalle Valo u32 ax_mu_mimo_brpoll_5; /* MU user 5 */
68856292162SKalle Valo u32 ax_mu_mimo_brpoll_6; /* MU user 6 */
68956292162SKalle Valo u32 ax_mu_mimo_brpoll_7; /* MU user 7 */
69056292162SKalle Valo u32 ax_basic_trigger;
69156292162SKalle Valo u32 ax_bsr_trigger;
69256292162SKalle Valo u32 ax_mu_bar_trigger;
69356292162SKalle Valo u32 ax_mu_rts_trigger;
694fdb8fc34SSriram R u32 ax_ulmumimo_trigger;
69556292162SKalle Valo };
69656292162SKalle Valo
69756292162SKalle Valo struct htt_tx_selfgen_ac_err_stats_tlv {
69856292162SKalle Valo /* 11AC error stats */
69956292162SKalle Valo u32 ac_su_ndp_err;
70056292162SKalle Valo u32 ac_su_ndpa_err;
70156292162SKalle Valo u32 ac_mu_mimo_ndpa_err;
70256292162SKalle Valo u32 ac_mu_mimo_ndp_err;
70356292162SKalle Valo u32 ac_mu_mimo_brp1_err;
70456292162SKalle Valo u32 ac_mu_mimo_brp2_err;
70556292162SKalle Valo u32 ac_mu_mimo_brp3_err;
70656292162SKalle Valo };
70756292162SKalle Valo
70856292162SKalle Valo struct htt_tx_selfgen_ax_err_stats_tlv {
70956292162SKalle Valo /* 11AX error stats */
71056292162SKalle Valo u32 ax_su_ndp_err;
71156292162SKalle Valo u32 ax_su_ndpa_err;
71256292162SKalle Valo u32 ax_mu_mimo_ndpa_err;
71356292162SKalle Valo u32 ax_mu_mimo_ndp_err;
71456292162SKalle Valo u32 ax_mu_mimo_brp1_err;
71556292162SKalle Valo u32 ax_mu_mimo_brp2_err;
71656292162SKalle Valo u32 ax_mu_mimo_brp3_err;
71756292162SKalle Valo u32 ax_mu_mimo_brp4_err;
71856292162SKalle Valo u32 ax_mu_mimo_brp5_err;
71956292162SKalle Valo u32 ax_mu_mimo_brp6_err;
72056292162SKalle Valo u32 ax_mu_mimo_brp7_err;
72156292162SKalle Valo u32 ax_basic_trigger_err;
72256292162SKalle Valo u32 ax_bsr_trigger_err;
72356292162SKalle Valo u32 ax_mu_bar_trigger_err;
72456292162SKalle Valo u32 ax_mu_rts_trigger_err;
725fdb8fc34SSriram R u32 ax_ulmumimo_trigger_err;
72656292162SKalle Valo };
72756292162SKalle Valo
72856292162SKalle Valo /* == TX MU STATS == */
72956292162SKalle Valo #define HTT_TX_PDEV_STATS_NUM_AC_MUMIMO_USER_STATS 4
73056292162SKalle Valo #define HTT_TX_PDEV_STATS_NUM_AX_MUMIMO_USER_STATS 8
73156292162SKalle Valo #define HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS 74
732fdb8fc34SSriram R #define HTT_TX_PDEV_STATS_NUM_UL_MUMIMO_USER_STATS 8
73356292162SKalle Valo
73456292162SKalle Valo struct htt_tx_pdev_mu_mimo_sch_stats_tlv {
73556292162SKalle Valo /* mu-mimo sw sched cmd stats */
73656292162SKalle Valo u32 mu_mimo_sch_posted;
73756292162SKalle Valo u32 mu_mimo_sch_failed;
73856292162SKalle Valo /* MU PPDU stats per hwQ */
73956292162SKalle Valo u32 mu_mimo_ppdu_posted;
74056292162SKalle Valo /*
74156292162SKalle Valo * Counts the number of users in each transmission of
74256292162SKalle Valo * the given TX mode.
74356292162SKalle Valo *
74456292162SKalle Valo * Index is the number of users - 1.
74556292162SKalle Valo */
74656292162SKalle Valo u32 ac_mu_mimo_sch_nusers[HTT_TX_PDEV_STATS_NUM_AC_MUMIMO_USER_STATS];
74756292162SKalle Valo u32 ax_mu_mimo_sch_nusers[HTT_TX_PDEV_STATS_NUM_AX_MUMIMO_USER_STATS];
74856292162SKalle Valo u32 ax_ofdma_sch_nusers[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
749fdb8fc34SSriram R u32 ax_ul_ofdma_basic_sch_nusers[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
750fdb8fc34SSriram R u32 ax_ul_ofdma_bsr_sch_nusers[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
751fdb8fc34SSriram R u32 ax_ul_ofdma_bar_sch_nusers[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
752fdb8fc34SSriram R u32 ax_ul_ofdma_brp_sch_nusers[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
753fdb8fc34SSriram R
754fdb8fc34SSriram R /* UL MU-MIMO */
755fdb8fc34SSriram R /* ax_ul_mumimo_basic_sch_nusers[i] is the number of basic triggers sent
756fdb8fc34SSriram R * for (i+1) users
757fdb8fc34SSriram R */
758fdb8fc34SSriram R u32 ax_ul_mumimo_basic_sch_nusers[HTT_TX_PDEV_STATS_NUM_UL_MUMIMO_USER_STATS];
759fdb8fc34SSriram R
760fdb8fc34SSriram R /* ax_ul_mumimo_brp_sch_nusers[i] is the number of brp triggers sent
761fdb8fc34SSriram R * for (i+1) users
762fdb8fc34SSriram R */
763fdb8fc34SSriram R u32 ax_ul_mumimo_brp_sch_nusers[HTT_TX_PDEV_STATS_NUM_UL_MUMIMO_USER_STATS];
764fdb8fc34SSriram R
765fdb8fc34SSriram R u32 ac_mu_mimo_sch_posted_per_grp_sz[HTT_TX_PDEV_STATS_NUM_AC_MUMIMO_USER_STATS];
766fdb8fc34SSriram R u32 ax_mu_mimo_sch_posted_per_grp_sz[HTT_TX_PDEV_STATS_NUM_AX_MUMIMO_USER_STATS];
76756292162SKalle Valo };
76856292162SKalle Valo
76956292162SKalle Valo struct htt_tx_pdev_mu_mimo_mpdu_stats_tlv {
77056292162SKalle Valo u32 mu_mimo_mpdus_queued_usr;
77156292162SKalle Valo u32 mu_mimo_mpdus_tried_usr;
77256292162SKalle Valo u32 mu_mimo_mpdus_failed_usr;
77356292162SKalle Valo u32 mu_mimo_mpdus_requeued_usr;
77456292162SKalle Valo u32 mu_mimo_err_no_ba_usr;
77556292162SKalle Valo u32 mu_mimo_mpdu_underrun_usr;
77656292162SKalle Valo u32 mu_mimo_ampdu_underrun_usr;
77756292162SKalle Valo
77856292162SKalle Valo u32 ax_mu_mimo_mpdus_queued_usr;
77956292162SKalle Valo u32 ax_mu_mimo_mpdus_tried_usr;
78056292162SKalle Valo u32 ax_mu_mimo_mpdus_failed_usr;
78156292162SKalle Valo u32 ax_mu_mimo_mpdus_requeued_usr;
78256292162SKalle Valo u32 ax_mu_mimo_err_no_ba_usr;
78356292162SKalle Valo u32 ax_mu_mimo_mpdu_underrun_usr;
78456292162SKalle Valo u32 ax_mu_mimo_ampdu_underrun_usr;
78556292162SKalle Valo
78656292162SKalle Valo u32 ax_ofdma_mpdus_queued_usr;
78756292162SKalle Valo u32 ax_ofdma_mpdus_tried_usr;
78856292162SKalle Valo u32 ax_ofdma_mpdus_failed_usr;
78956292162SKalle Valo u32 ax_ofdma_mpdus_requeued_usr;
79056292162SKalle Valo u32 ax_ofdma_err_no_ba_usr;
79156292162SKalle Valo u32 ax_ofdma_mpdu_underrun_usr;
79256292162SKalle Valo u32 ax_ofdma_ampdu_underrun_usr;
79356292162SKalle Valo };
79456292162SKalle Valo
79556292162SKalle Valo #define HTT_STATS_TX_SCHED_MODE_MU_MIMO_AC 1
79656292162SKalle Valo #define HTT_STATS_TX_SCHED_MODE_MU_MIMO_AX 2
79756292162SKalle Valo #define HTT_STATS_TX_SCHED_MODE_MU_OFDMA_AX 3
79856292162SKalle Valo
79956292162SKalle Valo struct htt_tx_pdev_mpdu_stats_tlv {
80056292162SKalle Valo /* mpdu level stats */
80156292162SKalle Valo u32 mpdus_queued_usr;
80256292162SKalle Valo u32 mpdus_tried_usr;
80356292162SKalle Valo u32 mpdus_failed_usr;
80456292162SKalle Valo u32 mpdus_requeued_usr;
80556292162SKalle Valo u32 err_no_ba_usr;
80656292162SKalle Valo u32 mpdu_underrun_usr;
80756292162SKalle Valo u32 ampdu_underrun_usr;
80856292162SKalle Valo u32 user_index;
80956292162SKalle Valo u32 tx_sched_mode; /* HTT_STATS_TX_SCHED_MODE_xxx */
81056292162SKalle Valo };
81156292162SKalle Valo
81256292162SKalle Valo /* == TX SCHED STATS == */
81356292162SKalle Valo /* NOTE: Variable length TLV, use length spec to infer array size */
81456292162SKalle Valo struct htt_sched_txq_cmd_posted_tlv_v {
8153b1088a0SGustavo A. R. Silva /* HTT_TX_PDEV_SCHED_TX_MODE_MAX */
8163b1088a0SGustavo A. R. Silva DECLARE_FLEX_ARRAY(u32, sched_cmd_posted);
81756292162SKalle Valo };
81856292162SKalle Valo
81956292162SKalle Valo /* NOTE: Variable length TLV, use length spec to infer array size */
82056292162SKalle Valo struct htt_sched_txq_cmd_reaped_tlv_v {
8213b1088a0SGustavo A. R. Silva /* HTT_TX_PDEV_SCHED_TX_MODE_MAX */
8223b1088a0SGustavo A. R. Silva DECLARE_FLEX_ARRAY(u32, sched_cmd_reaped);
82356292162SKalle Valo };
82456292162SKalle Valo
82556292162SKalle Valo /* NOTE: Variable length TLV, use length spec to infer array size */
82656292162SKalle Valo struct htt_sched_txq_sched_order_su_tlv_v {
8273b1088a0SGustavo A. R. Silva /* HTT_TX_PDEV_NUM_SCHED_ORDER_LOG */
8283b1088a0SGustavo A. R. Silva DECLARE_FLEX_ARRAY(u32, sched_order_su);
82956292162SKalle Valo };
83056292162SKalle Valo
83156292162SKalle Valo enum htt_sched_txq_sched_ineligibility_tlv_enum {
83256292162SKalle Valo HTT_SCHED_TID_SKIP_SCHED_MASK_DISABLED = 0,
83356292162SKalle Valo HTT_SCHED_TID_SKIP_NOTIFY_MPDU,
83456292162SKalle Valo HTT_SCHED_TID_SKIP_MPDU_STATE_INVALID,
83556292162SKalle Valo HTT_SCHED_TID_SKIP_SCHED_DISABLED,
83656292162SKalle Valo HTT_SCHED_TID_SKIP_TQM_BYPASS_CMD_PENDING,
83756292162SKalle Valo HTT_SCHED_TID_SKIP_SECOND_SU_SCHEDULE,
83856292162SKalle Valo
83956292162SKalle Valo HTT_SCHED_TID_SKIP_CMD_SLOT_NOT_AVAIL,
84056292162SKalle Valo HTT_SCHED_TID_SKIP_NO_ENQ,
84156292162SKalle Valo HTT_SCHED_TID_SKIP_LOW_ENQ,
84256292162SKalle Valo HTT_SCHED_TID_SKIP_PAUSED,
84356292162SKalle Valo HTT_SCHED_TID_SKIP_UL,
84456292162SKalle Valo HTT_SCHED_TID_REMOVE_PAUSED,
84556292162SKalle Valo HTT_SCHED_TID_REMOVE_NO_ENQ,
84656292162SKalle Valo HTT_SCHED_TID_REMOVE_UL,
84756292162SKalle Valo HTT_SCHED_TID_QUERY,
84856292162SKalle Valo HTT_SCHED_TID_SU_ONLY,
84956292162SKalle Valo HTT_SCHED_TID_ELIGIBLE,
85056292162SKalle Valo HTT_SCHED_INELIGIBILITY_MAX,
85156292162SKalle Valo };
85256292162SKalle Valo
85356292162SKalle Valo /* NOTE: Variable length TLV, use length spec to infer array size */
85456292162SKalle Valo struct htt_sched_txq_sched_ineligibility_tlv_v {
85556292162SKalle Valo /* indexed by htt_sched_txq_sched_ineligibility_tlv_enum */
8563b1088a0SGustavo A. R. Silva DECLARE_FLEX_ARRAY(u32, sched_ineligibility);
85756292162SKalle Valo };
85856292162SKalle Valo
8596ed73182SSeevalamuthu Mariappan #define HTT_TX_PDEV_STATS_SCHED_PER_TXQ_MAC_ID GENMASK(7, 0)
8606ed73182SSeevalamuthu Mariappan #define HTT_TX_PDEV_STATS_SCHED_PER_TXQ_ID GENMASK(15, 8)
8616ed73182SSeevalamuthu Mariappan
86256292162SKalle Valo struct htt_tx_pdev_stats_sched_per_txq_tlv {
86356292162SKalle Valo u32 mac_id__txq_id__word;
86456292162SKalle Valo u32 sched_policy;
86556292162SKalle Valo u32 last_sched_cmd_posted_timestamp;
86656292162SKalle Valo u32 last_sched_cmd_compl_timestamp;
86756292162SKalle Valo u32 sched_2_tac_lwm_count;
86856292162SKalle Valo u32 sched_2_tac_ring_full;
86956292162SKalle Valo u32 sched_cmd_post_failure;
87056292162SKalle Valo u32 num_active_tids;
87156292162SKalle Valo u32 num_ps_schedules;
87256292162SKalle Valo u32 sched_cmds_pending;
87356292162SKalle Valo u32 num_tid_register;
87456292162SKalle Valo u32 num_tid_unregister;
87556292162SKalle Valo u32 num_qstats_queried;
87656292162SKalle Valo u32 qstats_update_pending;
87756292162SKalle Valo u32 last_qstats_query_timestamp;
87856292162SKalle Valo u32 num_tqm_cmdq_full;
87956292162SKalle Valo u32 num_de_sched_algo_trigger;
88056292162SKalle Valo u32 num_rt_sched_algo_trigger;
88156292162SKalle Valo u32 num_tqm_sched_algo_trigger;
88256292162SKalle Valo u32 notify_sched;
88356292162SKalle Valo u32 dur_based_sendn_term;
88456292162SKalle Valo };
88556292162SKalle Valo
88656292162SKalle Valo struct htt_stats_tx_sched_cmn_tlv {
88756292162SKalle Valo /* BIT [ 7 : 0] :- mac_id
88856292162SKalle Valo * BIT [31 : 8] :- reserved
88956292162SKalle Valo */
89056292162SKalle Valo u32 mac_id__word;
89156292162SKalle Valo /* Current timestamp */
89256292162SKalle Valo u32 current_timestamp;
89356292162SKalle Valo };
89456292162SKalle Valo
89556292162SKalle Valo /* == TQM STATS == */
89656292162SKalle Valo #define HTT_TX_TQM_MAX_GEN_MPDU_END_REASON 16
89756292162SKalle Valo #define HTT_TX_TQM_MAX_LIST_MPDU_END_REASON 16
89856292162SKalle Valo #define HTT_TX_TQM_MAX_LIST_MPDU_CNT_HISTOGRAM_BINS 16
89956292162SKalle Valo
90056292162SKalle Valo /* NOTE: Variable length TLV, use length spec to infer array size */
90156292162SKalle Valo struct htt_tx_tqm_gen_mpdu_stats_tlv_v {
9023b1088a0SGustavo A. R. Silva /* HTT_TX_TQM_MAX_GEN_MPDU_END_REASON */
9033b1088a0SGustavo A. R. Silva DECLARE_FLEX_ARRAY(u32, gen_mpdu_end_reason);
90456292162SKalle Valo };
90556292162SKalle Valo
90656292162SKalle Valo /* NOTE: Variable length TLV, use length spec to infer array size */
90756292162SKalle Valo struct htt_tx_tqm_list_mpdu_stats_tlv_v {
9083b1088a0SGustavo A. R. Silva /* HTT_TX_TQM_MAX_LIST_MPDU_END_REASON */
9093b1088a0SGustavo A. R. Silva DECLARE_FLEX_ARRAY(u32, list_mpdu_end_reason);
91056292162SKalle Valo };
91156292162SKalle Valo
91256292162SKalle Valo /* NOTE: Variable length TLV, use length spec to infer array size */
91356292162SKalle Valo struct htt_tx_tqm_list_mpdu_cnt_tlv_v {
91456292162SKalle Valo /* HTT_TX_TQM_MAX_LIST_MPDU_CNT_HISTOGRAM_BINS */
9153b1088a0SGustavo A. R. Silva DECLARE_FLEX_ARRAY(u32, list_mpdu_cnt_hist);
91656292162SKalle Valo };
91756292162SKalle Valo
91856292162SKalle Valo struct htt_tx_tqm_pdev_stats_tlv_v {
91956292162SKalle Valo u32 msdu_count;
92056292162SKalle Valo u32 mpdu_count;
92156292162SKalle Valo u32 remove_msdu;
92256292162SKalle Valo u32 remove_mpdu;
92356292162SKalle Valo u32 remove_msdu_ttl;
92456292162SKalle Valo u32 send_bar;
92556292162SKalle Valo u32 bar_sync;
92656292162SKalle Valo u32 notify_mpdu;
92756292162SKalle Valo u32 sync_cmd;
92856292162SKalle Valo u32 write_cmd;
92956292162SKalle Valo u32 hwsch_trigger;
93056292162SKalle Valo u32 ack_tlv_proc;
93156292162SKalle Valo u32 gen_mpdu_cmd;
93256292162SKalle Valo u32 gen_list_cmd;
93356292162SKalle Valo u32 remove_mpdu_cmd;
93456292162SKalle Valo u32 remove_mpdu_tried_cmd;
93556292162SKalle Valo u32 mpdu_queue_stats_cmd;
93656292162SKalle Valo u32 mpdu_head_info_cmd;
93756292162SKalle Valo u32 msdu_flow_stats_cmd;
93856292162SKalle Valo u32 remove_msdu_cmd;
93956292162SKalle Valo u32 remove_msdu_ttl_cmd;
94056292162SKalle Valo u32 flush_cache_cmd;
94156292162SKalle Valo u32 update_mpduq_cmd;
94256292162SKalle Valo u32 enqueue;
94356292162SKalle Valo u32 enqueue_notify;
94456292162SKalle Valo u32 notify_mpdu_at_head;
94556292162SKalle Valo u32 notify_mpdu_state_valid;
94656292162SKalle Valo /*
94756292162SKalle Valo * On receiving TQM_FLOW_NOT_EMPTY_STATUS from TQM, (on MSDUs being enqueued
94856292162SKalle Valo * the flow is non empty), if the number of MSDUs is greater than the threshold,
94956292162SKalle Valo * notify is incremented. UDP_THRESH counters are for UDP MSDUs, and NONUDP are
95056292162SKalle Valo * for non-UDP MSDUs.
95156292162SKalle Valo * MSDUQ_SWNOTIFY_UDP_THRESH1 threshold - sched_udp_notify1 is incremented
95256292162SKalle Valo * MSDUQ_SWNOTIFY_UDP_THRESH2 threshold - sched_udp_notify2 is incremented
95356292162SKalle Valo * MSDUQ_SWNOTIFY_NONUDP_THRESH1 threshold - sched_nonudp_notify1 is incremented
95456292162SKalle Valo * MSDUQ_SWNOTIFY_NONUDP_THRESH2 threshold - sched_nonudp_notify2 is incremented
95556292162SKalle Valo *
95656292162SKalle Valo * Notify signifies that we trigger the scheduler.
95756292162SKalle Valo */
95856292162SKalle Valo u32 sched_udp_notify1;
95956292162SKalle Valo u32 sched_udp_notify2;
96056292162SKalle Valo u32 sched_nonudp_notify1;
96156292162SKalle Valo u32 sched_nonudp_notify2;
96256292162SKalle Valo };
96356292162SKalle Valo
96456292162SKalle Valo struct htt_tx_tqm_cmn_stats_tlv {
96556292162SKalle Valo u32 mac_id__word;
96656292162SKalle Valo u32 max_cmdq_id;
96756292162SKalle Valo u32 list_mpdu_cnt_hist_intvl;
96856292162SKalle Valo
96956292162SKalle Valo /* Global stats */
97056292162SKalle Valo u32 add_msdu;
97156292162SKalle Valo u32 q_empty;
97256292162SKalle Valo u32 q_not_empty;
97356292162SKalle Valo u32 drop_notification;
97456292162SKalle Valo u32 desc_threshold;
97556292162SKalle Valo };
97656292162SKalle Valo
97756292162SKalle Valo struct htt_tx_tqm_error_stats_tlv {
97856292162SKalle Valo /* Error stats */
97956292162SKalle Valo u32 q_empty_failure;
98056292162SKalle Valo u32 q_not_empty_failure;
98156292162SKalle Valo u32 add_msdu_failure;
98256292162SKalle Valo };
98356292162SKalle Valo
98456292162SKalle Valo /* == TQM CMDQ stats == */
9856ed73182SSeevalamuthu Mariappan #define HTT_TX_TQM_CMDQ_STATUS_MAC_ID GENMASK(7, 0)
9866ed73182SSeevalamuthu Mariappan #define HTT_TX_TQM_CMDQ_STATUS_CMDQ_ID GENMASK(15, 8)
9876ed73182SSeevalamuthu Mariappan
98856292162SKalle Valo struct htt_tx_tqm_cmdq_status_tlv {
98956292162SKalle Valo u32 mac_id__cmdq_id__word;
99056292162SKalle Valo u32 sync_cmd;
99156292162SKalle Valo u32 write_cmd;
99256292162SKalle Valo u32 gen_mpdu_cmd;
99356292162SKalle Valo u32 mpdu_queue_stats_cmd;
99456292162SKalle Valo u32 mpdu_head_info_cmd;
99556292162SKalle Valo u32 msdu_flow_stats_cmd;
99656292162SKalle Valo u32 remove_mpdu_cmd;
99756292162SKalle Valo u32 remove_msdu_cmd;
99856292162SKalle Valo u32 flush_cache_cmd;
99956292162SKalle Valo u32 update_mpduq_cmd;
100056292162SKalle Valo u32 update_msduq_cmd;
100156292162SKalle Valo };
100256292162SKalle Valo
100356292162SKalle Valo /* == TX-DE STATS == */
100456292162SKalle Valo /* Structures for tx de stats */
100556292162SKalle Valo struct htt_tx_de_eapol_packets_stats_tlv {
100656292162SKalle Valo u32 m1_packets;
100756292162SKalle Valo u32 m2_packets;
100856292162SKalle Valo u32 m3_packets;
100956292162SKalle Valo u32 m4_packets;
101056292162SKalle Valo u32 g1_packets;
101156292162SKalle Valo u32 g2_packets;
101256292162SKalle Valo };
101356292162SKalle Valo
101456292162SKalle Valo struct htt_tx_de_classify_failed_stats_tlv {
101556292162SKalle Valo u32 ap_bss_peer_not_found;
101656292162SKalle Valo u32 ap_bcast_mcast_no_peer;
101756292162SKalle Valo u32 sta_delete_in_progress;
101856292162SKalle Valo u32 ibss_no_bss_peer;
101956292162SKalle Valo u32 invalid_vdev_type;
102056292162SKalle Valo u32 invalid_ast_peer_entry;
102156292162SKalle Valo u32 peer_entry_invalid;
102256292162SKalle Valo u32 ethertype_not_ip;
102356292162SKalle Valo u32 eapol_lookup_failed;
102456292162SKalle Valo u32 qpeer_not_allow_data;
102556292162SKalle Valo u32 fse_tid_override;
102656292162SKalle Valo u32 ipv6_jumbogram_zero_length;
102756292162SKalle Valo u32 qos_to_non_qos_in_prog;
102856292162SKalle Valo };
102956292162SKalle Valo
103056292162SKalle Valo struct htt_tx_de_classify_stats_tlv {
103156292162SKalle Valo u32 arp_packets;
103256292162SKalle Valo u32 igmp_packets;
103356292162SKalle Valo u32 dhcp_packets;
103456292162SKalle Valo u32 host_inspected;
103556292162SKalle Valo u32 htt_included;
103656292162SKalle Valo u32 htt_valid_mcs;
103756292162SKalle Valo u32 htt_valid_nss;
103856292162SKalle Valo u32 htt_valid_preamble_type;
103956292162SKalle Valo u32 htt_valid_chainmask;
104056292162SKalle Valo u32 htt_valid_guard_interval;
104156292162SKalle Valo u32 htt_valid_retries;
104256292162SKalle Valo u32 htt_valid_bw_info;
104356292162SKalle Valo u32 htt_valid_power;
104456292162SKalle Valo u32 htt_valid_key_flags;
104556292162SKalle Valo u32 htt_valid_no_encryption;
104656292162SKalle Valo u32 fse_entry_count;
104756292162SKalle Valo u32 fse_priority_be;
104856292162SKalle Valo u32 fse_priority_high;
104956292162SKalle Valo u32 fse_priority_low;
105056292162SKalle Valo u32 fse_traffic_ptrn_be;
105156292162SKalle Valo u32 fse_traffic_ptrn_over_sub;
105256292162SKalle Valo u32 fse_traffic_ptrn_bursty;
105356292162SKalle Valo u32 fse_traffic_ptrn_interactive;
105456292162SKalle Valo u32 fse_traffic_ptrn_periodic;
105556292162SKalle Valo u32 fse_hwqueue_alloc;
105656292162SKalle Valo u32 fse_hwqueue_created;
105756292162SKalle Valo u32 fse_hwqueue_send_to_host;
105856292162SKalle Valo u32 mcast_entry;
105956292162SKalle Valo u32 bcast_entry;
106056292162SKalle Valo u32 htt_update_peer_cache;
106156292162SKalle Valo u32 htt_learning_frame;
106256292162SKalle Valo u32 fse_invalid_peer;
106356292162SKalle Valo /*
106456292162SKalle Valo * mec_notify is HTT TX WBM multicast echo check notification
106556292162SKalle Valo * from firmware to host. FW sends SA addresses to host for all
106656292162SKalle Valo * multicast/broadcast packets received on STA side.
106756292162SKalle Valo */
106856292162SKalle Valo u32 mec_notify;
106956292162SKalle Valo };
107056292162SKalle Valo
107156292162SKalle Valo struct htt_tx_de_classify_status_stats_tlv {
107256292162SKalle Valo u32 eok;
107356292162SKalle Valo u32 classify_done;
107456292162SKalle Valo u32 lookup_failed;
107556292162SKalle Valo u32 send_host_dhcp;
107656292162SKalle Valo u32 send_host_mcast;
107756292162SKalle Valo u32 send_host_unknown_dest;
107856292162SKalle Valo u32 send_host;
107956292162SKalle Valo u32 status_invalid;
108056292162SKalle Valo };
108156292162SKalle Valo
108256292162SKalle Valo struct htt_tx_de_enqueue_packets_stats_tlv {
108356292162SKalle Valo u32 enqueued_pkts;
108456292162SKalle Valo u32 to_tqm;
108556292162SKalle Valo u32 to_tqm_bypass;
108656292162SKalle Valo };
108756292162SKalle Valo
108856292162SKalle Valo struct htt_tx_de_enqueue_discard_stats_tlv {
108956292162SKalle Valo u32 discarded_pkts;
109056292162SKalle Valo u32 local_frames;
109156292162SKalle Valo u32 is_ext_msdu;
109256292162SKalle Valo };
109356292162SKalle Valo
109456292162SKalle Valo struct htt_tx_de_compl_stats_tlv {
109556292162SKalle Valo u32 tcl_dummy_frame;
109656292162SKalle Valo u32 tqm_dummy_frame;
109756292162SKalle Valo u32 tqm_notify_frame;
109856292162SKalle Valo u32 fw2wbm_enq;
109956292162SKalle Valo u32 tqm_bypass_frame;
110056292162SKalle Valo };
110156292162SKalle Valo
110256292162SKalle Valo /*
110356292162SKalle Valo * The htt_tx_de_fw2wbm_ring_full_hist_tlv is a histogram of time we waited
110456292162SKalle Valo * for the fw2wbm ring buffer. we are requesting a buffer in FW2WBM release
110556292162SKalle Valo * ring,which may fail, due to non availability of buffer. Hence we sleep for
110656292162SKalle Valo * 200us & again request for it. This is a histogram of time we wait, with
110756292162SKalle Valo * bin of 200ms & there are 10 bin (2 seconds max)
110856292162SKalle Valo * They are defined by the following macros in FW
110956292162SKalle Valo * #define ENTRIES_PER_BIN_COUNT 1000 // per bin 1000 * 200us = 200ms
111056292162SKalle Valo * #define RING_FULL_BIN_ENTRIES (WAL_TX_DE_FW2WBM_ALLOC_TIMEOUT_COUNT /
111156292162SKalle Valo * ENTRIES_PER_BIN_COUNT)
111256292162SKalle Valo */
111356292162SKalle Valo struct htt_tx_de_fw2wbm_ring_full_hist_tlv {
11143b1088a0SGustavo A. R. Silva DECLARE_FLEX_ARRAY(u32, fw2wbm_ring_full_hist);
111556292162SKalle Valo };
111656292162SKalle Valo
111756292162SKalle Valo struct htt_tx_de_cmn_stats_tlv {
111856292162SKalle Valo u32 mac_id__word;
111956292162SKalle Valo
112056292162SKalle Valo /* Global Stats */
112156292162SKalle Valo u32 tcl2fw_entry_count;
112256292162SKalle Valo u32 not_to_fw;
112356292162SKalle Valo u32 invalid_pdev_vdev_peer;
112456292162SKalle Valo u32 tcl_res_invalid_addrx;
112556292162SKalle Valo u32 wbm2fw_entry_count;
112656292162SKalle Valo u32 invalid_pdev;
112756292162SKalle Valo };
112856292162SKalle Valo
112956292162SKalle Valo /* == RING-IF STATS == */
113056292162SKalle Valo #define HTT_STATS_LOW_WM_BINS 5
113156292162SKalle Valo #define HTT_STATS_HIGH_WM_BINS 5
113256292162SKalle Valo
11336ed73182SSeevalamuthu Mariappan #define HTT_RING_IF_STATS_NUM_ELEMS GENMASK(15, 0)
11346ed73182SSeevalamuthu Mariappan #define HTT_RING_IF_STATS_PREFETCH_TAIL_INDEX GENMASK(31, 16)
11356ed73182SSeevalamuthu Mariappan #define HTT_RING_IF_STATS_HEAD_IDX GENMASK(15, 0)
11366ed73182SSeevalamuthu Mariappan #define HTT_RING_IF_STATS_TAIL_IDX GENMASK(31, 16)
11376ed73182SSeevalamuthu Mariappan #define HTT_RING_IF_STATS_SHADOW_HEAD_IDX GENMASK(15, 0)
11386ed73182SSeevalamuthu Mariappan #define HTT_RING_IF_STATS_SHADOW_TAIL_IDX GENMASK(31, 16)
11396ed73182SSeevalamuthu Mariappan #define HTT_RING_IF_STATS_LWM_THRESH GENMASK(15, 0)
11406ed73182SSeevalamuthu Mariappan #define HTT_RING_IF_STATS_HWM_THRESH GENMASK(31, 16)
11416ed73182SSeevalamuthu Mariappan
114256292162SKalle Valo struct htt_ring_if_stats_tlv {
114356292162SKalle Valo u32 base_addr; /* DWORD aligned base memory address of the ring */
114456292162SKalle Valo u32 elem_size;
114556292162SKalle Valo u32 num_elems__prefetch_tail_idx;
114656292162SKalle Valo u32 head_idx__tail_idx;
114756292162SKalle Valo u32 shadow_head_idx__shadow_tail_idx;
114856292162SKalle Valo u32 num_tail_incr;
114956292162SKalle Valo u32 lwm_thresh__hwm_thresh;
115056292162SKalle Valo u32 overrun_hit_count;
115156292162SKalle Valo u32 underrun_hit_count;
115256292162SKalle Valo u32 prod_blockwait_count;
115356292162SKalle Valo u32 cons_blockwait_count;
115456292162SKalle Valo u32 low_wm_hit_count[HTT_STATS_LOW_WM_BINS];
115556292162SKalle Valo u32 high_wm_hit_count[HTT_STATS_HIGH_WM_BINS];
115656292162SKalle Valo };
115756292162SKalle Valo
115856292162SKalle Valo struct htt_ring_if_cmn_tlv {
115956292162SKalle Valo u32 mac_id__word;
116056292162SKalle Valo u32 num_records;
116156292162SKalle Valo };
116256292162SKalle Valo
116356292162SKalle Valo /* == SFM STATS == */
116456292162SKalle Valo /* NOTE: Variable length TLV, use length spec to infer array size */
116556292162SKalle Valo struct htt_sfm_client_user_tlv_v {
116656292162SKalle Valo /* Number of DWORDS used per user and per client */
11673b1088a0SGustavo A. R. Silva DECLARE_FLEX_ARRAY(u32, dwords_used_by_user_n);
116856292162SKalle Valo };
116956292162SKalle Valo
117056292162SKalle Valo struct htt_sfm_client_tlv {
117156292162SKalle Valo /* Client ID */
117256292162SKalle Valo u32 client_id;
117356292162SKalle Valo /* Minimum number of buffers */
117456292162SKalle Valo u32 buf_min;
117556292162SKalle Valo /* Maximum number of buffers */
117656292162SKalle Valo u32 buf_max;
117756292162SKalle Valo /* Number of Busy buffers */
117856292162SKalle Valo u32 buf_busy;
117956292162SKalle Valo /* Number of Allocated buffers */
118056292162SKalle Valo u32 buf_alloc;
118156292162SKalle Valo /* Number of Available/Usable buffers */
118256292162SKalle Valo u32 buf_avail;
118356292162SKalle Valo /* Number of users */
118456292162SKalle Valo u32 num_users;
118556292162SKalle Valo };
118656292162SKalle Valo
118756292162SKalle Valo struct htt_sfm_cmn_tlv {
118856292162SKalle Valo u32 mac_id__word;
118956292162SKalle Valo /* Indicates the total number of 128 byte buffers
119056292162SKalle Valo * in the CMEM that are available for buffer sharing
119156292162SKalle Valo */
119256292162SKalle Valo u32 buf_total;
119356292162SKalle Valo /* Indicates for certain client or all the clients
119456292162SKalle Valo * there is no dowrd saved in SFM, refer to SFM_R1_MEM_EMPTY
119556292162SKalle Valo */
119656292162SKalle Valo u32 mem_empty;
119756292162SKalle Valo /* DEALLOCATE_BUFFERS, refer to register SFM_R0_DEALLOCATE_BUFFERS */
119856292162SKalle Valo u32 deallocate_bufs;
119956292162SKalle Valo /* Number of Records */
120056292162SKalle Valo u32 num_records;
120156292162SKalle Valo };
120256292162SKalle Valo
120356292162SKalle Valo /* == SRNG STATS == */
12046ed73182SSeevalamuthu Mariappan #define HTT_SRING_STATS_MAC_ID GENMASK(7, 0)
12056ed73182SSeevalamuthu Mariappan #define HTT_SRING_STATS_RING_ID GENMASK(15, 8)
12066ed73182SSeevalamuthu Mariappan #define HTT_SRING_STATS_ARENA GENMASK(23, 16)
12076ed73182SSeevalamuthu Mariappan #define HTT_SRING_STATS_EP BIT(24)
12086ed73182SSeevalamuthu Mariappan #define HTT_SRING_STATS_NUM_AVAIL_WORDS GENMASK(15, 0)
12096ed73182SSeevalamuthu Mariappan #define HTT_SRING_STATS_NUM_VALID_WORDS GENMASK(31, 16)
12106ed73182SSeevalamuthu Mariappan #define HTT_SRING_STATS_HEAD_PTR GENMASK(15, 0)
12116ed73182SSeevalamuthu Mariappan #define HTT_SRING_STATS_TAIL_PTR GENMASK(31, 16)
12126ed73182SSeevalamuthu Mariappan #define HTT_SRING_STATS_CONSUMER_EMPTY GENMASK(15, 0)
12136ed73182SSeevalamuthu Mariappan #define HTT_SRING_STATS_PRODUCER_FULL GENMASK(31, 16)
12146ed73182SSeevalamuthu Mariappan #define HTT_SRING_STATS_PREFETCH_COUNT GENMASK(15, 0)
12156ed73182SSeevalamuthu Mariappan #define HTT_SRING_STATS_INTERNAL_TAIL_PTR GENMASK(31, 16)
12166ed73182SSeevalamuthu Mariappan
121756292162SKalle Valo struct htt_sring_stats_tlv {
121856292162SKalle Valo u32 mac_id__ring_id__arena__ep;
121956292162SKalle Valo u32 base_addr_lsb; /* DWORD aligned base memory address of the ring */
122056292162SKalle Valo u32 base_addr_msb;
122156292162SKalle Valo u32 ring_size;
122256292162SKalle Valo u32 elem_size;
122356292162SKalle Valo
122456292162SKalle Valo u32 num_avail_words__num_valid_words;
122556292162SKalle Valo u32 head_ptr__tail_ptr;
122656292162SKalle Valo u32 consumer_empty__producer_full;
122756292162SKalle Valo u32 prefetch_count__internal_tail_ptr;
122856292162SKalle Valo };
122956292162SKalle Valo
123056292162SKalle Valo struct htt_sring_cmn_tlv {
123156292162SKalle Valo u32 num_records;
123256292162SKalle Valo };
123356292162SKalle Valo
123456292162SKalle Valo /* == PDEV TX RATE CTRL STATS == */
123556292162SKalle Valo #define HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS 12
123656292162SKalle Valo #define HTT_TX_PDEV_STATS_NUM_GI_COUNTERS 4
123756292162SKalle Valo #define HTT_TX_PDEV_STATS_NUM_DCM_COUNTERS 5
123856292162SKalle Valo #define HTT_TX_PDEV_STATS_NUM_BW_COUNTERS 4
123956292162SKalle Valo #define HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS 8
124056292162SKalle Valo #define HTT_TX_PDEV_STATS_NUM_PREAMBLE_TYPES HTT_STATS_PREAM_COUNT
124156292162SKalle Valo #define HTT_TX_PDEV_STATS_NUM_LEGACY_CCK_STATS 4
124256292162SKalle Valo #define HTT_TX_PDEV_STATS_NUM_LEGACY_OFDM_STATS 8
124356292162SKalle Valo #define HTT_TX_PDEV_STATS_NUM_LTF 4
124456292162SKalle Valo
124556292162SKalle Valo #define HTT_TX_NUM_OF_SOUNDING_STATS_WORDS \
124656292162SKalle Valo (HTT_TX_PDEV_STATS_NUM_BW_COUNTERS * \
124756292162SKalle Valo HTT_TX_PDEV_STATS_NUM_AX_MUMIMO_USER_STATS)
124856292162SKalle Valo
124956292162SKalle Valo struct htt_tx_pdev_rate_stats_tlv {
125056292162SKalle Valo u32 mac_id__word;
125156292162SKalle Valo u32 tx_ldpc;
125256292162SKalle Valo u32 rts_cnt;
125356292162SKalle Valo /* RSSI value of last ack packet (units = dB above noise floor) */
125456292162SKalle Valo u32 ack_rssi;
125556292162SKalle Valo
125656292162SKalle Valo u32 tx_mcs[HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
125756292162SKalle Valo
125856292162SKalle Valo u32 tx_su_mcs[HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
125956292162SKalle Valo u32 tx_mu_mcs[HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
126056292162SKalle Valo
126156292162SKalle Valo /* element 0,1, ...7 -> NSS 1,2, ...8 */
126256292162SKalle Valo u32 tx_nss[HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS];
126356292162SKalle Valo /* element 0: 20 MHz, 1: 40 MHz, 2: 80 MHz, 3: 160 and 80+80 MHz */
126456292162SKalle Valo u32 tx_bw[HTT_TX_PDEV_STATS_NUM_BW_COUNTERS];
126556292162SKalle Valo u32 tx_stbc[HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
126656292162SKalle Valo u32 tx_pream[HTT_TX_PDEV_STATS_NUM_PREAMBLE_TYPES];
126756292162SKalle Valo
126856292162SKalle Valo /* Counters to track number of tx packets
126956292162SKalle Valo * in each GI (400us, 800us, 1600us & 3200us) in each mcs (0-11)
127056292162SKalle Valo */
127156292162SKalle Valo u32 tx_gi[HTT_TX_PDEV_STATS_NUM_GI_COUNTERS][HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
127256292162SKalle Valo
127356292162SKalle Valo /* Counters to track packets in dcm mcs (MCS 0, 1, 3, 4) */
127456292162SKalle Valo u32 tx_dcm[HTT_TX_PDEV_STATS_NUM_DCM_COUNTERS];
127556292162SKalle Valo /* Number of CTS-acknowledged RTS packets */
127656292162SKalle Valo u32 rts_success;
127756292162SKalle Valo
127856292162SKalle Valo /*
127956292162SKalle Valo * Counters for legacy 11a and 11b transmissions.
128056292162SKalle Valo *
128156292162SKalle Valo * The index corresponds to:
128256292162SKalle Valo *
128356292162SKalle Valo * CCK: 0: 1 Mbps, 1: 2 Mbps, 2: 5.5 Mbps, 3: 11 Mbps
128456292162SKalle Valo *
128556292162SKalle Valo * OFDM: 0: 6 Mbps, 1: 9 Mbps, 2: 12 Mbps, 3: 18 Mbps,
128656292162SKalle Valo * 4: 24 Mbps, 5: 36 Mbps, 6: 48 Mbps, 7: 54 Mbps
128756292162SKalle Valo */
128856292162SKalle Valo u32 tx_legacy_cck_rate[HTT_TX_PDEV_STATS_NUM_LEGACY_CCK_STATS];
128956292162SKalle Valo u32 tx_legacy_ofdm_rate[HTT_TX_PDEV_STATS_NUM_LEGACY_OFDM_STATS];
129056292162SKalle Valo
129156292162SKalle Valo u32 ac_mu_mimo_tx_ldpc;
129256292162SKalle Valo u32 ax_mu_mimo_tx_ldpc;
129356292162SKalle Valo u32 ofdma_tx_ldpc;
129456292162SKalle Valo
129556292162SKalle Valo /*
129656292162SKalle Valo * Counters for 11ax HE LTF selection during TX.
129756292162SKalle Valo *
129856292162SKalle Valo * The index corresponds to:
129956292162SKalle Valo *
130056292162SKalle Valo * 0: unused, 1: 1x LTF, 2: 2x LTF, 3: 4x LTF
130156292162SKalle Valo */
130256292162SKalle Valo u32 tx_he_ltf[HTT_TX_PDEV_STATS_NUM_LTF];
130356292162SKalle Valo
130456292162SKalle Valo u32 ac_mu_mimo_tx_mcs[HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
130556292162SKalle Valo u32 ax_mu_mimo_tx_mcs[HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
130656292162SKalle Valo u32 ofdma_tx_mcs[HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
130756292162SKalle Valo
130856292162SKalle Valo u32 ac_mu_mimo_tx_nss[HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS];
130956292162SKalle Valo u32 ax_mu_mimo_tx_nss[HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS];
131056292162SKalle Valo u32 ofdma_tx_nss[HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS];
131156292162SKalle Valo
131256292162SKalle Valo u32 ac_mu_mimo_tx_bw[HTT_TX_PDEV_STATS_NUM_BW_COUNTERS];
131356292162SKalle Valo u32 ax_mu_mimo_tx_bw[HTT_TX_PDEV_STATS_NUM_BW_COUNTERS];
131456292162SKalle Valo u32 ofdma_tx_bw[HTT_TX_PDEV_STATS_NUM_BW_COUNTERS];
131556292162SKalle Valo
131656292162SKalle Valo u32 ac_mu_mimo_tx_gi[HTT_TX_PDEV_STATS_NUM_GI_COUNTERS]
131756292162SKalle Valo [HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
131856292162SKalle Valo u32 ax_mu_mimo_tx_gi[HTT_TX_PDEV_STATS_NUM_GI_COUNTERS]
131956292162SKalle Valo [HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
132056292162SKalle Valo u32 ofdma_tx_gi[HTT_TX_PDEV_STATS_NUM_GI_COUNTERS]
132156292162SKalle Valo [HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
132256292162SKalle Valo };
132356292162SKalle Valo
132456292162SKalle Valo /* == PDEV RX RATE CTRL STATS == */
132556292162SKalle Valo #define HTT_RX_PDEV_STATS_NUM_LEGACY_CCK_STATS 4
132656292162SKalle Valo #define HTT_RX_PDEV_STATS_NUM_LEGACY_OFDM_STATS 8
132756292162SKalle Valo #define HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS 12
132856292162SKalle Valo #define HTT_RX_PDEV_STATS_NUM_GI_COUNTERS 4
132956292162SKalle Valo #define HTT_RX_PDEV_STATS_NUM_DCM_COUNTERS 5
133056292162SKalle Valo #define HTT_RX_PDEV_STATS_NUM_BW_COUNTERS 4
133156292162SKalle Valo #define HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS 8
133256292162SKalle Valo #define HTT_RX_PDEV_STATS_NUM_PREAMBLE_TYPES HTT_STATS_PREAM_COUNT
133356292162SKalle Valo #define HTT_RX_PDEV_MAX_OFDMA_NUM_USER 8
133456292162SKalle Valo #define HTT_RX_PDEV_STATS_RXEVM_MAX_PILOTS_PER_NSS 16
1335fdb8fc34SSriram R #define HTT_RX_PDEV_STATS_NUM_RU_SIZE_COUNTERS 6
1336fdb8fc34SSriram R #define HTT_RX_PDEV_MAX_ULMUMIMO_NUM_USER 8
133756292162SKalle Valo
133856292162SKalle Valo struct htt_rx_pdev_rate_stats_tlv {
133956292162SKalle Valo u32 mac_id__word;
134056292162SKalle Valo u32 nsts;
134156292162SKalle Valo
134256292162SKalle Valo u32 rx_ldpc;
134356292162SKalle Valo u32 rts_cnt;
134456292162SKalle Valo
134556292162SKalle Valo u32 rssi_mgmt; /* units = dB above noise floor */
134656292162SKalle Valo u32 rssi_data; /* units = dB above noise floor */
134756292162SKalle Valo u32 rssi_comb; /* units = dB above noise floor */
134856292162SKalle Valo u32 rx_mcs[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];
134956292162SKalle Valo /* element 0,1, ...7 -> NSS 1,2, ...8 */
135056292162SKalle Valo u32 rx_nss[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS];
135156292162SKalle Valo u32 rx_dcm[HTT_RX_PDEV_STATS_NUM_DCM_COUNTERS];
135256292162SKalle Valo u32 rx_stbc[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];
135356292162SKalle Valo /* element 0: 20 MHz, 1: 40 MHz, 2: 80 MHz, 3: 160 and 80+80 MHz */
135456292162SKalle Valo u32 rx_bw[HTT_RX_PDEV_STATS_NUM_BW_COUNTERS];
135556292162SKalle Valo u32 rx_pream[HTT_RX_PDEV_STATS_NUM_PREAMBLE_TYPES];
135656292162SKalle Valo u8 rssi_chain[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS]
135756292162SKalle Valo [HTT_RX_PDEV_STATS_NUM_BW_COUNTERS];
135856292162SKalle Valo /* units = dB above noise floor */
135956292162SKalle Valo
136056292162SKalle Valo /* Counters to track number of rx packets
136156292162SKalle Valo * in each GI in each mcs (0-11)
136256292162SKalle Valo */
136356292162SKalle Valo u32 rx_gi[HTT_RX_PDEV_STATS_NUM_GI_COUNTERS][HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];
136456292162SKalle Valo s32 rssi_in_dbm; /* rx Signal Strength value in dBm unit */
136556292162SKalle Valo
136656292162SKalle Valo u32 rx_11ax_su_ext;
136756292162SKalle Valo u32 rx_11ac_mumimo;
136856292162SKalle Valo u32 rx_11ax_mumimo;
136956292162SKalle Valo u32 rx_11ax_ofdma;
137056292162SKalle Valo u32 txbf;
137156292162SKalle Valo u32 rx_legacy_cck_rate[HTT_RX_PDEV_STATS_NUM_LEGACY_CCK_STATS];
137256292162SKalle Valo u32 rx_legacy_ofdm_rate[HTT_RX_PDEV_STATS_NUM_LEGACY_OFDM_STATS];
137356292162SKalle Valo u32 rx_active_dur_us_low;
137456292162SKalle Valo u32 rx_active_dur_us_high;
137556292162SKalle Valo
137656292162SKalle Valo u32 rx_11ax_ul_ofdma;
137756292162SKalle Valo
137856292162SKalle Valo u32 ul_ofdma_rx_mcs[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];
137956292162SKalle Valo u32 ul_ofdma_rx_gi[HTT_TX_PDEV_STATS_NUM_GI_COUNTERS]
138056292162SKalle Valo [HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];
138156292162SKalle Valo u32 ul_ofdma_rx_nss[HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS];
138256292162SKalle Valo u32 ul_ofdma_rx_bw[HTT_TX_PDEV_STATS_NUM_BW_COUNTERS];
138356292162SKalle Valo u32 ul_ofdma_rx_stbc;
138456292162SKalle Valo u32 ul_ofdma_rx_ldpc;
138556292162SKalle Valo
138656292162SKalle Valo /* record the stats for each user index */
138756292162SKalle Valo u32 rx_ulofdma_non_data_ppdu[HTT_RX_PDEV_MAX_OFDMA_NUM_USER]; /* ppdu level */
138856292162SKalle Valo u32 rx_ulofdma_data_ppdu[HTT_RX_PDEV_MAX_OFDMA_NUM_USER]; /* ppdu level */
138956292162SKalle Valo u32 rx_ulofdma_mpdu_ok[HTT_RX_PDEV_MAX_OFDMA_NUM_USER]; /* mpdu level */
139056292162SKalle Valo u32 rx_ulofdma_mpdu_fail[HTT_RX_PDEV_MAX_OFDMA_NUM_USER]; /* mpdu level */
139156292162SKalle Valo
139256292162SKalle Valo u32 nss_count;
139356292162SKalle Valo u32 pilot_count;
139456292162SKalle Valo /* RxEVM stats in dB */
139556292162SKalle Valo s32 rx_pilot_evm_db[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS]
139656292162SKalle Valo [HTT_RX_PDEV_STATS_RXEVM_MAX_PILOTS_PER_NSS];
139756292162SKalle Valo /* rx_pilot_evm_db_mean:
139856292162SKalle Valo * EVM mean across pilots, computed as
139956292162SKalle Valo * mean(10*log10(rx_pilot_evm_linear)) = mean(rx_pilot_evm_db)
140056292162SKalle Valo */
140156292162SKalle Valo s32 rx_pilot_evm_db_mean[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS];
140256292162SKalle Valo s8 rx_ul_fd_rssi[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS]
140356292162SKalle Valo [HTT_RX_PDEV_MAX_OFDMA_NUM_USER]; /* dBm units */
140456292162SKalle Valo /* per_chain_rssi_pkt_type:
140556292162SKalle Valo * This field shows what type of rx frame the per-chain RSSI was computed
140656292162SKalle Valo * on, by recording the frame type and sub-type as bit-fields within this
140756292162SKalle Valo * field:
140856292162SKalle Valo * BIT [3 : 0] :- IEEE80211_FC0_TYPE
140956292162SKalle Valo * BIT [7 : 4] :- IEEE80211_FC0_SUBTYPE
141056292162SKalle Valo * BIT [31 : 8] :- Reserved
141156292162SKalle Valo */
141256292162SKalle Valo u32 per_chain_rssi_pkt_type;
141356292162SKalle Valo s8 rx_per_chain_rssi_in_dbm[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS]
141456292162SKalle Valo [HTT_RX_PDEV_STATS_NUM_BW_COUNTERS];
1415fdb8fc34SSriram R
1416fdb8fc34SSriram R u32 rx_su_ndpa;
1417fdb8fc34SSriram R u32 rx_11ax_su_txbf_mcs[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];
1418fdb8fc34SSriram R u32 rx_mu_ndpa;
1419fdb8fc34SSriram R u32 rx_11ax_mu_txbf_mcs[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];
1420fdb8fc34SSriram R u32 rx_br_poll;
1421fdb8fc34SSriram R u32 rx_11ax_dl_ofdma_mcs[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];
1422fdb8fc34SSriram R u32 rx_11ax_dl_ofdma_ru[HTT_RX_PDEV_STATS_NUM_RU_SIZE_COUNTERS];
1423fdb8fc34SSriram R
1424fdb8fc34SSriram R u32 rx_ulmumimo_non_data_ppdu[HTT_RX_PDEV_MAX_ULMUMIMO_NUM_USER];
1425fdb8fc34SSriram R u32 rx_ulmumimo_data_ppdu[HTT_RX_PDEV_MAX_ULMUMIMO_NUM_USER];
1426fdb8fc34SSriram R u32 rx_ulmumimo_mpdu_ok[HTT_RX_PDEV_MAX_ULMUMIMO_NUM_USER];
1427fdb8fc34SSriram R u32 rx_ulmumimo_mpdu_fail[HTT_RX_PDEV_MAX_ULMUMIMO_NUM_USER];
1428fdb8fc34SSriram R u32 rx_ulofdma_non_data_nusers[HTT_RX_PDEV_MAX_OFDMA_NUM_USER];
1429fdb8fc34SSriram R u32 rx_ulofdma_data_nusers[HTT_RX_PDEV_MAX_OFDMA_NUM_USER];
143056292162SKalle Valo };
143156292162SKalle Valo
143256292162SKalle Valo /* == RX PDEV/SOC STATS == */
143356292162SKalle Valo struct htt_rx_soc_fw_stats_tlv {
143456292162SKalle Valo u32 fw_reo_ring_data_msdu;
143556292162SKalle Valo u32 fw_to_host_data_msdu_bcmc;
143656292162SKalle Valo u32 fw_to_host_data_msdu_uc;
143756292162SKalle Valo u32 ofld_remote_data_buf_recycle_cnt;
143856292162SKalle Valo u32 ofld_remote_free_buf_indication_cnt;
143956292162SKalle Valo
144056292162SKalle Valo u32 ofld_buf_to_host_data_msdu_uc;
144156292162SKalle Valo u32 reo_fw_ring_to_host_data_msdu_uc;
144256292162SKalle Valo
144356292162SKalle Valo u32 wbm_sw_ring_reap;
144456292162SKalle Valo u32 wbm_forward_to_host_cnt;
144556292162SKalle Valo u32 wbm_target_recycle_cnt;
144656292162SKalle Valo
144756292162SKalle Valo u32 target_refill_ring_recycle_cnt;
144856292162SKalle Valo };
144956292162SKalle Valo
145056292162SKalle Valo /* NOTE: Variable length TLV, use length spec to infer array size */
145156292162SKalle Valo struct htt_rx_soc_fw_refill_ring_empty_tlv_v {
14523b1088a0SGustavo A. R. Silva /* HTT_RX_STATS_REFILL_MAX_RING */
14533b1088a0SGustavo A. R. Silva DECLARE_FLEX_ARRAY(u32, refill_ring_empty_cnt);
145456292162SKalle Valo };
145556292162SKalle Valo
145656292162SKalle Valo /* NOTE: Variable length TLV, use length spec to infer array size */
145756292162SKalle Valo struct htt_rx_soc_fw_refill_ring_num_refill_tlv_v {
14583b1088a0SGustavo A. R. Silva /* HTT_RX_STATS_REFILL_MAX_RING */
14593b1088a0SGustavo A. R. Silva DECLARE_FLEX_ARRAY(u32, refill_ring_num_refill);
146056292162SKalle Valo };
146156292162SKalle Valo
146256292162SKalle Valo /* RXDMA error code from WBM released packets */
146356292162SKalle Valo enum htt_rx_rxdma_error_code_enum {
146456292162SKalle Valo HTT_RX_RXDMA_OVERFLOW_ERR = 0,
146556292162SKalle Valo HTT_RX_RXDMA_MPDU_LENGTH_ERR = 1,
146656292162SKalle Valo HTT_RX_RXDMA_FCS_ERR = 2,
146756292162SKalle Valo HTT_RX_RXDMA_DECRYPT_ERR = 3,
146856292162SKalle Valo HTT_RX_RXDMA_TKIP_MIC_ERR = 4,
146956292162SKalle Valo HTT_RX_RXDMA_UNECRYPTED_ERR = 5,
147056292162SKalle Valo HTT_RX_RXDMA_MSDU_LEN_ERR = 6,
147156292162SKalle Valo HTT_RX_RXDMA_MSDU_LIMIT_ERR = 7,
147256292162SKalle Valo HTT_RX_RXDMA_WIFI_PARSE_ERR = 8,
147356292162SKalle Valo HTT_RX_RXDMA_AMSDU_PARSE_ERR = 9,
147456292162SKalle Valo HTT_RX_RXDMA_SA_TIMEOUT_ERR = 10,
147556292162SKalle Valo HTT_RX_RXDMA_DA_TIMEOUT_ERR = 11,
147656292162SKalle Valo HTT_RX_RXDMA_FLOW_TIMEOUT_ERR = 12,
147756292162SKalle Valo HTT_RX_RXDMA_FLUSH_REQUEST = 13,
147856292162SKalle Valo HTT_RX_RXDMA_ERR_CODE_RVSD0 = 14,
147956292162SKalle Valo HTT_RX_RXDMA_ERR_CODE_RVSD1 = 15,
148056292162SKalle Valo
148156292162SKalle Valo /* This MAX_ERR_CODE should not be used in any host/target messages,
148256292162SKalle Valo * so that even though it is defined within a host/target interface
148356292162SKalle Valo * definition header file, it isn't actually part of the host/target
148456292162SKalle Valo * interface, and thus can be modified.
148556292162SKalle Valo */
148656292162SKalle Valo HTT_RX_RXDMA_MAX_ERR_CODE
148756292162SKalle Valo };
148856292162SKalle Valo
148956292162SKalle Valo /* NOTE: Variable length TLV, use length spec to infer array size */
149056292162SKalle Valo struct htt_rx_soc_fw_refill_ring_num_rxdma_err_tlv_v {
14913b1088a0SGustavo A. R. Silva DECLARE_FLEX_ARRAY(u32, rxdma_err); /* HTT_RX_RXDMA_MAX_ERR_CODE */
149256292162SKalle Valo };
149356292162SKalle Valo
149456292162SKalle Valo /* REO error code from WBM released packets */
149556292162SKalle Valo enum htt_rx_reo_error_code_enum {
149656292162SKalle Valo HTT_RX_REO_QUEUE_DESC_ADDR_ZERO = 0,
149756292162SKalle Valo HTT_RX_REO_QUEUE_DESC_NOT_VALID = 1,
149856292162SKalle Valo HTT_RX_AMPDU_IN_NON_BA = 2,
149956292162SKalle Valo HTT_RX_NON_BA_DUPLICATE = 3,
150056292162SKalle Valo HTT_RX_BA_DUPLICATE = 4,
150156292162SKalle Valo HTT_RX_REGULAR_FRAME_2K_JUMP = 5,
150256292162SKalle Valo HTT_RX_BAR_FRAME_2K_JUMP = 6,
150356292162SKalle Valo HTT_RX_REGULAR_FRAME_OOR = 7,
150456292162SKalle Valo HTT_RX_BAR_FRAME_OOR = 8,
150556292162SKalle Valo HTT_RX_BAR_FRAME_NO_BA_SESSION = 9,
150656292162SKalle Valo HTT_RX_BAR_FRAME_SN_EQUALS_SSN = 10,
150756292162SKalle Valo HTT_RX_PN_CHECK_FAILED = 11,
150856292162SKalle Valo HTT_RX_2K_ERROR_HANDLING_FLAG_SET = 12,
150956292162SKalle Valo HTT_RX_PN_ERROR_HANDLING_FLAG_SET = 13,
151056292162SKalle Valo HTT_RX_QUEUE_DESCRIPTOR_BLOCKED_SET = 14,
151156292162SKalle Valo HTT_RX_REO_ERR_CODE_RVSD = 15,
151256292162SKalle Valo
151356292162SKalle Valo /* This MAX_ERR_CODE should not be used in any host/target messages,
151456292162SKalle Valo * so that even though it is defined within a host/target interface
151556292162SKalle Valo * definition header file, it isn't actually part of the host/target
151656292162SKalle Valo * interface, and thus can be modified.
151756292162SKalle Valo */
151856292162SKalle Valo HTT_RX_REO_MAX_ERR_CODE
151956292162SKalle Valo };
152056292162SKalle Valo
152156292162SKalle Valo /* NOTE: Variable length TLV, use length spec to infer array size */
152256292162SKalle Valo struct htt_rx_soc_fw_refill_ring_num_reo_err_tlv_v {
15233b1088a0SGustavo A. R. Silva DECLARE_FLEX_ARRAY(u32, reo_err); /* HTT_RX_REO_MAX_ERR_CODE */
152456292162SKalle Valo };
152556292162SKalle Valo
152656292162SKalle Valo /* == RX PDEV STATS == */
152756292162SKalle Valo #define HTT_STATS_SUBTYPE_MAX 16
152856292162SKalle Valo
152956292162SKalle Valo struct htt_rx_pdev_fw_stats_tlv {
153056292162SKalle Valo u32 mac_id__word;
153156292162SKalle Valo u32 ppdu_recvd;
153256292162SKalle Valo u32 mpdu_cnt_fcs_ok;
153356292162SKalle Valo u32 mpdu_cnt_fcs_err;
153456292162SKalle Valo u32 tcp_msdu_cnt;
153556292162SKalle Valo u32 tcp_ack_msdu_cnt;
153656292162SKalle Valo u32 udp_msdu_cnt;
153756292162SKalle Valo u32 other_msdu_cnt;
153856292162SKalle Valo u32 fw_ring_mpdu_ind;
153956292162SKalle Valo u32 fw_ring_mgmt_subtype[HTT_STATS_SUBTYPE_MAX];
154056292162SKalle Valo u32 fw_ring_ctrl_subtype[HTT_STATS_SUBTYPE_MAX];
154156292162SKalle Valo u32 fw_ring_mcast_data_msdu;
154256292162SKalle Valo u32 fw_ring_bcast_data_msdu;
154356292162SKalle Valo u32 fw_ring_ucast_data_msdu;
154456292162SKalle Valo u32 fw_ring_null_data_msdu;
154556292162SKalle Valo u32 fw_ring_mpdu_drop;
154656292162SKalle Valo u32 ofld_local_data_ind_cnt;
154756292162SKalle Valo u32 ofld_local_data_buf_recycle_cnt;
154856292162SKalle Valo u32 drx_local_data_ind_cnt;
154956292162SKalle Valo u32 drx_local_data_buf_recycle_cnt;
155056292162SKalle Valo u32 local_nondata_ind_cnt;
155156292162SKalle Valo u32 local_nondata_buf_recycle_cnt;
155256292162SKalle Valo
155356292162SKalle Valo u32 fw_status_buf_ring_refill_cnt;
155456292162SKalle Valo u32 fw_status_buf_ring_empty_cnt;
155556292162SKalle Valo u32 fw_pkt_buf_ring_refill_cnt;
155656292162SKalle Valo u32 fw_pkt_buf_ring_empty_cnt;
155756292162SKalle Valo u32 fw_link_buf_ring_refill_cnt;
155856292162SKalle Valo u32 fw_link_buf_ring_empty_cnt;
155956292162SKalle Valo
156056292162SKalle Valo u32 host_pkt_buf_ring_refill_cnt;
156156292162SKalle Valo u32 host_pkt_buf_ring_empty_cnt;
156256292162SKalle Valo u32 mon_pkt_buf_ring_refill_cnt;
156356292162SKalle Valo u32 mon_pkt_buf_ring_empty_cnt;
156456292162SKalle Valo u32 mon_status_buf_ring_refill_cnt;
156556292162SKalle Valo u32 mon_status_buf_ring_empty_cnt;
156656292162SKalle Valo u32 mon_desc_buf_ring_refill_cnt;
156756292162SKalle Valo u32 mon_desc_buf_ring_empty_cnt;
156856292162SKalle Valo u32 mon_dest_ring_update_cnt;
156956292162SKalle Valo u32 mon_dest_ring_full_cnt;
157056292162SKalle Valo
157156292162SKalle Valo u32 rx_suspend_cnt;
157256292162SKalle Valo u32 rx_suspend_fail_cnt;
157356292162SKalle Valo u32 rx_resume_cnt;
157456292162SKalle Valo u32 rx_resume_fail_cnt;
157556292162SKalle Valo u32 rx_ring_switch_cnt;
157656292162SKalle Valo u32 rx_ring_restore_cnt;
157756292162SKalle Valo u32 rx_flush_cnt;
157856292162SKalle Valo u32 rx_recovery_reset_cnt;
157956292162SKalle Valo };
158056292162SKalle Valo
158156292162SKalle Valo #define HTT_STATS_PHY_ERR_MAX 43
158256292162SKalle Valo
158356292162SKalle Valo struct htt_rx_pdev_fw_stats_phy_err_tlv {
158456292162SKalle Valo u32 mac_id__word;
158556292162SKalle Valo u32 total_phy_err_cnt;
158656292162SKalle Valo /* Counts of different types of phy errs
158756292162SKalle Valo * The mapping of PHY error types to phy_err array elements is HW dependent.
158856292162SKalle Valo * The only currently-supported mapping is shown below:
158956292162SKalle Valo *
159056292162SKalle Valo * 0 phyrx_err_phy_off Reception aborted due to receiving a PHY_OFF TLV
159156292162SKalle Valo * 1 phyrx_err_synth_off
159256292162SKalle Valo * 2 phyrx_err_ofdma_timing
159356292162SKalle Valo * 3 phyrx_err_ofdma_signal_parity
159456292162SKalle Valo * 4 phyrx_err_ofdma_rate_illegal
159556292162SKalle Valo * 5 phyrx_err_ofdma_length_illegal
159656292162SKalle Valo * 6 phyrx_err_ofdma_restart
159756292162SKalle Valo * 7 phyrx_err_ofdma_service
159856292162SKalle Valo * 8 phyrx_err_ppdu_ofdma_power_drop
159956292162SKalle Valo * 9 phyrx_err_cck_blokker
160056292162SKalle Valo * 10 phyrx_err_cck_timing
160156292162SKalle Valo * 11 phyrx_err_cck_header_crc
160256292162SKalle Valo * 12 phyrx_err_cck_rate_illegal
160356292162SKalle Valo * 13 phyrx_err_cck_length_illegal
160456292162SKalle Valo * 14 phyrx_err_cck_restart
160556292162SKalle Valo * 15 phyrx_err_cck_service
160656292162SKalle Valo * 16 phyrx_err_cck_power_drop
160756292162SKalle Valo * 17 phyrx_err_ht_crc_err
160856292162SKalle Valo * 18 phyrx_err_ht_length_illegal
160956292162SKalle Valo * 19 phyrx_err_ht_rate_illegal
161056292162SKalle Valo * 20 phyrx_err_ht_zlf
161156292162SKalle Valo * 21 phyrx_err_false_radar_ext
161256292162SKalle Valo * 22 phyrx_err_green_field
161356292162SKalle Valo * 23 phyrx_err_bw_gt_dyn_bw
161456292162SKalle Valo * 24 phyrx_err_leg_ht_mismatch
161556292162SKalle Valo * 25 phyrx_err_vht_crc_error
161656292162SKalle Valo * 26 phyrx_err_vht_siga_unsupported
161756292162SKalle Valo * 27 phyrx_err_vht_lsig_len_invalid
161856292162SKalle Valo * 28 phyrx_err_vht_ndp_or_zlf
161956292162SKalle Valo * 29 phyrx_err_vht_nsym_lt_zero
162056292162SKalle Valo * 30 phyrx_err_vht_rx_extra_symbol_mismatch
162156292162SKalle Valo * 31 phyrx_err_vht_rx_skip_group_id0
162256292162SKalle Valo * 32 phyrx_err_vht_rx_skip_group_id1to62
162356292162SKalle Valo * 33 phyrx_err_vht_rx_skip_group_id63
162456292162SKalle Valo * 34 phyrx_err_ofdm_ldpc_decoder_disabled
162556292162SKalle Valo * 35 phyrx_err_defer_nap
162656292162SKalle Valo * 36 phyrx_err_fdomain_timeout
162756292162SKalle Valo * 37 phyrx_err_lsig_rel_check
162856292162SKalle Valo * 38 phyrx_err_bt_collision
162956292162SKalle Valo * 39 phyrx_err_unsupported_mu_feedback
163056292162SKalle Valo * 40 phyrx_err_ppdu_tx_interrupt_rx
163156292162SKalle Valo * 41 phyrx_err_unsupported_cbf
163256292162SKalle Valo * 42 phyrx_err_other
163356292162SKalle Valo */
163456292162SKalle Valo u32 phy_err[HTT_STATS_PHY_ERR_MAX];
163556292162SKalle Valo };
163656292162SKalle Valo
163756292162SKalle Valo /* NOTE: Variable length TLV, use length spec to infer array size */
163856292162SKalle Valo struct htt_rx_pdev_fw_ring_mpdu_err_tlv_v {
163956292162SKalle Valo /* Num error MPDU for each RxDMA error type */
16403b1088a0SGustavo A. R. Silva DECLARE_FLEX_ARRAY(u32, fw_ring_mpdu_err); /* HTT_RX_STATS_RXDMA_MAX_ERR */
164156292162SKalle Valo };
164256292162SKalle Valo
164356292162SKalle Valo /* NOTE: Variable length TLV, use length spec to infer array size */
164456292162SKalle Valo struct htt_rx_pdev_fw_mpdu_drop_tlv_v {
164556292162SKalle Valo /* Num MPDU dropped */
16463b1088a0SGustavo A. R. Silva DECLARE_FLEX_ARRAY(u32, fw_mpdu_drop); /* HTT_RX_STATS_FW_DROP_REASON_MAX */
164756292162SKalle Valo };
164856292162SKalle Valo
164956292162SKalle Valo #define HTT_PDEV_CCA_STATS_TX_FRAME_INFO_PRESENT (0x1)
165056292162SKalle Valo #define HTT_PDEV_CCA_STATS_RX_FRAME_INFO_PRESENT (0x2)
165156292162SKalle Valo #define HTT_PDEV_CCA_STATS_RX_CLEAR_INFO_PRESENT (0x4)
165256292162SKalle Valo #define HTT_PDEV_CCA_STATS_MY_RX_FRAME_INFO_PRESENT (0x8)
165356292162SKalle Valo #define HTT_PDEV_CCA_STATS_USEC_CNT_INFO_PRESENT (0x10)
165456292162SKalle Valo #define HTT_PDEV_CCA_STATS_MED_RX_IDLE_INFO_PRESENT (0x20)
165556292162SKalle Valo #define HTT_PDEV_CCA_STATS_MED_TX_IDLE_GLOBAL_INFO_PRESENT (0x40)
165656292162SKalle Valo #define HTT_PDEV_CCA_STATS_CCA_OBBS_USEC_INFO_PRESENT (0x80)
165756292162SKalle Valo
165856292162SKalle Valo struct htt_pdev_stats_cca_counters_tlv {
165956292162SKalle Valo /* Below values are obtained from the HW Cycles counter registers */
166056292162SKalle Valo u32 tx_frame_usec;
166156292162SKalle Valo u32 rx_frame_usec;
166256292162SKalle Valo u32 rx_clear_usec;
166356292162SKalle Valo u32 my_rx_frame_usec;
166456292162SKalle Valo u32 usec_cnt;
166556292162SKalle Valo u32 med_rx_idle_usec;
166656292162SKalle Valo u32 med_tx_idle_global_usec;
166756292162SKalle Valo u32 cca_obss_usec;
166856292162SKalle Valo };
166956292162SKalle Valo
167056292162SKalle Valo struct htt_pdev_cca_stats_hist_v1_tlv {
167156292162SKalle Valo u32 chan_num;
167256292162SKalle Valo /* num of CCA records (Num of htt_pdev_stats_cca_counters_tlv)*/
167356292162SKalle Valo u32 num_records;
167456292162SKalle Valo u32 valid_cca_counters_bitmap;
167556292162SKalle Valo u32 collection_interval;
167656292162SKalle Valo
167756292162SKalle Valo /* This will be followed by an array which contains the CCA stats
167856292162SKalle Valo * collected in the last N intervals,
167956292162SKalle Valo * if the indication is for last N intervals CCA stats.
168056292162SKalle Valo * Then the pdev_cca_stats[0] element contains the oldest CCA stats
168156292162SKalle Valo * and pdev_cca_stats[N-1] will have the most recent CCA stats.
168256292162SKalle Valo * htt_pdev_stats_cca_counters_tlv cca_hist_tlv[1];
168356292162SKalle Valo */
168456292162SKalle Valo };
168556292162SKalle Valo
168656292162SKalle Valo struct htt_pdev_stats_twt_session_tlv {
168756292162SKalle Valo u32 vdev_id;
168856292162SKalle Valo struct htt_mac_addr peer_mac;
168956292162SKalle Valo u32 flow_id_flags;
169056292162SKalle Valo
169156292162SKalle Valo /* TWT_DIALOG_ID_UNAVAILABLE is used
169256292162SKalle Valo * when TWT session is not initiated by host
169356292162SKalle Valo */
169456292162SKalle Valo u32 dialog_id;
169556292162SKalle Valo u32 wake_dura_us;
169656292162SKalle Valo u32 wake_intvl_us;
169756292162SKalle Valo u32 sp_offset_us;
169856292162SKalle Valo };
169956292162SKalle Valo
170056292162SKalle Valo struct htt_pdev_stats_twt_sessions_tlv {
170156292162SKalle Valo u32 pdev_id;
170256292162SKalle Valo u32 num_sessions;
170356292162SKalle Valo struct htt_pdev_stats_twt_session_tlv twt_session[];
170456292162SKalle Valo };
170556292162SKalle Valo
170656292162SKalle Valo enum htt_rx_reo_resource_sample_id_enum {
170756292162SKalle Valo /* Global link descriptor queued in REO */
170856292162SKalle Valo HTT_RX_REO_RESOURCE_GLOBAL_LINK_DESC_COUNT_0 = 0,
170956292162SKalle Valo HTT_RX_REO_RESOURCE_GLOBAL_LINK_DESC_COUNT_1 = 1,
171056292162SKalle Valo HTT_RX_REO_RESOURCE_GLOBAL_LINK_DESC_COUNT_2 = 2,
171156292162SKalle Valo /*Number of queue descriptors of this aging group */
171256292162SKalle Valo HTT_RX_REO_RESOURCE_BUFFERS_USED_AC0 = 3,
171356292162SKalle Valo HTT_RX_REO_RESOURCE_BUFFERS_USED_AC1 = 4,
171456292162SKalle Valo HTT_RX_REO_RESOURCE_BUFFERS_USED_AC2 = 5,
171556292162SKalle Valo HTT_RX_REO_RESOURCE_BUFFERS_USED_AC3 = 6,
171656292162SKalle Valo /* Total number of MSDUs buffered in AC */
171756292162SKalle Valo HTT_RX_REO_RESOURCE_AGING_NUM_QUEUES_AC0 = 7,
171856292162SKalle Valo HTT_RX_REO_RESOURCE_AGING_NUM_QUEUES_AC1 = 8,
171956292162SKalle Valo HTT_RX_REO_RESOURCE_AGING_NUM_QUEUES_AC2 = 9,
172056292162SKalle Valo HTT_RX_REO_RESOURCE_AGING_NUM_QUEUES_AC3 = 10,
172156292162SKalle Valo
172256292162SKalle Valo HTT_RX_REO_RESOURCE_STATS_MAX = 16
172356292162SKalle Valo };
172456292162SKalle Valo
172556292162SKalle Valo struct htt_rx_reo_resource_stats_tlv_v {
172656292162SKalle Valo /* Variable based on the Number of records. HTT_RX_REO_RESOURCE_STATS_MAX */
172756292162SKalle Valo u32 sample_id;
172856292162SKalle Valo u32 total_max;
172956292162SKalle Valo u32 total_avg;
173056292162SKalle Valo u32 total_sample;
173156292162SKalle Valo u32 non_zeros_avg;
173256292162SKalle Valo u32 non_zeros_sample;
173356292162SKalle Valo u32 last_non_zeros_max;
173456292162SKalle Valo u32 last_non_zeros_min;
173556292162SKalle Valo u32 last_non_zeros_avg;
173656292162SKalle Valo u32 last_non_zeros_sample;
173756292162SKalle Valo };
173856292162SKalle Valo
173956292162SKalle Valo /* == TX SOUNDING STATS == */
174056292162SKalle Valo
174156292162SKalle Valo enum htt_txbf_sound_steer_modes {
174256292162SKalle Valo HTT_IMPLICIT_TXBF_STEER_STATS = 0,
174356292162SKalle Valo HTT_EXPLICIT_TXBF_SU_SIFS_STEER_STATS = 1,
174456292162SKalle Valo HTT_EXPLICIT_TXBF_SU_RBO_STEER_STATS = 2,
174556292162SKalle Valo HTT_EXPLICIT_TXBF_MU_SIFS_STEER_STATS = 3,
174656292162SKalle Valo HTT_EXPLICIT_TXBF_MU_RBO_STEER_STATS = 4,
174756292162SKalle Valo HTT_TXBF_MAX_NUM_OF_MODES = 5
174856292162SKalle Valo };
174956292162SKalle Valo
175056292162SKalle Valo enum htt_stats_sounding_tx_mode {
175156292162SKalle Valo HTT_TX_AC_SOUNDING_MODE = 0,
175256292162SKalle Valo HTT_TX_AX_SOUNDING_MODE = 1,
175356292162SKalle Valo };
175456292162SKalle Valo
175556292162SKalle Valo struct htt_tx_sounding_stats_tlv {
175656292162SKalle Valo u32 tx_sounding_mode; /* HTT_TX_XX_SOUNDING_MODE */
175756292162SKalle Valo /* Counts number of soundings for all steering modes in each bw */
175856292162SKalle Valo u32 cbf_20[HTT_TXBF_MAX_NUM_OF_MODES];
175956292162SKalle Valo u32 cbf_40[HTT_TXBF_MAX_NUM_OF_MODES];
176056292162SKalle Valo u32 cbf_80[HTT_TXBF_MAX_NUM_OF_MODES];
176156292162SKalle Valo u32 cbf_160[HTT_TXBF_MAX_NUM_OF_MODES];
176256292162SKalle Valo /*
176356292162SKalle Valo * The sounding array is a 2-D array stored as an 1-D array of
176456292162SKalle Valo * u32. The stats for a particular user/bw combination is
176556292162SKalle Valo * referenced with the following:
176656292162SKalle Valo *
176756292162SKalle Valo * sounding[(user* max_bw) + bw]
176856292162SKalle Valo *
176956292162SKalle Valo * ... where max_bw == 4 for 160mhz
177056292162SKalle Valo */
177156292162SKalle Valo u32 sounding[HTT_TX_NUM_OF_SOUNDING_STATS_WORDS];
177256292162SKalle Valo };
177356292162SKalle Valo
177456292162SKalle Valo struct htt_pdev_obss_pd_stats_tlv {
177556292162SKalle Valo u32 num_obss_tx_ppdu_success;
177656292162SKalle Valo u32 num_obss_tx_ppdu_failure;
1777b56b08aeSRajkumar Manoharan u32 num_sr_tx_transmissions;
1778b56b08aeSRajkumar Manoharan u32 num_spatial_reuse_opportunities;
1779b56b08aeSRajkumar Manoharan u32 num_non_srg_opportunities;
1780b56b08aeSRajkumar Manoharan u32 num_non_srg_ppdu_tried;
1781b56b08aeSRajkumar Manoharan u32 num_non_srg_ppdu_success;
1782b56b08aeSRajkumar Manoharan u32 num_srg_opportunities;
1783b56b08aeSRajkumar Manoharan u32 num_srg_ppdu_tried;
1784b56b08aeSRajkumar Manoharan u32 num_srg_ppdu_success;
1785b56b08aeSRajkumar Manoharan u32 num_psr_opportunities;
1786b56b08aeSRajkumar Manoharan u32 num_psr_ppdu_tried;
1787b56b08aeSRajkumar Manoharan u32 num_psr_ppdu_success;
178856292162SKalle Valo };
178956292162SKalle Valo
179056292162SKalle Valo struct htt_ring_backpressure_stats_tlv {
179156292162SKalle Valo u32 pdev_id;
179256292162SKalle Valo u32 current_head_idx;
179356292162SKalle Valo u32 current_tail_idx;
179456292162SKalle Valo u32 num_htt_msgs_sent;
179556292162SKalle Valo /* Time in milliseconds for which the ring has been in
179656292162SKalle Valo * its current backpressure condition
179756292162SKalle Valo */
179856292162SKalle Valo u32 backpressure_time_ms;
179956292162SKalle Valo /* backpressure_hist - histogram showing how many times
180056292162SKalle Valo * different degrees of backpressure duration occurred:
180156292162SKalle Valo * Index 0 indicates the number of times ring was
180256292162SKalle Valo * continuously in backpressure state for 100 - 200ms.
180356292162SKalle Valo * Index 1 indicates the number of times ring was
180456292162SKalle Valo * continuously in backpressure state for 200 - 300ms.
180556292162SKalle Valo * Index 2 indicates the number of times ring was
180656292162SKalle Valo * continuously in backpressure state for 300 - 400ms.
180756292162SKalle Valo * Index 3 indicates the number of times ring was
180856292162SKalle Valo * continuously in backpressure state for 400 - 500ms.
180956292162SKalle Valo * Index 4 indicates the number of times ring was
181056292162SKalle Valo * continuously in backpressure state beyond 500ms.
181156292162SKalle Valo */
181256292162SKalle Valo u32 backpressure_hist[5];
181356292162SKalle Valo };
181456292162SKalle Valo
1815ac83b603SVenkateswara Naralasetty #define HTT_TX_TXBF_RATE_STATS_NUM_MCS_COUNTERS 14
1816ac83b603SVenkateswara Naralasetty #define HTT_TX_TXBF_RATE_STATS_NUM_BW_COUNTERS 5
1817ac83b603SVenkateswara Naralasetty #define HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS 8
1818ac83b603SVenkateswara Naralasetty
1819ac83b603SVenkateswara Naralasetty struct htt_pdev_txrate_txbf_stats_tlv {
1820ac83b603SVenkateswara Naralasetty /* SU TxBF TX MCS stats */
1821ac83b603SVenkateswara Naralasetty u32 tx_su_txbf_mcs[HTT_TX_TXBF_RATE_STATS_NUM_MCS_COUNTERS];
1822ac83b603SVenkateswara Naralasetty /* Implicit BF TX MCS stats */
1823ac83b603SVenkateswara Naralasetty u32 tx_su_ibf_mcs[HTT_TX_TXBF_RATE_STATS_NUM_MCS_COUNTERS];
1824ac83b603SVenkateswara Naralasetty /* Open loop TX MCS stats */
1825ac83b603SVenkateswara Naralasetty u32 tx_su_ol_mcs[HTT_TX_TXBF_RATE_STATS_NUM_MCS_COUNTERS];
1826ac83b603SVenkateswara Naralasetty /* SU TxBF TX NSS stats */
1827ac83b603SVenkateswara Naralasetty u32 tx_su_txbf_nss[HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS];
1828ac83b603SVenkateswara Naralasetty /* Implicit BF TX NSS stats */
1829ac83b603SVenkateswara Naralasetty u32 tx_su_ibf_nss[HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS];
1830ac83b603SVenkateswara Naralasetty /* Open loop TX NSS stats */
1831ac83b603SVenkateswara Naralasetty u32 tx_su_ol_nss[HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS];
1832ac83b603SVenkateswara Naralasetty /* SU TxBF TX BW stats */
1833ac83b603SVenkateswara Naralasetty u32 tx_su_txbf_bw[HTT_TX_TXBF_RATE_STATS_NUM_BW_COUNTERS];
1834ac83b603SVenkateswara Naralasetty /* Implicit BF TX BW stats */
1835ac83b603SVenkateswara Naralasetty u32 tx_su_ibf_bw[HTT_TX_TXBF_RATE_STATS_NUM_BW_COUNTERS];
1836ac83b603SVenkateswara Naralasetty /* Open loop TX BW stats */
1837ac83b603SVenkateswara Naralasetty u32 tx_su_ol_bw[HTT_TX_TXBF_RATE_STATS_NUM_BW_COUNTERS];
1838ac83b603SVenkateswara Naralasetty };
1839ac83b603SVenkateswara Naralasetty
1840ac83b603SVenkateswara Naralasetty struct htt_txbf_ofdma_ndpa_stats_tlv {
1841ac83b603SVenkateswara Naralasetty /* 11AX HE OFDMA NDPA frame queued to the HW */
1842ac83b603SVenkateswara Naralasetty u32 ax_ofdma_ndpa_queued[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1843ac83b603SVenkateswara Naralasetty /* 11AX HE OFDMA NDPA frame sent over the air */
1844ac83b603SVenkateswara Naralasetty u32 ax_ofdma_ndpa_tried[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1845ac83b603SVenkateswara Naralasetty /* 11AX HE OFDMA NDPA frame flushed by HW */
1846ac83b603SVenkateswara Naralasetty u32 ax_ofdma_ndpa_flushed[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1847ac83b603SVenkateswara Naralasetty /* 11AX HE OFDMA NDPA frame completed with error(s) */
1848ac83b603SVenkateswara Naralasetty u32 ax_ofdma_ndpa_err[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1849ac83b603SVenkateswara Naralasetty };
1850ac83b603SVenkateswara Naralasetty
1851ac83b603SVenkateswara Naralasetty struct htt_txbf_ofdma_ndp_stats_tlv {
1852ac83b603SVenkateswara Naralasetty /* 11AX HE OFDMA NDP frame queued to the HW */
1853ac83b603SVenkateswara Naralasetty u32 ax_ofdma_ndp_queued[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1854ac83b603SVenkateswara Naralasetty /* 11AX HE OFDMA NDPA frame sent over the air */
1855ac83b603SVenkateswara Naralasetty u32 ax_ofdma_ndp_tried[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1856ac83b603SVenkateswara Naralasetty /* 11AX HE OFDMA NDPA frame flushed by HW */
1857ac83b603SVenkateswara Naralasetty u32 ax_ofdma_ndp_flushed[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1858ac83b603SVenkateswara Naralasetty /* 11AX HE OFDMA NDPA frame completed with error(s) */
1859ac83b603SVenkateswara Naralasetty u32 ax_ofdma_ndp_err[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1860ac83b603SVenkateswara Naralasetty };
1861ac83b603SVenkateswara Naralasetty
1862ac83b603SVenkateswara Naralasetty struct htt_txbf_ofdma_brp_stats_tlv {
1863ac83b603SVenkateswara Naralasetty /* 11AX HE OFDMA MU BRPOLL frame queued to the HW */
1864ac83b603SVenkateswara Naralasetty u32 ax_ofdma_brpoll_queued[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1865ac83b603SVenkateswara Naralasetty /* 11AX HE OFDMA MU BRPOLL frame sent over the air */
1866ac83b603SVenkateswara Naralasetty u32 ax_ofdma_brpoll_tried[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1867ac83b603SVenkateswara Naralasetty /* 11AX HE OFDMA MU BRPOLL frame flushed by HW */
1868ac83b603SVenkateswara Naralasetty u32 ax_ofdma_brpoll_flushed[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1869ac83b603SVenkateswara Naralasetty /* 11AX HE OFDMA MU BRPOLL frame completed with error(s) */
1870ac83b603SVenkateswara Naralasetty u32 ax_ofdma_brp_err[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1871ac83b603SVenkateswara Naralasetty /* Number of CBF(s) received when 11AX HE OFDMA MU BRPOLL frame
1872ac83b603SVenkateswara Naralasetty * completed with error(s).
1873ac83b603SVenkateswara Naralasetty */
1874ac83b603SVenkateswara Naralasetty u32 ax_ofdma_brp_err_num_cbf_rcvd[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS + 1];
1875ac83b603SVenkateswara Naralasetty };
1876ac83b603SVenkateswara Naralasetty
1877ac83b603SVenkateswara Naralasetty struct htt_txbf_ofdma_steer_stats_tlv {
1878ac83b603SVenkateswara Naralasetty /* 11AX HE OFDMA PPDUs that were sent over the air with steering (TXBF + OFDMA) */
1879ac83b603SVenkateswara Naralasetty u32 ax_ofdma_num_ppdu_steer[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1880ac83b603SVenkateswara Naralasetty /* 11AX HE OFDMA PPDUs that were sent over the air in open loop */
1881ac83b603SVenkateswara Naralasetty u32 ax_ofdma_num_ppdu_ol[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1882ac83b603SVenkateswara Naralasetty /* 11AX HE OFDMA number of users for which CBF prefetch was
1883ac83b603SVenkateswara Naralasetty * initiated to PHY HW during TX.
1884ac83b603SVenkateswara Naralasetty */
1885ac83b603SVenkateswara Naralasetty u32 ax_ofdma_num_usrs_prefetch[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1886ac83b603SVenkateswara Naralasetty /* 11AX HE OFDMA number of users for which sounding was initiated during TX */
1887ac83b603SVenkateswara Naralasetty u32 ax_ofdma_num_usrs_sound[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1888ac83b603SVenkateswara Naralasetty /* 11AX HE OFDMA number of users for which sounding was forced during TX */
1889ac83b603SVenkateswara Naralasetty u32 ax_ofdma_num_usrs_force_sound[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1890ac83b603SVenkateswara Naralasetty };
1891ac83b603SVenkateswara Naralasetty
1892ac83b603SVenkateswara Naralasetty #define HTT_MAX_RX_PKT_CNT 8
1893ac83b603SVenkateswara Naralasetty #define HTT_MAX_RX_PKT_CRC_PASS_CNT 8
1894ac83b603SVenkateswara Naralasetty #define HTT_MAX_PER_BLK_ERR_CNT 20
1895ac83b603SVenkateswara Naralasetty #define HTT_MAX_RX_OTA_ERR_CNT 14
1896ac83b603SVenkateswara Naralasetty #define HTT_STATS_MAX_CHAINS 8
1897ac83b603SVenkateswara Naralasetty #define ATH11K_STATS_MGMT_FRM_TYPE_MAX 16
1898ac83b603SVenkateswara Naralasetty
1899ac83b603SVenkateswara Naralasetty struct htt_phy_counters_tlv {
1900ac83b603SVenkateswara Naralasetty /* number of RXTD OFDMA OTA error counts except power surge and drop */
1901ac83b603SVenkateswara Naralasetty u32 rx_ofdma_timing_err_cnt;
1902ac83b603SVenkateswara Naralasetty /* rx_cck_fail_cnt:
1903ac83b603SVenkateswara Naralasetty * number of cck error counts due to rx reception failure because of
1904ac83b603SVenkateswara Naralasetty * timing error in cck
1905ac83b603SVenkateswara Naralasetty */
1906ac83b603SVenkateswara Naralasetty u32 rx_cck_fail_cnt;
1907ac83b603SVenkateswara Naralasetty /* number of times tx abort initiated by mac */
1908ac83b603SVenkateswara Naralasetty u32 mactx_abort_cnt;
1909ac83b603SVenkateswara Naralasetty /* number of times rx abort initiated by mac */
1910ac83b603SVenkateswara Naralasetty u32 macrx_abort_cnt;
1911ac83b603SVenkateswara Naralasetty /* number of times tx abort initiated by phy */
1912ac83b603SVenkateswara Naralasetty u32 phytx_abort_cnt;
1913ac83b603SVenkateswara Naralasetty /* number of times rx abort initiated by phy */
1914ac83b603SVenkateswara Naralasetty u32 phyrx_abort_cnt;
19153fecca0eSJeff Johnson /* number of rx deferred count initiated by phy */
1916ac83b603SVenkateswara Naralasetty u32 phyrx_defer_abort_cnt;
1917ac83b603SVenkateswara Naralasetty /* number of sizing events generated at LSTF */
1918ac83b603SVenkateswara Naralasetty u32 rx_gain_adj_lstf_event_cnt;
1919ac83b603SVenkateswara Naralasetty /* number of sizing events generated at non-legacy LTF */
1920ac83b603SVenkateswara Naralasetty u32 rx_gain_adj_non_legacy_cnt;
1921ac83b603SVenkateswara Naralasetty /* rx_pkt_cnt -
1922ac83b603SVenkateswara Naralasetty * Received EOP (end-of-packet) count per packet type;
1923ac83b603SVenkateswara Naralasetty * [0] = 11a; [1] = 11b; [2] = 11n; [3] = 11ac; [4] = 11ax; [5] = GF
1924ac83b603SVenkateswara Naralasetty * [6-7]=RSVD
1925ac83b603SVenkateswara Naralasetty */
1926ac83b603SVenkateswara Naralasetty u32 rx_pkt_cnt[HTT_MAX_RX_PKT_CNT];
1927ac83b603SVenkateswara Naralasetty /* rx_pkt_crc_pass_cnt -
1928ac83b603SVenkateswara Naralasetty * Received EOP (end-of-packet) count per packet type;
1929ac83b603SVenkateswara Naralasetty * [0] = 11a; [1] = 11b; [2] = 11n; [3] = 11ac; [4] = 11ax; [5] = GF
1930ac83b603SVenkateswara Naralasetty * [6-7]=RSVD
1931ac83b603SVenkateswara Naralasetty */
1932ac83b603SVenkateswara Naralasetty u32 rx_pkt_crc_pass_cnt[HTT_MAX_RX_PKT_CRC_PASS_CNT];
1933ac83b603SVenkateswara Naralasetty /* per_blk_err_cnt -
1934ac83b603SVenkateswara Naralasetty * Error count per error source;
1935ac83b603SVenkateswara Naralasetty * [0] = unknown; [1] = LSIG; [2] = HTSIG; [3] = VHTSIG; [4] = HESIG;
1936ac83b603SVenkateswara Naralasetty * [5] = RXTD_OTA; [6] = RXTD_FATAL; [7] = DEMF; [8] = ROBE;
1937ac83b603SVenkateswara Naralasetty * [9] = PMI; [10] = TXFD; [11] = TXTD; [12] = PHYRF
1938ac83b603SVenkateswara Naralasetty * [13-19]=RSVD
1939ac83b603SVenkateswara Naralasetty */
1940ac83b603SVenkateswara Naralasetty u32 per_blk_err_cnt[HTT_MAX_PER_BLK_ERR_CNT];
1941ac83b603SVenkateswara Naralasetty /* rx_ota_err_cnt -
1942ac83b603SVenkateswara Naralasetty * RXTD OTA (over-the-air) error count per error reason;
1943ac83b603SVenkateswara Naralasetty * [0] = voting fail; [1] = weak det fail; [2] = strong sig fail;
1944ac83b603SVenkateswara Naralasetty * [3] = cck fail; [4] = power surge; [5] = power drop;
1945ac83b603SVenkateswara Naralasetty * [6] = btcf timing timeout error; [7] = btcf packet detect error;
1946ac83b603SVenkateswara Naralasetty * [8] = coarse timing timeout error
1947ac83b603SVenkateswara Naralasetty * [9-13]=RSVD
1948ac83b603SVenkateswara Naralasetty */
1949ac83b603SVenkateswara Naralasetty u32 rx_ota_err_cnt[HTT_MAX_RX_OTA_ERR_CNT];
1950ac83b603SVenkateswara Naralasetty };
1951ac83b603SVenkateswara Naralasetty
1952ac83b603SVenkateswara Naralasetty struct htt_phy_stats_tlv {
1953ac83b603SVenkateswara Naralasetty /* per chain hw noise floor values in dBm */
1954ac83b603SVenkateswara Naralasetty s32 nf_chain[HTT_STATS_MAX_CHAINS];
1955ac83b603SVenkateswara Naralasetty /* number of false radars detected */
1956ac83b603SVenkateswara Naralasetty u32 false_radar_cnt;
1957ac83b603SVenkateswara Naralasetty /* number of channel switches happened due to radar detection */
1958ac83b603SVenkateswara Naralasetty u32 radar_cs_cnt;
1959ac83b603SVenkateswara Naralasetty /* ani_level -
1960ac83b603SVenkateswara Naralasetty * ANI level (noise interference) corresponds to the channel
1961ac83b603SVenkateswara Naralasetty * the desense levels range from -5 to 15 in dB units,
1962ac83b603SVenkateswara Naralasetty * higher values indicating more noise interference.
1963ac83b603SVenkateswara Naralasetty */
1964ac83b603SVenkateswara Naralasetty s32 ani_level;
1965ac83b603SVenkateswara Naralasetty /* running time in minutes since FW boot */
1966ac83b603SVenkateswara Naralasetty u32 fw_run_time;
1967ac83b603SVenkateswara Naralasetty };
1968ac83b603SVenkateswara Naralasetty
19692d4f9093SNidhi Jain struct htt_phy_reset_counters_tlv {
19702d4f9093SNidhi Jain u32 pdev_id;
19712d4f9093SNidhi Jain u32 cf_active_low_fail_cnt;
19722d4f9093SNidhi Jain u32 cf_active_low_pass_cnt;
19732d4f9093SNidhi Jain u32 phy_off_through_vreg_cnt;
19742d4f9093SNidhi Jain u32 force_calibration_cnt;
19752d4f9093SNidhi Jain u32 rf_mode_switch_phy_off_cnt;
19762d4f9093SNidhi Jain };
19772d4f9093SNidhi Jain
19782d4f9093SNidhi Jain struct htt_phy_reset_stats_tlv {
19792d4f9093SNidhi Jain u32 pdev_id;
19802d4f9093SNidhi Jain u32 chan_mhz;
19812d4f9093SNidhi Jain u32 chan_band_center_freq1;
19822d4f9093SNidhi Jain u32 chan_band_center_freq2;
19832d4f9093SNidhi Jain u32 chan_phy_mode;
19842d4f9093SNidhi Jain u32 chan_flags;
19852d4f9093SNidhi Jain u32 chan_num;
19862d4f9093SNidhi Jain u32 reset_cause;
19872d4f9093SNidhi Jain u32 prev_reset_cause;
19882d4f9093SNidhi Jain u32 phy_warm_reset_src;
19892d4f9093SNidhi Jain u32 rx_gain_tbl_mode;
19902d4f9093SNidhi Jain u32 xbar_val;
19912d4f9093SNidhi Jain u32 force_calibration;
19922d4f9093SNidhi Jain u32 phyrf_mode;
19932d4f9093SNidhi Jain u32 phy_homechan;
19942d4f9093SNidhi Jain u32 phy_tx_ch_mask;
19952d4f9093SNidhi Jain u32 phy_rx_ch_mask;
19962d4f9093SNidhi Jain u32 phybb_ini_mask;
19972d4f9093SNidhi Jain u32 phyrf_ini_mask;
19982d4f9093SNidhi Jain u32 phy_dfs_en_mask;
19992d4f9093SNidhi Jain u32 phy_sscan_en_mask;
20002d4f9093SNidhi Jain u32 phy_synth_sel_mask;
20012d4f9093SNidhi Jain u32 phy_adfs_freq;
20022d4f9093SNidhi Jain u32 cck_fir_settings;
20032d4f9093SNidhi Jain u32 phy_dyn_pri_chan;
20042d4f9093SNidhi Jain u32 cca_thresh;
20052d4f9093SNidhi Jain u32 dyn_cca_status;
20062d4f9093SNidhi Jain u32 rxdesense_thresh_hw;
20072d4f9093SNidhi Jain u32 rxdesense_thresh_sw;
20082d4f9093SNidhi Jain };
20092d4f9093SNidhi Jain
2010ac83b603SVenkateswara Naralasetty struct htt_peer_ctrl_path_txrx_stats_tlv {
2011ac83b603SVenkateswara Naralasetty /* peer mac address */
2012ac83b603SVenkateswara Naralasetty u8 peer_mac_addr[ETH_ALEN];
2013ac83b603SVenkateswara Naralasetty u8 rsvd[2];
2014ac83b603SVenkateswara Naralasetty /* Num of tx mgmt frames with subtype on peer level */
2015ac83b603SVenkateswara Naralasetty u32 peer_tx_mgmt_subtype[ATH11K_STATS_MGMT_FRM_TYPE_MAX];
2016ac83b603SVenkateswara Naralasetty /* Num of rx mgmt frames with subtype on peer level */
2017ac83b603SVenkateswara Naralasetty u32 peer_rx_mgmt_subtype[ATH11K_STATS_MGMT_FRM_TYPE_MAX];
2018ac83b603SVenkateswara Naralasetty };
2019ac83b603SVenkateswara Naralasetty
2020bc8befe6SKalle Valo #ifdef CONFIG_ATH11K_DEBUGFS
2021bc8befe6SKalle Valo
2022568f0603SKalle Valo void ath11k_debugfs_htt_stats_init(struct ath11k *ar);
2023568f0603SKalle Valo void ath11k_debugfs_htt_ext_stats_handler(struct ath11k_base *ab,
2024568f0603SKalle Valo struct sk_buff *skb);
2025568f0603SKalle Valo int ath11k_debugfs_htt_stats_req(struct ath11k *ar);
2026568f0603SKalle Valo
2027bc8befe6SKalle Valo #else /* CONFIG_ATH11K_DEBUGFS */
2028bc8befe6SKalle Valo
ath11k_debugfs_htt_stats_init(struct ath11k * ar)2029bc8befe6SKalle Valo static inline void ath11k_debugfs_htt_stats_init(struct ath11k *ar)
2030bc8befe6SKalle Valo {
2031bc8befe6SKalle Valo }
2032bc8befe6SKalle Valo
ath11k_debugfs_htt_ext_stats_handler(struct ath11k_base * ab,struct sk_buff * skb)2033bc8befe6SKalle Valo static inline void ath11k_debugfs_htt_ext_stats_handler(struct ath11k_base *ab,
2034bc8befe6SKalle Valo struct sk_buff *skb)
2035bc8befe6SKalle Valo {
2036bc8befe6SKalle Valo }
2037bc8befe6SKalle Valo
ath11k_debugfs_htt_stats_req(struct ath11k * ar)2038bc8befe6SKalle Valo static inline int ath11k_debugfs_htt_stats_req(struct ath11k *ar)
2039bc8befe6SKalle Valo {
2040bc8befe6SKalle Valo return 0;
2041bc8befe6SKalle Valo }
2042bc8befe6SKalle Valo
2043bc8befe6SKalle Valo #endif /* CONFIG_ATH11K_DEBUGFS */
2044bc8befe6SKalle Valo
204556292162SKalle Valo #endif
2046