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 htt_tx_pdev_mu_mimo_sch_stats_tlv *dp_stats_buf = 1370 (htt_tx_pdev_mu_mimo_sch_stats_tlv *)tag_buf; 1371 1372 DP_TRACE_STATS(FATAL, "HTT_TX_PDEV_MU_MIMO_SCH_STATS_TLV:"); 1373 DP_TRACE_STATS(FATAL, "mu_mimo_sch_posted = %d", 1374 dp_stats_buf->mu_mimo_sch_posted); 1375 DP_TRACE_STATS(FATAL, "mu_mimo_sch_failed = %d", 1376 dp_stats_buf->mu_mimo_sch_failed); 1377 DP_TRACE_STATS(FATAL, "mu_mimo_ppdu_posted = %d\n", 1378 dp_stats_buf->mu_mimo_ppdu_posted); 1379 } 1380 1381 /* 1382 * dp_print_tx_pdev_mu_mimo_mpdu_stats_tlv: display 1383 * htt_tx_pdev_mu_mimo_mpdu_stats_tlv 1384 * @tag_buf: buffer containing the tlv htt_tx_pdev_mu_mimo_mpdu_stats_tlv 1385 * 1386 * return:void 1387 */ 1388 static inline void dp_print_tx_pdev_mu_mimo_mpdu_stats_tlv(uint32_t *tag_buf) 1389 { 1390 htt_tx_pdev_mu_mimo_mpdu_stats_tlv *dp_stats_buf = 1391 (htt_tx_pdev_mu_mimo_mpdu_stats_tlv *)tag_buf; 1392 1393 DP_TRACE_STATS(FATAL, "HTT_TX_PDEV_MU_MIMO_MPDU_STATS_TLV:"); 1394 DP_TRACE_STATS(FATAL, "mu_mimo_mpdus_queued_usr = %d", 1395 dp_stats_buf->mu_mimo_mpdus_queued_usr); 1396 DP_TRACE_STATS(FATAL, "mu_mimo_mpdus_tried_usr = %d", 1397 dp_stats_buf->mu_mimo_mpdus_tried_usr); 1398 DP_TRACE_STATS(FATAL, "mu_mimo_mpdus_failed_usr = %d", 1399 dp_stats_buf->mu_mimo_mpdus_failed_usr); 1400 DP_TRACE_STATS(FATAL, "mu_mimo_mpdus_requeued_usr = %d", 1401 dp_stats_buf->mu_mimo_mpdus_requeued_usr); 1402 DP_TRACE_STATS(FATAL, "mu_mimo_err_no_ba_usr = %d", 1403 dp_stats_buf->mu_mimo_err_no_ba_usr); 1404 DP_TRACE_STATS(FATAL, "mu_mimo_mpdu_underrun_usr = %d", 1405 dp_stats_buf->mu_mimo_mpdu_underrun_usr); 1406 DP_TRACE_STATS(FATAL, "mu_mimo_ampdu_underrun_usr = %d\n", 1407 dp_stats_buf->mu_mimo_ampdu_underrun_usr); 1408 } 1409 1410 /* 1411 * dp_print_sched_txq_cmd_posted_tlv_v: display htt_sched_txq_cmd_posted_tlv_v 1412 * @tag_buf: buffer containing the tlv htt_sched_txq_cmd_posted_tlv_v 1413 * 1414 * return:void 1415 */ 1416 static inline void dp_print_sched_txq_cmd_posted_tlv_v(uint32_t *tag_buf) 1417 { 1418 htt_sched_txq_cmd_posted_tlv_v *dp_stats_buf = 1419 (htt_sched_txq_cmd_posted_tlv_v *)tag_buf; 1420 uint8_t i; 1421 uint16_t index = 0; 1422 uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2); 1423 char *sched_cmd_posted = qdf_mem_malloc(DP_MAX_STRING_LEN); 1424 1425 if (!sched_cmd_posted) { 1426 QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, 1427 FL("Output buffer not allocated")); 1428 return; 1429 } 1430 1431 tag_len = qdf_min(tag_len, (uint32_t)HTT_TX_PDEV_SCHED_TX_MODE_MAX); 1432 1433 DP_TRACE_STATS(FATAL, "HTT_SCHED_TXQ_CMD_POSTED_TLV_V:"); 1434 for (i = 0; i < tag_len; i++) { 1435 index += qdf_snprint(&sched_cmd_posted[index], 1436 DP_MAX_STRING_LEN - index, 1437 " %d:%d,", i, 1438 dp_stats_buf->sched_cmd_posted[i]); 1439 } 1440 DP_TRACE_STATS(FATAL, "sched_cmd_posted = %s\n", sched_cmd_posted); 1441 qdf_mem_free(sched_cmd_posted); 1442 } 1443 1444 /* 1445 * dp_print_sched_txq_cmd_reaped_tlv_v: display htt_sched_txq_cmd_reaped_tlv_v 1446 * @tag_buf: buffer containing the tlv htt_sched_txq_cmd_reaped_tlv_v 1447 * 1448 * return:void 1449 */ 1450 static inline void dp_print_sched_txq_cmd_reaped_tlv_v(uint32_t *tag_buf) 1451 { 1452 htt_sched_txq_cmd_reaped_tlv_v *dp_stats_buf = 1453 (htt_sched_txq_cmd_reaped_tlv_v *)tag_buf; 1454 uint8_t i; 1455 uint16_t index = 0; 1456 uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2); 1457 char *sched_cmd_reaped = qdf_mem_malloc(DP_MAX_STRING_LEN); 1458 1459 if (!sched_cmd_reaped) { 1460 QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, 1461 FL("Output buffer not allocated")); 1462 return; 1463 } 1464 1465 tag_len = qdf_min(tag_len, (uint32_t)HTT_TX_PDEV_SCHED_TX_MODE_MAX); 1466 1467 DP_TRACE_STATS(FATAL, "HTT_SCHED_TXQ_CMD_REAPED_TLV_V:"); 1468 for (i = 0; i < tag_len; i++) { 1469 index += qdf_snprint(&sched_cmd_reaped[index], 1470 DP_MAX_STRING_LEN - index, 1471 " %d:%d,", i, 1472 dp_stats_buf->sched_cmd_reaped[i]); 1473 } 1474 DP_TRACE_STATS(FATAL, "sched_cmd_reaped = %s\n", sched_cmd_reaped); 1475 qdf_mem_free(sched_cmd_reaped); 1476 } 1477 1478 /* 1479 * dp_print_tx_pdev_stats_sched_per_txq_tlv: display 1480 * htt_tx_pdev_stats_sched_per_txq_tlv 1481 * @tag_buf: buffer containing the tlv htt_tx_pdev_stats_sched_per_txq_tlv 1482 * 1483 * return:void 1484 */ 1485 static inline void dp_print_tx_pdev_stats_sched_per_txq_tlv(uint32_t *tag_buf) 1486 { 1487 htt_tx_pdev_stats_sched_per_txq_tlv *dp_stats_buf = 1488 (htt_tx_pdev_stats_sched_per_txq_tlv *)tag_buf; 1489 1490 DP_TRACE_STATS(FATAL, "HTT_TX_PDEV_STATS_SCHED_PER_TXQ_TLV:"); 1491 DP_TRACE_STATS(FATAL, "mac_id__txq_id__word = %d", 1492 dp_stats_buf->mac_id__txq_id__word); 1493 DP_TRACE_STATS(FATAL, "sched_policy = %d", 1494 dp_stats_buf->sched_policy); 1495 DP_TRACE_STATS(FATAL, "last_sched_cmd_posted_timestamp = %d", 1496 dp_stats_buf->last_sched_cmd_posted_timestamp); 1497 DP_TRACE_STATS(FATAL, "last_sched_cmd_compl_timestamp = %d", 1498 dp_stats_buf->last_sched_cmd_compl_timestamp); 1499 DP_TRACE_STATS(FATAL, "sched_2_tac_lwm_count = %d", 1500 dp_stats_buf->sched_2_tac_lwm_count); 1501 DP_TRACE_STATS(FATAL, "sched_2_tac_ring_full = %d", 1502 dp_stats_buf->sched_2_tac_ring_full); 1503 DP_TRACE_STATS(FATAL, "sched_cmd_post_failure = %d", 1504 dp_stats_buf->sched_cmd_post_failure); 1505 DP_TRACE_STATS(FATAL, "num_active_tids = %d", 1506 dp_stats_buf->num_active_tids); 1507 DP_TRACE_STATS(FATAL, "num_ps_schedules = %d", 1508 dp_stats_buf->num_ps_schedules); 1509 DP_TRACE_STATS(FATAL, "sched_cmds_pending = %d", 1510 dp_stats_buf->sched_cmds_pending); 1511 DP_TRACE_STATS(FATAL, "num_tid_register = %d", 1512 dp_stats_buf->num_tid_register); 1513 DP_TRACE_STATS(FATAL, "num_tid_unregister = %d", 1514 dp_stats_buf->num_tid_unregister); 1515 DP_TRACE_STATS(FATAL, "num_qstats_queried = %d", 1516 dp_stats_buf->num_qstats_queried); 1517 DP_TRACE_STATS(FATAL, "qstats_update_pending = %d", 1518 dp_stats_buf->qstats_update_pending); 1519 DP_TRACE_STATS(FATAL, "last_qstats_query_timestamp = %d", 1520 dp_stats_buf->last_qstats_query_timestamp); 1521 DP_TRACE_STATS(FATAL, "num_tqm_cmdq_full = %d", 1522 dp_stats_buf->num_tqm_cmdq_full); 1523 DP_TRACE_STATS(FATAL, "num_de_sched_algo_trigger = %d", 1524 dp_stats_buf->num_de_sched_algo_trigger); 1525 DP_TRACE_STATS(FATAL, "num_rt_sched_algo_trigger = %d", 1526 dp_stats_buf->num_rt_sched_algo_trigger); 1527 DP_TRACE_STATS(FATAL, "num_tqm_sched_algo_trigger = %d", 1528 dp_stats_buf->num_tqm_sched_algo_trigger); 1529 DP_TRACE_STATS(FATAL, "notify_sched = %d\n", 1530 dp_stats_buf->notify_sched); 1531 } 1532 1533 /* 1534 * dp_print_stats_tx_sched_cmn_tlv: display htt_stats_tx_sched_cmn_tlv 1535 * @tag_buf: buffer containing the tlv htt_stats_tx_sched_cmn_tlv 1536 * 1537 * return:void 1538 */ 1539 static inline void dp_print_stats_tx_sched_cmn_tlv(uint32_t *tag_buf) 1540 { 1541 htt_stats_tx_sched_cmn_tlv *dp_stats_buf = 1542 (htt_stats_tx_sched_cmn_tlv *)tag_buf; 1543 1544 DP_TRACE_STATS(FATAL, "HTT_STATS_TX_SCHED_CMN_TLV:"); 1545 DP_TRACE_STATS(FATAL, "mac_id__word = %d", 1546 dp_stats_buf->mac_id__word); 1547 DP_TRACE_STATS(FATAL, "current_timestamp = %d\n", 1548 dp_stats_buf->current_timestamp); 1549 } 1550 1551 /* 1552 * dp_print_tx_tqm_gen_mpdu_stats_tlv_v: display htt_tx_tqm_gen_mpdu_stats_tlv_v 1553 * @tag_buf: buffer containing the tlv htt_tx_tqm_gen_mpdu_stats_tlv_v 1554 * 1555 * return:void 1556 */ 1557 static inline void dp_print_tx_tqm_gen_mpdu_stats_tlv_v(uint32_t *tag_buf) 1558 { 1559 htt_tx_tqm_gen_mpdu_stats_tlv_v *dp_stats_buf = 1560 (htt_tx_tqm_gen_mpdu_stats_tlv_v *)tag_buf; 1561 uint8_t i; 1562 uint16_t index = 0; 1563 uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2); 1564 char *gen_mpdu_end_reason = qdf_mem_malloc(DP_MAX_STRING_LEN); 1565 1566 if (!gen_mpdu_end_reason) { 1567 QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, 1568 FL("Output buffer not allocated")); 1569 return; 1570 } 1571 1572 tag_len = qdf_min(tag_len, 1573 (uint32_t)HTT_TX_TQM_MAX_GEN_MPDU_END_REASON); 1574 1575 DP_TRACE_STATS(FATAL, "HTT_TX_TQM_GEN_MPDU_STATS_TLV_V:"); 1576 for (i = 0; i < tag_len; i++) { 1577 index += qdf_snprint(&gen_mpdu_end_reason[index], 1578 DP_MAX_STRING_LEN - index, 1579 " %d:%d,", i, 1580 dp_stats_buf->gen_mpdu_end_reason[i]); 1581 } 1582 DP_TRACE_STATS(FATAL, "gen_mpdu_end_reason = %s\n", gen_mpdu_end_reason); 1583 qdf_mem_free(gen_mpdu_end_reason); 1584 } 1585 1586 /* 1587 * dp_print_tx_tqm_list_mpdu_stats_tlv_v: display htt_tx_tqm_list_mpdu_stats_tlv 1588 * @tag_buf: buffer containing the tlv htt_tx_tqm_list_mpdu_stats_tlv_v 1589 * 1590 * return:void 1591 */ 1592 static inline void dp_print_tx_tqm_list_mpdu_stats_tlv_v(uint32_t *tag_buf) 1593 { 1594 htt_tx_tqm_list_mpdu_stats_tlv_v *dp_stats_buf = 1595 (htt_tx_tqm_list_mpdu_stats_tlv_v *)tag_buf; 1596 uint8_t i; 1597 uint16_t index = 0; 1598 uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2); 1599 char *list_mpdu_end_reason = qdf_mem_malloc(DP_MAX_STRING_LEN); 1600 1601 if (!list_mpdu_end_reason) { 1602 QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, 1603 FL("Output buffer not allocated")); 1604 return; 1605 } 1606 1607 tag_len = qdf_min(tag_len, 1608 (uint32_t)HTT_TX_TQM_MAX_LIST_MPDU_END_REASON); 1609 1610 DP_TRACE_STATS(FATAL, "HTT_TX_TQM_LIST_MPDU_STATS_TLV_V:"); 1611 for (i = 0; i < tag_len; i++) { 1612 index += qdf_snprint(&list_mpdu_end_reason[index], 1613 DP_MAX_STRING_LEN - index, 1614 " %d:%d,", i, 1615 dp_stats_buf->list_mpdu_end_reason[i]); 1616 } 1617 DP_TRACE_STATS(FATAL, "list_mpdu_end_reason = %s\n", 1618 list_mpdu_end_reason); 1619 qdf_mem_free(list_mpdu_end_reason); 1620 } 1621 1622 /* 1623 * dp_print_tx_tqm_list_mpdu_cnt_tlv_v: display htt_tx_tqm_list_mpdu_cnt_tlv_v 1624 * @tag_buf: buffer containing the tlv htt_tx_tqm_list_mpdu_cnt_tlv_v 1625 * 1626 * return:void 1627 */ 1628 static inline void dp_print_tx_tqm_list_mpdu_cnt_tlv_v(uint32_t *tag_buf) 1629 { 1630 htt_tx_tqm_list_mpdu_cnt_tlv_v *dp_stats_buf = 1631 (htt_tx_tqm_list_mpdu_cnt_tlv_v *)tag_buf; 1632 uint8_t i; 1633 uint16_t index = 0; 1634 uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2); 1635 char *list_mpdu_cnt_hist = qdf_mem_malloc(DP_MAX_STRING_LEN); 1636 1637 if (!list_mpdu_cnt_hist) { 1638 QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, 1639 FL("Output buffer not allocated")); 1640 return; 1641 } 1642 1643 tag_len = qdf_min(tag_len, 1644 (uint32_t)HTT_TX_TQM_MAX_LIST_MPDU_CNT_HISTOGRAM_BINS); 1645 1646 DP_TRACE_STATS(FATAL, "HTT_TX_TQM_LIST_MPDU_CNT_TLV_V:"); 1647 for (i = 0; i < tag_len; i++) { 1648 index += qdf_snprint(&list_mpdu_cnt_hist[index], 1649 DP_MAX_STRING_LEN - index, 1650 " %d:%d,", i, 1651 dp_stats_buf->list_mpdu_cnt_hist[i]); 1652 } 1653 DP_TRACE_STATS(FATAL, "list_mpdu_cnt_hist = %s\n", list_mpdu_cnt_hist); 1654 qdf_mem_free(list_mpdu_cnt_hist); 1655 } 1656 1657 /* 1658 * dp_print_tx_tqm_pdev_stats_tlv_v: display htt_tx_tqm_pdev_stats_tlv_v 1659 * @tag_buf: buffer containing the tlv htt_tx_tqm_pdev_stats_tlv_v 1660 * 1661 * return:void 1662 */ 1663 static inline void dp_print_tx_tqm_pdev_stats_tlv_v(uint32_t *tag_buf) 1664 { 1665 htt_tx_tqm_pdev_stats_tlv_v *dp_stats_buf = 1666 (htt_tx_tqm_pdev_stats_tlv_v *)tag_buf; 1667 1668 DP_TRACE_STATS(FATAL, "HTT_TX_TQM_PDEV_STATS_TLV_V:"); 1669 DP_TRACE_STATS(FATAL, "msdu_count = %d", 1670 dp_stats_buf->msdu_count); 1671 DP_TRACE_STATS(FATAL, "mpdu_count = %d", 1672 dp_stats_buf->mpdu_count); 1673 DP_TRACE_STATS(FATAL, "remove_msdu = %d", 1674 dp_stats_buf->remove_msdu); 1675 DP_TRACE_STATS(FATAL, "remove_mpdu = %d", 1676 dp_stats_buf->remove_mpdu); 1677 DP_TRACE_STATS(FATAL, "remove_msdu_ttl = %d", 1678 dp_stats_buf->remove_msdu_ttl); 1679 DP_TRACE_STATS(FATAL, "send_bar = %d", 1680 dp_stats_buf->send_bar); 1681 DP_TRACE_STATS(FATAL, "bar_sync = %d", 1682 dp_stats_buf->bar_sync); 1683 DP_TRACE_STATS(FATAL, "notify_mpdu = %d", 1684 dp_stats_buf->notify_mpdu); 1685 DP_TRACE_STATS(FATAL, "sync_cmd = %d", 1686 dp_stats_buf->sync_cmd); 1687 DP_TRACE_STATS(FATAL, "write_cmd = %d", 1688 dp_stats_buf->write_cmd); 1689 DP_TRACE_STATS(FATAL, "hwsch_trigger = %d", 1690 dp_stats_buf->hwsch_trigger); 1691 DP_TRACE_STATS(FATAL, "ack_tlv_proc = %d", 1692 dp_stats_buf->ack_tlv_proc); 1693 DP_TRACE_STATS(FATAL, "gen_mpdu_cmd = %d", 1694 dp_stats_buf->gen_mpdu_cmd); 1695 DP_TRACE_STATS(FATAL, "gen_list_cmd = %d", 1696 dp_stats_buf->gen_list_cmd); 1697 DP_TRACE_STATS(FATAL, "remove_mpdu_cmd = %d", 1698 dp_stats_buf->remove_mpdu_cmd); 1699 DP_TRACE_STATS(FATAL, "remove_mpdu_tried_cmd = %d", 1700 dp_stats_buf->remove_mpdu_tried_cmd); 1701 DP_TRACE_STATS(FATAL, "mpdu_queue_stats_cmd = %d", 1702 dp_stats_buf->mpdu_queue_stats_cmd); 1703 DP_TRACE_STATS(FATAL, "mpdu_head_info_cmd = %d", 1704 dp_stats_buf->mpdu_head_info_cmd); 1705 DP_TRACE_STATS(FATAL, "msdu_flow_stats_cmd = %d", 1706 dp_stats_buf->msdu_flow_stats_cmd); 1707 DP_TRACE_STATS(FATAL, "remove_msdu_cmd = %d", 1708 dp_stats_buf->remove_msdu_cmd); 1709 DP_TRACE_STATS(FATAL, "remove_msdu_ttl_cmd = %d", 1710 dp_stats_buf->remove_msdu_ttl_cmd); 1711 DP_TRACE_STATS(FATAL, "flush_cache_cmd = %d", 1712 dp_stats_buf->flush_cache_cmd); 1713 DP_TRACE_STATS(FATAL, "update_mpduq_cmd = %d", 1714 dp_stats_buf->update_mpduq_cmd); 1715 DP_TRACE_STATS(FATAL, "enqueue = %d", 1716 dp_stats_buf->enqueue); 1717 DP_TRACE_STATS(FATAL, "enqueue_notify = %d", 1718 dp_stats_buf->enqueue_notify); 1719 DP_TRACE_STATS(FATAL, "notify_mpdu_at_head = %d", 1720 dp_stats_buf->notify_mpdu_at_head); 1721 DP_TRACE_STATS(FATAL, "notify_mpdu_state_valid = %d\n", 1722 dp_stats_buf->notify_mpdu_state_valid); 1723 } 1724 1725 /* 1726 * dp_print_tx_tqm_cmn_stats_tlv: display htt_tx_tqm_cmn_stats_tlv 1727 * @tag_buf: buffer containing the tlv htt_tx_tqm_cmn_stats_tlv 1728 * 1729 * return:void 1730 */ 1731 static inline void dp_print_tx_tqm_cmn_stats_tlv(uint32_t *tag_buf) 1732 { 1733 htt_tx_tqm_cmn_stats_tlv *dp_stats_buf = 1734 (htt_tx_tqm_cmn_stats_tlv *)tag_buf; 1735 1736 DP_TRACE_STATS(FATAL, "HTT_TX_TQM_CMN_STATS_TLV:"); 1737 DP_TRACE_STATS(FATAL, "mac_id__word = %d", 1738 dp_stats_buf->mac_id__word); 1739 DP_TRACE_STATS(FATAL, "max_cmdq_id = %d", 1740 dp_stats_buf->max_cmdq_id); 1741 DP_TRACE_STATS(FATAL, "list_mpdu_cnt_hist_intvl = %d", 1742 dp_stats_buf->list_mpdu_cnt_hist_intvl); 1743 DP_TRACE_STATS(FATAL, "add_msdu = %d", 1744 dp_stats_buf->add_msdu); 1745 DP_TRACE_STATS(FATAL, "q_empty = %d", 1746 dp_stats_buf->q_empty); 1747 DP_TRACE_STATS(FATAL, "q_not_empty = %d", 1748 dp_stats_buf->q_not_empty); 1749 DP_TRACE_STATS(FATAL, "drop_notification = %d", 1750 dp_stats_buf->drop_notification); 1751 DP_TRACE_STATS(FATAL, "desc_threshold = %d\n", 1752 dp_stats_buf->desc_threshold); 1753 } 1754 1755 /* 1756 * dp_print_tx_tqm_error_stats_tlv: display htt_tx_tqm_error_stats_tlv 1757 * @tag_buf: buffer containing the tlv htt_tx_tqm_error_stats_tlv 1758 * 1759 * return:void 1760 */ 1761 static inline void dp_print_tx_tqm_error_stats_tlv(uint32_t *tag_buf) 1762 { 1763 htt_tx_tqm_error_stats_tlv *dp_stats_buf = 1764 (htt_tx_tqm_error_stats_tlv *)tag_buf; 1765 1766 DP_TRACE_STATS(FATAL, "HTT_TX_TQM_ERROR_STATS_TLV:"); 1767 DP_TRACE_STATS(FATAL, "q_empty_failure = %d", 1768 dp_stats_buf->q_empty_failure); 1769 DP_TRACE_STATS(FATAL, "q_not_empty_failure = %d", 1770 dp_stats_buf->q_not_empty_failure); 1771 DP_TRACE_STATS(FATAL, "add_msdu_failure = %d\n", 1772 dp_stats_buf->add_msdu_failure); 1773 } 1774 1775 /* 1776 * dp_print_tx_tqm_cmdq_status_tlv: display htt_tx_tqm_cmdq_status_tlv 1777 * @tag_buf: buffer containing the tlv htt_tx_tqm_cmdq_status_tlv 1778 * 1779 * return:void 1780 */ 1781 static inline void dp_print_tx_tqm_cmdq_status_tlv(uint32_t *tag_buf) 1782 { 1783 htt_tx_tqm_cmdq_status_tlv *dp_stats_buf = 1784 (htt_tx_tqm_cmdq_status_tlv *)tag_buf; 1785 1786 DP_TRACE_STATS(FATAL, "HTT_TX_TQM_CMDQ_STATUS_TLV:"); 1787 DP_TRACE_STATS(FATAL, "mac_id__cmdq_id__word = %d", 1788 dp_stats_buf->mac_id__cmdq_id__word); 1789 DP_TRACE_STATS(FATAL, "sync_cmd = %d", 1790 dp_stats_buf->sync_cmd); 1791 DP_TRACE_STATS(FATAL, "write_cmd = %d", 1792 dp_stats_buf->write_cmd); 1793 DP_TRACE_STATS(FATAL, "gen_mpdu_cmd = %d", 1794 dp_stats_buf->gen_mpdu_cmd); 1795 DP_TRACE_STATS(FATAL, "mpdu_queue_stats_cmd = %d", 1796 dp_stats_buf->mpdu_queue_stats_cmd); 1797 DP_TRACE_STATS(FATAL, "mpdu_head_info_cmd = %d", 1798 dp_stats_buf->mpdu_head_info_cmd); 1799 DP_TRACE_STATS(FATAL, "msdu_flow_stats_cmd = %d", 1800 dp_stats_buf->msdu_flow_stats_cmd); 1801 DP_TRACE_STATS(FATAL, "remove_mpdu_cmd = %d", 1802 dp_stats_buf->remove_mpdu_cmd); 1803 DP_TRACE_STATS(FATAL, "remove_msdu_cmd = %d", 1804 dp_stats_buf->remove_msdu_cmd); 1805 DP_TRACE_STATS(FATAL, "flush_cache_cmd = %d", 1806 dp_stats_buf->flush_cache_cmd); 1807 DP_TRACE_STATS(FATAL, "update_mpduq_cmd = %d", 1808 dp_stats_buf->update_mpduq_cmd); 1809 DP_TRACE_STATS(FATAL, "update_msduq_cmd = %d\n", 1810 dp_stats_buf->update_msduq_cmd); 1811 } 1812 1813 /* 1814 * dp_print_tx_de_eapol_packets_stats_tlv: display htt_tx_de_eapol_packets_stats 1815 * @tag_buf: buffer containing the tlv htt_tx_de_eapol_packets_stats_tlv 1816 * 1817 * return:void 1818 */ 1819 static inline void dp_print_tx_de_eapol_packets_stats_tlv(uint32_t *tag_buf) 1820 { 1821 htt_tx_de_eapol_packets_stats_tlv *dp_stats_buf = 1822 (htt_tx_de_eapol_packets_stats_tlv *)tag_buf; 1823 1824 DP_TRACE_STATS(FATAL, "HTT_TX_DE_EAPOL_PACKETS_STATS_TLV:"); 1825 DP_TRACE_STATS(FATAL, "m1_packets = %d", 1826 dp_stats_buf->m1_packets); 1827 DP_TRACE_STATS(FATAL, "m2_packets = %d", 1828 dp_stats_buf->m2_packets); 1829 DP_TRACE_STATS(FATAL, "m3_packets = %d", 1830 dp_stats_buf->m3_packets); 1831 DP_TRACE_STATS(FATAL, "m4_packets = %d", 1832 dp_stats_buf->m4_packets); 1833 DP_TRACE_STATS(FATAL, "g1_packets = %d", 1834 dp_stats_buf->g1_packets); 1835 DP_TRACE_STATS(FATAL, "g2_packets = %d\n", 1836 dp_stats_buf->g2_packets); 1837 } 1838 1839 /* 1840 * dp_print_tx_de_classify_failed_stats_tlv: display 1841 * htt_tx_de_classify_failed_stats_tlv 1842 * @tag_buf: buffer containing the tlv htt_tx_de_classify_failed_stats_tlv 1843 * 1844 * return:void 1845 */ 1846 static inline void dp_print_tx_de_classify_failed_stats_tlv(uint32_t *tag_buf) 1847 { 1848 htt_tx_de_classify_failed_stats_tlv *dp_stats_buf = 1849 (htt_tx_de_classify_failed_stats_tlv *)tag_buf; 1850 1851 DP_TRACE_STATS(FATAL, "HTT_TX_DE_CLASSIFY_FAILED_STATS_TLV:"); 1852 DP_TRACE_STATS(FATAL, "ap_bss_peer_not_found = %d", 1853 dp_stats_buf->ap_bss_peer_not_found); 1854 DP_TRACE_STATS(FATAL, "ap_bcast_mcast_no_peer = %d", 1855 dp_stats_buf->ap_bcast_mcast_no_peer); 1856 DP_TRACE_STATS(FATAL, "sta_delete_in_progress = %d", 1857 dp_stats_buf->sta_delete_in_progress); 1858 DP_TRACE_STATS(FATAL, "ibss_no_bss_peer = %d", 1859 dp_stats_buf->ibss_no_bss_peer); 1860 DP_TRACE_STATS(FATAL, "invaild_vdev_type = %d", 1861 dp_stats_buf->invaild_vdev_type); 1862 DP_TRACE_STATS(FATAL, "invalid_ast_peer_entry = %d", 1863 dp_stats_buf->invalid_ast_peer_entry); 1864 DP_TRACE_STATS(FATAL, "peer_entry_invalid = %d", 1865 dp_stats_buf->peer_entry_invalid); 1866 DP_TRACE_STATS(FATAL, "ethertype_not_ip = %d", 1867 dp_stats_buf->ethertype_not_ip); 1868 DP_TRACE_STATS(FATAL, "eapol_lookup_failed = %d", 1869 dp_stats_buf->eapol_lookup_failed); 1870 DP_TRACE_STATS(FATAL, "qpeer_not_allow_data = %d", 1871 dp_stats_buf->qpeer_not_allow_data); 1872 DP_TRACE_STATS(FATAL, "fse_tid_override = %d\n", 1873 dp_stats_buf->fse_tid_override); 1874 } 1875 1876 /* 1877 * dp_print_tx_de_classify_stats_tlv: display htt_tx_de_classify_stats_tlv 1878 * @tag_buf: buffer containing the tlv htt_tx_de_classify_stats_tlv 1879 * 1880 * return:void 1881 */ 1882 static inline void dp_print_tx_de_classify_stats_tlv(uint32_t *tag_buf) 1883 { 1884 htt_tx_de_classify_stats_tlv *dp_stats_buf = 1885 (htt_tx_de_classify_stats_tlv *)tag_buf; 1886 1887 DP_TRACE_STATS(FATAL, "HTT_TX_DE_CLASSIFY_STATS_TLV:"); 1888 DP_TRACE_STATS(FATAL, "arp_packets = %d", 1889 dp_stats_buf->arp_packets); 1890 DP_TRACE_STATS(FATAL, "igmp_packets = %d", 1891 dp_stats_buf->igmp_packets); 1892 DP_TRACE_STATS(FATAL, "dhcp_packets = %d", 1893 dp_stats_buf->dhcp_packets); 1894 DP_TRACE_STATS(FATAL, "host_inspected = %d", 1895 dp_stats_buf->host_inspected); 1896 DP_TRACE_STATS(FATAL, "htt_included = %d", 1897 dp_stats_buf->htt_included); 1898 DP_TRACE_STATS(FATAL, "htt_valid_mcs = %d", 1899 dp_stats_buf->htt_valid_mcs); 1900 DP_TRACE_STATS(FATAL, "htt_valid_nss = %d", 1901 dp_stats_buf->htt_valid_nss); 1902 DP_TRACE_STATS(FATAL, "htt_valid_preamble_type = %d", 1903 dp_stats_buf->htt_valid_preamble_type); 1904 DP_TRACE_STATS(FATAL, "htt_valid_chainmask = %d", 1905 dp_stats_buf->htt_valid_chainmask); 1906 DP_TRACE_STATS(FATAL, "htt_valid_guard_interval = %d", 1907 dp_stats_buf->htt_valid_guard_interval); 1908 DP_TRACE_STATS(FATAL, "htt_valid_retries = %d", 1909 dp_stats_buf->htt_valid_retries); 1910 DP_TRACE_STATS(FATAL, "htt_valid_bw_info = %d", 1911 dp_stats_buf->htt_valid_bw_info); 1912 DP_TRACE_STATS(FATAL, "htt_valid_power = %d", 1913 dp_stats_buf->htt_valid_power); 1914 DP_TRACE_STATS(FATAL, "htt_valid_key_flags = %d", 1915 dp_stats_buf->htt_valid_key_flags); 1916 DP_TRACE_STATS(FATAL, "htt_valid_no_encryption = %d", 1917 dp_stats_buf->htt_valid_no_encryption); 1918 DP_TRACE_STATS(FATAL, "fse_entry_count = %d", 1919 dp_stats_buf->fse_entry_count); 1920 DP_TRACE_STATS(FATAL, "fse_priority_be = %d", 1921 dp_stats_buf->fse_priority_be); 1922 DP_TRACE_STATS(FATAL, "fse_priority_high = %d", 1923 dp_stats_buf->fse_priority_high); 1924 DP_TRACE_STATS(FATAL, "fse_priority_low = %d", 1925 dp_stats_buf->fse_priority_low); 1926 DP_TRACE_STATS(FATAL, "fse_traffic_ptrn_be = %d", 1927 dp_stats_buf->fse_traffic_ptrn_be); 1928 DP_TRACE_STATS(FATAL, "fse_traffic_ptrn_over_sub = %d", 1929 dp_stats_buf->fse_traffic_ptrn_over_sub); 1930 DP_TRACE_STATS(FATAL, "fse_traffic_ptrn_bursty = %d", 1931 dp_stats_buf->fse_traffic_ptrn_bursty); 1932 DP_TRACE_STATS(FATAL, "fse_traffic_ptrn_interactive = %d", 1933 dp_stats_buf->fse_traffic_ptrn_interactive); 1934 DP_TRACE_STATS(FATAL, "fse_traffic_ptrn_periodic = %d", 1935 dp_stats_buf->fse_traffic_ptrn_periodic); 1936 DP_TRACE_STATS(FATAL, "fse_hwqueue_alloc = %d", 1937 dp_stats_buf->fse_hwqueue_alloc); 1938 DP_TRACE_STATS(FATAL, "fse_hwqueue_created = %d", 1939 dp_stats_buf->fse_hwqueue_created); 1940 DP_TRACE_STATS(FATAL, "fse_hwqueue_send_to_host = %d", 1941 dp_stats_buf->fse_hwqueue_send_to_host); 1942 DP_TRACE_STATS(FATAL, "mcast_entry = %d", 1943 dp_stats_buf->mcast_entry); 1944 DP_TRACE_STATS(FATAL, "bcast_entry = %d\n", 1945 dp_stats_buf->bcast_entry); 1946 } 1947 1948 /* 1949 * dp_print_tx_de_classify_status_stats_tlv: display 1950 * htt_tx_de_classify_status_stats_tlv 1951 * @tag_buf: buffer containing the tlv htt_tx_de_classify_status_stats_tlv 1952 * 1953 * return:void 1954 */ 1955 static inline void dp_print_tx_de_classify_status_stats_tlv(uint32_t *tag_buf) 1956 { 1957 htt_tx_de_classify_status_stats_tlv *dp_stats_buf = 1958 (htt_tx_de_classify_status_stats_tlv *)tag_buf; 1959 1960 DP_TRACE_STATS(FATAL, "HTT_TX_DE_CLASSIFY_STATUS_STATS_TLV:"); 1961 DP_TRACE_STATS(FATAL, "eok = %d", 1962 dp_stats_buf->eok); 1963 DP_TRACE_STATS(FATAL, "classify_done = %d", 1964 dp_stats_buf->classify_done); 1965 DP_TRACE_STATS(FATAL, "lookup_failed = %d", 1966 dp_stats_buf->lookup_failed); 1967 DP_TRACE_STATS(FATAL, "send_host_dhcp = %d", 1968 dp_stats_buf->send_host_dhcp); 1969 DP_TRACE_STATS(FATAL, "send_host_mcast = %d", 1970 dp_stats_buf->send_host_mcast); 1971 DP_TRACE_STATS(FATAL, "send_host_unknown_dest = %d", 1972 dp_stats_buf->send_host_unknown_dest); 1973 DP_TRACE_STATS(FATAL, "send_host = %d", 1974 dp_stats_buf->send_host); 1975 DP_TRACE_STATS(FATAL, "status_invalid = %d\n", 1976 dp_stats_buf->status_invalid); 1977 } 1978 1979 /* 1980 * dp_print_tx_de_enqueue_packets_stats_tlv: display 1981 * htt_tx_de_enqueue_packets_stats_tlv 1982 * @tag_buf: buffer containing the tlv htt_tx_de_enqueue_packets_stats_tlv 1983 * 1984 * return:void 1985 */ 1986 static inline void dp_print_tx_de_enqueue_packets_stats_tlv(uint32_t *tag_buf) 1987 { 1988 htt_tx_de_enqueue_packets_stats_tlv *dp_stats_buf = 1989 (htt_tx_de_enqueue_packets_stats_tlv *)tag_buf; 1990 1991 DP_TRACE_STATS(FATAL, "HTT_TX_DE_ENQUEUE_PACKETS_STATS_TLV:"); 1992 DP_TRACE_STATS(FATAL, "enqueued_pkts = %d", 1993 dp_stats_buf->enqueued_pkts); 1994 DP_TRACE_STATS(FATAL, "to_tqm = %d", 1995 dp_stats_buf->to_tqm); 1996 DP_TRACE_STATS(FATAL, "to_tqm_bypass = %d\n", 1997 dp_stats_buf->to_tqm_bypass); 1998 } 1999 2000 /* 2001 * dp_print_tx_de_enqueue_discard_stats_tlv: display 2002 * htt_tx_de_enqueue_discard_stats_tlv 2003 * @tag_buf: buffer containing the tlv htt_tx_de_enqueue_discard_stats_tlv 2004 * 2005 * return:void 2006 */ 2007 static inline void dp_print_tx_de_enqueue_discard_stats_tlv(uint32_t *tag_buf) 2008 { 2009 htt_tx_de_enqueue_discard_stats_tlv *dp_stats_buf = 2010 (htt_tx_de_enqueue_discard_stats_tlv *)tag_buf; 2011 2012 DP_TRACE_STATS(FATAL, "HTT_TX_DE_ENQUEUE_DISCARD_STATS_TLV:"); 2013 DP_TRACE_STATS(FATAL, "discarded_pkts = %d", 2014 dp_stats_buf->discarded_pkts); 2015 DP_TRACE_STATS(FATAL, "local_frames = %d", 2016 dp_stats_buf->local_frames); 2017 DP_TRACE_STATS(FATAL, "is_ext_msdu = %d\n", 2018 dp_stats_buf->is_ext_msdu); 2019 } 2020 2021 /* 2022 * dp_print_tx_de_compl_stats_tlv: display htt_tx_de_compl_stats_tlv 2023 * @tag_buf: buffer containing the tlv htt_tx_de_compl_stats_tlv 2024 * 2025 * return:void 2026 */ 2027 static inline void dp_print_tx_de_compl_stats_tlv(uint32_t *tag_buf) 2028 { 2029 htt_tx_de_compl_stats_tlv *dp_stats_buf = 2030 (htt_tx_de_compl_stats_tlv *)tag_buf; 2031 2032 DP_TRACE_STATS(FATAL, "HTT_TX_DE_COMPL_STATS_TLV:"); 2033 DP_TRACE_STATS(FATAL, "tcl_dummy_frame = %d", 2034 dp_stats_buf->tcl_dummy_frame); 2035 DP_TRACE_STATS(FATAL, "tqm_dummy_frame = %d", 2036 dp_stats_buf->tqm_dummy_frame); 2037 DP_TRACE_STATS(FATAL, "tqm_notify_frame = %d", 2038 dp_stats_buf->tqm_notify_frame); 2039 DP_TRACE_STATS(FATAL, "fw2wbm_enq = %d", 2040 dp_stats_buf->fw2wbm_enq); 2041 DP_TRACE_STATS(FATAL, "tqm_bypass_frame = %d\n", 2042 dp_stats_buf->tqm_bypass_frame); 2043 } 2044 2045 /* 2046 * dp_print_tx_de_cmn_stats_tlv: display htt_tx_de_cmn_stats_tlv 2047 * @tag_buf: buffer containing the tlv htt_tx_de_cmn_stats_tlv 2048 * 2049 * return:void 2050 */ 2051 static inline void dp_print_tx_de_cmn_stats_tlv(uint32_t *tag_buf) 2052 { 2053 htt_tx_de_cmn_stats_tlv *dp_stats_buf = 2054 (htt_tx_de_cmn_stats_tlv *)tag_buf; 2055 2056 DP_TRACE_STATS(FATAL, "HTT_TX_DE_CMN_STATS_TLV:"); 2057 DP_TRACE_STATS(FATAL, "mac_id__word = %d", 2058 dp_stats_buf->mac_id__word); 2059 DP_TRACE_STATS(FATAL, "tcl2fw_entry_count = %d", 2060 dp_stats_buf->tcl2fw_entry_count); 2061 DP_TRACE_STATS(FATAL, "not_to_fw = %d", 2062 dp_stats_buf->not_to_fw); 2063 DP_TRACE_STATS(FATAL, "invalid_pdev_vdev_peer = %d", 2064 dp_stats_buf->invalid_pdev_vdev_peer); 2065 DP_TRACE_STATS(FATAL, "tcl_res_invalid_addrx = %d", 2066 dp_stats_buf->tcl_res_invalid_addrx); 2067 DP_TRACE_STATS(FATAL, "wbm2fw_entry_count = %d", 2068 dp_stats_buf->wbm2fw_entry_count); 2069 DP_TRACE_STATS(FATAL, "invalid_pdev = %d\n", 2070 dp_stats_buf->invalid_pdev); 2071 } 2072 2073 /* 2074 * dp_print_ring_if_stats_tlv: display htt_ring_if_stats_tlv 2075 * @tag_buf: buffer containing the tlv htt_ring_if_stats_tlv 2076 * 2077 * return:void 2078 */ 2079 static inline void dp_print_ring_if_stats_tlv(uint32_t *tag_buf) 2080 { 2081 htt_ring_if_stats_tlv *dp_stats_buf = 2082 (htt_ring_if_stats_tlv *)tag_buf; 2083 uint8_t i; 2084 uint16_t index = 0; 2085 char *wm_hit_count = qdf_mem_malloc(DP_MAX_STRING_LEN); 2086 2087 if (!wm_hit_count) { 2088 QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, 2089 FL("Output buffer not allocated")); 2090 return; 2091 } 2092 2093 DP_TRACE_STATS(FATAL, "HTT_RING_IF_STATS_TLV:"); 2094 DP_TRACE_STATS(FATAL, "base_addr = %d", 2095 dp_stats_buf->base_addr); 2096 DP_TRACE_STATS(FATAL, "elem_size = %d", 2097 dp_stats_buf->elem_size); 2098 DP_TRACE_STATS(FATAL, "num_elems__prefetch_tail_idx = %d", 2099 dp_stats_buf->num_elems__prefetch_tail_idx); 2100 DP_TRACE_STATS(FATAL, "head_idx__tail_idx = %d", 2101 dp_stats_buf->head_idx__tail_idx); 2102 DP_TRACE_STATS(FATAL, "shadow_head_idx__shadow_tail_idx = %d", 2103 dp_stats_buf->shadow_head_idx__shadow_tail_idx); 2104 DP_TRACE_STATS(FATAL, "num_tail_incr = %d", 2105 dp_stats_buf->num_tail_incr); 2106 DP_TRACE_STATS(FATAL, "lwm_thresh__hwm_thresh = %d", 2107 dp_stats_buf->lwm_thresh__hwm_thresh); 2108 DP_TRACE_STATS(FATAL, "overrun_hit_count = %d", 2109 dp_stats_buf->overrun_hit_count); 2110 DP_TRACE_STATS(FATAL, "underrun_hit_count = %d", 2111 dp_stats_buf->underrun_hit_count); 2112 DP_TRACE_STATS(FATAL, "prod_blockwait_count = %d", 2113 dp_stats_buf->prod_blockwait_count); 2114 DP_TRACE_STATS(FATAL, "cons_blockwait_count = %d", 2115 dp_stats_buf->cons_blockwait_count); 2116 2117 for (i = 0; i < DP_HTT_LOW_WM_HIT_COUNT_LEN; i++) { 2118 index += qdf_snprint(&wm_hit_count[index], 2119 DP_MAX_STRING_LEN - index, 2120 " %d:%d,", i, 2121 dp_stats_buf->low_wm_hit_count[i]); 2122 } 2123 DP_TRACE_STATS(FATAL, "low_wm_hit_count = %s ", wm_hit_count); 2124 2125 qdf_mem_zero(wm_hit_count, DP_MAX_STRING_LEN); 2126 2127 index = 0; 2128 for (i = 0; i < DP_HTT_HIGH_WM_HIT_COUNT_LEN; i++) { 2129 index += qdf_snprint(&wm_hit_count[index], 2130 DP_MAX_STRING_LEN - index, 2131 " %d:%d,", i, 2132 dp_stats_buf->high_wm_hit_count[i]); 2133 } 2134 DP_TRACE_STATS(FATAL, "high_wm_hit_count = %s\n", wm_hit_count); 2135 } 2136 2137 /* 2138 * dp_print_ring_if_cmn_tlv: display htt_ring_if_cmn_tlv 2139 * @tag_buf: buffer containing the tlv htt_ring_if_cmn_tlv 2140 * 2141 * return:void 2142 */ 2143 static inline void dp_print_ring_if_cmn_tlv(uint32_t *tag_buf) 2144 { 2145 htt_ring_if_cmn_tlv *dp_stats_buf = 2146 (htt_ring_if_cmn_tlv *)tag_buf; 2147 2148 DP_TRACE_STATS(FATAL, "HTT_RING_IF_CMN_TLV:"); 2149 DP_TRACE_STATS(FATAL, "mac_id__word = %d", 2150 dp_stats_buf->mac_id__word); 2151 DP_TRACE_STATS(FATAL, "num_records = %d\n", 2152 dp_stats_buf->num_records); 2153 } 2154 2155 /* 2156 * dp_print_sfm_client_user_tlv_v: display htt_sfm_client_user_tlv_v 2157 * @tag_buf: buffer containing the tlv htt_sfm_client_user_tlv_v 2158 * 2159 * return:void 2160 */ 2161 static inline void dp_print_sfm_client_user_tlv_v(uint32_t *tag_buf) 2162 { 2163 htt_sfm_client_user_tlv_v *dp_stats_buf = 2164 (htt_sfm_client_user_tlv_v *)tag_buf; 2165 uint8_t i; 2166 uint16_t index = 0; 2167 uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2); 2168 char *dwords_used_by_user_n = qdf_mem_malloc(DP_MAX_STRING_LEN); 2169 2170 if (!dwords_used_by_user_n) { 2171 QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, 2172 FL("Output buffer not allocated")); 2173 return; 2174 } 2175 2176 DP_TRACE_STATS(FATAL, "HTT_SFM_CLIENT_USER_TLV_V:"); 2177 for (i = 0; i < tag_len; i++) { 2178 index += qdf_snprint(&dwords_used_by_user_n[index], 2179 DP_MAX_STRING_LEN - index, 2180 " %d:%d,", i, 2181 dp_stats_buf->dwords_used_by_user_n[i]); 2182 } 2183 DP_TRACE_STATS(FATAL, "dwords_used_by_user_n = %s\n", 2184 dwords_used_by_user_n); 2185 qdf_mem_free(dwords_used_by_user_n); 2186 } 2187 2188 /* 2189 * dp_print_sfm_client_tlv: display htt_sfm_client_tlv 2190 * @tag_buf: buffer containing the tlv htt_sfm_client_tlv 2191 * 2192 * return:void 2193 */ 2194 static inline void dp_print_sfm_client_tlv(uint32_t *tag_buf) 2195 { 2196 htt_sfm_client_tlv *dp_stats_buf = 2197 (htt_sfm_client_tlv *)tag_buf; 2198 2199 DP_TRACE_STATS(FATAL, "HTT_SFM_CLIENT_TLV:"); 2200 DP_TRACE_STATS(FATAL, "client_id = %d", 2201 dp_stats_buf->client_id); 2202 DP_TRACE_STATS(FATAL, "buf_min = %d", 2203 dp_stats_buf->buf_min); 2204 DP_TRACE_STATS(FATAL, "buf_max = %d", 2205 dp_stats_buf->buf_max); 2206 DP_TRACE_STATS(FATAL, "buf_busy = %d", 2207 dp_stats_buf->buf_busy); 2208 DP_TRACE_STATS(FATAL, "buf_alloc = %d", 2209 dp_stats_buf->buf_alloc); 2210 DP_TRACE_STATS(FATAL, "buf_avail = %d", 2211 dp_stats_buf->buf_avail); 2212 DP_TRACE_STATS(FATAL, "num_users = %d\n", 2213 dp_stats_buf->num_users); 2214 } 2215 2216 /* 2217 * dp_print_sfm_cmn_tlv: display htt_sfm_cmn_tlv 2218 * @tag_buf: buffer containing the tlv htt_sfm_cmn_tlv 2219 * 2220 * return:void 2221 */ 2222 static inline void dp_print_sfm_cmn_tlv(uint32_t *tag_buf) 2223 { 2224 htt_sfm_cmn_tlv *dp_stats_buf = 2225 (htt_sfm_cmn_tlv *)tag_buf; 2226 2227 DP_TRACE_STATS(FATAL, "HTT_SFM_CMN_TLV:"); 2228 DP_TRACE_STATS(FATAL, "mac_id__word = %d", 2229 dp_stats_buf->mac_id__word); 2230 DP_TRACE_STATS(FATAL, "buf_total = %d", 2231 dp_stats_buf->buf_total); 2232 DP_TRACE_STATS(FATAL, "mem_empty = %d", 2233 dp_stats_buf->mem_empty); 2234 DP_TRACE_STATS(FATAL, "deallocate_bufs = %d", 2235 dp_stats_buf->deallocate_bufs); 2236 DP_TRACE_STATS(FATAL, "num_records = %d\n", 2237 dp_stats_buf->num_records); 2238 } 2239 2240 /* 2241 * dp_print_sring_stats_tlv: display htt_sring_stats_tlv 2242 * @tag_buf: buffer containing the tlv htt_sring_stats_tlv 2243 * 2244 * return:void 2245 */ 2246 static inline void dp_print_sring_stats_tlv(uint32_t *tag_buf) 2247 { 2248 htt_sring_stats_tlv *dp_stats_buf = 2249 (htt_sring_stats_tlv *)tag_buf; 2250 2251 DP_TRACE_STATS(FATAL, "HTT_SRING_STATS_TLV:"); 2252 DP_TRACE_STATS(FATAL, "mac_id__ring_id__arena__ep = %d", 2253 dp_stats_buf->mac_id__ring_id__arena__ep); 2254 DP_TRACE_STATS(FATAL, "base_addr_lsb = %d", 2255 dp_stats_buf->base_addr_lsb); 2256 DP_TRACE_STATS(FATAL, "base_addr_msb = %d", 2257 dp_stats_buf->base_addr_msb); 2258 DP_TRACE_STATS(FATAL, "ring_size = %d", 2259 dp_stats_buf->ring_size); 2260 DP_TRACE_STATS(FATAL, "elem_size = %d", 2261 dp_stats_buf->elem_size); 2262 DP_TRACE_STATS(FATAL, "num_avail_words__num_valid_words = %d", 2263 dp_stats_buf->num_avail_words__num_valid_words); 2264 DP_TRACE_STATS(FATAL, "head_ptr__tail_ptr = %d", 2265 dp_stats_buf->head_ptr__tail_ptr); 2266 DP_TRACE_STATS(FATAL, "consumer_empty__producer_full = %d", 2267 dp_stats_buf->consumer_empty__producer_full); 2268 DP_TRACE_STATS(FATAL, "prefetch_count__internal_tail_ptr = %d\n", 2269 dp_stats_buf->prefetch_count__internal_tail_ptr); 2270 } 2271 2272 /* 2273 * dp_print_sring_cmn_tlv: display htt_sring_cmn_tlv 2274 * @tag_buf: buffer containing the tlv htt_sring_cmn_tlv 2275 * 2276 * return:void 2277 */ 2278 static inline void dp_print_sring_cmn_tlv(uint32_t *tag_buf) 2279 { 2280 htt_sring_cmn_tlv *dp_stats_buf = 2281 (htt_sring_cmn_tlv *)tag_buf; 2282 2283 DP_TRACE_STATS(FATAL, "HTT_SRING_CMN_TLV:"); 2284 DP_TRACE_STATS(FATAL, "num_records = %d\n", 2285 dp_stats_buf->num_records); 2286 } 2287 2288 /* 2289 * dp_print_tx_pdev_rate_stats_tlv: display htt_tx_pdev_rate_stats_tlv 2290 * @tag_buf: buffer containing the tlv htt_tx_pdev_rate_stats_tlv 2291 * 2292 * return:void 2293 */ 2294 static inline void dp_print_tx_pdev_rate_stats_tlv(uint32_t *tag_buf) 2295 { 2296 htt_tx_pdev_rate_stats_tlv *dp_stats_buf = 2297 (htt_tx_pdev_rate_stats_tlv *)tag_buf; 2298 uint8_t i, j; 2299 uint16_t index = 0; 2300 char *tx_gi[HTT_TX_PEER_STATS_NUM_GI_COUNTERS]; 2301 char *str_buf = qdf_mem_malloc(DP_MAX_STRING_LEN); 2302 2303 if (!str_buf) { 2304 QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, 2305 FL("Output buffer not allocated")); 2306 return; 2307 } 2308 2309 for (i = 0; i < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; i++) { 2310 tx_gi[i] = (char *)qdf_mem_malloc(DP_MAX_STRING_LEN); 2311 } 2312 2313 DP_TRACE_STATS(FATAL, "HTT_TX_PDEV_RATE_STATS_TLV:"); 2314 DP_TRACE_STATS(FATAL, "mac_id__word = %d", 2315 dp_stats_buf->mac_id__word); 2316 DP_TRACE_STATS(FATAL, "tx_ldpc = %d", 2317 dp_stats_buf->tx_ldpc); 2318 DP_TRACE_STATS(FATAL, "rts_cnt = %d", 2319 dp_stats_buf->rts_cnt); 2320 DP_TRACE_STATS(FATAL, "rts_success = %d", 2321 dp_stats_buf->rts_success); 2322 2323 DP_TRACE_STATS(FATAL, "ack_rssi = %d", 2324 dp_stats_buf->ack_rssi); 2325 2326 qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0); 2327 for (i = 0; i < DP_HTT_TX_MCS_LEN; i++) { 2328 index += qdf_snprint(&str_buf[index], 2329 DP_MAX_STRING_LEN - index, 2330 " %d:%d,", i, dp_stats_buf->tx_mcs[i]); 2331 } 2332 DP_TRACE_STATS(FATAL, "tx_mcs = %s ", str_buf); 2333 2334 index = 0; 2335 qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0); 2336 for (i = 0; i < DP_HTT_TX_SU_MCS_LEN; i++) { 2337 index += qdf_snprint(&str_buf[index], 2338 DP_MAX_STRING_LEN - index, 2339 " %d:%d,", i, dp_stats_buf->tx_su_mcs[i]); 2340 } 2341 DP_TRACE_STATS(FATAL, "tx_su_mcs = %s ", str_buf); 2342 2343 index = 0; 2344 qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0); 2345 for (i = 0; i < DP_HTT_TX_MU_MCS_LEN; i++) { 2346 index += qdf_snprint(&str_buf[index], 2347 DP_MAX_STRING_LEN - index, 2348 " %d:%d,", i, dp_stats_buf->tx_mu_mcs[i]); 2349 } 2350 DP_TRACE_STATS(FATAL, "tx_mu_mcs = %s ", str_buf); 2351 2352 index = 0; 2353 qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0); 2354 for (i = 0; i < DP_HTT_TX_NSS_LEN; i++) { 2355 /* 0 stands for NSS 1, 1 stands for NSS 2, etc. */ 2356 index += qdf_snprint(&str_buf[index], 2357 DP_MAX_STRING_LEN - index, 2358 " %d:%d,", (i + 1), 2359 dp_stats_buf->tx_nss[i]); 2360 } 2361 DP_TRACE_STATS(FATAL, "tx_nss = %s ", str_buf); 2362 2363 index = 0; 2364 qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0); 2365 for (i = 0; i < DP_HTT_TX_BW_LEN; i++) { 2366 index += qdf_snprint(&str_buf[index], 2367 DP_MAX_STRING_LEN - index, 2368 " %d:%d,", i, dp_stats_buf->tx_bw[i]); 2369 } 2370 DP_TRACE_STATS(FATAL, "tx_bw = %s ", str_buf); 2371 2372 index = 0; 2373 qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0); 2374 for (i = 0; i < HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS; i++) { 2375 index += qdf_snprint(&str_buf[index], 2376 DP_MAX_STRING_LEN - index, 2377 " %d:%d,", i, dp_stats_buf->tx_stbc[i]); 2378 } 2379 DP_TRACE_STATS(FATAL, "tx_stbc = %s ", str_buf); 2380 2381 index = 0; 2382 qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0); 2383 for (i = 0; i < DP_HTT_TX_PREAM_LEN; i++) { 2384 index += qdf_snprint(&str_buf[index], 2385 DP_MAX_STRING_LEN - index, 2386 " %d:%d,", i, dp_stats_buf->tx_pream[i]); 2387 } 2388 DP_TRACE_STATS(FATAL, "tx_pream = %s ", str_buf); 2389 2390 for (j = 0; j < DP_HTT_PDEV_TX_GI_LEN; j++) { 2391 index = 0; 2392 for (i = 0; i < HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS; i++) { 2393 index += qdf_snprint(&tx_gi[j][index], 2394 DP_MAX_STRING_LEN - index, 2395 " %d:%d,", i, 2396 dp_stats_buf->tx_gi[j][i]); 2397 } 2398 DP_TRACE_STATS(FATAL, "tx_gi[%d] = %s ", j, tx_gi[j]); 2399 } 2400 2401 index = 0; 2402 qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0); 2403 for (i = 0; i < DP_HTT_TX_DCM_LEN; i++) { 2404 index += qdf_snprint(&str_buf[index], 2405 DP_MAX_STRING_LEN - index, 2406 " %d:%d,", i, dp_stats_buf->tx_dcm[i]); 2407 } 2408 DP_TRACE_STATS(FATAL, "tx_dcm = %s\n", str_buf); 2409 2410 for (i = 0; i < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; i++) 2411 qdf_mem_free(tx_gi[i]); 2412 2413 qdf_mem_free(str_buf); 2414 } 2415 2416 /* 2417 * dp_print_rx_pdev_rate_stats_tlv: display htt_rx_pdev_rate_stats_tlv 2418 * @tag_buf: buffer containing the tlv htt_rx_pdev_rate_stats_tlv 2419 * 2420 * return:void 2421 */ 2422 static inline void dp_print_rx_pdev_rate_stats_tlv(uint32_t *tag_buf) 2423 { 2424 htt_rx_pdev_rate_stats_tlv *dp_stats_buf = 2425 (htt_rx_pdev_rate_stats_tlv *)tag_buf; 2426 uint8_t i, j; 2427 uint16_t index = 0; 2428 char *rssi_chain[DP_HTT_RSSI_CHAIN_LEN]; 2429 char *rx_gi[HTT_RX_PDEV_STATS_NUM_GI_COUNTERS]; 2430 char *str_buf = qdf_mem_malloc(DP_MAX_STRING_LEN); 2431 2432 if (!str_buf) { 2433 QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, 2434 FL("Output buffer not allocated")); 2435 return; 2436 } 2437 2438 for (i = 0; i < DP_HTT_RSSI_CHAIN_LEN; i++) 2439 rssi_chain[i] = qdf_mem_malloc(DP_MAX_STRING_LEN); 2440 for (i = 0; i < HTT_RX_PDEV_STATS_NUM_GI_COUNTERS; i++) 2441 rx_gi[i] = qdf_mem_malloc(DP_MAX_STRING_LEN); 2442 2443 DP_TRACE_STATS(FATAL, "HTT_RX_PDEV_RATE_STATS_TLV:"); 2444 DP_TRACE_STATS(FATAL, "mac_id__word = %d", 2445 dp_stats_buf->mac_id__word); 2446 DP_TRACE_STATS(FATAL, "nsts = %d", 2447 dp_stats_buf->nsts); 2448 DP_TRACE_STATS(FATAL, "rx_ldpc = %d", 2449 dp_stats_buf->rx_ldpc); 2450 DP_TRACE_STATS(FATAL, "rts_cnt = %d", 2451 dp_stats_buf->rts_cnt); 2452 DP_TRACE_STATS(FATAL, "rssi_mgmt = %d", 2453 dp_stats_buf->rssi_mgmt); 2454 DP_TRACE_STATS(FATAL, "rssi_data = %d", 2455 dp_stats_buf->rssi_data); 2456 DP_TRACE_STATS(FATAL, "rssi_comb = %d", 2457 dp_stats_buf->rssi_comb); 2458 2459 qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0); 2460 for (i = 0; i < DP_HTT_RX_MCS_LEN; i++) { 2461 index += qdf_snprint(&str_buf[index], 2462 DP_MAX_STRING_LEN - index, 2463 " %d:%d,", i, dp_stats_buf->rx_mcs[i]); 2464 } 2465 DP_TRACE_STATS(FATAL, "rx_mcs = %s ", str_buf); 2466 2467 index = 0; 2468 qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0); 2469 for (i = 0; i < DP_HTT_RX_NSS_LEN; i++) { 2470 /* 0 stands for NSS 1, 1 stands for NSS 2, etc. */ 2471 index += qdf_snprint(&str_buf[index], 2472 DP_MAX_STRING_LEN - index, 2473 " %d:%d,", (i + 1), 2474 dp_stats_buf->rx_nss[i]); 2475 } 2476 DP_TRACE_STATS(FATAL, "rx_nss = %s ", str_buf); 2477 2478 index = 0; 2479 qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0); 2480 for (i = 0; i < DP_HTT_RX_DCM_LEN; i++) { 2481 index += qdf_snprint(&str_buf[index], 2482 DP_MAX_STRING_LEN - index, 2483 " %d:%d,", i, dp_stats_buf->rx_dcm[i]); 2484 } 2485 DP_TRACE_STATS(FATAL, "rx_dcm = %s ", str_buf); 2486 2487 index = 0; 2488 qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0); 2489 for (i = 0; i < HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS; i++) { 2490 index += qdf_snprint(&str_buf[index], 2491 DP_MAX_STRING_LEN - index, 2492 " %d:%d,", i, dp_stats_buf->rx_stbc[i]); 2493 } 2494 DP_TRACE_STATS(FATAL, "rx_stbc = %s ", str_buf); 2495 2496 index = 0; 2497 qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0); 2498 for (i = 0; i < DP_HTT_RX_BW_LEN; i++) { 2499 index += qdf_snprint(&str_buf[index], 2500 DP_MAX_STRING_LEN - index, 2501 " %d:%d,", i, dp_stats_buf->rx_bw[i]); 2502 } 2503 DP_TRACE_STATS(FATAL, "rx_bw = %s ", str_buf); 2504 2505 for (j = 0; j < DP_HTT_RSSI_CHAIN_LEN; j++) { 2506 index = 0; 2507 for (i = 0; i < HTT_RX_PDEV_STATS_NUM_BW_COUNTERS; i++) { 2508 index += qdf_snprint(&rssi_chain[j][index], 2509 DP_MAX_STRING_LEN - index, 2510 " %d:%d,", i, 2511 dp_stats_buf->rssi_chain[j][i]); 2512 } 2513 DP_TRACE_STATS(FATAL, "rssi_chain[%d] = %s ", j, rssi_chain[j]); 2514 } 2515 2516 for (j = 0; j < DP_HTT_RX_GI_LEN; j++) { 2517 index = 0; 2518 for (i = 0; i < HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS; i++) { 2519 index += qdf_snprint(&rx_gi[j][index], 2520 DP_MAX_STRING_LEN - index, 2521 " %d:%d,", i, 2522 dp_stats_buf->rx_gi[j][i]); 2523 } 2524 DP_TRACE_STATS(FATAL, "rx_gi[%d] = %s ", j, rx_gi[j]); 2525 } 2526 2527 index = 0; 2528 qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0); 2529 for (i = 0; i < DP_HTT_RX_PREAM_LEN; i++) { 2530 index += qdf_snprint(&str_buf[index], 2531 DP_MAX_STRING_LEN - index, 2532 " %d:%d,", i, dp_stats_buf->rx_pream[i]); 2533 } 2534 DP_TRACE_STATS(FATAL, "rx_pream = %s\n", str_buf); 2535 for (i = 0; i < DP_HTT_RSSI_CHAIN_LEN; i++) 2536 qdf_mem_free(rssi_chain[i]); 2537 for (i = 0; i < HTT_RX_PDEV_STATS_NUM_GI_COUNTERS; i++) 2538 qdf_mem_free(rx_gi[i]); 2539 2540 qdf_mem_free(str_buf); 2541 } 2542 2543 /* 2544 * dp_print_rx_soc_fw_stats_tlv: display htt_rx_soc_fw_stats_tlv 2545 * @tag_buf: buffer containing the tlv htt_rx_soc_fw_stats_tlv 2546 * 2547 * return:void 2548 */ 2549 static inline void dp_print_rx_soc_fw_stats_tlv(uint32_t *tag_buf) 2550 { 2551 htt_rx_soc_fw_stats_tlv *dp_stats_buf = 2552 (htt_rx_soc_fw_stats_tlv *)tag_buf; 2553 2554 DP_TRACE_STATS(FATAL, "HTT_RX_SOC_FW_STATS_TLV:"); 2555 DP_TRACE_STATS(FATAL, "fw_reo_ring_data_msdu = %d", 2556 dp_stats_buf->fw_reo_ring_data_msdu); 2557 DP_TRACE_STATS(FATAL, "fw_to_host_data_msdu_bcmc = %d", 2558 dp_stats_buf->fw_to_host_data_msdu_bcmc); 2559 DP_TRACE_STATS(FATAL, "fw_to_host_data_msdu_uc = %d", 2560 dp_stats_buf->fw_to_host_data_msdu_uc); 2561 DP_TRACE_STATS(FATAL, "ofld_remote_data_buf_recycle_cnt = %d", 2562 dp_stats_buf->ofld_remote_data_buf_recycle_cnt); 2563 DP_TRACE_STATS(FATAL, "ofld_remote_free_buf_indication_cnt = %d", 2564 dp_stats_buf->ofld_remote_free_buf_indication_cnt); 2565 DP_TRACE_STATS(FATAL, "ofld_buf_to_host_data_msdu_uc = %d ", 2566 dp_stats_buf->ofld_buf_to_host_data_msdu_uc); 2567 DP_TRACE_STATS(FATAL, "reo_fw_ring_to_host_data_msdu_uc = %d ", 2568 dp_stats_buf->reo_fw_ring_to_host_data_msdu_uc); 2569 DP_TRACE_STATS(FATAL, "wbm_sw_ring_reap = %d ", 2570 dp_stats_buf->wbm_sw_ring_reap); 2571 DP_TRACE_STATS(FATAL, "wbm_forward_to_host_cnt = %d ", 2572 dp_stats_buf->wbm_forward_to_host_cnt); 2573 DP_TRACE_STATS(FATAL, "wbm_target_recycle_cnt = %d ", 2574 dp_stats_buf->wbm_target_recycle_cnt); 2575 DP_TRACE_STATS(FATAL, "target_refill_ring_recycle_cnt = %d", 2576 dp_stats_buf->target_refill_ring_recycle_cnt); 2577 2578 } 2579 2580 /* 2581 * dp_print_rx_soc_fw_refill_ring_empty_tlv_v: display 2582 * htt_rx_soc_fw_refill_ring_empty_tlv_v 2583 * @tag_buf: buffer containing the tlv htt_rx_soc_fw_refill_ring_empty_tlv_v 2584 * 2585 * return:void 2586 */ 2587 static inline void dp_print_rx_soc_fw_refill_ring_empty_tlv_v(uint32_t *tag_buf) 2588 { 2589 htt_rx_soc_fw_refill_ring_empty_tlv_v *dp_stats_buf = 2590 (htt_rx_soc_fw_refill_ring_empty_tlv_v *)tag_buf; 2591 uint8_t i; 2592 uint16_t index = 0; 2593 uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2); 2594 char *refill_ring_empty_cnt = qdf_mem_malloc(DP_MAX_STRING_LEN); 2595 2596 if (!refill_ring_empty_cnt) { 2597 QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, 2598 FL("Output buffer not allocated")); 2599 return; 2600 } 2601 2602 tag_len = qdf_min(tag_len, (uint32_t)HTT_RX_STATS_REFILL_MAX_RING); 2603 2604 DP_TRACE_STATS(FATAL, "HTT_RX_SOC_FW_REFILL_RING_EMPTY_TLV_V:"); 2605 for (i = 0; i < tag_len; i++) { 2606 index += qdf_snprint(&refill_ring_empty_cnt[index], 2607 DP_MAX_STRING_LEN - index, 2608 " %d:%d,", i, 2609 dp_stats_buf->refill_ring_empty_cnt[i]); 2610 } 2611 DP_TRACE_STATS(FATAL, "refill_ring_empty_cnt = %s\n", 2612 refill_ring_empty_cnt); 2613 qdf_mem_free(refill_ring_empty_cnt); 2614 } 2615 2616 /* 2617 * dp_print_rx_soc_fw_refill_ring_num_refill_tlv_v: display 2618 * htt_rx_soc_fw_refill_ring_num_refill_tlv_v 2619 * @tag_buf: buffer containing the tlv htt_rx_soc_fw_refill_ring_num_refill_tlv 2620 * 2621 * return:void 2622 */ 2623 static inline void dp_print_rx_soc_fw_refill_ring_num_refill_tlv_v( 2624 uint32_t *tag_buf) 2625 { 2626 htt_rx_soc_fw_refill_ring_num_refill_tlv_v *dp_stats_buf = 2627 (htt_rx_soc_fw_refill_ring_num_refill_tlv_v *)tag_buf; 2628 uint8_t i; 2629 uint16_t index = 0; 2630 uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2); 2631 char *refill_ring_num_refill = qdf_mem_malloc(DP_MAX_STRING_LEN); 2632 2633 if (!refill_ring_num_refill) { 2634 QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, 2635 FL("Output buffer not allocated")); 2636 return; 2637 } 2638 2639 tag_len = qdf_min(tag_len, (uint32_t)HTT_TX_PDEV_MAX_URRN_STATS); 2640 2641 DP_TRACE_STATS(FATAL, "HTT_RX_SOC_FW_REFILL_RING_NUM_REFILL_TLV_V:"); 2642 for (i = 0; i < tag_len; i++) { 2643 index += qdf_snprint(&refill_ring_num_refill[index], 2644 DP_MAX_STRING_LEN - index, 2645 " %d:%d,", i, 2646 dp_stats_buf->refill_ring_num_refill[i]); 2647 } 2648 DP_TRACE_STATS(FATAL, "refill_ring_num_refill = %s\n", 2649 refill_ring_num_refill); 2650 qdf_mem_free(refill_ring_num_refill); 2651 } 2652 2653 /* 2654 * dp_print_rx_pdev_fw_stats_tlv: display htt_rx_pdev_fw_stats_tlv 2655 * @tag_buf: buffer containing the tlv htt_rx_pdev_fw_stats_tlv 2656 * 2657 * return:void 2658 */ 2659 static inline void dp_print_rx_pdev_fw_stats_tlv(uint32_t *tag_buf) 2660 { 2661 htt_rx_pdev_fw_stats_tlv *dp_stats_buf = 2662 (htt_rx_pdev_fw_stats_tlv *)tag_buf; 2663 uint8_t i; 2664 uint16_t index = 0; 2665 char fw_ring_mgmt_subtype[DP_MAX_STRING_LEN]; 2666 char fw_ring_ctrl_subtype[DP_MAX_STRING_LEN]; 2667 2668 DP_TRACE_STATS(FATAL, "HTT_RX_PDEV_FW_STATS_TLV:"); 2669 DP_TRACE_STATS(FATAL, "mac_id__word = %d", 2670 dp_stats_buf->mac_id__word); 2671 DP_TRACE_STATS(FATAL, "ppdu_recvd = %d", 2672 dp_stats_buf->ppdu_recvd); 2673 DP_TRACE_STATS(FATAL, "mpdu_cnt_fcs_ok = %d", 2674 dp_stats_buf->mpdu_cnt_fcs_ok); 2675 DP_TRACE_STATS(FATAL, "mpdu_cnt_fcs_err = %d", 2676 dp_stats_buf->mpdu_cnt_fcs_err); 2677 DP_TRACE_STATS(FATAL, "tcp_msdu_cnt = %d", 2678 dp_stats_buf->tcp_msdu_cnt); 2679 DP_TRACE_STATS(FATAL, "tcp_ack_msdu_cnt = %d", 2680 dp_stats_buf->tcp_ack_msdu_cnt); 2681 DP_TRACE_STATS(FATAL, "udp_msdu_cnt = %d", 2682 dp_stats_buf->udp_msdu_cnt); 2683 DP_TRACE_STATS(FATAL, "other_msdu_cnt = %d", 2684 dp_stats_buf->other_msdu_cnt); 2685 DP_TRACE_STATS(FATAL, "fw_ring_mpdu_ind = %d", 2686 dp_stats_buf->fw_ring_mpdu_ind); 2687 2688 for (i = 0; i < DP_HTT_FW_RING_MGMT_SUBTYPE_LEN; i++) { 2689 index += qdf_snprint(&fw_ring_mgmt_subtype[index], 2690 DP_MAX_STRING_LEN - index, 2691 " %d:%d,", i, 2692 dp_stats_buf->fw_ring_mgmt_subtype[i]); 2693 } 2694 DP_TRACE_STATS(FATAL, "fw_ring_mgmt_subtype = %s ", fw_ring_mgmt_subtype); 2695 2696 index = 0; 2697 for (i = 0; i < DP_HTT_FW_RING_CTRL_SUBTYPE_LEN; i++) { 2698 index += qdf_snprint(&fw_ring_ctrl_subtype[index], 2699 DP_MAX_STRING_LEN - index, 2700 " %d:%d,", i, 2701 dp_stats_buf->fw_ring_ctrl_subtype[i]); 2702 } 2703 DP_TRACE_STATS(FATAL, "fw_ring_ctrl_subtype = %s ", fw_ring_ctrl_subtype); 2704 DP_TRACE_STATS(FATAL, "fw_ring_mcast_data_msdu = %d", 2705 dp_stats_buf->fw_ring_mcast_data_msdu); 2706 DP_TRACE_STATS(FATAL, "fw_ring_bcast_data_msdu = %d", 2707 dp_stats_buf->fw_ring_bcast_data_msdu); 2708 DP_TRACE_STATS(FATAL, "fw_ring_ucast_data_msdu = %d", 2709 dp_stats_buf->fw_ring_ucast_data_msdu); 2710 DP_TRACE_STATS(FATAL, "fw_ring_null_data_msdu = %d", 2711 dp_stats_buf->fw_ring_null_data_msdu); 2712 DP_TRACE_STATS(FATAL, "fw_ring_mpdu_drop = %d", 2713 dp_stats_buf->fw_ring_mpdu_drop); 2714 DP_TRACE_STATS(FATAL, "ofld_local_data_ind_cnt = %d", 2715 dp_stats_buf->ofld_local_data_ind_cnt); 2716 DP_TRACE_STATS(FATAL, "ofld_local_data_buf_recycle_cnt = %d", 2717 dp_stats_buf->ofld_local_data_buf_recycle_cnt); 2718 DP_TRACE_STATS(FATAL, "drx_local_data_ind_cnt = %d", 2719 dp_stats_buf->drx_local_data_ind_cnt); 2720 DP_TRACE_STATS(FATAL, "drx_local_data_buf_recycle_cnt = %d", 2721 dp_stats_buf->drx_local_data_buf_recycle_cnt); 2722 DP_TRACE_STATS(FATAL, "local_nondata_ind_cnt = %d", 2723 dp_stats_buf->local_nondata_ind_cnt); 2724 DP_TRACE_STATS(FATAL, "local_nondata_buf_recycle_cnt = %d", 2725 dp_stats_buf->local_nondata_buf_recycle_cnt); 2726 DP_TRACE_STATS(FATAL, "fw_status_buf_ring_refill_cnt = %d", 2727 dp_stats_buf->fw_status_buf_ring_refill_cnt); 2728 DP_TRACE_STATS(FATAL, "fw_status_buf_ring_empty_cnt = %d", 2729 dp_stats_buf->fw_status_buf_ring_empty_cnt); 2730 DP_TRACE_STATS(FATAL, "fw_pkt_buf_ring_refill_cnt = %d", 2731 dp_stats_buf->fw_pkt_buf_ring_refill_cnt); 2732 DP_TRACE_STATS(FATAL, "fw_pkt_buf_ring_empty_cnt = %d", 2733 dp_stats_buf->fw_pkt_buf_ring_empty_cnt); 2734 DP_TRACE_STATS(FATAL, "fw_link_buf_ring_refill_cnt = %d", 2735 dp_stats_buf->fw_link_buf_ring_refill_cnt); 2736 DP_TRACE_STATS(FATAL, "fw_link_buf_ring_empty_cnt = %d", 2737 dp_stats_buf->fw_link_buf_ring_empty_cnt); 2738 DP_TRACE_STATS(FATAL, "host_pkt_buf_ring_refill_cnt = %d", 2739 dp_stats_buf->host_pkt_buf_ring_refill_cnt); 2740 DP_TRACE_STATS(FATAL, "host_pkt_buf_ring_empty_cnt = %d", 2741 dp_stats_buf->host_pkt_buf_ring_empty_cnt); 2742 DP_TRACE_STATS(FATAL, "mon_pkt_buf_ring_refill_cnt = %d", 2743 dp_stats_buf->mon_pkt_buf_ring_refill_cnt); 2744 DP_TRACE_STATS(FATAL, "mon_pkt_buf_ring_empty_cnt = %d", 2745 dp_stats_buf->mon_pkt_buf_ring_empty_cnt); 2746 DP_TRACE_STATS(FATAL, "mon_status_buf_ring_refill_cnt = %d", 2747 dp_stats_buf->mon_status_buf_ring_refill_cnt); 2748 DP_TRACE_STATS(FATAL, "mon_status_buf_ring_empty_cnt = %d", 2749 dp_stats_buf->mon_status_buf_ring_empty_cnt); 2750 DP_TRACE_STATS(FATAL, "mon_desc_buf_ring_refill_cnt = %d", 2751 dp_stats_buf->mon_desc_buf_ring_refill_cnt); 2752 DP_TRACE_STATS(FATAL, "mon_desc_buf_ring_empty_cnt = %d", 2753 dp_stats_buf->mon_desc_buf_ring_empty_cnt); 2754 DP_TRACE_STATS(FATAL, "mon_dest_ring_update_cnt = %d", 2755 dp_stats_buf->mon_dest_ring_update_cnt); 2756 DP_TRACE_STATS(FATAL, "mon_dest_ring_full_cnt = %d", 2757 dp_stats_buf->mon_dest_ring_full_cnt); 2758 DP_TRACE_STATS(FATAL, "rx_suspend_cnt = %d", 2759 dp_stats_buf->rx_suspend_cnt); 2760 DP_TRACE_STATS(FATAL, "rx_suspend_fail_cnt = %d", 2761 dp_stats_buf->rx_suspend_fail_cnt); 2762 DP_TRACE_STATS(FATAL, "rx_resume_cnt = %d", 2763 dp_stats_buf->rx_resume_cnt); 2764 DP_TRACE_STATS(FATAL, "rx_resume_fail_cnt = %d", 2765 dp_stats_buf->rx_resume_fail_cnt); 2766 DP_TRACE_STATS(FATAL, "rx_ring_switch_cnt = %d", 2767 dp_stats_buf->rx_ring_switch_cnt); 2768 DP_TRACE_STATS(FATAL, "rx_ring_restore_cnt = %d", 2769 dp_stats_buf->rx_ring_restore_cnt); 2770 DP_TRACE_STATS(FATAL, "rx_flush_cnt = %d\n", 2771 dp_stats_buf->rx_flush_cnt); 2772 } 2773 2774 /* 2775 * dp_print_rx_pdev_fw_ring_mpdu_err_tlv_v: display 2776 * htt_rx_pdev_fw_ring_mpdu_err_tlv_v 2777 * @tag_buf: buffer containing the tlv htt_rx_pdev_fw_ring_mpdu_err_tlv_v 2778 * 2779 * return:void 2780 */ 2781 static inline void dp_print_rx_pdev_fw_ring_mpdu_err_tlv_v(uint32_t *tag_buf) 2782 { 2783 htt_rx_pdev_fw_ring_mpdu_err_tlv_v *dp_stats_buf = 2784 (htt_rx_pdev_fw_ring_mpdu_err_tlv_v *)tag_buf; 2785 uint8_t i; 2786 uint16_t index = 0; 2787 char *fw_ring_mpdu_err = qdf_mem_malloc(DP_MAX_STRING_LEN); 2788 2789 if (!fw_ring_mpdu_err) { 2790 QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, 2791 FL("Output buffer not allocated")); 2792 return; 2793 } 2794 2795 DP_TRACE_STATS(FATAL, "HTT_RX_PDEV_FW_RING_MPDU_ERR_TLV_V:"); 2796 for (i = 0; i < DP_HTT_FW_RING_MPDU_ERR_LEN; i++) { 2797 index += qdf_snprint(&fw_ring_mpdu_err[index], 2798 DP_MAX_STRING_LEN - index, 2799 " %d:%d,", i, 2800 dp_stats_buf->fw_ring_mpdu_err[i]); 2801 } 2802 DP_TRACE_STATS(FATAL, "fw_ring_mpdu_err = %s\n", fw_ring_mpdu_err); 2803 qdf_mem_free(fw_ring_mpdu_err); 2804 } 2805 2806 /* 2807 * dp_print_rx_pdev_fw_mpdu_drop_tlv_v: display htt_rx_pdev_fw_mpdu_drop_tlv_v 2808 * @tag_buf: buffer containing the tlv htt_rx_pdev_fw_mpdu_drop_tlv_v 2809 * 2810 * return:void 2811 */ 2812 static inline void dp_print_rx_pdev_fw_mpdu_drop_tlv_v(uint32_t *tag_buf) 2813 { 2814 htt_rx_pdev_fw_mpdu_drop_tlv_v *dp_stats_buf = 2815 (htt_rx_pdev_fw_mpdu_drop_tlv_v *)tag_buf; 2816 uint8_t i; 2817 uint16_t index = 0; 2818 uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2); 2819 char *fw_mpdu_drop = qdf_mem_malloc(DP_MAX_STRING_LEN); 2820 2821 if (!fw_mpdu_drop) { 2822 QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, 2823 FL("Output buffer not allocated")); 2824 return; 2825 } 2826 2827 tag_len = qdf_min(tag_len, (uint32_t)HTT_RX_STATS_FW_DROP_REASON_MAX); 2828 2829 DP_TRACE_STATS(FATAL, "HTT_RX_PDEV_FW_MPDU_DROP_TLV_V:"); 2830 for (i = 0; i < tag_len; i++) { 2831 index += qdf_snprint(&fw_mpdu_drop[index], 2832 DP_MAX_STRING_LEN - index, 2833 " %d:%d,", i, dp_stats_buf->fw_mpdu_drop[i]); 2834 } 2835 DP_TRACE_STATS(FATAL, "fw_mpdu_drop = %s\n", fw_mpdu_drop); 2836 qdf_mem_free(fw_mpdu_drop); 2837 } 2838 2839 /* 2840 * dp_print_rx_soc_fw_refill_ring_num_rxdma_err_tlv() - Accounts for rxdma error 2841 * packets 2842 * 2843 * tag_buf - Buffer 2844 * Return - NULL 2845 */ 2846 static inline void dp_print_rx_soc_fw_refill_ring_num_rxdma_err_tlv(uint32_t *tag_buf) 2847 { 2848 htt_rx_soc_fw_refill_ring_num_rxdma_err_tlv_v *dp_stats_buf = 2849 (htt_rx_soc_fw_refill_ring_num_rxdma_err_tlv_v *)tag_buf; 2850 2851 uint8_t i; 2852 uint16_t index = 0; 2853 char rxdma_err_cnt[DP_MAX_STRING_LEN]; 2854 uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2); 2855 2856 tag_len = qdf_min(tag_len, (uint32_t)HTT_RX_RXDMA_MAX_ERR_CODE); 2857 2858 DP_TRACE_STATS(FATAL, "HTT_RX_SOC_FW_REFILL_RING_NUM_RXDMA_ERR_TLV_V"); 2859 2860 for (i = 0; i < tag_len; i++) { 2861 index += snprintf(&rxdma_err_cnt[index], 2862 DP_MAX_STRING_LEN - index, 2863 " %d:%d,", i, 2864 dp_stats_buf->rxdma_err[i]); 2865 } 2866 2867 DP_TRACE_STATS(FATAL, "rxdma_err = %s\n", rxdma_err_cnt); 2868 } 2869 2870 /* 2871 * dp_print_rx_soc_fw_refill_ring_num_reo_err_tlv() - Accounts for reo error 2872 * packets 2873 * 2874 * tag_buf - Buffer 2875 * Return - NULL 2876 */ 2877 static inline void dp_print_rx_soc_fw_refill_ring_num_reo_err_tlv(uint32_t *tag_buf) 2878 { 2879 htt_rx_soc_fw_refill_ring_num_reo_err_tlv_v *dp_stats_buf = 2880 (htt_rx_soc_fw_refill_ring_num_reo_err_tlv_v *)tag_buf; 2881 2882 uint8_t i; 2883 uint16_t index = 0; 2884 char reo_err_cnt[DP_MAX_STRING_LEN]; 2885 uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2); 2886 2887 tag_len = qdf_min(tag_len, (uint32_t)HTT_RX_REO_MAX_ERR_CODE); 2888 2889 DP_TRACE_STATS(FATAL, "HTT_RX_SOC_FW_REFILL_RING_NUM_REO_ERR_TLV_V"); 2890 2891 for (i = 0; i < tag_len; i++) { 2892 index += snprintf(&reo_err_cnt[index], 2893 DP_MAX_STRING_LEN - index, 2894 " %d:%d,", i, 2895 dp_stats_buf->reo_err[i]); 2896 } 2897 2898 DP_TRACE_STATS(FATAL, "reo_err = %s\n", reo_err_cnt); 2899 } 2900 2901 /* 2902 * dp_print_rx_reo_debug_stats_tlv() - REO Statistics 2903 * 2904 * tag_buf - Buffer 2905 * Return - NULL 2906 */ 2907 static inline void dp_print_rx_reo_debug_stats_tlv(uint32_t *tag_buf) 2908 { 2909 htt_rx_reo_resource_stats_tlv_v *dp_stats_buf = 2910 (htt_rx_reo_resource_stats_tlv_v *)tag_buf; 2911 2912 DP_TRACE_STATS(FATAL, "HTT_RX_REO_RESOURCE_STATS_TLV"); 2913 2914 DP_TRACE_STATS(FATAL, "sample_id: %d ", 2915 dp_stats_buf->sample_id); 2916 DP_TRACE_STATS(FATAL, "total_max: %d ", 2917 dp_stats_buf->total_max); 2918 DP_TRACE_STATS(FATAL, "total_avg: %d ", 2919 dp_stats_buf->total_avg); 2920 DP_TRACE_STATS(FATAL, "total_sample: %d ", 2921 dp_stats_buf->total_sample); 2922 DP_TRACE_STATS(FATAL, "non_zeros_avg: %d ", 2923 dp_stats_buf->non_zeros_avg); 2924 DP_TRACE_STATS(FATAL, "non_zeros_sample: %d ", 2925 dp_stats_buf->non_zeros_sample); 2926 DP_TRACE_STATS(FATAL, "last_non_zeros_max: %d ", 2927 dp_stats_buf->last_non_zeros_max); 2928 DP_TRACE_STATS(FATAL, "last_non_zeros_min: %d ", 2929 dp_stats_buf->last_non_zeros_min); 2930 DP_TRACE_STATS(FATAL, "last_non_zeros_avg: %d ", 2931 dp_stats_buf->last_non_zeros_avg); 2932 DP_TRACE_STATS(FATAL, "last_non_zeros_sample: %d\n ", 2933 dp_stats_buf->last_non_zeros_sample); 2934 } 2935 2936 /* 2937 * dp_print_rx_pdev_fw_stats_phy_err_tlv() - Accounts for phy errors 2938 * 2939 * tag_buf - Buffer 2940 * Return - NULL 2941 */ 2942 static inline void dp_print_rx_pdev_fw_stats_phy_err_tlv(uint32_t *tag_buf) 2943 { 2944 htt_rx_pdev_fw_stats_phy_err_tlv *dp_stats_buf = 2945 (htt_rx_pdev_fw_stats_phy_err_tlv *)tag_buf; 2946 2947 uint8_t i = 0; 2948 uint16_t index = 0; 2949 char phy_errs[DP_MAX_STRING_LEN]; 2950 2951 DP_TRACE_STATS(FATAL, "HTT_RX_PDEV_FW_STATS_PHY_ERR_TLV"); 2952 2953 DP_TRACE_STATS(FATAL, "mac_id_word: %d", 2954 dp_stats_buf->mac_id__word); 2955 DP_TRACE_STATS(FATAL, "total_phy_err_cnt: %d", 2956 dp_stats_buf->total_phy_err_cnt); 2957 2958 for (i = 0; i < HTT_STATS_PHY_ERR_MAX; i++) { 2959 index += snprintf(&phy_errs[index], 2960 DP_MAX_STRING_LEN - index, 2961 " %d:%d,", i, dp_stats_buf->phy_err[i]); 2962 } 2963 2964 DP_TRACE_STATS(FATAL, "phy_errs: %s\n", phy_errs); 2965 } 2966 2967 /* 2968 * dp_htt_stats_print_tag: function to select the tag type and 2969 * print the corresponding tag structure 2970 * @tag_type: tag type that is to be printed 2971 * @tag_buf: pointer to the tag structure 2972 * 2973 * return: void 2974 */ 2975 void dp_htt_stats_print_tag(uint8_t tag_type, uint32_t *tag_buf) 2976 { 2977 switch (tag_type) { 2978 case HTT_STATS_TX_PDEV_CMN_TAG: 2979 dp_print_tx_pdev_stats_cmn_tlv(tag_buf); 2980 break; 2981 case HTT_STATS_TX_PDEV_UNDERRUN_TAG: 2982 dp_print_tx_pdev_stats_urrn_tlv_v(tag_buf); 2983 break; 2984 case HTT_STATS_TX_PDEV_SIFS_TAG: 2985 dp_print_tx_pdev_stats_sifs_tlv_v(tag_buf); 2986 break; 2987 case HTT_STATS_TX_PDEV_FLUSH_TAG: 2988 dp_print_tx_pdev_stats_flush_tlv_v(tag_buf); 2989 break; 2990 2991 case HTT_STATS_TX_PDEV_PHY_ERR_TAG: 2992 dp_print_tx_pdev_stats_phy_err_tlv_v(tag_buf); 2993 break; 2994 2995 case HTT_STATS_STRING_TAG: 2996 dp_print_stats_string_tlv(tag_buf); 2997 break; 2998 2999 case HTT_STATS_TX_HWQ_CMN_TAG: 3000 dp_print_tx_hwq_stats_cmn_tlv(tag_buf); 3001 break; 3002 3003 case HTT_STATS_TX_HWQ_DIFS_LATENCY_TAG: 3004 dp_print_tx_hwq_difs_latency_stats_tlv_v(tag_buf); 3005 break; 3006 3007 case HTT_STATS_TX_HWQ_CMD_RESULT_TAG: 3008 dp_print_tx_hwq_cmd_result_stats_tlv_v(tag_buf); 3009 break; 3010 3011 case HTT_STATS_TX_HWQ_CMD_STALL_TAG: 3012 dp_print_tx_hwq_cmd_stall_stats_tlv_v(tag_buf); 3013 break; 3014 3015 case HTT_STATS_TX_HWQ_FES_STATUS_TAG: 3016 dp_print_tx_hwq_fes_result_stats_tlv_v(tag_buf); 3017 break; 3018 3019 case HTT_STATS_TX_TQM_GEN_MPDU_TAG: 3020 dp_print_tx_tqm_gen_mpdu_stats_tlv_v(tag_buf); 3021 break; 3022 3023 case HTT_STATS_TX_TQM_LIST_MPDU_TAG: 3024 dp_print_tx_tqm_list_mpdu_stats_tlv_v(tag_buf); 3025 break; 3026 3027 case HTT_STATS_TX_TQM_LIST_MPDU_CNT_TAG: 3028 dp_print_tx_tqm_list_mpdu_cnt_tlv_v(tag_buf); 3029 break; 3030 3031 case HTT_STATS_TX_TQM_CMN_TAG: 3032 dp_print_tx_tqm_cmn_stats_tlv(tag_buf); 3033 break; 3034 3035 case HTT_STATS_TX_TQM_PDEV_TAG: 3036 dp_print_tx_tqm_pdev_stats_tlv_v(tag_buf); 3037 break; 3038 3039 case HTT_STATS_TX_TQM_CMDQ_STATUS_TAG: 3040 dp_print_tx_tqm_cmdq_status_tlv(tag_buf); 3041 break; 3042 3043 case HTT_STATS_TX_DE_EAPOL_PACKETS_TAG: 3044 dp_print_tx_de_eapol_packets_stats_tlv(tag_buf); 3045 break; 3046 3047 case HTT_STATS_TX_DE_CLASSIFY_FAILED_TAG: 3048 dp_print_tx_de_classify_failed_stats_tlv(tag_buf); 3049 break; 3050 3051 case HTT_STATS_TX_DE_CLASSIFY_STATS_TAG: 3052 dp_print_tx_de_classify_stats_tlv(tag_buf); 3053 break; 3054 3055 case HTT_STATS_TX_DE_CLASSIFY_STATUS_TAG: 3056 dp_print_tx_de_classify_status_stats_tlv(tag_buf); 3057 break; 3058 3059 case HTT_STATS_TX_DE_ENQUEUE_PACKETS_TAG: 3060 dp_print_tx_de_enqueue_packets_stats_tlv(tag_buf); 3061 break; 3062 3063 case HTT_STATS_TX_DE_ENQUEUE_DISCARD_TAG: 3064 dp_print_tx_de_enqueue_discard_stats_tlv(tag_buf); 3065 break; 3066 3067 case HTT_STATS_TX_DE_CMN_TAG: 3068 dp_print_tx_de_cmn_stats_tlv(tag_buf); 3069 break; 3070 3071 case HTT_STATS_RING_IF_TAG: 3072 dp_print_ring_if_stats_tlv(tag_buf); 3073 break; 3074 3075 case HTT_STATS_TX_PDEV_MU_MIMO_STATS_TAG: 3076 dp_print_tx_pdev_mu_mimo_sch_stats_tlv(tag_buf); 3077 break; 3078 3079 case HTT_STATS_SFM_CMN_TAG: 3080 dp_print_sfm_cmn_tlv(tag_buf); 3081 break; 3082 3083 case HTT_STATS_SRING_STATS_TAG: 3084 dp_print_sring_stats_tlv(tag_buf); 3085 break; 3086 3087 case HTT_STATS_RX_PDEV_FW_STATS_TAG: 3088 dp_print_rx_pdev_fw_stats_tlv(tag_buf); 3089 break; 3090 3091 case HTT_STATS_RX_PDEV_FW_RING_MPDU_ERR_TAG: 3092 dp_print_rx_pdev_fw_ring_mpdu_err_tlv_v(tag_buf); 3093 break; 3094 3095 case HTT_STATS_RX_PDEV_FW_MPDU_DROP_TAG: 3096 dp_print_rx_pdev_fw_mpdu_drop_tlv_v(tag_buf); 3097 break; 3098 3099 case HTT_STATS_RX_SOC_FW_STATS_TAG: 3100 dp_print_rx_soc_fw_stats_tlv(tag_buf); 3101 break; 3102 3103 case HTT_STATS_RX_SOC_FW_REFILL_RING_EMPTY_TAG: 3104 dp_print_rx_soc_fw_refill_ring_empty_tlv_v(tag_buf); 3105 break; 3106 3107 case HTT_STATS_RX_SOC_FW_REFILL_RING_NUM_REFILL_TAG: 3108 dp_print_rx_soc_fw_refill_ring_num_refill_tlv_v( 3109 tag_buf); 3110 break; 3111 3112 case HTT_STATS_TX_PDEV_RATE_STATS_TAG: 3113 dp_print_tx_pdev_rate_stats_tlv(tag_buf); 3114 break; 3115 3116 case HTT_STATS_RX_PDEV_RATE_STATS_TAG: 3117 dp_print_rx_pdev_rate_stats_tlv(tag_buf); 3118 break; 3119 3120 case HTT_STATS_TX_PDEV_SCHEDULER_TXQ_STATS_TAG: 3121 dp_print_tx_pdev_stats_sched_per_txq_tlv(tag_buf); 3122 break; 3123 3124 case HTT_STATS_TX_SCHED_CMN_TAG: 3125 dp_print_stats_tx_sched_cmn_tlv(tag_buf); 3126 break; 3127 3128 case HTT_STATS_TX_PDEV_MUMIMO_MPDU_STATS_TAG: 3129 dp_print_tx_pdev_mu_mimo_mpdu_stats_tlv(tag_buf); 3130 break; 3131 3132 case HTT_STATS_SCHED_TXQ_CMD_POSTED_TAG: 3133 dp_print_sched_txq_cmd_posted_tlv_v(tag_buf); 3134 break; 3135 3136 case HTT_STATS_RING_IF_CMN_TAG: 3137 dp_print_ring_if_cmn_tlv(tag_buf); 3138 break; 3139 3140 case HTT_STATS_SFM_CLIENT_USER_TAG: 3141 dp_print_sfm_client_user_tlv_v(tag_buf); 3142 break; 3143 3144 case HTT_STATS_SFM_CLIENT_TAG: 3145 dp_print_sfm_client_tlv(tag_buf); 3146 break; 3147 3148 case HTT_STATS_TX_TQM_ERROR_STATS_TAG: 3149 dp_print_tx_tqm_error_stats_tlv(tag_buf); 3150 break; 3151 3152 case HTT_STATS_SCHED_TXQ_CMD_REAPED_TAG: 3153 dp_print_sched_txq_cmd_reaped_tlv_v(tag_buf); 3154 break; 3155 3156 case HTT_STATS_SRING_CMN_TAG: 3157 dp_print_sring_cmn_tlv(tag_buf); 3158 break; 3159 3160 case HTT_STATS_TX_SELFGEN_AC_ERR_STATS_TAG: 3161 dp_print_tx_selfgen_ac_err_stats_tlv(tag_buf); 3162 break; 3163 3164 case HTT_STATS_TX_SELFGEN_CMN_STATS_TAG: 3165 dp_print_tx_selfgen_cmn_stats_tlv(tag_buf); 3166 break; 3167 3168 case HTT_STATS_TX_SELFGEN_AC_STATS_TAG: 3169 dp_print_tx_selfgen_ac_stats_tlv(tag_buf); 3170 break; 3171 3172 case HTT_STATS_TX_SELFGEN_AX_STATS_TAG: 3173 dp_print_tx_selfgen_ax_stats_tlv(tag_buf); 3174 break; 3175 3176 case HTT_STATS_TX_SELFGEN_AX_ERR_STATS_TAG: 3177 dp_print_tx_selfgen_ax_err_stats_tlv(tag_buf); 3178 break; 3179 3180 case HTT_STATS_TX_HWQ_MUMIMO_SCH_STATS_TAG: 3181 dp_print_tx_hwq_mu_mimo_sch_stats_tlv(tag_buf); 3182 break; 3183 3184 case HTT_STATS_TX_HWQ_MUMIMO_MPDU_STATS_TAG: 3185 dp_print_tx_hwq_mu_mimo_mpdu_stats_tlv(tag_buf); 3186 break; 3187 3188 case HTT_STATS_TX_HWQ_MUMIMO_CMN_STATS_TAG: 3189 dp_print_tx_hwq_mu_mimo_cmn_stats_tlv(tag_buf); 3190 break; 3191 3192 case HTT_STATS_HW_INTR_MISC_TAG: 3193 dp_print_hw_stats_intr_misc_tlv(tag_buf); 3194 break; 3195 3196 case HTT_STATS_HW_WD_TIMEOUT_TAG: 3197 dp_print_hw_stats_wd_timeout_tlv(tag_buf); 3198 break; 3199 3200 case HTT_STATS_HW_PDEV_ERRS_TAG: 3201 dp_print_hw_stats_pdev_errs_tlv(tag_buf); 3202 break; 3203 3204 case HTT_STATS_COUNTER_NAME_TAG: 3205 dp_print_counter_tlv(tag_buf); 3206 break; 3207 3208 case HTT_STATS_TX_TID_DETAILS_TAG: 3209 dp_print_tx_tid_stats_tlv(tag_buf); 3210 break; 3211 3212 #ifdef CONFIG_WIN 3213 case HTT_STATS_TX_TID_DETAILS_V1_TAG: 3214 dp_print_tx_tid_stats_v1_tlv(tag_buf); 3215 break; 3216 #endif 3217 3218 case HTT_STATS_RX_TID_DETAILS_TAG: 3219 dp_print_rx_tid_stats_tlv(tag_buf); 3220 break; 3221 3222 case HTT_STATS_PEER_STATS_CMN_TAG: 3223 dp_print_peer_stats_cmn_tlv(tag_buf); 3224 break; 3225 3226 case HTT_STATS_PEER_DETAILS_TAG: 3227 dp_print_peer_details_tlv(tag_buf); 3228 break; 3229 3230 case HTT_STATS_PEER_MSDU_FLOWQ_TAG: 3231 dp_print_msdu_flow_stats_tlv(tag_buf); 3232 break; 3233 3234 case HTT_STATS_PEER_TX_RATE_STATS_TAG: 3235 dp_print_tx_peer_rate_stats_tlv(tag_buf); 3236 break; 3237 3238 case HTT_STATS_PEER_RX_RATE_STATS_TAG: 3239 dp_print_rx_peer_rate_stats_tlv(tag_buf); 3240 break; 3241 3242 case HTT_STATS_TX_DE_COMPL_STATS_TAG: 3243 dp_print_tx_de_compl_stats_tlv(tag_buf); 3244 break; 3245 3246 case HTT_STATS_RX_REFILL_RXDMA_ERR_TAG: 3247 dp_print_rx_soc_fw_refill_ring_num_rxdma_err_tlv(tag_buf); 3248 break; 3249 3250 case HTT_STATS_RX_REFILL_REO_ERR_TAG: 3251 dp_print_rx_soc_fw_refill_ring_num_reo_err_tlv(tag_buf); 3252 break; 3253 3254 case HTT_STATS_RX_REO_RESOURCE_STATS_TAG: 3255 dp_print_rx_reo_debug_stats_tlv(tag_buf); 3256 break; 3257 3258 case HTT_STATS_RX_PDEV_FW_STATS_PHY_ERR_TAG: 3259 dp_print_rx_pdev_fw_stats_phy_err_tlv(tag_buf); 3260 break; 3261 3262 default: 3263 break; 3264 } 3265 } 3266 3267 /* 3268 * dp_htt_stats_copy_tag: function to select the tag type and 3269 * copy the corresponding tag structure 3270 * @pdev: DP_PDEV handle 3271 * @tag_type: tag type that is to be printed 3272 * @tag_buf: pointer to the tag structure 3273 * 3274 * return: void 3275 */ 3276 void dp_htt_stats_copy_tag(struct dp_pdev *pdev, uint8_t tag_type, uint32_t *tag_buf) 3277 { 3278 void *dest_ptr = NULL; 3279 uint32_t size = 0; 3280 3281 switch (tag_type) { 3282 case HTT_STATS_TX_PDEV_CMN_TAG: 3283 dest_ptr = &pdev->stats.htt_tx_pdev_stats.cmn_tlv; 3284 size = sizeof(htt_tx_pdev_stats_cmn_tlv); 3285 break; 3286 case HTT_STATS_TX_PDEV_UNDERRUN_TAG: 3287 dest_ptr = &pdev->stats.htt_tx_pdev_stats.underrun_tlv; 3288 size = sizeof(htt_tx_pdev_stats_urrn_tlv_v); 3289 break; 3290 case HTT_STATS_TX_PDEV_SIFS_TAG: 3291 dest_ptr = &pdev->stats.htt_tx_pdev_stats.sifs_tlv; 3292 size = sizeof(htt_tx_pdev_stats_sifs_tlv_v); 3293 break; 3294 case HTT_STATS_TX_PDEV_FLUSH_TAG: 3295 dest_ptr = &pdev->stats.htt_tx_pdev_stats.flush_tlv; 3296 size = sizeof(htt_tx_pdev_stats_flush_tlv_v); 3297 break; 3298 case HTT_STATS_TX_PDEV_PHY_ERR_TAG: 3299 dest_ptr = &pdev->stats.htt_tx_pdev_stats.phy_err_tlv; 3300 size = sizeof(htt_tx_pdev_stats_phy_err_tlv_v); 3301 break; 3302 case HTT_STATS_RX_PDEV_FW_STATS_TAG: 3303 dest_ptr = &pdev->stats.htt_rx_pdev_stats.fw_stats_tlv; 3304 size = sizeof(htt_rx_pdev_fw_stats_tlv); 3305 break; 3306 case HTT_STATS_RX_SOC_FW_STATS_TAG: 3307 dest_ptr = &pdev->stats.htt_rx_pdev_stats.soc_stats.fw_tlv; 3308 size = sizeof(htt_rx_soc_fw_stats_tlv); 3309 break; 3310 case HTT_STATS_RX_SOC_FW_REFILL_RING_EMPTY_TAG: 3311 dest_ptr = &pdev->stats.htt_rx_pdev_stats.soc_stats.fw_refill_ring_empty_tlv; 3312 size = sizeof(htt_rx_soc_fw_refill_ring_empty_tlv_v); 3313 break; 3314 case HTT_STATS_RX_SOC_FW_REFILL_RING_NUM_REFILL_TAG: 3315 dest_ptr = &pdev->stats.htt_rx_pdev_stats.soc_stats.fw_refill_ring_num_refill_tlv; 3316 size = sizeof(htt_rx_soc_fw_refill_ring_num_refill_tlv_v); 3317 break; 3318 case HTT_STATS_RX_PDEV_FW_RING_MPDU_ERR_TAG: 3319 dest_ptr = &pdev->stats.htt_rx_pdev_stats.fw_ring_mpdu_err_tlv; 3320 size = sizeof(htt_rx_pdev_fw_ring_mpdu_err_tlv_v); 3321 break; 3322 case HTT_STATS_RX_PDEV_FW_MPDU_DROP_TAG: 3323 dest_ptr = &pdev->stats.htt_rx_pdev_stats.fw_ring_mpdu_drop; 3324 size = sizeof(htt_rx_pdev_fw_mpdu_drop_tlv_v); 3325 break; 3326 default: 3327 break; 3328 } 3329 3330 if (dest_ptr) 3331 qdf_mem_copy(dest_ptr, tag_buf, size); 3332 } 3333 3334 #if defined(CONFIG_WIN) && WDI_EVENT_ENABLE 3335 QDF_STATUS dp_peer_stats_notify(struct dp_peer *peer) 3336 { 3337 struct dp_pdev *dp_pdev; 3338 struct cdp_interface_peer_stats peer_stats_intf; 3339 struct cdp_peer_stats *peer_stats = &peer->stats; 3340 3341 if (!peer->vdev) 3342 return QDF_STATUS_E_FAULT; 3343 3344 dp_pdev = peer->vdev->pdev; 3345 qdf_mem_zero(&peer_stats_intf, sizeof(peer_stats_intf)); 3346 if (peer_stats->rx.last_rssi != peer_stats->rx.rssi) 3347 peer_stats_intf.rssi_changed = true; 3348 3349 if ((peer_stats->rx.rssi && peer_stats_intf.rssi_changed) || 3350 (peer_stats->tx.tx_rate && 3351 peer_stats->tx.tx_rate != peer_stats->tx.last_tx_rate)) { 3352 peer_stats_intf.peer_hdl = peer->ctrl_peer; 3353 peer_stats_intf.last_peer_tx_rate = peer_stats->tx.last_tx_rate; 3354 peer_stats_intf.peer_tx_rate = peer_stats->tx.tx_rate; 3355 peer_stats_intf.peer_rssi = peer_stats->rx.rssi; 3356 peer_stats_intf.tx_packet_count = peer_stats->tx.ucast.num; 3357 peer_stats_intf.rx_packet_count = peer_stats->rx.to_stack.num; 3358 peer_stats_intf.tx_byte_count = peer_stats->tx.tx_success.bytes; 3359 peer_stats_intf.rx_byte_count = peer_stats->rx.to_stack.bytes; 3360 peer_stats_intf.per = peer_stats->tx.last_per; 3361 dp_wdi_event_handler(WDI_EVENT_PEER_STATS, dp_pdev->soc, 3362 (void *)&peer_stats_intf, 0, 3363 WDI_NO_VAL, dp_pdev->pdev_id); 3364 } 3365 3366 return QDF_STATUS_SUCCESS; 3367 } 3368 #endif 3369