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