wlan-ap-Telecominfraproject/feeds/wifi-ax/mac80211/patches/qca/088-ath11k-add-htt-stats.patch
John Crispin 528a778e38 open-converged-wireless: Import 21.02 based uCentral tree
Signed-off-by: John Crispin <john@phrozen.org>
2021-03-25 12:19:47 +01:00

637 lines
24 KiB
Diff

drivers/net/wireless/ath/ath11k/debug.h | 6 +-
drivers/net/wireless/ath/ath11k/debug_htt_stats.c | 463 ++++++++++++++++++++++
drivers/net/wireless/ath/ath11k/debug_htt_stats.h | 108 +++++
3 files changed, 576 insertions(+), 1 deletion(-)
--- a/drivers/net/wireless/ath/ath11k/debug.h
+++ b/drivers/net/wireless/ath/ath11k/debug.h
@@ -56,8 +56,12 @@ enum ath11k_dbg_htt_ext_stats_type {
ATH11K_DBG_HTT_EXT_STATS_TWT_SESSIONS = 20,
ATH11K_DBG_HTT_EXT_STATS_REO_RESOURCE_STATS = 21,
ATH11K_DBG_HTT_EXT_STATS_TX_SOUNDING_INFO = 22,
- ATH11K_DBG_HTT_EXT_STATS_PDEV_OBSS_PD_STATS = 23,
+ 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,
/* keep this last */
ATH11K_DBG_HTT_NUM_EXT_STATS,
--- a/drivers/net/wireless/ath/ath11k/debug_htt_stats.c
+++ b/drivers/net/wireless/ath/ath11k/debug_htt_stats.c
@@ -3895,6 +3895,445 @@ static inline void htt_print_backpressur
}
}
+static inline void htt_print_latency_prof_stats_tlv_v(const u32 *tag_buf, u8 *data)
+{
+ struct debug_htt_stats_req *stats_req =
+ (struct debug_htt_stats_req *)data;
+ struct htt_latency_prof_stats_tlv *htt_stats_buf =
+ (struct htt_latency_prof_stats_tlv *) 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 += HTT_DBG_OUT(buf + len, buf_len - len,
+ "HTT_STATS_LATENCY_PROF_TLV:");
+ len += HTT_DBG_OUT(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|");
+ }
+
+ len += HTT_DBG_OUT(buf + len, buf_len - len,
+ "|%s| %8u| %8u| %8u| %8u| %8u| %8u| %8u| %4u:%4u:%4u|",
+ 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]);
+ if (len >= buf_len) {
+ buf[buf_len - 1] = 0;
+ stats_req->buf_len = buf_len - 1;
+ }
+ else {
+ buf[len] = 0;
+ stats_req->buf_len = len;;
+ }
+}
+
+static inline void htt_print_latency_prof_ctx_tlv(const u32 *tag_buf,
+ struct debug_htt_stats_req *stats_req)
+{
+ struct htt_latency_prof_ctx_tlv *htt_stats_buf =
+ (struct htt_latency_prof_ctx_tlv *) tag_buf;
+ u8 *buf = stats_req->buf;
+ u32 len = stats_req->buf_len;
+ u32 buf_len = ATH11K_HTT_STATS_BUF_SIZE;
+
+ len += HTT_DBG_OUT(buf + len, buf_len - len, "HTT_STATS_LATENCY_CTX_TLV:");
+ len += HTT_DBG_OUT(buf + len, buf_len - len,"duration= %u",
+ htt_stats_buf->duration);
+ len += HTT_DBG_OUT(buf + len, buf_len - len,
+ "tx_msdu_cnt = %u", htt_stats_buf->tx_msdu_cnt);
+ len += HTT_DBG_OUT(buf + len, buf_len - len,
+ "tx_mpdu_cnt = %u", htt_stats_buf->tx_mpdu_cnt);
+ len += HTT_DBG_OUT(buf + len, buf_len - len,
+ "rx_msdu_cnt = %u", htt_stats_buf->rx_msdu_cnt);
+ len += HTT_DBG_OUT(buf + len, buf_len - len,
+ "rx_mpdu_cnt = %u", htt_stats_buf->rx_mpdu_cnt);
+
+ if (len >= buf_len) {
+ buf[buf_len - 1] = 0;
+ stats_req->buf_len = buf_len - 1;
+ }
+ else {
+ buf[len] = 0;
+ stats_req->buf_len = len;;
+ }
+}
+
+static inline void htt_print_latency_prof_cnt(const u32 *tag_buf,
+ struct debug_htt_stats_req *stats_req)
+{
+ struct htt_latency_prof_cnt_tlv *htt_stats_buf =
+ (struct htt_latency_prof_cnt_tlv *)tag_buf;
+ u8 *buf = stats_req->buf;
+ u32 len = stats_req->buf_len;
+ u32 buf_len = ATH11K_HTT_STATS_BUF_SIZE;
+
+ len += HTT_DBG_OUT(buf + len, buf_len - len, "prof_enable_cnt = %u",
+ htt_stats_buf->prof_enable_cnt);
+
+ if (len >= buf_len) {
+ buf[buf_len - 1] = 0;
+ stats_req->buf_len = buf_len - 1;
+ }
+ else {
+ buf[len] = 0;
+ stats_req->buf_len = len;;
+ }
+}
+
+static inline void htt_print_ul_mumimo_trig_stats(const u32 *tag_buf,
+ struct debug_htt_stats_req *stats_req)
+{
+ struct htt_rx_pdev_ul_mumimo_trig_stats_tlv *htt_ul_mumimo_trig_stats_buf =
+ (struct htt_rx_pdev_ul_mumimo_trig_stats_tlv *)tag_buf;
+ u8 *buf = stats_req->buf;
+ u32 len = stats_req->buf_len;
+ u32 buf_len = ATH11K_HTT_STATS_BUF_SIZE;
+ u8 str_buf[HTT_MAX_STRING_LEN];
+ u8 j;
+
+ len += HTT_DBG_OUT(buf + len, buf_len - len,
+ "HTT_RX_PDEV_UL_MUMIMO_TRIG_STATS_TLV:");
+ len += HTT_DBG_OUT(buf + len, buf_len - len, "mac_id = %u",
+ htt_ul_mumimo_trig_stats_buf->mac_id__word & 0xFF);
+
+ len += HTT_DBG_OUT(buf + len, buf_len - len,
+ "rx_11ax_ul_mumimo = %u",
+ htt_ul_mumimo_trig_stats_buf->rx_11ax_ul_mumimo);
+
+ memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
+ ARRAY_TO_STRING(str_buf, htt_ul_mumimo_trig_stats_buf->ul_mumimo_rx_mcs,
+ HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS);
+ len += HTT_DBG_OUT(buf + len, buf_len - len, "ul_mumimo_rx_mcs = %s ", str_buf);
+ memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
+ ARRAY_TO_STRING(str_buf, htt_ul_mumimo_trig_stats_buf->ul_mumimo_rx_mcs_ext,
+ HTT_RX_PDEV_STATS_NUM_EXTRA_MCS_COUNTERS);
+ len += HTT_DBG_OUT(buf + len, buf_len - len, "ul_mumimo_ext_rx_mcs = %s ", str_buf);
+
+ for (j = 0; j < HTT_RX_PDEV_STATS_NUM_GI_COUNTERS; j++) {
+ memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
+ ARRAY_TO_STRING(str_buf, htt_ul_mumimo_trig_stats_buf->ul_mumimo_rx_gi[j],
+ HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS);
+ len += HTT_DBG_OUT(buf + len, buf_len - len, "ul_mumimo_rx_gi[%u] = %s ",
+ j, str_buf);
+ memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
+ ARRAY_TO_STRING(str_buf, htt_ul_mumimo_trig_stats_buf->ul_mumimo_rx_gi_ext[j],
+ HTT_RX_PDEV_STATS_NUM_EXTRA_MCS_COUNTERS);
+ len += HTT_DBG_OUT(buf + len, buf_len - len, "ul_mumimo_rx_gi_ext[%u] = %s ",
+ j, str_buf);
+ }
+
+ memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
+ ARRAY_TO_STRING(str_buf, htt_ul_mumimo_trig_stats_buf->ul_mumimo_rx_nss,
+ HTT_RX_PDEV_STATS_ULNUM_SPATIAL_STREAMS);
+ len += HTT_DBG_OUT(buf + len, buf_len - len, "ul_mumimo_rx_nss = %s ", str_buf);
+
+ memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
+ ARRAY_TO_STRING(str_buf, htt_ul_mumimo_trig_stats_buf->ul_mumimo_rx_bw,
+ HTT_RX_PDEV_STATS_NUM_BW_COUNTERS);
+ len += HTT_DBG_OUT(buf + len, buf_len - len, "ul_mumimo_rx_bw = %s ", str_buf);
+
+ len += HTT_DBG_OUT(buf + len, buf_len - len, "ul_mumimo_rx_stbc = %u",
+ htt_ul_mumimo_trig_stats_buf->ul_mumimo_rx_stbc);
+ len += HTT_DBG_OUT(buf + len, buf_len - len, "ul_mumimo_rx_ldpc = %u",
+ htt_ul_mumimo_trig_stats_buf->ul_mumimo_rx_ldpc);
+ len += HTT_DBG_OUT(buf + len, buf_len - len, "\n");
+
+ if (len >= buf_len) {
+ buf[buf_len - 1] = 0;
+ stats_req->buf_len = buf_len - 1;
+ }
+ else {
+ buf[len] = 0;
+ stats_req->buf_len = len;;
+ }
+}
+
+static inline void htt_print_ul_mimo_user_stats(const u32 *tag_buf,
+ struct debug_htt_stats_req *stats_req)
+{
+ struct htt_rx_pdev_ul_mimo_user_stats_tlv *htt_ul_user_stats_buf =
+ (struct htt_rx_pdev_ul_mimo_user_stats_tlv *)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 += HTT_DBG_OUT(buf + len, buf_len - len,
+ "HTT_STATS_RX_PDEV_UL_MIMO_USER_STATS_TLV");
+ }
+
+ len += HTT_DBG_OUT(buf + len, buf_len - len,
+ "rx_ulmumimo_non_data_ppdu_%u = %u ",
+ htt_ul_user_stats_buf->user_index,
+ htt_ul_user_stats_buf->rx_ulmumimo_non_data_ppdu);
+
+ len += HTT_DBG_OUT(buf + len, buf_len - len,
+ "rx_ulmumimo_data_ppdu_%u = %u ",
+ htt_ul_user_stats_buf->user_index,
+ htt_ul_user_stats_buf->rx_ulmumimo_data_ppdu);
+
+ len += HTT_DBG_OUT(buf + len, buf_len - len,
+ "rx_ulmumimo_mpdu_ok_%u = %u ",
+ htt_ul_user_stats_buf->user_index,
+ htt_ul_user_stats_buf->rx_ulmumimo_mpdu_ok);
+
+ len += HTT_DBG_OUT(buf + len, buf_len - len,
+ "rx_ulmumimo_mpdu_fail_%u = %u",
+ htt_ul_user_stats_buf->user_index,
+ htt_ul_user_stats_buf->rx_ulmumimo_mpdu_fail);
+ }
+
+ if (len >= buf_len) {
+ buf[buf_len - 1] = 0;
+ stats_req->buf_len = buf_len - 1;
+ }
+ else {
+ buf[len] = 0;
+ stats_req->buf_len = len;;
+ }
+}
+
+static inline void htt_print_ul_ofdma_user_stats(const u32 *tag_buf,
+ struct debug_htt_stats_req *stats_req)
+{
+ struct htt_rx_pdev_ul_ofdma_user_stats_tlv *htt_ul_user_stats_buf =
+ (struct htt_rx_pdev_ul_ofdma_user_stats_tlv *)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 += HTT_DBG_OUT(buf + len, buf_len - len,
+ "HTT_RX_PDEV_UL_OFDMA_USER_STAS_TLV");
+ }
+
+ len += HTT_DBG_OUT(buf + len, buf_len - len,
+ "rx_ulofdma_non_data_ppdu_%u = %u ",
+ htt_ul_user_stats_buf->user_index,
+ htt_ul_user_stats_buf->rx_ulofdma_non_data_ppdu);
+ len += HTT_DBG_OUT(buf + len, buf_len - len,
+ "rx_ulofdma_data_ppdu_%u = %u ",
+ htt_ul_user_stats_buf->user_index,
+ htt_ul_user_stats_buf->rx_ulofdma_data_ppdu);
+ len += HTT_DBG_OUT(buf + len, buf_len - len,
+ "rx_ulofdma_mpdu_ok_%u = %u ",
+ htt_ul_user_stats_buf->user_index,
+ htt_ul_user_stats_buf->rx_ulofdma_mpdu_ok);
+ len += HTT_DBG_OUT(buf + len, buf_len - len,
+ "rx_ulofdma_mpdu_fail_%u = %u",
+ htt_ul_user_stats_buf->user_index,
+ htt_ul_user_stats_buf->rx_ulofdma_mpdu_fail);
+ len += HTT_DBG_OUT(buf + len, buf_len - len,
+ "rx_ulofdma_non_data_nusers_%u = %u",
+ htt_ul_user_stats_buf->user_index,
+ htt_ul_user_stats_buf->rx_ulofdma_non_data_nusers);
+ len += HTT_DBG_OUT(buf + len, buf_len - len,
+ "rx_ulofdma_data_nusers_%u = %u",
+ htt_ul_user_stats_buf->user_index,
+ htt_ul_user_stats_buf->rx_ulofdma_data_nusers);
+
+ if (len >= buf_len) {
+ buf[buf_len - 1] = 0;
+ stats_req->buf_len = buf_len - 1;
+ }
+ else {
+ buf[len] = 0;
+ stats_req->buf_len = len;;
+ }
+}
+
+/*
+ * htt_print_rx_pdev_ul_ofdma_stats_tlv: display htt_rx_pdev_ul_ofdma_stats_tlv
+ * @tag_buf: buffer containing the tlv htt_rx_pdev_ul_ofdma_stats_tlv
+ *
+ * return:void
+ */
+static inline void htt_print_ul_ofdma_trigger_stats(const u32 *tag_buf,
+ struct debug_htt_stats_req *stats_req)
+{
+
+ struct htt_rx_pdev_ul_trigger_stats_tlv *htt_trigger_stats_buf =
+ (struct htt_rx_pdev_ul_trigger_stats_tlv *)tag_buf;
+ u8 *buf = stats_req->buf;
+ u32 len = stats_req->buf_len;
+ u32 buf_len = ATH11K_HTT_STATS_BUF_SIZE;
+ u8 str_buf[HTT_MAX_STRING_LEN];
+ u8 j;
+
+ len += HTT_DBG_OUT(buf + len, buf_len - len,
+ "HTT_RX_PDEV_UL_TRIGGER_STATS_TLV:");
+ len += HTT_DBG_OUT(buf + len, buf_len - len, "mac_id = %u",
+ htt_trigger_stats_buf->mac_id__word & 0xFF);
+ len += HTT_DBG_OUT(buf + len, buf_len - len, "rx_11ax_ul_ofdma =%u",
+ htt_trigger_stats_buf->rx_11ax_ul_ofdma);
+
+ memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
+ ARRAY_TO_STRING(str_buf, htt_trigger_stats_buf->ul_ofdma_rx_mcs,
+ HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS);
+ len += HTT_DBG_OUT(buf + len, buf_len - len, "ul_ofdma_rx_mcs = %s ", str_buf);
+ memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
+ ARRAY_TO_STRING(str_buf, htt_trigger_stats_buf->ul_ofdma_rx_mcs_ext,
+ HTT_RX_PDEV_STATS_NUM_EXTRA_MCS_COUNTERS);
+ len += HTT_DBG_OUT(buf + len, buf_len - len, "ul_ofdma_rx_mcs_ext = %s ", str_buf);
+
+
+ for (j = 0; j < HTT_RX_PDEV_STATS_NUM_GI_COUNTERS; j++) {
+ memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
+ ARRAY_TO_STRING(str_buf, htt_trigger_stats_buf->ul_ofdma_rx_gi[j],
+ HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS);
+ len += HTT_DBG_OUT(buf + len, buf_len - len, "ul_ofdma_rx_gi[%u] = %s ",
+ j, str_buf);
+ memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
+ ARRAY_TO_STRING(str_buf, htt_trigger_stats_buf->ul_ofdma_rx_gi_ext[j],
+ HTT_RX_PDEV_STATS_NUM_EXTRA_MCS_COUNTERS);
+ len += HTT_DBG_OUT(buf + len, buf_len - len, "ul_ofdma_rx_gi_ext[%u] = %s ",
+ j, str_buf);
+ }
+
+ memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
+ ARRAY_TO_STRING(str_buf, htt_trigger_stats_buf->ul_ofdma_rx_nss,
+ HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS);
+
+ len += HTT_DBG_OUT(buf + len, buf_len - len, "ul_ofdma_rx_nss = %s ", str_buf);
+
+ memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
+ ARRAY_TO_STRING(str_buf, htt_trigger_stats_buf->ul_ofdma_rx_bw,
+ HTT_RX_PDEV_STATS_NUM_BW_COUNTERS);
+ len += HTT_DBG_OUT(buf + len, buf_len - len, "ul_ofdma_rx_bw = %s ", str_buf);
+
+ len += HTT_DBG_OUT(buf + len, buf_len - len, "ul_ofdma_rx_stbc = %u",
+ htt_trigger_stats_buf->ul_ofdma_rx_stbc);
+ len += HTT_DBG_OUT(buf + len, buf_len - len, "ul_ofdma_rx_ldpc = %u",
+ htt_trigger_stats_buf->ul_ofdma_rx_ldpc);
+
+ memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
+ ARRAY_TO_STRING(str_buf, htt_trigger_stats_buf->rx_ulofdma_data_ru_size_ppdu,
+ HTT_RX_PDEV_STATS_NUM_RU_SIZE_COUNTERS);
+ len += HTT_DBG_OUT(buf + len, buf_len - len,
+ "rx_ulofdma_non_data_ru_size_ppdu = %s ", str_buf);
+ memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
+ ARRAY_TO_STRING(str_buf, htt_trigger_stats_buf->rx_ulofdma_non_data_ru_size_ppdu,
+ HTT_RX_PDEV_STATS_NUM_RU_SIZE_COUNTERS);
+
+ len += HTT_DBG_OUT(buf + len, buf_len - len,
+ "rx_ulofdma_data_ru_size_ppdu = %s ", str_buf);
+
+ len += HTT_DBG_OUT(buf + len, buf_len - len, "\n");
+
+ if (len >= buf_len) {
+ buf[buf_len - 1] = 0;
+ stats_req->buf_len = buf_len - 1;
+ }
+ else {
+ buf[len] = 0;
+ stats_req->buf_len = len;;
+ }
+}
+
+static inline void htt_print_rx_fse_stats_tlv(const u32 *tag_buf,
+ struct debug_htt_stats_req *stats_req)
+{
+ struct htt_rx_fse_stats_tlv *htt_stats_buf =
+ (struct htt_rx_fse_stats_tlv *)tag_buf;
+ u8 *buf = stats_req->buf;
+ u32 len = stats_req->buf_len;
+ u32 buf_len = ATH11K_HTT_STATS_BUF_SIZE;
+
+ len += HTT_DBG_OUT(buf + len, buf_len - len, "HTT_STATS_RX_FSE_STATS_TLV: \n");
+ len += HTT_DBG_OUT(buf + len, buf_len - len, "=== Software RX FSE STATS ===\n");
+ len += HTT_DBG_OUT(buf + len, buf_len - len,
+ "Enable count = %u", htt_stats_buf->fse_enable_cnt);
+ len += HTT_DBG_OUT(buf + len, buf_len - len,
+ "Disable count = %u\n", htt_stats_buf->fse_disable_cnt);
+ len += HTT_DBG_OUT(buf + len, buf_len - len,
+ "Cache Invalidate Entry Count = %u\n",
+ htt_stats_buf->fse_cache_invalidate_entry_cnt);
+ len += HTT_DBG_OUT(buf + len, buf_len - len,
+ "Full Cache Invalidate Count = %u\n",
+ htt_stats_buf->fse_full_cache_invalidate_cnt);
+ len += HTT_DBG_OUT(buf + len, buf_len - len,
+ "=== Hardware RX FSE STATS ===\n");
+ len += HTT_DBG_OUT(buf + len, buf_len - len, "Cache hits Count = %u\n",
+ htt_stats_buf->fse_num_cache_hits_cnt);
+ len += HTT_DBG_OUT(buf + len, buf_len - len, "Cache No. of searches = %u\n",
+ htt_stats_buf->fse_num_searches_cnt);
+ len += HTT_DBG_OUT(buf + len, buf_len - len, "Cache occupancy Peak Count: \n");
+ len += HTT_DBG_OUT(buf + len, buf_len - len,
+ " [0] = %u [1-16] = %u [17-32] = %u "
+ "[33-48] = %u [49-64] = %u [65-80] = %u "
+ "[81-96] = %u [97-112] = %u [113-127] = %u "
+ "[128] = %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],
+ 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],
+ 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 += HTT_DBG_OUT(buf + len, buf_len - len,
+ "Cache occupancy Current Count: \n");
+ len += HTT_DBG_OUT(buf + len, buf_len - len,
+ " [0] = %u [1-16] = %u [17-32] = %u "
+ "[33-48] = %u [49-64] = %u [65-80] = %u "
+ "[81-96] = %u [97-112] = %u [113-127] = %u "
+ "[128] = %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],
+ 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],
+ 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 += HTT_DBG_OUT(buf + len, buf_len - len,"Cache search Square Count: \n");
+ len += HTT_DBG_OUT(buf + len, buf_len - len,
+ " [0] = %u [1-50] = %u [51-100] = %u "
+ "[101-200] = %u [201-255] = %u [256] = %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],
+ 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 += HTT_DBG_OUT(buf + len, buf_len - len,
+ "Cache search Peak Pending Count: \n");
+ len += HTT_DBG_OUT(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 += HTT_DBG_OUT(buf + len, buf_len - len,
+ "Cache search Number of Pending Count: \n");
+ len += HTT_DBG_OUT(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]);
+
+ if (len >= buf_len) {
+ buf[buf_len - 1] = 0;
+ stats_req->buf_len = buf_len - 1;
+ }
+ else {
+ buf[len] = 0;
+ stats_req->buf_len = len;;
+ }
+}
+
static inline void htt_htt_stats_debug_dump(const u32 *tag_buf,
struct debug_htt_stats_req *stats_req)
{
@@ -4290,6 +4729,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, user_data);
+ 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;
default:
break;
}
--- a/drivers/net/wireless/ath/ath11k/debug_htt_stats.h
+++ b/drivers/net/wireless/ath/ath11k/debug_htt_stats.h
@@ -102,6 +102,15 @@ 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_SCHED_STATS_TAG = 99,
HTT_STATS_MAX_TAG,
};
@@ -1228,13 +1237,18 @@ 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_EXTRA_MCS_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
struct htt_rx_pdev_rate_stats_tlv {
u32 mac_id__word;
@@ -1687,4 +1701,98 @@ struct htt_ring_backpressure_stats_tlv {
u32 backpressure_hist[5];
};
+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_EXTRA_MCS_COUNTERS];
+ u32 ul_mumimo_rx_gi_ext[HTT_RX_PDEV_STATS_NUM_GI_COUNTERS][HTT_RX_PDEV_STATS_NUM_EXTRA_MCS_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;
+};
+
+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_EXTRA_MCS_COUNTERS];
+ u32 ul_ofdma_rx_gi_ext[HTT_RX_PDEV_STATS_NUM_GI_COUNTERS][HTT_RX_PDEV_STATS_NUM_EXTRA_MCS_COUNTERS];
+};
+
+#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;
+};
+
+#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];
+};
+
#endif