[PATCH ath-next v2] wifi: ath12k: Add support for transmit histogram stats
Vasanthakumar Thiagarajan
vasanthakumar.thiagarajan at oss.qualcomm.com
Thu Jun 26 10:20:15 PDT 2025
On 6/17/2025 4:51 PM, Roopni Devanathan wrote:
> From: Saleemuddin Shaik <quic_saleemud at quicinc.com>
>
> Add support for transmit histogram stats under HTT stats type 9. These
> stats give information about drop count, MCS drop rate, histogram
> count, etc.
>
> Note: WCN7850 firmware version -
> WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3 does not support tag
> HTT_STATS_TX_PDEV_HISTOGRAM_STATS_TAG(144), currently.
>
> Sample output:
> echo 9 > /sys/kernel/debug/ath12k/pci-0000\:58\:00.0/mac0/htt_stats_type
> cat /sys/kernel/debug/ath12k/pci-0000\:58\:00.0/mac0/htt_stats
> ...
> low_latency_rate_cnt = 0
> su_burst_rate_drop_cnt = 0
> su_burst_rate_drop_fail_cnt = 0
> rate_retry_mcs_drop_cnt = 0
>
> PER_HISTOGRAM_STATS
> mcs_drop_rate = 0:0, 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0, 11:0, 12:0, 13:0, 14:0, 15:0
> per_histogram_count = 0:0, 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0,
> 11:0, 12:0, 13:0, 14:0, 15:0, 16:0, 17:0, 18:0, 19:0, 20:0,
> 21:0, 22:0, 23:0, 24:0, 25:0, 26:0, 27:0, 28:0, 29:0, 30:0,
> 31:0, 32:0, 33:0, 34:0, 35:0, 36:0, 37:0, 38:0, 39:0, 40:0,
> 41:0, 42:0, 43:0, 44:0, 45:0, 46:0, 47:0, 48:0, 49:0, 50:0,
> 51:0, 52:0, 53:0, 54:0, 55:0, 56:0, 57:0, 58:0, 59:0, 60:0,
> 61:0, 62:0, 63:0, 64:0, 65:0, 66:0, 67:0, 68:0, 69:0, 70:0,
> 71:0, 72:0, 73:0, 74:0, 75:0, 76:0, 77:0, 78:0, 79:0, 80:0,
> 81:0, 82:0, 83:0, 84:0, 85:0, 86:0, 87:0, 88:0, 89:0, 90:0,
> 91:0, 92:0, 93:0, 94:0, 95:0, 96:0, 97:0, 98:0, 99:0, 100:0
>
> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.4.1-00199-QCAHKSWPL_SILICONZ-1
>
> Signed-off-by: Saleemuddin Shaik <quic_saleemud at quicinc.com>
> Signed-off-by: Roopni Devanathan <quic_rdevanat at quicinc.com>
> ---
> v2:
> - Removed 'inline' keyword from function definition to resolve wifibot
> error.
> ---
> .../wireless/ath/ath12k/debugfs_htt_stats.c | 36 ++++++++++++++++++-
> .../wireless/ath/ath12k/debugfs_htt_stats.h | 16 +++++++++
> 2 files changed, 51 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/wireless/ath/ath12k/debugfs_htt_stats.c b/drivers/net/wireless/ath/ath12k/debugfs_htt_stats.c
> index aeaf970339d4..0da6c91dd314 100644
> --- a/drivers/net/wireless/ath/ath12k/debugfs_htt_stats.c
> +++ b/drivers/net/wireless/ath/ath12k/debugfs_htt_stats.c
> @@ -4720,7 +4720,38 @@ ath12k_htt_print_tx_pdev_rate_stats_tlv(const void *tag_buf, u16 tag_len,
> len += print_array_to_buf(buf, len, "tx_pream", htt_stats_buf->tx_pream,
> ATH12K_HTT_TX_PDEV_STATS_NUM_PREAMBLE_TYPES, "\n");
> len += print_array_to_buf(buf, len, "tx_dcm", htt_stats_buf->tx_dcm,
> - ATH12K_HTT_TX_PDEV_STATS_NUM_DCM_COUNTERS, "\n");
> + ATH12K_HTT_TX_PDEV_STATS_NUM_DCM_COUNTERS, "\n\n");
> +
> + stats_req->buf_len = len;
> +}
> +
> +static void
> +ath12k_htt_print_histogram_stats_tlv(const void *tag_buf, u16 tag_len,
> + struct debug_htt_stats_req *stats_req)
> +{
> + const struct ath12k_htt_tx_histogram_stats_tlv *stats_buf = tag_buf;
> + u32 buf_len = ATH12K_HTT_STATS_BUF_SIZE;
> + u32 len = stats_req->buf_len;
> + u8 *buf = stats_req->buf;
> +
> + if (tag_len < sizeof(*stats_buf))
> + return;
> +
> + len += scnprintf(buf + len, buf_len - len, "low_latency_rate_cnt = %u\n",
> + le32_to_cpu(stats_buf->low_latency_rate_cnt));
> + len += scnprintf(buf + len, buf_len - len, "su_burst_rate_drop_cnt = %u\n",
> + le32_to_cpu(stats_buf->su_burst_rate_drop_cnt));
> + len += scnprintf(buf + len, buf_len - len, "su_burst_rate_drop_fail_cnt = %u\n",
> + le32_to_cpu(stats_buf->su_burst_rate_drop_fail_cnt));
> + len += scnprintf(buf + len, buf_len - len, "rate_retry_mcs_drop_cnt = %u\n",
> + le32_to_cpu(stats_buf->rate_retry_mcs_drop_cnt));
> +
> + len += scnprintf(buf + len, buf_len - len, "\nPER_HISTOGRAM_STATS\n");
> + len += print_array_to_buf(buf, len, "mcs_drop_rate", stats_buf->mcs_drop_rate,
> + ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_DROP_COUNTERS, "\n");
> + len += print_array_to_buf(buf, len, "per_histogram_count",
> + stats_buf->per_histogram_cnt,
> + ATH12K_HTT_TX_PDEV_STATS_NUM_PER_COUNTERS, "\n\n");
>
> stats_req->buf_len = len;
> }
> @@ -5277,6 +5308,9 @@ static int ath12k_dbg_htt_ext_stats_parse(struct ath12k_base *ab,
> case HTT_STATS_TX_PDEV_RATE_STATS_TAG:
> ath12k_htt_print_tx_pdev_rate_stats_tlv(tag_buf, len, stats_req);
> break;
> + case HTT_STATS_TX_PDEV_HISTOGRAM_STATS_TAG:
> + ath12k_htt_print_histogram_stats_tlv(tag_buf, len, stats_req);
> + break;
> case HTT_STATS_RX_PDEV_RATE_STATS_TAG:
> ath12k_htt_print_rx_pdev_rate_stats_tlv(tag_buf, len, stats_req);
> break;
> diff --git a/drivers/net/wireless/ath/ath12k/debugfs_htt_stats.h b/drivers/net/wireless/ath/ath12k/debugfs_htt_stats.h
> index c2a02cf8a38b..5fc5d8c00355 100644
> --- a/drivers/net/wireless/ath/ath12k/debugfs_htt_stats.h
> +++ b/drivers/net/wireless/ath/ath12k/debugfs_htt_stats.h
> @@ -237,6 +237,7 @@ enum ath12k_dbg_htt_tlv_tag {
> HTT_STATS_TX_SELFGEN_BE_ERR_STATS_TAG = 137,
> HTT_STATS_TX_SELFGEN_BE_STATS_TAG = 138,
> HTT_STATS_TX_SELFGEN_BE_SCHED_STATUS_STATS_TAG = 139,
> + HTT_STATS_TX_PDEV_HISTOGRAM_STATS_TAG = 144,
> HTT_STATS_TXBF_OFDMA_AX_NDPA_STATS_TAG = 147,
> HTT_STATS_TXBF_OFDMA_AX_NDP_STATS_TAG = 148,
> HTT_STATS_TXBF_OFDMA_AX_BRP_STATS_TAG = 149,
> @@ -418,6 +419,12 @@ struct ath12k_htt_tx_pdev_mu_ppdu_dist_stats_tlv {
> #define ATH12K_HTT_TX_PDEV_STATS_NUM_EXTRA_MCS_COUNTERS 2
> #define ATH12K_HTT_TX_PDEV_STATS_NUM_EXTRA2_MCS_COUNTERS 2
> #define ATH12K_HTT_TX_PDEV_STATS_NUM_11AX_TRIGGER_TYPES 6
> +#define ATH12K_HTT_TX_PDEV_STATS_NUM_PER_COUNTERS 101
> +
> +#define ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_DROP_COUNTERS \
> + (ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS + \
> + ATH12K_HTT_TX_PDEV_STATS_NUM_EXTRA_MCS_COUNTERS + \
> + ATH12K_HTT_TX_PDEV_STATS_NUM_EXTRA2_MCS_COUNTERS)
>
> struct ath12k_htt_tx_pdev_rate_stats_tlv {
> __le32 mac_id_word;
> @@ -472,6 +479,15 @@ struct ath12k_htt_tx_pdev_rate_stats_tlv {
> __le32 tx_bw_320mhz;
> };
>
> +struct ath12k_htt_tx_histogram_stats_tlv {
> + __le32 rate_retry_mcs_drop_cnt;
> + __le32 mcs_drop_rate[ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_DROP_COUNTERS];
> + __le32 per_histogram_cnt[ATH12K_HTT_TX_PDEV_STATS_NUM_PER_COUNTERS];
> + __le32 low_latency_rate_cnt;
> + __le32 su_burst_rate_drop_cnt;
> + __le32 su_burst_rate_drop_fail_cnt;
> +};
Since this strcuture represents the message format used between host and firmware, pls add
__packed annotation even though it may not have any effect in this case.
Vasanth
Vasanth
More information about the ath12k
mailing list