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