mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-12-20 10:51:27 +00:00
559 lines
22 KiB
Diff
559 lines
22 KiB
Diff
--- a/drivers/net/wireless/ath/ath11k/debugfs.h
|
|
+++ b/drivers/net/wireless/ath/ath11k/debugfs.h
|
|
@@ -38,6 +38,10 @@ enum ath11k_dbg_htt_ext_stats_type {
|
|
ATH11K_DBG_HTT_EXT_STATS_TX_SOUNDING_INFO = 22,
|
|
ATH11K_DBG_HTT_EXT_STATS_PDEV_OBSS_PD_STATS = 23,
|
|
ATH11K_DBG_HTT_EXT_STATS_RING_BACKPRESSURE_STATS = 24,
|
|
+ ATH11K_DBG_HTT_EXT_STATS_LATENCY_PROF_STATS = 25,
|
|
+ ATH11K_DBG_HTT_EXT_STATS_PDEV_UL_TRIG_STATS = 26,
|
|
+ ATH11K_DBG_HTT_EXT_STATS_PDEV_UL_MUMIMO_TRIG_STATS = 27,
|
|
+ ATH11K_DBG_HTT_EXT_STATS_FSE_RX = 28,
|
|
ATH11K_DBG_HTT_EXT_STATS_PEER_CTRL_PATH_TXRX_STATS = 29,
|
|
ATH11K_DBG_HTT_EXT_STATS_PDEV_TX_RATE_TXBF_STATS = 31,
|
|
ATH11K_DBG_HTT_EXT_STATS_TXBF_OFDMA = 32,
|
|
--- a/drivers/net/wireless/ath/ath11k/debugfs_htt_stats.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/debugfs_htt_stats.c
|
|
@@ -3725,6 +3725,370 @@ static inline void htt_print_backpressur
|
|
}
|
|
}
|
|
|
|
+static inline void htt_print_latency_prof_stats_tlv_v(const void *tag_buf,
|
|
+ struct debug_htt_stats_req *stats_req)
|
|
+{
|
|
+ const struct htt_latency_prof_stats_tlv *htt_stats_buf = tag_buf;
|
|
+ u8 *buf = stats_req->buf;
|
|
+ u32 len = stats_req->buf_len;
|
|
+ u32 buf_len = ATH11K_HTT_STATS_BUF_SIZE;
|
|
+
|
|
+ if (htt_stats_buf->print_header == 1) {
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "HTT_STATS_LATENCY_PROF_TLV:\n");
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "| prof_name\t| cnt\t| min\t| max\t| last\t| tot\t| avg\t| hist_intvl\t| hist\t|\n");
|
|
+ }
|
|
+
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "|%s| %8u| %8u| %8u| %8u| %8u| %8u| %8u| %4u:%4u:%4u|\n",
|
|
+ htt_stats_buf->latency_prof_name, htt_stats_buf->cnt,
|
|
+ htt_stats_buf->min, htt_stats_buf->max, htt_stats_buf->last,
|
|
+ htt_stats_buf->tot, htt_stats_buf->avg,
|
|
+ htt_stats_buf->hist_intvl, htt_stats_buf->hist[0],
|
|
+ htt_stats_buf->hist[1], htt_stats_buf->hist[2]);
|
|
+}
|
|
+
|
|
+static inline void htt_print_latency_prof_ctx_tlv(const void *tag_buf,
|
|
+ struct debug_htt_stats_req *stats_req)
|
|
+{
|
|
+ const struct htt_latency_prof_ctx_tlv *htt_stats_buf = tag_buf;
|
|
+ u8 *buf = stats_req->buf;
|
|
+ u32 len = stats_req->buf_len;
|
|
+ u32 buf_len = ATH11K_HTT_STATS_BUF_SIZE;
|
|
+
|
|
+ len += scnprintf(buf + len, buf_len - len, "HTT_STATS_LATENCY_CTX_TLV:\n");
|
|
+ len += scnprintf(buf + len, buf_len - len, "duration= %u\n",
|
|
+ htt_stats_buf->duration);
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "tx_msdu_cnt = %u\n", htt_stats_buf->tx_msdu_cnt);
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "tx_mpdu_cnt = %u\n", htt_stats_buf->tx_mpdu_cnt);
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "rx_msdu_cnt = %u\n", htt_stats_buf->rx_msdu_cnt);
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "rx_mpdu_cnt = %u\n", htt_stats_buf->rx_mpdu_cnt);
|
|
+
|
|
+ stats_req->buf_len = len;
|
|
+}
|
|
+
|
|
+static inline void htt_print_latency_prof_cnt(const void *tag_buf,
|
|
+ struct debug_htt_stats_req *stats_req)
|
|
+{
|
|
+ const struct htt_latency_prof_cnt_tlv *htt_stats_buf = tag_buf;
|
|
+ u8 *buf = stats_req->buf;
|
|
+ u32 len = stats_req->buf_len;
|
|
+ u32 buf_len = ATH11K_HTT_STATS_BUF_SIZE;
|
|
+
|
|
+ len += scnprintf(buf + len, buf_len - len, "prof_enable_cnt = %u\n",
|
|
+ htt_stats_buf->prof_enable_cnt);
|
|
+
|
|
+ stats_req->buf_len = len;
|
|
+}
|
|
+
|
|
+static inline void htt_print_ul_ofdma_user_stats(const void *tag_buf,
|
|
+ struct debug_htt_stats_req *stats_req)
|
|
+{
|
|
+ const struct htt_rx_pdev_ul_ofdma_user_stats_tlv *htt_ul_user_stats_buf = tag_buf;
|
|
+ u8 *buf = stats_req->buf;
|
|
+ u32 len = stats_req->buf_len;
|
|
+ u32 buf_len = ATH11K_HTT_STATS_BUF_SIZE;
|
|
+
|
|
+ if (htt_ul_user_stats_buf->user_index == 0) {
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "HTT_RX_PDEV_UL_OFDMA_USER_STAS_TLV\n");
|
|
+ }
|
|
+
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "rx_ulofdma_non_data_ppdu_%u = %u\n",
|
|
+ htt_ul_user_stats_buf->user_index,
|
|
+ htt_ul_user_stats_buf->rx_ulofdma_non_data_ppdu);
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "rx_ulofdma_data_ppdu_%u = %u\n",
|
|
+ htt_ul_user_stats_buf->user_index,
|
|
+ htt_ul_user_stats_buf->rx_ulofdma_data_ppdu);
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "rx_ulofdma_mpdu_ok_%u = %u\n",
|
|
+ htt_ul_user_stats_buf->user_index,
|
|
+ htt_ul_user_stats_buf->rx_ulofdma_mpdu_ok);
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "rx_ulofdma_mpdu_fail_%u = %u\n",
|
|
+ htt_ul_user_stats_buf->user_index,
|
|
+ htt_ul_user_stats_buf->rx_ulofdma_mpdu_fail);
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "rx_ulofdma_non_data_nusers_%u = %u\n",
|
|
+ htt_ul_user_stats_buf->user_index,
|
|
+ htt_ul_user_stats_buf->rx_ulofdma_non_data_nusers);
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "rx_ulofdma_data_nusers_%u = %u\n",
|
|
+ htt_ul_user_stats_buf->user_index,
|
|
+ htt_ul_user_stats_buf->rx_ulofdma_data_nusers);
|
|
+
|
|
+ stats_req->buf_len = len;
|
|
+}
|
|
+
|
|
+static inline void htt_print_ul_ofdma_trigger_stats(const void *tag_buf,
|
|
+ struct debug_htt_stats_req *stats_req)
|
|
+{
|
|
+ const struct htt_rx_pdev_ul_trigger_stats_tlv *htt_trigger_stats_buf = tag_buf;
|
|
+ u8 *buf = stats_req->buf;
|
|
+ u32 len = stats_req->buf_len;
|
|
+ u32 buf_len = ATH11K_HTT_STATS_BUF_SIZE;
|
|
+ u8 j;
|
|
+
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "HTT_RX_PDEV_UL_TRIGGER_STATS_TLV:\n");
|
|
+ len += scnprintf(buf + len, buf_len - len, "mac_id = %lu\n",
|
|
+ FIELD_GET(HTT_STATS_MAC_ID,
|
|
+ htt_trigger_stats_buf->mac_id__word));
|
|
+ len += scnprintf(buf + len, buf_len - len, "rx_11ax_ul_ofdma = %u\n",
|
|
+ htt_trigger_stats_buf->rx_11ax_ul_ofdma);
|
|
+
|
|
+ PRINT_ARRAY_TO_BUF(buf, len, htt_trigger_stats_buf->ul_ofdma_rx_mcs,
|
|
+ "ul_ofdma_rx_mcs",
|
|
+ HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS, "\n");
|
|
+ PRINT_ARRAY_TO_BUF(buf, len, htt_trigger_stats_buf->ul_ofdma_rx_mcs_ext,
|
|
+ "ul_ofdma_rx_mcs_ext",
|
|
+ HTT_RX_PDEV_STATS_NUM_EMCS_COUNTERS, "\n");
|
|
+
|
|
+ for (j = 0; j < HTT_RX_PDEV_STATS_NUM_GI_COUNTERS; j++) {
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "ul_ofdma_rx_gi[%u] = ", j);
|
|
+ PRINT_ARRAY_TO_BUF(buf, len,
|
|
+ htt_trigger_stats_buf->ul_ofdma_rx_gi[j],
|
|
+ NULL, HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS,
|
|
+ "\n");
|
|
+
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "ul_ofdma_rx_gi_ext[%u] = ", j);
|
|
+ PRINT_ARRAY_TO_BUF(buf, len,
|
|
+ htt_trigger_stats_buf->ul_ofdma_rx_gie[j],
|
|
+ NULL, HTT_RX_PDEV_STATS_NUM_EMCS_COUNTERS,
|
|
+ "\n");
|
|
+ }
|
|
+
|
|
+ PRINT_ARRAY_TO_BUF(buf, len, htt_trigger_stats_buf->ul_ofdma_rx_nss,
|
|
+ "ul_ofdma_rx_nss",
|
|
+ HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS, "\n");
|
|
+
|
|
+ PRINT_ARRAY_TO_BUF(buf, len, htt_trigger_stats_buf->ul_ofdma_rx_bw,
|
|
+ "ul_ofdma_rx_bw", HTT_RX_PDEV_STATS_NUM_BW_COUNTERS,
|
|
+ "\n");
|
|
+
|
|
+ len += scnprintf(buf + len, buf_len - len, "ul_ofdma_rx_stbc = %u\n",
|
|
+ htt_trigger_stats_buf->ul_ofdma_rx_stbc);
|
|
+ len += scnprintf(buf + len, buf_len - len, "ul_ofdma_rx_ldpc = %u\n",
|
|
+ htt_trigger_stats_buf->ul_ofdma_rx_ldpc);
|
|
+
|
|
+ PRINT_ARRAY_TO_BUF(buf, len,
|
|
+ htt_trigger_stats_buf->rx_ulofdma_data_ru_size_ppdu,
|
|
+ "rx_ulofdma_non_data_ru_size_ppdu",
|
|
+ HTT_RX_PDEV_STATS_NUM_RU_SIZE_COUNTERS, "\n");
|
|
+ PRINT_ARRAY_TO_BUF(buf, len,
|
|
+ htt_trigger_stats_buf->rx_ulofdma_non_data_ru_size_ppdu,
|
|
+ "rx_ulofdma_data_ru_size_ppdu",
|
|
+ HTT_RX_PDEV_STATS_NUM_RU_SIZE_COUNTERS, "\n");
|
|
+
|
|
+ len += scnprintf(buf + len, buf_len - len, "\n\n");
|
|
+
|
|
+ stats_req->buf_len = len;
|
|
+}
|
|
+
|
|
+static inline void htt_print_ul_mumimo_trig_stats(const void *tag_buf,
|
|
+ struct debug_htt_stats_req *stats_req)
|
|
+{
|
|
+ const struct htt_rx_pdev_ul_mumimo_trig_stats_tlv *htt_ul_mumimo_trig_stats_buf =
|
|
+ tag_buf;
|
|
+ u8 *buf = stats_req->buf;
|
|
+ u32 len = stats_req->buf_len;
|
|
+ u32 buf_len = ATH11K_HTT_STATS_BUF_SIZE;
|
|
+ u8 j;
|
|
+
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "HTT_RX_PDEV_UL_MUMIMO_TRIG_STATS_TLV:\n");
|
|
+ len += scnprintf(buf + len, buf_len - len, "mac_id = %lu\n",
|
|
+ FIELD_GET(HTT_STATS_MAC_ID,
|
|
+ htt_ul_mumimo_trig_stats_buf->mac_id__word));
|
|
+
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "rx_11ax_ul_mumimo = %u\n",
|
|
+ htt_ul_mumimo_trig_stats_buf->rx_11ax_ul_mumimo);
|
|
+
|
|
+ PRINT_ARRAY_TO_BUF(buf, len,
|
|
+ htt_ul_mumimo_trig_stats_buf->ul_mumimo_rx_mcs,
|
|
+ "ul_mumimo_rx_mcs",
|
|
+ HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS, "\n");
|
|
+ PRINT_ARRAY_TO_BUF(buf, len,
|
|
+ htt_ul_mumimo_trig_stats_buf->ul_mumimo_rx_mcs_ext,
|
|
+ "ul_mumimo_ext_rx_mcs",
|
|
+ HTT_RX_PDEV_STATS_NUM_EMCS_COUNTERS, "\n");
|
|
+
|
|
+ for (j = 0; j < HTT_RX_PDEV_STATS_NUM_GI_COUNTERS; j++) {
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "ul_mumimo_rx_gi[%u] = ", j);
|
|
+ PRINT_ARRAY_TO_BUF(buf, len,
|
|
+ htt_ul_mumimo_trig_stats_buf->ul_mumimo_rx_gi[j],
|
|
+ NULL, HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS,
|
|
+ "\n");
|
|
+
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "ul_mumimo_rx_gi_ext[%u] = ", j);
|
|
+ PRINT_ARRAY_TO_BUF(buf, len,
|
|
+ htt_ul_mumimo_trig_stats_buf->ul_mumimo_rx_gie[j],
|
|
+ NULL, HTT_RX_PDEV_STATS_NUM_EMCS_COUNTERS,
|
|
+ "\n");
|
|
+ }
|
|
+
|
|
+ PRINT_ARRAY_TO_BUF(buf, len,
|
|
+ htt_ul_mumimo_trig_stats_buf->ul_mumimo_rx_nss,
|
|
+ "ul_mumimo_rx_nss",
|
|
+ HTT_RX_PDEV_STATS_ULNUM_SPATIAL_STREAMS, "\n");
|
|
+
|
|
+ PRINT_ARRAY_TO_BUF(buf, len,
|
|
+ htt_ul_mumimo_trig_stats_buf->ul_mumimo_rx_bw,
|
|
+ "ul_mumimo_rx_bw",
|
|
+ HTT_RX_PDEV_STATS_NUM_BW_COUNTERS, "\n");
|
|
+
|
|
+ len += scnprintf(buf + len, buf_len - len, "ul_mumimo_rx_stbc = %u\n",
|
|
+ htt_ul_mumimo_trig_stats_buf->ul_mumimo_rx_stbc);
|
|
+ len += scnprintf(buf + len, buf_len - len, "ul_mumimo_rx_ldpc = %u\n",
|
|
+ htt_ul_mumimo_trig_stats_buf->ul_mumimo_rx_ldpc);
|
|
+ len += scnprintf(buf + len, buf_len - len, "\n\n");
|
|
+
|
|
+ stats_req->buf_len = len;
|
|
+}
|
|
+
|
|
+static inline void htt_print_ul_mimo_user_stats(const void *tag_buf,
|
|
+ struct debug_htt_stats_req *stats_req)
|
|
+{
|
|
+ const struct htt_rx_pdev_ul_mimo_user_stats_tlv *htt_ul_user_stats_buf = tag_buf;
|
|
+ u8 *buf = stats_req->buf;
|
|
+ u32 len = stats_req->buf_len;
|
|
+ u32 buf_len = ATH11K_HTT_STATS_BUF_SIZE;
|
|
+
|
|
+ if (htt_ul_user_stats_buf->user_index > HTT_RX_PDEV_MAX_ULMUMIMO_NUM_USER) {
|
|
+ if (htt_ul_user_stats_buf->user_index == 0) {
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "HTT_STATS_RX_PDEV_UL_MIMO_USER_STATS_TLV\n");
|
|
+ }
|
|
+
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "rx_ulmumimo_non_data_ppdu_%u = %u\n",
|
|
+ htt_ul_user_stats_buf->user_index,
|
|
+ htt_ul_user_stats_buf->rx_ulmumimo_non_data_ppdu);
|
|
+
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "rx_ulmumimo_data_ppdu_%u = %u\n",
|
|
+ htt_ul_user_stats_buf->user_index,
|
|
+ htt_ul_user_stats_buf->rx_ulmumimo_data_ppdu);
|
|
+
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "rx_ulmumimo_mpdu_ok_%u = %u\n",
|
|
+ htt_ul_user_stats_buf->user_index,
|
|
+ htt_ul_user_stats_buf->rx_ulmumimo_mpdu_ok);
|
|
+
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "rx_ulmumimo_mpdu_fail_%u = %u\n",
|
|
+ htt_ul_user_stats_buf->user_index,
|
|
+ htt_ul_user_stats_buf->rx_ulmumimo_mpdu_fail);
|
|
+ }
|
|
+
|
|
+ stats_req->buf_len = len;
|
|
+}
|
|
+
|
|
+static inline void htt_print_rx_fse_stats_tlv(const void *tag_buf,
|
|
+ struct debug_htt_stats_req *stats_req)
|
|
+{
|
|
+ const struct htt_rx_fse_stats_tlv *htt_stats_buf = tag_buf;
|
|
+ u8 *buf = stats_req->buf;
|
|
+ u32 len = stats_req->buf_len;
|
|
+ u32 buf_len = ATH11K_HTT_STATS_BUF_SIZE;
|
|
+
|
|
+ len += scnprintf(buf + len, buf_len - len, "HTT_STATS_RX_FSE_STATS_TLV:\n");
|
|
+ len += scnprintf(buf + len, buf_len - len, "=== Software RX FSE STATS ===\n");
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "Enable count = %u\n", htt_stats_buf->fse_enable_cnt);
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "Disable count = %u\n", htt_stats_buf->fse_disable_cnt);
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "Cache Invalidate Entry Count = %u\n",
|
|
+ htt_stats_buf->fse_cache_invalidate_entry_cnt);
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "Full Cache Invalidate Count = %u\n",
|
|
+ htt_stats_buf->fse_full_cache_invalidate_cnt);
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "=== Hardware RX FSE STATS ===\n");
|
|
+ len += scnprintf(buf + len, buf_len - len, "Cache hits Count = %u\n",
|
|
+ htt_stats_buf->fse_num_cache_hits_cnt);
|
|
+ len += scnprintf(buf + len, buf_len - len, "Cache No. of searches = %u\n",
|
|
+ htt_stats_buf->fse_num_searches_cnt);
|
|
+ len += scnprintf(buf + len, buf_len - len, "Cache occupancy Peak Count:\n");
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ " [0] = %u [1-16] = %u [17-32] = %u\n",
|
|
+ htt_stats_buf->fse_cache_occupancy_peak_cnt[0],
|
|
+ htt_stats_buf->fse_cache_occupancy_peak_cnt[1],
|
|
+ htt_stats_buf->fse_cache_occupancy_peak_cnt[2]);
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "[33-48] = %u [49-64] = %u [65-80] = %u\n",
|
|
+ htt_stats_buf->fse_cache_occupancy_peak_cnt[3],
|
|
+ htt_stats_buf->fse_cache_occupancy_peak_cnt[4],
|
|
+ htt_stats_buf->fse_cache_occupancy_peak_cnt[5]);
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "[81-96] = %u [97-112] = %u [113-127] = %u [128] = %u\n",
|
|
+ htt_stats_buf->fse_cache_occupancy_peak_cnt[6],
|
|
+ htt_stats_buf->fse_cache_occupancy_peak_cnt[7],
|
|
+ htt_stats_buf->fse_cache_occupancy_peak_cnt[8],
|
|
+ htt_stats_buf->fse_cache_occupancy_peak_cnt[9]);
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "Cache occupancy Current Count:\n");
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ " [0] = %u [1-16] = %u [17-32] = %u\n",
|
|
+ htt_stats_buf->fse_cache_occupancy_curr_cnt[0],
|
|
+ htt_stats_buf->fse_cache_occupancy_curr_cnt[1],
|
|
+ htt_stats_buf->fse_cache_occupancy_curr_cnt[2]);
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "[33-48] = %u [49-64] = %u [65-80] = %u\n",
|
|
+ htt_stats_buf->fse_cache_occupancy_curr_cnt[3],
|
|
+ htt_stats_buf->fse_cache_occupancy_curr_cnt[4],
|
|
+ htt_stats_buf->fse_cache_occupancy_curr_cnt[5]);
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "[81-96] = %u [97-112] = %u [113-127] = %u [128] = %u\n",
|
|
+ htt_stats_buf->fse_cache_occupancy_curr_cnt[6],
|
|
+ htt_stats_buf->fse_cache_occupancy_curr_cnt[7],
|
|
+ htt_stats_buf->fse_cache_occupancy_curr_cnt[8],
|
|
+ htt_stats_buf->fse_cache_occupancy_curr_cnt[9]);
|
|
+ len += scnprintf(buf + len, buf_len - len, "Cache search Square Count:\n");
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ " [0] = %u [1-50] = %u [51-100] = %u\n",
|
|
+ htt_stats_buf->fse_search_stat_square_cnt[0],
|
|
+ htt_stats_buf->fse_search_stat_square_cnt[1],
|
|
+ htt_stats_buf->fse_search_stat_square_cnt[2]);
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "[101-200] = %u [201-255] = %u [256] = %u\n\n",
|
|
+ htt_stats_buf->fse_search_stat_square_cnt[3],
|
|
+ htt_stats_buf->fse_search_stat_square_cnt[4],
|
|
+ htt_stats_buf->fse_search_stat_square_cnt[5]);
|
|
+
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "Cache search Peak Pending Count:\n");
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ " [0] = %u [1-2] = %u [3-4] = %u [Greater/Equal to 5] = %u\n",
|
|
+ htt_stats_buf->fse_search_stat_peak_cnt[0],
|
|
+ htt_stats_buf->fse_search_stat_peak_cnt[1],
|
|
+ htt_stats_buf->fse_search_stat_peak_cnt[2],
|
|
+ htt_stats_buf->fse_search_stat_peak_cnt[3]);
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "Cache search Number of Pending Count:\n");
|
|
+ len += scnprintf(buf + len, buf_len - len,
|
|
+ "[0] = %u [1-2] = %u [3-4] = %u [Greater/Equal to 5] = %u\n",
|
|
+ htt_stats_buf->fse_search_stat_search_pending_cnt[0],
|
|
+ htt_stats_buf->fse_search_stat_search_pending_cnt[1],
|
|
+ htt_stats_buf->fse_search_stat_search_pending_cnt[2],
|
|
+ htt_stats_buf->fse_search_stat_search_pending_cnt[3]);
|
|
+
|
|
+ stats_req->buf_len = len;
|
|
+}
|
|
+
|
|
static inline
|
|
void htt_print_pdev_tx_rate_txbf_stats_tlv(const void *tag_buf,
|
|
struct debug_htt_stats_req *stats_req)
|
|
@@ -4404,6 +4768,30 @@ static int ath11k_dbg_htt_ext_stats_pars
|
|
case HTT_STATS_RING_BACKPRESSURE_STATS_TAG:
|
|
htt_print_backpressure_stats_tlv_v(tag_buf, user_data);
|
|
break;
|
|
+ case HTT_STATS_LATENCY_PROF_STATS_TAG:
|
|
+ htt_print_latency_prof_stats_tlv_v(tag_buf, stats_req);
|
|
+ break;
|
|
+ case HTT_STATS_LATENCY_CTX_TAG:
|
|
+ htt_print_latency_prof_ctx_tlv(tag_buf, stats_req);
|
|
+ break;
|
|
+ case HTT_STATS_LATENCY_CNT_TAG:
|
|
+ htt_print_latency_prof_cnt(tag_buf, stats_req);
|
|
+ break;
|
|
+ case HTT_STATS_RX_PDEV_UL_TRIG_STATS_TAG:
|
|
+ htt_print_ul_ofdma_trigger_stats(tag_buf, stats_req);
|
|
+ break;
|
|
+ case HTT_STATS_RX_PDEV_UL_OFDMA_USER_STATS_TAG:
|
|
+ htt_print_ul_ofdma_user_stats(tag_buf, stats_req);
|
|
+ break;
|
|
+ case HTT_STATS_RX_PDEV_UL_MIMO_USER_STATS_TAG:
|
|
+ htt_print_ul_mimo_user_stats(tag_buf, stats_req);
|
|
+ break;
|
|
+ case HTT_STATS_RX_PDEV_UL_MUMIMO_TRIG_STATS_TAG:
|
|
+ htt_print_ul_mumimo_trig_stats(tag_buf, stats_req);
|
|
+ break;
|
|
+ case HTT_STATS_RX_FSE_STATS_TAG:
|
|
+ htt_print_rx_fse_stats_tlv(tag_buf, stats_req);
|
|
+ break;
|
|
case HTT_STATS_PDEV_TX_RATE_TXBF_STATS_TAG:
|
|
htt_print_pdev_tx_rate_txbf_stats_tlv(tag_buf, stats_req);
|
|
break;
|
|
--- a/drivers/net/wireless/ath/ath11k/debugfs_htt_stats.h
|
|
+++ b/drivers/net/wireless/ath/ath11k/debugfs_htt_stats.h
|
|
@@ -103,6 +103,14 @@ enum htt_tlv_tag_t {
|
|
HTT_STATS_PDEV_OBSS_PD_TAG = 88,
|
|
HTT_STATS_HW_WAR_TAG = 89,
|
|
HTT_STATS_RING_BACKPRESSURE_STATS_TAG = 90,
|
|
+ HTT_STATS_LATENCY_PROF_STATS_TAG = 91,
|
|
+ HTT_STATS_LATENCY_CTX_TAG = 92,
|
|
+ HTT_STATS_LATENCY_CNT_TAG = 93,
|
|
+ HTT_STATS_RX_PDEV_UL_TRIG_STATS_TAG = 94,
|
|
+ HTT_STATS_RX_PDEV_UL_OFDMA_USER_STATS_TAG = 95,
|
|
+ HTT_STATS_RX_PDEV_UL_MIMO_USER_STATS_TAG = 96,
|
|
+ HTT_STATS_RX_PDEV_UL_MUMIMO_TRIG_STATS_TAG = 97,
|
|
+ HTT_STATS_RX_FSE_STATS_TAG = 98,
|
|
HTT_STATS_PEER_CTRL_PATH_TXRX_STATS_TAG = 101,
|
|
HTT_STATS_PDEV_TX_RATE_TXBF_STATS_TAG = 108,
|
|
HTT_STATS_TXBF_OFDMA_NDPA_STATS_TAG = 113,
|
|
@@ -1312,13 +1320,17 @@ struct htt_tx_pdev_rate_stats_tlv {
|
|
#define HTT_RX_PDEV_STATS_NUM_LEGACY_CCK_STATS 4
|
|
#define HTT_RX_PDEV_STATS_NUM_LEGACY_OFDM_STATS 8
|
|
#define HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS 12
|
|
+#define HTT_RX_PDEV_STATS_NUM_EMCS_COUNTERS 2
|
|
#define HTT_RX_PDEV_STATS_NUM_GI_COUNTERS 4
|
|
#define HTT_RX_PDEV_STATS_NUM_DCM_COUNTERS 5
|
|
#define HTT_RX_PDEV_STATS_NUM_BW_COUNTERS 4
|
|
#define HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS 8
|
|
+#define HTT_RX_PDEV_STATS_ULNUM_SPATIAL_STREAMS 8
|
|
#define HTT_RX_PDEV_STATS_NUM_PREAMBLE_TYPES HTT_STATS_PREAM_COUNT
|
|
#define HTT_RX_PDEV_MAX_OFDMA_NUM_USER 8
|
|
+#define HTT_RX_PDEV_MAX_ULMUMIMO_NUM_USER 8
|
|
#define HTT_RX_PDEV_STATS_RXEVM_MAX_PILOTS_PER_NSS 16
|
|
+#define HTT_RX_PDEV_STATS_NUM_RU_SIZE_160MHZ_CNTRS 7
|
|
#define HTT_RX_PDEV_STATS_NUM_RU_SIZE_COUNTERS 6
|
|
#define HTT_RX_PDEV_MAX_ULMUMIMO_NUM_USER 8
|
|
|
|
@@ -1797,6 +1809,105 @@ struct htt_ring_backpressure_stats_tlv {
|
|
u32 backpressure_hist[5];
|
|
};
|
|
|
|
+#define HTT_LATENCY_PROFILE_MAX_HIST 3
|
|
+#define HTT_STATS_MAX_PROF_STATS_NAME_LEN 32
|
|
+
|
|
+struct htt_latency_prof_stats_tlv {
|
|
+ u32 print_header;
|
|
+ u8 latency_prof_name[HTT_STATS_MAX_PROF_STATS_NAME_LEN];
|
|
+ u32 cnt;
|
|
+ u32 min;
|
|
+ u32 max;
|
|
+ u32 last;
|
|
+ u32 tot;
|
|
+ u32 avg;
|
|
+ u32 hist_intvl;
|
|
+ u32 hist[HTT_LATENCY_PROFILE_MAX_HIST];
|
|
+};
|
|
+
|
|
+struct htt_latency_prof_ctx_tlv {
|
|
+ u32 duration;
|
|
+ u32 tx_msdu_cnt;
|
|
+ u32 tx_mpdu_cnt;
|
|
+ u32 tx_ppdu_cnt;
|
|
+ u32 rx_msdu_cnt;
|
|
+ u32 rx_mpdu_cnt;
|
|
+};
|
|
+
|
|
+struct htt_latency_prof_cnt_tlv {
|
|
+ u32 prof_enable_cnt;
|
|
+};
|
|
+
|
|
+struct htt_rx_pdev_ul_ofdma_user_stats_tlv {
|
|
+ u32 user_index;
|
|
+ u32 rx_ulofdma_non_data_ppdu;
|
|
+ u32 rx_ulofdma_data_ppdu;
|
|
+ u32 rx_ulofdma_mpdu_ok;
|
|
+ u32 rx_ulofdma_mpdu_fail;
|
|
+ u32 rx_ulofdma_non_data_nusers;
|
|
+ u32 rx_ulofdma_data_nusers;
|
|
+};
|
|
+
|
|
+struct htt_rx_pdev_ul_trigger_stats_tlv {
|
|
+ u32 mac_id__word;
|
|
+ u32 rx_11ax_ul_ofdma;
|
|
+ u32 ul_ofdma_rx_mcs[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];
|
|
+ u32 ul_ofdma_rx_gi[HTT_RX_PDEV_STATS_NUM_GI_COUNTERS]
|
|
+ [HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];
|
|
+ u32 ul_ofdma_rx_nss[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS];
|
|
+ u32 ul_ofdma_rx_bw[HTT_RX_PDEV_STATS_NUM_BW_COUNTERS];
|
|
+ u32 ul_ofdma_rx_stbc;
|
|
+ u32 ul_ofdma_rx_ldpc;
|
|
+ u32 rx_ulofdma_data_ru_size_ppdu[HTT_RX_PDEV_STATS_NUM_RU_SIZE_160MHZ_CNTRS];
|
|
+ u32 rx_ulofdma_non_data_ru_size_ppdu[HTT_RX_PDEV_STATS_NUM_RU_SIZE_160MHZ_CNTRS];
|
|
+ u32 ul_ofdma_rx_mcs_ext[HTT_RX_PDEV_STATS_NUM_EMCS_COUNTERS];
|
|
+ u32 ul_ofdma_rx_gie[HTT_RX_PDEV_STATS_NUM_GI_COUNTERS]
|
|
+ [HTT_RX_PDEV_STATS_NUM_EMCS_COUNTERS];
|
|
+};
|
|
+
|
|
+struct htt_rx_pdev_ul_mumimo_trig_stats_tlv {
|
|
+ u32 mac_id__word;
|
|
+ u32 rx_11ax_ul_mumimo;
|
|
+ u32 ul_mumimo_rx_mcs[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];
|
|
+ u32 ul_mumimo_rx_gi[HTT_RX_PDEV_STATS_NUM_GI_COUNTERS]
|
|
+ [HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];
|
|
+ u32 ul_mumimo_rx_nss[HTT_RX_PDEV_STATS_ULNUM_SPATIAL_STREAMS];
|
|
+ u32 ul_mumimo_rx_bw[HTT_RX_PDEV_STATS_NUM_BW_COUNTERS];
|
|
+ u32 ul_mumimo_rx_stbc;
|
|
+ u32 ul_mumimo_rx_ldpc;
|
|
+ u32 ul_mumimo_rx_mcs_ext[HTT_RX_PDEV_STATS_NUM_EMCS_COUNTERS];
|
|
+ u32 ul_mumimo_rx_gie[HTT_RX_PDEV_STATS_NUM_GI_COUNTERS]
|
|
+ [HTT_RX_PDEV_STATS_NUM_EMCS_COUNTERS];
|
|
+};
|
|
+
|
|
+struct htt_rx_pdev_ul_mimo_user_stats_tlv {
|
|
+ u32 user_index;
|
|
+ u32 rx_ulmumimo_non_data_ppdu;
|
|
+ u32 rx_ulmumimo_data_ppdu;
|
|
+ u32 rx_ulmumimo_mpdu_ok;
|
|
+ u32 rx_ulmumimo_mpdu_fail;
|
|
+};
|
|
+
|
|
+#define HTT_RX_MAX_PEAK_OCCUPANCY_INDEX 10
|
|
+#define HTT_RX_MAX_CURRENT_OCCUPANCY_INDEX 10
|
|
+#define HTT_RX_SQUARE_INDEX 6
|
|
+#define HTT_RX_MAX_PEAK_SEARCH_INDEX 4
|
|
+#define HTT_RX_MAX_PENDING_SEARCH_INDEX 4
|
|
+
|
|
+struct htt_rx_fse_stats_tlv {
|
|
+ u32 fse_enable_cnt;
|
|
+ u32 fse_disable_cnt;
|
|
+ u32 fse_cache_invalidate_entry_cnt;
|
|
+ u32 fse_full_cache_invalidate_cnt;
|
|
+ u32 fse_num_cache_hits_cnt;
|
|
+ u32 fse_num_searches_cnt;
|
|
+ u32 fse_cache_occupancy_peak_cnt[HTT_RX_MAX_PEAK_OCCUPANCY_INDEX];
|
|
+ u32 fse_cache_occupancy_curr_cnt[HTT_RX_MAX_CURRENT_OCCUPANCY_INDEX];
|
|
+ u32 fse_search_stat_square_cnt[HTT_RX_SQUARE_INDEX];
|
|
+ u32 fse_search_stat_peak_cnt[HTT_RX_MAX_PEAK_SEARCH_INDEX];
|
|
+ u32 fse_search_stat_search_pending_cnt[HTT_RX_MAX_PENDING_SEARCH_INDEX];
|
|
+};
|
|
+
|
|
#define HTT_TX_TXBF_RATE_STATS_NUM_MCS_COUNTERS 14
|
|
#define HTT_TX_TXBF_RATE_STATS_NUM_BW_COUNTERS 5
|
|
#define HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS 8
|