Skip to content

Commit 3f482f2

Browse files
Pradeep Kumar Chitrapujeff-t-johnson
authored andcommitted
wifi: ath12k: Support Transmit Buffer OFDMA Stats
Add support to request OFDMA stats of transmit buffers from firmware through HTT stats type 32. These stats give information about NDPA, NDP, BRP and steering mechanisms. Note: WCN7850 firmware version - WLAN.HMT.1.0-03427-QCAHMTSWPL_V1.0_V2.0_SILICONZ-1.15378.4 does not support HTT stats type 32. Sample output: ------------- echo 32 > /sys/kernel/debug/ath12k/pci-0000\:06\:00.0/mac0/htt_stats_type cat /sys/kernel/debug/ath12k/pci-0000\:06\:00.0/mac0/htt_stats HTT_TXBF_OFDMA_AX_NDPA_STATS_TLV: ax_ofdma_ndpa_queued = 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 ax_ofdma_ndpa_tried = 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 ..... HTT_TXBF_OFDMA_AX_NDP_STATS_TLV: ax_ofdma_ndp_queued = 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 ax_ofdma_ndp_tried = 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 ..... HTT_TXBF_OFDMA_AX_BRP_STATS_TLV: ax_ofdma_brpoll_queued = 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 ax_ofdma_brpoll_tied = 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 ..... HTT_TXBF_OFDMA_AX_STEER_STATS_TLV: ax_ofdma_num_ppdu_steer = 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 ax_ofdma_num_usrs_prefetch = 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 ..... HTT_TXBF_OFDMA_AX_STEER_MPDU_STATS_TLV: rbo_steer_mpdus_tried = 0 rbo_steer_mpdus_failed = 0 sifs_steer_mpdus_tried = 0 sifs_steer_mpdus_failed = 0 Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.1.1-00214-QCAHKSWPL_SILICONZ-1 Signed-off-by: Pradeep Kumar Chitrapu <[email protected]> Signed-off-by: Roopni Devanathan <[email protected]> Acked-by: Jeff Johnson <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jeff Johnson <[email protected]>
1 parent c9f6ee2 commit 3f482f2

File tree

2 files changed

+317
-0
lines changed

2 files changed

+317
-0
lines changed

drivers/net/wireless/ath/ath12k/debugfs_htt_stats.c

Lines changed: 250 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2668,6 +2668,240 @@ ath12k_htt_print_pdev_tx_rate_txbf_stats_tlv(const void *tag_buf, u16 tag_len,
26682668
stats_req->buf_len = len;
26692669
}
26702670

