xref: /wlan-dirver/qca-wifi-host-cmn/dp/wifi3.0/dp_stats.c (revision 6ecd284e5a94a1c96e26d571dd47419ac305990d)
1 /*
2  * Copyright (c) 2017-2018 The Linux Foundation. All rights reserved.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for
5  * any purpose with or without fee is hereby granted, provided that the
6  * above copyright notice and this permission notice appear in all
7  * copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
14  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16  * PERFORMANCE OF THIS SOFTWARE.
17  */
18 #include "qdf_types.h"
19 #include "htt_stats.h"
20 #include "dp_types.h"
21 #include "dp_internal.h"
22 
23 #define DP_MAX_STRING_LEN 500
24 
25 #define DP_HTT_HW_INTR_NAME_LEN  HTT_STATS_MAX_HW_INTR_NAME_LEN
26 #define DP_HTT_HW_MODULE_NAME_LEN  HTT_STATS_MAX_HW_MODULE_NAME_LEN
27 #define DP_HTT_COUNTER_NAME_LEN  HTT_MAX_COUNTER_NAME
28 #define DP_HTT_LOW_WM_HIT_COUNT_LEN  HTT_STATS_LOW_WM_BINS
29 #define DP_HTT_HIGH_WM_HIT_COUNT_LEN  HTT_STATS_HIGH_WM_BINS
30 #define DP_HTT_TX_MCS_LEN  HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS
31 #define DP_HTT_TX_SU_MCS_LEN  HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS
32 #define DP_HTT_TX_MU_MCS_LEN  HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS
33 #define DP_HTT_TX_NSS_LEN  HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS
34 #define DP_HTT_TX_BW_LEN  HTT_TX_PDEV_STATS_NUM_BW_COUNTERS
35 #define DP_HTT_TX_PREAM_LEN  HTT_TX_PDEV_STATS_NUM_PREAMBLE_TYPES
36 #define DP_HTT_TX_PDEV_GI_LEN  HTT_TX_PDEV_STATS_NUM_GI_COUNTERS
37 #define DP_HTT_TX_DCM_LEN  HTT_TX_PDEV_STATS_NUM_DCM_COUNTERS
38 #define DP_HTT_RX_MCS_LEN  HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS
39 #define DP_HTT_RX_NSS_LEN  HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS
40 #define DP_HTT_RX_DCM_LEN  HTT_RX_PDEV_STATS_NUM_DCM_COUNTERS
41 #define DP_HTT_RX_BW_LEN  HTT_RX_PDEV_STATS_NUM_BW_COUNTERS
42 #define DP_HTT_RX_PREAM_LEN  HTT_RX_PDEV_STATS_NUM_PREAMBLE_TYPES
43 #define DP_HTT_RSSI_CHAIN_LEN  HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS
44 #define DP_HTT_RX_GI_LEN  HTT_RX_PDEV_STATS_NUM_GI_COUNTERS
45 #define DP_HTT_FW_RING_MGMT_SUBTYPE_LEN  HTT_STATS_SUBTYPE_MAX
46 #define DP_HTT_FW_RING_CTRL_SUBTYPE_LEN  HTT_STATS_SUBTYPE_MAX
47 #define DP_HTT_FW_RING_MPDU_ERR_LEN  HTT_RX_STATS_RXDMA_MAX_ERR
48 #define DP_HTT_TID_NAME_LEN  MAX_HTT_TID_NAME
49 #define DP_HTT_PEER_NUM_SS HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS
50 #define DP_HTT_PDEV_TX_GI_LEN HTT_TX_PDEV_STATS_NUM_GI_COUNTERS
51 
52 /*
53  * dp_print_stats_string_tlv: display htt_stats_string_tlv
54  * @tag_buf: buffer containing the tlv htt_stats_string_tlv
55  *
56  * return:void
57  */
58 static inline void dp_print_stats_string_tlv(uint32_t *tag_buf)
59 {
60 	htt_stats_string_tlv *dp_stats_buf =
61 		(htt_stats_string_tlv *)tag_buf;
62 	uint8_t i;
63 	uint16_t index = 0;
64 	uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
65 	char *data = qdf_mem_malloc(DP_MAX_STRING_LEN);
66 
67 	if (!data) {
68 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
69 			  FL("Output buffer not allocated\n"));
70 		return;
71 	}
72 
73 	DP_TRACE_STATS(FATAL, "HTT_STATS_STRING_TLV:");
74 	for (i = 0; i <  tag_len; i++) {
75 		index += qdf_snprint(&data[index],
76 				DP_MAX_STRING_LEN - index,
77 				" %d:%d,", i, dp_stats_buf->data[i]);
78 	}
79 	DP_TRACE_STATS(FATAL, "data = %s\n", data);
80 	qdf_mem_free(data);
81 }
82 
83 /*
84  * dp_print_tx_pdev_stats_cmn_tlv: display htt_tx_pdev_stats_cmn_tlv
85  * @tag_buf: buffer containing the tlv htt_tx_pdev_stats_cmn_tlv
86  *
87  * return:void
88  */
89 static inline void dp_print_tx_pdev_stats_cmn_tlv(uint32_t *tag_buf)
90 {
91 	htt_tx_pdev_stats_cmn_tlv *dp_stats_buf =
92 		(htt_tx_pdev_stats_cmn_tlv *)tag_buf;
93 
94 	DP_TRACE_STATS(FATAL, "HTT_TX_PDEV_STATS_CMN_TLV:");
95 	DP_TRACE_STATS(FATAL, "mac_id__word = %d",
96 			dp_stats_buf->mac_id__word);
97 	DP_TRACE_STATS(FATAL, "hw_queued = %d",
98 			dp_stats_buf->hw_queued);
99 	DP_TRACE_STATS(FATAL, "hw_reaped = %d",
100 			dp_stats_buf->hw_reaped);
101 	DP_TRACE_STATS(FATAL, "underrun = %d",
102 			dp_stats_buf->underrun);
103 	DP_TRACE_STATS(FATAL, "hw_paused = %d",
104 			dp_stats_buf->hw_paused);
105 	DP_TRACE_STATS(FATAL, "hw_flush = %d",
106 			dp_stats_buf->hw_flush);
107 	DP_TRACE_STATS(FATAL, "hw_filt = %d",
108 			dp_stats_buf->hw_filt);
109 	DP_TRACE_STATS(FATAL, "tx_abort = %d",
110 			dp_stats_buf->tx_abort);
111 	DP_TRACE_STATS(FATAL, "mpdu_requeued = %d",
112 			dp_stats_buf->mpdu_requed);
113 	DP_TRACE_STATS(FATAL, "tx_xretry = %d",
114 			dp_stats_buf->tx_xretry);
115 	DP_TRACE_STATS(FATAL, "data_rc = %d",
116 			dp_stats_buf->data_rc);
117 	DP_TRACE_STATS(FATAL, "mpdu_dropped_xretry = %d",
118 			dp_stats_buf->mpdu_dropped_xretry);
119 	DP_TRACE_STATS(FATAL, "illegal_rate_phy_err = %d",
120 			dp_stats_buf->illgl_rate_phy_err);
121 	DP_TRACE_STATS(FATAL, "cont_xretry = %d",
122 			dp_stats_buf->cont_xretry);
123 	DP_TRACE_STATS(FATAL, "tx_timeout = %d",
124 			dp_stats_buf->tx_timeout);
125 	DP_TRACE_STATS(FATAL, "pdev_resets = %d",
126 			dp_stats_buf->pdev_resets);
127 	DP_TRACE_STATS(FATAL, "phy_underrun = %d",
128 			dp_stats_buf->phy_underrun);
129 	DP_TRACE_STATS(FATAL, "txop_ovf = %d",
130 			dp_stats_buf->txop_ovf);
131 	DP_TRACE_STATS(FATAL, "seq_posted = %d",
132 			dp_stats_buf->seq_posted);
133 	DP_TRACE_STATS(FATAL, "seq_failed_queueing = %d",
134 			dp_stats_buf->seq_failed_queueing);
135 	DP_TRACE_STATS(FATAL, "seq_completed = %d",
136 			dp_stats_buf->seq_completed);
137 	DP_TRACE_STATS(FATAL, "seq_restarted = %d",
138 			dp_stats_buf->seq_restarted);
139 	DP_TRACE_STATS(FATAL, "mu_seq_posted = %d",
140 			dp_stats_buf->mu_seq_posted);
141 	DP_TRACE_STATS(FATAL, "seq_switch_hw_paused = %d",
142 			dp_stats_buf->seq_switch_hw_paused);
143 	DP_TRACE_STATS(FATAL, "next_seq_posted_dsr = %d",
144 			dp_stats_buf->next_seq_posted_dsr);
145 	DP_TRACE_STATS(FATAL, "seq_posted_isr = %d",
146 			dp_stats_buf->seq_posted_isr);
147 	DP_TRACE_STATS(FATAL, "seq_ctrl_cached = %d",
148 			dp_stats_buf->seq_ctrl_cached);
149 	DP_TRACE_STATS(FATAL, "mpdu_count_tqm = %d",
150 			dp_stats_buf->mpdu_count_tqm);
151 	DP_TRACE_STATS(FATAL, "msdu_count_tqm = %d",
152 			dp_stats_buf->msdu_count_tqm);
153 	DP_TRACE_STATS(FATAL, "mpdu_removed_tqm = %d",
154 			dp_stats_buf->mpdu_removed_tqm);
155 	DP_TRACE_STATS(FATAL, "msdu_removed_tqm = %d",
156 			dp_stats_buf->msdu_removed_tqm);
157 	DP_TRACE_STATS(FATAL, "mpdus_sw_flush = %d",
158 			dp_stats_buf->mpdus_sw_flush);
159 	DP_TRACE_STATS(FATAL, "mpdus_hw_filter = %d",
160 			dp_stats_buf->mpdus_hw_filter);
161 	DP_TRACE_STATS(FATAL, "mpdus_truncated = %d",
162 			dp_stats_buf->mpdus_truncated);
163 	DP_TRACE_STATS(FATAL, "mpdus_ack_failed = %d",
164 			dp_stats_buf->mpdus_ack_failed);
165 	DP_TRACE_STATS(FATAL, "mpdus_expired = %d",
166 			dp_stats_buf->mpdus_expired);
167 	DP_TRACE_STATS(FATAL, "mpdus_seq_hw_retry = %d",
168 			dp_stats_buf->mpdus_seq_hw_retry);
169 	DP_TRACE_STATS(FATAL, "ack_tlv_proc = %d",
170 			dp_stats_buf->ack_tlv_proc);
171 	DP_TRACE_STATS(FATAL, "coex_abort_mpdu_cnt_valid = %d",
172 			dp_stats_buf->coex_abort_mpdu_cnt_valid);
173 	DP_TRACE_STATS(FATAL, "coex_abort_mpdu_cnt = %d\n",
174 			dp_stats_buf->coex_abort_mpdu_cnt);
175 }
176 
177 /*
178  * dp_print_tx_pdev_stats_urrn_tlv_v: display htt_tx_pdev_stats_urrn_tlv_v
179  * @tag_buf: buffer containing the tlv htt_tx_pdev_stats_urrn_tlv_v
180  *
181  * return:void
182  */
183 static inline void dp_print_tx_pdev_stats_urrn_tlv_v(uint32_t *tag_buf)
184 {
185 	htt_tx_pdev_stats_urrn_tlv_v *dp_stats_buf =
186 		(htt_tx_pdev_stats_urrn_tlv_v *)tag_buf;
187 	uint8_t i;
188 	uint16_t index = 0;
189 	uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
190 	char *urrn_stats = qdf_mem_malloc(DP_MAX_STRING_LEN);
191 
192 	if (!urrn_stats) {
193 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
194 			  FL("Output buffer not allocated\n"));
195 		return;
196 	}
197 
198 	tag_len = qdf_min(tag_len, (uint32_t)HTT_TX_PDEV_MAX_URRN_STATS);
199 	DP_TRACE_STATS(FATAL, "HTT_TX_PDEV_STATS_URRN_TLV_V:");
200 	for (i = 0; i <  tag_len; i++) {
201 		index += qdf_snprint(&urrn_stats[index],
202 				DP_MAX_STRING_LEN - index,
203 				" %d:%d,", i, dp_stats_buf->urrn_stats[i]);
204 	}
205 	DP_TRACE_STATS(FATAL, "urrn_stats = %s\n", urrn_stats);
206 	qdf_mem_free(urrn_stats);
207 }
208 
209 /*
210  * dp_print_tx_pdev_stats_flush_tlv_v: display htt_tx_pdev_stats_flush_tlv_v
211  * @tag_buf: buffer containing the tlv htt_tx_pdev_stats_flush_tlv_v
212  *
213  * return:void
214  */
215 static inline void dp_print_tx_pdev_stats_flush_tlv_v(uint32_t *tag_buf)
216 {
217 	htt_tx_pdev_stats_flush_tlv_v *dp_stats_buf =
218 		(htt_tx_pdev_stats_flush_tlv_v *)tag_buf;
219 	uint8_t i;
220 	uint16_t index = 0;
221 	uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
222 	char *flush_errs = qdf_mem_malloc(DP_MAX_STRING_LEN);
223 
224 	if (!flush_errs) {
225 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
226 			  FL("Output buffer not allocated\n"));
227 		return;
228 	}
229 
230 	tag_len = qdf_min(tag_len,
231 			(uint32_t)HTT_TX_PDEV_MAX_FLUSH_REASON_STATS);
232 
233 	DP_TRACE_STATS(FATAL, "HTT_TX_PDEV_STATS_FLUSH_TLV_V:");
234 	for (i = 0; i <  tag_len; i++) {
235 		index += qdf_snprint(&flush_errs[index],
236 				DP_MAX_STRING_LEN - index,
237 				" %d:%d,", i, dp_stats_buf->flush_errs[i]);
238 	}
239 	DP_TRACE_STATS(FATAL, "flush_errs = %s\n", flush_errs);
240 	qdf_mem_free(flush_errs);
241 }
242 
243 /*
244  * dp_print_tx_pdev_stats_sifs_tlv_v: display htt_tx_pdev_stats_sifs_tlv_v
245  * @tag_buf: buffer containing the tlv htt_tx_pdev_stats_sifs_tlv_v
246  *
247  * return:void
248  */
249 static inline void dp_print_tx_pdev_stats_sifs_tlv_v(uint32_t *tag_buf)
250 {
251 	htt_tx_pdev_stats_sifs_tlv_v *dp_stats_buf =
252 		(htt_tx_pdev_stats_sifs_tlv_v *)tag_buf;
253 	uint8_t i;
254 	uint16_t index = 0;
255 	uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
256 	char *sifs_status = qdf_mem_malloc(DP_MAX_STRING_LEN);
257 
258 	if (!sifs_status) {
259 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
260 			  FL("Output buffer not allocated\n"));
261 		return;
262 	}
263 
264 	tag_len = qdf_min(tag_len, (uint32_t)HTT_TX_PDEV_MAX_SIFS_BURST_STATS);
265 
266 	DP_TRACE_STATS(FATAL, "HTT_TX_PDEV_STATS_SIFS_TLV_V:");
267 	for (i = 0; i <  tag_len; i++) {
268 		index += qdf_snprint(&sifs_status[index],
269 				DP_MAX_STRING_LEN - index,
270 				" %d:%d,", i, dp_stats_buf->sifs_status[i]);
271 	}
272 	DP_TRACE_STATS(FATAL, "sifs_status = %s\n", sifs_status);
273 	qdf_mem_free(sifs_status);
274 }
275 
276 /*
277  * dp_print_tx_pdev_stats_phy_err_tlv_v: display htt_tx_pdev_stats_phy_err_tlv_v
278  * @tag_buf: buffer containing the tlv htt_tx_pdev_stats_phy_err_tlv_v
279  *
280  * return:void
281  */
282 static inline void dp_print_tx_pdev_stats_phy_err_tlv_v(uint32_t *tag_buf)
283 {
284 	htt_tx_pdev_stats_phy_err_tlv_v *dp_stats_buf =
285 		(htt_tx_pdev_stats_phy_err_tlv_v *)tag_buf;
286 	uint8_t i;
287 	uint16_t index = 0;
288 	uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
289 	char *phy_errs = qdf_mem_malloc(DP_MAX_STRING_LEN);
290 
291 	if (!phy_errs) {
292 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
293 			  FL("Output buffer not allocated\n"));
294 		return;
295 	}
296 
297 	tag_len = qdf_min(tag_len, (uint32_t)HTT_TX_PDEV_MAX_PHY_ERR_STATS);
298 
299 	DP_TRACE_STATS(FATAL, "HTT_TX_PDEV_STATS_PHY_ERR_TLV_V:");
300 	for (i = 0; i <  tag_len; i++) {
301 		index += qdf_snprint(&phy_errs[index],
302 				DP_MAX_STRING_LEN - index,
303 				" %d:%d,", i, dp_stats_buf->phy_errs[i]);
304 	}
305 	DP_TRACE_STATS(FATAL, "phy_errs = %s\n", phy_errs);
306 	qdf_mem_free(phy_errs);
307 }
308 
309 /*
310  * dp_print_hw_stats_intr_misc_tlv: display htt_hw_stats_intr_misc_tlv
311  * @tag_buf: buffer containing the tlv htt_hw_stats_intr_misc_tlv
312  *
313  * return:void
314  */
315 static inline void dp_print_hw_stats_intr_misc_tlv(uint32_t *tag_buf)
316 {
317 	htt_hw_stats_intr_misc_tlv *dp_stats_buf =
318 		(htt_hw_stats_intr_misc_tlv *)tag_buf;
319 	uint8_t i;
320 	uint16_t index = 0;
321 	char *hw_intr_name = qdf_mem_malloc(DP_MAX_STRING_LEN);
322 
323 	if (!hw_intr_name) {
324 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
325 			  FL("Output buffer not allocated\n"));
326 		return;
327 	}
328 
329 	DP_TRACE_STATS(FATAL, "HTT_HW_STATS_INTR_MISC_TLV:");
330 	for (i = 0; i <  DP_HTT_HW_INTR_NAME_LEN; i++) {
331 		index += qdf_snprint(&hw_intr_name[index],
332 				DP_MAX_STRING_LEN - index,
333 				" %d:%d,", i, dp_stats_buf->hw_intr_name[i]);
334 	}
335 	DP_TRACE_STATS(FATAL, "hw_intr_name = %s ", hw_intr_name);
336 	DP_TRACE_STATS(FATAL, "mask = %d",
337 			dp_stats_buf->mask);
338 	DP_TRACE_STATS(FATAL, "count = %d\n",
339 			dp_stats_buf->count);
340 	qdf_mem_free(hw_intr_name);
341 }
342 
343 /*
344  * dp_print_hw_stats_wd_timeout_tlv: display htt_hw_stats_wd_timeout_tlv
345  * @tag_buf: buffer containing the tlv htt_hw_stats_wd_timeout_tlv
346  *
347  * return:void
348  */
349 static inline void dp_print_hw_stats_wd_timeout_tlv(uint32_t *tag_buf)
350 {
351 	htt_hw_stats_wd_timeout_tlv *dp_stats_buf =
352 		(htt_hw_stats_wd_timeout_tlv *)tag_buf;
353 	uint8_t i;
354 	uint16_t index = 0;
355 	char *hw_module_name = qdf_mem_malloc(DP_MAX_STRING_LEN);
356 
357 	if (!hw_module_name) {
358 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
359 			  FL("Output buffer not allocated\n"));
360 		return;
361 	}
362 
363 	DP_TRACE_STATS(FATAL, "HTT_HW_STATS_WD_TIMEOUT_TLV:");
364 	for (i = 0; i <  DP_HTT_HW_MODULE_NAME_LEN; i++) {
365 		index += qdf_snprint(&hw_module_name[index],
366 				DP_MAX_STRING_LEN - index,
367 				" %d:%d,", i, dp_stats_buf->hw_module_name[i]);
368 	}
369 	DP_TRACE_STATS(FATAL, "hw_module_name = %s ", hw_module_name);
370 	DP_TRACE_STATS(FATAL, "count = %d",
371 			dp_stats_buf->count);
372 	qdf_mem_free(hw_module_name);
373 }
374 
375 /*
376  * dp_print_hw_stats_pdev_errs_tlv: display htt_hw_stats_pdev_errs_tlv
377  * @tag_buf: buffer containing the tlv htt_hw_stats_pdev_errs_tlv
378  *
379  * return:void
380  */
381 static inline void dp_print_hw_stats_pdev_errs_tlv(uint32_t *tag_buf)
382 {
383 	htt_hw_stats_pdev_errs_tlv *dp_stats_buf =
384 		(htt_hw_stats_pdev_errs_tlv *)tag_buf;
385 
386 	DP_TRACE_STATS(FATAL, "HTT_HW_STATS_PDEV_ERRS_TLV:");
387 	DP_TRACE_STATS(FATAL, "mac_id__word = %d",
388 			dp_stats_buf->mac_id__word);
389 	DP_TRACE_STATS(FATAL, "tx_abort = %d",
390 			dp_stats_buf->tx_abort);
391 	DP_TRACE_STATS(FATAL, "tx_abort_fail_count = %d",
392 			dp_stats_buf->tx_abort_fail_count);
393 	DP_TRACE_STATS(FATAL, "rx_abort = %d",
394 			dp_stats_buf->rx_abort);
395 	DP_TRACE_STATS(FATAL, "rx_abort_fail_count = %d",
396 			dp_stats_buf->rx_abort_fail_count);
397 	DP_TRACE_STATS(FATAL, "warm_reset = %d",
398 			dp_stats_buf->warm_reset);
399 	DP_TRACE_STATS(FATAL, "cold_reset = %d",
400 			dp_stats_buf->cold_reset);
401 	DP_TRACE_STATS(FATAL, "tx_flush = %d",
402 			dp_stats_buf->tx_flush);
403 	DP_TRACE_STATS(FATAL, "tx_glb_reset = %d",
404 			dp_stats_buf->tx_glb_reset);
405 	DP_TRACE_STATS(FATAL, "tx_txq_reset = %d",
406 			dp_stats_buf->tx_txq_reset);
407 	DP_TRACE_STATS(FATAL, "rx_timeout_reset = %d\n",
408 			dp_stats_buf->rx_timeout_reset);
409 }
410 
411 /*
412  * dp_print_msdu_flow_stats_tlv: display htt_msdu_flow_stats_tlv
413  * @tag_buf: buffer containing the tlv htt_msdu_flow_stats_tlv
414  *
415  * return:void
416  */
417 static inline void dp_print_msdu_flow_stats_tlv(uint32_t *tag_buf)
418 {
419 	htt_msdu_flow_stats_tlv *dp_stats_buf =
420 		(htt_msdu_flow_stats_tlv *)tag_buf;
421 
422 	DP_TRACE_STATS(FATAL, "HTT_MSDU_FLOW_STATS_TLV:");
423 	DP_TRACE_STATS(FATAL, "last_update_timestamp = %d",
424 			dp_stats_buf->last_update_timestamp);
425 	DP_TRACE_STATS(FATAL, "last_add_timestamp = %d",
426 			dp_stats_buf->last_add_timestamp);
427 	DP_TRACE_STATS(FATAL, "last_remove_timestamp = %d",
428 			dp_stats_buf->last_remove_timestamp);
429 	DP_TRACE_STATS(FATAL, "total_processed_msdu_count = %d",
430 			dp_stats_buf->total_processed_msdu_count);
431 	DP_TRACE_STATS(FATAL, "cur_msdu_count_in_flowq = %d",
432 			dp_stats_buf->cur_msdu_count_in_flowq);
433 	DP_TRACE_STATS(FATAL, "sw_peer_id = %d",
434 			dp_stats_buf->sw_peer_id);
435 	DP_TRACE_STATS(FATAL, "tx_flow_no__tid_num__drop_rule = %d\n",
436 			dp_stats_buf->tx_flow_no__tid_num__drop_rule);
437 }
438 
439 /*
440  * dp_print_tx_tid_stats_tlv: display htt_tx_tid_stats_tlv
441  * @tag_buf: buffer containing the tlv htt_tx_tid_stats_tlv
442  *
443  * return:void
444  */
445 static inline void dp_print_tx_tid_stats_tlv(uint32_t *tag_buf)
446 {
447 	htt_tx_tid_stats_tlv *dp_stats_buf =
448 		(htt_tx_tid_stats_tlv *)tag_buf;
449 	uint8_t i;
450 	uint16_t index = 0;
451 	char *tid_name = qdf_mem_malloc(DP_MAX_STRING_LEN);
452 
453 	if (!tid_name) {
454 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
455 			  FL("Output buffer not allocated\n"));
456 		return;
457 	}
458 
459 	DP_TRACE_STATS(FATAL, "HTT_TX_TID_STATS_TLV:");
460 	for (i = 0; i <  DP_HTT_TID_NAME_LEN; i++) {
461 		index += qdf_snprint(&tid_name[index],
462 				DP_MAX_STRING_LEN - index,
463 				" %d:%d,", i, dp_stats_buf->tid_name[i]);
464 	}
465 	DP_TRACE_STATS(FATAL, "tid_name = %s ", tid_name);
466 	DP_TRACE_STATS(FATAL, "sw_peer_id__tid_num = %d",
467 			dp_stats_buf->sw_peer_id__tid_num);
468 	DP_TRACE_STATS(FATAL, "num_sched_pending__num_ppdu_in_hwq = %d",
469 			dp_stats_buf->num_sched_pending__num_ppdu_in_hwq);
470 	DP_TRACE_STATS(FATAL, "tid_flags = %d",
471 			dp_stats_buf->tid_flags);
472 	DP_TRACE_STATS(FATAL, "hw_queued = %d",
473 			dp_stats_buf->hw_queued);
474 	DP_TRACE_STATS(FATAL, "hw_reaped = %d",
475 			dp_stats_buf->hw_reaped);
476 	DP_TRACE_STATS(FATAL, "mpdus_hw_filter = %d",
477 			dp_stats_buf->mpdus_hw_filter);
478 	DP_TRACE_STATS(FATAL, "qdepth_bytes = %d",
479 			dp_stats_buf->qdepth_bytes);
480 	DP_TRACE_STATS(FATAL, "qdepth_num_msdu = %d",
481 			dp_stats_buf->qdepth_num_msdu);
482 	DP_TRACE_STATS(FATAL, "qdepth_num_mpdu = %d",
483 			dp_stats_buf->qdepth_num_mpdu);
484 	DP_TRACE_STATS(FATAL, "last_scheduled_tsmp = %d",
485 			dp_stats_buf->last_scheduled_tsmp);
486 	DP_TRACE_STATS(FATAL, "pause_module_id = %d",
487 			dp_stats_buf->pause_module_id);
488 	DP_TRACE_STATS(FATAL, "block_module_id = %d\n",
489 			dp_stats_buf->block_module_id);
490 	DP_TRACE_STATS(FATAL, "tid_tx_airtime = %d\n",
491 			dp_stats_buf->tid_tx_airtime);
492 	qdf_mem_free(tid_name);
493 }
494 
495 #ifdef CONFIG_WIN
496 /*
497  * dp_print_tx_tid_stats_v1_tlv: display htt_tx_tid_stats_v1_tlv
498  * @tag_buf: buffer containing the tlv htt_tx_tid_stats_v1_tlv
499  *
500  * return:void
501  */
502 static inline void dp_print_tx_tid_stats_v1_tlv(uint32_t *tag_buf)
503 {
504 	htt_tx_tid_stats_v1_tlv *dp_stats_buf =
505 		(htt_tx_tid_stats_v1_tlv *)tag_buf;
506 	uint8_t i;
507 	uint16_t index = 0;
508 	char *tid_name = qdf_mem_malloc(DP_MAX_STRING_LEN);
509 
510 	if (!tid_name) {
511 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
512 			  FL("Output buffer not allocated\n"));
513 		return;
514 	}
515 
516 	DP_TRACE_STATS(FATAL, "HTT_TX_TID_STATS_V1_TLV:");
517 	for (i = 0; i <  DP_HTT_TID_NAME_LEN; i++) {
518 		index += qdf_snprint(&tid_name[index],
519 				DP_MAX_STRING_LEN - index,
520 				" %d:%d,", i, dp_stats_buf->tid_name[i]);
521 	}
522 	DP_TRACE_STATS(FATAL, "tid_name = %s ", tid_name);
523 	DP_TRACE_STATS(FATAL, "sw_peer_id__tid_num = %d",
524 			dp_stats_buf->sw_peer_id__tid_num);
525 	DP_TRACE_STATS(FATAL, "num_sched_pending__num_ppdu_in_hwq = %d",
526 			dp_stats_buf->num_sched_pending__num_ppdu_in_hwq);
527 	DP_TRACE_STATS(FATAL, "tid_flags = %d",
528 			dp_stats_buf->tid_flags);
529 	DP_TRACE_STATS(FATAL, "max_qdepth_bytes = %d",
530 			dp_stats_buf->max_qdepth_bytes);
531 	DP_TRACE_STATS(FATAL, "max_qdepth_n_msdus = %d",
532 			dp_stats_buf->max_qdepth_n_msdus);
533 	DP_TRACE_STATS(FATAL, "rsvd = %d",
534 			dp_stats_buf->rsvd);
535 	DP_TRACE_STATS(FATAL, "qdepth_bytes = %d",
536 			dp_stats_buf->qdepth_bytes);
537 	DP_TRACE_STATS(FATAL, "qdepth_num_msdu = %d",
538 			dp_stats_buf->qdepth_num_msdu);
539 	DP_TRACE_STATS(FATAL, "qdepth_num_mpdu = %d",
540 			dp_stats_buf->qdepth_num_mpdu);
541 	DP_TRACE_STATS(FATAL, "last_scheduled_tsmp = %d",
542 			dp_stats_buf->last_scheduled_tsmp);
543 	DP_TRACE_STATS(FATAL, "pause_module_id = %d",
544 			dp_stats_buf->pause_module_id);
545 	DP_TRACE_STATS(FATAL, "block_module_id = %d\n",
546 			dp_stats_buf->block_module_id);
547 	DP_TRACE_STATS(FATAL, "tid_tx_airtime = %d\n",
548 			dp_stats_buf->tid_tx_airtime);
549 	qdf_mem_free(tid_name);
550 }
551 #endif
552 
553 /*
554  * dp_print_rx_tid_stats_tlv: display htt_rx_tid_stats_tlv
555  * @tag_buf: buffer containing the tlv htt_rx_tid_stats_tlv
556  *
557  * return:void
558  */
559 static inline void dp_print_rx_tid_stats_tlv(uint32_t *tag_buf)
560 {
561 	htt_rx_tid_stats_tlv *dp_stats_buf =
562 		(htt_rx_tid_stats_tlv *)tag_buf;
563 	uint8_t i;
564 	uint16_t index = 0;
565 	char *tid_name = qdf_mem_malloc(DP_MAX_STRING_LEN);
566 
567 	if (!tid_name) {
568 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
569 			  FL("Output buffer not allocated\n"));
570 		return;
571 	}
572 
573 	DP_TRACE_STATS(FATAL, "HTT_RX_TID_STATS_TLV:");
574 	DP_TRACE_STATS(FATAL, "sw_peer_id__tid_num = %d",
575 			dp_stats_buf->sw_peer_id__tid_num);
576 	for (i = 0; i <  DP_HTT_TID_NAME_LEN; i++) {
577 		index += qdf_snprint(&tid_name[index],
578 				DP_MAX_STRING_LEN - index,
579 				" %d:%d,", i, dp_stats_buf->tid_name[i]);
580 	}
581 	DP_TRACE_STATS(FATAL, "tid_name = %s ", tid_name);
582 	DP_TRACE_STATS(FATAL, "dup_in_reorder = %d",
583 			dp_stats_buf->dup_in_reorder);
584 	DP_TRACE_STATS(FATAL, "dup_past_outside_window = %d",
585 			dp_stats_buf->dup_past_outside_window);
586 	DP_TRACE_STATS(FATAL, "dup_past_within_window = %d",
587 			dp_stats_buf->dup_past_within_window);
588 	DP_TRACE_STATS(FATAL, "rxdesc_err_decrypt = %d\n",
589 			dp_stats_buf->rxdesc_err_decrypt);
590 	qdf_mem_free(tid_name);
591 }
592 
593 /*
594  * dp_print_counter_tlv: display htt_counter_tlv
595  * @tag_buf: buffer containing the tlv htt_counter_tlv
596  *
597  * return:void
598  */
599 static inline void dp_print_counter_tlv(uint32_t *tag_buf)
600 {
601 	htt_counter_tlv *dp_stats_buf =
602 		(htt_counter_tlv *)tag_buf;
603 	uint8_t i;
604 	uint16_t index = 0;
605 	char *counter_name = qdf_mem_malloc(DP_MAX_STRING_LEN);
606 
607 	if (!counter_name) {
608 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
609 			  FL("Output buffer not allocated\n"));
610 		return;
611 	}
612 
613 	DP_TRACE_STATS(FATAL, "HTT_COUNTER_TLV:");
614 	for (i = 0; i <  DP_HTT_COUNTER_NAME_LEN; i++) {
615 		index += qdf_snprint(&counter_name[index],
616 				DP_MAX_STRING_LEN - index,
617 				" %d:%d,", i, dp_stats_buf->counter_name[i]);
618 	}
619 	DP_TRACE_STATS(FATAL, "counter_name = %s ", counter_name);
620 	DP_TRACE_STATS(FATAL, "count = %d\n",
621 			dp_stats_buf->count);
622 	qdf_mem_free(counter_name);
623 }
624 
625 /*
626  * dp_print_peer_stats_cmn_tlv: display htt_peer_stats_cmn_tlv
627  * @tag_buf: buffer containing the tlv htt_peer_stats_cmn_tlv
628  *
629  * return:void
630  */
631 static inline void dp_print_peer_stats_cmn_tlv(uint32_t *tag_buf)
632 {
633 	htt_peer_stats_cmn_tlv *dp_stats_buf =
634 		(htt_peer_stats_cmn_tlv *)tag_buf;
635 
636 	DP_TRACE_STATS(FATAL, "HTT_PEER_STATS_CMN_TLV:");
637 	DP_TRACE_STATS(FATAL, "ppdu_cnt = %d",
638 			dp_stats_buf->ppdu_cnt);
639 	DP_TRACE_STATS(FATAL, "mpdu_cnt = %d",
640 			dp_stats_buf->mpdu_cnt);
641 	DP_TRACE_STATS(FATAL, "msdu_cnt = %d",
642 			dp_stats_buf->msdu_cnt);
643 	DP_TRACE_STATS(FATAL, "pause_bitmap = %d",
644 			dp_stats_buf->pause_bitmap);
645 	DP_TRACE_STATS(FATAL, "block_bitmap = %d",
646 			dp_stats_buf->block_bitmap);
647 	DP_TRACE_STATS(FATAL, "current_timestamp = %d\n",
648 			dp_stats_buf->current_timestamp);
649 }
650 
651 /*
652  * dp_print_peer_details_tlv: display htt_peer_details_tlv
653  * @tag_buf: buffer containing the tlv htt_peer_details_tlv
654  *
655  * return:void
656  */
657 static inline void dp_print_peer_details_tlv(uint32_t *tag_buf)
658 {
659 	htt_peer_details_tlv *dp_stats_buf =
660 		(htt_peer_details_tlv *)tag_buf;
661 
662 	DP_TRACE_STATS(FATAL, "HTT_PEER_DETAILS_TLV:");
663 	DP_TRACE_STATS(FATAL, "peer_type = %d",
664 			dp_stats_buf->peer_type);
665 	DP_TRACE_STATS(FATAL, "sw_peer_id = %d",
666 			dp_stats_buf->sw_peer_id);
667 	DP_TRACE_STATS(FATAL, "vdev_pdev_ast_idx = %d",
668 			dp_stats_buf->vdev_pdev_ast_idx);
669 	DP_TRACE_STATS(FATAL, "mac_addr(upper 4 bytes) = %d",
670 			dp_stats_buf->mac_addr.mac_addr31to0);
671 	DP_TRACE_STATS(FATAL, "mac_addr(lower 2 bytes) = %d",
672 			dp_stats_buf->mac_addr.mac_addr47to32);
673 	DP_TRACE_STATS(FATAL, "peer_flags = %d",
674 			dp_stats_buf->peer_flags);
675 	DP_TRACE_STATS(FATAL, "qpeer_flags = %d\n",
676 			dp_stats_buf->qpeer_flags);
677 }
678 
679 /*
680  * dp_print_tx_peer_rate_stats_tlv: display htt_tx_peer_rate_stats_tlv
681  * @tag_buf: buffer containing the tlv htt_tx_peer_rate_stats_tlv
682  *
683  * return:void
684  */
685 static inline void dp_print_tx_peer_rate_stats_tlv(uint32_t *tag_buf)
686 {
687 	htt_tx_peer_rate_stats_tlv *dp_stats_buf =
688 		(htt_tx_peer_rate_stats_tlv *)tag_buf;
689 	uint8_t i, j;
690 	uint16_t index = 0;
691 	char *tx_gi[HTT_TX_PEER_STATS_NUM_GI_COUNTERS];
692 	char *str_buf = qdf_mem_malloc(DP_MAX_STRING_LEN);
693 
694 	if (!str_buf) {
695 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
696 			  FL("Output buffer not allocated\n"));
697 		return;
698 	}
699 
700 	for (i = 0; i < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; i++)
701 		tx_gi[i] = (char *)qdf_mem_malloc(DP_MAX_STRING_LEN);
702 
703 	DP_TRACE_STATS(FATAL, "HTT_TX_PEER_RATE_STATS_TLV:");
704 	DP_TRACE_STATS(FATAL, "tx_ldpc = %d",
705 			dp_stats_buf->tx_ldpc);
706 	DP_TRACE_STATS(FATAL, "rts_cnt = %d",
707 			dp_stats_buf->rts_cnt);
708 	DP_TRACE_STATS(FATAL, "ack_rssi = %d",
709 			dp_stats_buf->ack_rssi);
710 
711 	index = 0;
712 	qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
713 	for (i = 0; i <  DP_HTT_TX_MCS_LEN; i++) {
714 		index += qdf_snprint(&str_buf[index],
715 				DP_MAX_STRING_LEN - index,
716 				" %d:%d,", i, dp_stats_buf->tx_mcs[i]);
717 	}
718 	DP_TRACE_STATS(FATAL, "tx_mcs = %s ", str_buf);
719 
720 	index = 0;
721 	qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
722 	for (i = 0; i <  DP_HTT_TX_SU_MCS_LEN; i++) {
723 		index += qdf_snprint(&str_buf[index],
724 				DP_MAX_STRING_LEN - index,
725 				" %d:%d,", i, dp_stats_buf->tx_su_mcs[i]);
726 	}
727 	DP_TRACE_STATS(FATAL, "tx_su_mcs = %s ", str_buf);
728 	index = 0;
729 	qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
730 	for (i = 0; i <  DP_HTT_TX_MU_MCS_LEN; i++) {
731 		index += qdf_snprint(&str_buf[index],
732 				DP_MAX_STRING_LEN - index,
733 				" %d:%d,", i, dp_stats_buf->tx_mu_mcs[i]);
734 	}
735 	DP_TRACE_STATS(FATAL, "tx_mu_mcs = %s ", str_buf);
736 	index = 0;
737 	qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
738 	for (i = 0; i <  DP_HTT_TX_NSS_LEN; i++) {
739 		/* 0 stands for NSS 1, 1 stands for NSS 2, etc. */
740 		index += qdf_snprint(&str_buf[index],
741 				DP_MAX_STRING_LEN - index,
742 				" %d:%d,", (i + 1),
743 				dp_stats_buf->tx_nss[i]);
744 	}
745 	DP_TRACE_STATS(FATAL, "tx_nss = %s ", str_buf);
746 	index = 0;
747 	qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
748 	for (i = 0; i <  DP_HTT_TX_BW_LEN; i++) {
749 		index += qdf_snprint(&str_buf[index],
750 				DP_MAX_STRING_LEN - index,
751 				" %d:%d,", i, dp_stats_buf->tx_bw[i]);
752 	}
753 	DP_TRACE_STATS(FATAL, "tx_bw = %s ", str_buf);
754 	qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
755 	for (i = 0; i <  HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS; i++) {
756 		index += qdf_snprint(&str_buf[index],
757 				DP_MAX_STRING_LEN - index,
758 				" %d:%d,", i, dp_stats_buf->tx_stbc[i]);
759 	}
760 	DP_TRACE_STATS(FATAL, "tx_stbc = %s ", str_buf);
761 	index = 0;
762 	qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
763 
764 	for (i = 0; i <  DP_HTT_TX_PREAM_LEN; i++) {
765 		index += qdf_snprint(&str_buf[index],
766 				DP_MAX_STRING_LEN - index,
767 				" %d:%d,", i, dp_stats_buf->tx_pream[i]);
768 	}
769 	DP_TRACE_STATS(FATAL, "tx_pream = %s ", str_buf);
770 
771 	for (j = 0; j < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; j++) {
772 		index = 0;
773 		for (i = 0; i <  HTT_TX_PEER_STATS_NUM_MCS_COUNTERS; i++) {
774 			index += qdf_snprint(&tx_gi[j][index],
775 					DP_MAX_STRING_LEN - index,
776 					" %d:%d,", i,
777 					dp_stats_buf->tx_gi[j][i]);
778 		}
779 		DP_TRACE_STATS(FATAL, "tx_gi[%d] = %s ", j, tx_gi[j]);
780 	}
781 
782 	index = 0;
783 	qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
784 	for (i = 0; i <  DP_HTT_TX_DCM_LEN; i++) {
785 		index += qdf_snprint(&str_buf[index],
786 				DP_MAX_STRING_LEN - index,
787 				" %d:%d,", i, dp_stats_buf->tx_dcm[i]);
788 	}
789 	DP_TRACE_STATS(FATAL, "tx_dcm = %s\n", str_buf);
790 	for (i = 0; i < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; i++)
791 		qdf_mem_free(tx_gi[i]);
792 
793 	qdf_mem_free(str_buf);
794 }
795 
796 /*
797  * dp_print_rx_peer_rate_stats_tlv: display htt_rx_peer_rate_stats_tlv
798  * @tag_buf: buffer containing the tlv htt_rx_peer_rate_stats_tlv
799  *
800  * return:void
801  */
802 static inline void dp_print_rx_peer_rate_stats_tlv(uint32_t *tag_buf)
803 {
804 	htt_rx_peer_rate_stats_tlv *dp_stats_buf =
805 		(htt_rx_peer_rate_stats_tlv *)tag_buf;
806 	uint8_t i, j;
807 	uint16_t index = 0;
808 	char *rssi_chain[DP_HTT_PEER_NUM_SS];
809 	char *rx_gi[HTT_RX_PEER_STATS_NUM_GI_COUNTERS];
810 	char *str_buf = qdf_mem_malloc(DP_MAX_STRING_LEN);
811 
812 	if (!str_buf) {
813 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
814 			  FL("Output buffer not allocated\n"));
815 		return;
816 	}
817 
818 	for (i = 0; i < DP_HTT_PEER_NUM_SS; i++)
819 		rssi_chain[i] = qdf_mem_malloc(DP_MAX_STRING_LEN);
820 	for (i = 0; i < HTT_RX_PEER_STATS_NUM_GI_COUNTERS; i++)
821 		rx_gi[i] = qdf_mem_malloc(DP_MAX_STRING_LEN);
822 
823 	DP_TRACE_STATS(FATAL, "HTT_RX_PEER_RATE_STATS_TLV:");
824 	DP_TRACE_STATS(FATAL, "nsts = %d",
825 			dp_stats_buf->nsts);
826 	DP_TRACE_STATS(FATAL, "rx_ldpc = %d",
827 			dp_stats_buf->rx_ldpc);
828 	DP_TRACE_STATS(FATAL, "rts_cnt = %d",
829 			dp_stats_buf->rts_cnt);
830 	DP_TRACE_STATS(FATAL, "rssi_mgmt = %d",
831 			dp_stats_buf->rssi_mgmt);
832 	DP_TRACE_STATS(FATAL, "rssi_data = %d",
833 			dp_stats_buf->rssi_data);
834 	DP_TRACE_STATS(FATAL, "rssi_comb = %d",
835 			dp_stats_buf->rssi_comb);
836 
837 	qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
838 	for (i = 0; i <  DP_HTT_RX_MCS_LEN; i++) {
839 		index += qdf_snprint(&str_buf[index],
840 				DP_MAX_STRING_LEN - index,
841 				" %d:%d,", i, dp_stats_buf->rx_mcs[i]);
842 	}
843 	DP_TRACE_STATS(FATAL, "rx_mcs = %s ", str_buf);
844 
845 	index = 0;
846 	qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
847 	for (i = 0; i <  DP_HTT_RX_NSS_LEN; i++) {
848 		/* 0 stands for NSS 1, 1 stands for NSS 2, etc. */
849 		index += qdf_snprint(&str_buf[index],
850 				DP_MAX_STRING_LEN - index,
851 				" %d:%d,", (i + 1),
852 				dp_stats_buf->rx_nss[i]);
853 	}
854 	DP_TRACE_STATS(FATAL, "rx_nss = %s ", str_buf);
855 
856 	index = 0;
857 	qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
858 	for (i = 0; i <  DP_HTT_RX_DCM_LEN; i++) {
859 		index += qdf_snprint(&str_buf[index],
860 				DP_MAX_STRING_LEN - index,
861 				" %d:%d,", i, dp_stats_buf->rx_dcm[i]);
862 	}
863 	DP_TRACE_STATS(FATAL, "rx_dcm = %s ", str_buf);
864 
865 	index = 0;
866 	qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
867 	for (i = 0; i <  HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS; i++) {
868 		index += qdf_snprint(&str_buf[index],
869 				DP_MAX_STRING_LEN - index,
870 				" %d:%d,", i, dp_stats_buf->rx_stbc[i]);
871 	}
872 	DP_TRACE_STATS(FATAL, "rx_stbc = %s ", str_buf);
873 
874 	index = 0;
875 	qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
876 	for (i = 0; i <  DP_HTT_RX_BW_LEN; i++) {
877 		index += qdf_snprint(&str_buf[index],
878 				DP_MAX_STRING_LEN - index,
879 				" %d:%d,", i, dp_stats_buf->rx_bw[i]);
880 	}
881 	DP_TRACE_STATS(FATAL, "rx_bw = %s ", str_buf);
882 
883 	for (j = 0; j < DP_HTT_PEER_NUM_SS; j++) {
884 		qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
885 		index = 0;
886 		for (i = 0; i <  HTT_RX_PEER_STATS_NUM_BW_COUNTERS; i++) {
887 			index += qdf_snprint(&rssi_chain[j][index],
888 					DP_MAX_STRING_LEN - index,
889 					" %d:%d,", i,
890 					dp_stats_buf->rssi_chain[j][i]);
891 		}
892 		DP_TRACE_STATS(FATAL, "rssi_chain[%d] = %s ", j, rssi_chain[j]);
893 	}
894 
895 	for (j = 0; j < HTT_RX_PEER_STATS_NUM_GI_COUNTERS; j++) {
896 		index = 0;
897 		for (i = 0; i <  HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS; i++) {
898 			index += qdf_snprint(&rx_gi[j][index],
899 					DP_MAX_STRING_LEN - index,
900 					" %d:%d,", i,
901 					dp_stats_buf->rx_gi[j][i]);
902 		}
903 		DP_TRACE_STATS(FATAL, "rx_gi[%d] = %s ", j, rx_gi[j]);
904 	}
905 	index = 0;
906 	qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
907 	for (i = 0; i <  DP_HTT_RX_PREAM_LEN; i++) {
908 		index += qdf_snprint(&str_buf[index],
909 				DP_MAX_STRING_LEN - index,
910 				" %d:%d,", i, dp_stats_buf->rx_pream[i]);
911 	}
912 	DP_TRACE_STATS(FATAL, "rx_pream = %s\n", str_buf);
913 
914 	for (i = 0; i < DP_HTT_PEER_NUM_SS; i++)
915 		qdf_mem_free(rssi_chain[i]);
916 	for (i = 0; i < HTT_RX_PEER_STATS_NUM_GI_COUNTERS; i++)
917 		qdf_mem_free(rx_gi[i]);
918 
919 	qdf_mem_free(str_buf);
920 }
921 
922 /*
923  * dp_print_tx_hwq_mu_mimo_sch_stats_tlv: display htt_tx_hwq_mu_mimo_sch_stats
924  * @tag_buf: buffer containing the tlv htt_tx_hwq_mu_mimo_sch_stats_tlv
925  *
926  * return:void
927  */
928 static inline void dp_print_tx_hwq_mu_mimo_sch_stats_tlv(uint32_t *tag_buf)
929 {
930 	htt_tx_hwq_mu_mimo_sch_stats_tlv *dp_stats_buf =
931 		(htt_tx_hwq_mu_mimo_sch_stats_tlv *)tag_buf;
932 
933 	DP_TRACE_STATS(FATAL, "HTT_TX_HWQ_MU_MIMO_SCH_STATS_TLV:");
934 	DP_TRACE_STATS(FATAL, "mu_mimo_sch_posted = %d",
935 			dp_stats_buf->mu_mimo_sch_posted);
936 	DP_TRACE_STATS(FATAL, "mu_mimo_sch_failed = %d",
937 			dp_stats_buf->mu_mimo_sch_failed);
938 	DP_TRACE_STATS(FATAL, "mu_mimo_ppdu_posted = %d\n",
939 			dp_stats_buf->mu_mimo_ppdu_posted);
940 }
941 
942 /*
943  * dp_print_tx_hwq_mu_mimo_mpdu_stats_tlv: display htt_tx_hwq_mu_mimo_mpdu_stats
944  * @tag_buf: buffer containing the tlv htt_tx_hwq_mu_mimo_mpdu_stats_tlv
945  *
946  * return:void
947  */
948 static inline void dp_print_tx_hwq_mu_mimo_mpdu_stats_tlv(uint32_t *tag_buf)
949 {
950 	htt_tx_hwq_mu_mimo_mpdu_stats_tlv *dp_stats_buf =
951 		(htt_tx_hwq_mu_mimo_mpdu_stats_tlv *)tag_buf;
952 
953 	DP_TRACE_STATS(FATAL, "HTT_TX_HWQ_MU_MIMO_MPDU_STATS_TLV:");
954 	DP_TRACE_STATS(FATAL, "mu_mimo_mpdus_queued_usr = %d",
955 			dp_stats_buf->mu_mimo_mpdus_queued_usr);
956 	DP_TRACE_STATS(FATAL, "mu_mimo_mpdus_tried_usr = %d",
957 			dp_stats_buf->mu_mimo_mpdus_tried_usr);
958 	DP_TRACE_STATS(FATAL, "mu_mimo_mpdus_failed_usr = %d",
959 			dp_stats_buf->mu_mimo_mpdus_failed_usr);
960 	DP_TRACE_STATS(FATAL, "mu_mimo_mpdus_requeued_usr = %d",
961 			dp_stats_buf->mu_mimo_mpdus_requeued_usr);
962 	DP_TRACE_STATS(FATAL, "mu_mimo_err_no_ba_usr = %d",
963 			dp_stats_buf->mu_mimo_err_no_ba_usr);
964 	DP_TRACE_STATS(FATAL, "mu_mimo_mpdu_underrun_usr = %d",
965 			dp_stats_buf->mu_mimo_mpdu_underrun_usr);
966 	DP_TRACE_STATS(FATAL, "mu_mimo_ampdu_underrun_usr = %d\n",
967 			dp_stats_buf->mu_mimo_ampdu_underrun_usr);
968 }
969 
970 /*
971  * dp_print_tx_hwq_mu_mimo_cmn_stats_tlv: display htt_tx_hwq_mu_mimo_cmn_stats
972  * @tag_buf: buffer containing the tlv htt_tx_hwq_mu_mimo_cmn_stats_tlv
973  *
974  * return:void
975  */
976 static inline void dp_print_tx_hwq_mu_mimo_cmn_stats_tlv(uint32_t *tag_buf)
977 {
978 	htt_tx_hwq_mu_mimo_cmn_stats_tlv *dp_stats_buf =
979 		(htt_tx_hwq_mu_mimo_cmn_stats_tlv *)tag_buf;
980 
981 	DP_TRACE_STATS(FATAL, "HTT_TX_HWQ_MU_MIMO_CMN_STATS_TLV:");
982 	DP_TRACE_STATS(FATAL, "mac_id__hwq_id__word = %d\n",
983 			dp_stats_buf->mac_id__hwq_id__word);
984 }
985 
986 /*
987  * dp_print_tx_hwq_stats_cmn_tlv: display htt_tx_hwq_stats_cmn_tlv
988  * @tag_buf: buffer containing the tlv htt_tx_hwq_stats_cmn_tlv
989  *
990  * return:void
991  */
992 static inline void dp_print_tx_hwq_stats_cmn_tlv(uint32_t *tag_buf)
993 {
994 	htt_tx_hwq_stats_cmn_tlv *dp_stats_buf =
995 		(htt_tx_hwq_stats_cmn_tlv *)tag_buf;
996 
997 	DP_TRACE_STATS(FATAL, "HTT_TX_HWQ_STATS_CMN_TLV:");
998 	DP_TRACE_STATS(FATAL, "mac_id__hwq_id__word = %d",
999 			dp_stats_buf->mac_id__hwq_id__word);
1000 	DP_TRACE_STATS(FATAL, "xretry = %d",
1001 			dp_stats_buf->xretry);
1002 	DP_TRACE_STATS(FATAL, "underrun_cnt = %d",
1003 			dp_stats_buf->underrun_cnt);
1004 	DP_TRACE_STATS(FATAL, "flush_cnt = %d",
1005 			dp_stats_buf->flush_cnt);
1006 	DP_TRACE_STATS(FATAL, "filt_cnt = %d",
1007 			dp_stats_buf->filt_cnt);
1008 	DP_TRACE_STATS(FATAL, "null_mpdu_bmap = %d",
1009 			dp_stats_buf->null_mpdu_bmap);
1010 	DP_TRACE_STATS(FATAL, "user_ack_failure = %d",
1011 			dp_stats_buf->user_ack_failure);
1012 	DP_TRACE_STATS(FATAL, "ack_tlv_proc = %d",
1013 			dp_stats_buf->ack_tlv_proc);
1014 	DP_TRACE_STATS(FATAL, "sched_id_proc = %d",
1015 			dp_stats_buf->sched_id_proc);
1016 	DP_TRACE_STATS(FATAL, "null_mpdu_tx_count = %d",
1017 			dp_stats_buf->null_mpdu_tx_count);
1018 	DP_TRACE_STATS(FATAL, "mpdu_bmap_not_recvd = %d",
1019 			dp_stats_buf->mpdu_bmap_not_recvd);
1020 	DP_TRACE_STATS(FATAL, "num_bar = %d",
1021 			dp_stats_buf->num_bar);
1022 	DP_TRACE_STATS(FATAL, "rts = %d",
1023 			dp_stats_buf->rts);
1024 	DP_TRACE_STATS(FATAL, "cts2self = %d",
1025 			dp_stats_buf->cts2self);
1026 	DP_TRACE_STATS(FATAL, "qos_null = %d",
1027 			dp_stats_buf->qos_null);
1028 	DP_TRACE_STATS(FATAL, "mpdu_tried_cnt = %d",
1029 			dp_stats_buf->mpdu_tried_cnt);
1030 	DP_TRACE_STATS(FATAL, "mpdu_queued_cnt = %d",
1031 			dp_stats_buf->mpdu_queued_cnt);
1032 	DP_TRACE_STATS(FATAL, "mpdu_ack_fail_cnt = %d",
1033 			dp_stats_buf->mpdu_ack_fail_cnt);
1034 	DP_TRACE_STATS(FATAL, "mpdu_filt_cnt = %d",
1035 			dp_stats_buf->mpdu_filt_cnt);
1036 	DP_TRACE_STATS(FATAL, "false_mpdu_ack_count = %d\n",
1037 			dp_stats_buf->false_mpdu_ack_count);
1038 }
1039 
1040 /*
1041  * dp_print_tx_hwq_difs_latency_stats_tlv_v: display
1042  *					htt_tx_hwq_difs_latency_stats_tlv_v
1043  * @tag_buf: buffer containing the tlv htt_tx_hwq_difs_latency_stats_tlv_v
1044  *
1045  *return:void
1046  */
1047 static inline void dp_print_tx_hwq_difs_latency_stats_tlv_v(uint32_t *tag_buf)
1048 {
1049 	htt_tx_hwq_difs_latency_stats_tlv_v *dp_stats_buf =
1050 		(htt_tx_hwq_difs_latency_stats_tlv_v *)tag_buf;
1051 	uint8_t i;
1052 	uint16_t index = 0;
1053 	uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
1054 	char *difs_latency_hist = qdf_mem_malloc(DP_MAX_STRING_LEN);
1055 
1056 	if (!difs_latency_hist) {
1057 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
1058 			  FL("Output buffer not allocated\n"));
1059 		return;
1060 	}
1061 
1062 	tag_len = qdf_min(tag_len,
1063 			(uint32_t)HTT_TX_HWQ_MAX_DIFS_LATENCY_BINS);
1064 
1065 	DP_TRACE_STATS(FATAL, "HTT_TX_HWQ_DIFS_LATENCY_STATS_TLV_V:");
1066 	DP_TRACE_STATS(FATAL, "hist_intvl = %d",
1067 			dp_stats_buf->hist_intvl);
1068 
1069 	for (i = 0; i <  tag_len; i++) {
1070 		index += qdf_snprint(&difs_latency_hist[index],
1071 				DP_MAX_STRING_LEN - index,
1072 				" %d:%d,", i,
1073 				dp_stats_buf->difs_latency_hist[i]);
1074 	}
1075 	DP_TRACE_STATS(FATAL, "difs_latency_hist = %s\n", difs_latency_hist);
1076 	qdf_mem_free(difs_latency_hist);
1077 }
1078 
1079 /*
1080  * dp_print_tx_hwq_cmd_result_stats_tlv_v: display htt_tx_hwq_cmd_result_stats
1081  * @tag_buf: buffer containing the tlv htt_tx_hwq_cmd_result_stats_tlv_v
1082  *
1083  * return:void
1084  */
1085 static inline void dp_print_tx_hwq_cmd_result_stats_tlv_v(uint32_t *tag_buf)
1086 {
1087 	htt_tx_hwq_cmd_result_stats_tlv_v *dp_stats_buf =
1088 		(htt_tx_hwq_cmd_result_stats_tlv_v *)tag_buf;
1089 	uint8_t i;
1090 	uint16_t index = 0;
1091 	uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
1092 	char *cmd_result = qdf_mem_malloc(DP_MAX_STRING_LEN);
1093 
1094 	if (!cmd_result) {
1095 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
1096 			  FL("Output buffer not allocated\n"));
1097 		return;
1098 	}
1099 
1100 	tag_len = qdf_min(tag_len, (uint32_t)HTT_TX_HWQ_MAX_CMD_RESULT_STATS);
1101 
1102 	DP_TRACE_STATS(FATAL, "HTT_TX_HWQ_CMD_RESULT_STATS_TLV_V:");
1103 	for (i = 0; i <  tag_len; i++) {
1104 		index += qdf_snprint(&cmd_result[index],
1105 				DP_MAX_STRING_LEN - index,
1106 				" %d:%d,", i, dp_stats_buf->cmd_result[i]);
1107 	}
1108 	DP_TRACE_STATS(FATAL, "cmd_result = %s ", cmd_result);
1109 	qdf_mem_free(cmd_result);
1110 }
1111 
1112 /*
1113  * dp_print_tx_hwq_cmd_stall_stats_tlv_v: display htt_tx_hwq_cmd_stall_stats_tlv
1114  * @tag_buf: buffer containing the tlv htt_tx_hwq_cmd_stall_stats_tlv_v
1115  *
1116  * return:void
1117  */
1118 static inline void dp_print_tx_hwq_cmd_stall_stats_tlv_v(uint32_t *tag_buf)
1119 {
1120 	htt_tx_hwq_cmd_stall_stats_tlv_v *dp_stats_buf =
1121 		(htt_tx_hwq_cmd_stall_stats_tlv_v *)tag_buf;
1122 	uint8_t i;
1123 	uint16_t index = 0;
1124 	uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
1125 	char *cmd_stall_status = qdf_mem_malloc(DP_MAX_STRING_LEN);
1126 
1127 	if (!cmd_stall_status) {
1128 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
1129 			  FL("Output buffer not allocated\n"));
1130 		return;
1131 	}
1132 
1133 	tag_len = qdf_min(tag_len, (uint32_t)HTT_TX_HWQ_MAX_CMD_STALL_STATS);
1134 
1135 	DP_TRACE_STATS(FATAL, "HTT_TX_HWQ_CMD_STALL_STATS_TLV_V:");
1136 	for (i = 0; i <  tag_len; i++) {
1137 		index += qdf_snprint(&cmd_stall_status[index],
1138 				DP_MAX_STRING_LEN - index,
1139 				" %d:%d,", i,
1140 				dp_stats_buf->cmd_stall_status[i]);
1141 	}
1142 	DP_TRACE_STATS(FATAL, "cmd_stall_status = %s\n", cmd_stall_status);
1143 	qdf_mem_free(cmd_stall_status);
1144 }
1145 
1146 /*
1147  * dp_print_tx_hwq_fes_result_stats_tlv_v: display htt_tx_hwq_fes_result_stats
1148  * @tag_buf: buffer containing the tlv htt_tx_hwq_fes_result_stats_tlv_v
1149  *
1150  * return:void
1151  */
1152 static inline void dp_print_tx_hwq_fes_result_stats_tlv_v(uint32_t *tag_buf)
1153 {
1154 	htt_tx_hwq_fes_result_stats_tlv_v *dp_stats_buf =
1155 		(htt_tx_hwq_fes_result_stats_tlv_v *)tag_buf;
1156 	uint8_t i;
1157 	uint16_t index = 0;
1158 	uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
1159 	char *fes_result = qdf_mem_malloc(DP_MAX_STRING_LEN);
1160 
1161 	if (!fes_result) {
1162 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
1163 			  FL("Output buffer not allocated\n"));
1164 		return;
1165 	}
1166 
1167 	tag_len = qdf_min(tag_len, (uint32_t)HTT_TX_HWQ_MAX_FES_RESULT_STATS);
1168 
1169 	DP_TRACE_STATS(FATAL, "HTT_TX_HWQ_FES_RESULT_STATS_TLV_V:");
1170 	for (i = 0; i <  tag_len; i++) {
1171 		index += qdf_snprint(&fes_result[index],
1172 				DP_MAX_STRING_LEN - index,
1173 				" %d:%d,", i, dp_stats_buf->fes_result[i]);
1174 	}
1175 	DP_TRACE_STATS(FATAL, "fes_result = %s ", fes_result);
1176 	qdf_mem_free(fes_result);
1177 }
1178 
1179 /*
1180  * dp_print_tx_selfgen_cmn_stats_tlv: display htt_tx_selfgen_cmn_stats_tlv
1181  * @tag_buf: buffer containing the tlv htt_tx_selfgen_cmn_stats_tlv
1182  *
1183  * return:void
1184  */
1185 static inline void dp_print_tx_selfgen_cmn_stats_tlv(uint32_t *tag_buf)
1186 {
1187 	htt_tx_selfgen_cmn_stats_tlv *dp_stats_buf =
1188 		(htt_tx_selfgen_cmn_stats_tlv *)tag_buf;
1189 
1190 	DP_TRACE_STATS(FATAL, "HTT_TX_SELFGEN_CMN_STATS_TLV:");
1191 	DP_TRACE_STATS(FATAL, "mac_id__word = %d",
1192 			dp_stats_buf->mac_id__word);
1193 	DP_TRACE_STATS(FATAL, "su_bar = %d",
1194 			dp_stats_buf->su_bar);
1195 	DP_TRACE_STATS(FATAL, "rts = %d",
1196 			dp_stats_buf->rts);
1197 	DP_TRACE_STATS(FATAL, "cts2self = %d",
1198 			dp_stats_buf->cts2self);
1199 	DP_TRACE_STATS(FATAL, "qos_null = %d",
1200 			dp_stats_buf->qos_null);
1201 	DP_TRACE_STATS(FATAL, "delayed_bar_1 = %d",
1202 			dp_stats_buf->delayed_bar_1);
1203 	DP_TRACE_STATS(FATAL, "delayed_bar_2 = %d",
1204 			dp_stats_buf->delayed_bar_2);
1205 	DP_TRACE_STATS(FATAL, "delayed_bar_3 = %d",
1206 			dp_stats_buf->delayed_bar_3);
1207 	DP_TRACE_STATS(FATAL, "delayed_bar_4 = %d",
1208 			dp_stats_buf->delayed_bar_4);
1209 	DP_TRACE_STATS(FATAL, "delayed_bar_5 = %d",
1210 			dp_stats_buf->delayed_bar_5);
1211 	DP_TRACE_STATS(FATAL, "delayed_bar_6 = %d",
1212 			dp_stats_buf->delayed_bar_6);
1213 	DP_TRACE_STATS(FATAL, "delayed_bar_7 = %d\n",
1214 			dp_stats_buf->delayed_bar_7);
1215 }
1216 
1217 /*
1218  * dp_print_tx_selfgen_ac_stats_tlv: display htt_tx_selfgen_ac_stats_tlv
1219  * @tag_buf: buffer containing the tlv htt_tx_selfgen_ac_stats_tlv
1220  *
1221  * return:void
1222  */
1223 static inline void dp_print_tx_selfgen_ac_stats_tlv(uint32_t *tag_buf)
1224 {
1225 	htt_tx_selfgen_ac_stats_tlv *dp_stats_buf =
1226 		(htt_tx_selfgen_ac_stats_tlv *)tag_buf;
1227 
1228 	DP_TRACE_STATS(FATAL, "HTT_TX_SELFGEN_AC_STATS_TLV:");
1229 	DP_TRACE_STATS(FATAL, "ac_su_ndpa = %d",
1230 			dp_stats_buf->ac_su_ndpa);
1231 	DP_TRACE_STATS(FATAL, "ac_su_ndp = %d",
1232 			dp_stats_buf->ac_su_ndp);
1233 	DP_TRACE_STATS(FATAL, "ac_mu_mimo_ndpa = %d",
1234 			dp_stats_buf->ac_mu_mimo_ndpa);
1235 	DP_TRACE_STATS(FATAL, "ac_mu_mimo_ndp = %d",
1236 			dp_stats_buf->ac_mu_mimo_ndp);
1237 	DP_TRACE_STATS(FATAL, "ac_mu_mimo_brpoll_1 = %d",
1238 			dp_stats_buf->ac_mu_mimo_brpoll_1);
1239 	DP_TRACE_STATS(FATAL, "ac_mu_mimo_brpoll_2 = %d",
1240 			dp_stats_buf->ac_mu_mimo_brpoll_2);
1241 	DP_TRACE_STATS(FATAL, "ac_mu_mimo_brpoll_3 = %d\n",
1242 			dp_stats_buf->ac_mu_mimo_brpoll_3);
1243 }
1244 
1245 /*
1246  * dp_print_tx_selfgen_ax_stats_tlv: display htt_tx_selfgen_ax_stats_tlv
1247  * @tag_buf: buffer containing the tlv htt_tx_selfgen_ax_stats_tlv
1248  *
1249  * return:void
1250  */
1251 static inline void dp_print_tx_selfgen_ax_stats_tlv(uint32_t *tag_buf)
1252 {
1253 	htt_tx_selfgen_ax_stats_tlv *dp_stats_buf =
1254 		(htt_tx_selfgen_ax_stats_tlv *)tag_buf;
1255 
1256 	DP_TRACE_STATS(FATAL, "HTT_TX_SELFGEN_AX_STATS_TLV:");
1257 	DP_TRACE_STATS(FATAL, "ax_su_ndpa = %d",
1258 			dp_stats_buf->ax_su_ndpa);
1259 	DP_TRACE_STATS(FATAL, "ax_su_ndp = %d",
1260 			dp_stats_buf->ax_su_ndp);
1261 	DP_TRACE_STATS(FATAL, "ax_mu_mimo_ndpa = %d",
1262 			dp_stats_buf->ax_mu_mimo_ndpa);
1263 	DP_TRACE_STATS(FATAL, "ax_mu_mimo_ndp = %d",
1264 			dp_stats_buf->ax_mu_mimo_ndp);
1265 	DP_TRACE_STATS(FATAL, "ax_mu_mimo_brpoll_1 = %d",
1266 			dp_stats_buf->ax_mu_mimo_brpoll_1);
1267 	DP_TRACE_STATS(FATAL, "ax_mu_mimo_brpoll_2 = %d",
1268 			dp_stats_buf->ax_mu_mimo_brpoll_2);
1269 	DP_TRACE_STATS(FATAL, "ax_mu_mimo_brpoll_3 = %d",
1270 			dp_stats_buf->ax_mu_mimo_brpoll_3);
1271 	DP_TRACE_STATS(FATAL, "ax_mu_mimo_brpoll_4 = %d",
1272 			dp_stats_buf->ax_mu_mimo_brpoll_4);
1273 	DP_TRACE_STATS(FATAL, "ax_mu_mimo_brpoll_5 = %d",
1274 			dp_stats_buf->ax_mu_mimo_brpoll_5);
1275 	DP_TRACE_STATS(FATAL, "ax_mu_mimo_brpoll_6 = %d",
1276 			dp_stats_buf->ax_mu_mimo_brpoll_6);
1277 	DP_TRACE_STATS(FATAL, "ax_mu_mimo_brpoll_7 = %d",
1278 			dp_stats_buf->ax_mu_mimo_brpoll_7);
1279 	DP_TRACE_STATS(FATAL, "ax_basic_trigger = %d",
1280 			dp_stats_buf->ax_basic_trigger);
1281 	DP_TRACE_STATS(FATAL, "ax_bsr_trigger = %d",
1282 			dp_stats_buf->ax_bsr_trigger);
1283 	DP_TRACE_STATS(FATAL, "ax_mu_bar_trigger = %d",
1284 			dp_stats_buf->ax_mu_bar_trigger);
1285 	DP_TRACE_STATS(FATAL, "ax_mu_rts_trigger = %d\n",
1286 			dp_stats_buf->ax_mu_rts_trigger);
1287 }
1288 
1289 /*
1290  * dp_print_tx_selfgen_ac_err_stats_tlv: display htt_tx_selfgen_ac_err_stats_tlv
1291  * @tag_buf: buffer containing the tlv htt_tx_selfgen_ac_err_stats_tlv
1292  *
1293  * return:void
1294  */
1295 static inline void dp_print_tx_selfgen_ac_err_stats_tlv(uint32_t *tag_buf)
1296 {
1297 	htt_tx_selfgen_ac_err_stats_tlv *dp_stats_buf =
1298 		(htt_tx_selfgen_ac_err_stats_tlv *)tag_buf;
1299 
1300 	DP_TRACE_STATS(FATAL, "HTT_TX_SELFGEN_AC_ERR_STATS_TLV:");
1301 	DP_TRACE_STATS(FATAL, "ac_su_ndp_err = %d",
1302 			dp_stats_buf->ac_su_ndp_err);
1303 	DP_TRACE_STATS(FATAL, "ac_su_ndpa_err = %d",
1304 			dp_stats_buf->ac_su_ndpa_err);
1305 	DP_TRACE_STATS(FATAL, "ac_mu_mimo_ndpa_err = %d",
1306 			dp_stats_buf->ac_mu_mimo_ndpa_err);
1307 	DP_TRACE_STATS(FATAL, "ac_mu_mimo_ndp_err = %d",
1308 			dp_stats_buf->ac_mu_mimo_ndp_err);
1309 	DP_TRACE_STATS(FATAL, "ac_mu_mimo_brp1_err = %d",
1310 			dp_stats_buf->ac_mu_mimo_brp1_err);
1311 	DP_TRACE_STATS(FATAL, "ac_mu_mimo_brp2_err = %d",
1312 			dp_stats_buf->ac_mu_mimo_brp2_err);
1313 	DP_TRACE_STATS(FATAL, "ac_mu_mimo_brp3_err = %d\n",
1314 			dp_stats_buf->ac_mu_mimo_brp3_err);
1315 }
1316 
1317 /*
1318  * dp_print_tx_selfgen_ax_err_stats_tlv: display htt_tx_selfgen_ax_err_stats_tlv
1319  * @tag_buf: buffer containing the tlv htt_tx_selfgen_ax_err_stats_tlv
1320  *
1321  * return:void
1322  */
1323 static inline void dp_print_tx_selfgen_ax_err_stats_tlv(uint32_t *tag_buf)
1324 {
1325 	htt_tx_selfgen_ax_err_stats_tlv *dp_stats_buf =
1326 		(htt_tx_selfgen_ax_err_stats_tlv *)tag_buf;
1327 
1328 	DP_TRACE_STATS(FATAL, "HTT_TX_SELFGEN_AX_ERR_STATS_TLV:");
1329 	DP_TRACE_STATS(FATAL, "ax_su_ndp_err = %d",
1330 			dp_stats_buf->ax_su_ndp_err);
1331 	DP_TRACE_STATS(FATAL, "ax_su_ndpa_err = %d",
1332 			dp_stats_buf->ax_su_ndpa_err);
1333 	DP_TRACE_STATS(FATAL, "ax_mu_mimo_ndpa_err = %d",
1334 			dp_stats_buf->ax_mu_mimo_ndpa_err);
1335 	DP_TRACE_STATS(FATAL, "ax_mu_mimo_ndp_err = %d",
1336 			dp_stats_buf->ax_mu_mimo_ndp_err);
1337 	DP_TRACE_STATS(FATAL, "ax_mu_mimo_brp1_err = %d",
1338 			dp_stats_buf->ax_mu_mimo_brp1_err);
1339 	DP_TRACE_STATS(FATAL, "ax_mu_mimo_brp2_err = %d",
1340 			dp_stats_buf->ax_mu_mimo_brp2_err);
1341 	DP_TRACE_STATS(FATAL, "ax_mu_mimo_brp3_err = %d",
1342 			dp_stats_buf->ax_mu_mimo_brp3_err);
1343 	DP_TRACE_STATS(FATAL, "ax_mu_mimo_brp4_err = %d",
1344 			dp_stats_buf->ax_mu_mimo_brp4_err);
1345 	DP_TRACE_STATS(FATAL, "ax_mu_mimo_brp5_err = %d",
1346 			dp_stats_buf->ax_mu_mimo_brp5_err);
1347 	DP_TRACE_STATS(FATAL, "ax_mu_mimo_brp6_err = %d",
1348 			dp_stats_buf->ax_mu_mimo_brp6_err);
1349 	DP_TRACE_STATS(FATAL, "ax_mu_mimo_brp7_err = %d",
1350 			dp_stats_buf->ax_mu_mimo_brp7_err);
1351 	DP_TRACE_STATS(FATAL, "ax_basic_trigger_err = %d",
1352 			dp_stats_buf->ax_basic_trigger_err);
1353 	DP_TRACE_STATS(FATAL, "ax_bsr_trigger_err = %d",
1354 			dp_stats_buf->ax_bsr_trigger_err);
1355 	DP_TRACE_STATS(FATAL, "ax_mu_bar_trigger_err = %d",
1356 			dp_stats_buf->ax_mu_bar_trigger_err);
1357 	DP_TRACE_STATS(FATAL, "ax_mu_rts_trigger_err = %d\n",
1358 			dp_stats_buf->ax_mu_rts_trigger_err);
1359 }
1360 
1361 /*
1362  * dp_print_tx_pdev_mu_mimo_sch_stats_tlv: display htt_tx_pdev_mu_mimo_sch_stats
1363  * @tag_buf: buffer containing the tlv htt_tx_pdev_mu_mimo_sch_stats_tlv
1364  *
1365  * return:void
1366  */
1367 static inline void dp_print_tx_pdev_mu_mimo_sch_stats_tlv(uint32_t *tag_buf)
1368 {
1369 	htt_tx_pdev_mu_mimo_sch_stats_tlv *dp_stats_buf =
1370 		(htt_tx_pdev_mu_mimo_sch_stats_tlv *)tag_buf;
1371 
1372 	DP_TRACE_STATS(FATAL, "HTT_TX_PDEV_MU_MIMO_SCH_STATS_TLV:");
1373 	DP_TRACE_STATS(FATAL, "mu_mimo_sch_posted = %d",
1374 			dp_stats_buf->mu_mimo_sch_posted);
1375 	DP_TRACE_STATS(FATAL, "mu_mimo_sch_failed = %d",
1376 			dp_stats_buf->mu_mimo_sch_failed);
1377 	DP_TRACE_STATS(FATAL, "mu_mimo_ppdu_posted = %d\n",
1378 			dp_stats_buf->mu_mimo_ppdu_posted);
1379 }
1380 
1381 /*
1382  * dp_print_tx_pdev_mu_mimo_mpdu_stats_tlv: display
1383  *				htt_tx_pdev_mu_mimo_mpdu_stats_tlv
1384  * @tag_buf: buffer containing the tlv htt_tx_pdev_mu_mimo_mpdu_stats_tlv
1385  *
1386  * return:void
1387  */
1388 static inline void dp_print_tx_pdev_mu_mimo_mpdu_stats_tlv(uint32_t *tag_buf)
1389 {
1390 	htt_tx_pdev_mu_mimo_mpdu_stats_tlv *dp_stats_buf =
1391 		(htt_tx_pdev_mu_mimo_mpdu_stats_tlv *)tag_buf;
1392 
1393 	DP_TRACE_STATS(FATAL, "HTT_TX_PDEV_MU_MIMO_MPDU_STATS_TLV:");
1394 	DP_TRACE_STATS(FATAL, "mu_mimo_mpdus_queued_usr = %d",
1395 			dp_stats_buf->mu_mimo_mpdus_queued_usr);
1396 	DP_TRACE_STATS(FATAL, "mu_mimo_mpdus_tried_usr = %d",
1397 			dp_stats_buf->mu_mimo_mpdus_tried_usr);
1398 	DP_TRACE_STATS(FATAL, "mu_mimo_mpdus_failed_usr = %d",
1399 			dp_stats_buf->mu_mimo_mpdus_failed_usr);
1400 	DP_TRACE_STATS(FATAL, "mu_mimo_mpdus_requeued_usr = %d",
1401 			dp_stats_buf->mu_mimo_mpdus_requeued_usr);
1402 	DP_TRACE_STATS(FATAL, "mu_mimo_err_no_ba_usr = %d",
1403 			dp_stats_buf->mu_mimo_err_no_ba_usr);
1404 	DP_TRACE_STATS(FATAL, "mu_mimo_mpdu_underrun_usr = %d",
1405 			dp_stats_buf->mu_mimo_mpdu_underrun_usr);
1406 	DP_TRACE_STATS(FATAL, "mu_mimo_ampdu_underrun_usr = %d\n",
1407 			dp_stats_buf->mu_mimo_ampdu_underrun_usr);
1408 }
1409 
1410 /*
1411  * dp_print_sched_txq_cmd_posted_tlv_v: display htt_sched_txq_cmd_posted_tlv_v
1412  * @tag_buf: buffer containing the tlv htt_sched_txq_cmd_posted_tlv_v
1413  *
1414  * return:void
1415  */
1416 static inline void dp_print_sched_txq_cmd_posted_tlv_v(uint32_t *tag_buf)
1417 {
1418 	htt_sched_txq_cmd_posted_tlv_v *dp_stats_buf =
1419 		(htt_sched_txq_cmd_posted_tlv_v *)tag_buf;
1420 	uint8_t i;
1421 	uint16_t index = 0;
1422 	uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
1423 	char *sched_cmd_posted = qdf_mem_malloc(DP_MAX_STRING_LEN);
1424 
1425 	if (!sched_cmd_posted) {
1426 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
1427 			  FL("Output buffer not allocated\n"));
1428 		return;
1429 	}
1430 
1431 	tag_len = qdf_min(tag_len, (uint32_t)HTT_TX_PDEV_SCHED_TX_MODE_MAX);
1432 
1433 	DP_TRACE_STATS(FATAL, "HTT_SCHED_TXQ_CMD_POSTED_TLV_V:");
1434 	for (i = 0; i <  tag_len; i++) {
1435 		index += qdf_snprint(&sched_cmd_posted[index],
1436 				DP_MAX_STRING_LEN - index,
1437 				" %d:%d,", i,
1438 				dp_stats_buf->sched_cmd_posted[i]);
1439 	}
1440 	DP_TRACE_STATS(FATAL, "sched_cmd_posted = %s\n", sched_cmd_posted);
1441 	qdf_mem_free(sched_cmd_posted);
1442 }
1443 
1444 /*
1445  * dp_print_sched_txq_cmd_reaped_tlv_v: display htt_sched_txq_cmd_reaped_tlv_v
1446  * @tag_buf: buffer containing the tlv htt_sched_txq_cmd_reaped_tlv_v
1447  *
1448  * return:void
1449  */
1450 static inline void dp_print_sched_txq_cmd_reaped_tlv_v(uint32_t *tag_buf)
1451 {
1452 	htt_sched_txq_cmd_reaped_tlv_v *dp_stats_buf =
1453 		(htt_sched_txq_cmd_reaped_tlv_v *)tag_buf;
1454 	uint8_t i;
1455 	uint16_t index = 0;
1456 	uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
1457 	char *sched_cmd_reaped = qdf_mem_malloc(DP_MAX_STRING_LEN);
1458 
1459 	if (!sched_cmd_reaped) {
1460 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
1461 			  FL("Output buffer not allocated\n"));
1462 		return;
1463 	}
1464 
1465 	tag_len = qdf_min(tag_len, (uint32_t)HTT_TX_PDEV_SCHED_TX_MODE_MAX);
1466 
1467 	DP_TRACE_STATS(FATAL, "HTT_SCHED_TXQ_CMD_REAPED_TLV_V:");
1468 	for (i = 0; i <  tag_len; i++) {
1469 		index += qdf_snprint(&sched_cmd_reaped[index],
1470 				DP_MAX_STRING_LEN - index,
1471 				" %d:%d,", i,
1472 				dp_stats_buf->sched_cmd_reaped[i]);
1473 	}
1474 	DP_TRACE_STATS(FATAL, "sched_cmd_reaped = %s\n", sched_cmd_reaped);
1475 	qdf_mem_free(sched_cmd_reaped);
1476 }
1477 
1478 /*
1479  * dp_print_tx_pdev_stats_sched_per_txq_tlv: display
1480  *				htt_tx_pdev_stats_sched_per_txq_tlv
1481  * @tag_buf: buffer containing the tlv htt_tx_pdev_stats_sched_per_txq_tlv
1482  *
1483  * return:void
1484  */
1485 static inline void dp_print_tx_pdev_stats_sched_per_txq_tlv(uint32_t *tag_buf)
1486 {
1487 	htt_tx_pdev_stats_sched_per_txq_tlv *dp_stats_buf =
1488 		(htt_tx_pdev_stats_sched_per_txq_tlv *)tag_buf;
1489 
1490 	DP_TRACE_STATS(FATAL, "HTT_TX_PDEV_STATS_SCHED_PER_TXQ_TLV:");
1491 	DP_TRACE_STATS(FATAL, "mac_id__txq_id__word = %d",
1492 			dp_stats_buf->mac_id__txq_id__word);
1493 	DP_TRACE_STATS(FATAL, "sched_policy = %d",
1494 			dp_stats_buf->sched_policy);
1495 	DP_TRACE_STATS(FATAL, "last_sched_cmd_posted_timestamp = %d",
1496 			dp_stats_buf->last_sched_cmd_posted_timestamp);
1497 	DP_TRACE_STATS(FATAL, "last_sched_cmd_compl_timestamp = %d",
1498 			dp_stats_buf->last_sched_cmd_compl_timestamp);
1499 	DP_TRACE_STATS(FATAL, "sched_2_tac_lwm_count = %d",
1500 			dp_stats_buf->sched_2_tac_lwm_count);
1501 	DP_TRACE_STATS(FATAL, "sched_2_tac_ring_full = %d",
1502 			dp_stats_buf->sched_2_tac_ring_full);
1503 	DP_TRACE_STATS(FATAL, "sched_cmd_post_failure = %d",
1504 			dp_stats_buf->sched_cmd_post_failure);
1505 	DP_TRACE_STATS(FATAL, "num_active_tids = %d",
1506 			dp_stats_buf->num_active_tids);
1507 	DP_TRACE_STATS(FATAL, "num_ps_schedules = %d",
1508 			dp_stats_buf->num_ps_schedules);
1509 	DP_TRACE_STATS(FATAL, "sched_cmds_pending = %d",
1510 			dp_stats_buf->sched_cmds_pending);
1511 	DP_TRACE_STATS(FATAL, "num_tid_register = %d",
1512 			dp_stats_buf->num_tid_register);
1513 	DP_TRACE_STATS(FATAL, "num_tid_unregister = %d",
1514 			dp_stats_buf->num_tid_unregister);
1515 	DP_TRACE_STATS(FATAL, "num_qstats_queried = %d",
1516 			dp_stats_buf->num_qstats_queried);
1517 	DP_TRACE_STATS(FATAL, "qstats_update_pending = %d",
1518 			dp_stats_buf->qstats_update_pending);
1519 	DP_TRACE_STATS(FATAL, "last_qstats_query_timestamp = %d",
1520 			dp_stats_buf->last_qstats_query_timestamp);
1521 	DP_TRACE_STATS(FATAL, "num_tqm_cmdq_full = %d",
1522 			dp_stats_buf->num_tqm_cmdq_full);
1523 	DP_TRACE_STATS(FATAL, "num_de_sched_algo_trigger = %d",
1524 			dp_stats_buf->num_de_sched_algo_trigger);
1525 	DP_TRACE_STATS(FATAL, "num_rt_sched_algo_trigger = %d",
1526 			dp_stats_buf->num_rt_sched_algo_trigger);
1527 	DP_TRACE_STATS(FATAL, "num_tqm_sched_algo_trigger = %d",
1528 			dp_stats_buf->num_tqm_sched_algo_trigger);
1529 	DP_TRACE_STATS(FATAL, "notify_sched = %d\n",
1530 			dp_stats_buf->notify_sched);
1531 }
1532 
1533 /*
1534  * dp_print_stats_tx_sched_cmn_tlv: display htt_stats_tx_sched_cmn_tlv
1535  * @tag_buf: buffer containing the tlv htt_stats_tx_sched_cmn_tlv
1536  *
1537  * return:void
1538  */
1539 static inline void dp_print_stats_tx_sched_cmn_tlv(uint32_t *tag_buf)
1540 {
1541 	htt_stats_tx_sched_cmn_tlv *dp_stats_buf =
1542 		(htt_stats_tx_sched_cmn_tlv *)tag_buf;
1543 
1544 	DP_TRACE_STATS(FATAL, "HTT_STATS_TX_SCHED_CMN_TLV:");
1545 	DP_TRACE_STATS(FATAL, "mac_id__word = %d",
1546 			dp_stats_buf->mac_id__word);
1547 	DP_TRACE_STATS(FATAL, "current_timestamp = %d\n",
1548 			dp_stats_buf->current_timestamp);
1549 }
1550 
1551 /*
1552  * dp_print_tx_tqm_gen_mpdu_stats_tlv_v: display htt_tx_tqm_gen_mpdu_stats_tlv_v
1553  * @tag_buf: buffer containing the tlv htt_tx_tqm_gen_mpdu_stats_tlv_v
1554  *
1555  * return:void
1556  */
1557 static inline void dp_print_tx_tqm_gen_mpdu_stats_tlv_v(uint32_t *tag_buf)
1558 {
1559 	htt_tx_tqm_gen_mpdu_stats_tlv_v *dp_stats_buf =
1560 		(htt_tx_tqm_gen_mpdu_stats_tlv_v *)tag_buf;
1561 	uint8_t i;
1562 	uint16_t index = 0;
1563 	uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
1564 	char *gen_mpdu_end_reason = qdf_mem_malloc(DP_MAX_STRING_LEN);
1565 
1566 	if (!gen_mpdu_end_reason) {
1567 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
1568 			  FL("Output buffer not allocated\n"));
1569 		return;
1570 	}
1571 
1572 	tag_len = qdf_min(tag_len,
1573 			(uint32_t)HTT_TX_TQM_MAX_GEN_MPDU_END_REASON);
1574 
1575 	DP_TRACE_STATS(FATAL, "HTT_TX_TQM_GEN_MPDU_STATS_TLV_V:");
1576 	for (i = 0; i <  tag_len; i++) {
1577 		index += qdf_snprint(&gen_mpdu_end_reason[index],
1578 				DP_MAX_STRING_LEN - index,
1579 				" %d:%d,", i,
1580 				dp_stats_buf->gen_mpdu_end_reason[i]);
1581 	}
1582 	DP_TRACE_STATS(FATAL, "gen_mpdu_end_reason = %s\n", gen_mpdu_end_reason);
1583 	qdf_mem_free(gen_mpdu_end_reason);
1584 }
1585 
1586 /*
1587  * dp_print_tx_tqm_list_mpdu_stats_tlv_v: display htt_tx_tqm_list_mpdu_stats_tlv
1588  * @tag_buf: buffer containing the tlv htt_tx_tqm_list_mpdu_stats_tlv_v
1589  *
1590  * return:void
1591  */
1592 static inline void dp_print_tx_tqm_list_mpdu_stats_tlv_v(uint32_t *tag_buf)
1593 {
1594 	htt_tx_tqm_list_mpdu_stats_tlv_v *dp_stats_buf =
1595 		(htt_tx_tqm_list_mpdu_stats_tlv_v *)tag_buf;
1596 	uint8_t i;
1597 	uint16_t index = 0;
1598 	uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
1599 	char *list_mpdu_end_reason = qdf_mem_malloc(DP_MAX_STRING_LEN);
1600 
1601 	if (!list_mpdu_end_reason) {
1602 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
1603 			  FL("Output buffer not allocated\n"));
1604 		return;
1605 	}
1606 
1607 	tag_len = qdf_min(tag_len,
1608 			(uint32_t)HTT_TX_TQM_MAX_LIST_MPDU_END_REASON);
1609 
1610 	DP_TRACE_STATS(FATAL, "HTT_TX_TQM_LIST_MPDU_STATS_TLV_V:");
1611 	for (i = 0; i <  tag_len; i++) {
1612 		index += qdf_snprint(&list_mpdu_end_reason[index],
1613 				DP_MAX_STRING_LEN - index,
1614 				" %d:%d,", i,
1615 				dp_stats_buf->list_mpdu_end_reason[i]);
1616 	}
1617 	DP_TRACE_STATS(FATAL, "list_mpdu_end_reason = %s\n",
1618 			list_mpdu_end_reason);
1619 	qdf_mem_free(list_mpdu_end_reason);
1620 }
1621 
1622 /*
1623  * dp_print_tx_tqm_list_mpdu_cnt_tlv_v: display htt_tx_tqm_list_mpdu_cnt_tlv_v
1624  * @tag_buf: buffer containing the tlv htt_tx_tqm_list_mpdu_cnt_tlv_v
1625  *
1626  * return:void
1627  */
1628 static inline void dp_print_tx_tqm_list_mpdu_cnt_tlv_v(uint32_t *tag_buf)
1629 {
1630 	htt_tx_tqm_list_mpdu_cnt_tlv_v *dp_stats_buf =
1631 		(htt_tx_tqm_list_mpdu_cnt_tlv_v *)tag_buf;
1632 	uint8_t i;
1633 	uint16_t index = 0;
1634 	uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
1635 	char *list_mpdu_cnt_hist = qdf_mem_malloc(DP_MAX_STRING_LEN);
1636 
1637 	if (!list_mpdu_cnt_hist) {
1638 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
1639 			  FL("Output buffer not allocated\n"));
1640 		return;
1641 	}
1642 
1643 	tag_len = qdf_min(tag_len,
1644 			(uint32_t)HTT_TX_TQM_MAX_LIST_MPDU_CNT_HISTOGRAM_BINS);
1645 
1646 	DP_TRACE_STATS(FATAL, "HTT_TX_TQM_LIST_MPDU_CNT_TLV_V:");
1647 	for (i = 0; i <  tag_len; i++) {
1648 		index += qdf_snprint(&list_mpdu_cnt_hist[index],
1649 				DP_MAX_STRING_LEN - index,
1650 				" %d:%d,", i,
1651 				dp_stats_buf->list_mpdu_cnt_hist[i]);
1652 	}
1653 	DP_TRACE_STATS(FATAL, "list_mpdu_cnt_hist = %s\n", list_mpdu_cnt_hist);
1654 	qdf_mem_free(list_mpdu_cnt_hist);
1655 }
1656 
1657 /*
1658  * dp_print_tx_tqm_pdev_stats_tlv_v: display htt_tx_tqm_pdev_stats_tlv_v
1659  * @tag_buf: buffer containing the tlv htt_tx_tqm_pdev_stats_tlv_v
1660  *
1661  * return:void
1662  */
1663 static inline void dp_print_tx_tqm_pdev_stats_tlv_v(uint32_t *tag_buf)
1664 {
1665 	htt_tx_tqm_pdev_stats_tlv_v *dp_stats_buf =
1666 		(htt_tx_tqm_pdev_stats_tlv_v *)tag_buf;
1667 
1668 	DP_TRACE_STATS(FATAL, "HTT_TX_TQM_PDEV_STATS_TLV_V:");
1669 	DP_TRACE_STATS(FATAL, "msdu_count = %d",
1670 			dp_stats_buf->msdu_count);
1671 	DP_TRACE_STATS(FATAL, "mpdu_count = %d",
1672 			dp_stats_buf->mpdu_count);
1673 	DP_TRACE_STATS(FATAL, "remove_msdu = %d",
1674 			dp_stats_buf->remove_msdu);
1675 	DP_TRACE_STATS(FATAL, "remove_mpdu = %d",
1676 			dp_stats_buf->remove_mpdu);
1677 	DP_TRACE_STATS(FATAL, "remove_msdu_ttl = %d",
1678 			dp_stats_buf->remove_msdu_ttl);
1679 	DP_TRACE_STATS(FATAL, "send_bar = %d",
1680 			dp_stats_buf->send_bar);
1681 	DP_TRACE_STATS(FATAL, "bar_sync = %d",
1682 			dp_stats_buf->bar_sync);
1683 	DP_TRACE_STATS(FATAL, "notify_mpdu = %d",
1684 			dp_stats_buf->notify_mpdu);
1685 	DP_TRACE_STATS(FATAL, "sync_cmd = %d",
1686 			dp_stats_buf->sync_cmd);
1687 	DP_TRACE_STATS(FATAL, "write_cmd = %d",
1688 			dp_stats_buf->write_cmd);
1689 	DP_TRACE_STATS(FATAL, "hwsch_trigger = %d",
1690 			dp_stats_buf->hwsch_trigger);
1691 	DP_TRACE_STATS(FATAL, "ack_tlv_proc = %d",
1692 			dp_stats_buf->ack_tlv_proc);
1693 	DP_TRACE_STATS(FATAL, "gen_mpdu_cmd = %d",
1694 			dp_stats_buf->gen_mpdu_cmd);
1695 	DP_TRACE_STATS(FATAL, "gen_list_cmd = %d",
1696 			dp_stats_buf->gen_list_cmd);
1697 	DP_TRACE_STATS(FATAL, "remove_mpdu_cmd = %d",
1698 			dp_stats_buf->remove_mpdu_cmd);
1699 	DP_TRACE_STATS(FATAL, "remove_mpdu_tried_cmd = %d",
1700 			dp_stats_buf->remove_mpdu_tried_cmd);
1701 	DP_TRACE_STATS(FATAL, "mpdu_queue_stats_cmd = %d",
1702 			dp_stats_buf->mpdu_queue_stats_cmd);
1703 	DP_TRACE_STATS(FATAL, "mpdu_head_info_cmd = %d",
1704 			dp_stats_buf->mpdu_head_info_cmd);
1705 	DP_TRACE_STATS(FATAL, "msdu_flow_stats_cmd = %d",
1706 			dp_stats_buf->msdu_flow_stats_cmd);
1707 	DP_TRACE_STATS(FATAL, "remove_msdu_cmd = %d",
1708 			dp_stats_buf->remove_msdu_cmd);
1709 	DP_TRACE_STATS(FATAL, "remove_msdu_ttl_cmd = %d",
1710 			dp_stats_buf->remove_msdu_ttl_cmd);
1711 	DP_TRACE_STATS(FATAL, "flush_cache_cmd = %d",
1712 			dp_stats_buf->flush_cache_cmd);
1713 	DP_TRACE_STATS(FATAL, "update_mpduq_cmd = %d",
1714 			dp_stats_buf->update_mpduq_cmd);
1715 	DP_TRACE_STATS(FATAL, "enqueue = %d",
1716 			dp_stats_buf->enqueue);
1717 	DP_TRACE_STATS(FATAL, "enqueue_notify = %d",
1718 			dp_stats_buf->enqueue_notify);
1719 	DP_TRACE_STATS(FATAL, "notify_mpdu_at_head = %d",
1720 			dp_stats_buf->notify_mpdu_at_head);
1721 	DP_TRACE_STATS(FATAL, "notify_mpdu_state_valid = %d\n",
1722 			dp_stats_buf->notify_mpdu_state_valid);
1723 }
1724 
1725 /*
1726  * dp_print_tx_tqm_cmn_stats_tlv: display htt_tx_tqm_cmn_stats_tlv
1727  * @tag_buf: buffer containing the tlv htt_tx_tqm_cmn_stats_tlv
1728  *
1729  * return:void
1730  */
1731 static inline void dp_print_tx_tqm_cmn_stats_tlv(uint32_t *tag_buf)
1732 {
1733 	htt_tx_tqm_cmn_stats_tlv *dp_stats_buf =
1734 		(htt_tx_tqm_cmn_stats_tlv *)tag_buf;
1735 
1736 	DP_TRACE_STATS(FATAL, "HTT_TX_TQM_CMN_STATS_TLV:");
1737 	DP_TRACE_STATS(FATAL, "mac_id__word = %d",
1738 			dp_stats_buf->mac_id__word);
1739 	DP_TRACE_STATS(FATAL, "max_cmdq_id = %d",
1740 			dp_stats_buf->max_cmdq_id);
1741 	DP_TRACE_STATS(FATAL, "list_mpdu_cnt_hist_intvl = %d",
1742 			dp_stats_buf->list_mpdu_cnt_hist_intvl);
1743 	DP_TRACE_STATS(FATAL, "add_msdu = %d",
1744 			dp_stats_buf->add_msdu);
1745 	DP_TRACE_STATS(FATAL, "q_empty = %d",
1746 			dp_stats_buf->q_empty);
1747 	DP_TRACE_STATS(FATAL, "q_not_empty = %d",
1748 			dp_stats_buf->q_not_empty);
1749 	DP_TRACE_STATS(FATAL, "drop_notification = %d",
1750 			dp_stats_buf->drop_notification);
1751 	DP_TRACE_STATS(FATAL, "desc_threshold = %d\n",
1752 			dp_stats_buf->desc_threshold);
1753 }
1754 
1755 /*
1756  * dp_print_tx_tqm_error_stats_tlv: display htt_tx_tqm_error_stats_tlv
1757  * @tag_buf: buffer containing the tlv htt_tx_tqm_error_stats_tlv
1758  *
1759  * return:void
1760  */
1761 static inline void dp_print_tx_tqm_error_stats_tlv(uint32_t *tag_buf)
1762 {
1763 	htt_tx_tqm_error_stats_tlv *dp_stats_buf =
1764 		(htt_tx_tqm_error_stats_tlv *)tag_buf;
1765 
1766 	DP_TRACE_STATS(FATAL, "HTT_TX_TQM_ERROR_STATS_TLV:");
1767 	DP_TRACE_STATS(FATAL, "q_empty_failure = %d",
1768 			dp_stats_buf->q_empty_failure);
1769 	DP_TRACE_STATS(FATAL, "q_not_empty_failure = %d",
1770 			dp_stats_buf->q_not_empty_failure);
1771 	DP_TRACE_STATS(FATAL, "add_msdu_failure = %d\n",
1772 			dp_stats_buf->add_msdu_failure);
1773 }
1774 
1775 /*
1776  * dp_print_tx_tqm_cmdq_status_tlv: display htt_tx_tqm_cmdq_status_tlv
1777  * @tag_buf: buffer containing the tlv htt_tx_tqm_cmdq_status_tlv
1778  *
1779  * return:void
1780  */
1781 static inline void dp_print_tx_tqm_cmdq_status_tlv(uint32_t *tag_buf)
1782 {
1783 	htt_tx_tqm_cmdq_status_tlv *dp_stats_buf =
1784 		(htt_tx_tqm_cmdq_status_tlv *)tag_buf;
1785 
1786 	DP_TRACE_STATS(FATAL, "HTT_TX_TQM_CMDQ_STATUS_TLV:");
1787 	DP_TRACE_STATS(FATAL, "mac_id__cmdq_id__word = %d",
1788 			dp_stats_buf->mac_id__cmdq_id__word);
1789 	DP_TRACE_STATS(FATAL, "sync_cmd = %d",
1790 			dp_stats_buf->sync_cmd);
1791 	DP_TRACE_STATS(FATAL, "write_cmd = %d",
1792 			dp_stats_buf->write_cmd);
1793 	DP_TRACE_STATS(FATAL, "gen_mpdu_cmd = %d",
1794 			dp_stats_buf->gen_mpdu_cmd);
1795 	DP_TRACE_STATS(FATAL, "mpdu_queue_stats_cmd = %d",
1796 			dp_stats_buf->mpdu_queue_stats_cmd);
1797 	DP_TRACE_STATS(FATAL, "mpdu_head_info_cmd = %d",
1798 			dp_stats_buf->mpdu_head_info_cmd);
1799 	DP_TRACE_STATS(FATAL, "msdu_flow_stats_cmd = %d",
1800 			dp_stats_buf->msdu_flow_stats_cmd);
1801 	DP_TRACE_STATS(FATAL, "remove_mpdu_cmd = %d",
1802 			dp_stats_buf->remove_mpdu_cmd);
1803 	DP_TRACE_STATS(FATAL, "remove_msdu_cmd = %d",
1804 			dp_stats_buf->remove_msdu_cmd);
1805 	DP_TRACE_STATS(FATAL, "flush_cache_cmd = %d",
1806 			dp_stats_buf->flush_cache_cmd);
1807 	DP_TRACE_STATS(FATAL, "update_mpduq_cmd = %d",
1808 			dp_stats_buf->update_mpduq_cmd);
1809 	DP_TRACE_STATS(FATAL, "update_msduq_cmd = %d\n",
1810 			dp_stats_buf->update_msduq_cmd);
1811 }
1812 
1813 /*
1814  * dp_print_tx_de_eapol_packets_stats_tlv: display htt_tx_de_eapol_packets_stats
1815  * @tag_buf: buffer containing the tlv htt_tx_de_eapol_packets_stats_tlv
1816  *
1817  * return:void
1818  */
1819 static inline void dp_print_tx_de_eapol_packets_stats_tlv(uint32_t *tag_buf)
1820 {
1821 	htt_tx_de_eapol_packets_stats_tlv *dp_stats_buf =
1822 		(htt_tx_de_eapol_packets_stats_tlv *)tag_buf;
1823 
1824 	DP_TRACE_STATS(FATAL, "HTT_TX_DE_EAPOL_PACKETS_STATS_TLV:");
1825 	DP_TRACE_STATS(FATAL, "m1_packets = %d",
1826 			dp_stats_buf->m1_packets);
1827 	DP_TRACE_STATS(FATAL, "m2_packets = %d",
1828 			dp_stats_buf->m2_packets);
1829 	DP_TRACE_STATS(FATAL, "m3_packets = %d",
1830 			dp_stats_buf->m3_packets);
1831 	DP_TRACE_STATS(FATAL, "m4_packets = %d",
1832 			dp_stats_buf->m4_packets);
1833 	DP_TRACE_STATS(FATAL, "g1_packets = %d",
1834 			dp_stats_buf->g1_packets);
1835 	DP_TRACE_STATS(FATAL, "g2_packets = %d\n",
1836 			dp_stats_buf->g2_packets);
1837 }
1838 
1839 /*
1840  * dp_print_tx_de_classify_failed_stats_tlv: display
1841  *				htt_tx_de_classify_failed_stats_tlv
1842  * @tag_buf: buffer containing the tlv htt_tx_de_classify_failed_stats_tlv
1843  *
1844  * return:void
1845  */
1846 static inline void dp_print_tx_de_classify_failed_stats_tlv(uint32_t *tag_buf)
1847 {
1848 	htt_tx_de_classify_failed_stats_tlv *dp_stats_buf =
1849 		(htt_tx_de_classify_failed_stats_tlv *)tag_buf;
1850 
1851 	DP_TRACE_STATS(FATAL, "HTT_TX_DE_CLASSIFY_FAILED_STATS_TLV:");
1852 	DP_TRACE_STATS(FATAL, "ap_bss_peer_not_found = %d",
1853 			dp_stats_buf->ap_bss_peer_not_found);
1854 	DP_TRACE_STATS(FATAL, "ap_bcast_mcast_no_peer = %d",
1855 			dp_stats_buf->ap_bcast_mcast_no_peer);
1856 	DP_TRACE_STATS(FATAL, "sta_delete_in_progress = %d",
1857 			dp_stats_buf->sta_delete_in_progress);
1858 	DP_TRACE_STATS(FATAL, "ibss_no_bss_peer = %d",
1859 			dp_stats_buf->ibss_no_bss_peer);
1860 	DP_TRACE_STATS(FATAL, "invaild_vdev_type = %d",
1861 			dp_stats_buf->invaild_vdev_type);
1862 	DP_TRACE_STATS(FATAL, "invalid_ast_peer_entry = %d",
1863 			dp_stats_buf->invalid_ast_peer_entry);
1864 	DP_TRACE_STATS(FATAL, "peer_entry_invalid = %d",
1865 			dp_stats_buf->peer_entry_invalid);
1866 	DP_TRACE_STATS(FATAL, "ethertype_not_ip = %d",
1867 			dp_stats_buf->ethertype_not_ip);
1868 	DP_TRACE_STATS(FATAL, "eapol_lookup_failed = %d",
1869 			dp_stats_buf->eapol_lookup_failed);
1870 	DP_TRACE_STATS(FATAL, "qpeer_not_allow_data = %d",
1871 			dp_stats_buf->qpeer_not_allow_data);
1872 	DP_TRACE_STATS(FATAL, "fse_tid_override = %d\n",
1873 			dp_stats_buf->fse_tid_override);
1874 }
1875 
1876 /*
1877  * dp_print_tx_de_classify_stats_tlv: display htt_tx_de_classify_stats_tlv
1878  * @tag_buf: buffer containing the tlv htt_tx_de_classify_stats_tlv
1879  *
1880  * return:void
1881  */
1882 static inline void dp_print_tx_de_classify_stats_tlv(uint32_t *tag_buf)
1883 {
1884 	htt_tx_de_classify_stats_tlv *dp_stats_buf =
1885 		(htt_tx_de_classify_stats_tlv *)tag_buf;
1886 
1887 	DP_TRACE_STATS(FATAL, "HTT_TX_DE_CLASSIFY_STATS_TLV:");
1888 	DP_TRACE_STATS(FATAL, "arp_packets = %d",
1889 			dp_stats_buf->arp_packets);
1890 	DP_TRACE_STATS(FATAL, "igmp_packets = %d",
1891 			dp_stats_buf->igmp_packets);
1892 	DP_TRACE_STATS(FATAL, "dhcp_packets = %d",
1893 			dp_stats_buf->dhcp_packets);
1894 	DP_TRACE_STATS(FATAL, "host_inspected = %d",
1895 			dp_stats_buf->host_inspected);
1896 	DP_TRACE_STATS(FATAL, "htt_included = %d",
1897 			dp_stats_buf->htt_included);
1898 	DP_TRACE_STATS(FATAL, "htt_valid_mcs = %d",
1899 			dp_stats_buf->htt_valid_mcs);
1900 	DP_TRACE_STATS(FATAL, "htt_valid_nss = %d",
1901 			dp_stats_buf->htt_valid_nss);
1902 	DP_TRACE_STATS(FATAL, "htt_valid_preamble_type = %d",
1903 			dp_stats_buf->htt_valid_preamble_type);
1904 	DP_TRACE_STATS(FATAL, "htt_valid_chainmask = %d",
1905 			dp_stats_buf->htt_valid_chainmask);
1906 	DP_TRACE_STATS(FATAL, "htt_valid_guard_interval = %d",
1907 			dp_stats_buf->htt_valid_guard_interval);
1908 	DP_TRACE_STATS(FATAL, "htt_valid_retries = %d",
1909 			dp_stats_buf->htt_valid_retries);
1910 	DP_TRACE_STATS(FATAL, "htt_valid_bw_info = %d",
1911 			dp_stats_buf->htt_valid_bw_info);
1912 	DP_TRACE_STATS(FATAL, "htt_valid_power = %d",
1913 			dp_stats_buf->htt_valid_power);
1914 	DP_TRACE_STATS(FATAL, "htt_valid_key_flags = %d",
1915 			dp_stats_buf->htt_valid_key_flags);
1916 	DP_TRACE_STATS(FATAL, "htt_valid_no_encryption = %d",
1917 			dp_stats_buf->htt_valid_no_encryption);
1918 	DP_TRACE_STATS(FATAL, "fse_entry_count = %d",
1919 			dp_stats_buf->fse_entry_count);
1920 	DP_TRACE_STATS(FATAL, "fse_priority_be = %d",
1921 			dp_stats_buf->fse_priority_be);
1922 	DP_TRACE_STATS(FATAL, "fse_priority_high = %d",
1923 			dp_stats_buf->fse_priority_high);
1924 	DP_TRACE_STATS(FATAL, "fse_priority_low = %d",
1925 			dp_stats_buf->fse_priority_low);
1926 	DP_TRACE_STATS(FATAL, "fse_traffic_ptrn_be = %d",
1927 			dp_stats_buf->fse_traffic_ptrn_be);
1928 	DP_TRACE_STATS(FATAL, "fse_traffic_ptrn_over_sub = %d",
1929 			dp_stats_buf->fse_traffic_ptrn_over_sub);
1930 	DP_TRACE_STATS(FATAL, "fse_traffic_ptrn_bursty = %d",
1931 			dp_stats_buf->fse_traffic_ptrn_bursty);
1932 	DP_TRACE_STATS(FATAL, "fse_traffic_ptrn_interactive = %d",
1933 			dp_stats_buf->fse_traffic_ptrn_interactive);
1934 	DP_TRACE_STATS(FATAL, "fse_traffic_ptrn_periodic = %d",
1935 			dp_stats_buf->fse_traffic_ptrn_periodic);
1936 	DP_TRACE_STATS(FATAL, "fse_hwqueue_alloc = %d",
1937 			dp_stats_buf->fse_hwqueue_alloc);
1938 	DP_TRACE_STATS(FATAL, "fse_hwqueue_created = %d",
1939 			dp_stats_buf->fse_hwqueue_created);
1940 	DP_TRACE_STATS(FATAL, "fse_hwqueue_send_to_host = %d",
1941 			dp_stats_buf->fse_hwqueue_send_to_host);
1942 	DP_TRACE_STATS(FATAL, "mcast_entry = %d",
1943 			dp_stats_buf->mcast_entry);
1944 	DP_TRACE_STATS(FATAL, "bcast_entry = %d\n",
1945 			dp_stats_buf->bcast_entry);
1946 }
1947 
1948 /*
1949  * dp_print_tx_de_classify_status_stats_tlv: display
1950  *				htt_tx_de_classify_status_stats_tlv
1951  * @tag_buf: buffer containing the tlv htt_tx_de_classify_status_stats_tlv
1952  *
1953  * return:void
1954  */
1955 static inline void dp_print_tx_de_classify_status_stats_tlv(uint32_t *tag_buf)
1956 {
1957 	htt_tx_de_classify_status_stats_tlv *dp_stats_buf =
1958 		(htt_tx_de_classify_status_stats_tlv *)tag_buf;
1959 
1960 	DP_TRACE_STATS(FATAL, "HTT_TX_DE_CLASSIFY_STATUS_STATS_TLV:");
1961 	DP_TRACE_STATS(FATAL, "eok = %d",
1962 			dp_stats_buf->eok);
1963 	DP_TRACE_STATS(FATAL, "classify_done = %d",
1964 			dp_stats_buf->classify_done);
1965 	DP_TRACE_STATS(FATAL, "lookup_failed = %d",
1966 			dp_stats_buf->lookup_failed);
1967 	DP_TRACE_STATS(FATAL, "send_host_dhcp = %d",
1968 			dp_stats_buf->send_host_dhcp);
1969 	DP_TRACE_STATS(FATAL, "send_host_mcast = %d",
1970 			dp_stats_buf->send_host_mcast);
1971 	DP_TRACE_STATS(FATAL, "send_host_unknown_dest = %d",
1972 			dp_stats_buf->send_host_unknown_dest);
1973 	DP_TRACE_STATS(FATAL, "send_host = %d",
1974 			dp_stats_buf->send_host);
1975 	DP_TRACE_STATS(FATAL, "status_invalid = %d\n",
1976 			dp_stats_buf->status_invalid);
1977 }
1978 
1979 /*
1980  * dp_print_tx_de_enqueue_packets_stats_tlv: display
1981  *				htt_tx_de_enqueue_packets_stats_tlv
1982  * @tag_buf: buffer containing the tlv htt_tx_de_enqueue_packets_stats_tlv
1983  *
1984  * return:void
1985  */
1986 static inline void dp_print_tx_de_enqueue_packets_stats_tlv(uint32_t *tag_buf)
1987 {
1988 	htt_tx_de_enqueue_packets_stats_tlv *dp_stats_buf =
1989 		(htt_tx_de_enqueue_packets_stats_tlv *)tag_buf;
1990 
1991 	DP_TRACE_STATS(FATAL, "HTT_TX_DE_ENQUEUE_PACKETS_STATS_TLV:");
1992 	DP_TRACE_STATS(FATAL, "enqueued_pkts = %d",
1993 			dp_stats_buf->enqueued_pkts);
1994 	DP_TRACE_STATS(FATAL, "to_tqm = %d",
1995 			dp_stats_buf->to_tqm);
1996 	DP_TRACE_STATS(FATAL, "to_tqm_bypass = %d\n",
1997 			dp_stats_buf->to_tqm_bypass);
1998 }
1999 
2000 /*
2001  * dp_print_tx_de_enqueue_discard_stats_tlv: display
2002  *					htt_tx_de_enqueue_discard_stats_tlv
2003  * @tag_buf: buffer containing the tlv htt_tx_de_enqueue_discard_stats_tlv
2004  *
2005  * return:void
2006  */
2007 static inline void dp_print_tx_de_enqueue_discard_stats_tlv(uint32_t *tag_buf)
2008 {
2009 	htt_tx_de_enqueue_discard_stats_tlv *dp_stats_buf =
2010 		(htt_tx_de_enqueue_discard_stats_tlv *)tag_buf;
2011 
2012 	DP_TRACE_STATS(FATAL, "HTT_TX_DE_ENQUEUE_DISCARD_STATS_TLV:");
2013 	DP_TRACE_STATS(FATAL, "discarded_pkts = %d",
2014 			dp_stats_buf->discarded_pkts);
2015 	DP_TRACE_STATS(FATAL, "local_frames = %d",
2016 			dp_stats_buf->local_frames);
2017 	DP_TRACE_STATS(FATAL, "is_ext_msdu = %d\n",
2018 			dp_stats_buf->is_ext_msdu);
2019 }
2020 
2021 /*
2022  * dp_print_tx_de_compl_stats_tlv: display htt_tx_de_compl_stats_tlv
2023  * @tag_buf: buffer containing the tlv htt_tx_de_compl_stats_tlv
2024  *
2025  * return:void
2026  */
2027 static inline void dp_print_tx_de_compl_stats_tlv(uint32_t *tag_buf)
2028 {
2029 	htt_tx_de_compl_stats_tlv *dp_stats_buf =
2030 		(htt_tx_de_compl_stats_tlv *)tag_buf;
2031 
2032 	DP_TRACE_STATS(FATAL, "HTT_TX_DE_COMPL_STATS_TLV:");
2033 	DP_TRACE_STATS(FATAL, "tcl_dummy_frame = %d",
2034 			dp_stats_buf->tcl_dummy_frame);
2035 	DP_TRACE_STATS(FATAL, "tqm_dummy_frame = %d",
2036 			dp_stats_buf->tqm_dummy_frame);
2037 	DP_TRACE_STATS(FATAL, "tqm_notify_frame = %d",
2038 			dp_stats_buf->tqm_notify_frame);
2039 	DP_TRACE_STATS(FATAL, "fw2wbm_enq = %d",
2040 			dp_stats_buf->fw2wbm_enq);
2041 	DP_TRACE_STATS(FATAL, "tqm_bypass_frame = %d\n",
2042 			dp_stats_buf->tqm_bypass_frame);
2043 }
2044 
2045 /*
2046  * dp_print_tx_de_cmn_stats_tlv: display htt_tx_de_cmn_stats_tlv
2047  * @tag_buf: buffer containing the tlv htt_tx_de_cmn_stats_tlv
2048  *
2049  * return:void
2050  */
2051 static inline void dp_print_tx_de_cmn_stats_tlv(uint32_t *tag_buf)
2052 {
2053 	htt_tx_de_cmn_stats_tlv *dp_stats_buf =
2054 		(htt_tx_de_cmn_stats_tlv *)tag_buf;
2055 
2056 	DP_TRACE_STATS(FATAL, "HTT_TX_DE_CMN_STATS_TLV:");
2057 	DP_TRACE_STATS(FATAL, "mac_id__word = %d",
2058 			dp_stats_buf->mac_id__word);
2059 	DP_TRACE_STATS(FATAL, "tcl2fw_entry_count = %d",
2060 			dp_stats_buf->tcl2fw_entry_count);
2061 	DP_TRACE_STATS(FATAL, "not_to_fw = %d",
2062 			dp_stats_buf->not_to_fw);
2063 	DP_TRACE_STATS(FATAL, "invalid_pdev_vdev_peer = %d",
2064 			dp_stats_buf->invalid_pdev_vdev_peer);
2065 	DP_TRACE_STATS(FATAL, "tcl_res_invalid_addrx = %d",
2066 			dp_stats_buf->tcl_res_invalid_addrx);
2067 	DP_TRACE_STATS(FATAL, "wbm2fw_entry_count = %d",
2068 			dp_stats_buf->wbm2fw_entry_count);
2069 	DP_TRACE_STATS(FATAL, "invalid_pdev = %d\n",
2070 			dp_stats_buf->invalid_pdev);
2071 }
2072 
2073 /*
2074  * dp_print_ring_if_stats_tlv: display htt_ring_if_stats_tlv
2075  * @tag_buf: buffer containing the tlv htt_ring_if_stats_tlv
2076  *
2077  * return:void
2078  */
2079 static inline void dp_print_ring_if_stats_tlv(uint32_t *tag_buf)
2080 {
2081 	htt_ring_if_stats_tlv *dp_stats_buf =
2082 		(htt_ring_if_stats_tlv *)tag_buf;
2083 	uint8_t i;
2084 	uint16_t index = 0;
2085 	char *wm_hit_count = qdf_mem_malloc(DP_MAX_STRING_LEN);
2086 
2087 	if (!wm_hit_count) {
2088 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
2089 			  FL("Output buffer not allocated\n"));
2090 		return;
2091 	}
2092 
2093 	DP_TRACE_STATS(FATAL, "HTT_RING_IF_STATS_TLV:");
2094 	DP_TRACE_STATS(FATAL, "base_addr = %d",
2095 			dp_stats_buf->base_addr);
2096 	DP_TRACE_STATS(FATAL, "elem_size = %d",
2097 			dp_stats_buf->elem_size);
2098 	DP_TRACE_STATS(FATAL, "num_elems__prefetch_tail_idx = %d",
2099 			dp_stats_buf->num_elems__prefetch_tail_idx);
2100 	DP_TRACE_STATS(FATAL, "head_idx__tail_idx = %d",
2101 			dp_stats_buf->head_idx__tail_idx);
2102 	DP_TRACE_STATS(FATAL, "shadow_head_idx__shadow_tail_idx = %d",
2103 			dp_stats_buf->shadow_head_idx__shadow_tail_idx);
2104 	DP_TRACE_STATS(FATAL, "num_tail_incr = %d",
2105 			dp_stats_buf->num_tail_incr);
2106 	DP_TRACE_STATS(FATAL, "lwm_thresh__hwm_thresh = %d",
2107 			dp_stats_buf->lwm_thresh__hwm_thresh);
2108 	DP_TRACE_STATS(FATAL, "overrun_hit_count = %d",
2109 			dp_stats_buf->overrun_hit_count);
2110 	DP_TRACE_STATS(FATAL, "underrun_hit_count = %d",
2111 			dp_stats_buf->underrun_hit_count);
2112 	DP_TRACE_STATS(FATAL, "prod_blockwait_count = %d",
2113 			dp_stats_buf->prod_blockwait_count);
2114 	DP_TRACE_STATS(FATAL, "cons_blockwait_count = %d",
2115 			dp_stats_buf->cons_blockwait_count);
2116 
2117 	for (i = 0; i <  DP_HTT_LOW_WM_HIT_COUNT_LEN; i++) {
2118 		index += qdf_snprint(&wm_hit_count[index],
2119 				DP_MAX_STRING_LEN - index,
2120 				" %d:%d,", i,
2121 				dp_stats_buf->low_wm_hit_count[i]);
2122 	}
2123 	DP_TRACE_STATS(FATAL, "low_wm_hit_count = %s ", wm_hit_count);
2124 
2125 	qdf_mem_zero(wm_hit_count, DP_MAX_STRING_LEN);
2126 
2127 	index = 0;
2128 	for (i = 0; i <  DP_HTT_HIGH_WM_HIT_COUNT_LEN; i++) {
2129 		index += qdf_snprint(&wm_hit_count[index],
2130 				DP_MAX_STRING_LEN - index,
2131 				" %d:%d,", i,
2132 				dp_stats_buf->high_wm_hit_count[i]);
2133 	}
2134 	DP_TRACE_STATS(FATAL, "high_wm_hit_count = %s\n", wm_hit_count);
2135 }
2136 
2137 /*
2138  * dp_print_ring_if_cmn_tlv: display htt_ring_if_cmn_tlv
2139  * @tag_buf: buffer containing the tlv htt_ring_if_cmn_tlv
2140  *
2141  * return:void
2142  */
2143 static inline void dp_print_ring_if_cmn_tlv(uint32_t *tag_buf)
2144 {
2145 	htt_ring_if_cmn_tlv *dp_stats_buf =
2146 		(htt_ring_if_cmn_tlv *)tag_buf;
2147 
2148 	DP_TRACE_STATS(FATAL, "HTT_RING_IF_CMN_TLV:");
2149 	DP_TRACE_STATS(FATAL, "mac_id__word = %d",
2150 			dp_stats_buf->mac_id__word);
2151 	DP_TRACE_STATS(FATAL, "num_records = %d\n",
2152 			dp_stats_buf->num_records);
2153 }
2154 
2155 /*
2156  * dp_print_sfm_client_user_tlv_v: display htt_sfm_client_user_tlv_v
2157  * @tag_buf: buffer containing the tlv htt_sfm_client_user_tlv_v
2158  *
2159  * return:void
2160  */
2161 static inline void dp_print_sfm_client_user_tlv_v(uint32_t *tag_buf)
2162 {
2163 	htt_sfm_client_user_tlv_v *dp_stats_buf =
2164 		(htt_sfm_client_user_tlv_v *)tag_buf;
2165 	uint8_t i;
2166 	uint16_t index = 0;
2167 	uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
2168 	char *dwords_used_by_user_n = qdf_mem_malloc(DP_MAX_STRING_LEN);
2169 
2170 	if (!dwords_used_by_user_n) {
2171 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
2172 			  FL("Output buffer not allocated\n"));
2173 		return;
2174 	}
2175 
2176 	DP_TRACE_STATS(FATAL, "HTT_SFM_CLIENT_USER_TLV_V:");
2177 	for (i = 0; i <  tag_len; i++) {
2178 		index += qdf_snprint(&dwords_used_by_user_n[index],
2179 				DP_MAX_STRING_LEN - index,
2180 				" %d:%d,", i,
2181 				dp_stats_buf->dwords_used_by_user_n[i]);
2182 	}
2183 	DP_TRACE_STATS(FATAL, "dwords_used_by_user_n = %s\n",
2184 			dwords_used_by_user_n);
2185 	qdf_mem_free(dwords_used_by_user_n);
2186 }
2187 
2188 /*
2189  * dp_print_sfm_client_tlv: display htt_sfm_client_tlv
2190  * @tag_buf: buffer containing the tlv htt_sfm_client_tlv
2191  *
2192  * return:void
2193  */
2194 static inline void dp_print_sfm_client_tlv(uint32_t *tag_buf)
2195 {
2196 	htt_sfm_client_tlv *dp_stats_buf =
2197 		(htt_sfm_client_tlv *)tag_buf;
2198 
2199 	DP_TRACE_STATS(FATAL, "HTT_SFM_CLIENT_TLV:");
2200 	DP_TRACE_STATS(FATAL, "client_id = %d",
2201 			dp_stats_buf->client_id);
2202 	DP_TRACE_STATS(FATAL, "buf_min = %d",
2203 			dp_stats_buf->buf_min);
2204 	DP_TRACE_STATS(FATAL, "buf_max = %d",
2205 			dp_stats_buf->buf_max);
2206 	DP_TRACE_STATS(FATAL, "buf_busy = %d",
2207 			dp_stats_buf->buf_busy);
2208 	DP_TRACE_STATS(FATAL, "buf_alloc = %d",
2209 			dp_stats_buf->buf_alloc);
2210 	DP_TRACE_STATS(FATAL, "buf_avail = %d",
2211 			dp_stats_buf->buf_avail);
2212 	DP_TRACE_STATS(FATAL, "num_users = %d\n",
2213 			dp_stats_buf->num_users);
2214 }
2215 
2216 /*
2217  * dp_print_sfm_cmn_tlv: display htt_sfm_cmn_tlv
2218  * @tag_buf: buffer containing the tlv htt_sfm_cmn_tlv
2219  *
2220  * return:void
2221  */
2222 static inline void dp_print_sfm_cmn_tlv(uint32_t *tag_buf)
2223 {
2224 	htt_sfm_cmn_tlv *dp_stats_buf =
2225 		(htt_sfm_cmn_tlv *)tag_buf;
2226 
2227 	DP_TRACE_STATS(FATAL, "HTT_SFM_CMN_TLV:");
2228 	DP_TRACE_STATS(FATAL, "mac_id__word = %d",
2229 			dp_stats_buf->mac_id__word);
2230 	DP_TRACE_STATS(FATAL, "buf_total = %d",
2231 			dp_stats_buf->buf_total);
2232 	DP_TRACE_STATS(FATAL, "mem_empty = %d",
2233 			dp_stats_buf->mem_empty);
2234 	DP_TRACE_STATS(FATAL, "deallocate_bufs = %d",
2235 			dp_stats_buf->deallocate_bufs);
2236 	DP_TRACE_STATS(FATAL, "num_records = %d\n",
2237 			dp_stats_buf->num_records);
2238 }
2239 
2240 /*
2241  * dp_print_sring_stats_tlv: display htt_sring_stats_tlv
2242  * @tag_buf: buffer containing the tlv htt_sring_stats_tlv
2243  *
2244  * return:void
2245  */
2246 static inline void dp_print_sring_stats_tlv(uint32_t *tag_buf)
2247 {
2248 	htt_sring_stats_tlv *dp_stats_buf =
2249 		(htt_sring_stats_tlv *)tag_buf;
2250 
2251 	DP_TRACE_STATS(FATAL, "HTT_SRING_STATS_TLV:");
2252 	DP_TRACE_STATS(FATAL, "mac_id__ring_id__arena__ep = %d",
2253 			dp_stats_buf->mac_id__ring_id__arena__ep);
2254 	DP_TRACE_STATS(FATAL, "base_addr_lsb = %d",
2255 			dp_stats_buf->base_addr_lsb);
2256 	DP_TRACE_STATS(FATAL, "base_addr_msb = %d",
2257 			dp_stats_buf->base_addr_msb);
2258 	DP_TRACE_STATS(FATAL, "ring_size = %d",
2259 			dp_stats_buf->ring_size);
2260 	DP_TRACE_STATS(FATAL, "elem_size = %d",
2261 			dp_stats_buf->elem_size);
2262 	DP_TRACE_STATS(FATAL, "num_avail_words__num_valid_words = %d",
2263 			dp_stats_buf->num_avail_words__num_valid_words);
2264 	DP_TRACE_STATS(FATAL, "head_ptr__tail_ptr = %d",
2265 			dp_stats_buf->head_ptr__tail_ptr);
2266 	DP_TRACE_STATS(FATAL, "consumer_empty__producer_full = %d",
2267 			dp_stats_buf->consumer_empty__producer_full);
2268 	DP_TRACE_STATS(FATAL, "prefetch_count__internal_tail_ptr = %d\n",
2269 			dp_stats_buf->prefetch_count__internal_tail_ptr);
2270 }
2271 
2272 /*
2273  * dp_print_sring_cmn_tlv: display htt_sring_cmn_tlv
2274  * @tag_buf: buffer containing the tlv htt_sring_cmn_tlv
2275  *
2276  * return:void
2277  */
2278 static inline void dp_print_sring_cmn_tlv(uint32_t *tag_buf)
2279 {
2280 	htt_sring_cmn_tlv *dp_stats_buf =
2281 		(htt_sring_cmn_tlv *)tag_buf;
2282 
2283 	DP_TRACE_STATS(FATAL, "HTT_SRING_CMN_TLV:");
2284 	DP_TRACE_STATS(FATAL, "num_records = %d\n",
2285 			dp_stats_buf->num_records);
2286 }
2287 
2288 /*
2289  * dp_print_tx_pdev_rate_stats_tlv: display htt_tx_pdev_rate_stats_tlv
2290  * @tag_buf: buffer containing the tlv htt_tx_pdev_rate_stats_tlv
2291  *
2292  * return:void
2293  */
2294 static inline void dp_print_tx_pdev_rate_stats_tlv(uint32_t *tag_buf)
2295 {
2296 	htt_tx_pdev_rate_stats_tlv *dp_stats_buf =
2297 		(htt_tx_pdev_rate_stats_tlv *)tag_buf;
2298 	uint8_t i, j;
2299 	uint16_t index = 0;
2300 	char *tx_gi[HTT_TX_PEER_STATS_NUM_GI_COUNTERS];
2301 	char *str_buf = qdf_mem_malloc(DP_MAX_STRING_LEN);
2302 
2303 	if (!str_buf) {
2304 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
2305 			  FL("Output buffer not allocated\n"));
2306 		return;
2307 	}
2308 
2309 	for (i = 0; i < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; i++) {
2310 		tx_gi[i] = (char *)qdf_mem_malloc(DP_MAX_STRING_LEN);
2311 	}
2312 
2313 	DP_TRACE_STATS(FATAL, "HTT_TX_PDEV_RATE_STATS_TLV:");
2314 	DP_TRACE_STATS(FATAL, "mac_id__word = %d",
2315 			dp_stats_buf->mac_id__word);
2316 	DP_TRACE_STATS(FATAL, "tx_ldpc = %d",
2317 			dp_stats_buf->tx_ldpc);
2318 	DP_TRACE_STATS(FATAL, "rts_cnt = %d",
2319 			dp_stats_buf->rts_cnt);
2320 	DP_TRACE_STATS(FATAL, "rts_success = %d",
2321 			dp_stats_buf->rts_success);
2322 
2323 	DP_TRACE_STATS(FATAL, "ack_rssi = %d",
2324 			dp_stats_buf->ack_rssi);
2325 
2326 	qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
2327 	for (i = 0; i <  DP_HTT_TX_MCS_LEN; i++) {
2328 		index += qdf_snprint(&str_buf[index],
2329 				DP_MAX_STRING_LEN - index,
2330 				" %d:%d,", i, dp_stats_buf->tx_mcs[i]);
2331 	}
2332 	DP_TRACE_STATS(FATAL, "tx_mcs = %s ", str_buf);
2333 
2334 	index = 0;
2335 	qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
2336 	for (i = 0; i <  DP_HTT_TX_SU_MCS_LEN; i++) {
2337 		index += qdf_snprint(&str_buf[index],
2338 				DP_MAX_STRING_LEN - index,
2339 				" %d:%d,", i, dp_stats_buf->tx_su_mcs[i]);
2340 	}
2341 	DP_TRACE_STATS(FATAL, "tx_su_mcs = %s ", str_buf);
2342 
2343 	index = 0;
2344 	qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
2345 	for (i = 0; i <  DP_HTT_TX_MU_MCS_LEN; i++) {
2346 		index += qdf_snprint(&str_buf[index],
2347 				DP_MAX_STRING_LEN - index,
2348 				" %d:%d,", i, dp_stats_buf->tx_mu_mcs[i]);
2349 	}
2350 	DP_TRACE_STATS(FATAL, "tx_mu_mcs = %s ", str_buf);
2351 
2352 	index = 0;
2353 	qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
2354 	for (i = 0; i <  DP_HTT_TX_NSS_LEN; i++) {
2355 		/* 0 stands for NSS 1, 1 stands for NSS 2, etc. */
2356 		index += qdf_snprint(&str_buf[index],
2357 				DP_MAX_STRING_LEN - index,
2358 				" %d:%d,", (i + 1),
2359 				dp_stats_buf->tx_nss[i]);
2360 	}
2361 	DP_TRACE_STATS(FATAL, "tx_nss = %s ", str_buf);
2362 
2363 	index = 0;
2364 	qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
2365 	for (i = 0; i <  DP_HTT_TX_BW_LEN; i++) {
2366 		index += qdf_snprint(&str_buf[index],
2367 				DP_MAX_STRING_LEN - index,
2368 				" %d:%d,", i, dp_stats_buf->tx_bw[i]);
2369 	}
2370 	DP_TRACE_STATS(FATAL, "tx_bw = %s ", str_buf);
2371 
2372 	index = 0;
2373 	qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
2374 	for (i = 0; i <  HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS; i++) {
2375 		index += qdf_snprint(&str_buf[index],
2376 				DP_MAX_STRING_LEN - index,
2377 				" %d:%d,", i, dp_stats_buf->tx_stbc[i]);
2378 	}
2379 	DP_TRACE_STATS(FATAL, "tx_stbc = %s ", str_buf);
2380 
2381 	index = 0;
2382 	qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
2383 	for (i = 0; i <  DP_HTT_TX_PREAM_LEN; i++) {
2384 		index += qdf_snprint(&str_buf[index],
2385 				DP_MAX_STRING_LEN - index,
2386 				" %d:%d,", i, dp_stats_buf->tx_pream[i]);
2387 	}
2388 	DP_TRACE_STATS(FATAL, "tx_pream = %s ", str_buf);
2389 
2390 	for (j = 0; j < DP_HTT_PDEV_TX_GI_LEN; j++) {
2391 		index = 0;
2392 		for (i = 0; i <  HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS; i++) {
2393 			index += qdf_snprint(&tx_gi[j][index],
2394 					DP_MAX_STRING_LEN - index,
2395 					" %d:%d,", i,
2396 					dp_stats_buf->tx_gi[j][i]);
2397 		}
2398 		DP_TRACE_STATS(FATAL, "tx_gi[%d] = %s ", j, tx_gi[j]);
2399 	}
2400 
2401 	index = 0;
2402 	qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
2403 	for (i = 0; i <  DP_HTT_TX_DCM_LEN; i++) {
2404 		index += qdf_snprint(&str_buf[index],
2405 				DP_MAX_STRING_LEN - index,
2406 				" %d:%d,", i, dp_stats_buf->tx_dcm[i]);
2407 	}
2408 	DP_TRACE_STATS(FATAL, "tx_dcm = %s\n", str_buf);
2409 
2410 	for (i = 0; i < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; i++)
2411 		qdf_mem_free(tx_gi[i]);
2412 
2413 	qdf_mem_free(str_buf);
2414 }
2415 
2416 /*
2417  * dp_print_rx_pdev_rate_stats_tlv: display htt_rx_pdev_rate_stats_tlv
2418  * @tag_buf: buffer containing the tlv htt_rx_pdev_rate_stats_tlv
2419  *
2420  * return:void
2421  */
2422 static inline void dp_print_rx_pdev_rate_stats_tlv(uint32_t *tag_buf)
2423 {
2424 	htt_rx_pdev_rate_stats_tlv *dp_stats_buf =
2425 		(htt_rx_pdev_rate_stats_tlv *)tag_buf;
2426 	uint8_t i, j;
2427 	uint16_t index = 0;
2428 	char *rssi_chain[DP_HTT_RSSI_CHAIN_LEN];
2429 	char *rx_gi[HTT_RX_PDEV_STATS_NUM_GI_COUNTERS];
2430 	char *str_buf = qdf_mem_malloc(DP_MAX_STRING_LEN);
2431 
2432 	if (!str_buf) {
2433 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
2434 			  FL("Output buffer not allocated\n"));
2435 		return;
2436 	}
2437 
2438 	for (i = 0; i < DP_HTT_RSSI_CHAIN_LEN; i++)
2439 		rssi_chain[i] = qdf_mem_malloc(DP_MAX_STRING_LEN);
2440 	for (i = 0; i < HTT_RX_PDEV_STATS_NUM_GI_COUNTERS; i++)
2441 		rx_gi[i] = qdf_mem_malloc(DP_MAX_STRING_LEN);
2442 
2443 	DP_TRACE_STATS(FATAL, "HTT_RX_PDEV_RATE_STATS_TLV:");
2444 	DP_TRACE_STATS(FATAL, "mac_id__word = %d",
2445 			dp_stats_buf->mac_id__word);
2446 	DP_TRACE_STATS(FATAL, "nsts = %d",
2447 			dp_stats_buf->nsts);
2448 	DP_TRACE_STATS(FATAL, "rx_ldpc = %d",
2449 			dp_stats_buf->rx_ldpc);
2450 	DP_TRACE_STATS(FATAL, "rts_cnt = %d",
2451 			dp_stats_buf->rts_cnt);
2452 	DP_TRACE_STATS(FATAL, "rssi_mgmt = %d",
2453 			dp_stats_buf->rssi_mgmt);
2454 	DP_TRACE_STATS(FATAL, "rssi_data = %d",
2455 			dp_stats_buf->rssi_data);
2456 	DP_TRACE_STATS(FATAL, "rssi_comb = %d",
2457 			dp_stats_buf->rssi_comb);
2458 
2459 	qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
2460 	for (i = 0; i <  DP_HTT_RX_MCS_LEN; i++) {
2461 		index += qdf_snprint(&str_buf[index],
2462 				DP_MAX_STRING_LEN - index,
2463 				" %d:%d,", i, dp_stats_buf->rx_mcs[i]);
2464 	}
2465 	DP_TRACE_STATS(FATAL, "rx_mcs = %s ", str_buf);
2466 
2467 	index = 0;
2468 	qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
2469 	for (i = 0; i <  DP_HTT_RX_NSS_LEN; i++) {
2470 		/* 0 stands for NSS 1, 1 stands for NSS 2, etc. */
2471 		index += qdf_snprint(&str_buf[index],
2472 				DP_MAX_STRING_LEN - index,
2473 				" %d:%d,", (i + 1),
2474 				dp_stats_buf->rx_nss[i]);
2475 	}
2476 	DP_TRACE_STATS(FATAL, "rx_nss = %s ", str_buf);
2477 
2478 	index = 0;
2479 	qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
2480 	for (i = 0; i <  DP_HTT_RX_DCM_LEN; i++) {
2481 		index += qdf_snprint(&str_buf[index],
2482 				DP_MAX_STRING_LEN - index,
2483 				" %d:%d,", i, dp_stats_buf->rx_dcm[i]);
2484 	}
2485 	DP_TRACE_STATS(FATAL, "rx_dcm = %s ", str_buf);
2486 
2487 	index = 0;
2488 	qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
2489 	for (i = 0; i <  HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS; i++) {
2490 		index += qdf_snprint(&str_buf[index],
2491 				DP_MAX_STRING_LEN - index,
2492 				" %d:%d,", i, dp_stats_buf->rx_stbc[i]);
2493 	}
2494 	DP_TRACE_STATS(FATAL, "rx_stbc = %s ", str_buf);
2495 
2496 	index = 0;
2497 	qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
2498 	for (i = 0; i <  DP_HTT_RX_BW_LEN; i++) {
2499 		index += qdf_snprint(&str_buf[index],
2500 				DP_MAX_STRING_LEN - index,
2501 				" %d:%d,", i, dp_stats_buf->rx_bw[i]);
2502 	}
2503 	DP_TRACE_STATS(FATAL, "rx_bw = %s ", str_buf);
2504 
2505 	for (j = 0; j < DP_HTT_RSSI_CHAIN_LEN; j++) {
2506 		index = 0;
2507 		for (i = 0; i <  HTT_RX_PDEV_STATS_NUM_BW_COUNTERS; i++) {
2508 			index += qdf_snprint(&rssi_chain[j][index],
2509 					DP_MAX_STRING_LEN - index,
2510 					" %d:%d,", i,
2511 					dp_stats_buf->rssi_chain[j][i]);
2512 		}
2513 		DP_TRACE_STATS(FATAL, "rssi_chain[%d] = %s ", j, rssi_chain[j]);
2514 	}
2515 
2516 	for (j = 0; j < DP_HTT_RX_GI_LEN; j++) {
2517 		index = 0;
2518 		for (i = 0; i <  HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS; i++) {
2519 			index += qdf_snprint(&rx_gi[j][index],
2520 					DP_MAX_STRING_LEN - index,
2521 					" %d:%d,", i,
2522 					dp_stats_buf->rx_gi[j][i]);
2523 		}
2524 		DP_TRACE_STATS(FATAL, "rx_gi[%d] = %s ", j, rx_gi[j]);
2525 	}
2526 
2527 	index = 0;
2528 	qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
2529 	for (i = 0; i <  DP_HTT_RX_PREAM_LEN; i++) {
2530 		index += qdf_snprint(&str_buf[index],
2531 				DP_MAX_STRING_LEN - index,
2532 				" %d:%d,", i, dp_stats_buf->rx_pream[i]);
2533 	}
2534 	DP_TRACE_STATS(FATAL, "rx_pream = %s\n", str_buf);
2535 	for (i = 0; i < DP_HTT_RSSI_CHAIN_LEN; i++)
2536 		qdf_mem_free(rssi_chain[i]);
2537 	for (i = 0; i < HTT_RX_PDEV_STATS_NUM_GI_COUNTERS; i++)
2538 		qdf_mem_free(rx_gi[i]);
2539 
2540 	qdf_mem_free(str_buf);
2541 }
2542 
2543 /*
2544  * dp_print_rx_soc_fw_stats_tlv: display htt_rx_soc_fw_stats_tlv
2545  * @tag_buf: buffer containing the tlv htt_rx_soc_fw_stats_tlv
2546  *
2547  * return:void
2548  */
2549 static inline void dp_print_rx_soc_fw_stats_tlv(uint32_t *tag_buf)
2550 {
2551 	htt_rx_soc_fw_stats_tlv *dp_stats_buf =
2552 		(htt_rx_soc_fw_stats_tlv *)tag_buf;
2553 
2554 	DP_TRACE_STATS(FATAL, "HTT_RX_SOC_FW_STATS_TLV:");
2555 	DP_TRACE_STATS(FATAL, "fw_reo_ring_data_msdu = %d",
2556 		      dp_stats_buf->fw_reo_ring_data_msdu);
2557 	DP_TRACE_STATS(FATAL, "fw_to_host_data_msdu_bcmc = %d",
2558 		      dp_stats_buf->fw_to_host_data_msdu_bcmc);
2559 	DP_TRACE_STATS(FATAL, "fw_to_host_data_msdu_uc = %d",
2560 		      dp_stats_buf->fw_to_host_data_msdu_uc);
2561 	DP_TRACE_STATS(FATAL, "ofld_remote_data_buf_recycle_cnt = %d",
2562 		      dp_stats_buf->ofld_remote_data_buf_recycle_cnt);
2563 	DP_TRACE_STATS(FATAL, "ofld_remote_free_buf_indication_cnt = %d",
2564 		      dp_stats_buf->ofld_remote_free_buf_indication_cnt);
2565 	DP_TRACE_STATS(FATAL, "ofld_buf_to_host_data_msdu_uc = %d ",
2566 		      dp_stats_buf->ofld_buf_to_host_data_msdu_uc);
2567 	DP_TRACE_STATS(FATAL, "reo_fw_ring_to_host_data_msdu_uc = %d ",
2568 		      dp_stats_buf->reo_fw_ring_to_host_data_msdu_uc);
2569 	DP_TRACE_STATS(FATAL, "wbm_sw_ring_reap = %d ",
2570 		      dp_stats_buf->wbm_sw_ring_reap);
2571 	DP_TRACE_STATS(FATAL, "wbm_forward_to_host_cnt = %d ",
2572 		      dp_stats_buf->wbm_forward_to_host_cnt);
2573 	DP_TRACE_STATS(FATAL, "wbm_target_recycle_cnt = %d ",
2574 		      dp_stats_buf->wbm_target_recycle_cnt);
2575 	DP_TRACE_STATS(FATAL, "target_refill_ring_recycle_cnt = %d",
2576 		      dp_stats_buf->target_refill_ring_recycle_cnt);
2577 
2578 }
2579 
2580 /*
2581  * dp_print_rx_soc_fw_refill_ring_empty_tlv_v: display
2582  *					htt_rx_soc_fw_refill_ring_empty_tlv_v
2583  * @tag_buf: buffer containing the tlv htt_rx_soc_fw_refill_ring_empty_tlv_v
2584  *
2585  * return:void
2586  */
2587 static inline void dp_print_rx_soc_fw_refill_ring_empty_tlv_v(uint32_t *tag_buf)
2588 {
2589 	htt_rx_soc_fw_refill_ring_empty_tlv_v *dp_stats_buf =
2590 		(htt_rx_soc_fw_refill_ring_empty_tlv_v *)tag_buf;
2591 	uint8_t i;
2592 	uint16_t index = 0;
2593 	uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
2594 	char *refill_ring_empty_cnt = qdf_mem_malloc(DP_MAX_STRING_LEN);
2595 
2596 	if (!refill_ring_empty_cnt) {
2597 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
2598 			  FL("Output buffer not allocated\n"));
2599 		return;
2600 	}
2601 
2602 	tag_len = qdf_min(tag_len, (uint32_t)HTT_RX_STATS_REFILL_MAX_RING);
2603 
2604 	DP_TRACE_STATS(FATAL, "HTT_RX_SOC_FW_REFILL_RING_EMPTY_TLV_V:");
2605 	for (i = 0; i <  tag_len; i++) {
2606 		index += qdf_snprint(&refill_ring_empty_cnt[index],
2607 				DP_MAX_STRING_LEN - index,
2608 				" %d:%d,", i,
2609 				dp_stats_buf->refill_ring_empty_cnt[i]);
2610 	}
2611 	DP_TRACE_STATS(FATAL, "refill_ring_empty_cnt = %s\n",
2612 			refill_ring_empty_cnt);
2613 	qdf_mem_free(refill_ring_empty_cnt);
2614 }
2615 
2616 /*
2617  * dp_print_rx_soc_fw_refill_ring_num_refill_tlv_v: display
2618  *				htt_rx_soc_fw_refill_ring_num_refill_tlv_v
2619  * @tag_buf: buffer containing the tlv htt_rx_soc_fw_refill_ring_num_refill_tlv
2620  *
2621  * return:void
2622  */
2623 static inline void dp_print_rx_soc_fw_refill_ring_num_refill_tlv_v(
2624 		uint32_t *tag_buf)
2625 {
2626 	htt_rx_soc_fw_refill_ring_num_refill_tlv_v *dp_stats_buf =
2627 		(htt_rx_soc_fw_refill_ring_num_refill_tlv_v *)tag_buf;
2628 	uint8_t i;
2629 	uint16_t index = 0;
2630 	uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
2631 	char *refill_ring_num_refill = qdf_mem_malloc(DP_MAX_STRING_LEN);
2632 
2633 	if (!refill_ring_num_refill) {
2634 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
2635 			  FL("Output buffer not allocated\n"));
2636 		return;
2637 	}
2638 
2639 	tag_len = qdf_min(tag_len, (uint32_t)HTT_TX_PDEV_MAX_URRN_STATS);
2640 
2641 	DP_TRACE_STATS(FATAL, "HTT_RX_SOC_FW_REFILL_RING_NUM_REFILL_TLV_V:");
2642 	for (i = 0; i <  tag_len; i++) {
2643 		index += qdf_snprint(&refill_ring_num_refill[index],
2644 				DP_MAX_STRING_LEN - index,
2645 				" %d:%d,", i,
2646 				dp_stats_buf->refill_ring_num_refill[i]);
2647 	}
2648 	DP_TRACE_STATS(FATAL, "refill_ring_num_refill = %s\n",
2649 			refill_ring_num_refill);
2650 	qdf_mem_free(refill_ring_num_refill);
2651 }
2652 
2653 /*
2654  * dp_print_rx_pdev_fw_stats_tlv: display htt_rx_pdev_fw_stats_tlv
2655  * @tag_buf: buffer containing the tlv htt_rx_pdev_fw_stats_tlv
2656  *
2657  * return:void
2658  */
2659 static inline void dp_print_rx_pdev_fw_stats_tlv(uint32_t *tag_buf)
2660 {
2661 	htt_rx_pdev_fw_stats_tlv *dp_stats_buf =
2662 		(htt_rx_pdev_fw_stats_tlv *)tag_buf;
2663 	uint8_t i;
2664 	uint16_t index = 0;
2665 	char fw_ring_mgmt_subtype[DP_MAX_STRING_LEN];
2666 	char fw_ring_ctrl_subtype[DP_MAX_STRING_LEN];
2667 
2668 	DP_TRACE_STATS(FATAL, "HTT_RX_PDEV_FW_STATS_TLV:");
2669 	DP_TRACE_STATS(FATAL, "mac_id__word = %d",
2670 			dp_stats_buf->mac_id__word);
2671 	DP_TRACE_STATS(FATAL, "ppdu_recvd = %d",
2672 			dp_stats_buf->ppdu_recvd);
2673 	DP_TRACE_STATS(FATAL, "mpdu_cnt_fcs_ok = %d",
2674 			dp_stats_buf->mpdu_cnt_fcs_ok);
2675 	DP_TRACE_STATS(FATAL, "mpdu_cnt_fcs_err = %d",
2676 			dp_stats_buf->mpdu_cnt_fcs_err);
2677 	DP_TRACE_STATS(FATAL, "tcp_msdu_cnt = %d",
2678 			dp_stats_buf->tcp_msdu_cnt);
2679 	DP_TRACE_STATS(FATAL, "tcp_ack_msdu_cnt = %d",
2680 			dp_stats_buf->tcp_ack_msdu_cnt);
2681 	DP_TRACE_STATS(FATAL, "udp_msdu_cnt = %d",
2682 			dp_stats_buf->udp_msdu_cnt);
2683 	DP_TRACE_STATS(FATAL, "other_msdu_cnt = %d",
2684 			dp_stats_buf->other_msdu_cnt);
2685 	DP_TRACE_STATS(FATAL, "fw_ring_mpdu_ind = %d",
2686 			dp_stats_buf->fw_ring_mpdu_ind);
2687 
2688 	for (i = 0; i <  DP_HTT_FW_RING_MGMT_SUBTYPE_LEN; i++) {
2689 		index += qdf_snprint(&fw_ring_mgmt_subtype[index],
2690 				DP_MAX_STRING_LEN - index,
2691 				" %d:%d,", i,
2692 				dp_stats_buf->fw_ring_mgmt_subtype[i]);
2693 	}
2694 	DP_TRACE_STATS(FATAL, "fw_ring_mgmt_subtype = %s ", fw_ring_mgmt_subtype);
2695 
2696 	index = 0;
2697 	for (i = 0; i <  DP_HTT_FW_RING_CTRL_SUBTYPE_LEN; i++) {
2698 		index += qdf_snprint(&fw_ring_ctrl_subtype[index],
2699 				DP_MAX_STRING_LEN - index,
2700 				" %d:%d,", i,
2701 				dp_stats_buf->fw_ring_ctrl_subtype[i]);
2702 	}
2703 	DP_TRACE_STATS(FATAL, "fw_ring_ctrl_subtype = %s ", fw_ring_ctrl_subtype);
2704 	DP_TRACE_STATS(FATAL, "fw_ring_mcast_data_msdu = %d",
2705 			dp_stats_buf->fw_ring_mcast_data_msdu);
2706 	DP_TRACE_STATS(FATAL, "fw_ring_bcast_data_msdu = %d",
2707 			dp_stats_buf->fw_ring_bcast_data_msdu);
2708 	DP_TRACE_STATS(FATAL, "fw_ring_ucast_data_msdu = %d",
2709 			dp_stats_buf->fw_ring_ucast_data_msdu);
2710 	DP_TRACE_STATS(FATAL, "fw_ring_null_data_msdu = %d",
2711 			dp_stats_buf->fw_ring_null_data_msdu);
2712 	DP_TRACE_STATS(FATAL, "fw_ring_mpdu_drop = %d",
2713 			dp_stats_buf->fw_ring_mpdu_drop);
2714 	DP_TRACE_STATS(FATAL, "ofld_local_data_ind_cnt = %d",
2715 			dp_stats_buf->ofld_local_data_ind_cnt);
2716 	DP_TRACE_STATS(FATAL, "ofld_local_data_buf_recycle_cnt = %d",
2717 			dp_stats_buf->ofld_local_data_buf_recycle_cnt);
2718 	DP_TRACE_STATS(FATAL, "drx_local_data_ind_cnt = %d",
2719 			dp_stats_buf->drx_local_data_ind_cnt);
2720 	DP_TRACE_STATS(FATAL, "drx_local_data_buf_recycle_cnt = %d",
2721 			dp_stats_buf->drx_local_data_buf_recycle_cnt);
2722 	DP_TRACE_STATS(FATAL, "local_nondata_ind_cnt = %d",
2723 			dp_stats_buf->local_nondata_ind_cnt);
2724 	DP_TRACE_STATS(FATAL, "local_nondata_buf_recycle_cnt = %d",
2725 			dp_stats_buf->local_nondata_buf_recycle_cnt);
2726 	DP_TRACE_STATS(FATAL, "fw_status_buf_ring_refill_cnt = %d",
2727 			dp_stats_buf->fw_status_buf_ring_refill_cnt);
2728 	DP_TRACE_STATS(FATAL, "fw_status_buf_ring_empty_cnt = %d",
2729 			dp_stats_buf->fw_status_buf_ring_empty_cnt);
2730 	DP_TRACE_STATS(FATAL, "fw_pkt_buf_ring_refill_cnt = %d",
2731 			dp_stats_buf->fw_pkt_buf_ring_refill_cnt);
2732 	DP_TRACE_STATS(FATAL, "fw_pkt_buf_ring_empty_cnt = %d",
2733 			dp_stats_buf->fw_pkt_buf_ring_empty_cnt);
2734 	DP_TRACE_STATS(FATAL, "fw_link_buf_ring_refill_cnt = %d",
2735 			dp_stats_buf->fw_link_buf_ring_refill_cnt);
2736 	DP_TRACE_STATS(FATAL, "fw_link_buf_ring_empty_cnt = %d",
2737 			dp_stats_buf->fw_link_buf_ring_empty_cnt);
2738 	DP_TRACE_STATS(FATAL, "host_pkt_buf_ring_refill_cnt = %d",
2739 			dp_stats_buf->host_pkt_buf_ring_refill_cnt);
2740 	DP_TRACE_STATS(FATAL, "host_pkt_buf_ring_empty_cnt = %d",
2741 			dp_stats_buf->host_pkt_buf_ring_empty_cnt);
2742 	DP_TRACE_STATS(FATAL, "mon_pkt_buf_ring_refill_cnt = %d",
2743 			dp_stats_buf->mon_pkt_buf_ring_refill_cnt);
2744 	DP_TRACE_STATS(FATAL, "mon_pkt_buf_ring_empty_cnt = %d",
2745 			dp_stats_buf->mon_pkt_buf_ring_empty_cnt);
2746 	DP_TRACE_STATS(FATAL, "mon_status_buf_ring_refill_cnt = %d",
2747 			dp_stats_buf->mon_status_buf_ring_refill_cnt);
2748 	DP_TRACE_STATS(FATAL, "mon_status_buf_ring_empty_cnt = %d",
2749 			dp_stats_buf->mon_status_buf_ring_empty_cnt);
2750 	DP_TRACE_STATS(FATAL, "mon_desc_buf_ring_refill_cnt = %d",
2751 			dp_stats_buf->mon_desc_buf_ring_refill_cnt);
2752 	DP_TRACE_STATS(FATAL, "mon_desc_buf_ring_empty_cnt = %d",
2753 			dp_stats_buf->mon_desc_buf_ring_empty_cnt);
2754 	DP_TRACE_STATS(FATAL, "mon_dest_ring_update_cnt = %d",
2755 			dp_stats_buf->mon_dest_ring_update_cnt);
2756 	DP_TRACE_STATS(FATAL, "mon_dest_ring_full_cnt = %d",
2757 			dp_stats_buf->mon_dest_ring_full_cnt);
2758 	DP_TRACE_STATS(FATAL, "rx_suspend_cnt = %d",
2759 			dp_stats_buf->rx_suspend_cnt);
2760 	DP_TRACE_STATS(FATAL, "rx_suspend_fail_cnt = %d",
2761 			dp_stats_buf->rx_suspend_fail_cnt);
2762 	DP_TRACE_STATS(FATAL, "rx_resume_cnt = %d",
2763 			dp_stats_buf->rx_resume_cnt);
2764 	DP_TRACE_STATS(FATAL, "rx_resume_fail_cnt = %d",
2765 			dp_stats_buf->rx_resume_fail_cnt);
2766 	DP_TRACE_STATS(FATAL, "rx_ring_switch_cnt = %d",
2767 			dp_stats_buf->rx_ring_switch_cnt);
2768 	DP_TRACE_STATS(FATAL, "rx_ring_restore_cnt = %d",
2769 			dp_stats_buf->rx_ring_restore_cnt);
2770 	DP_TRACE_STATS(FATAL, "rx_flush_cnt = %d\n",
2771 			dp_stats_buf->rx_flush_cnt);
2772 }
2773 
2774 /*
2775  * dp_print_rx_pdev_fw_ring_mpdu_err_tlv_v: display
2776  *				htt_rx_pdev_fw_ring_mpdu_err_tlv_v
2777  * @tag_buf: buffer containing the tlv htt_rx_pdev_fw_ring_mpdu_err_tlv_v
2778  *
2779  * return:void
2780  */
2781 static inline void dp_print_rx_pdev_fw_ring_mpdu_err_tlv_v(uint32_t *tag_buf)
2782 {
2783 	htt_rx_pdev_fw_ring_mpdu_err_tlv_v *dp_stats_buf =
2784 		(htt_rx_pdev_fw_ring_mpdu_err_tlv_v *)tag_buf;
2785 	uint8_t i;
2786 	uint16_t index = 0;
2787 	char *fw_ring_mpdu_err = qdf_mem_malloc(DP_MAX_STRING_LEN);
2788 
2789 	if (!fw_ring_mpdu_err) {
2790 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
2791 			  FL("Output buffer not allocated\n"));
2792 		return;
2793 	}
2794 
2795 	DP_TRACE_STATS(FATAL, "HTT_RX_PDEV_FW_RING_MPDU_ERR_TLV_V:");
2796 	for (i = 0; i <  DP_HTT_FW_RING_MPDU_ERR_LEN; i++) {
2797 		index += qdf_snprint(&fw_ring_mpdu_err[index],
2798 				DP_MAX_STRING_LEN - index,
2799 				" %d:%d,", i,
2800 				dp_stats_buf->fw_ring_mpdu_err[i]);
2801 	}
2802 	DP_TRACE_STATS(FATAL, "fw_ring_mpdu_err = %s\n", fw_ring_mpdu_err);
2803 	qdf_mem_free(fw_ring_mpdu_err);
2804 }
2805 
2806 /*
2807  * dp_print_rx_pdev_fw_mpdu_drop_tlv_v: display htt_rx_pdev_fw_mpdu_drop_tlv_v
2808  * @tag_buf: buffer containing the tlv htt_rx_pdev_fw_mpdu_drop_tlv_v
2809  *
2810  * return:void
2811  */
2812 static inline void dp_print_rx_pdev_fw_mpdu_drop_tlv_v(uint32_t *tag_buf)
2813 {
2814 	htt_rx_pdev_fw_mpdu_drop_tlv_v *dp_stats_buf =
2815 		(htt_rx_pdev_fw_mpdu_drop_tlv_v *)tag_buf;
2816 	uint8_t i;
2817 	uint16_t index = 0;
2818 	uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
2819 	char *fw_mpdu_drop = qdf_mem_malloc(DP_MAX_STRING_LEN);
2820 
2821 	if (!fw_mpdu_drop) {
2822 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
2823 			  FL("Output buffer not allocated\n"));
2824 		return;
2825 	}
2826 
2827 	tag_len = qdf_min(tag_len, (uint32_t)HTT_RX_STATS_FW_DROP_REASON_MAX);
2828 
2829 	DP_TRACE_STATS(FATAL, "HTT_RX_PDEV_FW_MPDU_DROP_TLV_V:");
2830 	for (i = 0; i <  tag_len; i++) {
2831 		index += qdf_snprint(&fw_mpdu_drop[index],
2832 				DP_MAX_STRING_LEN - index,
2833 				" %d:%d,", i, dp_stats_buf->fw_mpdu_drop[i]);
2834 	}
2835 	DP_TRACE_STATS(FATAL, "fw_mpdu_drop = %s\n", fw_mpdu_drop);
2836 	qdf_mem_free(fw_mpdu_drop);
2837 }
2838 
2839 /*
2840  * dp_print_rx_soc_fw_refill_ring_num_rxdma_err_tlv() - Accounts for rxdma error
2841  * packets
2842  *
2843  * tag_buf - Buffer
2844  * Return - NULL
2845  */
2846 static inline void dp_print_rx_soc_fw_refill_ring_num_rxdma_err_tlv(uint32_t *tag_buf)
2847 {
2848 	htt_rx_soc_fw_refill_ring_num_rxdma_err_tlv_v *dp_stats_buf =
2849 		(htt_rx_soc_fw_refill_ring_num_rxdma_err_tlv_v *)tag_buf;
2850 
2851 	uint8_t i;
2852 	uint16_t index = 0;
2853 	char rxdma_err_cnt[DP_MAX_STRING_LEN];
2854 	uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
2855 
2856 	tag_len = qdf_min(tag_len, (uint32_t)HTT_RX_RXDMA_MAX_ERR_CODE);
2857 
2858 	DP_TRACE_STATS(FATAL, "HTT_RX_SOC_FW_REFILL_RING_NUM_RXDMA_ERR_TLV_V");
2859 
2860 	for (i = 0; i <  tag_len; i++) {
2861 		index += snprintf(&rxdma_err_cnt[index],
2862 				DP_MAX_STRING_LEN - index,
2863 				" %d:%d,", i,
2864 				dp_stats_buf->rxdma_err[i]);
2865 	}
2866 
2867 	DP_TRACE_STATS(FATAL, "rxdma_err = %s\n", rxdma_err_cnt);
2868 }
2869 
2870 /*
2871  * dp_print_rx_soc_fw_refill_ring_num_reo_err_tlv() - Accounts for reo error
2872  * packets
2873  *
2874  * tag_buf - Buffer
2875  * Return - NULL
2876  */
2877 static inline void dp_print_rx_soc_fw_refill_ring_num_reo_err_tlv(uint32_t *tag_buf)
2878 {
2879 	htt_rx_soc_fw_refill_ring_num_reo_err_tlv_v *dp_stats_buf =
2880 		(htt_rx_soc_fw_refill_ring_num_reo_err_tlv_v *)tag_buf;
2881 
2882 	uint8_t i;
2883 	uint16_t index = 0;
2884 	char reo_err_cnt[DP_MAX_STRING_LEN];
2885 	uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
2886 
2887 	tag_len = qdf_min(tag_len, (uint32_t)HTT_RX_REO_MAX_ERR_CODE);
2888 
2889 	DP_TRACE_STATS(FATAL, "HTT_RX_SOC_FW_REFILL_RING_NUM_REO_ERR_TLV_V");
2890 
2891 	for (i = 0; i <  tag_len; i++) {
2892 		index += snprintf(&reo_err_cnt[index],
2893 				DP_MAX_STRING_LEN - index,
2894 				" %d:%d,", i,
2895 				dp_stats_buf->reo_err[i]);
2896 	}
2897 
2898 	DP_TRACE_STATS(FATAL, "reo_err = %s\n", reo_err_cnt);
2899 }
2900 
2901 /*
2902  * dp_print_rx_reo_debug_stats_tlv() - REO Statistics
2903  *
2904  * tag_buf - Buffer
2905  * Return - NULL
2906  */
2907 static inline void dp_print_rx_reo_debug_stats_tlv(uint32_t *tag_buf)
2908 {
2909 	htt_rx_reo_resource_stats_tlv_v *dp_stats_buf =
2910 			(htt_rx_reo_resource_stats_tlv_v *)tag_buf;
2911 
2912 	DP_TRACE_STATS(FATAL, "HTT_RX_REO_RESOURCE_STATS_TLV");
2913 
2914 	DP_TRACE_STATS(FATAL, "sample_id: %d ",
2915 		      dp_stats_buf->sample_id);
2916 	DP_TRACE_STATS(FATAL, "total_max: %d ",
2917 		      dp_stats_buf->total_max);
2918 	DP_TRACE_STATS(FATAL, "total_avg: %d ",
2919 		      dp_stats_buf->total_avg);
2920 	DP_TRACE_STATS(FATAL, "total_sample: %d ",
2921 		      dp_stats_buf->total_sample);
2922 	DP_TRACE_STATS(FATAL, "non_zeros_avg: %d ",
2923 		      dp_stats_buf->non_zeros_avg);
2924 	DP_TRACE_STATS(FATAL, "non_zeros_sample: %d ",
2925 		      dp_stats_buf->non_zeros_sample);
2926 	DP_TRACE_STATS(FATAL, "last_non_zeros_max: %d ",
2927 		      dp_stats_buf->last_non_zeros_max);
2928 	DP_TRACE_STATS(FATAL, "last_non_zeros_min: %d ",
2929 		      dp_stats_buf->last_non_zeros_min);
2930 	DP_TRACE_STATS(FATAL, "last_non_zeros_avg: %d ",
2931 		      dp_stats_buf->last_non_zeros_avg);
2932 	DP_TRACE_STATS(FATAL, "last_non_zeros_sample: %d\n ",
2933 		      dp_stats_buf->last_non_zeros_sample);
2934 }
2935 
2936 /*
2937  * dp_print_rx_pdev_fw_stats_phy_err_tlv() - Accounts for phy errors
2938  *
2939  * tag_buf - Buffer
2940  * Return - NULL
2941  */
2942 static inline void dp_print_rx_pdev_fw_stats_phy_err_tlv(uint32_t *tag_buf)
2943 {
2944 	htt_rx_pdev_fw_stats_phy_err_tlv *dp_stats_buf =
2945 		(htt_rx_pdev_fw_stats_phy_err_tlv *)tag_buf;
2946 
2947 	uint8_t i = 0;
2948 	uint16_t index = 0;
2949 	char phy_errs[DP_MAX_STRING_LEN];
2950 
2951 	DP_TRACE_STATS(FATAL, "HTT_RX_PDEV_FW_STATS_PHY_ERR_TLV");
2952 
2953 	DP_TRACE_STATS(FATAL, "mac_id_word: %d",
2954 		      dp_stats_buf->mac_id__word);
2955 	DP_TRACE_STATS(FATAL, "total_phy_err_cnt: %d",
2956 		      dp_stats_buf->total_phy_err_cnt);
2957 
2958 	for (i = 0; i < HTT_STATS_PHY_ERR_MAX; i++) {
2959 		index += snprintf(&phy_errs[index],
2960 				DP_MAX_STRING_LEN - index,
2961 				" %d:%d,", i, dp_stats_buf->phy_err[i]);
2962 	}
2963 
2964 	DP_TRACE_STATS(FATAL, "phy_errs: %s\n",  phy_errs);
2965 }
2966 
2967 /*
2968  * dp_htt_stats_print_tag: function to select the tag type and
2969  * print the corresponding tag structure
2970  * @tag_type: tag type that is to be printed
2971  * @tag_buf: pointer to the tag structure
2972  *
2973  * return: void
2974  */
2975 void dp_htt_stats_print_tag(uint8_t tag_type, uint32_t *tag_buf)
2976 {
2977 	switch (tag_type) {
2978 	case HTT_STATS_TX_PDEV_CMN_TAG:
2979 		dp_print_tx_pdev_stats_cmn_tlv(tag_buf);
2980 		break;
2981 	case HTT_STATS_TX_PDEV_UNDERRUN_TAG:
2982 		dp_print_tx_pdev_stats_urrn_tlv_v(tag_buf);
2983 		break;
2984 	case HTT_STATS_TX_PDEV_SIFS_TAG:
2985 		dp_print_tx_pdev_stats_sifs_tlv_v(tag_buf);
2986 		break;
2987 	case HTT_STATS_TX_PDEV_FLUSH_TAG:
2988 		dp_print_tx_pdev_stats_flush_tlv_v(tag_buf);
2989 		break;
2990 
2991 	case HTT_STATS_TX_PDEV_PHY_ERR_TAG:
2992 		dp_print_tx_pdev_stats_phy_err_tlv_v(tag_buf);
2993 		break;
2994 
2995 	case HTT_STATS_STRING_TAG:
2996 		dp_print_stats_string_tlv(tag_buf);
2997 		break;
2998 
2999 	case HTT_STATS_TX_HWQ_CMN_TAG:
3000 		dp_print_tx_hwq_stats_cmn_tlv(tag_buf);
3001 		break;
3002 
3003 	case HTT_STATS_TX_HWQ_DIFS_LATENCY_TAG:
3004 		dp_print_tx_hwq_difs_latency_stats_tlv_v(tag_buf);
3005 		break;
3006 
3007 	case HTT_STATS_TX_HWQ_CMD_RESULT_TAG:
3008 		dp_print_tx_hwq_cmd_result_stats_tlv_v(tag_buf);
3009 		break;
3010 
3011 	case HTT_STATS_TX_HWQ_CMD_STALL_TAG:
3012 		dp_print_tx_hwq_cmd_stall_stats_tlv_v(tag_buf);
3013 		break;
3014 
3015 	case HTT_STATS_TX_HWQ_FES_STATUS_TAG:
3016 		dp_print_tx_hwq_fes_result_stats_tlv_v(tag_buf);
3017 		break;
3018 
3019 	case HTT_STATS_TX_TQM_GEN_MPDU_TAG:
3020 		dp_print_tx_tqm_gen_mpdu_stats_tlv_v(tag_buf);
3021 		break;
3022 
3023 	case HTT_STATS_TX_TQM_LIST_MPDU_TAG:
3024 		dp_print_tx_tqm_list_mpdu_stats_tlv_v(tag_buf);
3025 		break;
3026 
3027 	case HTT_STATS_TX_TQM_LIST_MPDU_CNT_TAG:
3028 		dp_print_tx_tqm_list_mpdu_cnt_tlv_v(tag_buf);
3029 		break;
3030 
3031 	case HTT_STATS_TX_TQM_CMN_TAG:
3032 		dp_print_tx_tqm_cmn_stats_tlv(tag_buf);
3033 		break;
3034 
3035 	case HTT_STATS_TX_TQM_PDEV_TAG:
3036 		dp_print_tx_tqm_pdev_stats_tlv_v(tag_buf);
3037 		break;
3038 
3039 	case HTT_STATS_TX_TQM_CMDQ_STATUS_TAG:
3040 		dp_print_tx_tqm_cmdq_status_tlv(tag_buf);
3041 		break;
3042 
3043 	case HTT_STATS_TX_DE_EAPOL_PACKETS_TAG:
3044 		dp_print_tx_de_eapol_packets_stats_tlv(tag_buf);
3045 		break;
3046 
3047 	case HTT_STATS_TX_DE_CLASSIFY_FAILED_TAG:
3048 		dp_print_tx_de_classify_failed_stats_tlv(tag_buf);
3049 		break;
3050 
3051 	case HTT_STATS_TX_DE_CLASSIFY_STATS_TAG:
3052 		dp_print_tx_de_classify_stats_tlv(tag_buf);
3053 		break;
3054 
3055 	case HTT_STATS_TX_DE_CLASSIFY_STATUS_TAG:
3056 		dp_print_tx_de_classify_status_stats_tlv(tag_buf);
3057 		break;
3058 
3059 	case HTT_STATS_TX_DE_ENQUEUE_PACKETS_TAG:
3060 		dp_print_tx_de_enqueue_packets_stats_tlv(tag_buf);
3061 		break;
3062 
3063 	case HTT_STATS_TX_DE_ENQUEUE_DISCARD_TAG:
3064 		dp_print_tx_de_enqueue_discard_stats_tlv(tag_buf);
3065 		break;
3066 
3067 	case HTT_STATS_TX_DE_CMN_TAG:
3068 		dp_print_tx_de_cmn_stats_tlv(tag_buf);
3069 		break;
3070 
3071 	case HTT_STATS_RING_IF_TAG:
3072 		dp_print_ring_if_stats_tlv(tag_buf);
3073 		break;
3074 
3075 	case HTT_STATS_TX_PDEV_MU_MIMO_STATS_TAG:
3076 		dp_print_tx_pdev_mu_mimo_sch_stats_tlv(tag_buf);
3077 		break;
3078 
3079 	case HTT_STATS_SFM_CMN_TAG:
3080 		dp_print_sfm_cmn_tlv(tag_buf);
3081 		break;
3082 
3083 	case HTT_STATS_SRING_STATS_TAG:
3084 		dp_print_sring_stats_tlv(tag_buf);
3085 		break;
3086 
3087 	case HTT_STATS_RX_PDEV_FW_STATS_TAG:
3088 		dp_print_rx_pdev_fw_stats_tlv(tag_buf);
3089 		break;
3090 
3091 	case HTT_STATS_RX_PDEV_FW_RING_MPDU_ERR_TAG:
3092 		dp_print_rx_pdev_fw_ring_mpdu_err_tlv_v(tag_buf);
3093 		break;
3094 
3095 	case HTT_STATS_RX_PDEV_FW_MPDU_DROP_TAG:
3096 		dp_print_rx_pdev_fw_mpdu_drop_tlv_v(tag_buf);
3097 		break;
3098 
3099 	case HTT_STATS_RX_SOC_FW_STATS_TAG:
3100 		dp_print_rx_soc_fw_stats_tlv(tag_buf);
3101 		break;
3102 
3103 	case HTT_STATS_RX_SOC_FW_REFILL_RING_EMPTY_TAG:
3104 		dp_print_rx_soc_fw_refill_ring_empty_tlv_v(tag_buf);
3105 		break;
3106 
3107 	case HTT_STATS_RX_SOC_FW_REFILL_RING_NUM_REFILL_TAG:
3108 		dp_print_rx_soc_fw_refill_ring_num_refill_tlv_v(
3109 				tag_buf);
3110 		break;
3111 
3112 	case HTT_STATS_TX_PDEV_RATE_STATS_TAG:
3113 		dp_print_tx_pdev_rate_stats_tlv(tag_buf);
3114 		break;
3115 
3116 	case HTT_STATS_RX_PDEV_RATE_STATS_TAG:
3117 		dp_print_rx_pdev_rate_stats_tlv(tag_buf);
3118 		break;
3119 
3120 	case HTT_STATS_TX_PDEV_SCHEDULER_TXQ_STATS_TAG:
3121 		dp_print_tx_pdev_stats_sched_per_txq_tlv(tag_buf);
3122 		break;
3123 
3124 	case HTT_STATS_TX_SCHED_CMN_TAG:
3125 		dp_print_stats_tx_sched_cmn_tlv(tag_buf);
3126 		break;
3127 
3128 	case HTT_STATS_TX_PDEV_MUMIMO_MPDU_STATS_TAG:
3129 		dp_print_tx_pdev_mu_mimo_mpdu_stats_tlv(tag_buf);
3130 		break;
3131 
3132 	case HTT_STATS_SCHED_TXQ_CMD_POSTED_TAG:
3133 		dp_print_sched_txq_cmd_posted_tlv_v(tag_buf);
3134 		break;
3135 
3136 	case HTT_STATS_RING_IF_CMN_TAG:
3137 		dp_print_ring_if_cmn_tlv(tag_buf);
3138 		break;
3139 
3140 	case HTT_STATS_SFM_CLIENT_USER_TAG:
3141 		dp_print_sfm_client_user_tlv_v(tag_buf);
3142 		break;
3143 
3144 	case HTT_STATS_SFM_CLIENT_TAG:
3145 		dp_print_sfm_client_tlv(tag_buf);
3146 		break;
3147 
3148 	case HTT_STATS_TX_TQM_ERROR_STATS_TAG:
3149 		dp_print_tx_tqm_error_stats_tlv(tag_buf);
3150 		break;
3151 
3152 	case HTT_STATS_SCHED_TXQ_CMD_REAPED_TAG:
3153 		dp_print_sched_txq_cmd_reaped_tlv_v(tag_buf);
3154 		break;
3155 
3156 	case HTT_STATS_SRING_CMN_TAG:
3157 		dp_print_sring_cmn_tlv(tag_buf);
3158 		break;
3159 
3160 	case HTT_STATS_TX_SELFGEN_AC_ERR_STATS_TAG:
3161 		dp_print_tx_selfgen_ac_err_stats_tlv(tag_buf);
3162 		break;
3163 
3164 	case HTT_STATS_TX_SELFGEN_CMN_STATS_TAG:
3165 		dp_print_tx_selfgen_cmn_stats_tlv(tag_buf);
3166 		break;
3167 
3168 	case HTT_STATS_TX_SELFGEN_AC_STATS_TAG:
3169 		dp_print_tx_selfgen_ac_stats_tlv(tag_buf);
3170 		break;
3171 
3172 	case HTT_STATS_TX_SELFGEN_AX_STATS_TAG:
3173 		dp_print_tx_selfgen_ax_stats_tlv(tag_buf);
3174 		break;
3175 
3176 	case HTT_STATS_TX_SELFGEN_AX_ERR_STATS_TAG:
3177 		dp_print_tx_selfgen_ax_err_stats_tlv(tag_buf);
3178 		break;
3179 
3180 	case HTT_STATS_TX_HWQ_MUMIMO_SCH_STATS_TAG:
3181 		dp_print_tx_hwq_mu_mimo_sch_stats_tlv(tag_buf);
3182 		break;
3183 
3184 	case HTT_STATS_TX_HWQ_MUMIMO_MPDU_STATS_TAG:
3185 		dp_print_tx_hwq_mu_mimo_mpdu_stats_tlv(tag_buf);
3186 		break;
3187 
3188 	case HTT_STATS_TX_HWQ_MUMIMO_CMN_STATS_TAG:
3189 		dp_print_tx_hwq_mu_mimo_cmn_stats_tlv(tag_buf);
3190 		break;
3191 
3192 	case HTT_STATS_HW_INTR_MISC_TAG:
3193 		dp_print_hw_stats_intr_misc_tlv(tag_buf);
3194 		break;
3195 
3196 	case HTT_STATS_HW_WD_TIMEOUT_TAG:
3197 		dp_print_hw_stats_wd_timeout_tlv(tag_buf);
3198 		break;
3199 
3200 	case HTT_STATS_HW_PDEV_ERRS_TAG:
3201 		dp_print_hw_stats_pdev_errs_tlv(tag_buf);
3202 		break;
3203 
3204 	case HTT_STATS_COUNTER_NAME_TAG:
3205 		dp_print_counter_tlv(tag_buf);
3206 		break;
3207 
3208 	case HTT_STATS_TX_TID_DETAILS_TAG:
3209 		dp_print_tx_tid_stats_tlv(tag_buf);
3210 		break;
3211 
3212 #ifdef CONFIG_WIN
3213 	case HTT_STATS_TX_TID_DETAILS_V1_TAG:
3214 		dp_print_tx_tid_stats_v1_tlv(tag_buf);
3215 		break;
3216 #endif
3217 
3218 	case HTT_STATS_RX_TID_DETAILS_TAG:
3219 		dp_print_rx_tid_stats_tlv(tag_buf);
3220 		break;
3221 
3222 	case HTT_STATS_PEER_STATS_CMN_TAG:
3223 		dp_print_peer_stats_cmn_tlv(tag_buf);
3224 		break;
3225 
3226 	case HTT_STATS_PEER_DETAILS_TAG:
3227 		dp_print_peer_details_tlv(tag_buf);
3228 		break;
3229 
3230 	case HTT_STATS_PEER_MSDU_FLOWQ_TAG:
3231 		dp_print_msdu_flow_stats_tlv(tag_buf);
3232 		break;
3233 
3234 	case HTT_STATS_PEER_TX_RATE_STATS_TAG:
3235 		dp_print_tx_peer_rate_stats_tlv(tag_buf);
3236 		break;
3237 
3238 	case HTT_STATS_PEER_RX_RATE_STATS_TAG:
3239 		dp_print_rx_peer_rate_stats_tlv(tag_buf);
3240 		break;
3241 
3242 	case HTT_STATS_TX_DE_COMPL_STATS_TAG:
3243 		dp_print_tx_de_compl_stats_tlv(tag_buf);
3244 		break;
3245 
3246 	case HTT_STATS_RX_REFILL_RXDMA_ERR_TAG:
3247 		dp_print_rx_soc_fw_refill_ring_num_rxdma_err_tlv(tag_buf);
3248 		break;
3249 
3250 	case HTT_STATS_RX_REFILL_REO_ERR_TAG:
3251 		dp_print_rx_soc_fw_refill_ring_num_reo_err_tlv(tag_buf);
3252 		break;
3253 
3254 	case HTT_STATS_RX_REO_RESOURCE_STATS_TAG:
3255 		dp_print_rx_reo_debug_stats_tlv(tag_buf);
3256 		break;
3257 
3258 	case HTT_STATS_RX_PDEV_FW_STATS_PHY_ERR_TAG:
3259 		dp_print_rx_pdev_fw_stats_phy_err_tlv(tag_buf);
3260 		break;
3261 
3262 	default:
3263 		break;
3264 	}
3265 }
3266 
3267 /*
3268  * dp_htt_stats_copy_tag: function to select the tag type and
3269  * copy the corresponding tag structure
3270  * @pdev: DP_PDEV handle
3271  * @tag_type: tag type that is to be printed
3272  * @tag_buf: pointer to the tag structure
3273  *
3274  * return: void
3275  */
3276 void dp_htt_stats_copy_tag(struct dp_pdev *pdev, uint8_t tag_type, uint32_t *tag_buf)
3277 {
3278 	void *dest_ptr = NULL;
3279 	uint32_t size = 0;
3280 
3281 	switch (tag_type) {
3282 	case HTT_STATS_TX_PDEV_CMN_TAG:
3283 		dest_ptr = &pdev->stats.htt_tx_pdev_stats.cmn_tlv;
3284 		size = sizeof(htt_tx_pdev_stats_cmn_tlv);
3285 		break;
3286 	case HTT_STATS_TX_PDEV_UNDERRUN_TAG:
3287 		dest_ptr = &pdev->stats.htt_tx_pdev_stats.underrun_tlv;
3288 		size = sizeof(htt_tx_pdev_stats_urrn_tlv_v);
3289 		break;
3290 	case HTT_STATS_TX_PDEV_SIFS_TAG:
3291 		dest_ptr = &pdev->stats.htt_tx_pdev_stats.sifs_tlv;
3292 		size = sizeof(htt_tx_pdev_stats_sifs_tlv_v);
3293 		break;
3294 	case HTT_STATS_TX_PDEV_FLUSH_TAG:
3295 		dest_ptr = &pdev->stats.htt_tx_pdev_stats.flush_tlv;
3296 		size = sizeof(htt_tx_pdev_stats_flush_tlv_v);
3297 		break;
3298 	case HTT_STATS_TX_PDEV_PHY_ERR_TAG:
3299 		dest_ptr = &pdev->stats.htt_tx_pdev_stats.phy_err_tlv;
3300 		size = sizeof(htt_tx_pdev_stats_phy_err_tlv_v);
3301 		break;
3302 	case HTT_STATS_RX_PDEV_FW_STATS_TAG:
3303 		dest_ptr = &pdev->stats.htt_rx_pdev_stats.fw_stats_tlv;
3304 		size = sizeof(htt_rx_pdev_fw_stats_tlv);
3305 		break;
3306 	case HTT_STATS_RX_SOC_FW_STATS_TAG:
3307 		dest_ptr = &pdev->stats.htt_rx_pdev_stats.soc_stats.fw_tlv;
3308 		size = sizeof(htt_rx_soc_fw_stats_tlv);
3309 		break;
3310 	case HTT_STATS_RX_SOC_FW_REFILL_RING_EMPTY_TAG:
3311 		dest_ptr = &pdev->stats.htt_rx_pdev_stats.soc_stats.fw_refill_ring_empty_tlv;
3312 		size = sizeof(htt_rx_soc_fw_refill_ring_empty_tlv_v);
3313 		break;
3314 	case HTT_STATS_RX_SOC_FW_REFILL_RING_NUM_REFILL_TAG:
3315 		dest_ptr = &pdev->stats.htt_rx_pdev_stats.soc_stats.fw_refill_ring_num_refill_tlv;
3316 		size = sizeof(htt_rx_soc_fw_refill_ring_num_refill_tlv_v);
3317 		break;
3318 	case HTT_STATS_RX_PDEV_FW_RING_MPDU_ERR_TAG:
3319 		dest_ptr = &pdev->stats.htt_rx_pdev_stats.fw_ring_mpdu_err_tlv;
3320 		size = sizeof(htt_rx_pdev_fw_ring_mpdu_err_tlv_v);
3321 		break;
3322 	case HTT_STATS_RX_PDEV_FW_MPDU_DROP_TAG:
3323 		dest_ptr = &pdev->stats.htt_rx_pdev_stats.fw_ring_mpdu_drop;
3324 		size = sizeof(htt_rx_pdev_fw_mpdu_drop_tlv_v);
3325 		break;
3326 	default:
3327 		break;
3328 	}
3329 
3330 	if (dest_ptr)
3331 		qdf_mem_copy(dest_ptr, tag_buf, size);
3332 }
3333