@@ -776,11 +776,14 @@ static inline void htt_print_tx_peer_rate_stats_tlv(const void *tag_buf,
776
776
u32 len = stats_req -> buf_len ;
777
777
u32 buf_len = ATH11K_HTT_STATS_BUF_SIZE ;
778
778
char str_buf [HTT_MAX_STRING_LEN ] = {0 };
779
- char * tx_gi [HTT_TX_PEER_STATS_NUM_GI_COUNTERS ];
779
+ char * tx_gi [HTT_TX_PEER_STATS_NUM_GI_COUNTERS ] = { NULL } ;
780
780
u8 j ;
781
781
782
- for (j = 0 ; j < HTT_TX_PEER_STATS_NUM_GI_COUNTERS ; j ++ )
782
+ for (j = 0 ; j < HTT_TX_PEER_STATS_NUM_GI_COUNTERS ; j ++ ) {
783
783
tx_gi [j ] = kmalloc (HTT_MAX_STRING_LEN , GFP_ATOMIC );
784
+ if (!tx_gi [j ])
785
+ goto fail ;
786
+ }
784
787
785
788
len += HTT_DBG_OUT (buf + len , buf_len - len , "HTT_TX_PEER_RATE_STATS_TLV:" );
786
789
len += HTT_DBG_OUT (buf + len , buf_len - len , "tx_ldpc = %u" ,
@@ -841,15 +844,16 @@ static inline void htt_print_tx_peer_rate_stats_tlv(const void *tag_buf,
841
844
HTT_TX_PDEV_STATS_NUM_DCM_COUNTERS );
842
845
len += HTT_DBG_OUT (buf + len , buf_len - len , "tx_dcm = %s\n" , str_buf );
843
846
844
- for (j = 0 ; j < HTT_TX_PEER_STATS_NUM_GI_COUNTERS ; j ++ )
845
- kfree (tx_gi [j ]);
846
-
847
847
if (len >= buf_len )
848
848
buf [buf_len - 1 ] = 0 ;
849
849
else
850
850
buf [len ] = 0 ;
851
851
852
852
stats_req -> buf_len = len ;
853
+
854
+ fail :
855
+ for (j = 0 ; j < HTT_TX_PEER_STATS_NUM_GI_COUNTERS ; j ++ )
856
+ kfree (tx_gi [j ]);
853
857
}
854
858
855
859
static inline void htt_print_rx_peer_rate_stats_tlv (const void * tag_buf ,
@@ -860,15 +864,21 @@ static inline void htt_print_rx_peer_rate_stats_tlv(const void *tag_buf,
860
864
u32 len = stats_req -> buf_len ;
861
865
u32 buf_len = ATH11K_HTT_STATS_BUF_SIZE ;
862
866
u8 j ;
863
- char * rssi_chain [HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS ];
864
- char * rx_gi [HTT_RX_PEER_STATS_NUM_GI_COUNTERS ];
867
+ char * rssi_chain [HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS ] = { NULL } ;
868
+ char * rx_gi [HTT_RX_PEER_STATS_NUM_GI_COUNTERS ] = { NULL } ;
865
869
char str_buf [HTT_MAX_STRING_LEN ] = {0 };
866
870
867
- for (j = 0 ; j < HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS ; j ++ )
871
+ for (j = 0 ; j < HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS ; j ++ ) {
868
872
rssi_chain [j ] = kmalloc (HTT_MAX_STRING_LEN , GFP_ATOMIC );
873
+ if (!rssi_chain [j ])
874
+ goto fail ;
875
+ }
869
876
870
- for (j = 0 ; j < HTT_RX_PEER_STATS_NUM_GI_COUNTERS ; j ++ )
877
+ for (j = 0 ; j < HTT_RX_PEER_STATS_NUM_GI_COUNTERS ; j ++ ) {
871
878
rx_gi [j ] = kmalloc (HTT_MAX_STRING_LEN , GFP_ATOMIC );
879
+ if (!rx_gi [j ])
880
+ goto fail ;
881
+ }
872
882
873
883
len += HTT_DBG_OUT (buf + len , buf_len - len , "HTT_RX_PEER_RATE_STATS_TLV:" );
874
884
len += HTT_DBG_OUT (buf + len , buf_len - len , "nsts = %u" ,
@@ -928,18 +938,19 @@ static inline void htt_print_rx_peer_rate_stats_tlv(const void *tag_buf,
928
938
HTT_RX_PDEV_STATS_NUM_PREAMBLE_TYPES );
929
939
len += HTT_DBG_OUT (buf + len , buf_len - len , "rx_pream = %s\n" , str_buf );
930
940
931
- for (j = 0 ; j < HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS ; j ++ )
932
- kfree (rssi_chain [j ]);
933
-
934
- for (j = 0 ; j < HTT_RX_PEER_STATS_NUM_GI_COUNTERS ; j ++ )
935
- kfree (rx_gi [j ]);
936
-
937
941
if (len >= buf_len )
938
942
buf [buf_len - 1 ] = 0 ;
939
943
else
940
944
buf [len ] = 0 ;
941
945
942
946
stats_req -> buf_len = len ;
947
+
948
+ fail :
949
+ for (j = 0 ; j < HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS ; j ++ )
950
+ kfree (rssi_chain [j ]);
951
+
952
+ for (j = 0 ; j < HTT_RX_PEER_STATS_NUM_GI_COUNTERS ; j ++ )
953
+ kfree (rx_gi [j ]);
943
954
}
944
955
945
956
static inline void
@@ -2832,10 +2843,13 @@ static inline void htt_print_tx_pdev_rate_stats_tlv(const void *tag_buf,
2832
2843
u32 buf_len = ATH11K_HTT_STATS_BUF_SIZE ;
2833
2844
u8 j ;
2834
2845
char str_buf [HTT_MAX_STRING_LEN ] = {0 };
2835
- char * tx_gi [HTT_TX_PEER_STATS_NUM_GI_COUNTERS ];
2846
+ char * tx_gi [HTT_TX_PEER_STATS_NUM_GI_COUNTERS ] = { NULL } ;
2836
2847
2837
- for (j = 0 ; j < HTT_TX_PEER_STATS_NUM_GI_COUNTERS ; j ++ )
2848
+ for (j = 0 ; j < HTT_TX_PEER_STATS_NUM_GI_COUNTERS ; j ++ ) {
2838
2849
tx_gi [j ] = kmalloc (HTT_MAX_STRING_LEN , GFP_ATOMIC );
2850
+ if (!tx_gi [j ])
2851
+ goto fail ;
2852
+ }
2839
2853
2840
2854
len += HTT_DBG_OUT (buf + len , buf_len - len , "HTT_TX_PDEV_RATE_STATS_TLV:" );
2841
2855
len += HTT_DBG_OUT (buf + len , buf_len - len , "mac_id = %u" ,
@@ -2988,15 +3002,15 @@ static inline void htt_print_tx_pdev_rate_stats_tlv(const void *tag_buf,
2988
3002
HTT_TX_PDEV_STATS_NUM_DCM_COUNTERS );
2989
3003
len += HTT_DBG_OUT (buf + len , buf_len - len , "tx_dcm = %s\n" , str_buf );
2990
3004
2991
- for (j = 0 ; j < HTT_TX_PEER_STATS_NUM_GI_COUNTERS ; j ++ )
2992
- kfree (tx_gi [j ]);
2993
-
2994
3005
if (len >= buf_len )
2995
3006
buf [buf_len - 1 ] = 0 ;
2996
3007
else
2997
3008
buf [len ] = 0 ;
2998
3009
2999
3010
stats_req -> buf_len = len ;
3011
+ fail :
3012
+ for (j = 0 ; j < HTT_TX_PEER_STATS_NUM_GI_COUNTERS ; j ++ )
3013
+ kfree (tx_gi [j ]);
3000
3014
}
3001
3015
3002
3016
static inline void htt_print_rx_pdev_rate_stats_tlv (const void * tag_buf ,
@@ -3006,16 +3020,30 @@ static inline void htt_print_rx_pdev_rate_stats_tlv(const void *tag_buf,
3006
3020
u8 * buf = stats_req -> buf ;
3007
3021
u32 len = stats_req -> buf_len ;
3008
3022
u32 buf_len = ATH11K_HTT_STATS_BUF_SIZE ;
3009
- u8 j ;
3010
- char * rssi_chain [HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS ];
3011
- char * rx_gi [HTT_RX_PDEV_STATS_NUM_GI_COUNTERS ];
3023
+ u8 i , j ;
3024
+ u16 index = 0 ;
3025
+ char * rssi_chain [HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS ] = {NULL };
3026
+ char * rx_gi [HTT_RX_PDEV_STATS_NUM_GI_COUNTERS ] = {NULL };
3012
3027
char str_buf [HTT_MAX_STRING_LEN ] = {0 };
3028
+ char * rx_pilot_evm_db [HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS ] = {NULL };
3013
3029
3014
- for (j = 0 ; j < HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS ; j ++ )
3030
+ for (j = 0 ; j < HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS ; j ++ ) {
3015
3031
rssi_chain [j ] = kmalloc (HTT_MAX_STRING_LEN , GFP_ATOMIC );
3032
+ if (!rssi_chain [j ])
3033
+ goto fail ;
3034
+ }
3016
3035
3017
- for (j = 0 ; j < HTT_RX_PDEV_STATS_NUM_GI_COUNTERS ; j ++ )
3036
+ for (j = 0 ; j < HTT_RX_PDEV_STATS_NUM_GI_COUNTERS ; j ++ ) {
3018
3037
rx_gi [j ] = kmalloc (HTT_MAX_STRING_LEN , GFP_ATOMIC );
3038
+ if (!rx_gi [j ])
3039
+ goto fail ;
3040
+ }
3041
+
3042
+ for (j = 0 ; j < HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS ; j ++ ) {
3043
+ rx_pilot_evm_db [j ] = kmalloc (HTT_MAX_STRING_LEN , GFP_ATOMIC );
3044
+ if (!rx_pilot_evm_db [j ])
3045
+ goto fail ;
3046
+ }
3019
3047
3020
3048
len += HTT_DBG_OUT (buf + len , buf_len - len , "HTT_RX_PDEV_RATE_STATS_TLV:" );
3021
3049
len += HTT_DBG_OUT (buf + len , buf_len - len , "mac_id = %u" ,
@@ -3059,6 +3087,32 @@ static inline void htt_print_rx_pdev_rate_stats_tlv(const void *tag_buf,
3059
3087
ARRAY_TO_STRING (str_buf , htt_stats_buf -> rx_bw ,
3060
3088
HTT_RX_PDEV_STATS_NUM_BW_COUNTERS );
3061
3089
len += HTT_DBG_OUT (buf + len , buf_len - len , "rx_bw = %s " , str_buf );
3090
+ len += HTT_DBG_OUT (buf + len , buf_len - len , "rx_evm_nss_count = %u" ,
3091
+ htt_stats_buf -> nss_count );
3092
+
3093
+ len += HTT_DBG_OUT (buf + len , buf_len - len , "rx_evm_pilot_count = %u" ,
3094
+ htt_stats_buf -> pilot_count );
3095
+
3096
+ for (j = 0 ; j < HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS ; j ++ ) {
3097
+ index = 0 ;
3098
+
3099
+ for (i = 0 ; i < HTT_RX_PDEV_STATS_RXEVM_MAX_PILOTS_PER_NSS ; i ++ )
3100
+ index += snprintf (& rx_pilot_evm_db [j ][index ],
3101
+ HTT_MAX_STRING_LEN - index ,
3102
+ " %u:%d," ,
3103
+ i ,
3104
+ htt_stats_buf -> rx_pilot_evm_db [j ][i ]);
3105
+ len += HTT_DBG_OUT (buf + len , buf_len - len , "pilot_evm_dB[%u] = %s " ,
3106
+ j , rx_pilot_evm_db [j ]);
3107
+ }
3108
+
3109
+ index = 0 ;
3110
+ memset (str_buf , 0x0 , HTT_MAX_STRING_LEN );
3111
+ for (i = 0 ; i < HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS ; i ++ )
3112
+ index += snprintf (& str_buf [index ],
3113
+ HTT_MAX_STRING_LEN - index ,
3114
+ " %u:%d," , i , htt_stats_buf -> rx_pilot_evm_db_mean [i ]);
3115
+ len += HTT_DBG_OUT (buf + len , buf_len - len , "pilot_evm_dB_mean = %s " , str_buf );
3062
3116
3063
3117
for (j = 0 ; j < HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS ; j ++ ) {
3064
3118
ARRAY_TO_STRING (rssi_chain [j ], htt_stats_buf -> rssi_chain [j ],
@@ -3079,12 +3133,6 @@ static inline void htt_print_rx_pdev_rate_stats_tlv(const void *tag_buf,
3079
3133
HTT_RX_PDEV_STATS_NUM_PREAMBLE_TYPES );
3080
3134
len += HTT_DBG_OUT (buf + len , buf_len - len , "rx_pream = %s" , str_buf );
3081
3135
3082
- for (j = 0 ; j < HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS ; j ++ )
3083
- kfree (rssi_chain [j ]);
3084
-
3085
- for (j = 0 ; j < HTT_RX_PDEV_STATS_NUM_GI_COUNTERS ; j ++ )
3086
- kfree (rx_gi [j ]);
3087
-
3088
3136
len += HTT_DBG_OUT (buf + len , buf_len - len , "rx_11ax_su_ext = %u" ,
3089
3137
htt_stats_buf -> rx_11ax_su_ext );
3090
3138
len += HTT_DBG_OUT (buf + len , buf_len - len , "rx_11ac_mumimo = %u" ,
@@ -3110,15 +3158,106 @@ static inline void htt_print_rx_pdev_rate_stats_tlv(const void *tag_buf,
3110
3158
3111
3159
len += HTT_DBG_OUT (buf + len , buf_len - len , "rx_active_dur_us_low = %u" ,
3112
3160
htt_stats_buf -> rx_active_dur_us_low );
3113
- len += HTT_DBG_OUT (buf + len , buf_len - len , "rx_active_dur_us_high = %u\n" ,
3114
- htt_stats_buf -> rx_active_dur_us_high );
3161
+ len += HTT_DBG_OUT (buf + len , buf_len - len , "rx_active_dur_us_high = %u" ,
3162
+ htt_stats_buf -> rx_active_dur_us_high );
3163
+ len += HTT_DBG_OUT (buf + len , buf_len - len , "rx_11ax_ul_ofdma = %u" ,
3164
+ htt_stats_buf -> rx_11ax_ul_ofdma );
3165
+
3166
+ memset (str_buf , 0x0 , HTT_MAX_STRING_LEN );
3167
+ ARRAY_TO_STRING (str_buf , htt_stats_buf -> ul_ofdma_rx_mcs ,
3168
+ HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS );
3169
+ len += HTT_DBG_OUT (buf + len , buf_len - len , "ul_ofdma_rx_mcs = %s " , str_buf );
3170
+
3171
+ for (j = 0 ; j < HTT_RX_PDEV_STATS_NUM_GI_COUNTERS ; j ++ ) {
3172
+ ARRAY_TO_STRING (rx_gi [j ], htt_stats_buf -> ul_ofdma_rx_gi [j ],
3173
+ HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS );
3174
+ len += HTT_DBG_OUT (buf + len , buf_len - len , "ul_ofdma_rx_gi[%u] = %s " ,
3175
+ j , rx_gi [j ]);
3176
+ }
3177
+
3178
+ memset (str_buf , 0x0 , HTT_MAX_STRING_LEN );
3179
+ ARRAY_TO_STRING (str_buf , htt_stats_buf -> ul_ofdma_rx_nss ,
3180
+ HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS );
3181
+ len += HTT_DBG_OUT (buf + len , buf_len - len , "ul_ofdma_rx_nss = %s " , str_buf );
3182
+
3183
+ memset (str_buf , 0x0 , HTT_MAX_STRING_LEN );
3184
+ ARRAY_TO_STRING (str_buf , htt_stats_buf -> ul_ofdma_rx_bw ,
3185
+ HTT_RX_PDEV_STATS_NUM_BW_COUNTERS );
3186
+ len += HTT_DBG_OUT (buf + len , buf_len - len , "ul_ofdma_rx_bw = %s " , str_buf );
3187
+
3188
+ len += HTT_DBG_OUT (buf + len , buf_len - len , "ul_ofdma_rx_stbc = %u" ,
3189
+ htt_stats_buf -> ul_ofdma_rx_stbc );
3190
+ len += HTT_DBG_OUT (buf + len , buf_len - len , "ul_ofdma_rx_ldpc = %u" ,
3191
+ htt_stats_buf -> ul_ofdma_rx_ldpc );
3192
+
3193
+ memset (str_buf , 0x0 , HTT_MAX_STRING_LEN );
3194
+ ARRAY_TO_STRING (str_buf , htt_stats_buf -> rx_ulofdma_non_data_ppdu ,
3195
+ HTT_RX_PDEV_MAX_OFDMA_NUM_USER );
3196
+ len += HTT_DBG_OUT (buf + len , buf_len - len , "rx_ulofdma_non_data_ppdu = %s " ,
3197
+ str_buf );
3198
+
3199
+ memset (str_buf , 0x0 , HTT_MAX_STRING_LEN );
3200
+ ARRAY_TO_STRING (str_buf , htt_stats_buf -> rx_ulofdma_data_ppdu ,
3201
+ HTT_RX_PDEV_MAX_OFDMA_NUM_USER );
3202
+ len += HTT_DBG_OUT (buf + len , buf_len - len , "rx_ulofdma_data_ppdu = %s " ,
3203
+ str_buf );
3204
+
3205
+ memset (str_buf , 0x0 , HTT_MAX_STRING_LEN );
3206
+ ARRAY_TO_STRING (str_buf , htt_stats_buf -> rx_ulofdma_mpdu_ok ,
3207
+ HTT_RX_PDEV_MAX_OFDMA_NUM_USER );
3208
+ len += HTT_DBG_OUT (buf + len , buf_len - len , "rx_ulofdma_mpdu_ok = %s " , str_buf );
3209
+
3210
+ memset (str_buf , 0x0 , HTT_MAX_STRING_LEN );
3211
+ ARRAY_TO_STRING (str_buf , htt_stats_buf -> rx_ulofdma_mpdu_fail ,
3212
+ HTT_RX_PDEV_MAX_OFDMA_NUM_USER );
3213
+ len += HTT_DBG_OUT (buf + len , buf_len - len , "rx_ulofdma_mpdu_fail = %s" ,
3214
+ str_buf );
3215
+
3216
+ for (j = 0 ; j < HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS ; j ++ ) {
3217
+ index = 0 ;
3218
+ memset (str_buf , 0x0 , HTT_MAX_STRING_LEN );
3219
+ for (i = 0 ; i < HTT_RX_PDEV_MAX_OFDMA_NUM_USER ; i ++ )
3220
+ index += snprintf (& str_buf [index ],
3221
+ HTT_MAX_STRING_LEN - index ,
3222
+ " %u:%d," ,
3223
+ i , htt_stats_buf -> rx_ul_fd_rssi [j ][i ]);
3224
+ len += HTT_DBG_OUT (buf + len , buf_len - len ,
3225
+ "rx_ul_fd_rssi: nss[%u] = %s" , j , str_buf );
3226
+ }
3227
+
3228
+ len += HTT_DBG_OUT (buf + len , buf_len - len , "per_chain_rssi_pkt_type = %#x" ,
3229
+ htt_stats_buf -> per_chain_rssi_pkt_type );
3230
+
3231
+ for (j = 0 ; j < HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS ; j ++ ) {
3232
+ index = 0 ;
3233
+ memset (str_buf , 0x0 , HTT_MAX_STRING_LEN );
3234
+ for (i = 0 ; i < HTT_RX_PDEV_STATS_NUM_BW_COUNTERS ; i ++ )
3235
+ index += snprintf (& str_buf [index ],
3236
+ HTT_MAX_STRING_LEN - index ,
3237
+ " %u:%d," ,
3238
+ i ,
3239
+ htt_stats_buf -> rx_per_chain_rssi_in_dbm [j ][i ]);
3240
+ len += HTT_DBG_OUT (buf + len , buf_len - len ,
3241
+ "rx_per_chain_rssi_in_dbm[%u] = %s " , j , str_buf );
3242
+ }
3243
+ len += HTT_DBG_OUT (buf + len , buf_len - len , "\n" );
3115
3244
3116
3245
if (len >= buf_len )
3117
3246
buf [buf_len - 1 ] = 0 ;
3118
3247
else
3119
3248
buf [len ] = 0 ;
3120
3249
3121
3250
stats_req -> buf_len = len ;
3251
+
3252
+ fail :
3253
+ for (j = 0 ; j < HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS ; j ++ )
3254
+ kfree (rssi_chain [j ]);
3255
+
3256
+ for (j = 0 ; j < HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS ; j ++ )
3257
+ kfree (rx_pilot_evm_db [j ]);
3258
+
3259
+ for (i = 0 ; i < HTT_RX_PDEV_STATS_NUM_GI_COUNTERS ; i ++ )
3260
+ kfree (rx_gi [i ]);
3122
3261
}
3123
3262
3124
3263
static inline void htt_print_rx_soc_fw_stats_tlv (const void * tag_buf ,
0 commit comments