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