2671+
static void
2672+
ath12k_htt_print_txbf_ofdma_ax_ndpa_stats_tlv(const void *tag_buf, u16 tag_len,
2673+
struct debug_htt_stats_req *stats_req)
2674+
{
2675+
const struct ath12k_htt_txbf_ofdma_ax_ndpa_stats_tlv *stats_buf = tag_buf;
2676+
u32 buf_len = ATH12K_HTT_STATS_BUF_SIZE;
2677+
u32 len = stats_req->buf_len;
2678+
u8 *buf = stats_req->buf;
2679+
u32 num_elements;
2680+
u8 i;
2681+
2682+
if (tag_len < sizeof(*stats_buf))
2683+
return;
2684+
2685+
num_elements = le32_to_cpu(stats_buf->num_elems_ax_ndpa_arr);
2686+
2687+
len += scnprintf(buf + len, buf_len - len, "HTT_TXBF_OFDMA_AX_NDPA_STATS_TLV:\n");
2688+
len += scnprintf(buf + len, buf_len - len, "ax_ofdma_ndpa_queued =");
2689+
for (i = 0; i < num_elements; i++)
2690+
len += scnprintf(buf + len, buf_len - len, " %u:%u,", i + 1,
2691+
le32_to_cpu(stats_buf->ax_ndpa[i].ax_ofdma_ndpa_queued));
2692+
len--;
2693+
*(buf + len) = '\0';
2694+
2695+
len += scnprintf(buf + len, buf_len - len, "\nax_ofdma_ndpa_tried =");
2696+
for (i = 0; i < num_elements; i++)
2697+
len += scnprintf(buf + len, buf_len - len, " %u:%u,", i + 1,
2698+
le32_to_cpu(stats_buf->ax_ndpa[i].ax_ofdma_ndpa_tried));
2699+
len--;
2700+
*(buf + len) = '\0';
2701+
2702+
len += scnprintf(buf + len, buf_len - len, "\nax_ofdma_ndpa_flushed =");
2703+
for (i = 0; i < num_elements; i++)
2704+
len += scnprintf(buf + len, buf_len - len, " %u:%u,", i + 1,
2705+
le32_to_cpu(stats_buf->ax_ndpa[i].ax_ofdma_ndpa_flush));
2706+
len--;
2707+
*(buf + len) = '\0';
2708+
2709+
len += scnprintf(buf + len, buf_len - len, "\nax_ofdma_ndpa_err =");
2710+
for (i = 0; i < num_elements; i++)
2711+
len += scnprintf(buf + len, buf_len - len, " %u:%u,", i + 1,
2712+
le32_to_cpu(stats_buf->ax_ndpa[i].ax_ofdma_ndpa_err));
2713+
len--;
2714+
*(buf + len) = '\0';
2715+
2716+
len += scnprintf(buf + len, buf_len - len, "\n\n");
2717+
2718+
stats_req->buf_len = len;
2719+
}
2720+
2721+
static void
2722+
ath12k_htt_print_txbf_ofdma_ax_ndp_stats_tlv(const void *tag_buf, u16 tag_len,
2723+
struct debug_htt_stats_req *stats_req)
2724+
{
2725+
const struct ath12k_htt_txbf_ofdma_ax_ndp_stats_tlv *stats_buf = tag_buf;
2726+
u32 buf_len = ATH12K_HTT_STATS_BUF_SIZE;
2727+
u32 len = stats_req->buf_len;
2728+
u8 *buf = stats_req->buf;
2729+
u32 num_elements;
2730+
u8 i;
2731+
2732+
if (tag_len < sizeof(*stats_buf))
2733+
return;
2734+
2735+
num_elements = le32_to_cpu(stats_buf->num_elems_ax_ndp_arr);
2736+
2737+
len += scnprintf(buf + len, buf_len - len, "HTT_TXBF_OFDMA_AX_NDP_STATS_TLV:\n");
2738+
len += scnprintf(buf + len, buf_len - len, "ax_ofdma_ndp_queued =");
2739+
for (i = 0; i < num_elements; i++)
2740+
len += scnprintf(buf + len, buf_len - len, " %u:%u,", i + 1,
2741+
le32_to_cpu(stats_buf->ax_ndp[i].ax_ofdma_ndp_queued));
2742+
len--;
2743+
*(buf + len) = '\0';
2744+
2745+
len += scnprintf(buf + len, buf_len - len, "\nax_ofdma_ndp_tried =");
2746+
for (i = 0; i < num_elements; i++)
2747+
len += scnprintf(buf + len, buf_len - len, " %u:%u,", i + 1,
2748+
le32_to_cpu(stats_buf->ax_ndp[i].ax_ofdma_ndp_tried));
2749+
len--;
2750+
*(buf + len) = '\0';
2751+
2752+
len += scnprintf(buf + len, buf_len - len, "\nax_ofdma_ndp_flushed =");
2753+
for (i = 0; i < num_elements; i++)
2754+
len += scnprintf(buf + len, buf_len - len, " %u:%u,", i + 1,
2755+
le32_to_cpu(stats_buf->ax_ndp[i].ax_ofdma_ndp_flush));
2756+
len--;
2757+
*(buf + len) = '\0';
2758+
2759+
len += scnprintf(buf + len, buf_len - len, "\nax_ofdma_ndp_err =");
2760+
for (i = 0; i < num_elements; i++)
2761+
len += scnprintf(buf + len, buf_len - len, " %u:%u,", i + 1,
2762+
le32_to_cpu(stats_buf->ax_ndp[i].ax_ofdma_ndp_err));
2763+
len--;
2764+
*(buf + len) = '\0';
2765+
2766+
len += scnprintf(buf + len, buf_len - len, "\n\n");
2767+
2768+
stats_req->buf_len = len;
2769+
}
2770+
2771+
static void
2772+
ath12k_htt_print_txbf_ofdma_ax_brp_stats_tlv(const void *tag_buf, u16 tag_len,
2773+
struct debug_htt_stats_req *stats_req)
2774+
{
2775+
const struct ath12k_htt_txbf_ofdma_ax_brp_stats_tlv *stats_buf = tag_buf;
2776+
u32 buf_len = ATH12K_HTT_STATS_BUF_SIZE;
2777+
u32 len = stats_req->buf_len;
2778+
u8 *buf = stats_req->buf;
2779+
u32 num_elements;
2780+
u8 i;
2781+
2782+
if (tag_len < sizeof(*stats_buf))
2783+
return;
2784+
2785+
num_elements = le32_to_cpu(stats_buf->num_elems_ax_brp_arr);
2786+
2787+
len += scnprintf(buf + len, buf_len - len, "HTT_TXBF_OFDMA_AX_BRP_STATS_TLV:\n");
2788+
len += scnprintf(buf + len, buf_len - len, "ax_ofdma_brpoll_queued =");
2789+
for (i = 0; i < num_elements; i++)
2790+
len += scnprintf(buf + len, buf_len - len, " %u:%u,", i + 1,
2791+
le32_to_cpu(stats_buf->ax_brp[i].ax_ofdma_brp_queued));
2792+
len--;
2793+
*(buf + len) = '\0';
2794+
2795+
len += scnprintf(buf + len, buf_len - len, "\nax_ofdma_brpoll_tied =");
2796+
for (i = 0; i < num_elements; i++)
2797+
len += scnprintf(buf + len, buf_len - len, " %u:%u,", i + 1,
2798+
le32_to_cpu(stats_buf->ax_brp[i].ax_ofdma_brp_tried));
2799+
len--;
2800+
*(buf + len) = '\0';
2801+
2802+
len += scnprintf(buf + len, buf_len - len, "\nax_ofdma_brpoll_flushed =");
2803+
for (i = 0; i < num_elements; i++)
2804+
len += scnprintf(buf + len, buf_len - len, " %u:%u,", i + 1,
2805+
le32_to_cpu(stats_buf->ax_brp[i].ax_ofdma_brp_flushed));
2806+
len--;
2807+
*(buf + len) = '\0';
2808+
2809+
len += scnprintf(buf + len, buf_len - len, "\nax_ofdma_brp_err =");
2810+
for (i = 0; i < num_elements; i++)
2811+
len += scnprintf(buf + len, buf_len - len, " %u:%u,", i + 1,
2812+
le32_to_cpu(stats_buf->ax_brp[i].ax_ofdma_brp_err));
2813+
len--;
2814+
*(buf + len) = '\0';
2815+
2816+
len += scnprintf(buf + len, buf_len - len, "\nax_ofdma_brp_err_num_cbf_rcvd =");
2817+
for (i = 0; i < num_elements; i++)
2818+
len += scnprintf(buf + len, buf_len - len, " %u:%u,", i + 1,
2819+
le32_to_cpu(stats_buf->ax_brp[i].ax_ofdma_num_cbf_rcvd));
2820+
len--;
2821+
*(buf + len) = '\0';
2822+
2823+
len += scnprintf(buf + len, buf_len - len, "\n\n");
2824+
2825+
stats_req->buf_len = len;
2826+
}
2827+
2828+
static void
2829+
ath12k_htt_print_txbf_ofdma_ax_steer_stats_tlv(const void *tag_buf, u16 tag_len,
2830+
struct debug_htt_stats_req *stats_req)
2831+
{
2832+
const struct ath12k_htt_txbf_ofdma_ax_steer_stats_tlv *stats_buf = tag_buf;
2833+
u32 buf_len = ATH12K_HTT_STATS_BUF_SIZE;
2834+
u32 len = stats_req->buf_len;
2835+
u8 *buf = stats_req->buf;
2836+
u32 num_elements;
2837+
u8 i;
2838+
2839+
if (tag_len < sizeof(*stats_buf))
2840+
return;
2841+
2842+
num_elements = le32_to_cpu(stats_buf->num_elems_ax_steer_arr);
2843+
2844+
len += scnprintf(buf + len, buf_len - len,
2845+
"HTT_TXBF_OFDMA_AX_STEER_STATS_TLV:\n");
2846+
len += scnprintf(buf + len, buf_len - len, "ax_ofdma_num_ppdu_steer =");
2847+
for (i = 0; i < num_elements; i++)
2848+
len += scnprintf(buf + len, buf_len - len, " %u:%u,", i + 1,
2849+
le32_to_cpu(stats_buf->ax_steer[i].num_ppdu_steer));
2850+
len--;
2851+
*(buf + len) = '\0';
2852+
2853+
len += scnprintf(buf + len, buf_len - len, "\nax_ofdma_num_usrs_prefetch =");
2854+
for (i = 0; i < num_elements; i++)
2855+
len += scnprintf(buf + len, buf_len - len, " %u:%u,", i + 1,
2856+
le32_to_cpu(stats_buf->ax_steer[i].num_usr_prefetch));
2857+
len--;
2858+
*(buf + len) = '\0';
2859+
2860+
len += scnprintf(buf + len, buf_len - len, "\nax_ofdma_num_usrs_sound =");
2861+
for (i = 0; i < num_elements; i++)
2862+
len += scnprintf(buf + len, buf_len - len, " %u:%u,", i + 1,
2863+
le32_to_cpu(stats_buf->ax_steer[i].num_usr_sound));
2864+
len--;
2865+
*(buf + len) = '\0';
2866+
2867+
len += scnprintf(buf + len, buf_len - len, "\nax_ofdma_num_usrs_force_sound =");
2868+
for (i = 0; i < num_elements; i++)
2869+
len += scnprintf(buf + len, buf_len - len, " %u:%u,", i + 1,
2870+
le32_to_cpu(stats_buf->ax_steer[i].num_usr_force_sound));
2871+
len--;
2872+
*(buf + len) = '\0';
2873+
2874+
len += scnprintf(buf + len, buf_len - len, "\n\n");
2875+
2876+
stats_req->buf_len = len;
2877+
}
2878+
2879+
static void
2880+
ath12k_htt_print_txbf_ofdma_ax_steer_mpdu_stats_tlv(const void *tag_buf, u16 tag_len,
2881+
struct debug_htt_stats_req *stats_req)
2882+
{
2883+
const struct ath12k_htt_txbf_ofdma_ax_steer_mpdu_stats_tlv *stats_buf = tag_buf;
2884+
u32 buf_len = ATH12K_HTT_STATS_BUF_SIZE;
2885+
u32 len = stats_req->buf_len;
2886+
u8 *buf = stats_req->buf;
2887+
2888+
if (tag_len < sizeof(*stats_buf))
2889+
return;
2890+
2891+
len += scnprintf(buf + len, buf_len - len,
2892+
"HTT_TXBF_OFDMA_AX_STEER_MPDU_STATS_TLV:\n");
2893+
len += scnprintf(buf + len, buf_len - len, "rbo_steer_mpdus_tried = %u\n",
2894+
le32_to_cpu(stats_buf->ax_ofdma_rbo_steer_mpdus_tried));
2895+
len += scnprintf(buf + len, buf_len - len, "rbo_steer_mpdus_failed = %u\n",
2896+
le32_to_cpu(stats_buf->ax_ofdma_rbo_steer_mpdus_failed));
2897+
len += scnprintf(buf + len, buf_len - len, "sifs_steer_mpdus_tried = %u\n",
2898+
le32_to_cpu(stats_buf->ax_ofdma_sifs_steer_mpdus_tried));
2899+
len += scnprintf(buf + len, buf_len - len, "sifs_steer_mpdus_failed = %u\n\n",
2900+
le32_to_cpu(stats_buf->ax_ofdma_sifs_steer_mpdus_failed));
2901+
2902+
stats_req->buf_len = len;
2903+
}
2904+
26712905
static void ath12k_htt_print_dlpager_entry(const struct ath12k_htt_pgs_info *pg_info,
26722906
int idx, char *str_buf)
26732907
{
@@ -3603,6 +3837,22 @@ static int ath12k_dbg_htt_ext_stats_parse(struct ath12k_base *ab,
36033837
case HTT_STATS_PDEV_TX_RATE_TXBF_STATS_TAG:
36043838
ath12k_htt_print_pdev_tx_rate_txbf_stats_tlv(tag_buf, len, stats_req);
36053839
break;
3840+
case HTT_STATS_TXBF_OFDMA_AX_NDPA_STATS_TAG:
3841+
ath12k_htt_print_txbf_ofdma_ax_ndpa_stats_tlv(tag_buf, len, stats_req);
3842+
break;
3843+
case HTT_STATS_TXBF_OFDMA_AX_NDP_STATS_TAG:
3844+
ath12k_htt_print_txbf_ofdma_ax_ndp_stats_tlv(tag_buf, len, stats_req);
3845+
break;
3846+
case HTT_STATS_TXBF_OFDMA_AX_BRP_STATS_TAG:
3847+
ath12k_htt_print_txbf_ofdma_ax_brp_stats_tlv(tag_buf, len, stats_req);
3848+
break;
3849+
case HTT_STATS_TXBF_OFDMA_AX_STEER_STATS_TAG:
3850+
ath12k_htt_print_txbf_ofdma_ax_steer_stats_tlv(tag_buf, len, stats_req);
3851+
break;
3852+
case HTT_STATS_TXBF_OFDMA_AX_STEER_MPDU_STATS_TAG:
3853+
ath12k_htt_print_txbf_ofdma_ax_steer_mpdu_stats_tlv(tag_buf, len,
3854+
stats_req);
3855+
break;
36063856
case HTT_STATS_DLPAGER_STATS_TAG:
36073857
ath12k_htt_print_dlpager_stats_tlv(tag_buf, len, stats_req);
36083858
break;

drivers/net/wireless/ath/ath12k/debugfs_htt_stats.h

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ enum ath12k_dbg_htt_ext_stats_type {
136136
ATH12K_DBG_HTT_EXT_STATS_PDEV_CCA_STATS = 19,
137137
ATH12K_DBG_HTT_EXT_STATS_PDEV_OBSS_PD_STATS = 23,
138138
ATH12K_DBG_HTT_EXT_STATS_PDEV_TX_RATE_TXBF = 31,
139+
ATH12K_DBG_HTT_EXT_STATS_TXBF_OFDMA = 32,
139140
ATH12K_DBG_HTT_EXT_STATS_DLPAGER_STATS = 36,
140141
ATH12K_DBG_HTT_EXT_PHY_COUNTERS_AND_PHY_STATS = 37,
141142
ATH12K_DBG_HTT_EXT_VDEVS_TXRX_STATS = 38,
@@ -214,9 +215,14 @@ enum ath12k_dbg_htt_tlv_tag {
214215
HTT_STATS_TX_SELFGEN_BE_ERR_STATS_TAG = 137,
215216
HTT_STATS_TX_SELFGEN_BE_STATS_TAG = 138,
216217
HTT_STATS_TX_SELFGEN_BE_SCHED_STATUS_STATS_TAG = 139,
218+
HTT_STATS_TXBF_OFDMA_AX_NDPA_STATS_TAG = 147,
219+
HTT_STATS_TXBF_OFDMA_AX_NDP_STATS_TAG = 148,
220+
HTT_STATS_TXBF_OFDMA_AX_BRP_STATS_TAG = 149,
221+
HTT_STATS_TXBF_OFDMA_AX_STEER_STATS_TAG = 150,
217222
HTT_STATS_DMAC_RESET_STATS_TAG = 155,
218223
HTT_STATS_PHY_TPC_STATS_TAG = 157,
219224
HTT_STATS_PDEV_SCHED_ALGO_OFDMA_STATS_TAG = 165,
225+
HTT_STATS_TXBF_OFDMA_AX_STEER_MPDU_STATS_TAG = 172,
220226
HTT_STATS_PDEV_MBSSID_CTRL_FRAME_STATS_TAG = 176,
221227

222228
HTT_STATS_MAX_TAG,
@@ -1100,6 +1106,67 @@ struct ath12k_htt_pdev_txrate_txbf_stats_tlv {
11001106
__le32 txbf_flag_not_set_final_status;
11011107
} __packed;
11021108

1109+
struct ath12k_htt_txbf_ofdma_ax_ndpa_stats_elem_t {
1110+
__le32 ax_ofdma_ndpa_queued;
1111+
__le32 ax_ofdma_ndpa_tried;
1112+
__le32 ax_ofdma_ndpa_flush;
1113+
__le32 ax_ofdma_ndpa_err;
1114+
} __packed;
1115+
1116+
struct ath12k_htt_txbf_ofdma_ax_ndpa_stats_tlv {
1117+
__le32 num_elems_ax_ndpa_arr;
1118+
__le32 arr_elem_size_ax_ndpa;
1119+
DECLARE_FLEX_ARRAY(struct ath12k_htt_txbf_ofdma_ax_ndpa_stats_elem_t, ax_ndpa);
1120+
} __packed;
1121+
1122+
struct ath12k_htt_txbf_ofdma_ax_ndp_stats_elem_t {
1123+
__le32 ax_ofdma_ndp_queued;
1124+
__le32 ax_ofdma_ndp_tried;
1125+
__le32 ax_ofdma_ndp_flush;
1126+
__le32 ax_ofdma_ndp_err;
1127+
} __packed;
1128+
1129+
struct ath12k_htt_txbf_ofdma_ax_ndp_stats_tlv {
1130+
__le32 num_elems_ax_ndp_arr;
1131+
__le32 arr_elem_size_ax_ndp;
1132+
DECLARE_FLEX_ARRAY(struct ath12k_htt_txbf_ofdma_ax_ndp_stats_elem_t, ax_ndp);
1133+
} __packed;
1134+
1135+
struct ath12k_htt_txbf_ofdma_ax_brp_stats_elem_t {
1136+
__le32 ax_ofdma_brp_queued;
1137+
__le32 ax_ofdma_brp_tried;
1138+
__le32 ax_ofdma_brp_flushed;
1139+
__le32 ax_ofdma_brp_err;
1140+
__le32 ax_ofdma_num_cbf_rcvd;
1141+
} __packed;
1142+
1143+
struct ath12k_htt_txbf_ofdma_ax_brp_stats_tlv {
1144+
__le32 num_elems_ax_brp_arr;
1145+
__le32 arr_elem_size_ax_brp;
1146+
DECLARE_FLEX_ARRAY(struct ath12k_htt_txbf_ofdma_ax_brp_stats_elem_t, ax_brp);
1147+
} __packed;
1148+
1149+
struct ath12k_htt_txbf_ofdma_ax_steer_stats_elem_t {
1150+
__le32 num_ppdu_steer;
1151+
__le32 num_ppdu_ol;
1152+
__le32 num_usr_prefetch;
1153+
__le32 num_usr_sound;
1154+
__le32 num_usr_force_sound;
1155+
} __packed;
1156+
1157+
struct ath12k_htt_txbf_ofdma_ax_steer_stats_tlv {
1158+
__le32 num_elems_ax_steer_arr;
1159+
__le32 arr_elem_size_ax_steer;
1160+
DECLARE_FLEX_ARRAY(struct ath12k_htt_txbf_ofdma_ax_steer_stats_elem_t, ax_steer);
1161+
} __packed;
1162+
1163+
struct ath12k_htt_txbf_ofdma_ax_steer_mpdu_stats_tlv {
1164+
__le32 ax_ofdma_rbo_steer_mpdus_tried;
1165+
__le32 ax_ofdma_rbo_steer_mpdus_failed;
1166+
__le32 ax_ofdma_sifs_steer_mpdus_tried;
1167+
__le32 ax_ofdma_sifs_steer_mpdus_failed;
1168+
} __packed;
1169+
11031170
enum ath12k_htt_stats_page_lock_state {
11041171
ATH12K_HTT_STATS_PAGE_LOCKED = 0,
11051172
ATH12K_HTT_STATS_PAGE_UNLOCKED = 1,

0 commit comments

Comments
 (0)