@@ -2668,6 +2668,240 @@ ath12k_htt_print_pdev_tx_rate_txbf_stats_tlv(const void *tag_buf, u16 tag_len,
2668
2668
stats_req -> buf_len = len ;
2669
2669
}
2670
2670
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
+
2671
2905
static void ath12k_htt_print_dlpager_entry (const struct ath12k_htt_pgs_info * pg_info ,
2672
2906
int idx , char * str_buf )
2673
2907
{
@@ -3603,6 +3837,22 @@ static int ath12k_dbg_htt_ext_stats_parse(struct ath12k_base *ab,
3603
3837
case HTT_STATS_PDEV_TX_RATE_TXBF_STATS_TAG :
3604
3838
ath12k_htt_print_pdev_tx_rate_txbf_stats_tlv (tag_buf , len , stats_req );
3605
3839
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 ;
3606
3856
case HTT_STATS_DLPAGER_STATS_TAG :
3607
3857
ath12k_htt_print_dlpager_stats_tlv (tag_buf , len , stats_req );
3608
3858
break ;
0 commit comments