mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-12-18 09:51:26 +00:00
This series is based on * 2020-07-10 ipq6018-ilq-11-0_qca_oem-034672b0676c37b1f4519e5720e18e95fe6236ef Add support for * qsdk kernel/v4.4 * qsdk ethernet subsystem * v5.7 ath11k backport + QualComm staging patches (wlan_ap_1.0) * ath11k-firmware * hostapd/iw/... Feature support * full boot, system detection * sysupgrade to nand * HE support via latest hostapd * driver support for usb, crypto, hwmon, cpufreq, ... Missing * NSS/HW flow offloading - FW blob is not redistributable Using the qsdk v4.4 is an intermediate solution while the vanilla is being tested. Vanilla kernel is almost on feature par. Work has already started to upstream the ethernet and switch drivers. Once complete the target will be fully upstream. Signed-off-by: John Crispin <john@phrozen.org>
637 lines
24 KiB
Diff
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
|
|
@@ -55,8 +55,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
|
|
@@ -3894,6 +3894,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)
|
|
{
|
|
@@ -4289,6 +4728,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;
|
|
@@ -1688,4 +1702,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
|