0001
0002
0003
0004
0005
0006
0007 #ifndef DEBUG_HTT_STATS_H
0008 #define DEBUG_HTT_STATS_H
0009
0010 #define HTT_STATS_COOKIE_LSB GENMASK_ULL(31, 0)
0011 #define HTT_STATS_COOKIE_MSB GENMASK_ULL(63, 32)
0012 #define HTT_STATS_MAGIC_VALUE 0xF0F0F0F0
0013
0014 enum htt_tlv_tag_t {
0015 HTT_STATS_TX_PDEV_CMN_TAG = 0,
0016 HTT_STATS_TX_PDEV_UNDERRUN_TAG = 1,
0017 HTT_STATS_TX_PDEV_SIFS_TAG = 2,
0018 HTT_STATS_TX_PDEV_FLUSH_TAG = 3,
0019 HTT_STATS_TX_PDEV_PHY_ERR_TAG = 4,
0020 HTT_STATS_STRING_TAG = 5,
0021 HTT_STATS_TX_HWQ_CMN_TAG = 6,
0022 HTT_STATS_TX_HWQ_DIFS_LATENCY_TAG = 7,
0023 HTT_STATS_TX_HWQ_CMD_RESULT_TAG = 8,
0024 HTT_STATS_TX_HWQ_CMD_STALL_TAG = 9,
0025 HTT_STATS_TX_HWQ_FES_STATUS_TAG = 10,
0026 HTT_STATS_TX_TQM_GEN_MPDU_TAG = 11,
0027 HTT_STATS_TX_TQM_LIST_MPDU_TAG = 12,
0028 HTT_STATS_TX_TQM_LIST_MPDU_CNT_TAG = 13,
0029 HTT_STATS_TX_TQM_CMN_TAG = 14,
0030 HTT_STATS_TX_TQM_PDEV_TAG = 15,
0031 HTT_STATS_TX_TQM_CMDQ_STATUS_TAG = 16,
0032 HTT_STATS_TX_DE_EAPOL_PACKETS_TAG = 17,
0033 HTT_STATS_TX_DE_CLASSIFY_FAILED_TAG = 18,
0034 HTT_STATS_TX_DE_CLASSIFY_STATS_TAG = 19,
0035 HTT_STATS_TX_DE_CLASSIFY_STATUS_TAG = 20,
0036 HTT_STATS_TX_DE_ENQUEUE_PACKETS_TAG = 21,
0037 HTT_STATS_TX_DE_ENQUEUE_DISCARD_TAG = 22,
0038 HTT_STATS_TX_DE_CMN_TAG = 23,
0039 HTT_STATS_RING_IF_TAG = 24,
0040 HTT_STATS_TX_PDEV_MU_MIMO_STATS_TAG = 25,
0041 HTT_STATS_SFM_CMN_TAG = 26,
0042 HTT_STATS_SRING_STATS_TAG = 27,
0043 HTT_STATS_RX_PDEV_FW_STATS_TAG = 28,
0044 HTT_STATS_RX_PDEV_FW_RING_MPDU_ERR_TAG = 29,
0045 HTT_STATS_RX_PDEV_FW_MPDU_DROP_TAG = 30,
0046 HTT_STATS_RX_SOC_FW_STATS_TAG = 31,
0047 HTT_STATS_RX_SOC_FW_REFILL_RING_EMPTY_TAG = 32,
0048 HTT_STATS_RX_SOC_FW_REFILL_RING_NUM_REFILL_TAG = 33,
0049 HTT_STATS_TX_PDEV_RATE_STATS_TAG = 34,
0050 HTT_STATS_RX_PDEV_RATE_STATS_TAG = 35,
0051 HTT_STATS_TX_PDEV_SCHEDULER_TXQ_STATS_TAG = 36,
0052 HTT_STATS_TX_SCHED_CMN_TAG = 37,
0053 HTT_STATS_TX_PDEV_MUMIMO_MPDU_STATS_TAG = 38,
0054 HTT_STATS_SCHED_TXQ_CMD_POSTED_TAG = 39,
0055 HTT_STATS_RING_IF_CMN_TAG = 40,
0056 HTT_STATS_SFM_CLIENT_USER_TAG = 41,
0057 HTT_STATS_SFM_CLIENT_TAG = 42,
0058 HTT_STATS_TX_TQM_ERROR_STATS_TAG = 43,
0059 HTT_STATS_SCHED_TXQ_CMD_REAPED_TAG = 44,
0060 HTT_STATS_SRING_CMN_TAG = 45,
0061 HTT_STATS_TX_SELFGEN_AC_ERR_STATS_TAG = 46,
0062 HTT_STATS_TX_SELFGEN_CMN_STATS_TAG = 47,
0063 HTT_STATS_TX_SELFGEN_AC_STATS_TAG = 48,
0064 HTT_STATS_TX_SELFGEN_AX_STATS_TAG = 49,
0065 HTT_STATS_TX_SELFGEN_AX_ERR_STATS_TAG = 50,
0066 HTT_STATS_TX_HWQ_MUMIMO_SCH_STATS_TAG = 51,
0067 HTT_STATS_TX_HWQ_MUMIMO_MPDU_STATS_TAG = 52,
0068 HTT_STATS_TX_HWQ_MUMIMO_CMN_STATS_TAG = 53,
0069 HTT_STATS_HW_INTR_MISC_TAG = 54,
0070 HTT_STATS_HW_WD_TIMEOUT_TAG = 55,
0071 HTT_STATS_HW_PDEV_ERRS_TAG = 56,
0072 HTT_STATS_COUNTER_NAME_TAG = 57,
0073 HTT_STATS_TX_TID_DETAILS_TAG = 58,
0074 HTT_STATS_RX_TID_DETAILS_TAG = 59,
0075 HTT_STATS_PEER_STATS_CMN_TAG = 60,
0076 HTT_STATS_PEER_DETAILS_TAG = 61,
0077 HTT_STATS_PEER_TX_RATE_STATS_TAG = 62,
0078 HTT_STATS_PEER_RX_RATE_STATS_TAG = 63,
0079 HTT_STATS_PEER_MSDU_FLOWQ_TAG = 64,
0080 HTT_STATS_TX_DE_COMPL_STATS_TAG = 65,
0081 HTT_STATS_WHAL_TX_TAG = 66,
0082 HTT_STATS_TX_PDEV_SIFS_HIST_TAG = 67,
0083 HTT_STATS_RX_PDEV_FW_STATS_PHY_ERR_TAG = 68,
0084 HTT_STATS_TX_TID_DETAILS_V1_TAG = 69,
0085 HTT_STATS_PDEV_CCA_1SEC_HIST_TAG = 70,
0086 HTT_STATS_PDEV_CCA_100MSEC_HIST_TAG = 71,
0087 HTT_STATS_PDEV_CCA_STAT_CUMULATIVE_TAG = 72,
0088 HTT_STATS_PDEV_CCA_COUNTERS_TAG = 73,
0089 HTT_STATS_TX_PDEV_MPDU_STATS_TAG = 74,
0090 HTT_STATS_PDEV_TWT_SESSIONS_TAG = 75,
0091 HTT_STATS_PDEV_TWT_SESSION_TAG = 76,
0092 HTT_STATS_RX_REFILL_RXDMA_ERR_TAG = 77,
0093 HTT_STATS_RX_REFILL_REO_ERR_TAG = 78,
0094 HTT_STATS_RX_REO_RESOURCE_STATS_TAG = 79,
0095 HTT_STATS_TX_SOUNDING_STATS_TAG = 80,
0096 HTT_STATS_TX_PDEV_TX_PPDU_STATS_TAG = 81,
0097 HTT_STATS_TX_PDEV_TRIED_MPDU_CNT_HIST_TAG = 82,
0098 HTT_STATS_TX_HWQ_TRIED_MPDU_CNT_HIST_TAG = 83,
0099 HTT_STATS_TX_HWQ_TXOP_USED_CNT_HIST_TAG = 84,
0100 HTT_STATS_TX_DE_FW2WBM_RING_FULL_HIST_TAG = 85,
0101 HTT_STATS_SCHED_TXQ_SCHED_ORDER_SU_TAG = 86,
0102 HTT_STATS_SCHED_TXQ_SCHED_INELIGIBILITY_TAG = 87,
0103 HTT_STATS_PDEV_OBSS_PD_TAG = 88,
0104 HTT_STATS_HW_WAR_TAG = 89,
0105 HTT_STATS_RING_BACKPRESSURE_STATS_TAG = 90,
0106 HTT_STATS_PEER_CTRL_PATH_TXRX_STATS_TAG = 101,
0107 HTT_STATS_PDEV_TX_RATE_TXBF_STATS_TAG = 108,
0108 HTT_STATS_TXBF_OFDMA_NDPA_STATS_TAG = 113,
0109 HTT_STATS_TXBF_OFDMA_NDP_STATS_TAG = 114,
0110 HTT_STATS_TXBF_OFDMA_BRP_STATS_TAG = 115,
0111 HTT_STATS_TXBF_OFDMA_STEER_STATS_TAG = 116,
0112 HTT_STATS_PHY_COUNTERS_TAG = 121,
0113 HTT_STATS_PHY_STATS_TAG = 122,
0114
0115 HTT_STATS_MAX_TAG,
0116 };
0117
0118 #define HTT_STATS_MAX_STRING_SZ32 4
0119 #define HTT_STATS_MACID_INVALID 0xff
0120 #define HTT_TX_HWQ_MAX_DIFS_LATENCY_BINS 10
0121 #define HTT_TX_HWQ_MAX_CMD_RESULT_STATS 13
0122 #define HTT_TX_HWQ_MAX_CMD_STALL_STATS 5
0123 #define HTT_TX_HWQ_MAX_FES_RESULT_STATS 10
0124
0125 enum htt_tx_pdev_underrun_enum {
0126 HTT_STATS_TX_PDEV_NO_DATA_UNDERRUN = 0,
0127 HTT_STATS_TX_PDEV_DATA_UNDERRUN_BETWEEN_MPDU = 1,
0128 HTT_STATS_TX_PDEV_DATA_UNDERRUN_WITHIN_MPDU = 2,
0129 HTT_TX_PDEV_MAX_URRN_STATS = 3,
0130 };
0131
0132 #define HTT_TX_PDEV_MAX_FLUSH_REASON_STATS 71
0133 #define HTT_TX_PDEV_MAX_SIFS_BURST_STATS 9
0134 #define HTT_TX_PDEV_MAX_SIFS_BURST_HIST_STATS 10
0135 #define HTT_TX_PDEV_MAX_PHY_ERR_STATS 18
0136 #define HTT_TX_PDEV_SCHED_TX_MODE_MAX 4
0137 #define HTT_TX_PDEV_NUM_SCHED_ORDER_LOG 20
0138
0139 #define HTT_RX_STATS_REFILL_MAX_RING 4
0140 #define HTT_RX_STATS_RXDMA_MAX_ERR 16
0141 #define HTT_RX_STATS_FW_DROP_REASON_MAX 16
0142
0143
0144
0145 struct htt_stats_string_tlv {
0146 u32 data[0];
0147 } __packed;
0148
0149 #define HTT_STATS_MAC_ID GENMASK(7, 0)
0150
0151
0152 struct htt_tx_pdev_stats_cmn_tlv {
0153 u32 mac_id__word;
0154 u32 hw_queued;
0155 u32 hw_reaped;
0156 u32 underrun;
0157 u32 hw_paused;
0158 u32 hw_flush;
0159 u32 hw_filt;
0160 u32 tx_abort;
0161 u32 mpdu_requeued;
0162 u32 tx_xretry;
0163 u32 data_rc;
0164 u32 mpdu_dropped_xretry;
0165 u32 illgl_rate_phy_err;
0166 u32 cont_xretry;
0167 u32 tx_timeout;
0168 u32 pdev_resets;
0169 u32 phy_underrun;
0170 u32 txop_ovf;
0171 u32 seq_posted;
0172 u32 seq_failed_queueing;
0173 u32 seq_completed;
0174 u32 seq_restarted;
0175 u32 mu_seq_posted;
0176 u32 seq_switch_hw_paused;
0177 u32 next_seq_posted_dsr;
0178 u32 seq_posted_isr;
0179 u32 seq_ctrl_cached;
0180 u32 mpdu_count_tqm;
0181 u32 msdu_count_tqm;
0182 u32 mpdu_removed_tqm;
0183 u32 msdu_removed_tqm;
0184 u32 mpdus_sw_flush;
0185 u32 mpdus_hw_filter;
0186 u32 mpdus_truncated;
0187 u32 mpdus_ack_failed;
0188 u32 mpdus_expired;
0189 u32 mpdus_seq_hw_retry;
0190 u32 ack_tlv_proc;
0191 u32 coex_abort_mpdu_cnt_valid;
0192 u32 coex_abort_mpdu_cnt;
0193 u32 num_total_ppdus_tried_ota;
0194 u32 num_data_ppdus_tried_ota;
0195 u32 local_ctrl_mgmt_enqued;
0196 u32 local_ctrl_mgmt_freed;
0197 u32 local_data_enqued;
0198 u32 local_data_freed;
0199 u32 mpdu_tried;
0200 u32 isr_wait_seq_posted;
0201
0202 u32 tx_active_dur_us_low;
0203 u32 tx_active_dur_us_high;
0204 };
0205
0206
0207 struct htt_tx_pdev_stats_urrn_tlv_v {
0208 u32 urrn_stats[0];
0209 };
0210
0211
0212 struct htt_tx_pdev_stats_flush_tlv_v {
0213 u32 flush_errs[0];
0214 };
0215
0216
0217 struct htt_tx_pdev_stats_sifs_tlv_v {
0218 u32 sifs_status[0];
0219 };
0220
0221
0222 struct htt_tx_pdev_stats_phy_err_tlv_v {
0223 u32 phy_errs[0];
0224 };
0225
0226
0227 struct htt_tx_pdev_stats_sifs_hist_tlv_v {
0228 u32 sifs_hist_status[0];
0229 };
0230
0231 struct htt_tx_pdev_stats_tx_ppdu_stats_tlv_v {
0232 u32 num_data_ppdus_legacy_su;
0233 u32 num_data_ppdus_ac_su;
0234 u32 num_data_ppdus_ax_su;
0235 u32 num_data_ppdus_ac_su_txbf;
0236 u32 num_data_ppdus_ax_su_txbf;
0237 };
0238
0239
0240
0241
0242
0243
0244
0245
0246
0247
0248
0249
0250
0251 struct htt_tx_pdev_stats_tried_mpdu_cnt_hist_tlv_v {
0252 u32 hist_bin_size;
0253 u32 tried_mpdu_cnt_hist[];
0254 };
0255
0256
0257
0258
0259 #define HTT_STATS_MAX_HW_INTR_NAME_LEN 8
0260 struct htt_hw_stats_intr_misc_tlv {
0261
0262 u8 hw_intr_name[HTT_STATS_MAX_HW_INTR_NAME_LEN];
0263 u32 mask;
0264 u32 count;
0265 };
0266
0267 #define HTT_STATS_MAX_HW_MODULE_NAME_LEN 8
0268 struct htt_hw_stats_wd_timeout_tlv {
0269
0270 u8 hw_module_name[HTT_STATS_MAX_HW_MODULE_NAME_LEN];
0271 u32 count;
0272 };
0273
0274 struct htt_hw_stats_pdev_errs_tlv {
0275 u32 mac_id__word;
0276 u32 tx_abort;
0277 u32 tx_abort_fail_count;
0278 u32 rx_abort;
0279 u32 rx_abort_fail_count;
0280 u32 warm_reset;
0281 u32 cold_reset;
0282 u32 tx_flush;
0283 u32 tx_glb_reset;
0284 u32 tx_txq_reset;
0285 u32 rx_timeout_reset;
0286 };
0287
0288 struct htt_hw_stats_whal_tx_tlv {
0289 u32 mac_id__word;
0290 u32 last_unpause_ppdu_id;
0291 u32 hwsch_unpause_wait_tqm_write;
0292 u32 hwsch_dummy_tlv_skipped;
0293 u32 hwsch_misaligned_offset_received;
0294 u32 hwsch_reset_count;
0295 u32 hwsch_dev_reset_war;
0296 u32 hwsch_delayed_pause;
0297 u32 hwsch_long_delayed_pause;
0298 u32 sch_rx_ppdu_no_response;
0299 u32 sch_selfgen_response;
0300 u32 sch_rx_sifs_resp_trigger;
0301 };
0302
0303
0304 #define HTT_MSDU_FLOW_STATS_TX_FLOW_NO GENMASK(15, 0)
0305 #define HTT_MSDU_FLOW_STATS_TID_NUM GENMASK(19, 16)
0306 #define HTT_MSDU_FLOW_STATS_DROP_RULE BIT(20)
0307
0308 struct htt_msdu_flow_stats_tlv {
0309 u32 last_update_timestamp;
0310 u32 last_add_timestamp;
0311 u32 last_remove_timestamp;
0312 u32 total_processed_msdu_count;
0313 u32 cur_msdu_count_in_flowq;
0314 u32 sw_peer_id;
0315 u32 tx_flow_no__tid_num__drop_rule;
0316 u32 last_cycle_enqueue_count;
0317 u32 last_cycle_dequeue_count;
0318 u32 last_cycle_drop_count;
0319 u32 current_drop_th;
0320 };
0321
0322 #define MAX_HTT_TID_NAME 8
0323
0324 #define HTT_TX_TID_STATS_SW_PEER_ID GENMASK(15, 0)
0325 #define HTT_TX_TID_STATS_TID_NUM GENMASK(31, 16)
0326 #define HTT_TX_TID_STATS_NUM_SCHED_PENDING GENMASK(7, 0)
0327 #define HTT_TX_TID_STATS_NUM_PPDU_IN_HWQ GENMASK(15, 8)
0328
0329
0330 struct htt_tx_tid_stats_tlv {
0331
0332 u8 tid_name[MAX_HTT_TID_NAME];
0333 u32 sw_peer_id__tid_num;
0334 u32 num_sched_pending__num_ppdu_in_hwq;
0335 u32 tid_flags;
0336 u32 hw_queued;
0337 u32 hw_reaped;
0338 u32 mpdus_hw_filter;
0339
0340 u32 qdepth_bytes;
0341 u32 qdepth_num_msdu;
0342 u32 qdepth_num_mpdu;
0343 u32 last_scheduled_tsmp;
0344 u32 pause_module_id;
0345 u32 block_module_id;
0346 u32 tid_tx_airtime;
0347 };
0348
0349 #define HTT_TX_TID_STATS_V1_SW_PEER_ID GENMASK(15, 0)
0350 #define HTT_TX_TID_STATS_V1_TID_NUM GENMASK(31, 16)
0351 #define HTT_TX_TID_STATS_V1_NUM_SCHED_PENDING GENMASK(7, 0)
0352 #define HTT_TX_TID_STATS_V1_NUM_PPDU_IN_HWQ GENMASK(15, 8)
0353
0354
0355 struct htt_tx_tid_stats_v1_tlv {
0356
0357 u8 tid_name[MAX_HTT_TID_NAME];
0358 u32 sw_peer_id__tid_num;
0359 u32 num_sched_pending__num_ppdu_in_hwq;
0360 u32 tid_flags;
0361 u32 max_qdepth_bytes;
0362 u32 max_qdepth_n_msdus;
0363 u32 rsvd;
0364
0365 u32 qdepth_bytes;
0366 u32 qdepth_num_msdu;
0367 u32 qdepth_num_mpdu;
0368 u32 last_scheduled_tsmp;
0369 u32 pause_module_id;
0370 u32 block_module_id;
0371 u32 tid_tx_airtime;
0372 u32 allow_n_flags;
0373 u32 sendn_frms_allowed;
0374 };
0375
0376 #define HTT_RX_TID_STATS_SW_PEER_ID GENMASK(15, 0)
0377 #define HTT_RX_TID_STATS_TID_NUM GENMASK(31, 16)
0378
0379 struct htt_rx_tid_stats_tlv {
0380 u32 sw_peer_id__tid_num;
0381 u8 tid_name[MAX_HTT_TID_NAME];
0382 u32 dup_in_reorder;
0383 u32 dup_past_outside_window;
0384 u32 dup_past_within_window;
0385 u32 rxdesc_err_decrypt;
0386 u32 tid_rx_airtime;
0387 };
0388
0389 #define HTT_MAX_COUNTER_NAME 8
0390 struct htt_counter_tlv {
0391 u8 counter_name[HTT_MAX_COUNTER_NAME];
0392 u32 count;
0393 };
0394
0395 struct htt_peer_stats_cmn_tlv {
0396 u32 ppdu_cnt;
0397 u32 mpdu_cnt;
0398 u32 msdu_cnt;
0399 u32 pause_bitmap;
0400 u32 block_bitmap;
0401 u32 current_timestamp;
0402 u32 peer_tx_airtime;
0403 u32 peer_rx_airtime;
0404 s32 rssi;
0405 u32 peer_enqueued_count_low;
0406 u32 peer_enqueued_count_high;
0407 u32 peer_dequeued_count_low;
0408 u32 peer_dequeued_count_high;
0409 u32 peer_dropped_count_low;
0410 u32 peer_dropped_count_high;
0411 u32 ppdu_transmitted_bytes_low;
0412 u32 ppdu_transmitted_bytes_high;
0413 u32 peer_ttl_removed_count;
0414 u32 inactive_time;
0415 };
0416
0417 #define HTT_PEER_DETAILS_VDEV_ID GENMASK(7, 0)
0418 #define HTT_PEER_DETAILS_PDEV_ID GENMASK(15, 8)
0419 #define HTT_PEER_DETAILS_AST_IDX GENMASK(31, 16)
0420
0421 struct htt_peer_details_tlv {
0422 u32 peer_type;
0423 u32 sw_peer_id;
0424 u32 vdev_pdev_ast_idx;
0425 struct htt_mac_addr mac_addr;
0426 u32 peer_flags;
0427 u32 qpeer_flags;
0428 };
0429
0430 enum htt_stats_param_type {
0431 HTT_STATS_PREAM_OFDM,
0432 HTT_STATS_PREAM_CCK,
0433 HTT_STATS_PREAM_HT,
0434 HTT_STATS_PREAM_VHT,
0435 HTT_STATS_PREAM_HE,
0436 HTT_STATS_PREAM_RSVD,
0437 HTT_STATS_PREAM_RSVD1,
0438
0439 HTT_STATS_PREAM_COUNT,
0440 };
0441
0442 #define HTT_TX_PEER_STATS_NUM_MCS_COUNTERS 12
0443 #define HTT_TX_PEER_STATS_NUM_GI_COUNTERS 4
0444 #define HTT_TX_PEER_STATS_NUM_DCM_COUNTERS 5
0445 #define HTT_TX_PEER_STATS_NUM_BW_COUNTERS 4
0446 #define HTT_TX_PEER_STATS_NUM_SPATIAL_STREAMS 8
0447 #define HTT_TX_PEER_STATS_NUM_PREAMBLE_TYPES HTT_STATS_PREAM_COUNT
0448
0449 struct htt_tx_peer_rate_stats_tlv {
0450 u32 tx_ldpc;
0451 u32 rts_cnt;
0452 u32 ack_rssi;
0453
0454 u32 tx_mcs[HTT_TX_PEER_STATS_NUM_MCS_COUNTERS];
0455 u32 tx_su_mcs[HTT_TX_PEER_STATS_NUM_MCS_COUNTERS];
0456 u32 tx_mu_mcs[HTT_TX_PEER_STATS_NUM_MCS_COUNTERS];
0457
0458 u32 tx_nss[HTT_TX_PEER_STATS_NUM_SPATIAL_STREAMS];
0459
0460 u32 tx_bw[HTT_TX_PEER_STATS_NUM_BW_COUNTERS];
0461 u32 tx_stbc[HTT_TX_PEER_STATS_NUM_MCS_COUNTERS];
0462 u32 tx_pream[HTT_TX_PEER_STATS_NUM_PREAMBLE_TYPES];
0463
0464
0465
0466
0467 u32 tx_gi[HTT_TX_PEER_STATS_NUM_GI_COUNTERS][HTT_TX_PEER_STATS_NUM_MCS_COUNTERS];
0468
0469
0470 u32 tx_dcm[HTT_TX_PEER_STATS_NUM_DCM_COUNTERS];
0471
0472 };
0473
0474 #define HTT_RX_PEER_STATS_NUM_MCS_COUNTERS 12
0475 #define HTT_RX_PEER_STATS_NUM_GI_COUNTERS 4
0476 #define HTT_RX_PEER_STATS_NUM_DCM_COUNTERS 5
0477 #define HTT_RX_PEER_STATS_NUM_BW_COUNTERS 4
0478 #define HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS 8
0479 #define HTT_RX_PEER_STATS_NUM_PREAMBLE_TYPES HTT_STATS_PREAM_COUNT
0480
0481 struct htt_rx_peer_rate_stats_tlv {
0482 u32 nsts;
0483
0484
0485 u32 rx_ldpc;
0486
0487 u32 rts_cnt;
0488
0489 u32 rssi_mgmt;
0490 u32 rssi_data;
0491 u32 rssi_comb;
0492 u32 rx_mcs[HTT_RX_PEER_STATS_NUM_MCS_COUNTERS];
0493
0494 u32 rx_nss[HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS];
0495 u32 rx_dcm[HTT_RX_PEER_STATS_NUM_DCM_COUNTERS];
0496 u32 rx_stbc[HTT_RX_PEER_STATS_NUM_MCS_COUNTERS];
0497
0498 u32 rx_bw[HTT_RX_PEER_STATS_NUM_BW_COUNTERS];
0499 u32 rx_pream[HTT_RX_PEER_STATS_NUM_PREAMBLE_TYPES];
0500
0501 u8 rssi_chain[HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS]
0502 [HTT_RX_PEER_STATS_NUM_BW_COUNTERS];
0503
0504
0505 u32 rx_gi[HTT_RX_PEER_STATS_NUM_GI_COUNTERS]
0506 [HTT_RX_PEER_STATS_NUM_MCS_COUNTERS];
0507 };
0508
0509 enum htt_peer_stats_req_mode {
0510 HTT_PEER_STATS_REQ_MODE_NO_QUERY,
0511 HTT_PEER_STATS_REQ_MODE_QUERY_TQM,
0512 HTT_PEER_STATS_REQ_MODE_FLUSH_TQM,
0513 };
0514
0515 enum htt_peer_stats_tlv_enum {
0516 HTT_PEER_STATS_CMN_TLV = 0,
0517 HTT_PEER_DETAILS_TLV = 1,
0518 HTT_TX_PEER_RATE_STATS_TLV = 2,
0519 HTT_RX_PEER_RATE_STATS_TLV = 3,
0520 HTT_TX_TID_STATS_TLV = 4,
0521 HTT_RX_TID_STATS_TLV = 5,
0522 HTT_MSDU_FLOW_STATS_TLV = 6,
0523
0524 HTT_PEER_STATS_MAX_TLV = 31,
0525 };
0526
0527
0528
0529 struct htt_tx_hwq_mu_mimo_sch_stats_tlv {
0530 u32 mu_mimo_sch_posted;
0531 u32 mu_mimo_sch_failed;
0532 u32 mu_mimo_ppdu_posted;
0533 };
0534
0535 struct htt_tx_hwq_mu_mimo_mpdu_stats_tlv {
0536 u32 mu_mimo_mpdus_queued_usr;
0537 u32 mu_mimo_mpdus_tried_usr;
0538 u32 mu_mimo_mpdus_failed_usr;
0539 u32 mu_mimo_mpdus_requeued_usr;
0540 u32 mu_mimo_err_no_ba_usr;
0541 u32 mu_mimo_mpdu_underrun_usr;
0542 u32 mu_mimo_ampdu_underrun_usr;
0543 };
0544
0545 #define HTT_TX_HWQ_STATS_MAC_ID GENMASK(7, 0)
0546 #define HTT_TX_HWQ_STATS_HWQ_ID GENMASK(15, 8)
0547
0548 struct htt_tx_hwq_mu_mimo_cmn_stats_tlv {
0549 u32 mac_id__hwq_id__word;
0550 };
0551
0552
0553 struct htt_tx_hwq_stats_cmn_tlv {
0554 u32 mac_id__hwq_id__word;
0555
0556
0557 u32 xretry;
0558 u32 underrun_cnt;
0559 u32 flush_cnt;
0560 u32 filt_cnt;
0561 u32 null_mpdu_bmap;
0562 u32 user_ack_failure;
0563 u32 ack_tlv_proc;
0564 u32 sched_id_proc;
0565 u32 null_mpdu_tx_count;
0566 u32 mpdu_bmap_not_recvd;
0567
0568
0569 u32 num_bar;
0570 u32 rts;
0571 u32 cts2self;
0572 u32 qos_null;
0573
0574
0575 u32 mpdu_tried_cnt;
0576 u32 mpdu_queued_cnt;
0577 u32 mpdu_ack_fail_cnt;
0578 u32 mpdu_filt_cnt;
0579 u32 false_mpdu_ack_count;
0580
0581 u32 txq_timeout;
0582 };
0583
0584
0585 struct htt_tx_hwq_difs_latency_stats_tlv_v {
0586 u32 hist_intvl;
0587
0588 u32 difs_latency_hist[];
0589 };
0590
0591
0592 struct htt_tx_hwq_cmd_result_stats_tlv_v {
0593
0594 u32 cmd_result[0];
0595 };
0596
0597
0598 struct htt_tx_hwq_cmd_stall_stats_tlv_v {
0599
0600 u32 cmd_stall_status[0];
0601 };
0602
0603
0604 struct htt_tx_hwq_fes_result_stats_tlv_v {
0605
0606 u32 fes_result[0];
0607 };
0608
0609
0610
0611
0612
0613
0614
0615
0616
0617
0618
0619
0620
0621 struct htt_tx_hwq_tried_mpdu_cnt_hist_tlv_v {
0622 u32 hist_bin_size;
0623
0624 u32 tried_mpdu_cnt_hist[];
0625 };
0626
0627
0628
0629
0630
0631
0632
0633
0634
0635
0636
0637 struct htt_tx_hwq_txop_used_cnt_hist_tlv_v {
0638
0639 u32 txop_used_cnt_hist[0];
0640 };
0641
0642
0643 struct htt_tx_selfgen_cmn_stats_tlv {
0644 u32 mac_id__word;
0645 u32 su_bar;
0646 u32 rts;
0647 u32 cts2self;
0648 u32 qos_null;
0649 u32 delayed_bar_1;
0650 u32 delayed_bar_2;
0651 u32 delayed_bar_3;
0652 u32 delayed_bar_4;
0653 u32 delayed_bar_5;
0654 u32 delayed_bar_6;
0655 u32 delayed_bar_7;
0656 };
0657
0658 struct htt_tx_selfgen_ac_stats_tlv {
0659
0660 u32 ac_su_ndpa;
0661 u32 ac_su_ndp;
0662 u32 ac_mu_mimo_ndpa;
0663 u32 ac_mu_mimo_ndp;
0664 u32 ac_mu_mimo_brpoll_1;
0665 u32 ac_mu_mimo_brpoll_2;
0666 u32 ac_mu_mimo_brpoll_3;
0667 };
0668
0669 struct htt_tx_selfgen_ax_stats_tlv {
0670
0671 u32 ax_su_ndpa;
0672 u32 ax_su_ndp;
0673 u32 ax_mu_mimo_ndpa;
0674 u32 ax_mu_mimo_ndp;
0675 u32 ax_mu_mimo_brpoll_1;
0676 u32 ax_mu_mimo_brpoll_2;
0677 u32 ax_mu_mimo_brpoll_3;
0678 u32 ax_mu_mimo_brpoll_4;
0679 u32 ax_mu_mimo_brpoll_5;
0680 u32 ax_mu_mimo_brpoll_6;
0681 u32 ax_mu_mimo_brpoll_7;
0682 u32 ax_basic_trigger;
0683 u32 ax_bsr_trigger;
0684 u32 ax_mu_bar_trigger;
0685 u32 ax_mu_rts_trigger;
0686 u32 ax_ulmumimo_trigger;
0687 };
0688
0689 struct htt_tx_selfgen_ac_err_stats_tlv {
0690
0691 u32 ac_su_ndp_err;
0692 u32 ac_su_ndpa_err;
0693 u32 ac_mu_mimo_ndpa_err;
0694 u32 ac_mu_mimo_ndp_err;
0695 u32 ac_mu_mimo_brp1_err;
0696 u32 ac_mu_mimo_brp2_err;
0697 u32 ac_mu_mimo_brp3_err;
0698 };
0699
0700 struct htt_tx_selfgen_ax_err_stats_tlv {
0701
0702 u32 ax_su_ndp_err;
0703 u32 ax_su_ndpa_err;
0704 u32 ax_mu_mimo_ndpa_err;
0705 u32 ax_mu_mimo_ndp_err;
0706 u32 ax_mu_mimo_brp1_err;
0707 u32 ax_mu_mimo_brp2_err;
0708 u32 ax_mu_mimo_brp3_err;
0709 u32 ax_mu_mimo_brp4_err;
0710 u32 ax_mu_mimo_brp5_err;
0711 u32 ax_mu_mimo_brp6_err;
0712 u32 ax_mu_mimo_brp7_err;
0713 u32 ax_basic_trigger_err;
0714 u32 ax_bsr_trigger_err;
0715 u32 ax_mu_bar_trigger_err;
0716 u32 ax_mu_rts_trigger_err;
0717 u32 ax_ulmumimo_trigger_err;
0718 };
0719
0720
0721 #define HTT_TX_PDEV_STATS_NUM_AC_MUMIMO_USER_STATS 4
0722 #define HTT_TX_PDEV_STATS_NUM_AX_MUMIMO_USER_STATS 8
0723 #define HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS 74
0724 #define HTT_TX_PDEV_STATS_NUM_UL_MUMIMO_USER_STATS 8
0725
0726 struct htt_tx_pdev_mu_mimo_sch_stats_tlv {
0727
0728 u32 mu_mimo_sch_posted;
0729 u32 mu_mimo_sch_failed;
0730
0731 u32 mu_mimo_ppdu_posted;
0732
0733
0734
0735
0736
0737
0738 u32 ac_mu_mimo_sch_nusers[HTT_TX_PDEV_STATS_NUM_AC_MUMIMO_USER_STATS];
0739 u32 ax_mu_mimo_sch_nusers[HTT_TX_PDEV_STATS_NUM_AX_MUMIMO_USER_STATS];
0740 u32 ax_ofdma_sch_nusers[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
0741 u32 ax_ul_ofdma_basic_sch_nusers[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
0742 u32 ax_ul_ofdma_bsr_sch_nusers[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
0743 u32 ax_ul_ofdma_bar_sch_nusers[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
0744 u32 ax_ul_ofdma_brp_sch_nusers[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
0745
0746
0747
0748
0749
0750 u32 ax_ul_mumimo_basic_sch_nusers[HTT_TX_PDEV_STATS_NUM_UL_MUMIMO_USER_STATS];
0751
0752
0753
0754
0755 u32 ax_ul_mumimo_brp_sch_nusers[HTT_TX_PDEV_STATS_NUM_UL_MUMIMO_USER_STATS];
0756
0757 u32 ac_mu_mimo_sch_posted_per_grp_sz[HTT_TX_PDEV_STATS_NUM_AC_MUMIMO_USER_STATS];
0758 u32 ax_mu_mimo_sch_posted_per_grp_sz[HTT_TX_PDEV_STATS_NUM_AX_MUMIMO_USER_STATS];
0759 };
0760
0761 struct htt_tx_pdev_mu_mimo_mpdu_stats_tlv {
0762 u32 mu_mimo_mpdus_queued_usr;
0763 u32 mu_mimo_mpdus_tried_usr;
0764 u32 mu_mimo_mpdus_failed_usr;
0765 u32 mu_mimo_mpdus_requeued_usr;
0766 u32 mu_mimo_err_no_ba_usr;
0767 u32 mu_mimo_mpdu_underrun_usr;
0768 u32 mu_mimo_ampdu_underrun_usr;
0769
0770 u32 ax_mu_mimo_mpdus_queued_usr;
0771 u32 ax_mu_mimo_mpdus_tried_usr;
0772 u32 ax_mu_mimo_mpdus_failed_usr;
0773 u32 ax_mu_mimo_mpdus_requeued_usr;
0774 u32 ax_mu_mimo_err_no_ba_usr;
0775 u32 ax_mu_mimo_mpdu_underrun_usr;
0776 u32 ax_mu_mimo_ampdu_underrun_usr;
0777
0778 u32 ax_ofdma_mpdus_queued_usr;
0779 u32 ax_ofdma_mpdus_tried_usr;
0780 u32 ax_ofdma_mpdus_failed_usr;
0781 u32 ax_ofdma_mpdus_requeued_usr;
0782 u32 ax_ofdma_err_no_ba_usr;
0783 u32 ax_ofdma_mpdu_underrun_usr;
0784 u32 ax_ofdma_ampdu_underrun_usr;
0785 };
0786
0787 #define HTT_STATS_TX_SCHED_MODE_MU_MIMO_AC 1
0788 #define HTT_STATS_TX_SCHED_MODE_MU_MIMO_AX 2
0789 #define HTT_STATS_TX_SCHED_MODE_MU_OFDMA_AX 3
0790
0791 struct htt_tx_pdev_mpdu_stats_tlv {
0792
0793 u32 mpdus_queued_usr;
0794 u32 mpdus_tried_usr;
0795 u32 mpdus_failed_usr;
0796 u32 mpdus_requeued_usr;
0797 u32 err_no_ba_usr;
0798 u32 mpdu_underrun_usr;
0799 u32 ampdu_underrun_usr;
0800 u32 user_index;
0801 u32 tx_sched_mode;
0802 };
0803
0804
0805
0806 struct htt_sched_txq_cmd_posted_tlv_v {
0807 u32 sched_cmd_posted[0];
0808 };
0809
0810
0811 struct htt_sched_txq_cmd_reaped_tlv_v {
0812 u32 sched_cmd_reaped[0];
0813 };
0814
0815
0816 struct htt_sched_txq_sched_order_su_tlv_v {
0817 u32 sched_order_su[0];
0818 };
0819
0820 enum htt_sched_txq_sched_ineligibility_tlv_enum {
0821 HTT_SCHED_TID_SKIP_SCHED_MASK_DISABLED = 0,
0822 HTT_SCHED_TID_SKIP_NOTIFY_MPDU,
0823 HTT_SCHED_TID_SKIP_MPDU_STATE_INVALID,
0824 HTT_SCHED_TID_SKIP_SCHED_DISABLED,
0825 HTT_SCHED_TID_SKIP_TQM_BYPASS_CMD_PENDING,
0826 HTT_SCHED_TID_SKIP_SECOND_SU_SCHEDULE,
0827
0828 HTT_SCHED_TID_SKIP_CMD_SLOT_NOT_AVAIL,
0829 HTT_SCHED_TID_SKIP_NO_ENQ,
0830 HTT_SCHED_TID_SKIP_LOW_ENQ,
0831 HTT_SCHED_TID_SKIP_PAUSED,
0832 HTT_SCHED_TID_SKIP_UL,
0833 HTT_SCHED_TID_REMOVE_PAUSED,
0834 HTT_SCHED_TID_REMOVE_NO_ENQ,
0835 HTT_SCHED_TID_REMOVE_UL,
0836 HTT_SCHED_TID_QUERY,
0837 HTT_SCHED_TID_SU_ONLY,
0838 HTT_SCHED_TID_ELIGIBLE,
0839 HTT_SCHED_INELIGIBILITY_MAX,
0840 };
0841
0842
0843 struct htt_sched_txq_sched_ineligibility_tlv_v {
0844
0845 u32 sched_ineligibility[0];
0846 };
0847
0848 #define HTT_TX_PDEV_STATS_SCHED_PER_TXQ_MAC_ID GENMASK(7, 0)
0849 #define HTT_TX_PDEV_STATS_SCHED_PER_TXQ_ID GENMASK(15, 8)
0850
0851 struct htt_tx_pdev_stats_sched_per_txq_tlv {
0852 u32 mac_id__txq_id__word;
0853 u32 sched_policy;
0854 u32 last_sched_cmd_posted_timestamp;
0855 u32 last_sched_cmd_compl_timestamp;
0856 u32 sched_2_tac_lwm_count;
0857 u32 sched_2_tac_ring_full;
0858 u32 sched_cmd_post_failure;
0859 u32 num_active_tids;
0860 u32 num_ps_schedules;
0861 u32 sched_cmds_pending;
0862 u32 num_tid_register;
0863 u32 num_tid_unregister;
0864 u32 num_qstats_queried;
0865 u32 qstats_update_pending;
0866 u32 last_qstats_query_timestamp;
0867 u32 num_tqm_cmdq_full;
0868 u32 num_de_sched_algo_trigger;
0869 u32 num_rt_sched_algo_trigger;
0870 u32 num_tqm_sched_algo_trigger;
0871 u32 notify_sched;
0872 u32 dur_based_sendn_term;
0873 };
0874
0875 struct htt_stats_tx_sched_cmn_tlv {
0876
0877
0878
0879 u32 mac_id__word;
0880
0881 u32 current_timestamp;
0882 };
0883
0884
0885 #define HTT_TX_TQM_MAX_GEN_MPDU_END_REASON 16
0886 #define HTT_TX_TQM_MAX_LIST_MPDU_END_REASON 16
0887 #define HTT_TX_TQM_MAX_LIST_MPDU_CNT_HISTOGRAM_BINS 16
0888
0889
0890 struct htt_tx_tqm_gen_mpdu_stats_tlv_v {
0891 u32 gen_mpdu_end_reason[0];
0892 };
0893
0894
0895 struct htt_tx_tqm_list_mpdu_stats_tlv_v {
0896 u32 list_mpdu_end_reason[0];
0897 };
0898
0899
0900 struct htt_tx_tqm_list_mpdu_cnt_tlv_v {
0901 u32 list_mpdu_cnt_hist[0];
0902
0903 };
0904
0905 struct htt_tx_tqm_pdev_stats_tlv_v {
0906 u32 msdu_count;
0907 u32 mpdu_count;
0908 u32 remove_msdu;
0909 u32 remove_mpdu;
0910 u32 remove_msdu_ttl;
0911 u32 send_bar;
0912 u32 bar_sync;
0913 u32 notify_mpdu;
0914 u32 sync_cmd;
0915 u32 write_cmd;
0916 u32 hwsch_trigger;
0917 u32 ack_tlv_proc;
0918 u32 gen_mpdu_cmd;
0919 u32 gen_list_cmd;
0920 u32 remove_mpdu_cmd;
0921 u32 remove_mpdu_tried_cmd;
0922 u32 mpdu_queue_stats_cmd;
0923 u32 mpdu_head_info_cmd;
0924 u32 msdu_flow_stats_cmd;
0925 u32 remove_msdu_cmd;
0926 u32 remove_msdu_ttl_cmd;
0927 u32 flush_cache_cmd;
0928 u32 update_mpduq_cmd;
0929 u32 enqueue;
0930 u32 enqueue_notify;
0931 u32 notify_mpdu_at_head;
0932 u32 notify_mpdu_state_valid;
0933
0934
0935
0936
0937
0938
0939
0940
0941
0942
0943
0944
0945 u32 sched_udp_notify1;
0946 u32 sched_udp_notify2;
0947 u32 sched_nonudp_notify1;
0948 u32 sched_nonudp_notify2;
0949 };
0950
0951 struct htt_tx_tqm_cmn_stats_tlv {
0952 u32 mac_id__word;
0953 u32 max_cmdq_id;
0954 u32 list_mpdu_cnt_hist_intvl;
0955
0956
0957 u32 add_msdu;
0958 u32 q_empty;
0959 u32 q_not_empty;
0960 u32 drop_notification;
0961 u32 desc_threshold;
0962 };
0963
0964 struct htt_tx_tqm_error_stats_tlv {
0965
0966 u32 q_empty_failure;
0967 u32 q_not_empty_failure;
0968 u32 add_msdu_failure;
0969 };
0970
0971
0972 #define HTT_TX_TQM_CMDQ_STATUS_MAC_ID GENMASK(7, 0)
0973 #define HTT_TX_TQM_CMDQ_STATUS_CMDQ_ID GENMASK(15, 8)
0974
0975 struct htt_tx_tqm_cmdq_status_tlv {
0976 u32 mac_id__cmdq_id__word;
0977 u32 sync_cmd;
0978 u32 write_cmd;
0979 u32 gen_mpdu_cmd;
0980 u32 mpdu_queue_stats_cmd;
0981 u32 mpdu_head_info_cmd;
0982 u32 msdu_flow_stats_cmd;
0983 u32 remove_mpdu_cmd;
0984 u32 remove_msdu_cmd;
0985 u32 flush_cache_cmd;
0986 u32 update_mpduq_cmd;
0987 u32 update_msduq_cmd;
0988 };
0989
0990
0991
0992 struct htt_tx_de_eapol_packets_stats_tlv {
0993 u32 m1_packets;
0994 u32 m2_packets;
0995 u32 m3_packets;
0996 u32 m4_packets;
0997 u32 g1_packets;
0998 u32 g2_packets;
0999 };
1000
1001 struct htt_tx_de_classify_failed_stats_tlv {
1002 u32 ap_bss_peer_not_found;
1003 u32 ap_bcast_mcast_no_peer;
1004 u32 sta_delete_in_progress;
1005 u32 ibss_no_bss_peer;
1006 u32 invalid_vdev_type;
1007 u32 invalid_ast_peer_entry;
1008 u32 peer_entry_invalid;
1009 u32 ethertype_not_ip;
1010 u32 eapol_lookup_failed;
1011 u32 qpeer_not_allow_data;
1012 u32 fse_tid_override;
1013 u32 ipv6_jumbogram_zero_length;
1014 u32 qos_to_non_qos_in_prog;
1015 };
1016
1017 struct htt_tx_de_classify_stats_tlv {
1018 u32 arp_packets;
1019 u32 igmp_packets;
1020 u32 dhcp_packets;
1021 u32 host_inspected;
1022 u32 htt_included;
1023 u32 htt_valid_mcs;
1024 u32 htt_valid_nss;
1025 u32 htt_valid_preamble_type;
1026 u32 htt_valid_chainmask;
1027 u32 htt_valid_guard_interval;
1028 u32 htt_valid_retries;
1029 u32 htt_valid_bw_info;
1030 u32 htt_valid_power;
1031 u32 htt_valid_key_flags;
1032 u32 htt_valid_no_encryption;
1033 u32 fse_entry_count;
1034 u32 fse_priority_be;
1035 u32 fse_priority_high;
1036 u32 fse_priority_low;
1037 u32 fse_traffic_ptrn_be;
1038 u32 fse_traffic_ptrn_over_sub;
1039 u32 fse_traffic_ptrn_bursty;
1040 u32 fse_traffic_ptrn_interactive;
1041 u32 fse_traffic_ptrn_periodic;
1042 u32 fse_hwqueue_alloc;
1043 u32 fse_hwqueue_created;
1044 u32 fse_hwqueue_send_to_host;
1045 u32 mcast_entry;
1046 u32 bcast_entry;
1047 u32 htt_update_peer_cache;
1048 u32 htt_learning_frame;
1049 u32 fse_invalid_peer;
1050
1051
1052
1053
1054
1055 u32 mec_notify;
1056 };
1057
1058 struct htt_tx_de_classify_status_stats_tlv {
1059 u32 eok;
1060 u32 classify_done;
1061 u32 lookup_failed;
1062 u32 send_host_dhcp;
1063 u32 send_host_mcast;
1064 u32 send_host_unknown_dest;
1065 u32 send_host;
1066 u32 status_invalid;
1067 };
1068
1069 struct htt_tx_de_enqueue_packets_stats_tlv {
1070 u32 enqueued_pkts;
1071 u32 to_tqm;
1072 u32 to_tqm_bypass;
1073 };
1074
1075 struct htt_tx_de_enqueue_discard_stats_tlv {
1076 u32 discarded_pkts;
1077 u32 local_frames;
1078 u32 is_ext_msdu;
1079 };
1080
1081 struct htt_tx_de_compl_stats_tlv {
1082 u32 tcl_dummy_frame;
1083 u32 tqm_dummy_frame;
1084 u32 tqm_notify_frame;
1085 u32 fw2wbm_enq;
1086 u32 tqm_bypass_frame;
1087 };
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100 struct htt_tx_de_fw2wbm_ring_full_hist_tlv {
1101 u32 fw2wbm_ring_full_hist[0];
1102 };
1103
1104 struct htt_tx_de_cmn_stats_tlv {
1105 u32 mac_id__word;
1106
1107
1108 u32 tcl2fw_entry_count;
1109 u32 not_to_fw;
1110 u32 invalid_pdev_vdev_peer;
1111 u32 tcl_res_invalid_addrx;
1112 u32 wbm2fw_entry_count;
1113 u32 invalid_pdev;
1114 };
1115
1116
1117 #define HTT_STATS_LOW_WM_BINS 5
1118 #define HTT_STATS_HIGH_WM_BINS 5
1119
1120 #define HTT_RING_IF_STATS_NUM_ELEMS GENMASK(15, 0)
1121 #define HTT_RING_IF_STATS_PREFETCH_TAIL_INDEX GENMASK(31, 16)
1122 #define HTT_RING_IF_STATS_HEAD_IDX GENMASK(15, 0)
1123 #define HTT_RING_IF_STATS_TAIL_IDX GENMASK(31, 16)
1124 #define HTT_RING_IF_STATS_SHADOW_HEAD_IDX GENMASK(15, 0)
1125 #define HTT_RING_IF_STATS_SHADOW_TAIL_IDX GENMASK(31, 16)
1126 #define HTT_RING_IF_STATS_LWM_THRESH GENMASK(15, 0)
1127 #define HTT_RING_IF_STATS_HWM_THRESH GENMASK(31, 16)
1128
1129 struct htt_ring_if_stats_tlv {
1130 u32 base_addr;
1131 u32 elem_size;
1132 u32 num_elems__prefetch_tail_idx;
1133 u32 head_idx__tail_idx;
1134 u32 shadow_head_idx__shadow_tail_idx;
1135 u32 num_tail_incr;
1136 u32 lwm_thresh__hwm_thresh;
1137 u32 overrun_hit_count;
1138 u32 underrun_hit_count;
1139 u32 prod_blockwait_count;
1140 u32 cons_blockwait_count;
1141 u32 low_wm_hit_count[HTT_STATS_LOW_WM_BINS];
1142 u32 high_wm_hit_count[HTT_STATS_HIGH_WM_BINS];
1143 };
1144
1145 struct htt_ring_if_cmn_tlv {
1146 u32 mac_id__word;
1147 u32 num_records;
1148 };
1149
1150
1151
1152 struct htt_sfm_client_user_tlv_v {
1153
1154 u32 dwords_used_by_user_n[0];
1155 };
1156
1157 struct htt_sfm_client_tlv {
1158
1159 u32 client_id;
1160
1161 u32 buf_min;
1162
1163 u32 buf_max;
1164
1165 u32 buf_busy;
1166
1167 u32 buf_alloc;
1168
1169 u32 buf_avail;
1170
1171 u32 num_users;
1172 };
1173
1174 struct htt_sfm_cmn_tlv {
1175 u32 mac_id__word;
1176
1177
1178
1179 u32 buf_total;
1180
1181
1182
1183 u32 mem_empty;
1184
1185 u32 deallocate_bufs;
1186
1187 u32 num_records;
1188 };
1189
1190
1191 #define HTT_SRING_STATS_MAC_ID GENMASK(7, 0)
1192 #define HTT_SRING_STATS_RING_ID GENMASK(15, 8)
1193 #define HTT_SRING_STATS_ARENA GENMASK(23, 16)
1194 #define HTT_SRING_STATS_EP BIT(24)
1195 #define HTT_SRING_STATS_NUM_AVAIL_WORDS GENMASK(15, 0)
1196 #define HTT_SRING_STATS_NUM_VALID_WORDS GENMASK(31, 16)
1197 #define HTT_SRING_STATS_HEAD_PTR GENMASK(15, 0)
1198 #define HTT_SRING_STATS_TAIL_PTR GENMASK(31, 16)
1199 #define HTT_SRING_STATS_CONSUMER_EMPTY GENMASK(15, 0)
1200 #define HTT_SRING_STATS_PRODUCER_FULL GENMASK(31, 16)
1201 #define HTT_SRING_STATS_PREFETCH_COUNT GENMASK(15, 0)
1202 #define HTT_SRING_STATS_INTERNAL_TAIL_PTR GENMASK(31, 16)
1203
1204 struct htt_sring_stats_tlv {
1205 u32 mac_id__ring_id__arena__ep;
1206 u32 base_addr_lsb;
1207 u32 base_addr_msb;
1208 u32 ring_size;
1209 u32 elem_size;
1210
1211 u32 num_avail_words__num_valid_words;
1212 u32 head_ptr__tail_ptr;
1213 u32 consumer_empty__producer_full;
1214 u32 prefetch_count__internal_tail_ptr;
1215 };
1216
1217 struct htt_sring_cmn_tlv {
1218 u32 num_records;
1219 };
1220
1221
1222 #define HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS 12
1223 #define HTT_TX_PDEV_STATS_NUM_GI_COUNTERS 4
1224 #define HTT_TX_PDEV_STATS_NUM_DCM_COUNTERS 5
1225 #define HTT_TX_PDEV_STATS_NUM_BW_COUNTERS 4
1226 #define HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS 8
1227 #define HTT_TX_PDEV_STATS_NUM_PREAMBLE_TYPES HTT_STATS_PREAM_COUNT
1228 #define HTT_TX_PDEV_STATS_NUM_LEGACY_CCK_STATS 4
1229 #define HTT_TX_PDEV_STATS_NUM_LEGACY_OFDM_STATS 8
1230 #define HTT_TX_PDEV_STATS_NUM_LTF 4
1231
1232 #define HTT_TX_NUM_OF_SOUNDING_STATS_WORDS \
1233 (HTT_TX_PDEV_STATS_NUM_BW_COUNTERS * \
1234 HTT_TX_PDEV_STATS_NUM_AX_MUMIMO_USER_STATS)
1235
1236 struct htt_tx_pdev_rate_stats_tlv {
1237 u32 mac_id__word;
1238 u32 tx_ldpc;
1239 u32 rts_cnt;
1240
1241 u32 ack_rssi;
1242
1243 u32 tx_mcs[HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
1244
1245 u32 tx_su_mcs[HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
1246 u32 tx_mu_mcs[HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
1247
1248
1249 u32 tx_nss[HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS];
1250
1251 u32 tx_bw[HTT_TX_PDEV_STATS_NUM_BW_COUNTERS];
1252 u32 tx_stbc[HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
1253 u32 tx_pream[HTT_TX_PDEV_STATS_NUM_PREAMBLE_TYPES];
1254
1255
1256
1257
1258 u32 tx_gi[HTT_TX_PDEV_STATS_NUM_GI_COUNTERS][HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
1259
1260
1261 u32 tx_dcm[HTT_TX_PDEV_STATS_NUM_DCM_COUNTERS];
1262
1263 u32 rts_success;
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275 u32 tx_legacy_cck_rate[HTT_TX_PDEV_STATS_NUM_LEGACY_CCK_STATS];
1276 u32 tx_legacy_ofdm_rate[HTT_TX_PDEV_STATS_NUM_LEGACY_OFDM_STATS];
1277
1278 u32 ac_mu_mimo_tx_ldpc;
1279 u32 ax_mu_mimo_tx_ldpc;
1280 u32 ofdma_tx_ldpc;
1281
1282
1283
1284
1285
1286
1287
1288
1289 u32 tx_he_ltf[HTT_TX_PDEV_STATS_NUM_LTF];
1290
1291 u32 ac_mu_mimo_tx_mcs[HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
1292 u32 ax_mu_mimo_tx_mcs[HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
1293 u32 ofdma_tx_mcs[HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
1294
1295 u32 ac_mu_mimo_tx_nss[HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS];
1296 u32 ax_mu_mimo_tx_nss[HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS];
1297 u32 ofdma_tx_nss[HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS];
1298
1299 u32 ac_mu_mimo_tx_bw[HTT_TX_PDEV_STATS_NUM_BW_COUNTERS];
1300 u32 ax_mu_mimo_tx_bw[HTT_TX_PDEV_STATS_NUM_BW_COUNTERS];
1301 u32 ofdma_tx_bw[HTT_TX_PDEV_STATS_NUM_BW_COUNTERS];
1302
1303 u32 ac_mu_mimo_tx_gi[HTT_TX_PDEV_STATS_NUM_GI_COUNTERS]
1304 [HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
1305 u32 ax_mu_mimo_tx_gi[HTT_TX_PDEV_STATS_NUM_GI_COUNTERS]
1306 [HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
1307 u32 ofdma_tx_gi[HTT_TX_PDEV_STATS_NUM_GI_COUNTERS]
1308 [HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
1309 };
1310
1311
1312 #define HTT_RX_PDEV_STATS_NUM_LEGACY_CCK_STATS 4
1313 #define HTT_RX_PDEV_STATS_NUM_LEGACY_OFDM_STATS 8
1314 #define HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS 12
1315 #define HTT_RX_PDEV_STATS_NUM_GI_COUNTERS 4
1316 #define HTT_RX_PDEV_STATS_NUM_DCM_COUNTERS 5
1317 #define HTT_RX_PDEV_STATS_NUM_BW_COUNTERS 4
1318 #define HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS 8
1319 #define HTT_RX_PDEV_STATS_NUM_PREAMBLE_TYPES HTT_STATS_PREAM_COUNT
1320 #define HTT_RX_PDEV_MAX_OFDMA_NUM_USER 8
1321 #define HTT_RX_PDEV_STATS_RXEVM_MAX_PILOTS_PER_NSS 16
1322 #define HTT_RX_PDEV_STATS_NUM_RU_SIZE_COUNTERS 6
1323 #define HTT_RX_PDEV_MAX_ULMUMIMO_NUM_USER 8
1324
1325 struct htt_rx_pdev_rate_stats_tlv {
1326 u32 mac_id__word;
1327 u32 nsts;
1328
1329 u32 rx_ldpc;
1330 u32 rts_cnt;
1331
1332 u32 rssi_mgmt;
1333 u32 rssi_data;
1334 u32 rssi_comb;
1335 u32 rx_mcs[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];
1336
1337 u32 rx_nss[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS];
1338 u32 rx_dcm[HTT_RX_PDEV_STATS_NUM_DCM_COUNTERS];
1339 u32 rx_stbc[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];
1340
1341 u32 rx_bw[HTT_RX_PDEV_STATS_NUM_BW_COUNTERS];
1342 u32 rx_pream[HTT_RX_PDEV_STATS_NUM_PREAMBLE_TYPES];
1343 u8 rssi_chain[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS]
1344 [HTT_RX_PDEV_STATS_NUM_BW_COUNTERS];
1345
1346
1347
1348
1349
1350 u32 rx_gi[HTT_RX_PDEV_STATS_NUM_GI_COUNTERS][HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];
1351 s32 rssi_in_dbm;
1352
1353 u32 rx_11ax_su_ext;
1354 u32 rx_11ac_mumimo;
1355 u32 rx_11ax_mumimo;
1356 u32 rx_11ax_ofdma;
1357 u32 txbf;
1358 u32 rx_legacy_cck_rate[HTT_RX_PDEV_STATS_NUM_LEGACY_CCK_STATS];
1359 u32 rx_legacy_ofdm_rate[HTT_RX_PDEV_STATS_NUM_LEGACY_OFDM_STATS];
1360 u32 rx_active_dur_us_low;
1361 u32 rx_active_dur_us_high;
1362
1363 u32 rx_11ax_ul_ofdma;
1364
1365 u32 ul_ofdma_rx_mcs[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];
1366 u32 ul_ofdma_rx_gi[HTT_TX_PDEV_STATS_NUM_GI_COUNTERS]
1367 [HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];
1368 u32 ul_ofdma_rx_nss[HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS];
1369 u32 ul_ofdma_rx_bw[HTT_TX_PDEV_STATS_NUM_BW_COUNTERS];
1370 u32 ul_ofdma_rx_stbc;
1371 u32 ul_ofdma_rx_ldpc;
1372
1373
1374 u32 rx_ulofdma_non_data_ppdu[HTT_RX_PDEV_MAX_OFDMA_NUM_USER];
1375 u32 rx_ulofdma_data_ppdu[HTT_RX_PDEV_MAX_OFDMA_NUM_USER];
1376 u32 rx_ulofdma_mpdu_ok[HTT_RX_PDEV_MAX_OFDMA_NUM_USER];
1377 u32 rx_ulofdma_mpdu_fail[HTT_RX_PDEV_MAX_OFDMA_NUM_USER];
1378
1379 u32 nss_count;
1380 u32 pilot_count;
1381
1382 s32 rx_pilot_evm_db[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS]
1383 [HTT_RX_PDEV_STATS_RXEVM_MAX_PILOTS_PER_NSS];
1384
1385
1386
1387
1388 s32 rx_pilot_evm_db_mean[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS];
1389 s8 rx_ul_fd_rssi[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS]
1390 [HTT_RX_PDEV_MAX_OFDMA_NUM_USER];
1391
1392
1393
1394
1395
1396
1397
1398
1399 u32 per_chain_rssi_pkt_type;
1400 s8 rx_per_chain_rssi_in_dbm[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS]
1401 [HTT_RX_PDEV_STATS_NUM_BW_COUNTERS];
1402
1403 u32 rx_su_ndpa;
1404 u32 rx_11ax_su_txbf_mcs[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];
1405 u32 rx_mu_ndpa;
1406 u32 rx_11ax_mu_txbf_mcs[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];
1407 u32 rx_br_poll;
1408 u32 rx_11ax_dl_ofdma_mcs[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];
1409 u32 rx_11ax_dl_ofdma_ru[HTT_RX_PDEV_STATS_NUM_RU_SIZE_COUNTERS];
1410
1411 u32 rx_ulmumimo_non_data_ppdu[HTT_RX_PDEV_MAX_ULMUMIMO_NUM_USER];
1412 u32 rx_ulmumimo_data_ppdu[HTT_RX_PDEV_MAX_ULMUMIMO_NUM_USER];
1413 u32 rx_ulmumimo_mpdu_ok[HTT_RX_PDEV_MAX_ULMUMIMO_NUM_USER];
1414 u32 rx_ulmumimo_mpdu_fail[HTT_RX_PDEV_MAX_ULMUMIMO_NUM_USER];
1415 u32 rx_ulofdma_non_data_nusers[HTT_RX_PDEV_MAX_OFDMA_NUM_USER];
1416 u32 rx_ulofdma_data_nusers[HTT_RX_PDEV_MAX_OFDMA_NUM_USER];
1417 };
1418
1419
1420 struct htt_rx_soc_fw_stats_tlv {
1421 u32 fw_reo_ring_data_msdu;
1422 u32 fw_to_host_data_msdu_bcmc;
1423 u32 fw_to_host_data_msdu_uc;
1424 u32 ofld_remote_data_buf_recycle_cnt;
1425 u32 ofld_remote_free_buf_indication_cnt;
1426
1427 u32 ofld_buf_to_host_data_msdu_uc;
1428 u32 reo_fw_ring_to_host_data_msdu_uc;
1429
1430 u32 wbm_sw_ring_reap;
1431 u32 wbm_forward_to_host_cnt;
1432 u32 wbm_target_recycle_cnt;
1433
1434 u32 target_refill_ring_recycle_cnt;
1435 };
1436
1437
1438 struct htt_rx_soc_fw_refill_ring_empty_tlv_v {
1439 u32 refill_ring_empty_cnt[0];
1440 };
1441
1442
1443 struct htt_rx_soc_fw_refill_ring_num_refill_tlv_v {
1444 u32 refill_ring_num_refill[0];
1445 };
1446
1447
1448 enum htt_rx_rxdma_error_code_enum {
1449 HTT_RX_RXDMA_OVERFLOW_ERR = 0,
1450 HTT_RX_RXDMA_MPDU_LENGTH_ERR = 1,
1451 HTT_RX_RXDMA_FCS_ERR = 2,
1452 HTT_RX_RXDMA_DECRYPT_ERR = 3,
1453 HTT_RX_RXDMA_TKIP_MIC_ERR = 4,
1454 HTT_RX_RXDMA_UNECRYPTED_ERR = 5,
1455 HTT_RX_RXDMA_MSDU_LEN_ERR = 6,
1456 HTT_RX_RXDMA_MSDU_LIMIT_ERR = 7,
1457 HTT_RX_RXDMA_WIFI_PARSE_ERR = 8,
1458 HTT_RX_RXDMA_AMSDU_PARSE_ERR = 9,
1459 HTT_RX_RXDMA_SA_TIMEOUT_ERR = 10,
1460 HTT_RX_RXDMA_DA_TIMEOUT_ERR = 11,
1461 HTT_RX_RXDMA_FLOW_TIMEOUT_ERR = 12,
1462 HTT_RX_RXDMA_FLUSH_REQUEST = 13,
1463 HTT_RX_RXDMA_ERR_CODE_RVSD0 = 14,
1464 HTT_RX_RXDMA_ERR_CODE_RVSD1 = 15,
1465
1466
1467
1468
1469
1470
1471 HTT_RX_RXDMA_MAX_ERR_CODE
1472 };
1473
1474
1475 struct htt_rx_soc_fw_refill_ring_num_rxdma_err_tlv_v {
1476 u32 rxdma_err[0];
1477 };
1478
1479
1480 enum htt_rx_reo_error_code_enum {
1481 HTT_RX_REO_QUEUE_DESC_ADDR_ZERO = 0,
1482 HTT_RX_REO_QUEUE_DESC_NOT_VALID = 1,
1483 HTT_RX_AMPDU_IN_NON_BA = 2,
1484 HTT_RX_NON_BA_DUPLICATE = 3,
1485 HTT_RX_BA_DUPLICATE = 4,
1486 HTT_RX_REGULAR_FRAME_2K_JUMP = 5,
1487 HTT_RX_BAR_FRAME_2K_JUMP = 6,
1488 HTT_RX_REGULAR_FRAME_OOR = 7,
1489 HTT_RX_BAR_FRAME_OOR = 8,
1490 HTT_RX_BAR_FRAME_NO_BA_SESSION = 9,
1491 HTT_RX_BAR_FRAME_SN_EQUALS_SSN = 10,
1492 HTT_RX_PN_CHECK_FAILED = 11,
1493 HTT_RX_2K_ERROR_HANDLING_FLAG_SET = 12,
1494 HTT_RX_PN_ERROR_HANDLING_FLAG_SET = 13,
1495 HTT_RX_QUEUE_DESCRIPTOR_BLOCKED_SET = 14,
1496 HTT_RX_REO_ERR_CODE_RVSD = 15,
1497
1498
1499
1500
1501
1502
1503 HTT_RX_REO_MAX_ERR_CODE
1504 };
1505
1506
1507 struct htt_rx_soc_fw_refill_ring_num_reo_err_tlv_v {
1508 u32 reo_err[0];
1509 };
1510
1511
1512 #define HTT_STATS_SUBTYPE_MAX 16
1513
1514 struct htt_rx_pdev_fw_stats_tlv {
1515 u32 mac_id__word;
1516 u32 ppdu_recvd;
1517 u32 mpdu_cnt_fcs_ok;
1518 u32 mpdu_cnt_fcs_err;
1519 u32 tcp_msdu_cnt;
1520 u32 tcp_ack_msdu_cnt;
1521 u32 udp_msdu_cnt;
1522 u32 other_msdu_cnt;
1523 u32 fw_ring_mpdu_ind;
1524 u32 fw_ring_mgmt_subtype[HTT_STATS_SUBTYPE_MAX];
1525 u32 fw_ring_ctrl_subtype[HTT_STATS_SUBTYPE_MAX];
1526 u32 fw_ring_mcast_data_msdu;
1527 u32 fw_ring_bcast_data_msdu;
1528 u32 fw_ring_ucast_data_msdu;
1529 u32 fw_ring_null_data_msdu;
1530 u32 fw_ring_mpdu_drop;
1531 u32 ofld_local_data_ind_cnt;
1532 u32 ofld_local_data_buf_recycle_cnt;
1533 u32 drx_local_data_ind_cnt;
1534 u32 drx_local_data_buf_recycle_cnt;
1535 u32 local_nondata_ind_cnt;
1536 u32 local_nondata_buf_recycle_cnt;
1537
1538 u32 fw_status_buf_ring_refill_cnt;
1539 u32 fw_status_buf_ring_empty_cnt;
1540 u32 fw_pkt_buf_ring_refill_cnt;
1541 u32 fw_pkt_buf_ring_empty_cnt;
1542 u32 fw_link_buf_ring_refill_cnt;
1543 u32 fw_link_buf_ring_empty_cnt;
1544
1545 u32 host_pkt_buf_ring_refill_cnt;
1546 u32 host_pkt_buf_ring_empty_cnt;
1547 u32 mon_pkt_buf_ring_refill_cnt;
1548 u32 mon_pkt_buf_ring_empty_cnt;
1549 u32 mon_status_buf_ring_refill_cnt;
1550 u32 mon_status_buf_ring_empty_cnt;
1551 u32 mon_desc_buf_ring_refill_cnt;
1552 u32 mon_desc_buf_ring_empty_cnt;
1553 u32 mon_dest_ring_update_cnt;
1554 u32 mon_dest_ring_full_cnt;
1555
1556 u32 rx_suspend_cnt;
1557 u32 rx_suspend_fail_cnt;
1558 u32 rx_resume_cnt;
1559 u32 rx_resume_fail_cnt;
1560 u32 rx_ring_switch_cnt;
1561 u32 rx_ring_restore_cnt;
1562 u32 rx_flush_cnt;
1563 u32 rx_recovery_reset_cnt;
1564 };
1565
1566 #define HTT_STATS_PHY_ERR_MAX 43
1567
1568 struct htt_rx_pdev_fw_stats_phy_err_tlv {
1569 u32 mac_id__word;
1570 u32 total_phy_err_cnt;
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619 u32 phy_err[HTT_STATS_PHY_ERR_MAX];
1620 };
1621
1622
1623 struct htt_rx_pdev_fw_ring_mpdu_err_tlv_v {
1624
1625 u32 fw_ring_mpdu_err[0];
1626 };
1627
1628
1629 struct htt_rx_pdev_fw_mpdu_drop_tlv_v {
1630
1631 u32 fw_mpdu_drop[0];
1632 };
1633
1634 #define HTT_PDEV_CCA_STATS_TX_FRAME_INFO_PRESENT (0x1)
1635 #define HTT_PDEV_CCA_STATS_RX_FRAME_INFO_PRESENT (0x2)
1636 #define HTT_PDEV_CCA_STATS_RX_CLEAR_INFO_PRESENT (0x4)
1637 #define HTT_PDEV_CCA_STATS_MY_RX_FRAME_INFO_PRESENT (0x8)
1638 #define HTT_PDEV_CCA_STATS_USEC_CNT_INFO_PRESENT (0x10)
1639 #define HTT_PDEV_CCA_STATS_MED_RX_IDLE_INFO_PRESENT (0x20)
1640 #define HTT_PDEV_CCA_STATS_MED_TX_IDLE_GLOBAL_INFO_PRESENT (0x40)
1641 #define HTT_PDEV_CCA_STATS_CCA_OBBS_USEC_INFO_PRESENT (0x80)
1642
1643 struct htt_pdev_stats_cca_counters_tlv {
1644
1645 u32 tx_frame_usec;
1646 u32 rx_frame_usec;
1647 u32 rx_clear_usec;
1648 u32 my_rx_frame_usec;
1649 u32 usec_cnt;
1650 u32 med_rx_idle_usec;
1651 u32 med_tx_idle_global_usec;
1652 u32 cca_obss_usec;
1653 };
1654
1655 struct htt_pdev_cca_stats_hist_v1_tlv {
1656 u32 chan_num;
1657
1658 u32 num_records;
1659 u32 valid_cca_counters_bitmap;
1660 u32 collection_interval;
1661
1662
1663
1664
1665
1666
1667
1668
1669 };
1670
1671 struct htt_pdev_stats_twt_session_tlv {
1672 u32 vdev_id;
1673 struct htt_mac_addr peer_mac;
1674 u32 flow_id_flags;
1675
1676
1677
1678
1679 u32 dialog_id;
1680 u32 wake_dura_us;
1681 u32 wake_intvl_us;
1682 u32 sp_offset_us;
1683 };
1684
1685 struct htt_pdev_stats_twt_sessions_tlv {
1686 u32 pdev_id;
1687 u32 num_sessions;
1688 struct htt_pdev_stats_twt_session_tlv twt_session[];
1689 };
1690
1691 enum htt_rx_reo_resource_sample_id_enum {
1692
1693 HTT_RX_REO_RESOURCE_GLOBAL_LINK_DESC_COUNT_0 = 0,
1694 HTT_RX_REO_RESOURCE_GLOBAL_LINK_DESC_COUNT_1 = 1,
1695 HTT_RX_REO_RESOURCE_GLOBAL_LINK_DESC_COUNT_2 = 2,
1696
1697 HTT_RX_REO_RESOURCE_BUFFERS_USED_AC0 = 3,
1698 HTT_RX_REO_RESOURCE_BUFFERS_USED_AC1 = 4,
1699 HTT_RX_REO_RESOURCE_BUFFERS_USED_AC2 = 5,
1700 HTT_RX_REO_RESOURCE_BUFFERS_USED_AC3 = 6,
1701
1702 HTT_RX_REO_RESOURCE_AGING_NUM_QUEUES_AC0 = 7,
1703 HTT_RX_REO_RESOURCE_AGING_NUM_QUEUES_AC1 = 8,
1704 HTT_RX_REO_RESOURCE_AGING_NUM_QUEUES_AC2 = 9,
1705 HTT_RX_REO_RESOURCE_AGING_NUM_QUEUES_AC3 = 10,
1706
1707 HTT_RX_REO_RESOURCE_STATS_MAX = 16
1708 };
1709
1710 struct htt_rx_reo_resource_stats_tlv_v {
1711
1712 u32 sample_id;
1713 u32 total_max;
1714 u32 total_avg;
1715 u32 total_sample;
1716 u32 non_zeros_avg;
1717 u32 non_zeros_sample;
1718 u32 last_non_zeros_max;
1719 u32 last_non_zeros_min;
1720 u32 last_non_zeros_avg;
1721 u32 last_non_zeros_sample;
1722 };
1723
1724
1725
1726 enum htt_txbf_sound_steer_modes {
1727 HTT_IMPLICIT_TXBF_STEER_STATS = 0,
1728 HTT_EXPLICIT_TXBF_SU_SIFS_STEER_STATS = 1,
1729 HTT_EXPLICIT_TXBF_SU_RBO_STEER_STATS = 2,
1730 HTT_EXPLICIT_TXBF_MU_SIFS_STEER_STATS = 3,
1731 HTT_EXPLICIT_TXBF_MU_RBO_STEER_STATS = 4,
1732 HTT_TXBF_MAX_NUM_OF_MODES = 5
1733 };
1734
1735 enum htt_stats_sounding_tx_mode {
1736 HTT_TX_AC_SOUNDING_MODE = 0,
1737 HTT_TX_AX_SOUNDING_MODE = 1,
1738 };
1739
1740 struct htt_tx_sounding_stats_tlv {
1741 u32 tx_sounding_mode;
1742
1743 u32 cbf_20[HTT_TXBF_MAX_NUM_OF_MODES];
1744 u32 cbf_40[HTT_TXBF_MAX_NUM_OF_MODES];
1745 u32 cbf_80[HTT_TXBF_MAX_NUM_OF_MODES];
1746 u32 cbf_160[HTT_TXBF_MAX_NUM_OF_MODES];
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756 u32 sounding[HTT_TX_NUM_OF_SOUNDING_STATS_WORDS];
1757 };
1758
1759 struct htt_pdev_obss_pd_stats_tlv {
1760 u32 num_obss_tx_ppdu_success;
1761 u32 num_obss_tx_ppdu_failure;
1762 u32 num_sr_tx_transmissions;
1763 u32 num_spatial_reuse_opportunities;
1764 u32 num_non_srg_opportunities;
1765 u32 num_non_srg_ppdu_tried;
1766 u32 num_non_srg_ppdu_success;
1767 u32 num_srg_opportunities;
1768 u32 num_srg_ppdu_tried;
1769 u32 num_srg_ppdu_success;
1770 u32 num_psr_opportunities;
1771 u32 num_psr_ppdu_tried;
1772 u32 num_psr_ppdu_success;
1773 };
1774
1775 struct htt_ring_backpressure_stats_tlv {
1776 u32 pdev_id;
1777 u32 current_head_idx;
1778 u32 current_tail_idx;
1779 u32 num_htt_msgs_sent;
1780
1781
1782
1783 u32 backpressure_time_ms;
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797 u32 backpressure_hist[5];
1798 };
1799
1800 #define HTT_TX_TXBF_RATE_STATS_NUM_MCS_COUNTERS 14
1801 #define HTT_TX_TXBF_RATE_STATS_NUM_BW_COUNTERS 5
1802 #define HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS 8
1803
1804 struct htt_pdev_txrate_txbf_stats_tlv {
1805
1806 u32 tx_su_txbf_mcs[HTT_TX_TXBF_RATE_STATS_NUM_MCS_COUNTERS];
1807
1808 u32 tx_su_ibf_mcs[HTT_TX_TXBF_RATE_STATS_NUM_MCS_COUNTERS];
1809
1810 u32 tx_su_ol_mcs[HTT_TX_TXBF_RATE_STATS_NUM_MCS_COUNTERS];
1811
1812 u32 tx_su_txbf_nss[HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS];
1813
1814 u32 tx_su_ibf_nss[HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS];
1815
1816 u32 tx_su_ol_nss[HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS];
1817
1818 u32 tx_su_txbf_bw[HTT_TX_TXBF_RATE_STATS_NUM_BW_COUNTERS];
1819
1820 u32 tx_su_ibf_bw[HTT_TX_TXBF_RATE_STATS_NUM_BW_COUNTERS];
1821
1822 u32 tx_su_ol_bw[HTT_TX_TXBF_RATE_STATS_NUM_BW_COUNTERS];
1823 };
1824
1825 struct htt_txbf_ofdma_ndpa_stats_tlv {
1826
1827 u32 ax_ofdma_ndpa_queued[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1828
1829 u32 ax_ofdma_ndpa_tried[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1830
1831 u32 ax_ofdma_ndpa_flushed[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1832
1833 u32 ax_ofdma_ndpa_err[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1834 };
1835
1836 struct htt_txbf_ofdma_ndp_stats_tlv {
1837
1838 u32 ax_ofdma_ndp_queued[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1839
1840 u32 ax_ofdma_ndp_tried[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1841
1842 u32 ax_ofdma_ndp_flushed[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1843
1844 u32 ax_ofdma_ndp_err[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1845 };
1846
1847 struct htt_txbf_ofdma_brp_stats_tlv {
1848
1849 u32 ax_ofdma_brpoll_queued[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1850
1851 u32 ax_ofdma_brpoll_tried[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1852
1853 u32 ax_ofdma_brpoll_flushed[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1854
1855 u32 ax_ofdma_brp_err[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1856
1857
1858
1859 u32 ax_ofdma_brp_err_num_cbf_rcvd[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS + 1];
1860 };
1861
1862 struct htt_txbf_ofdma_steer_stats_tlv {
1863
1864 u32 ax_ofdma_num_ppdu_steer[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1865
1866 u32 ax_ofdma_num_ppdu_ol[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1867
1868
1869
1870 u32 ax_ofdma_num_usrs_prefetch[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1871
1872 u32 ax_ofdma_num_usrs_sound[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1873
1874 u32 ax_ofdma_num_usrs_force_sound[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
1875 };
1876
1877 #define HTT_MAX_RX_PKT_CNT 8
1878 #define HTT_MAX_RX_PKT_CRC_PASS_CNT 8
1879 #define HTT_MAX_PER_BLK_ERR_CNT 20
1880 #define HTT_MAX_RX_OTA_ERR_CNT 14
1881 #define HTT_STATS_MAX_CHAINS 8
1882 #define ATH11K_STATS_MGMT_FRM_TYPE_MAX 16
1883
1884 struct htt_phy_counters_tlv {
1885
1886 u32 rx_ofdma_timing_err_cnt;
1887
1888
1889
1890
1891 u32 rx_cck_fail_cnt;
1892
1893 u32 mactx_abort_cnt;
1894
1895 u32 macrx_abort_cnt;
1896
1897 u32 phytx_abort_cnt;
1898
1899 u32 phyrx_abort_cnt;
1900
1901 u32 phyrx_defer_abort_cnt;
1902
1903 u32 rx_gain_adj_lstf_event_cnt;
1904
1905 u32 rx_gain_adj_non_legacy_cnt;
1906
1907
1908
1909
1910
1911 u32 rx_pkt_cnt[HTT_MAX_RX_PKT_CNT];
1912
1913
1914
1915
1916
1917 u32 rx_pkt_crc_pass_cnt[HTT_MAX_RX_PKT_CRC_PASS_CNT];
1918
1919
1920
1921
1922
1923
1924
1925 u32 per_blk_err_cnt[HTT_MAX_PER_BLK_ERR_CNT];
1926
1927
1928
1929
1930
1931
1932
1933
1934 u32 rx_ota_err_cnt[HTT_MAX_RX_OTA_ERR_CNT];
1935 };
1936
1937 struct htt_phy_stats_tlv {
1938
1939 s32 nf_chain[HTT_STATS_MAX_CHAINS];
1940
1941 u32 false_radar_cnt;
1942
1943 u32 radar_cs_cnt;
1944
1945
1946
1947
1948
1949 s32 ani_level;
1950
1951 u32 fw_run_time;
1952 };
1953
1954 struct htt_peer_ctrl_path_txrx_stats_tlv {
1955
1956 u8 peer_mac_addr[ETH_ALEN];
1957 u8 rsvd[2];
1958
1959 u32 peer_tx_mgmt_subtype[ATH11K_STATS_MGMT_FRM_TYPE_MAX];
1960
1961 u32 peer_rx_mgmt_subtype[ATH11K_STATS_MGMT_FRM_TYPE_MAX];
1962 };
1963
1964 #ifdef CONFIG_ATH11K_DEBUGFS
1965
1966 void ath11k_debugfs_htt_stats_init(struct ath11k *ar);
1967 void ath11k_debugfs_htt_ext_stats_handler(struct ath11k_base *ab,
1968 struct sk_buff *skb);
1969 int ath11k_debugfs_htt_stats_req(struct ath11k *ar);
1970
1971 #else
1972
1973 static inline void ath11k_debugfs_htt_stats_init(struct ath11k *ar)
1974 {
1975 }
1976
1977 static inline void ath11k_debugfs_htt_ext_stats_handler(struct ath11k_base *ab,
1978 struct sk_buff *skb)
1979 {
1980 }
1981
1982 static inline int ath11k_debugfs_htt_stats_req(struct ath11k *ar)
1983 {
1984 return 0;
1985 }
1986
1987 #endif
1988
1989 #endif