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