1 /* 2 * Copyright (c) 2013-2018 The Linux Foundation. All rights reserved. 3 * 4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc. 5 * 6 * 7 * Permission to use, copy, modify, and/or distribute this software for 8 * any purpose with or without fee is hereby granted, provided that the 9 * above copyright notice and this permission notice appear in all 10 * copies. 11 * 12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 19 * PERFORMANCE OF THIS SOFTWARE. 20 */ 21 22 /* 23 * This file was originally distributed by Qualcomm Atheros, Inc. 24 * under proprietary terms before Copyright ownership was assigned 25 * to the Linux Foundation. 26 */ 27 28 /* Host Debug log implementation */ 29 30 #include "athdefs.h" 31 #include "a_types.h" 32 #include "dbglog_host.h" 33 #include "wmi.h" 34 #include "wmi_unified_api.h" 35 #include "wma.h" 36 #include "ol_defines.h" 37 #include <wlan_nlink_srv.h> 38 #include "host_diag_core_event.h" 39 #include "qwlan_version.h" 40 #include <net/sock.h> 41 #include <linux/netlink.h> 42 #include <linux/vmalloc.h> 43 44 #ifdef WLAN_OPEN_SOURCE 45 #include <linux/debugfs.h> 46 #endif /* WLAN_OPEN_SOURCE */ 47 #include "wmi_unified_priv.h" 48 49 #ifdef CNSS_GENL 50 #include <net/cnss_nl.h> 51 #include "wlan_cfg80211.h" 52 #endif 53 54 #ifdef MULTI_IF_NAME 55 #define CLD_DEBUGFS_DIR "cld" MULTI_IF_NAME 56 #else 57 58 #define CLD_DEBUGFS_DIR "cld" 59 #endif 60 #define DEBUGFS_BLOCK_NAME "dbglog_block" 61 62 #define ATH_MODULE_NAME fwlog 63 #include <a_debug.h> 64 #define FWLOG_DEBUG ATH_DEBUG_MAKE_MODULE_MASK(0) 65 66 #ifdef WLAN_DEBUG 67 68 static int get_version; 69 static int gprint_limiter; 70 static bool tgt_assert_enable; 71 72 static ATH_DEBUG_MASK_DESCRIPTION g_fwlog_debug_description[] = { 73 {FWLOG_DEBUG, "fwlog"}, 74 }; 75 76 ATH_DEBUG_INSTANTIATE_MODULE_VAR(fwlog, 77 "fwlog", 78 "Firmware Debug Log", 79 ATH_DEBUG_MASK_DEFAULTS | ATH_DEBUG_INFO | 80 ATH_DEBUG_ERR, 81 ATH_DEBUG_DESCRIPTION_COUNT 82 (g_fwlog_debug_description), 83 g_fwlog_debug_description); 84 #endif 85 86 module_dbg_print mod_print[WLAN_MODULE_ID_MAX]; 87 88 uint32_t dbglog_process_type = DBGLOG_PROCESS_NET_RAW; 89 90 static const char *dbglog_get_module_str(uint32_t module_id) 91 { 92 switch (module_id) { 93 case WLAN_MODULE_INF: 94 return "INF"; 95 case WLAN_MODULE_WMI: 96 return "WMI"; 97 case WLAN_MODULE_STA_PWRSAVE: 98 return "STA PS"; 99 case WLAN_MODULE_WHAL: 100 return "WHAL"; 101 case WLAN_MODULE_COEX: 102 return "COEX"; 103 case WLAN_MODULE_ROAM: 104 return "ROAM"; 105 case WLAN_MODULE_RESMGR_CHAN_MANAGER: 106 return "CHANMGR"; 107 case WLAN_MODULE_RESMGR: 108 return "RESMGR"; 109 case WLAN_MODULE_VDEV_MGR: 110 return "VDEV"; 111 case WLAN_MODULE_SCAN: 112 return "SCAN"; 113 case WLAN_MODULE_RATECTRL: 114 return "RC"; 115 case WLAN_MODULE_AP_PWRSAVE: 116 return "AP PS"; 117 case WLAN_MODULE_BLOCKACK: 118 return "BA"; 119 case WLAN_MODULE_MGMT_TXRX: 120 return "MGMT"; 121 case WLAN_MODULE_DATA_TXRX: 122 return "DATA"; 123 case WLAN_MODULE_HTT: 124 return "HTT"; 125 case WLAN_MODULE_HOST: 126 return "HOST"; 127 case WLAN_MODULE_BEACON: 128 return "BEACON"; 129 case WLAN_MODULE_OFFLOAD: 130 return "OFFLOAD"; 131 case WLAN_MODULE_WAL: 132 return "WAL"; 133 case WAL_MODULE_DE: 134 return "DE"; 135 case WLAN_MODULE_PCIELP: 136 return "PCIELP"; 137 case WLAN_MODULE_RTT: 138 return "RTT"; 139 case WLAN_MODULE_DCS: 140 return "DCS"; 141 case WLAN_MODULE_CACHEMGR: 142 return "CACHEMGR"; 143 case WLAN_MODULE_ANI: 144 return "ANI"; 145 case WLAN_MODULE_TEST: 146 return "TESTPOINT"; 147 case WLAN_MODULE_STA_SMPS: 148 return "STA_SMPS"; 149 case WLAN_MODULE_TDLS: 150 return "TDLS"; 151 case WLAN_MODULE_P2P: 152 return "P2P"; 153 case WLAN_MODULE_WOW: 154 return "WoW"; 155 case WLAN_MODULE_IBSS_PWRSAVE: 156 return "IBSS PS"; 157 case WLAN_MODULE_EXTSCAN: 158 return "ExtScan"; 159 case WLAN_MODULE_UNIT_TEST: 160 return "UNIT_TEST"; 161 case WLAN_MODULE_MLME: 162 return "MLME"; 163 case WLAN_MODULE_SUPPL: 164 return "SUPPLICANT"; 165 default: 166 return "UNKNOWN"; 167 } 168 } 169 170 char *DBG_MSG_ARR[WLAN_MODULE_ID_MAX][MAX_DBG_MSGS] = { 171 { 172 "INF_MSG_START", 173 "INF_ASSERTION_FAILED", 174 "INF_TARGET_ID", 175 "INF_MSG_END" 176 }, 177 { 178 "WMI_DBGID_DEFINITION_START", 179 "WMI_CMD_RX_XTND_PKT_TOO_SHORT", 180 "WMI_EXTENDED_CMD_NOT_HANDLED", 181 "WMI_CMD_RX_PKT_TOO_SHORT", 182 "WMI_CALLING_WMI_EXTENSION_FN", 183 "WMI_CMD_NOT_HANDLED", 184 "WMI_IN_SYNC", 185 "WMI_TARGET_WMI_SYNC_CMD", 186 "WMI_SET_SNR_THRESHOLD_PARAMS", 187 "WMI_SET_RSSI_THRESHOLD_PARAMS", 188 "WMI_SET_LQ_TRESHOLD_PARAMS", 189 "WMI_TARGET_CREATE_PSTREAM_CMD", 190 "WMI_WI_DTM_INUSE", 191 "WMI_TARGET_DELETE_PSTREAM_CMD", 192 "WMI_TARGET_IMPLICIT_DELETE_PSTREAM_CMD", 193 "WMI_TARGET_GET_BIT_RATE_CMD", 194 "WMI_GET_RATE_MASK_CMD_FIX_RATE_MASK_IS", 195 "WMI_TARGET_GET_AVAILABLE_CHANNELS_CMD", 196 "WMI_TARGET_GET_TX_PWR_CMD", 197 "WMI_FREE_EVBUF_WMIBUF", 198 "WMI_FREE_EVBUF_DATABUF", 199 "WMI_FREE_EVBUF_BADFLAG", 200 "WMI_HTC_RX_ERROR_DATA_PACKET", 201 "WMI_HTC_RX_SYNC_PAUSING_FOR_MBOX", 202 "WMI_INCORRECT_WMI_DATA_HDR_DROPPING_PKT", 203 "WMI_SENDING_READY_EVENT", 204 "WMI_SETPOWER_MDOE_TO_MAXPERF", 205 "WMI_SETPOWER_MDOE_TO_REC", 206 "WMI_BSSINFO_EVENT_FROM", 207 "WMI_TARGET_GET_STATS_CMD", 208 "WMI_SENDING_SCAN_COMPLETE_EVENT", 209 "WMI_SENDING_RSSI_INDB_THRESHOLD_EVENT ", 210 "WMI_SENDING_RSSI_INDBM_THRESHOLD_EVENT", 211 "WMI_SENDING_LINK_QUALITY_THRESHOLD_EVENT", 212 "WMI_SENDING_ERROR_REPORT_EVENT", 213 "WMI_SENDING_CAC_EVENT", 214 "WMI_TARGET_GET_ROAM_TABLE_CMD", 215 "WMI_TARGET_GET_ROAM_DATA_CMD", 216 "WMI_SENDING_GPIO_INTR_EVENT", 217 "WMI_SENDING_GPIO_ACK_EVENT", 218 "WMI_SENDING_GPIO_DATA_EVENT", 219 "WMI_CMD_RX", 220 "WMI_CMD_RX_XTND", 221 "WMI_EVENT_SEND", 222 "WMI_EVENT_SEND_XTND", 223 "WMI_CMD_PARAMS_DUMP_START", 224 "WMI_CMD_PARAMS_DUMP_END", 225 "WMI_CMD_PARAMS", 226 "WMI_EVENT_ALLOC_FAILURE", 227 "WMI_DBGID_DCS_PARAM_CMD", 228 "WMI_SEND_EVENT_WRONG_TLV", 229 "WMI_SEND_EVENT_NO_TLV_DEF", 230 "WMI_DBGID_DEFNITION_END", 231 }, 232 { 233 "PS_STA_DEFINITION_START", 234 "PS_STA_PM_ARB_REQUEST", 235 "PS_STA_DELIVER_EVENT", 236 "PS_STA_PSPOLL_SEQ_DONE", 237 "PS_STA_COEX_MODE", 238 "PS_STA_PSPOLL_ALLOW", 239 "PS_STA_SET_PARAM", 240 "PS_STA_SPECPOLL_TIMER_STARTED", 241 "PS_STA_SPECPOLL_TIMER_STOPPED", 242 }, 243 { 244 "WHAL_DBGID_DEFINITION_START", 245 "WHAL_ERROR_ANI_CONTROL", 246 "WHAL_ERROR_CHIP_TEST1", 247 "WHAL_ERROR_CHIP_TEST2", 248 "WHAL_ERROR_EEPROM_CHECKSUM", 249 "WHAL_ERROR_EEPROM_MACADDR", 250 "WHAL_ERROR_INTERRUPT_HIU", 251 "WHAL_ERROR_KEYCACHE_RESET", 252 "WHAL_ERROR_KEYCACHE_SET", 253 "WHAL_ERROR_KEYCACHE_TYPE", 254 "WHAL_ERROR_KEYCACHE_TKIPENTRY", 255 "WHAL_ERROR_KEYCACHE_WEPLENGTH", 256 "WHAL_ERROR_PHY_INVALID_CHANNEL", 257 "WHAL_ERROR_POWER_AWAKE", 258 "WHAL_ERROR_POWER_SET", 259 "WHAL_ERROR_RECV_STOPDMA", 260 "WHAL_ERROR_RECV_STOPPCU", 261 "WHAL_ERROR_RESET_CHANNF1", 262 "WHAL_ERROR_RESET_CHANNF2", 263 "WHAL_ERROR_RESET_PM", 264 "WHAL_ERROR_RESET_OFFSETCAL", 265 "WHAL_ERROR_RESET_RFGRANT", 266 "WHAL_ERROR_RESET_RXFRAME", 267 "WHAL_ERROR_RESET_STOPDMA", 268 "WHAL_ERROR_RESET_ERRID", 269 "WHAL_ERROR_RESET_ADCDCCAL1", 270 "WHAL_ERROR_RESET_ADCDCCAL2", 271 "WHAL_ERROR_RESET_TXIQCAL", 272 "WHAL_ERROR_RESET_RXIQCAL", 273 "WHAL_ERROR_RESET_CARRIERLEAK", 274 "WHAL_ERROR_XMIT_COMPUTE", 275 "WHAL_ERROR_XMIT_NOQUEUE", 276 "WHAL_ERROR_XMIT_ACTIVEQUEUE", 277 "WHAL_ERROR_XMIT_BADTYPE", 278 "WHAL_ERROR_XMIT_STOPDMA", 279 "WHAL_ERROR_INTERRUPT_BB_PANIC", 280 "WHAL_ERROR_PAPRD_MAXGAIN_ABOVE_WINDOW", 281 "WHAL_ERROR_QCU_HW_PAUSE_MISMATCH", 282 "WHAL_DBGID_DEFINITION_END", 283 }, 284 { 285 "COEX_DEBUGID_START", 286 "BTCOEX_DBG_MCI_1", 287 "BTCOEX_DBG_MCI_2", 288 "BTCOEX_DBG_MCI_3", 289 "BTCOEX_DBG_MCI_4", 290 "BTCOEX_DBG_MCI_5", 291 "BTCOEX_DBG_MCI_6", 292 "BTCOEX_DBG_MCI_7", 293 "BTCOEX_DBG_MCI_8", 294 "BTCOEX_DBG_MCI_9", 295 "BTCOEX_DBG_MCI_10", 296 "COEX_WAL_BTCOEX_INIT", 297 "COEX_WAL_PAUSE", 298 "COEX_WAL_RESUME", 299 "COEX_UPDATE_AFH", 300 "COEX_HWQ_EMPTY_CB", 301 "COEX_MCI_TIMER_HANDLER", 302 "COEX_MCI_RECOVER", 303 "ERROR_COEX_MCI_ISR", 304 "ERROR_COEX_MCI_GPM", 305 "COEX_ProfileType", 306 "COEX_LinkID", 307 "COEX_LinkState", 308 "COEX_LinkRole", 309 "COEX_LinkRate", 310 "COEX_VoiceType", 311 "COEX_TInterval", 312 "COEX_WRetrx", 313 "COEX_Attempts", 314 "COEX_PerformanceState", 315 "COEX_LinkType", 316 "COEX_RX_MCI_GPM_VERSION_QUERY", 317 "COEX_RX_MCI_GPM_VERSION_RESPONSE", 318 "COEX_RX_MCI_GPM_STATUS_QUERY", 319 "COEX_STATE_WLAN_VDEV_DOWN", 320 "COEX_STATE_WLAN_VDEV_START", 321 "COEX_STATE_WLAN_VDEV_CONNECTED", 322 "COEX_STATE_WLAN_VDEV_SCAN_STARTED", 323 "COEX_STATE_WLAN_VDEV_SCAN_END", 324 "COEX_STATE_WLAN_DEFAULT", 325 "COEX_CHANNEL_CHANGE", 326 "COEX_POWER_CHANGE", 327 "COEX_CONFIG_MGR", 328 "COEX_TX_MCI_GPM_BT_CAL_REQ", 329 "COEX_TX_MCI_GPM_BT_CAL_GRANT", 330 "COEX_TX_MCI_GPM_BT_CAL_DONE", 331 "COEX_TX_MCI_GPM_WLAN_CAL_REQ", 332 "COEX_TX_MCI_GPM_WLAN_CAL_GRANT", 333 "COEX_TX_MCI_GPM_WLAN_CAL_DONE", 334 "COEX_TX_MCI_GPM_BT_DEBUG", 335 "COEX_TX_MCI_GPM_VERSION_QUERY", 336 "COEX_TX_MCI_GPM_VERSION_RESPONSE", 337 "COEX_TX_MCI_GPM_STATUS_QUERY", 338 "COEX_TX_MCI_GPM_HALT_BT_GPM", 339 "COEX_TX_MCI_GPM_WLAN_CHANNELS", 340 "COEX_TX_MCI_GPM_BT_PROFILE_INFO", 341 "COEX_TX_MCI_GPM_BT_STATUS_UPDATE", 342 "COEX_TX_MCI_GPM_BT_UPDATE_FLAGS", 343 "COEX_TX_MCI_GPM_UNKNOWN", 344 "COEX_TX_MCI_SYS_WAKING", 345 "COEX_TX_MCI_LNA_TAKE", 346 "COEX_TX_MCI_LNA_TRANS", 347 "COEX_TX_MCI_SYS_SLEEPING", 348 "COEX_TX_MCI_REQ_WAKE", 349 "COEX_TX_MCI_REMOTE_RESET", 350 "COEX_TX_MCI_TYPE_UNKNOWN", 351 "COEX_WHAL_MCI_RESET", 352 "COEX_POLL_BT_CAL_DONE_TIMEOUT", 353 "COEX_WHAL_PAUSE", 354 "COEX_RX_MCI_GPM_BT_CAL_REQ", 355 "COEX_RX_MCI_GPM_BT_CAL_DONE", 356 "COEX_RX_MCI_GPM_BT_CAL_GRANT", 357 "COEX_WLAN_CAL_START", 358 "COEX_WLAN_CAL_RESULT", 359 "COEX_BtMciState", 360 "COEX_BtCalState", 361 "COEX_WlanCalState", 362 "COEX_RxReqWakeCount", 363 "COEX_RxRemoteResetCount", 364 "COEX_RESTART_CAL", 365 "COEX_SENDMSG_QUEUE", 366 "COEX_RESETSEQ_LNAINFO_TIMEOUT", 367 "COEX_MCI_ISR_IntRaw", 368 "COEX_MCI_ISR_Int1Raw", 369 "COEX_MCI_ISR_RxMsgRaw", 370 "COEX_WHAL_COEX_RESET", 371 "COEX_WAL_COEX_INIT", 372 "COEX_TXRX_CNT_LIMIT_ISR", 373 "COEX_CH_BUSY", 374 "COEX_REASSESS_WLAN_STATE", 375 "COEX_BTCOEX_WLAN_STATE_UPDATE", 376 "COEX_BT_NUM_OF_PROFILES", 377 "COEX_BT_NUM_OF_HID_PROFILES", 378 "COEX_BT_NUM_OF_ACL_PROFILES", 379 "COEX_BT_NUM_OF_HI_ACL_PROFILES", 380 "COEX_BT_NUM_OF_VOICE_PROFILES", 381 "COEX_WLAN_AGGR_LIMIT", 382 "COEX_BT_LOW_PRIO_BUDGET", 383 "COEX_BT_HI_PRIO_BUDGET", 384 "COEX_BT_IDLE_TIME", 385 "COEX_SET_COEX_WEIGHT", 386 "COEX_WLAN_WEIGHT_GROUP", 387 "COEX_BT_WEIGHT_GROUP", 388 "COEX_BT_INTERVAL_ALLOC", 389 "COEX_BT_SCHEME", 390 "COEX_BT_MGR", 391 "COEX_BT_SM_ERROR", 392 "COEX_SYSTEM_UPDATE", 393 "COEX_LOW_PRIO_LIMIT", 394 "COEX_HI_PRIO_LIMIT", 395 "COEX_BT_INTERVAL_START", 396 "COEX_WLAN_INTERVAL_START", 397 "COEX_NON_LINK_BUDGET", 398 "COEX_CONTENTION_MSG", 399 "COEX_SET_NSS", 400 "COEX_SELF_GEN_MASK", 401 "COEX_PROFILE_ERROR", 402 "COEX_WLAN_INIT", 403 "COEX_BEACON_MISS", 404 "COEX_BEACON_OK", 405 "COEX_BTCOEX_SCAN_ACTIVITY", 406 "COEX_SCAN_ACTIVITY", 407 "COEX_FORCE_QUIETTIME", 408 "COEX_BT_MGR_QUIETTIME", 409 "COEX_BT_INACTIVITY_TRIGGER", 410 "COEX_BT_INACTIVITY_REPORTED", 411 "COEX_TX_MCI_GPM_WLAN_PRIO", 412 "COEX_TX_MCI_GPM_BT_PAUSE_PROFILE", 413 "COEX_TX_MCI_GPM_WLAN_SET_ACL_INACTIVITY", 414 "COEX_RX_MCI_GPM_BT_ACL_INACTIVITY_REPORT", 415 "COEX_GENERIC_ERROR", 416 "COEX_RX_RATE_THRESHOLD", 417 "COEX_RSSI", 418 "COEX_WLAN_VDEV_NOTIF_START", /* 133 */ 419 "COEX_WLAN_VDEV_NOTIF_UP", /* 134 */ 420 "COEX_WLAN_VDEV_NOTIF_DOWN", /* 135 */ 421 "COEX_WLAN_VDEV_NOTIF_STOP", /* 136 */ 422 "COEX_WLAN_VDEV_NOTIF_ADD_PEER", /* 137 */ 423 "COEX_WLAN_VDEV_NOTIF_DELETE_PEER", /* 138 */ 424 "COEX_WLAN_VDEV_NOTIF_CONNECTED_PEER", /* 139 */ 425 "COEX_WLAN_VDEV_NOTIF_PAUSE", /* 140 */ 426 "COEX_WLAN_VDEV_NOTIF_UNPAUSED", /* 141 */ 427 "COEX_STATE_WLAN_VDEV_PEER_ADD", /* 142 */ 428 "COEX_STATE_WLAN_VDEV_CONNECTED_PEER", /* 143 */ 429 "COEX_STATE_WLAN_VDEV_DELETE_PEER", /* 144 */ 430 "COEX_STATE_WLAN_VDEV_PAUSE", /* 145 */ 431 "COEX_STATE_WLAN_VDEV_UNPAUSED", /* 146 */ 432 "COEX_SCAN_CALLBACK", /* 147 */ 433 "COEX_RC_SET_CHAINMASK", /* 148 */ 434 "COEX_TX_MCI_GPM_WLAN_SET_BT_RXSS_THRES", /* 149 */ 435 "COEX_TX_MCI_GPM_BT_RXSS_THRES_QUERY", /* 150 */ 436 "COEX_BT_RXSS_THRES", /* 151 */ 437 "COEX_BT_PROFILE_ADD_RMV", /* 152 */ 438 "COEX_BT_SCHED_INFO", /* 153 */ 439 "COEX_TRF_MGMT", /* 154 */ 440 "COEX_SCHED_START", /* 155 */ 441 "COEX_SCHED_RESULT", /* 156 */ 442 "COEX_SCHED_ERROR", /* 157 */ 443 "COEX_SCHED_PRE_OP", /* 158 */ 444 "COEX_SCHED_POST_OP", /* 159 */ 445 "COEX_RX_RATE", /* 160 */ 446 "COEX_ACK_PRIORITY", /* 161 */ 447 "COEX_STATE_WLAN_VDEV_UP", /* 162 */ 448 "COEX_STATE_WLAN_VDEV_PEER_UPDATE", /* 163 */ 449 "COEX_STATE_WLAN_VDEV_STOP", /* 164 */ 450 "COEX_WLAN_PAUSE_PEER", /* 165 */ 451 "COEX_WLAN_UNPAUSE_PEER", /* 166 */ 452 "COEX_WLAN_PAUSE_INTERVAL_START", /* 167 */ 453 "COEX_WLAN_POSTPAUSE_INTERVAL_START", /* 168 */ 454 "COEX_TRF_FREERUN", /* 169 */ 455 "COEX_TRF_SHAPE_PM", /* 170 */ 456 "COEX_TRF_SHAPE_PSP", /* 171 */ 457 "COEX_TRF_SHAPE_S_CTS", /* 172 */ 458 "COEX_CHAIN_CONFIG", /* 173 */ 459 "COEX_SYSTEM_MONITOR", /* 174 */ 460 "COEX_SINGLECHAIN_INIT", /* 175 */ 461 "COEX_MULTICHAIN_INIT", /* 176 */ 462 "COEX_SINGLECHAIN_DBG_1", /* 177 */ 463 "COEX_SINGLECHAIN_DBG_2", /* 178 */ 464 "COEX_SINGLECHAIN_DBG_3", /* 179 */ 465 "COEX_MULTICHAIN_DBG_1", /* 180 */ 466 "COEX_MULTICHAIN_DBG_2", /* 181 */ 467 "COEX_MULTICHAIN_DBG_3", /* 182 */ 468 "COEX_PSP_TX_CB", /* 183 */ 469 "COEX_PSP_RX_CB", /* 184 */ 470 "COEX_PSP_STAT_1", /* 185 */ 471 "COEX_PSP_SPEC_POLL", /* 186 */ 472 "COEX_PSP_READY_STATE", /* 187 */ 473 "COEX_PSP_TX_STATUS_STATE", /* 188 */ 474 "COEX_PSP_RX_STATUS_STATE_1", /* 189 */ 475 "COEX_PSP_NOT_READY_STATE", /* 190 */ 476 "COEX_PSP_DISABLED_STATE", /* 191 */ 477 "COEX_PSP_ENABLED_STATE", /* 192 */ 478 "COEX_PSP_SEND_PSPOLL", /* 193 */ 479 "COEX_PSP_MGR_ENTER", /* 194 */ 480 "COEX_PSP_MGR_RESULT", /* 195 */ 481 "COEX_PSP_NONWLAN_INTERVAL", /* 196 */ 482 "COEX_PSP_STAT_2", /* 197 */ 483 "COEX_PSP_RX_STATUS_STATE_2", /* 198 */ 484 "COEX_PSP_ERROR", /* 199 */ 485 "COEX_T2BT", /* 200 */ 486 "COEX_BT_DURATION", /* 201 */ 487 "COEX_TX_MCI_GPM_WLAN_SCHED_INFO_TRIG", /* 202 */ 488 "COEX_TX_MCI_GPM_WLAN_SCHED_INFO_TRIG_RSP", /* 203 */ 489 "COEX_TX_MCI_GPM_SCAN_OP", /* 204 */ 490 "COEX_TX_MCI_GPM_BT_PAUSE_GPM_TX", /* 205 */ 491 "COEX_CTS2S_SEND", /* 206 */ 492 "COEX_CTS2S_RESULT", /* 207 */ 493 "COEX_ENTER_OCS", /* 208 */ 494 "COEX_EXIT_OCS", /* 209 */ 495 "COEX_UPDATE_OCS", /* 210 */ 496 "COEX_STATUS_OCS", /* 211 */ 497 "COEX_STATS_BT", /* 212 */ 498 "COEX_MWS_WLAN_INIT", 499 "COEX_MWS_WBTMR_SYNC", 500 "COEX_MWS_TYPE2_RX", 501 "COEX_MWS_TYPE2_TX", 502 "COEX_MWS_WLAN_CHAVD", 503 "COEX_MWS_WLAN_CHAVD_INSERT", 504 "COEX_MWS_WLAN_CHAVD_MERGE", 505 "COEX_MWS_WLAN_CHAVD_RPT", 506 "COEX_MWS_CP_MSG_SEND", 507 "COEX_MWS_CP_ESCAPE", 508 "COEX_MWS_CP_UNFRAME", 509 "COEX_MWS_CP_SYNC_UPDATE", 510 "COEX_MWS_CP_SYNC", 511 "COEX_MWS_CP_WLAN_STATE_IND", 512 "COEX_MWS_CP_SYNCRESP_TIMEOUT", 513 "COEX_MWS_SCHEME_UPDATE", 514 "COEX_MWS_WLAN_EVENT", 515 "COEX_MWS_UART_UNESCAPE", 516 "COEX_MWS_UART_ENCODE_SEND", 517 "COEX_MWS_UART_RECV_DECODE", 518 "COEX_MWS_UL_HDL", 519 "COEX_MWS_REMOTE_EVENT", 520 "COEX_MWS_OTHER", 521 "COEX_MWS_ERROR", 522 "COEX_MWS_ANT_DIVERSITY", /* 237 */ 523 "COEX_P2P_GO", 524 "COEX_P2P_CLIENT", 525 "COEX_SCC_1", 526 "COEX_SCC_2", 527 "COEX_MCC_1", 528 "COEX_MCC_2", 529 "COEX_TRF_SHAPE_NOA", 530 "COEX_NOA_ONESHOT", 531 "COEX_NOA_PERIODIC", 532 "COEX_LE_1", 533 "COEX_LE_2", 534 "COEX_ANT_1", 535 "COEX_ANT_2", 536 "COEX_ENTER_NOA", 537 "COEX_EXIT_NOA", 538 "COEX_BT_SCAN_PROTECT", /* 253 */ 539 "COEX_DEBUG_ID_END" /* 254 */ 540 }, 541 { 542 "ROAM_DBGID_DEFINITION_START", 543 "ROAM_MODULE_INIT", 544 "ROAM_DEV_START", 545 "ROAM_CONFIG_RSSI_THRESH", 546 "ROAM_CONFIG_SCAN_PERIOD", 547 "ROAM_CONFIG_AP_PROFILE", 548 "ROAM_CONFIG_CHAN_LIST", 549 "ROAM_CONFIG_SCAN_PARAMS", 550 "ROAM_CONFIG_RSSI_CHANGE", 551 "ROAM_SCAN_TIMER_START", 552 "ROAM_SCAN_TIMER_EXPIRE", 553 "ROAM_SCAN_TIMER_STOP", 554 "ROAM_SCAN_STARTED", 555 "ROAM_SCAN_COMPLETE", 556 "ROAM_SCAN_CANCELLED", 557 "ROAM_CANDIDATE_FOUND", 558 "ROAM_RSSI_ACTIVE_SCAN", 559 "ROAM_RSSI_ACTIVE_ROAM", 560 "ROAM_RSSI_GOOD", 561 "ROAM_BMISS_FIRST_RECV", 562 "ROAM_DEV_STOP", 563 "ROAM_FW_OFFLOAD_ENABLE", 564 "ROAM_CANDIDATE_SSID_MATCH", 565 "ROAM_CANDIDATE_SECURITY_MATCH", 566 "ROAM_LOW_RSSI_INTERRUPT", 567 "ROAM_HIGH_RSSI_INTERRUPT", 568 "ROAM_SCAN_REQUESTED", 569 "ROAM_BETTER_CANDIDATE_FOUND", 570 "ROAM_BETTER_AP_EVENT", 571 "ROAM_CANCEL_LOW_PRIO_SCAN", 572 "ROAM_FINAL_BMISS_RECVD", 573 "ROAM_CONFIG_SCAN_MODE", 574 "ROAM_BMISS_FINAL_SCAN_ENABLE", 575 "ROAM_SUITABLE_AP_EVENT", 576 "ROAM_RSN_IE_PARSE_ERROR", 577 "ROAM_WPA_IE_PARSE_ERROR", 578 "ROAM_SCAN_CMD_FROM_HOST", 579 "ROAM_HO_SORT_CANDIDATE", 580 "ROAM_HO_SAVE_CANDIDATE", 581 "ROAM_HO_GET_CANDIDATE", 582 "ROAM_HO_OFFLOAD_SET_PARAM", 583 "ROAM_HO_SM", 584 "ROAM_HO_HTT_SAVED", 585 "ROAM_HO_SYNC_START", 586 "ROAM_HO_START", 587 "ROAM_HO_COMPLETE", 588 "ROAM_HO_STOP", 589 "ROAM_HO_HTT_FORWARD", 590 "ROAM_DBGID_DEFINITION_END" 591 }, 592 { 593 "RESMGR_CHMGR_DEFINITION_START", 594 "RESMGR_CHMGR_PAUSE_COMPLETE", 595 "RESMGR_CHMGR_CHANNEL_CHANGE", 596 "RESMGR_CHMGR_RESUME_COMPLETE", 597 "RESMGR_CHMGR_VDEV_PAUSE", 598 "RESMGR_CHMGR_VDEV_UNPAUSE", 599 "RESMGR_CHMGR_CTS2S_TX_COMP", 600 "RESMGR_CHMGR_CFEND_TX_COMP", 601 "RESMGR_CHMGR_DEFINITION_END" 602 }, 603 { 604 "RESMGR_DEFINITION_START", 605 "RESMGR_OCS_ALLOCRAM_SIZE", 606 "RESMGR_OCS_RESOURCES", 607 "RESMGR_LINK_CREATE", 608 "RESMGR_LINK_DELETE", 609 "RESMGR_OCS_CHREQ_CREATE", 610 "RESMGR_OCS_CHREQ_DELETE", 611 "RESMGR_OCS_CHREQ_START", 612 "RESMGR_OCS_CHREQ_STOP", 613 "RESMGR_OCS_SCHEDULER_INVOKED", 614 "RESMGR_OCS_CHREQ_GRANT", 615 "RESMGR_OCS_CHREQ_COMPLETE", 616 "RESMGR_OCS_NEXT_TSFTIME", 617 "RESMGR_OCS_TSF_TIMEOUT_US", 618 "RESMGR_OCS_CURR_CAT_WINDOW", 619 "RESMGR_OCS_CURR_CAT_WINDOW_REQ", 620 "RESMGR_OCS_CURR_CAT_WINDOW_TIMESLOT", 621 "RESMGR_OCS_CHREQ_RESTART", 622 "RESMGR_OCS_CLEANUP_CH_ALLOCATORS", 623 "RESMGR_OCS_PURGE_CHREQ", 624 "RESMGR_OCS_CH_ALLOCATOR_FREE", 625 "RESMGR_OCS_RECOMPUTE_SCHEDULE", 626 "RESMGR_OCS_NEW_CAT_WINDOW_REQ", 627 "RESMGR_OCS_NEW_CAT_WINDOW_TIMESLOT", 628 "RESMGR_OCS_CUR_CH_ALLOC", 629 "RESMGR_OCS_WIN_CH_ALLOC", 630 "RESMGR_OCS_SCHED_CH_CHANGE", 631 "RESMGR_OCS_CONSTRUCT_CAT_WIN", 632 "RESMGR_OCS_CHREQ_PREEMPTED", 633 "RESMGR_OCS_CH_SWITCH_REQ", 634 "RESMGR_OCS_CHANNEL_SWITCHED", 635 "RESMGR_OCS_CLEANUP_STALE_REQS", 636 "RESMGR_OCS_CHREQ_UPDATE", 637 "RESMGR_OCS_REG_NOA_NOTIF", 638 "RESMGR_OCS_DEREG_NOA_NOTIF", 639 "RESMGR_OCS_GEN_PERIODIC_NOA", 640 "RESMGR_OCS_RECAL_QUOTAS", 641 "RESMGR_OCS_GRANTED_QUOTA_STATS", 642 "RESMGR_OCS_ALLOCATED_QUOTA_STATS", 643 "RESMGR_OCS_REQ_QUOTA_STATS", 644 "RESMGR_OCS_TRACKING_TIME_FIRED", 645 "RESMGR_VC_ARBITRATE_ATTRIBUTES", 646 "RESMGR_OCS_LATENCY_STRICT_TIME_SLOT", 647 "RESMGR_OCS_CURR_TSF", 648 "RESMGR_OCS_QUOTA_REM", 649 "RESMGR_OCS_LATENCY_CASE_NO", 650 "RESMGR_OCS_WIN_CAT_DUR", 651 "RESMGR_VC_UPDATE_CUR_VC", 652 "RESMGR_VC_REG_UNREG_LINK", 653 "RESMGR_VC_PRINT_LINK", 654 "RESMGR_OCS_MISS_TOLERANCE", 655 "RESMGR_DYN_SCH_ALLOCRAM_SIZE", 656 "RESMGR_DYN_SCH_ENABLE", 657 "RESMGR_DYN_SCH_ACTIVE", 658 "RESMGR_DYN_SCH_CH_STATS_START", 659 "RESMGR_DYN_SCH_CH_SX_STATS", 660 "RESMGR_DYN_SCH_TOT_UTIL_PER", 661 "RESMGR_DYN_SCH_HOME_CH_QUOTA", 662 "RESMGR_OCS_REG_RECAL_QUOTA_NOTIF", 663 "RESMGR_OCS_DEREG_RECAL_QUOTA_NOTIF", 664 "RESMGR_DEFINITION_END" 665 }, 666 { 667 "VDEV_MGR_DEBID_DEFINITION_START", /* vdev Mgr */ 668 "VDEV_MGR_FIRST_BEACON_MISS_DETECTED", 669 "VDEV_MGR_FINAL_BEACON_MISS_DETECTED", 670 "VDEV_MGR_BEACON_IN_SYNC", 671 "VDEV_MGR_AP_KEEPALIVE_IDLE", 672 "VDEV_MGR_AP_KEEPALIVE_INACTIVE", 673 "VDEV_MGR_AP_KEEPALIVE_UNRESPONSIVE", 674 "VDEV_MGR_AP_TBTT_CONFIG", 675 "VDEV_MGR_FIRST_BCN_RECEIVED", 676 "VDEV_MGR_VDEV_START", 677 "VDEV_MGR_VDEV_UP", 678 "VDEV_MGR_PEER_AUTHORIZED", 679 "VDEV_MGR_OCS_HP_LP_REQ_POSTED", 680 "VDEV_MGR_VDEV_START_OCS_HP_REQ_COMPLETE", 681 "VDEV_MGR_VDEV_START_OCS_HP_REQ_STOP", 682 "VDEV_MGR_HP_START_TIME", 683 "VDEV_MGR_VDEV_PAUSE_DELAY_UPDATE", 684 "VDEV_MGR_VDEV_PAUSE_FAIL", 685 "VDEV_MGR_GEN_PERIODIC_NOA", 686 "VDEV_MGR_OFF_CHAN_GO_CH_REQ_SETUP", 687 "VDEV_MGR_DEFINITION_END", 688 }, 689 { 690 "SCAN_START_COMMAND_FAILED", /* scan */ 691 "SCAN_STOP_COMMAND_FAILED", 692 "SCAN_EVENT_SEND_FAILED", 693 "SCAN_ENGINE_START", 694 "SCAN_ENGINE_CANCEL_COMMAND", 695 "SCAN_ENGINE_STOP_DUE_TO_TIMEOUT", 696 "SCAN_EVENT_SEND_TO_HOST", 697 "SCAN_FWLOG_EVENT_ADD", 698 "SCAN_FWLOG_EVENT_REM", 699 "SCAN_FWLOG_EVENT_PREEMPTED", 700 "SCAN_FWLOG_EVENT_RESTARTED", 701 "SCAN_FWLOG_EVENT_COMPLETED", 702 }, 703 { 704 "RATECTRL_DBGID_DEFINITION_START", /* Rate ctrl */ 705 "RATECTRL_DBGID_ASSOC", 706 "RATECTRL_DBGID_NSS_CHANGE", 707 "RATECTRL_DBGID_CHAINMASK_ERR", 708 "RATECTRL_DBGID_UNEXPECTED_FRAME", 709 "RATECTRL_DBGID_WAL_RCQUERY", 710 "RATECTRL_DBGID_WAL_RCUPDATE", 711 "RATECTRL_DBGID_GTX_UPDATE", 712 "RATECTRL_DBGID_DEFINITION_END" 713 }, 714 { 715 "AP_PS_DBGID_DEFINITION_START", 716 "AP_PS_DBGID_UPDATE_TIM", 717 "AP_PS_DBGID_PEER_STATE_CHANGE", 718 "AP_PS_DBGID_PSPOLL", 719 "AP_PS_DBGID_PEER_CREATE", 720 "AP_PS_DBGID_PEER_DELETE", 721 "AP_PS_DBGID_VDEV_CREATE", 722 "AP_PS_DBGID_VDEV_DELETE", 723 "AP_PS_DBGID_SYNC_TIM", 724 "AP_PS_DBGID_NEXT_RESPONSE", 725 "AP_PS_DBGID_START_SP", 726 "AP_PS_DBGID_COMPLETED_EOSP", 727 "AP_PS_DBGID_TRIGGER", 728 "AP_PS_DBGID_DUPLICATE_TRIGGER", 729 "AP_PS_DBGID_UAPSD_RESPONSE", 730 "AP_PS_DBGID_SEND_COMPLETE", 731 "AP_PS_DBGID_SEND_N_COMPLETE", 732 "AP_PS_DBGID_DETECT_OUT_OF_SYNC_STA", 733 "AP_PS_DBGID_DELIVER_CAB", 734 }, 735 { 736 "" /* Block Ack */ 737 }, 738 /* Mgmt TxRx */ 739 { 740 "MGMT_TXRX_DBGID_DEFINITION_START", 741 "MGMT_TXRX_FORWARD_TO_HOST", 742 "MGMT_TXRX_DBGID_DEFINITION_END", 743 }, 744 { /* Data TxRx */ 745 "DATA_TXRX_DBGID_DEFINITION_START", 746 "DATA_TXRX_DBGID_RX_DATA_SEQ_LEN_INFO", 747 "DATA_TXRX_DBGID_DEFINITION_END", 748 }, 749 {"" /* HTT */ 750 }, 751 {"" /* HOST */ 752 }, 753 {"" /* BEACON */ 754 "BEACON_EVENT_SWBA_SEND_FAILED", 755 "BEACON_EVENT_EARLY_RX_BMISS_STATUS", 756 "BEACON_EVENT_EARLY_RX_SLEEP_SLOP", 757 "BEACON_EVENT_EARLY_RX_CONT_BMISS_TIMEOUT", 758 "BEACON_EVENT_EARLY_RX_PAUSE_SKIP_BCN_NUM", 759 "BEACON_EVENT_EARLY_RX_CLK_DRIFT", 760 "BEACON_EVENT_EARLY_RX_AP_DRIFT", 761 "BEACON_EVENT_EARLY_RX_BCN_TYPE",}, 762 { /* Offload Mgr */ 763 "OFFLOAD_MGR_DBGID_DEFINITION_START", 764 "OFFLOADMGR_REGISTER_OFFLOAD", 765 "OFFLOADMGR_DEREGISTER_OFFLOAD", 766 "OFFLOADMGR_NO_REG_DATA_HANDLERS", 767 "OFFLOADMGR_NO_REG_EVENT_HANDLERS", 768 "OFFLOADMGR_REG_OFFLOAD_FAILED", 769 "OFFLOADMGR_DBGID_DEFINITION_END", 770 }, 771 { 772 "WAL_DBGID_DEFINITION_START", 773 "WAL_DBGID_FAST_WAKE_REQUEST", 774 "WAL_DBGID_FAST_WAKE_RELEASE", 775 "WAL_DBGID_SET_POWER_STATE", 776 "WAL_DBGID_MISSING", 777 "WAL_DBGID_CHANNEL_CHANGE_FORCE_RESET", 778 "WAL_DBGID_CHANNEL_CHANGE", 779 "WAL_DBGID_VDEV_START", 780 "WAL_DBGID_VDEV_STOP", 781 "WAL_DBGID_VDEV_UP", 782 "WAL_DBGID_VDEV_DOWN", 783 "WAL_DBGID_SW_WDOG_RESET", 784 "WAL_DBGID_TX_SCH_REGISTER_TIDQ", 785 "WAL_DBGID_TX_SCH_UNREGISTER_TIDQ", 786 "WAL_DBGID_TX_SCH_TICKLE_TIDQ", 787 "WAL_DBGID_XCESS_FAILURES", 788 "WAL_DBGID_AST_ADD_WDS_ENTRY", 789 "WAL_DBGID_AST_DEL_WDS_ENTRY", 790 "WAL_DBGID_AST_WDS_ENTRY_PEER_CHG", 791 "WAL_DBGID_AST_WDS_SRC_LEARN_FAIL", 792 "WAL_DBGID_STA_KICKOUT", 793 "WAL_DBGID_BAR_TX_FAIL", 794 "WAL_DBGID_BAR_ALLOC_FAIL", 795 "WAL_DBGID_LOCAL_DATA_TX_FAIL", 796 "WAL_DBGID_SECURITY_PM4_QUEUED", 797 "WAL_DBGID_SECURITY_GM1_QUEUED", 798 "WAL_DBGID_SECURITY_PM4_SENT", 799 "WAL_DBGID_SECURITY_ALLOW_DATA", 800 "WAL_DBGID_SECURITY_UCAST_KEY_SET", 801 "WAL_DBGID_SECURITY_MCAST_KEY_SET", 802 "WAL_DBGID_SECURITY_ENCR_EN", 803 "WAL_DBGID_BB_WDOG_TRIGGERED", 804 "WAL_DBGID_RX_LOCAL_BUFS_LWM", 805 "WAL_DBGID_RX_LOCAL_DROP_LARGE_MGMT", 806 "WAL_DBGID_VHT_ILLEGAL_RATE_PHY_ERR_DETECTED", 807 "WAL_DBGID_DEV_RESET", 808 "WAL_DBGID_TX_BA_SETUP", 809 "WAL_DBGID_RX_BA_SETUP", 810 "WAL_DBGID_DEV_TX_TIMEOUT", 811 "WAL_DBGID_DEV_RX_TIMEOUT", 812 "WAL_DBGID_STA_VDEV_XRETRY", 813 "WAL_DBGID_DCS", 814 "WAL_DBGID_MGMT_TX_FAIL", 815 "WAL_DBGID_SET_M4_SENT_MANUALLY", 816 "WAL_DBGID_PROCESS_4_WAY_HANDSHAKE", 817 "WAL_DBGID_WAL_CHANNEL_CHANGE_START", 818 "WAL_DBGID_WAL_CHANNEL_CHANGE_COMPLETE", 819 "WAL_DBGID_WHAL_CHANNEL_CHANGE_START", 820 "WAL_DBGID_WHAL_CHANNEL_CHANGE_COMPLETE", 821 "WAL_DBGID_TX_MGMT_DESCID_SEQ_TYPE_LEN", 822 "WAL_DBGID_TX_DATA_MSDUID_SEQ_TYPE_LEN", 823 "WAL_DBGID_TX_DISCARD", 824 "WAL_DBGID_TX_MGMT_COMP_DESCID_STATUS", 825 "WAL_DBGID_TX_DATA_COMP_MSDUID_STATUS", 826 "WAL_DBGID_RESET_PCU_CYCLE_CNT", 827 "WAL_DBGID_SETUP_RSSI_INTERRUPTS", 828 "WAL_DBGID_BRSSI_CONFIG", 829 "WAL_DBGID_CURRENT_BRSSI_AVE", 830 "WAL_DBGID_BCN_TX_COMP", 831 "WAL_DBGID_SET_HW_CHAINMASK", 832 "WAL_DBGID_SET_HW_CHAINMASK_TXRX_STOP_FAIL", 833 "WAL_DBGID_GET_HW_CHAINMASK", 834 "WAL_DBGID_SMPS_DISABLE", 835 "WAL_DBGID_SMPS_ENABLE_HW_CNTRL", 836 "WAL_DBGID_SMPS_SWSEL_CHAINMASK", 837 "WAL_DBGID_DEFINITION_END", 838 }, 839 { 840 "" /* DE */ 841 }, 842 { 843 "" /* pcie lp */ 844 }, 845 { 846 /* RTT */ 847 "RTT_CALL_FLOW", 848 "RTT_REQ_SUB_TYPE", 849 "RTT_MEAS_REQ_HEAD", 850 "RTT_MEAS_REQ_BODY", 851 "", 852 "", 853 "RTT_INIT_GLOBAL_STATE", 854 "", 855 "RTT_REPORT", 856 "", 857 "RTT_ERROR_REPORT", 858 "RTT_TIMER_STOP", 859 "RTT_SEND_TM_FRAME", 860 "RTT_V3_RESP_CNT", 861 "RTT_V3_RESP_FINISH", 862 "RTT_CHANNEL_SWITCH_REQ", 863 "RTT_CHANNEL_SWITCH_GRANT", 864 "RTT_CHANNEL_SWITCH_COMPLETE", 865 "RTT_CHANNEL_SWITCH_PREEMPT", 866 "RTT_CHANNEL_SWITCH_STOP", 867 "RTT_TIMER_START", 868 }, 869 { /* RESOURCE */ 870 "RESOURCE_DBGID_DEFINITION_START", 871 "RESOURCE_PEER_ALLOC", 872 "RESOURCE_PEER_FREE", 873 "RESOURCE_PEER_ALLOC_WAL_PEER", 874 "RESOURCE_PEER_NBRHOOD_MGMT_ALLOC", 875 "RESOURCE_PEER_NBRHOOD_MGMT_INFO,RESOURCE_DBGID_DEFINITION_END", 876 }, 877 { /* DCS */ 878 "WLAN_DCS_DBGID_INIT", 879 "WLAN_DCS_DBGID_WMI_CWINT", 880 "WLAN_DCS_DBGID_TIMER", 881 "WLAN_DCS_DBGID_CMDG", 882 "WLAN_DCS_DBGID_CMDS", 883 "WLAN_DCS_DBGID_DINIT" 884 }, 885 { /* CACHEMGR */ 886 "" 887 }, 888 { /* ANI */ 889 "ANI_DBGID_POLL", 890 "ANI_DBGID_CONTROL", 891 "ANI_DBGID_OFDM_PARAMS", 892 "ANI_DBGID_CCK_PARAMS", 893 "ANI_DBGID_RESET", 894 "ANI_DBGID_RESTART", 895 "ANI_DBGID_OFDM_LEVEL", 896 "ANI_DBGID_CCK_LEVEL", 897 "ANI_DBGID_FIRSTEP", 898 "ANI_DBGID_CYCPWR", 899 "ANI_DBGID_MRC_CCK", 900 "ANI_DBGID_SELF_CORR_LOW", 901 "ANI_DBGID_ENABLE", 902 "ANI_DBGID_CURRENT_LEVEL", 903 "ANI_DBGID_POLL_PERIOD", 904 "ANI_DBGID_LISTEN_PERIOD", 905 "ANI_DBGID_OFDM_LEVEL_CFG", 906 "ANI_DBGID_CCK_LEVEL_CFG" 907 }, 908 { 909 "P2P_DBGID_DEFINITION_START", 910 "P2P_DEV_REGISTER", 911 "P2P_HANDLE_NOA", 912 "P2P_UPDATE_SCHEDULE_OPPS", 913 "P2P_UPDATE_SCHEDULE", 914 "P2P_UPDATE_START_TIME", 915 "P2P_UPDATE_START_TIME_DIFF_TSF32", 916 "P2P_UPDATE_START_TIME_FINAL", 917 "P2P_SETUP_SCHEDULE_TIMER", 918 "P2P_PROCESS_SCHEDULE_AFTER_CALC", 919 "P2P_PROCESS_SCHEDULE_STARTED_TIMER", 920 "P2P_CALC_SCHEDULES_FIRST_CALL_ALL_NEXT_EVENT", 921 "P2P_CALC_SCHEDULES_FIRST_VALUE", 922 "P2P_CALC_SCHEDULES_EARLIEST_NEXT_EVENT", 923 "P2P_CALC_SCHEDULES_SANITY_COUNT", 924 "P2P_CALC_SCHEDULES_CALL_ALL_NEXT_EVENT_FROM_WHILE_LOOP", 925 "P2P_CALC_SCHEDULES_TIMEOUT_1", 926 "P2P_CALC_SCHEDULES_TIMEOUT_2", 927 "P2P_FIND_ALL_NEXT_EVENTS_REQ_EXPIRED", 928 "P2P_FIND_ALL_NEXT_EVENTS_REQ_ACTIVE", 929 "P2P_FIND_NEXT_EVENT_REQ_NOT_STARTED", 930 "P2P_FIND_NEXT_EVENT_REQ_COMPLETE_NON_PERIODIC", 931 "P2P_FIND_NEXT_EVENT_IN_MID_OF_NOA", 932 "P2P_FIND_NEXT_EVENT_REQ_COMPLETE", 933 "P2P_SCHEDULE_TIMEOUT", 934 "P2P_CALC_SCHEDULES_ENTER", 935 "P2P_PROCESS_SCHEDULE_ENTER", 936 "P2P_FIND_ALL_NEXT_EVENTS_INDIVIDUAL_REQ_AFTER_CHANGE", 937 "P2P_FIND_ALL_NEXT_EVENTS_INDIVIDUAL_REQ_BEFORE_CHANGE", 938 "P2P_FIND_ALL_NEXT_EVENTS_ENTER", 939 "P2P_FIND_NEXT_EVENT_ENTER", 940 "P2P_NOA_GO_PRESENT", 941 "P2P_NOA_GO_ABSENT", 942 "P2P_GO_NOA_NOTIF", 943 "P2P_GO_TBTT_OFFSET", 944 "P2P_GO_GET_NOA_INFO", 945 "P2P_GO_ADD_ONE_SHOT_NOA", 946 "P2P_GO_GET_NOA_IE", 947 "P2P_GO_BCN_TX_COMP", 948 "P2P_DBGID_DEFINITION_END", 949 }, 950 { 951 "CSA_DBGID_DEFINITION_START", 952 "CSA_OFFLOAD_POOL_INIT", 953 "CSA_OFFLOAD_REGISTER_VDEV", 954 "CSA_OFFLOAD_DEREGISTER_VDEV", 955 "CSA_DEREGISTER_VDEV_ERROR", 956 "CSA_OFFLOAD_BEACON_RECEIVED", 957 "CSA_OFFLOAD_BEACON_CSA_RECV", 958 "CSA_OFFLOAD_CSA_RECV_ERROR_IE", 959 "CSA_OFFLOAD_CSA_TIMER_ERROR", 960 "CSA_OFFLOAD_CSA_TIMER_EXP", 961 "CSA_OFFLOAD_WMI_EVENT_ERROR", 962 "CSA_OFFLOAD_WMI_EVENT_SENT", 963 "CSA_OFFLOAD_WMI_CHANSWITCH_RECV", 964 "CSA_DBGID_DEFINITION_END", 965 }, 966 { /* NLO offload */ 967 "" 968 }, 969 { 970 "WLAN_CHATTER_DBGID_DEFINITION_START", 971 "WLAN_CHATTER_ENTER", 972 "WLAN_CHATTER_EXIT", 973 "WLAN_CHATTER_FILTER_HIT", 974 "WLAN_CHATTER_FILTER_MISS", 975 "WLAN_CHATTER_FILTER_FULL", 976 "WLAN_CHATTER_FILTER_TM_ADJ", 977 "WLAN_CHATTER_BUFFER_FULL", 978 "WLAN_CHATTER_TIMEOUT", 979 "WLAN_CHATTER_DBGID_DEFINITION_END", 980 }, 981 { 982 "WOW_DBGID_DEFINITION_START", 983 "WOW_ENABLE_CMDID", 984 "WOW_RECV_DATA_PKT", 985 "WOW_WAKE_HOST_DATA", 986 "WOW_RECV_MGMT", 987 "WOW_WAKE_HOST_MGMT", 988 "WOW_RECV_EVENT", 989 "WOW_WAKE_HOST_EVENT", 990 "WOW_INIT", 991 "WOW_RECV_MAGIC_PKT", 992 "WOW_RECV_BITMAP_PATTERN", 993 "WOW_AP_VDEV_DISALLOW", 994 "WOW_STA_VDEV_DISALLOW", 995 "WOW_P2PGO_VDEV_DISALLOW", 996 "WOW_NS_OFLD_ENABLE", 997 "WOW_ARP_OFLD_ENABLE", 998 "WOW_NS_ARP_OFLD_DISABLE", 999 "WOW_NS_RECEIVED", 1000 "WOW_NS_REPLIED", 1001 "WOW_ARP_RECEIVED", 1002 "WOW_ARP_REPLIED", 1003 "WOW_DBGID_DEFINITION_END", 1004 }, 1005 { /* WAL VDEV */ 1006 "" 1007 }, 1008 { /* WAL PDEV */ 1009 "" 1010 }, 1011 { /* TEST */ 1012 "TP_CHANGE_CHANNEL", 1013 "TP_LOCAL_SEND", 1014 }, 1015 { /* STA SMPS */ 1016 "STA_SMPS_DBGID_DEFINITION_START", 1017 "STA_SMPS_DBGID_CREATE_PDEV_INSTANCE", 1018 "STA_SMPS_DBGID_CREATE_VIRTUAL_CHAN_INSTANCE", 1019 "STA_SMPS_DBGID_DELETE_VIRTUAL_CHAN_INSTANCE", 1020 "STA_SMPS_DBGID_CREATE_STA_INSTANCE", 1021 "STA_SMPS_DBGID_DELETE_STA_INSTANCE", 1022 "STA_SMPS_DBGID_VIRTUAL_CHAN_SMPS_START", 1023 "STA_SMPS_DBGID_VIRTUAL_CHAN_SMPS_STOP", 1024 "STA_SMPS_DBGID_SEND_SMPS_ACTION_FRAME", 1025 "STA_SMPS_DBGID_HOST_FORCED_MODE", 1026 "STA_SMPS_DBGID_FW_FORCED_MODE", 1027 "STA_SMPS_DBGID_RSSI_THRESHOLD_CROSSED", 1028 "STA_SMPS_DBGID_SMPS_ACTION_FRAME_COMPLETION", 1029 "STA_SMPS_DBGID_DTIM_EBT_EVENT_CHMASK_UPDATE", 1030 "STA_SMPS_DBGID_DTIM_CHMASK_UPDATE", 1031 "STA_SMPS_DBGID_DTIM_BEACON_EVENT_CHMASK_UPDATE", 1032 "STA_SMPS_DBGID_DTIM_POWER_STATE_CHANGE", 1033 "STA_SMPS_DBGID_DTIM_CHMASK_UPDATE_SLEEP", 1034 "STA_SMPS_DBGID_DTIM_CHMASK_UPDATE_AWAKE", 1035 "SMPS_DBGID_DEFINITION_END", 1036 }, 1037 { /* SWBMISS */ 1038 "SWBMISS_DBGID_DEFINITION_START", 1039 "SWBMISS_ENABLED", 1040 "SWBMISS_DISABLED", 1041 "SWBMISS_DBGID_DEFINITION_END", 1042 }, 1043 { /* WMMAC */ 1044 "" 1045 }, 1046 { /* TDLS */ 1047 "TDLS_DBGID_DEFINITION_START", 1048 "TDLS_DBGID_VDEV_CREATE", 1049 "TDLS_DBGID_VDEV_DELETE", 1050 "TDLS_DBGID_ENABLED_PASSIVE", 1051 "TDLS_DBGID_ENABLED_ACTIVE", 1052 "TDLS_DBGID_DISABLED", 1053 "TDLS_DBGID_CONNTRACK_TIMER", 1054 "TDLS_DBGID_WAL_SET", 1055 "TDLS_DBGID_WAL_GET", 1056 "TDLS_DBGID_WAL_PEER_UPDATE_SET", 1057 "TDLS_DBGID_WAL_PEER_UPDATE_EVT", 1058 "TDLS_DBGID_WAL_VDEV_CREATE", 1059 "TDLS_DBGID_WAL_VDEV_DELETE", 1060 "TDLS_DBGID_WLAN_EVENT", 1061 "TDLS_DBGID_WLAN_PEER_UPDATE_SET", 1062 "TDLS_DBGID_PEER_EVT_DRP_THRESH", 1063 "TDLS_DBGID_PEER_EVT_DRP_RATE", 1064 "TDLS_DBGID_PEER_EVT_DRP_RSSI", 1065 "TDLS_DBGID_PEER_EVT_DISCOVER", 1066 "TDLS_DBGID_PEER_EVT_DELETE", 1067 "TDLS_DBGID_PEER_CAP_UPDATE", 1068 "TDLS_DBGID_UAPSD_SEND_PTI_FRAME", 1069 "TDLS_DBGID_UAPSD_SEND_PTI_FRAME2PEER", 1070 "TDLS_DBGID_UAPSD_START_PTR_TIMER", 1071 "TDLS_DBGID_UAPSD_CANCEL_PTR_TIMER", 1072 "TDLS_DBGID_UAPSD_PTR_TIMER_TIMEOUT", 1073 "TDLS_DBGID_UAPSD_STA_PS_EVENT_HANDLER", 1074 "TDLS_DBGID_UAPSD_PEER_EVENT_HANDLER", 1075 "TDLS_DBGID_UAPSD_PS_DEFAULT_SETTINGS", 1076 "TDLS_DBGID_UAPSD_GENERIC", 1077 }, 1078 { /* HB */ 1079 "WLAN_HB_DBGID_DEFINITION_START", 1080 "WLAN_HB_DBGID_INIT", 1081 "WLAN_HB_DBGID_TCP_GET_TXBUF_FAIL", 1082 "WLAN_HB_DBGID_TCP_SEND_FAIL", 1083 "WLAN_HB_DBGID_BSS_PEER_NULL", 1084 "WLAN_HB_DBGID_UDP_GET_TXBUF_FAIL", 1085 "WLAN_HB_DBGID_UDP_SEND_FAIL", 1086 "WLAN_HB_DBGID_WMI_CMD_INVALID_PARAM", 1087 "WLAN_HB_DBGID_WMI_CMD_INVALID_OP", 1088 "WLAN_HB_DBGID_WOW_NOT_ENTERED", 1089 "WLAN_HB_DBGID_ALLOC_SESS_FAIL", 1090 "WLAN_HB_DBGID_CTX_NULL", 1091 "WLAN_HB_DBGID_CHKSUM_ERR", 1092 "WLAN_HB_DBGID_UDP_TX", 1093 "WLAN_HB_DBGID_TCP_TX", 1094 "WLAN_HB_DBGID_DEFINITION_END", 1095 }, 1096 { /* TXBF */ 1097 "TXBFEE_DBGID_START", 1098 "TXBFEE_DBGID_NDPA_RECEIVED", 1099 "TXBFEE_DBGID_HOST_CONFIG_TXBFEE_TYPE", 1100 "TXBFER_DBGID_SEND_NDPA", 1101 "TXBFER_DBGID_GET_NDPA_BUF_FAIL", 1102 "TXBFER_DBGID_SEND_NDPA_FAIL", 1103 "TXBFER_DBGID_GET_NDP_BUF_FAIL", 1104 "TXBFER_DBGID_SEND_NDP_FAIL", 1105 "TXBFER_DBGID_GET_BRPOLL_BUF_FAIL", 1106 "TXBFER_DBGID_SEND_BRPOLL_FAIL", 1107 "TXBFER_DBGID_HOST_CONFIG_CMDID", 1108 "TXBFEE_DBGID_HOST_CONFIG_CMDID", 1109 "TXBFEE_DBGID_ENABLED_ENABLED_UPLOAD_H", 1110 "TXBFEE_DBGID_UPLOADH_CV_TAG", 1111 "TXBFEE_DBGID_UPLOADH_H_TAG", 1112 "TXBFEE_DBGID_CAPTUREH_RECEIVED", 1113 "TXBFEE_DBGID_PACKET_IS_STEERED", 1114 "TXBFEE_UPLOADH_EVENT_ALLOC_MEM_FAIL", 1115 "TXBFEE_DBGID_END", 1116 }, 1117 { /*BATCH SCAN */ 1118 }, 1119 { /*THERMAL MGR */ 1120 "THERMAL_MGR_DBGID_DEFINITION_START", 1121 "THERMAL_MGR_NEW_THRESH", 1122 "THERMAL_MGR_THRESH_CROSSED", 1123 "THERMAL_MGR_DBGID_DEFINITION END", 1124 }, 1125 { /* WLAN_MODULE_PHYERR_DFS */ 1126 "" 1127 }, 1128 { 1129 /* WLAN_MODULE_RMC */ 1130 "RMC_DBGID_DEFINITION_START", 1131 "RMC_CREATE_INSTANCE", 1132 "RMC_DELETE_INSTANCE", 1133 "RMC_LDR_SEL", 1134 "RMC_NO_LDR", 1135 "RMC_LDR_NOT_SEL", 1136 "RMC_LDR_INF_SENT", 1137 "RMC_PEER_ADD", 1138 "RMC_PEER_DELETE", 1139 "RMC_PEER_UNKNOWN", 1140 "RMC_SET_MODE", 1141 "RMC_SET_ACTION_PERIOD", 1142 "RMC_ACRION_FRAME_RX", 1143 "RMC_DBGID_DEFINITION_END", 1144 }, 1145 { 1146 /* WLAN_MODULE_STATS */ 1147 "WLAN_STATS_DBGID_DEFINITION_START", 1148 "WLAN_STATS_DBGID_EST_LINKSPEED_VDEV_EN_DIS", 1149 "WLAN_STATS_DBGID_EST_LINKSPEED_CHAN_TIME_START", 1150 "WLAN_STATS_DBGID_EST_LINKSPEED_CHAN_TIME_END", 1151 "WLAN_STATS_DBGID_EST_LINKSPEED_CALC", 1152 "WLAN_STATS_DBGID_EST_LINKSPEED_UPDATE_HOME_CHAN", 1153 "WLAN_STATS_DBGID_DEFINITION_END", 1154 }, 1155 { 1156 /* WLAN_MODULE_NAN */ 1157 }, 1158 { 1159 /* WLAN_MODULE_IBSS_PWRSAVE */ 1160 "IBSS_PS_DBGID_DEFINITION_START", 1161 "IBSS_PS_DBGID_PEER_CREATE", 1162 "IBSS_PS_DBGID_PEER_DELETE", 1163 "IBSS_PS_DBGID_VDEV_CREATE", 1164 "IBSS_PS_DBGID_VDEV_DELETE", 1165 "IBSS_PS_DBGID_VDEV_EVENT", 1166 "IBSS_PS_DBGID_PEER_EVENT", 1167 "IBSS_PS_DBGID_DELIVER_CAB", 1168 "IBSS_PS_DBGID_DELIVER_UC_DATA", 1169 "IBSS_PS_DBGID_DELIVER_UC_DATA_ERROR", 1170 "IBSS_PS_DBGID_UC_INACTIVITY_TMR_RESTART", 1171 "IBSS_PS_DBGID_MC_INACTIVITY_TMR_RESTART", 1172 "IBSS_PS_DBGID_NULL_TX_COMPLETION", 1173 "IBSS_PS_DBGID_ATIM_TIMER_START", 1174 "IBSS_PS_DBGID_UC_ATIM_SEND", 1175 "IBSS_PS_DBGID_BC_ATIM_SEND", 1176 "IBSS_PS_DBGID_UC_TIMEOUT", 1177 "IBSS_PS_DBGID_PWR_COLLAPSE_ALLOWED", 1178 "IBSS_PS_DBGID_PWR_COLLAPSE_NOT_ALLOWED", 1179 "IBSS_PS_DBGID_SET_PARAM", 1180 "IBSS_PS_DBGID_HOST_TX_PAUSE", 1181 "IBSS_PS_DBGID_HOST_TX_UNPAUSE", 1182 "IBSS_PS_DBGID_PS_DESC_BIN_HWM", 1183 "IBSS_PS_DBGID_PS_DESC_BIN_LWM", 1184 "IBSS_PS_DBGID_PS_KICKOUT_PEER", 1185 "IBSS_PS_DBGID_SET_PEER_PARAM", 1186 "IBSS_PS_DBGID_BCN_ATIM_WIN_MISMATCH", 1187 "IBSS_PS_DBGID_RX_CHAINMASK_CHANGE", 1188 }, 1189 { 1190 /* HIF UART Interface DBGIDs */ 1191 "HIF_UART_DBGID_START", 1192 "HIF_UART_DBGID_POWER_STATE", 1193 "HIF_UART_DBGID_TXRX_FLOW", 1194 "HIF_UART_DBGID_TXRX_CTRL_CHAR", 1195 "HIF_UART_DBGID_TXRX_BUF_DUMP", 1196 }, 1197 { 1198 /* LPI */ 1199 "" 1200 }, 1201 { 1202 /* EXTSCAN DBGIDs */ 1203 "EXTSCAN_START", 1204 "EXTSCAN_STOP", 1205 "EXTSCAN_CLEAR_ENTRY_CONTENT", 1206 "EXTSCAN_GET_FREE_ENTRY_SUCCESS", 1207 "EXTSCAN_GET_FREE_ENTRY_INCONSISTENT", 1208 "EXTSCAN_GET_FREE_ENTRY_NO_MORE_ENTRIES", 1209 "EXTSCAN_CREATE_ENTRY_SUCCESS", 1210 "EXTSCAN_CREATE_ENTRY_ERROR", 1211 "EXTSCAN_SEARCH_SCAN_ENTRY_QUEUE", 1212 "EXTSCAN_SEARCH_SCAN_ENTRY_KEY_FOUND", 1213 "EXTSCAN_SEARCH_SCAN_ENTRY_KEY_NOT_FOUND", 1214 "EXTSCAN_ADD_ENTRY", 1215 "EXTSCAN_BUCKET_SEND_OPERATION_EVENT", 1216 "EXTSCAN_BUCKET_SEND_OPERATION_EVENT_FAILED", 1217 "EXTSCAN_BUCKET_START_SCAN_CYCLE", 1218 "EXTSCAN_BUCKET_PERIODIC_TIMER", 1219 "EXTSCAN_SEND_START_STOP_EVENT", 1220 "EXTSCAN_NOTIFY_WLAN_CHANGE", 1221 "EXTSCAN_NOTIFY_WLAN_HOTLIST_MATCH", 1222 "EXTSCAN_MAIN_RECEIVED_FRAME", 1223 "EXTSCAN_MAIN_NO_SSID_IE", 1224 "EXTSCAN_MAIN_MALFORMED_FRAME", 1225 "EXTSCAN_FIND_BSSID_BY_REFERENCE", 1226 "EXTSCAN_FIND_BSSID_BY_REFERENCE_ERROR", 1227 "EXTSCAN_NOTIFY_TABLE_USAGE", 1228 "EXTSCAN_FOUND_RSSI_ENTRY", 1229 "EXTSCAN_BSSID_FOUND_RSSI_SAMPLE", 1230 "EXTSCAN_BSSID_ADDED_RSSI_SAMPLE", 1231 "EXTSCAN_BSSID_REPLACED_RSSI_SAMPLE", 1232 "EXTSCAN_BSSID_TRANSFER_CURRENT_SAMPLES", 1233 "EXTSCAN_BUCKET_PROCESS_SCAN_EVENT", 1234 "EXTSCAN_BUCKET_CANNOT_FIND_BUCKET", 1235 "EXTSCAN_START_SCAN_REQUEST_FAILED", 1236 "EXTSCAN_BUCKET_STOP_CURRENT_SCANS", 1237 "EXTSCAN_BUCKET_SCAN_STOP_REQUEST", 1238 "EXTSCAN_BUCKET_PERIODIC_TIMER_ERROR", 1239 "EXTSCAN_BUCKET_START_OPERATION", 1240 "EXTSCAN_START_INTERNAL_ERROR", 1241 "EXTSCAN_NOTIFY_HOTLIST_MATCH", 1242 "EXTSCAN_CONFIG_HOTLIST_TABLE", 1243 "EXTSCAN_CONFIG_WLAN_CHANGE_TABLE", 1244 }, 1245 { /* UNIT_TEST */ 1246 "UNIT_TEST_GEN", 1247 }, 1248 { /* MLME */ 1249 "MLME_DEBUG_CMN", 1250 "MLME_IF", 1251 "MLME_AUTH", 1252 "MLME_REASSOC", 1253 "MLME_DEAUTH", 1254 "MLME_DISASSOC", 1255 "MLME_ROAM", 1256 "MLME_RETRY", 1257 "MLME_TIMER", 1258 "MLME_FRMPARSE", 1259 }, 1260 { /*SUPPLICANT */ 1261 "SUPPL_INIT", 1262 "SUPPL_RECV_EAPOL", 1263 "SUPPL_RECV_EAPOL_TIMEOUT", 1264 "SUPPL_SEND_EAPOL", 1265 "SUPPL_MIC_MISMATCH", 1266 "SUPPL_FINISH", 1267 }, 1268 }; 1269 1270 int dbglog_module_log_enable(wmi_unified_t wmi_handle, uint32_t mod_id, 1271 bool isenable) 1272 { 1273 uint32_t val = 0; 1274 1275 if (mod_id > WLAN_MODULE_ID_MAX) { 1276 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 1277 ("dbglog_module_log_enable: Invalid module id %d\n", 1278 mod_id)); 1279 return -EINVAL; 1280 } 1281 1282 WMI_DBGLOG_SET_MODULE_ID(val, mod_id); 1283 if (isenable) { 1284 /* set it to global module level */ 1285 WMI_DBGLOG_SET_LOG_LEVEL(val, DBGLOG_INFO); 1286 } else { 1287 /* set it to ERROR level */ 1288 WMI_DBGLOG_SET_LOG_LEVEL(val, DBGLOG_ERR); 1289 } 1290 wma_config_debug_module_cmd(wmi_handle, WMI_DEBUG_LOG_PARAM_LOG_LEVEL, 1291 val, NULL, 0); 1292 1293 return 0; 1294 } 1295 1296 int dbglog_vap_log_enable(wmi_unified_t wmi_handle, uint16_t vap_id, 1297 bool isenable) 1298 { 1299 if (vap_id > DBGLOG_MAX_VDEVID) { 1300 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 1301 ("dbglog_vap_log_enable:Invalid vap_id %d\n", 1302 vap_id)); 1303 return -EINVAL; 1304 } 1305 1306 wma_config_debug_module_cmd(wmi_handle, 1307 isenable ? WMI_DEBUG_LOG_PARAM_VDEV_ENABLE : 1308 WMI_DEBUG_LOG_PARAM_VDEV_DISABLE, vap_id, 1309 NULL, 0); 1310 1311 return 0; 1312 } 1313 1314 int dbglog_set_log_lvl(wmi_unified_t wmi_handle, DBGLOG_LOG_LVL log_lvl) 1315 { 1316 uint32_t val = 0; 1317 1318 if (log_lvl > DBGLOG_LVL_MAX) { 1319 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 1320 ("dbglog_set_log_lvl:Invalid log level %d\n", 1321 log_lvl)); 1322 return -EINVAL; 1323 } 1324 1325 WMI_DBGLOG_SET_MODULE_ID(val, WMI_DEBUG_LOG_MODULE_ALL); 1326 WMI_DBGLOG_SET_LOG_LEVEL(val, log_lvl); 1327 wma_config_debug_module_cmd(wmi_handle, WMI_DEBUG_LOG_PARAM_LOG_LEVEL, 1328 val, NULL, 0); 1329 1330 return 0; 1331 } 1332 1333 int dbglog_set_mod_log_lvl(wmi_unified_t wmi_handle, uint32_t mod_log_lvl) 1334 { 1335 /* set the global module level to log_lvl */ 1336 wma_config_debug_module_cmd(wmi_handle, WMI_DEBUG_LOG_PARAM_LOG_LEVEL, 1337 mod_log_lvl, NULL, 0); 1338 1339 return 0; 1340 } 1341 1342 void 1343 dbglog_set_vap_enable_bitmap(wmi_unified_t wmi_handle, 1344 uint32_t vap_enable_bitmap) 1345 { 1346 wma_config_debug_module_cmd(wmi_handle, 1347 WMI_DEBUG_LOG_PARAM_VDEV_ENABLE_BITMAP, 1348 vap_enable_bitmap, NULL, 0); 1349 } 1350 1351 void 1352 dbglog_set_mod_enable_bitmap(wmi_unified_t wmi_handle, uint32_t log_level, 1353 uint32_t *mod_enable_bitmap, uint32_t bitmap_len) 1354 { 1355 wma_config_debug_module_cmd(wmi_handle, 1356 WMI_DEBUG_LOG_PARAM_MOD_ENABLE_BITMAP, 1357 log_level, mod_enable_bitmap, bitmap_len); 1358 } 1359 1360 int dbglog_report_enable(wmi_unified_t wmi_handle, bool isenable) 1361 { 1362 int bitmap[2] = { 0 }; 1363 1364 if (isenable) { 1365 /* set the vap enable bitmap */ 1366 dbglog_set_vap_enable_bitmap(wmi_handle, 0xFFFF); 1367 bitmap[0] = 0xFFFFFFFF; 1368 bitmap[1] = 0x1F; 1369 /* set the module level bitmap */ 1370 dbglog_set_mod_enable_bitmap(wmi_handle, 0x0, bitmap, 2); 1371 } else { 1372 dbglog_set_vap_enable_bitmap(wmi_handle, bitmap[0]); 1373 dbglog_set_mod_enable_bitmap(wmi_handle, DBGLOG_LVL_MAX, bitmap, 1374 2); 1375 } 1376 return 0; 1377 } 1378 1379 static char *dbglog_get_msg(uint32_t moduleid, uint32_t debugid) 1380 { 1381 static char unknown_str[64]; 1382 1383 if (moduleid < WLAN_MODULE_ID_MAX && debugid < MAX_DBG_MSGS) { 1384 char *str = DBG_MSG_ARR[moduleid][debugid]; 1385 if (str && str[0] != '\0') 1386 return str; 1387 } 1388 1389 snprintf(unknown_str, sizeof(unknown_str), 1390 "UNKNOWN %u:%u", moduleid, debugid); 1391 1392 return unknown_str; 1393 } 1394 1395 static 1396 void dbglog_printf(uint32_t timestamp, uint16_t vap_id, const char *fmt, ...) 1397 { 1398 char buf[128]; 1399 va_list ap; 1400 1401 if (vap_id < DBGLOG_MAX_VDEVID) { 1402 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, 1403 (DBGLOG_PRINT_PREFIX "[%u] vap-%u ", timestamp, 1404 vap_id)); 1405 } else { 1406 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, 1407 (DBGLOG_PRINT_PREFIX "[%u] ", timestamp)); 1408 } 1409 1410 va_start(ap, fmt); 1411 vsnprintf(buf, sizeof(buf), fmt, ap); 1412 va_end(ap); 1413 1414 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, ("%s\n", buf)); 1415 } 1416 1417 static void 1418 dbglog_printf_no_line_break(uint32_t timestamp, 1419 uint16_t vap_id, const char *fmt, ...) 1420 { 1421 char buf[128]; 1422 va_list ap; 1423 1424 if (vap_id < DBGLOG_MAX_VDEVID) { 1425 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, 1426 (DBGLOG_PRINT_PREFIX "[%u] vap-%u ", timestamp, 1427 vap_id)); 1428 } else { 1429 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, 1430 (DBGLOG_PRINT_PREFIX "[%u] ", timestamp)); 1431 } 1432 1433 va_start(ap, fmt); 1434 vsnprintf(buf, sizeof(buf), fmt, ap); 1435 va_end(ap); 1436 1437 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, ("%s", buf)); 1438 } 1439 1440 #define USE_NUMERIC 0 1441 1442 static A_BOOL 1443 dbglog_default_print_handler(uint32_t mod_id, uint16_t vap_id, uint32_t dbg_id, 1444 uint32_t timestamp, uint16_t numargs, 1445 uint32_t *args) 1446 { 1447 int i; 1448 1449 if (vap_id < DBGLOG_MAX_VDEVID) { 1450 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, 1451 (DBGLOG_PRINT_PREFIX "[%u] vap-%u %s ( ", 1452 timestamp, vap_id, dbglog_get_msg(mod_id, 1453 dbg_id))); 1454 } else { 1455 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, 1456 (DBGLOG_PRINT_PREFIX "[%u] %s ( ", timestamp, 1457 dbglog_get_msg(mod_id, dbg_id))); 1458 } 1459 1460 for (i = 0; i < numargs; i++) { 1461 #if USE_NUMERIC 1462 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, ("%u", args[i])); 1463 #else 1464 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, ("%#x", args[i])); 1465 #endif 1466 if ((i + 1) < numargs) { 1467 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, (", ")); 1468 } 1469 } 1470 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, (" )\n")); 1471 1472 return true; 1473 } 1474 1475 #define DBGLOG_PARSE_ARGS_STRING_LENGTH (DBGLOG_NUM_ARGS_MAX * 11 + 10) 1476 static int dbglog_print_raw_data(uint32_t *buffer, uint32_t length) 1477 { 1478 uint32_t timestamp; 1479 uint32_t debugid; 1480 uint32_t moduleid; 1481 uint16_t numargs, curArgs; 1482 uint32_t count = 0, totalWriteLen, writeLen; 1483 char parseArgsString[DBGLOG_PARSE_ARGS_STRING_LENGTH]; 1484 char *dbgidString; 1485 1486 while ((count + 1) < length) { 1487 1488 debugid = DBGLOG_GET_DBGID(buffer[count + 1]); 1489 moduleid = DBGLOG_GET_MODULEID(buffer[count + 1]); 1490 numargs = DBGLOG_GET_NUMARGS(buffer[count + 1]); 1491 timestamp = DBGLOG_GET_TIME_STAMP(buffer[count]); 1492 1493 if (moduleid < WLAN_MODULE_ID_MAX && debugid < MAX_DBG_MSGS 1494 && numargs <= DBGLOG_NUM_ARGS_MAX) { 1495 1496 OS_MEMZERO(parseArgsString, sizeof(parseArgsString)); 1497 totalWriteLen = 0; 1498 1499 if (!numargs || (count + numargs + 2 > length)) 1500 goto skip_args_processing; 1501 1502 for (curArgs = 0; curArgs < numargs; curArgs++) { 1503 /* 1504 * Using sprintf_s instead of sprintf, 1505 * to avoid length overflow 1506 */ 1507 writeLen = 1508 snprintf(parseArgsString + totalWriteLen, 1509 DBGLOG_PARSE_ARGS_STRING_LENGTH - 1510 totalWriteLen, "%x ", 1511 buffer[count + 2 + curArgs]); 1512 totalWriteLen += writeLen; 1513 } 1514 skip_args_processing: 1515 if (debugid < MAX_DBG_MSGS) { 1516 dbgidString = DBG_MSG_ARR[moduleid][debugid]; 1517 if (dbgidString != NULL) { 1518 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, 1519 ("fw:%s(%x %x):%s\n", 1520 dbgidString, timestamp, 1521 buffer[count + 1], 1522 parseArgsString)); 1523 } else { 1524 /* host need sync with FW id */ 1525 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, 1526 ("fw:%s:m:%x,id:%x(%x %x):%s\n", 1527 "UNKNOWN", moduleid, 1528 debugid, timestamp, 1529 buffer[count + 1], 1530 parseArgsString)); 1531 } 1532 } else if (debugid == 1533 DBGLOG_DBGID_SM_FRAMEWORK_PROXY_DBGLOG_MSG) { 1534 /* specific debugid */ 1535 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, 1536 ("fw:%s:m:%x,id:%x(%x %x):%s\n", 1537 "DBGLOG_SM_MSG", moduleid, 1538 debugid, timestamp, 1539 buffer[count + 1], 1540 parseArgsString)); 1541 } else { 1542 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, 1543 ("fw:%s:m:%x,id:%x(%x %x):%s\n", 1544 "UNKNOWN", moduleid, debugid, 1545 timestamp, buffer[count + 1], 1546 parseArgsString)); 1547 } 1548 } 1549 1550 /* 32 bit Time stamp + 32 bit Dbg header */ 1551 count += numargs + 2; 1552 } 1553 1554 return 0; 1555 1556 } 1557 1558 #ifdef WLAN_OPEN_SOURCE 1559 static int 1560 dbglog_debugfs_raw_data(wmi_unified_t wmi_handle, const uint8_t *buf, 1561 uint32_t length, uint32_t dropped) 1562 { 1563 struct fwdebug *fwlog = (struct fwdebug *)&wmi_handle->dbglog; 1564 struct dbglog_slot *slot; 1565 struct sk_buff *skb; 1566 size_t slot_len; 1567 1568 if (WARN_ON(length > ATH6KL_FWLOG_PAYLOAD_SIZE)) 1569 return -ENODEV; 1570 1571 slot_len = sizeof(*slot) + ATH6KL_FWLOG_PAYLOAD_SIZE; 1572 1573 skb = alloc_skb(slot_len, GFP_KERNEL); 1574 if (!skb) 1575 return -ENOMEM; 1576 1577 slot = (struct dbglog_slot *)skb_put(skb, slot_len); 1578 slot->diag_type = (uint32_t) DIAG_TYPE_FW_DEBUG_MSG; 1579 slot->timestamp = cpu_to_le32(jiffies); 1580 slot->length = cpu_to_le32(length); 1581 slot->dropped = cpu_to_le32(dropped); 1582 memcpy(slot->payload, buf, length); 1583 1584 /* Need to pad each record to fixed length ATH6KL_FWLOG_PAYLOAD_SIZE */ 1585 memset(slot->payload + length, 0, ATH6KL_FWLOG_PAYLOAD_SIZE - length); 1586 1587 spin_lock(&fwlog->fwlog_queue.lock); 1588 1589 __skb_queue_tail(&fwlog->fwlog_queue, skb); 1590 1591 complete(&fwlog->fwlog_completion); 1592 1593 /* drop oldest entries */ 1594 while (skb_queue_len(&fwlog->fwlog_queue) > ATH6KL_FWLOG_MAX_ENTRIES) { 1595 skb = __skb_dequeue(&fwlog->fwlog_queue); 1596 kfree_skb(skb); 1597 } 1598 1599 spin_unlock(&fwlog->fwlog_queue.lock); 1600 1601 return true; 1602 } 1603 #endif /* WLAN_OPEN_SOURCE */ 1604 1605 /** 1606 * nl_srv_bcast_fw_logs() - Wrapper func to send bcast msgs to FW logs mcast grp 1607 * @skb: sk buffer pointer 1608 * 1609 * Sends the bcast message to FW logs multicast group with generic nl socket 1610 * if CNSS_GENL is enabled. Else, use the legacy netlink socket to send. 1611 * 1612 * Return: zero on success, error code otherwise 1613 */ 1614 static int nl_srv_bcast_fw_logs(struct sk_buff *skb) 1615 { 1616 #ifdef CNSS_GENL 1617 return nl_srv_bcast(skb, CLD80211_MCGRP_FW_LOGS, WLAN_NL_MSG_CNSS_DIAG); 1618 #else 1619 return nl_srv_bcast(skb); 1620 #endif 1621 } 1622 1623 /** 1624 * send_fw_diag_nl_data - pack the data from fw diag event handler 1625 * @buffer: buffer of diag event 1626 * @len: length of the diag event 1627 * @event: the even type 1628 * 1629 * return: 0 if sent successfully, otherwise error code 1630 */ 1631 static int send_fw_diag_nl_data(const uint8_t *buffer, uint32_t len, 1632 uint32_t event_type) 1633 { 1634 struct sk_buff *skb_out; 1635 struct nlmsghdr *nlh; 1636 int res = 0; 1637 tAniNlHdr *wnl; 1638 int radio; 1639 int msg_len; 1640 1641 if (WARN_ON(len > ATH6KL_FWLOG_PAYLOAD_SIZE)) 1642 return -ENODEV; 1643 1644 if (nl_srv_is_initialized() != 0) 1645 return -EIO; 1646 1647 radio = cds_get_radio_index(); 1648 if (radio == -EINVAL) 1649 return -EIO; 1650 1651 if (cds_is_multicast_logging()) { 1652 msg_len = len + sizeof(radio); 1653 skb_out = nlmsg_new(msg_len, GFP_KERNEL); 1654 if (!skb_out) { 1655 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 1656 ("Failed to allocate new skb\n")); 1657 return -ENOMEM; 1658 } 1659 nlh = nlmsg_put(skb_out, 0, 0, WLAN_NL_MSG_CNSS_DIAG, msg_len, 1660 0); 1661 if (!nlh) { 1662 kfree_skb(skb_out); 1663 return -EMSGSIZE; 1664 } 1665 wnl = (tAniNlHdr *)nlh; 1666 wnl->radio = radio; 1667 1668 /* data buffer offset from nlmsg_hdr + sizeof(int) radio */ 1669 memcpy(nlmsg_data(nlh) + sizeof(radio), buffer, len); 1670 1671 res = nl_srv_bcast_fw_logs(skb_out); 1672 if ((res < 0) && (res != -ESRCH)) { 1673 AR_DEBUG_PRINTF(ATH_DEBUG_RSVD1, 1674 ("%s: nl_srv_bcast_fw_logs failed 0x%x\n", 1675 __func__, res)); 1676 return res; 1677 } 1678 } 1679 return res; 1680 } 1681 1682 /** 1683 * process_fw_diag_event_data() - process diag events and fw messages 1684 * @datap: data to be processed 1685 * @num_data: number of data chunks 1686 * 1687 * return: success 1688 */ 1689 static int 1690 process_fw_diag_event_data(uint8_t *datap, uint32_t num_data) 1691 { 1692 uint32_t diag_type; 1693 uint32_t nl_data_len; /* diag hdr + payload */ 1694 uint32_t diag_data_len; /* each fw diag payload */ 1695 struct wlan_diag_data *diag_data; 1696 1697 while (num_data > 0) { 1698 diag_data = (struct wlan_diag_data *)datap; 1699 diag_type = WLAN_DIAG_0_TYPE_GET(diag_data->word0); 1700 diag_data_len = WLAN_DIAG_0_LEN_GET(diag_data->word0); 1701 /* Length of diag struct and len of payload */ 1702 nl_data_len = sizeof(struct wlan_diag_data) + diag_data_len; 1703 if (nl_data_len > num_data) { 1704 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, 1705 ("processed all the messages\n")); 1706 return 0; 1707 } 1708 1709 switch (diag_type) { 1710 case DIAG_TYPE_FW_EVENT: 1711 return send_fw_diag_nl_data(datap, nl_data_len, 1712 diag_type); 1713 break; 1714 case DIAG_TYPE_FW_LOG: 1715 return send_fw_diag_nl_data(datap, nl_data_len, 1716 diag_type); 1717 break; 1718 } 1719 /* Move to the next event and send to cnss-diag */ 1720 datap += nl_data_len; 1721 num_data -= nl_data_len; 1722 } 1723 1724 return 0; 1725 } 1726 1727 static int 1728 send_diag_netlink_data(const uint8_t *buffer, uint32_t len, uint32_t cmd) 1729 { 1730 struct sk_buff *skb_out; 1731 struct nlmsghdr *nlh; 1732 int res = 0; 1733 struct dbglog_slot *slot; 1734 size_t slot_len; 1735 tAniNlHdr *wnl; 1736 int radio; 1737 1738 if (WARN_ON(len > ATH6KL_FWLOG_PAYLOAD_SIZE)) 1739 return -ENODEV; 1740 1741 if (nl_srv_is_initialized() != 0) 1742 return -EIO; 1743 1744 radio = cds_get_radio_index(); 1745 if (radio == -EINVAL) 1746 return -EIO; 1747 1748 if (cds_is_multicast_logging()) { 1749 slot_len = sizeof(*slot) + ATH6KL_FWLOG_PAYLOAD_SIZE + 1750 sizeof(radio); 1751 1752 skb_out = nlmsg_new(slot_len, GFP_KERNEL); 1753 if (!skb_out) { 1754 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 1755 ("Failed to allocate new skb\n")); 1756 return A_ERROR; 1757 } 1758 1759 nlh = nlmsg_put(skb_out, 0, 0, WLAN_NL_MSG_CNSS_DIAG, 1760 slot_len, 0); 1761 if (!nlh) { 1762 kfree_skb(skb_out); 1763 return -EMSGSIZE; 1764 } 1765 wnl = (tAniNlHdr *)nlh; 1766 wnl->radio = radio; 1767 /* data buffer offset from: nlmsg_hdr + sizeof(int) radio */ 1768 slot = (struct dbglog_slot *) (nlmsg_data(nlh) + sizeof(radio)); 1769 slot->diag_type = cmd; 1770 slot->timestamp = cpu_to_le32(jiffies); 1771 slot->length = cpu_to_le32(len); 1772 /* Version mapped to get_version here */ 1773 slot->dropped = get_version; 1774 memcpy(slot->payload, buffer, len); 1775 1776 res = nl_srv_bcast_fw_logs(skb_out); 1777 if ((res < 0) && (res != -ESRCH)) { 1778 AR_DEBUG_PRINTF(ATH_DEBUG_RSVD1, 1779 ("%s: nl_srv_bcast_fw_logs failed 0x%x\n", 1780 __func__, res)); 1781 return res; 1782 } 1783 } 1784 return res; 1785 } 1786 1787 static int 1788 dbglog_process_netlink_data(wmi_unified_t wmi_handle, const uint8_t *buffer, 1789 uint32_t len, uint32_t dropped) 1790 { 1791 struct sk_buff *skb_out; 1792 struct nlmsghdr *nlh; 1793 int res = 0; 1794 struct dbglog_slot *slot; 1795 size_t slot_len; 1796 tAniNlHdr *wnl; 1797 int radio; 1798 1799 if (WARN_ON(len > ATH6KL_FWLOG_PAYLOAD_SIZE)) 1800 return -ENODEV; 1801 1802 if (nl_srv_is_initialized() != 0) 1803 return -EIO; 1804 1805 radio = cds_get_radio_index(); 1806 if (radio == -EINVAL) 1807 return -EIO; 1808 1809 if (cds_is_multicast_logging()) { 1810 slot_len = sizeof(*slot) + ATH6KL_FWLOG_PAYLOAD_SIZE + 1811 sizeof(radio); 1812 1813 skb_out = nlmsg_new(slot_len, GFP_KERNEL); 1814 if (!skb_out) { 1815 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 1816 ("Failed to allocate new skb\n")); 1817 return A_ERROR; 1818 } 1819 1820 nlh = nlmsg_put(skb_out, 0, 0, WLAN_NL_MSG_CNSS_DIAG, 1821 slot_len, 0); 1822 if (!nlh) { 1823 kfree_skb(skb_out); 1824 return -EMSGSIZE; 1825 } 1826 wnl = (tAniNlHdr *)nlh; 1827 wnl->radio = radio; 1828 /* data buffer offset from: nlmsg_hdr + sizeof(int) radio */ 1829 slot = (struct dbglog_slot *) (nlmsg_data(nlh) + sizeof(radio)); 1830 slot->diag_type = (uint32_t) DIAG_TYPE_FW_DEBUG_MSG; 1831 slot->timestamp = cpu_to_le32(jiffies); 1832 slot->length = cpu_to_le32(len); 1833 slot->dropped = cpu_to_le32(dropped); 1834 memcpy(slot->payload, buffer, len); 1835 1836 res = nl_srv_bcast_fw_logs(skb_out); 1837 if ((res < 0) && (res != -ESRCH)) { 1838 AR_DEBUG_PRINTF(ATH_DEBUG_RSVD1, 1839 ("%s: nl_srv_bcast_fw_logs failed 0x%x\n", 1840 __func__, res)); 1841 return res; 1842 } 1843 } 1844 return res; 1845 } 1846 1847 /* 1848 * WMI diag data event handler, this function invoked as a CB 1849 * when there DIAG_EVENT, DIAG_MSG, DIAG_DBG to be 1850 * forwarded from the FW. This is the new implementation for 1851 * replacement of fw_dbg and dbg messages 1852 */ 1853 1854 static int diag_fw_handler(ol_scn_t scn, uint8_t *data, uint32_t datalen) 1855 { 1856 1857 tp_wma_handle wma = (tp_wma_handle) scn; 1858 WMI_DIAG_EVENTID_param_tlvs *param_buf; 1859 uint8_t *datap; 1860 uint32_t len = 0; 1861 uint32_t *buffer; 1862 1863 if (!wma) { 1864 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("NULL Pointer assigned\n")); 1865 return A_ERROR; 1866 } 1867 /* when fw asser occurs,host can't use TLV format. */ 1868 if (wma->is_fw_assert) { 1869 datap = data; 1870 len = datalen; 1871 wma->is_fw_assert = 0; 1872 } else { 1873 param_buf = (WMI_DIAG_EVENTID_param_tlvs *) data; 1874 if (!param_buf) { 1875 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 1876 ("Get NULL point message from FW\n")); 1877 return A_ERROR; 1878 } 1879 1880 datap = param_buf->bufp; 1881 len = param_buf->num_bufp; 1882 1883 if (!get_version) { 1884 if (len < 2*(sizeof(uint32_t))) { 1885 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 1886 ("len is less than expected\n")); 1887 return A_ERROR; 1888 } 1889 buffer = (uint32_t *) datap; 1890 buffer++; /* skip offset */ 1891 if (WLAN_DIAG_TYPE_CONFIG == DIAG_GET_TYPE(*buffer)) { 1892 if (len < 3*(sizeof(uint32_t))) { 1893 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 1894 ("len is less than expected\n")); 1895 return A_ERROR; 1896 } 1897 buffer++; /* skip */ 1898 if (DIAG_VERSION_INFO == DIAG_GET_ID(*buffer)) { 1899 if (len < 4*(sizeof(uint32_t))) { 1900 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 1901 ("len is less than expected\n")); 1902 return A_ERROR; 1903 } 1904 buffer++; /* skip */ 1905 /* get payload */ 1906 get_version = *buffer; 1907 } 1908 } 1909 } 1910 } 1911 if (dbglog_process_type == DBGLOG_PROCESS_PRINT_RAW) { 1912 if (!gprint_limiter) { 1913 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 1914 ("NOT Supported only supports net link socket\n")); 1915 gprint_limiter = true; 1916 } 1917 return 0; 1918 } 1919 1920 if (dbglog_process_type == DBGLOG_PROCESS_NET_RAW) { 1921 return send_diag_netlink_data((uint8_t *) datap, 1922 len, DIAG_TYPE_FW_MSG); 1923 } 1924 #ifdef WLAN_OPEN_SOURCE 1925 if (dbglog_process_type == DBGLOG_PROCESS_POOL_RAW) { 1926 if (!gprint_limiter) { 1927 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 1928 ("NOT Supported only supports net link socket\n")); 1929 gprint_limiter = true; 1930 } 1931 return 0; 1932 } 1933 #endif /* WLAN_OPEN_SOURCE */ 1934 if (!gprint_limiter) { 1935 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 1936 ("NOT Supported only supports net link socket\n")); 1937 gprint_limiter = true; 1938 } 1939 /* Always returns zero */ 1940 return 0; 1941 } 1942 1943 /* 1944 * WMI diag data event handler, this function invoked as a CB 1945 * when there DIAG_DATA to be forwarded from the FW. 1946 */ 1947 static int 1948 fw_diag_data_event_handler(ol_scn_t scn, uint8_t *data, uint32_t datalen) 1949 { 1950 1951 WMI_DIAG_DATA_CONTAINER_EVENTID_param_tlvs *param_buf; 1952 uint8_t *datap; 1953 uint32_t num_data; /* Total events */ 1954 1955 param_buf = (WMI_DIAG_DATA_CONTAINER_EVENTID_param_tlvs *) data; 1956 if (!param_buf) { 1957 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 1958 ("Got NULL point message from FW\n")); 1959 return A_ERROR; 1960 } 1961 1962 num_data = param_buf->num_bufp; 1963 1964 datap = (uint8_t *) param_buf->bufp; 1965 1966 return process_fw_diag_event_data(datap, num_data); 1967 } 1968 1969 int dbglog_parse_debug_logs(ol_scn_t scn, uint8_t *data, uint32_t datalen) 1970 { 1971 tp_wma_handle wma = (tp_wma_handle) scn; 1972 uint32_t count; 1973 uint32_t *buffer; 1974 uint32_t timestamp; 1975 uint32_t debugid; 1976 uint32_t moduleid; 1977 uint16_t vapid; 1978 uint16_t numargs; 1979 qdf_size_t length; 1980 uint32_t dropped; 1981 WMI_DEBUG_MESG_EVENTID_param_tlvs *param_buf; 1982 uint8_t *datap; 1983 uint32_t len; 1984 1985 if (!wma) { 1986 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("NULL Pointer assigned\n")); 1987 return A_ERROR; 1988 } 1989 /*when fw asser occurs,host can't use TLV format. */ 1990 if (wma->is_fw_assert) { 1991 datap = data; 1992 len = datalen; 1993 wma->is_fw_assert = 0; 1994 } else { 1995 param_buf = (WMI_DEBUG_MESG_EVENTID_param_tlvs *) data; 1996 if (!param_buf) { 1997 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 1998 ("Get NULL point message from FW\n")); 1999 return A_ERROR; 2000 } 2001 2002 datap = param_buf->bufp; 2003 len = param_buf->num_bufp; 2004 } 2005 2006 if (len < sizeof(dropped)) { 2007 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Invalid length\n")); 2008 return A_ERROR; 2009 } 2010 2011 dropped = *((uint32_t *) datap); 2012 if (dropped > 0) { 2013 AR_DEBUG_PRINTF(ATH_DEBUG_TRC, 2014 ("%d log buffers are dropped\n", dropped)); 2015 } 2016 datap += sizeof(dropped); 2017 len -= sizeof(dropped); 2018 2019 count = 0; 2020 buffer = (uint32_t *) datap; 2021 length = (len >> 2); 2022 2023 if (dbglog_process_type == DBGLOG_PROCESS_PRINT_RAW) 2024 return dbglog_print_raw_data(buffer, length); 2025 2026 if (dbglog_process_type == DBGLOG_PROCESS_NET_RAW) { 2027 return dbglog_process_netlink_data((wmi_unified_t) wma-> 2028 wmi_handle, 2029 (uint8_t *) buffer, 2030 len, dropped); 2031 } 2032 #ifdef WLAN_OPEN_SOURCE 2033 if (dbglog_process_type == DBGLOG_PROCESS_POOL_RAW) { 2034 return dbglog_debugfs_raw_data((wmi_unified_t) wma->wmi_handle, 2035 (uint8_t *) buffer, len, 2036 dropped); 2037 } 2038 #endif /* WLAN_OPEN_SOURCE */ 2039 2040 while ((count + 2) < length) { 2041 timestamp = DBGLOG_GET_TIME_STAMP(buffer[count]); 2042 debugid = DBGLOG_GET_DBGID(buffer[count + 1]); 2043 moduleid = DBGLOG_GET_MODULEID(buffer[count + 1]); 2044 vapid = DBGLOG_GET_VDEVID(buffer[count + 1]); 2045 numargs = DBGLOG_GET_NUMARGS(buffer[count + 1]); 2046 2047 if ((count + 2 + numargs) > length) 2048 return A_OK; 2049 2050 if (moduleid >= WLAN_MODULE_ID_MAX) 2051 return A_OK; 2052 2053 if (mod_print[moduleid] == NULL) { 2054 /* 2055 * No module specific log registered 2056 * use the default handler 2057 */ 2058 dbglog_default_print_handler(moduleid, vapid, debugid, 2059 timestamp, numargs, 2060 (((uint32_t *) buffer) + 2061 2 + count)); 2062 } else { 2063 if (!(mod_print[moduleid](moduleid, vapid, debugid, 2064 timestamp, numargs, 2065 (((uint32_t *) buffer) + 2066 2 + count)))) { 2067 /* 2068 * The message is not handled 2069 * by the module specific handler 2070 */ 2071 dbglog_default_print_handler(moduleid, vapid, 2072 debugid, timestamp, 2073 numargs, 2074 (((uint32_t *) 2075 buffer) + 2 + 2076 count)); 2077 2078 } 2079 } 2080 2081 /* 32 bit Time stamp + 32 bit Dbg header */ 2082 count += numargs + 2; 2083 } 2084 /* Always returns zero */ 2085 return A_OK; 2086 } 2087 2088 void dbglog_reg_modprint(uint32_t mod_id, module_dbg_print printfn) 2089 { 2090 if (!mod_print[mod_id]) { 2091 mod_print[mod_id] = printfn; 2092 } else { 2093 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, 2094 ("module print is already registered for this module %d\n", 2095 mod_id)); 2096 } 2097 } 2098 2099 static void 2100 dbglog_sm_print(uint32_t timestamp, 2101 uint16_t vap_id, 2102 uint16_t numargs, 2103 uint32_t *args, 2104 const char *module_prefix, 2105 const char *const states[], uint32_t num_states, 2106 const char *const events[], uint32_t num_events) 2107 { 2108 uint8_t type, arg1, arg2, arg3; 2109 uint32_t extra, extra2, extra3; 2110 2111 if (numargs != 4) 2112 return; 2113 2114 type = (args[0] >> 24) & 0xff; 2115 arg1 = (args[0] >> 16) & 0xff; 2116 arg2 = (args[0] >> 8) & 0xff; 2117 arg3 = (args[0] >> 0) & 0xff; 2118 2119 extra = args[1]; 2120 extra2 = args[2]; 2121 extra3 = args[3]; 2122 2123 switch (type) { 2124 case 0: /* state transition */ 2125 if (arg1 < num_states && arg2 < num_states) { 2126 dbglog_printf(timestamp, vap_id, 2127 "%s: %s => %s (%#x, %#x, %#x)", 2128 module_prefix, states[arg1], states[arg2], 2129 extra, extra2, extra3); 2130 } else { 2131 dbglog_printf(timestamp, vap_id, 2132 "%s: %u => %u (%#x, %#x, %#x)", 2133 module_prefix, arg1, arg2, extra, extra2, 2134 extra3); 2135 } 2136 break; 2137 case 1: /* dispatch event */ 2138 if (arg1 < num_states && arg2 < num_events) { 2139 dbglog_printf(timestamp, vap_id, 2140 "%s: %s < %s (%#x, %#x, %#x)", 2141 module_prefix, states[arg1], events[arg2], 2142 extra, extra2, extra3); 2143 } else { 2144 dbglog_printf(timestamp, vap_id, 2145 "%s: %u < %u (%#x, %#x, %#x)", 2146 module_prefix, arg1, arg2, extra, extra2, 2147 extra3); 2148 } 2149 break; 2150 case 2: /* warning */ 2151 switch (arg1) { 2152 case 0: /* unhandled event */ 2153 if (arg2 < num_states && arg3 < num_events) { 2154 dbglog_printf(timestamp, vap_id, 2155 "%s: unhandled event %s in state %s (%#x, %#x, %#x)", 2156 module_prefix, events[arg3], 2157 states[arg2], extra, extra2, 2158 extra3); 2159 } else { 2160 dbglog_printf(timestamp, vap_id, 2161 "%s: unhandled event %u in state %u (%#x, %#x, %#x)", 2162 module_prefix, arg3, arg2, extra, 2163 extra2, extra3); 2164 } 2165 break; 2166 default: 2167 break; 2168 2169 } 2170 break; 2171 } 2172 } 2173 2174 static A_BOOL 2175 dbglog_sta_powersave_print_handler(uint32_t mod_id, 2176 uint16_t vap_id, 2177 uint32_t dbg_id, 2178 uint32_t timestamp, 2179 uint16_t numargs, uint32_t *args) 2180 { 2181 static const char *const states[] = { 2182 "IDLE", 2183 "ACTIVE", 2184 "SLEEP_TXQ_FLUSH", 2185 "SLEEP_TX_SENT", 2186 "PAUSE", 2187 "SLEEP_DOZE", 2188 "SLEEP_AWAKE", 2189 "ACTIVE_TXQ_FLUSH", 2190 "ACTIVE_TX_SENT", 2191 "PAUSE_TXQ_FLUSH", 2192 "PAUSE_TX_SENT", 2193 "IDLE_TXQ_FLUSH", 2194 "IDLE_TX_SENT", 2195 }; 2196 2197 static const char *const events[] = { 2198 "START", 2199 "STOP", 2200 "PAUSE", 2201 "UNPAUSE", 2202 "TIM", 2203 "DTIM", 2204 "SEND_COMPLETE", 2205 "PRE_SEND", 2206 "RX", 2207 "HWQ_EMPTY", 2208 "PAUSE_TIMEOUT", 2209 "TXRX_INACTIVITY_TIMEOUT", 2210 "PSPOLL_TIMEOUT", 2211 "UAPSD_TIMEOUT", 2212 "DELAYED_SLEEP_TIMEOUT", 2213 "SEND_N_COMPLETE", 2214 "TIDQ_PAUSE_COMPLETE", 2215 "SEND_PSPOLL", 2216 "SEND_SPEC_PSPOLL", 2217 }; 2218 2219 switch (dbg_id) { 2220 case DBGLOG_DBGID_SM_FRAMEWORK_PROXY_DBGLOG_MSG: 2221 dbglog_sm_print(timestamp, vap_id, numargs, args, "STA PS", 2222 states, QDF_ARRAY_SIZE(states), events, 2223 QDF_ARRAY_SIZE(events)); 2224 break; 2225 case PS_STA_PM_ARB_REQUEST: 2226 if (numargs == 4) { 2227 dbglog_printf(timestamp, vap_id, 2228 "PM ARB request flags=%x, last_time=%x %s: %s", 2229 args[1], args[2], 2230 dbglog_get_module_str(args[0]), 2231 args[3] ? "SLEEP" : "WAKE"); 2232 } 2233 break; 2234 case PS_STA_DELIVER_EVENT: 2235 if (numargs == 2) { 2236 dbglog_printf(timestamp, vap_id, "STA PS: %s %s", 2237 (args[0] == 0 ? "PAUSE_COMPLETE" : 2238 (args[0] == 1 ? "UNPAUSE_COMPLETE" : 2239 (args[0] == 2 ? "SLEEP" : 2240 (args[0] == 2241 3 ? "AWAKE" : "UNKNOWN")))), 2242 (args[1] == 2243 0 ? "SUCCESS" : (args[1] == 2244 1 ? "TXQ_FLUSH_TIMEOUT" 2245 : (args[1] == 2246 2 ? "NO_ACK" 2247 : (args[1] == 2248 3 ? 2249 "RX_LEAK_TIMEOUT" 2250 : (args[1] == 2251 4 ? 2252 "PSPOLL_UAPSD_BUSY_TIMEOUT" 2253 : 2254 "UNKNOWN")))))); 2255 } 2256 break; 2257 case PS_STA_PSPOLL_SEQ_DONE: 2258 if (numargs == 5) { 2259 dbglog_printf(timestamp, vap_id, 2260 "STA PS poll: queue=%u comp=%u rsp=%u rsp_dur=%u fc=%x qos=%x %s", 2261 args[0], args[1], args[2], args[3], 2262 (args[4] >> 16) & 0xffff, 2263 (args[4] >> 8) & 0xff, 2264 (args[4] & 0xff) == 2265 0 ? "SUCCESS" : (args[4] & 0xff) == 2266 1 ? "NO_ACK" : (args[4] & 0xff) == 2267 2 ? "DROPPED" : (args[4] & 0xff) == 2268 3 ? "FILTERED" : (args[4] & 0xff) == 2269 4 ? "RSP_TIMEOUT" : "UNKNOWN"); 2270 } 2271 break; 2272 case PS_STA_COEX_MODE: 2273 if (numargs == 1) { 2274 dbglog_printf(timestamp, vap_id, "STA PS COEX MODE %s", 2275 args[0] ? "ENABLED" : "DISABLED"); 2276 } 2277 break; 2278 case PS_STA_PSPOLL_ALLOW: 2279 if (numargs == 3) { 2280 dbglog_printf(timestamp, vap_id, 2281 "STA PS-Poll %s flags=%x time=%u", 2282 args[0] ? "ALLOW" : "DISALLOW", args[1], 2283 args[2]); 2284 } 2285 break; 2286 case PS_STA_SET_PARAM: 2287 if (numargs == 2) { 2288 struct { 2289 char *name; 2290 int is_time_param; 2291 } params[] = { 2292 { 2293 "MAX_SLEEP_ATTEMPTS", 0 2294 }, { 2295 "DELAYED_SLEEP", 1 2296 }, { 2297 "TXRX_INACTIVITY", 1 2298 }, { 2299 "MAX_TX_BEFORE_WAKE", 0 2300 }, { 2301 "UAPSD_TIMEOUT", 1 2302 }, { 2303 "UAPSD_CONFIG", 0 2304 }, { 2305 "PSPOLL_RESPONSE_TIMEOUT", 1 2306 }, { 2307 "MAX_PSPOLL_BEFORE_WAKE", 0 2308 }, { 2309 "RX_WAKE_POLICY", 0 2310 }, { 2311 "DELAYED_PAUSE_RX_LEAK", 1 2312 }, { 2313 "TXRX_INACTIVITY_BLOCKED_RETRY", 1 2314 }, { 2315 "SPEC_WAKE_INTERVAL", 1 2316 }, { 2317 "MAX_SPEC_NODATA_PSPOLL", 0 2318 }, { 2319 "ESTIMATED_PSPOLL_RESP_TIME", 1 2320 }, { 2321 "QPOWER_MAX_PSPOLL_BEFORE_WAKE", 0 2322 }, { 2323 "QPOWER_ENABLE", 0 2324 }, 2325 }; 2326 uint32_t param = args[0]; 2327 uint32_t value = args[1]; 2328 2329 if (param < QDF_ARRAY_SIZE(params)) { 2330 if (params[param].is_time_param) { 2331 dbglog_printf(timestamp, vap_id, 2332 "STA PS SET_PARAM %s => %u (us)", 2333 params[param].name, 2334 value); 2335 } else { 2336 dbglog_printf(timestamp, vap_id, 2337 "STA PS SET_PARAM %s => %#x", 2338 params[param].name, 2339 value); 2340 } 2341 } else { 2342 dbglog_printf(timestamp, vap_id, 2343 "STA PS SET_PARAM %x => %#x", 2344 param, value); 2345 } 2346 } 2347 break; 2348 case PS_STA_SPECPOLL_TIMER_STARTED: 2349 dbglog_printf(timestamp, vap_id, 2350 "SPEC Poll Timer Started: Beacon time Remaining:%d wakeup interval:%d", 2351 args[0], args[1]); 2352 break; 2353 case PS_STA_SPECPOLL_TIMER_STOPPED: 2354 dbglog_printf(timestamp, vap_id, "SPEC Poll Timer Stopped"); 2355 break; 2356 default: 2357 return false; 2358 } 2359 2360 return true; 2361 } 2362 2363 /* IBSS PS sub modules */ 2364 enum wlan_ibss_ps_sub_module { 2365 WLAN_IBSS_PS_SUB_MODULE_IBSS_NW_SM = 0, 2366 WLAN_IBSS_PS_SUB_MODULE_IBSS_SELF_PS = 1, 2367 WLAN_IBSS_PS_SUB_MODULE_IBSS_PEER_PS = 2, 2368 WLAN_IBSS_PS_SUB_MODULE_MAX = 3, 2369 }; 2370 2371 #define WLAN_IBSS_PS_SUB_MODULE_OFFSET 0x1E 2372 2373 static A_BOOL 2374 dbglog_ibss_powersave_print_handler(uint32_t mod_id, 2375 uint16_t vap_id, 2376 uint32_t dbg_id, 2377 uint32_t timestamp, 2378 uint16_t numargs, uint32_t *args) 2379 { 2380 static const char *const nw_states[] = { 2381 "WAIT_FOR_TBTT", 2382 "ATIM_WINDOW_PRE_BCN", 2383 "ATIM_WINDOW_POST_BCN", 2384 "OUT_OF_ATIM_WINDOW", 2385 "PAUSE_PENDING", 2386 "PAUSED", 2387 }; 2388 2389 static const char *const ps_states[] = { 2390 "ACTIVE", 2391 "SLEEP_TX_SEND", 2392 "SLEEP_DOZE_PAUSE_PENDING", 2393 "SLEEP_DOZE", 2394 "SLEEP_AWAKE", 2395 "ACTIVE_TX_SEND", 2396 "PAUSE_TX_SEND", 2397 "PAUSED", 2398 }; 2399 2400 static const char *const peer_ps_states[] = { 2401 "ACTIVE", 2402 "SLEEP_AWAKE", 2403 "SLEEP_DOZE", 2404 "PS_UNKNOWN", 2405 }; 2406 2407 static const char *const events[] = { 2408 "START", 2409 "STOP", 2410 "SWBA", 2411 "TBTT", 2412 "TX_BCN_CMP", 2413 "SEND_COMPLETE", 2414 "SEND_N_COMPLETE", 2415 "PRE_SEND", 2416 "RX", 2417 "UC_INACTIVITY_TIMEOUT", 2418 "BC_INACTIVITY_TIMEOUT", 2419 "ATIM_WINDOW_BEGIN", 2420 "ATIM_WINDOW_END", 2421 "HWQ_EMPTY", 2422 "UC_ATIM_RCVD", 2423 "TRAFFIC_EXCHANGE_DONE", 2424 "POWER_SAVE_STATE_CHANGE", 2425 "NEW_PEER_JOIN", 2426 "IBSS_VDEV_PAUSE_REQUEST", 2427 "IBSS_VDEV_PAUSE_RESPONSE", 2428 "IBSS_VDEV_PAUSE_TIMEOUT", 2429 "IBSS_VDEV_UNPAUSE_REQUEST", 2430 "PS_STATE_CHANGE", 2431 }; 2432 2433 enum wlan_ibss_ps_sub_module sub_module; 2434 2435 switch (dbg_id) { 2436 case DBGLOG_DBGID_SM_FRAMEWORK_PROXY_DBGLOG_MSG: 2437 sub_module = (args[1] >> WLAN_IBSS_PS_SUB_MODULE_OFFSET) & 0x3; 2438 switch (sub_module) { 2439 case WLAN_IBSS_PS_SUB_MODULE_IBSS_NW_SM: 2440 dbglog_sm_print(timestamp, vap_id, numargs, args, 2441 "IBSS PS NW", nw_states, 2442 QDF_ARRAY_SIZE(nw_states), events, 2443 QDF_ARRAY_SIZE(events)); 2444 break; 2445 case WLAN_IBSS_PS_SUB_MODULE_IBSS_SELF_PS: 2446 dbglog_sm_print(timestamp, vap_id, numargs, args, 2447 "IBSS PS Self", ps_states, 2448 QDF_ARRAY_SIZE(ps_states), events, 2449 QDF_ARRAY_SIZE(events)); 2450 break; 2451 case WLAN_IBSS_PS_SUB_MODULE_IBSS_PEER_PS: 2452 dbglog_sm_print(timestamp, vap_id, numargs, args, 2453 "IBSS PS Peer", peer_ps_states, 2454 QDF_ARRAY_SIZE(peer_ps_states), events, 2455 QDF_ARRAY_SIZE(events)); 2456 break; 2457 default: 2458 break; 2459 } 2460 break; 2461 case IBSS_PS_DBGID_PEER_CREATE: 2462 if (numargs == 2) { 2463 dbglog_printf(timestamp, vap_id, 2464 "IBSS PS: peer alloc failed for peer ID:%u", 2465 args[0]); 2466 } else if (numargs == 1) { 2467 dbglog_printf(timestamp, vap_id, 2468 "IBSS PS: create peer ID=%u", args[0]); 2469 } 2470 break; 2471 case IBSS_PS_DBGID_PEER_DELETE: 2472 if (numargs == 4) { 2473 dbglog_printf(timestamp, vap_id, 2474 "IBSS PS: delete peer ID=%u num_peers:%d num_sleeping_peers:%d ps_enabled_for_this_peer:%d", 2475 args[0], args[1], args[2], args[3]); 2476 } 2477 break; 2478 case IBSS_PS_DBGID_VDEV_CREATE: 2479 if (numargs == 1) { 2480 dbglog_printf(timestamp, vap_id, 2481 "IBSS PS: vdev alloc failed", args[0]); 2482 } else if (numargs == 0) { 2483 dbglog_printf(timestamp, vap_id, 2484 "IBSS PS: vdev created"); 2485 } 2486 break; 2487 case IBSS_PS_DBGID_VDEV_DELETE: 2488 dbglog_printf(timestamp, vap_id, "IBSS PS: vdev deleted"); 2489 break; 2490 2491 case IBSS_PS_DBGID_VDEV_EVENT: 2492 if (numargs == 1) { 2493 if (args[0] == 5) { 2494 dbglog_printf(timestamp, vap_id, 2495 "IBSS PS: vdev event for peer add"); 2496 } else if (args[0] == 7) { 2497 dbglog_printf(timestamp, vap_id, 2498 "IBSS PS: vdev event for peer delete"); 2499 } else { 2500 dbglog_printf(timestamp, vap_id, 2501 "IBSS PS: vdev event %u", 2502 args[0]); 2503 } 2504 } 2505 break; 2506 2507 case IBSS_PS_DBGID_PEER_EVENT: 2508 if (numargs == 4) { 2509 if (args[0] == 0xFFFF) { 2510 dbglog_printf(timestamp, vap_id, 2511 "IBSS PS: pre_send for peer:%u peer_type:%u sm_event_mask:%0x", 2512 args[1], args[3], args[2]); 2513 } else if (args[0] == 0x20000) { 2514 dbglog_printf(timestamp, vap_id, 2515 "IBSS PS: send_complete for peer:%u peer_type:%u sm_event_mask:%0x", 2516 args[1], args[3], args[2]); 2517 } else if (args[0] == 0x10) { 2518 dbglog_printf(timestamp, vap_id, 2519 "IBSS PS: send_n_complete for peer:%u peer_type:%u sm_event_mask:%0x", 2520 args[1], args[3], args[2]); 2521 } else if (args[0] == 0x40) { 2522 dbglog_printf(timestamp, vap_id, 2523 "IBSS PS: rx event for peer:%u peer_type:%u sm_event_mask:%0x", 2524 args[1], args[3], args[2]); 2525 } else if (args[0] == 0x4) { 2526 dbglog_printf(timestamp, vap_id, 2527 "IBSS PS: hw_q_empty for peer:%u peer_type:%u sm_event_mask:%0x", 2528 args[1], args[3], args[2]); 2529 } 2530 } 2531 break; 2532 2533 case IBSS_PS_DBGID_DELIVER_CAB: 2534 if (numargs == 4) { 2535 dbglog_printf(timestamp, vap_id, 2536 "IBSS PS: Deliver CAB n_mpdu:%d send_flags:%0x tid_cur:%d q_depth_for_other_tid:%d", 2537 args[0], args[1], args[2], args[3]); 2538 } 2539 break; 2540 2541 case IBSS_PS_DBGID_DELIVER_UC_DATA: 2542 if (numargs == 4) { 2543 dbglog_printf(timestamp, vap_id, 2544 "IBSS PS: Deliver UC data peer:%d tid:%d n_mpdu:%d send_flags:%0x", 2545 args[0], args[1], args[2], args[3]); 2546 } 2547 break; 2548 2549 case IBSS_PS_DBGID_DELIVER_UC_DATA_ERROR: 2550 if (numargs == 4) { 2551 dbglog_printf(timestamp, vap_id, 2552 "IBSS PS: Deliver UC data error peer:%d tid:%d allowed_tidmask:%0x, pending_tidmap:%0x", 2553 args[0], args[1], args[2], args[3]); 2554 } 2555 break; 2556 2557 case IBSS_PS_DBGID_UC_INACTIVITY_TMR_RESTART: 2558 if (numargs == 2) { 2559 dbglog_printf(timestamp, vap_id, 2560 "IBSS PS: UC timer restart peer:%d timer_val:%0x", 2561 args[0], args[1]); 2562 } 2563 break; 2564 2565 case IBSS_PS_DBGID_MC_INACTIVITY_TMR_RESTART: 2566 if (numargs == 1) { 2567 dbglog_printf(timestamp, vap_id, 2568 "IBSS PS: MC timer restart timer_val:%0x", 2569 args[0]); 2570 } 2571 break; 2572 2573 case IBSS_PS_DBGID_NULL_TX_COMPLETION: 2574 if (numargs == 3) { 2575 dbglog_printf(timestamp, vap_id, 2576 "IBSS PS: null tx completion peer:%d tx_completion_status:%d flags:%0x", 2577 args[0], args[1], args[2]); 2578 } 2579 break; 2580 2581 case IBSS_PS_DBGID_ATIM_TIMER_START: 2582 if (numargs == 4) { 2583 dbglog_printf(timestamp, vap_id, 2584 "IBSS PS: ATIM timer start tsf:%0x %0x tbtt:%0x %0x", 2585 args[0], args[1], args[2], args[3]); 2586 } 2587 break; 2588 2589 case IBSS_PS_DBGID_UC_ATIM_SEND: 2590 if (numargs == 2) { 2591 dbglog_printf(timestamp, vap_id, 2592 "IBSS PS: Send ATIM to peer:%d", args[1]); 2593 } else if (numargs == 1) { 2594 dbglog_printf(timestamp, vap_id, 2595 "IBSS PS: no peers to send UC ATIM", 2596 args[1]); 2597 } 2598 break; 2599 2600 case IBSS_PS_DBGID_BC_ATIM_SEND: 2601 if (numargs == 2) { 2602 dbglog_printf(timestamp, vap_id, 2603 "IBSS PS: MC Data, num_of_peers:%d bc_atim_sent:%d", 2604 args[1], args[0]); 2605 } 2606 break; 2607 2608 case IBSS_PS_DBGID_UC_TIMEOUT: 2609 if (numargs == 2) { 2610 dbglog_printf(timestamp, vap_id, 2611 "IBSS PS: UC timeout for peer:%d send_null:%d", 2612 args[0], args[1]); 2613 } 2614 break; 2615 2616 case IBSS_PS_DBGID_PWR_COLLAPSE_ALLOWED: 2617 dbglog_printf(timestamp, vap_id, 2618 "IBSS PS: allow power collapse"); 2619 break; 2620 2621 case IBSS_PS_DBGID_PWR_COLLAPSE_NOT_ALLOWED: 2622 if (numargs == 0) { 2623 dbglog_printf(timestamp, vap_id, 2624 "IBSS PS: power collapse not allowed by INI"); 2625 } else if (numargs == 1) { 2626 dbglog_printf(timestamp, vap_id, 2627 "IBSS PS: power collapse not allowed since peer id:%d is not PS capable", 2628 args[0]); 2629 } else if (numargs == 2) { 2630 dbglog_printf(timestamp, vap_id, 2631 "IBSS PS: power collapse not allowed - no peers in NW"); 2632 } else if (numargs == 3) { 2633 if (args[0] == 2) { 2634 dbglog_printf(timestamp, vap_id, 2635 "IBSS PS: power collapse not allowed, non-zero qdepth %d %d", 2636 args[1], args[2]); 2637 } else if (args[0] == 3) { 2638 dbglog_printf(timestamp, vap_id, 2639 "IBSS PS: power collapse not allowed by peer:%d peer_flags:%0x", 2640 args[1], args[2]); 2641 } 2642 } else if (numargs == 5) { 2643 dbglog_printf(timestamp, vap_id, 2644 "IBSS PS: power collapse not allowed by state m/c nw_cur_state:%d nw_next_state:%d ps_cur_state:%d flags:%0x", 2645 args[1], args[2], args[3], args[4]); 2646 } 2647 break; 2648 2649 case IBSS_PS_DBGID_SET_PARAM: 2650 if (numargs == 2) { 2651 dbglog_printf(timestamp, vap_id, 2652 "IBSS PS: Set Param ID:%0x Value:%0x", 2653 args[0], args[1]); 2654 } 2655 break; 2656 2657 case IBSS_PS_DBGID_HOST_TX_PAUSE: 2658 if (numargs == 1) { 2659 dbglog_printf(timestamp, vap_id, 2660 "IBSS PS: Pausing host, vdev_map:%0x", 2661 args[0]); 2662 } 2663 break; 2664 2665 case IBSS_PS_DBGID_HOST_TX_UNPAUSE: 2666 if (numargs == 1) { 2667 dbglog_printf(timestamp, vap_id, 2668 "IBSS PS: Unpausing host, vdev_map:%0x", 2669 args[0]); 2670 } 2671 break; 2672 case IBSS_PS_DBGID_PS_DESC_BIN_LWM: 2673 if (numargs == 1) { 2674 dbglog_printf(timestamp, vap_id, 2675 "IBSS PS: LWM, vdev_map:%0x", args[0]); 2676 } 2677 break; 2678 2679 case IBSS_PS_DBGID_PS_DESC_BIN_HWM: 2680 if (numargs == 1) { 2681 dbglog_printf(timestamp, vap_id, 2682 "IBSS PS: HWM, vdev_map:%0x", args[0]); 2683 } 2684 break; 2685 2686 case IBSS_PS_DBGID_PS_KICKOUT_PEER: 2687 if (numargs == 3) { 2688 dbglog_printf(timestamp, vap_id, 2689 "IBSS PS: Kickout peer id:%d atim_fail_cnt:%d status:%d", 2690 args[0], args[1], args[2]); 2691 } 2692 break; 2693 2694 case IBSS_PS_DBGID_SET_PEER_PARAM: 2695 if (numargs == 3) { 2696 dbglog_printf(timestamp, vap_id, 2697 "IBSS PS: Set Peer Id:%d Param ID:%0x Value:%0x", 2698 args[0], args[1], args[2]); 2699 } 2700 break; 2701 2702 case IBSS_PS_DBGID_BCN_ATIM_WIN_MISMATCH: 2703 if (numargs == 4) { 2704 if (args[0] == 0xDEAD) { 2705 dbglog_printf(timestamp, vap_id, 2706 "IBSS PS: ATIM window length mismatch, our's:%d, peer id:%d, peer's:%d", 2707 args[1], args[2], args[3]); 2708 } else if (args[0] == 0xBEEF) { 2709 dbglog_printf(timestamp, vap_id, 2710 "IBSS PS: Peer ATIM window length changed, peer id:%d, peer recorded atim window:%d new atim window:%d", 2711 args[1], args[2], args[3]); 2712 } 2713 } 2714 break; 2715 2716 case IBSS_PS_DBGID_RX_CHAINMASK_CHANGE: 2717 if (numargs == 2) { 2718 if (args[1] == 0x1) { 2719 dbglog_printf(timestamp, vap_id, 2720 "IBSS PS: Voting for low power chainmask from :%d", 2721 args[0]); 2722 } else { 2723 dbglog_printf(timestamp, vap_id, 2724 "IBSS PS: Voting for high power chainmask from :%d", 2725 args[0]); 2726 } 2727 } 2728 break; 2729 2730 default: 2731 return false; 2732 } 2733 2734 return true; 2735 } 2736 2737 static 2738 A_BOOL dbglog_ratectrl_print_handler(uint32_t mod_id, 2739 uint16_t vap_id, 2740 uint32_t dbg_id, 2741 uint32_t timestamp, 2742 uint16_t numargs, uint32_t *args) 2743 { 2744 switch (dbg_id) { 2745 case RATECTRL_DBGID_ASSOC: 2746 dbglog_printf(timestamp, vap_id, 2747 "RATE: ChainMask %d, phymode %d, ni_flags 0x%08x, vht_mcs_set 0x%04x, ht_mcs_set 0x%04x", 2748 args[0], args[1], args[2], args[3], args[4]); 2749 break; 2750 case RATECTRL_DBGID_NSS_CHANGE: 2751 dbglog_printf(timestamp, vap_id, "RATE: NEW NSS %d\n", args[0]); 2752 break; 2753 case RATECTRL_DBGID_CHAINMASK_ERR: 2754 dbglog_printf(timestamp, vap_id, 2755 "RATE: Chainmask ERR %d %d %d\n", args[0], 2756 args[1], args[2]); 2757 break; 2758 case RATECTRL_DBGID_UNEXPECTED_FRAME: 2759 dbglog_printf(timestamp, vap_id, 2760 "RATE: WARN1: rate %d flags 0x%08x\n", args[0], 2761 args[1]); 2762 break; 2763 case RATECTRL_DBGID_WAL_RCQUERY: 2764 dbglog_printf(timestamp, vap_id, 2765 "ratectrl_dbgid_wal_rcquery [rix1 %d rix2 %d rix3 %d proberix %d ppduflag 0x%x] ", 2766 args[0], args[1], args[2], args[3], args[4]); 2767 break; 2768 case RATECTRL_DBGID_WAL_RCUPDATE: 2769 dbglog_printf(timestamp, vap_id, 2770 "ratectrl_dbgid_wal_rcupdate [numelems %d ppduflag 0x%x] ", 2771 args[0], args[1]); 2772 break; 2773 case RATECTRL_DBGID_GTX_UPDATE: 2774 { 2775 switch (args[0]) { 2776 case 255: 2777 dbglog_printf(timestamp, vap_id, 2778 "GtxInitPwrCfg [bw[last %d|cur %d] rtcode 0x%x tpc %d tpc_init_pwr_cfg %d] ", 2779 args[1] >> 8, args[1] & 0xff, 2780 args[2], args[3], args[4]); 2781 break; 2782 case 254: 2783 dbglog_printf(timestamp, vap_id, 2784 "gtx_cfg_addr [RTMask0@0x%x PERThreshold@0x%x gtxTPCMin@0x%x userGtxMask@0x%x] ", 2785 args[1], args[2], args[3], 2786 args[4]); 2787 break; 2788 default: 2789 dbglog_printf(timestamp, vap_id, 2790 "gtx_update [act %d bw %d rix 0x%x tpc %d per %d lastrssi %d] ", 2791 args[0], args[1], args[2], 2792 args[3], args[4], args[5]); 2793 } 2794 } 2795 break; 2796 } 2797 return true; 2798 } 2799 2800 static 2801 A_BOOL dbglog_ani_print_handler(uint32_t mod_id, 2802 uint16_t vap_id, 2803 uint32_t dbg_id, 2804 uint32_t timestamp, 2805 uint16_t numargs, uint32_t *args) 2806 { 2807 switch (dbg_id) { 2808 case ANI_DBGID_ENABLE: 2809 dbglog_printf(timestamp, vap_id, "ANI Enable: %d", args[0]); 2810 break; 2811 case ANI_DBGID_POLL: 2812 dbglog_printf(timestamp, vap_id, 2813 "ANI POLLING: AccumListenTime %d ListenTime %d ofdmphyerr %d cckphyerr %d", 2814 args[0], args[1], args[2], args[3]); 2815 break; 2816 case ANI_DBGID_RESTART: 2817 dbglog_printf(timestamp, vap_id, "ANI Restart"); 2818 break; 2819 case ANI_DBGID_CURRENT_LEVEL: 2820 dbglog_printf(timestamp, vap_id, 2821 "ANI CURRENT LEVEL ofdm level %d cck level %d", 2822 args[0], args[1]); 2823 break; 2824 case ANI_DBGID_OFDM_LEVEL: 2825 dbglog_printf(timestamp, vap_id, 2826 "ANI UPDATE ofdm level %d firstep %d firstep_low %d cycpwr_thr %d self_corr_low %d", 2827 args[0], args[1], args[2], args[3], args[4]); 2828 break; 2829 case ANI_DBGID_CCK_LEVEL: 2830 dbglog_printf(timestamp, vap_id, 2831 "ANI UPDATE cck level %d firstep %d firstep_low %d mrc_cck %d", 2832 args[0], args[1], args[2], args[3]); 2833 break; 2834 case ANI_DBGID_CONTROL: 2835 dbglog_printf(timestamp, vap_id, 2836 "ANI CONTROL ofdmlevel %d ccklevel %d\n", 2837 args[0]); 2838 2839 break; 2840 case ANI_DBGID_OFDM_PARAMS: 2841 dbglog_printf(timestamp, vap_id, 2842 "ANI ofdm_control firstep %d cycpwr %d\n", 2843 args[0], args[1]); 2844 break; 2845 case ANI_DBGID_CCK_PARAMS: 2846 dbglog_printf(timestamp, vap_id, 2847 "ANI cck_control mrc_cck %d barker_threshold %d\n", 2848 args[0], args[1]); 2849 break; 2850 case ANI_DBGID_RESET: 2851 dbglog_printf(timestamp, vap_id, 2852 "ANI resetting resetflag %d resetCause %8x channel index %d", 2853 args[0], args[1], args[2]); 2854 break; 2855 case ANI_DBGID_SELF_CORR_LOW: 2856 dbglog_printf(timestamp, vap_id, "ANI self_corr_low %d", 2857 args[0]); 2858 break; 2859 case ANI_DBGID_FIRSTEP: 2860 dbglog_printf(timestamp, vap_id, 2861 "ANI firstep %d firstep_low %d", args[0], 2862 args[1]); 2863 break; 2864 case ANI_DBGID_MRC_CCK: 2865 dbglog_printf(timestamp, vap_id, "ANI mrc_cck %d", args[0]); 2866 break; 2867 case ANI_DBGID_CYCPWR: 2868 dbglog_printf(timestamp, vap_id, "ANI cypwr_thresh %d", 2869 args[0]); 2870 break; 2871 case ANI_DBGID_POLL_PERIOD: 2872 dbglog_printf(timestamp, vap_id, 2873 "ANI Configure poll period to %d", args[0]); 2874 break; 2875 case ANI_DBGID_LISTEN_PERIOD: 2876 dbglog_printf(timestamp, vap_id, 2877 "ANI Configure listen period to %d", args[0]); 2878 break; 2879 case ANI_DBGID_OFDM_LEVEL_CFG: 2880 dbglog_printf(timestamp, vap_id, 2881 "ANI Configure ofdm level to %d", args[0]); 2882 break; 2883 case ANI_DBGID_CCK_LEVEL_CFG: 2884 dbglog_printf(timestamp, vap_id, 2885 "ANI Configure cck level to %d", args[0]); 2886 break; 2887 default: 2888 dbglog_printf(timestamp, vap_id, "ANI arg1 %d arg2 %d arg3 %d", 2889 args[0], args[1], args[2]); 2890 break; 2891 } 2892 return true; 2893 } 2894 2895 static A_BOOL 2896 dbglog_ap_powersave_print_handler(uint32_t mod_id, 2897 uint16_t vap_id, 2898 uint32_t dbg_id, 2899 uint32_t timestamp, 2900 uint16_t numargs, uint32_t *args) 2901 { 2902 switch (dbg_id) { 2903 case AP_PS_DBGID_UPDATE_TIM: 2904 if (numargs == 2) { 2905 dbglog_printf(timestamp, vap_id, 2906 "AP PS: TIM update AID=%u %s", 2907 args[0], args[1] ? "set" : "clear"); 2908 } 2909 break; 2910 case AP_PS_DBGID_PEER_STATE_CHANGE: 2911 if (numargs == 2) { 2912 dbglog_printf(timestamp, vap_id, 2913 "AP PS: AID=%u power save %s", 2914 args[0], 2915 args[1] ? "enabled" : "disabled"); 2916 } 2917 break; 2918 case AP_PS_DBGID_PSPOLL: 2919 if (numargs == 3) { 2920 dbglog_printf(timestamp, vap_id, 2921 "AP PS: AID=%u pspoll response tid=%u flags=%x", 2922 args[0], args[1], args[2]); 2923 } 2924 break; 2925 case AP_PS_DBGID_PEER_CREATE: 2926 if (numargs == 1) { 2927 dbglog_printf(timestamp, vap_id, 2928 "AP PS: create peer AID=%u", args[0]); 2929 } 2930 break; 2931 case AP_PS_DBGID_PEER_DELETE: 2932 if (numargs == 1) { 2933 dbglog_printf(timestamp, vap_id, 2934 "AP PS: delete peer AID=%u", args[0]); 2935 } 2936 break; 2937 case AP_PS_DBGID_VDEV_CREATE: 2938 dbglog_printf(timestamp, vap_id, "AP PS: vdev create"); 2939 break; 2940 case AP_PS_DBGID_VDEV_DELETE: 2941 dbglog_printf(timestamp, vap_id, "AP PS: vdev delete"); 2942 break; 2943 case AP_PS_DBGID_SYNC_TIM: 2944 if (numargs == 3) { 2945 dbglog_printf(timestamp, vap_id, 2946 "AP PS: AID=%u advertised=%#x buffered=%#x", 2947 args[0], args[1], args[2]); 2948 } 2949 break; 2950 case AP_PS_DBGID_NEXT_RESPONSE: 2951 if (numargs == 4) { 2952 dbglog_printf(timestamp, vap_id, 2953 "AP PS: AID=%u select next response %s%s%s", 2954 args[0], args[1] ? "(usp active) " : "", 2955 args[2] ? "(pending usp) " : "", 2956 args[3] ? "(pending poll response)" : ""); 2957 } 2958 break; 2959 case AP_PS_DBGID_START_SP: 2960 if (numargs == 3) { 2961 dbglog_printf(timestamp, vap_id, 2962 "AP PS: AID=%u START SP tsf=%#x (%u)", 2963 args[0], args[1], args[2]); 2964 } 2965 break; 2966 case AP_PS_DBGID_COMPLETED_EOSP: 2967 if (numargs == 3) { 2968 dbglog_printf(timestamp, vap_id, 2969 "AP PS: AID=%u EOSP eosp_tsf=%#x trigger_tsf=%#x", 2970 args[0], args[1], args[2]); 2971 } 2972 break; 2973 case AP_PS_DBGID_TRIGGER: 2974 if (numargs == 4) { 2975 dbglog_printf(timestamp, vap_id, 2976 "AP PS: AID=%u TRIGGER tsf=%#x %s%s", 2977 args[0], args[1], 2978 args[2] ? "(usp active) " : "", 2979 args[3] ? "(send_n in progress)" : ""); 2980 } 2981 break; 2982 case AP_PS_DBGID_DUPLICATE_TRIGGER: 2983 if (numargs == 4) { 2984 dbglog_printf(timestamp, vap_id, 2985 "AP PS: AID=%u DUP TRIGGER tsf=%#x seq=%u ac=%u", 2986 args[0], args[1], args[2], args[3]); 2987 } 2988 break; 2989 case AP_PS_DBGID_UAPSD_RESPONSE: 2990 if (numargs == 5) { 2991 dbglog_printf(timestamp, vap_id, 2992 "AP PS: AID=%u UAPSD response tid=%u, n_mpdu=%u flags=%#x max_sp=%u current_sp=%u", 2993 args[0], args[1], args[2], args[3], 2994 (args[4] >> 16) & 0xffff, 2995 args[4] & 0xffff); 2996 } 2997 break; 2998 case AP_PS_DBGID_SEND_COMPLETE: 2999 if (numargs == 5) { 3000 dbglog_printf(timestamp, vap_id, 3001 "AP PS: AID=%u SEND_COMPLETE fc=%#x qos=%#x %s%s", 3002 args[0], args[1], args[2], 3003 args[3] ? "(usp active) " : "", 3004 args[4] ? "(pending poll response)" : ""); 3005 } 3006 break; 3007 case AP_PS_DBGID_SEND_N_COMPLETE: 3008 if (numargs == 3) { 3009 dbglog_printf(timestamp, vap_id, 3010 "AP PS: AID=%u SEND_N_COMPLETE %s%s", 3011 args[0], 3012 args[1] ? "(usp active) " : "", 3013 args[2] ? "(pending poll response)" : ""); 3014 } 3015 break; 3016 case AP_PS_DBGID_DETECT_OUT_OF_SYNC_STA: 3017 if (numargs == 4) { 3018 dbglog_printf(timestamp, vap_id, 3019 "AP PS: AID=%u detected out-of-sync now=%u tx_waiting=%u txq_depth=%u", 3020 args[0], args[1], args[2], args[3]); 3021 } 3022 break; 3023 case AP_PS_DBGID_DELIVER_CAB: 3024 if (numargs == 4) { 3025 dbglog_printf(timestamp, vap_id, 3026 "AP PS: CAB %s n_mpdus=%u, flags=%x, extra=%u", 3027 (args[0] == 17) ? "MGMT" : "DATA", 3028 args[1], args[2], args[3]); 3029 } 3030 break; 3031 default: 3032 return false; 3033 } 3034 3035 return true; 3036 } 3037 3038 static A_BOOL 3039 dbglog_wal_print_handler(uint32_t mod_id, 3040 uint16_t vap_id, 3041 uint32_t dbg_id, 3042 uint32_t timestamp, uint16_t numargs, uint32_t *args) 3043 { 3044 static const char *const states[] = { 3045 "ACTIVE", 3046 "WAIT", 3047 "WAIT_FILTER", 3048 "PAUSE", 3049 "PAUSE_SEND_N", 3050 "BLOCK", 3051 }; 3052 3053 static const char *const events[] = { 3054 "PAUSE", 3055 "PAUSE_FILTER", 3056 "UNPAUSE", 3057 3058 "BLOCK", 3059 "BLOCK_FILTER", 3060 "UNBLOCK", 3061 3062 "HWQ_EMPTY", 3063 "ALLOW_N", 3064 }; 3065 3066 #define WAL_VDEV_TYPE(type) \ 3067 (type == 0 ? "AP" : \ 3068 (type == 1 ? "STA" : \ 3069 (type == 2 ? "IBSS" : \ 3070 (type == 2 ? "MONITOR" : \ 3071 "UNKNOWN")))) 3072 3073 #define WAL_SLEEP_STATE(state) \ 3074 (state == 1 ? "NETWORK SLEEP" : \ 3075 (state == 2 ? "AWAKE" : \ 3076 (state == 3 ? "SYSTEM SLEEP" : \ 3077 "UNKNOWN"))) 3078 3079 switch (dbg_id) { 3080 case DBGLOG_DBGID_SM_FRAMEWORK_PROXY_DBGLOG_MSG: 3081 dbglog_sm_print(timestamp, vap_id, numargs, args, "TID PAUSE", 3082 states, QDF_ARRAY_SIZE(states), events, 3083 QDF_ARRAY_SIZE(events)); 3084 break; 3085 case WAL_DBGID_SET_POWER_STATE: 3086 if (numargs == 3) { 3087 dbglog_printf(timestamp, vap_id, 3088 "WAL %s => %s, req_count=%u", 3089 WAL_SLEEP_STATE(args[0]), 3090 WAL_SLEEP_STATE(args[1]), args[2]); 3091 } 3092 break; 3093 case WAL_DBGID_CHANNEL_CHANGE_FORCE_RESET: 3094 if (numargs == 4) { 3095 dbglog_printf(timestamp, vap_id, 3096 "WAL channel change (force reset) freq=%u, flags=%u mode=%u rx_ok=%u tx_ok=%u", 3097 args[0] & 0x0000ffff, 3098 (args[0] & 0xffff0000) >> 16, args[1], 3099 args[2], args[3]); 3100 } 3101 break; 3102 case WAL_DBGID_CHANNEL_CHANGE: 3103 if (numargs == 2) { 3104 dbglog_printf(timestamp, vap_id, 3105 "WAL channel change freq=%u, mode=%u flags=%u rx_ok=1 tx_ok=1", 3106 args[0] & 0x0000ffff, 3107 (args[0] & 0xffff0000) >> 16, args[1]); 3108 } 3109 break; 3110 case WAL_DBGID_VDEV_START: 3111 if (numargs == 1) { 3112 dbglog_printf(timestamp, vap_id, "WAL %s vdev started", 3113 WAL_VDEV_TYPE(args[0])); 3114 } 3115 break; 3116 case WAL_DBGID_VDEV_STOP: 3117 dbglog_printf(timestamp, vap_id, "WAL %s vdev stopped", 3118 WAL_VDEV_TYPE(args[0])); 3119 break; 3120 case WAL_DBGID_VDEV_UP: 3121 dbglog_printf(timestamp, vap_id, "WAL %s vdev up, count=%u", 3122 WAL_VDEV_TYPE(args[0]), args[1]); 3123 break; 3124 case WAL_DBGID_VDEV_DOWN: 3125 dbglog_printf(timestamp, vap_id, "WAL %s vdev down, count=%u", 3126 WAL_VDEV_TYPE(args[0]), args[1]); 3127 break; 3128 case WAL_DBGID_TX_MGMT_DESCID_SEQ_TYPE_LEN: 3129 dbglog_printf(timestamp, vap_id, 3130 "WAL Tx Mgmt frame desc_id=0x%x, seq=0x%x, type=0x%x, len=0x%x islocal=0x%x", 3131 args[0], args[1], args[2], 3132 (args[3] & 0xffff0000) >> 16, 3133 args[3] & 0x0000ffff); 3134 break; 3135 case WAL_DBGID_TX_MGMT_COMP_DESCID_STATUS: 3136 dbglog_printf(timestamp, vap_id, 3137 "WAL Tx Mgmt frame completion desc_id=0x%x, status=0x%x, islocal=0x%x", 3138 args[0], args[1], args[2]); 3139 break; 3140 case WAL_DBGID_TX_DATA_MSDUID_SEQ_TYPE_LEN: 3141 dbglog_printf(timestamp, vap_id, 3142 "WAL Tx Data frame msdu_id=0x%x, seq=0x%x, type=0x%x, len=0x%x", 3143 args[0], args[1], args[2], args[3]); 3144 break; 3145 case WAL_DBGID_TX_DATA_COMP_MSDUID_STATUS: 3146 dbglog_printf(timestamp, vap_id, 3147 "WAL Tx Data frame completion desc_id=0x%x, status=0x%x, seq=0x%x", 3148 args[0], args[1], args[2]); 3149 break; 3150 case WAL_DBGID_RESET_PCU_CYCLE_CNT: 3151 dbglog_printf(timestamp, vap_id, 3152 "WAL PCU cycle counter value at reset:%x", 3153 args[0]); 3154 break; 3155 case WAL_DBGID_TX_DISCARD: 3156 dbglog_printf(timestamp, vap_id, 3157 "WAL Tx enqueue discard msdu_id=0x%x", args[0]); 3158 break; 3159 case WAL_DBGID_SET_HW_CHAINMASK: 3160 dbglog_printf(timestamp, vap_id, 3161 "WAL_DBGID_SET_HW_CHAINMASK pdev=%d, txchain=0x%x, rxchain=0x%x", 3162 args[0], args[1], args[2]); 3163 break; 3164 case WAL_DBGID_SET_HW_CHAINMASK_TXRX_STOP_FAIL: 3165 dbglog_printf(timestamp, vap_id, 3166 "WAL_DBGID_SET_HW_CHAINMASK_TXRX_STOP_FAIL rxstop=%d, txstop=%d", 3167 args[0], args[1]); 3168 break; 3169 case WAL_DBGID_GET_HW_CHAINMASK: 3170 dbglog_printf(timestamp, vap_id, "WAL_DBGID_GET_HW_CHAINMASK " 3171 "txchain=0x%x, rxchain=0x%x", args[0], args[1]); 3172 break; 3173 case WAL_DBGID_SMPS_DISABLE: 3174 dbglog_printf(timestamp, vap_id, "WAL_DBGID_SMPS_DISABLE"); 3175 break; 3176 case WAL_DBGID_SMPS_ENABLE_HW_CNTRL: 3177 dbglog_printf(timestamp, vap_id, 3178 "WAL_DBGID_SMPS_ENABLE_HW_CNTRL low_pwr_mask=0x%x, high_pwr_mask=0x%x", 3179 args[0], args[1]); 3180 break; 3181 case WAL_DBGID_SMPS_SWSEL_CHAINMASK: 3182 dbglog_printf(timestamp, vap_id, 3183 "WAL_DBGID_SMPS_SWSEL_CHAINMASK low_pwr=0x%x, chain_mask=0x%x", 3184 args[0], args[1]); 3185 break; 3186 default: 3187 return false; 3188 } 3189 3190 return true; 3191 } 3192 3193 static A_BOOL 3194 dbglog_scan_print_handler(uint32_t mod_id, 3195 uint16_t vap_id, 3196 uint32_t dbg_id, 3197 uint32_t timestamp, uint16_t numargs, uint32_t *args) 3198 { 3199 static const char *const states[] = { 3200 "IDLE", 3201 "BSSCHAN", 3202 "WAIT_FOREIGN_CHAN", 3203 "FOREIGN_CHANNEL", 3204 "TERMINATING" 3205 }; 3206 3207 static const char *const events[] = { 3208 "REQ", 3209 "STOP", 3210 "BSSCHAN", 3211 "FOREIGN_CHAN", 3212 "CHECK_ACTIVITY", 3213 "REST_TIME_EXPIRE", 3214 "DWELL_TIME_EXPIRE", 3215 "PROBE_TIME_EXPIRE", 3216 }; 3217 3218 switch (dbg_id) { 3219 case DBGLOG_DBGID_SM_FRAMEWORK_PROXY_DBGLOG_MSG: 3220 dbglog_sm_print(timestamp, vap_id, numargs, args, "SCAN", 3221 states, QDF_ARRAY_SIZE(states), events, 3222 QDF_ARRAY_SIZE(events)); 3223 break; 3224 default: 3225 return false; 3226 } 3227 3228 return true; 3229 } 3230 3231 static 3232 A_BOOL dbglog_coex_print_handler(uint32_t mod_id, 3233 uint16_t vap_id, 3234 uint32_t dbg_id, 3235 uint32_t timestamp, 3236 uint16_t numargs, uint32_t *args) 3237 { 3238 uint8_t i; 3239 char *dbg_id_str; 3240 3241 static const char *const wlan_rx_xput_status[] = { 3242 "WLAN_XPUT_NORMAL", 3243 "WLAN_XPUT_UNDER_THRESH", 3244 "WLAN_XPUT_CRITICAL", 3245 "WLAN_XPUT_RECOVERY_TIMEOUT", 3246 }; 3247 3248 static const char *const coex_sched_req[] = { 3249 "SCHED_REQ_NEXT", 3250 "SCHED_REQ_BT", 3251 "SCHED_REQ_WLAN", 3252 "SCHED_REQ_POSTPAUSE", 3253 "SCHED_REQ_UNPAUSE", 3254 }; 3255 3256 static const char *const coex_sched_type[] = { 3257 "SCHED_NONE", 3258 "SCHED_WLAN", 3259 "SCHED_BT", 3260 "SCHED_WLAN_PAUSE", 3261 "SCHED_WLAN_POSTPAUSE", 3262 "SCHED_WLAN_UNPAUSE", 3263 "COEX_SCHED_MWS", 3264 }; 3265 3266 static const char *const coex_trf_mgmt_type[] = { 3267 "TRF_MGMT_FREERUN", 3268 "TRF_MGMT_SHAPE_PM", 3269 "TRF_MGMT_SHAPE_PSP", 3270 "TRF_MGMT_SHAPE_S_CTS", 3271 "TRF_MGMT_SHAPE_OCS", 3272 "TRF_MGMT_SHAPE_FIXED_TIME", 3273 "TRF_MGMT_SHAPE_NOA", 3274 "TRF_MGMT_SHAPE_OCS_CRITICAL", 3275 "TRF_MGMT_NONE", 3276 }; 3277 3278 static const char *const coex_system_status[] = { 3279 "ALL_OFF", 3280 "BTCOEX_NOT_REQD", 3281 "WLAN_IS_IDLE", 3282 "EXECUTE_SCHEME", 3283 "BT_FULL_CONCURRENCY", 3284 "WLAN_SLEEPING", 3285 "WLAN_IS_PAUSED", 3286 "WAIT_FOR_NEXT_ACTION", 3287 "SOC_WAKE", 3288 }; 3289 3290 static const char *const wlan_rssi_type[] = { 3291 "LOW_RSSI", 3292 "MID_RSSI", 3293 "HI_RSSI", 3294 "INVALID_RSSI", 3295 }; 3296 3297 static const char *const coex_bt_scheme[] = { 3298 "IDLE_CTRL", 3299 "ACTIVE_ASYNC_CTRL", 3300 "PASSIVE_SYNC_CTRL", 3301 "ACTIVE_SYNC_CTRL", 3302 "DEFAULT_CTRL", 3303 "CONCURRENCY_CTRL", 3304 }; 3305 3306 static const char *const wal_peer_rx_rate_stats_event_sent[] = { 3307 "PR_RX_EVT_SENT_NONE", 3308 "PR_RX_EVT_SENT_LOWER", 3309 "PR_RX_EVT_SENT_UPPER", 3310 }; 3311 3312 static const char *const wlan_psp_stimulus[] = { 3313 "ENTRY", 3314 "EXIT", 3315 "PS_READY", 3316 "PS_NOT_READY", 3317 "RX_MORE_DATA_RCVD", 3318 "RX_NO_MORE_DATA_RCVD", 3319 "TX_DATA_COMPLT", 3320 "TX_COMPLT", 3321 "TIM_SET", 3322 "REQ", 3323 "DONE_SUCCESS", 3324 "DONE_NO_PS_POLL_ACK", 3325 "DONE_RESPONSE_TMO", 3326 "DONE_DROPPED", 3327 "DONE_FILTERED", 3328 "WLAN_START", 3329 "NONWLAN_START", 3330 "NONWLAN_INTVL_UPDATE", 3331 "NULL_TX", 3332 "NULL_TX_COMPLT", 3333 "BMISS_FIRST", 3334 "NULL_TX_FAIL", 3335 "RX_NO_MORE_DATA_DATAFRM", 3336 }; 3337 3338 static const char *const coex_pspoll_state[] = { 3339 "STATE_DISABLED", 3340 "STATE_NOT_READY", 3341 "STATE_ENABLED", 3342 "STATE_READY", 3343 "STATE_TX_STATUS", 3344 "STATE_RX_STATUS", 3345 }; 3346 3347 static const char *const coex_scheduler_interval[] = { 3348 "COEX_SCHED_NONWLAN_INT", 3349 "COEX_SCHED_WLAN_INT", 3350 }; 3351 3352 static const char *const wlan_weight[] = { 3353 "BT_COEX_BASE", 3354 "BT_COEX_LOW", 3355 "BT_COEX_MID", 3356 "BT_COEX_MID_NONSYNC", 3357 "BT_COEX_HI_NONVOICE", 3358 "BT_COEX_HI", 3359 "BT_COEX_CRITICAL", 3360 }; 3361 3362 static const char *const wlan_power_state[] = { 3363 "SLEEP", 3364 "AWAKE", 3365 "FULL_SLEEP", 3366 }; 3367 3368 static const char *const coex_psp_error_type[] = { 3369 "DISABLED_STATE", 3370 "VDEV_NULL", 3371 "COEX_PSP_ENTRY", 3372 "ZERO_INTERVAL", 3373 "COEX_PSP_EXIT", 3374 "READY_DISABLED", 3375 "READY_NOT_DISABLED", 3376 "POLL_PKT_DROPPED", 3377 "SET_TIMER_PARAM", 3378 }; 3379 3380 static const char *const wlan_phymode[] = { 3381 "A", 3382 "G", 3383 "B", 3384 "G_ONLY", 3385 "NA_HT20", 3386 "NG_HT20", 3387 "NA_HT40", 3388 "NG_HT40", 3389 "AC_VHT20", 3390 "AC_VHT40", 3391 "AC_VHT80", 3392 "AC_VHT20_2G", 3393 "AC_VHT40_2G", 3394 "AC_VHT80_2G", 3395 "UNKNOWN", 3396 }; 3397 3398 static const char *const wlan_curr_band[] = { 3399 "2G", 3400 "5G", 3401 }; 3402 3403 dbg_id_str = dbglog_get_msg(mod_id, dbg_id); 3404 3405 switch (dbg_id) { 3406 case COEX_SYSTEM_UPDATE: 3407 if (numargs == 1 && args[0] < 9) { 3408 dbglog_printf(timestamp, vap_id, "%s: %s", dbg_id_str, 3409 coex_system_status[args[0]]); 3410 } else if (numargs >= 5 && args[0] < 9 && args[2] < 9) { 3411 dbglog_printf(timestamp, vap_id, 3412 "%s: %s, WlanSysState(0x%x), %s, NumChains(%u), AggrLimit(%u)", 3413 dbg_id_str, coex_system_status[args[0]], 3414 args[1], coex_trf_mgmt_type[args[2]], 3415 args[3], args[4]); 3416 } else { 3417 return false; 3418 } 3419 break; 3420 case COEX_SCHED_START: 3421 if (numargs >= 5 && args[0] < 5 && args[2] < 9 && args[3] < 4 3422 && args[4] < 4) { 3423 if (args[1] == 0xffffffff) { 3424 dbglog_printf(timestamp, vap_id, 3425 "%s: %s, DETERMINE_DURATION, %s, %s, %s", 3426 dbg_id_str, 3427 coex_sched_req[args[0]], 3428 coex_trf_mgmt_type[args[2]], 3429 wlan_rx_xput_status[args[3]], 3430 wlan_rssi_type[args[4]]); 3431 } else { 3432 dbglog_printf(timestamp, vap_id, 3433 "%s: %s, IntvlDur(%u), %s, %s, %s", 3434 dbg_id_str, 3435 coex_sched_req[args[0]], args[1], 3436 coex_trf_mgmt_type[args[2]], 3437 wlan_rx_xput_status[args[3]], 3438 wlan_rssi_type[args[4]]); 3439 } 3440 } else { 3441 return false; 3442 } 3443 break; 3444 case COEX_SCHED_RESULT: 3445 if (numargs >= 5 && args[0] < 5 && args[1] < 9 && args[2] < 9) { 3446 dbglog_printf(timestamp, vap_id, 3447 "%s: %s, %s, %s, CoexMgrPolicy(%u), IdleOverride(%u)", 3448 dbg_id_str, coex_sched_req[args[0]], 3449 coex_trf_mgmt_type[args[1]], 3450 coex_trf_mgmt_type[args[2]], args[3], 3451 args[4]); 3452 } else { 3453 return false; 3454 } 3455 break; 3456 case COEX_BT_SCHEME: 3457 if (numargs >= 1 && args[0] < 6) { 3458 dbglog_printf(timestamp, vap_id, "%s: %s", dbg_id_str, 3459 coex_bt_scheme[args[0]]); 3460 } else { 3461 return false; 3462 } 3463 break; 3464 case COEX_TRF_FREERUN: 3465 if (numargs >= 5 && args[0] < 7) { 3466 dbglog_printf(timestamp, vap_id, 3467 "%s: %s, AllocatedBtIntvls(%u), BtIntvlCnt(%u), AllocatedWlanIntvls(%u), WlanIntvlCnt(%u)", 3468 dbg_id_str, coex_sched_type[args[0]], 3469 args[1], args[2], args[3], args[4]); 3470 } else { 3471 return false; 3472 } 3473 break; 3474 case COEX_TRF_SHAPE_PM: /* used by ocs now */ 3475 if (numargs >= 3) { 3476 dbglog_printf(timestamp, vap_id, 3477 "%s: IntvlLength(%u), BtDuration(%u), WlanDuration(%u)", 3478 dbg_id_str, args[0], args[1], args[2]); 3479 } else { 3480 return false; 3481 } 3482 break; 3483 case COEX_SYSTEM_MONITOR: 3484 if (numargs >= 5 && args[1] < 4 && args[4] < 4) { 3485 dbglog_printf(timestamp, vap_id, 3486 "%s: WlanRxCritical(%u), %s, MinDirectRxRate(%u), MonitorActiveNum(%u), %s", 3487 dbg_id_str, args[0], 3488 wlan_rx_xput_status[args[1]], args[2], 3489 args[3], wlan_rssi_type[args[4]]); 3490 } else { 3491 return false; 3492 } 3493 break; 3494 case COEX_RX_RATE: 3495 if (numargs >= 5 && args[4] < 3) { 3496 dbglog_printf(timestamp, vap_id, 3497 "%s: NumUnderThreshPeers(%u), MinDirectRate(%u), LastRateSample(%u), DeltaT(%u), %s", 3498 dbg_id_str, args[0], args[1], args[2], 3499 args[3], 3500 wal_peer_rx_rate_stats_event_sent[args 3501 [4]]); 3502 } else { 3503 return false; 3504 } 3505 break; 3506 case COEX_WLAN_INTERVAL_START: 3507 if (numargs >= 5) { 3508 dbglog_printf(timestamp, vap_id, 3509 "%s: WlanIntvlCnt(%u), Duration(%u), Weight(%u), BaseIdleOverride(%u), WeightMat[0](0x%x)", 3510 dbg_id_str, args[0], args[1], args[2], 3511 args[3], args[4]); 3512 } else { 3513 return false; 3514 } 3515 break; 3516 case COEX_WLAN_POSTPAUSE_INTERVAL_START: 3517 if (numargs >= 4) { 3518 dbglog_printf(timestamp, vap_id, 3519 "%s: WlanPostPauseIntvlCnt(%u), XputMonitorActiveNum(%u), Duration(%u), Weight(%u)", 3520 dbg_id_str, args[0], args[1], args[2], 3521 args[3]); 3522 } else { 3523 return false; 3524 } 3525 break; 3526 case COEX_BT_INTERVAL_START: 3527 if (numargs >= 5) { 3528 dbglog_printf(timestamp, vap_id, 3529 "%s: BtIntvlCnt(%u), Duration(%u), Weight(%u), BaseIdleOverride(%u), WeightMat[0](0x%x), ", 3530 dbg_id_str, args[0], args[1], args[2], 3531 args[3], args[4]); 3532 } else { 3533 return false; 3534 } 3535 break; 3536 case COEX_POWER_CHANGE: 3537 if (numargs >= 3 && args[1] < 3 && args[2] < 3) { 3538 dbglog_printf(timestamp, vap_id, 3539 "%s: Event(0x%x) %s->%s", dbg_id_str, 3540 args[0], wlan_power_state[args[1]], 3541 wlan_power_state[args[2]]); 3542 } else { 3543 return false; 3544 } 3545 break; 3546 case COEX_CHANNEL_CHANGE: 3547 if (numargs >= 5 && args[3] < 2 && args[4] < 15) { 3548 dbglog_printf(timestamp, vap_id, 3549 "%s: %uMhz->%uMhz, WlanSysState(0x%x), CurrBand(%s), PhyMode(%s)", 3550 dbg_id_str, args[0], args[1], args[2], 3551 wlan_curr_band[args[3]], 3552 wlan_phymode[args[4]]); 3553 } else { 3554 return false; 3555 } 3556 break; 3557 case COEX_PSP_MGR_ENTER: 3558 if (numargs >= 5 && args[0] < 23 && 3559 args[1] < 6 && args[3] < 2) { 3560 dbglog_printf(timestamp, vap_id, 3561 "%s: %s, %s, PsPollAvg(%u), %s, CurrT(%u)", 3562 dbg_id_str, wlan_psp_stimulus[args[0]], 3563 coex_pspoll_state[args[1]], args[2], 3564 coex_scheduler_interval[args[3]], 3565 args[4]); 3566 } else { 3567 return false; 3568 } 3569 break; 3570 /* Translate following into decimal */ 3571 case COEX_SINGLECHAIN_DBG_1: 3572 case COEX_SINGLECHAIN_DBG_2: 3573 case COEX_SINGLECHAIN_DBG_3: 3574 case COEX_MULTICHAIN_DBG_1: 3575 case COEX_MULTICHAIN_DBG_2: 3576 case COEX_MULTICHAIN_DBG_3: 3577 case BTCOEX_DBG_MCI_1: 3578 case BTCOEX_DBG_MCI_2: 3579 case BTCOEX_DBG_MCI_3: 3580 case BTCOEX_DBG_MCI_4: 3581 case BTCOEX_DBG_MCI_5: 3582 case BTCOEX_DBG_MCI_6: 3583 case BTCOEX_DBG_MCI_7: 3584 case BTCOEX_DBG_MCI_8: 3585 case BTCOEX_DBG_MCI_9: 3586 case BTCOEX_DBG_MCI_10: 3587 3588 if (numargs > 0) { 3589 dbglog_printf_no_line_break(timestamp, vap_id, "%s: %u", 3590 dbg_id_str, args[0]); 3591 for (i = 1; i < numargs; i++) 3592 printk("%u", args[i]); 3593 printk("\n"); 3594 } else { 3595 return false; 3596 } 3597 break; 3598 case COEX_LinkID: 3599 if (numargs >= 4) { 3600 if (args[0]) { /* Add profile */ 3601 dbglog_printf(timestamp, vap_id, 3602 "%s Alloc: LocalID(%u), RemoteID(%u), MinFreeLocalID(%u)", 3603 dbg_id_str, args[1], args[2], 3604 args[3]); 3605 } else { /* Remove profile */ 3606 dbglog_printf(timestamp, vap_id, 3607 "%s Dealloc: LocalID(%u), RemoteID(%u), MinFreeLocalID(%u)", 3608 dbg_id_str, args[1], args[2], 3609 args[3]); 3610 } 3611 } else { 3612 return false; 3613 } 3614 break; 3615 case COEX_PSP_MGR_RESULT: 3616 if (numargs >= 5 && args[0] < 6) { 3617 dbglog_printf(timestamp, vap_id, 3618 "%s: %s, PsPollAvg(%u), EstimationOverrun(%u), EstimationUnderun(%u), NotReadyErr(%u)", 3619 dbg_id_str, coex_pspoll_state[args[0]], 3620 args[1], args[2], args[3], args[4]); 3621 } else { 3622 return false; 3623 } 3624 break; 3625 case COEX_TRF_SHAPE_PSP: 3626 if (numargs >= 5 && args[0] < 7 && args[1] < 7) { 3627 dbglog_printf(timestamp, vap_id, 3628 "%s: %s, %s, Dur(%u), BtTriggerRecvd(%u), PspWlanCritical(%u)", 3629 dbg_id_str, coex_sched_type[args[0]], 3630 wlan_weight[args[1]], args[2], args[3], 3631 args[4]); 3632 } else { 3633 return false; 3634 } 3635 break; 3636 case COEX_PSP_SPEC_POLL: 3637 if (numargs >= 5) { 3638 dbglog_printf(timestamp, vap_id, 3639 "%s: PsPollSpecEna(%u), Count(%u), NextTS(%u), AllowSpecPsPollTx(%u), Intvl(%u)", 3640 dbg_id_str, args[0], args[1], args[2], 3641 args[3], args[4]); 3642 } else { 3643 return false; 3644 } 3645 break; 3646 case COEX_PSP_READY_STATE: 3647 if (numargs >= 5) { 3648 dbglog_printf(timestamp, vap_id, 3649 "%s: T2NonWlan(%u), CoexSchedulerEndTS(%u), MoreData(%u), PSPRespExpectedTS(%u), NonWlanIdleT(%u)", 3650 dbg_id_str, args[0], args[1], args[2], 3651 args[3], args[4]); 3652 } else { 3653 return false; 3654 } 3655 break; 3656 case COEX_PSP_NONWLAN_INTERVAL: 3657 if (numargs >= 4) { 3658 dbglog_printf(timestamp, vap_id, 3659 "%s: NonWlanBaseIntvl(%u), NonWlanIdleT(%u), PSPSpecIntvl(%u), ApRespTimeout(%u)", 3660 dbg_id_str, args[0], args[1], args[2], 3661 args[3]); 3662 } else { 3663 return false; 3664 } 3665 break; 3666 case COEX_PSP_ERROR: 3667 if (numargs >= 1 && args[0] < 9) { 3668 dbglog_printf_no_line_break(timestamp, vap_id, "%s: %s", 3669 dbg_id_str, 3670 coex_psp_error_type[args 3671 [0]]); 3672 for (i = 1; i < numargs; i++) { 3673 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, 3674 (", %u", args[i])); 3675 } 3676 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, ("\n")); 3677 } else { 3678 return false; 3679 } 3680 break; 3681 case COEX_PSP_STAT_1: 3682 if (numargs >= 5) { 3683 dbglog_printf(timestamp, vap_id, 3684 "%s: ApResp0(%u), ApResp1(%u), ApResp2(%u), ApResp3(%u), ApResp4(%u)", 3685 dbg_id_str, args[0], args[1], args[2], 3686 args[3], args[4]); 3687 } else { 3688 return false; 3689 } 3690 break; 3691 case COEX_PSP_STAT_2: 3692 if (numargs >= 5) { 3693 dbglog_printf(timestamp, vap_id, 3694 "%s: DataPt(%u), Max(%u), NextApRespIndex(%u), NumOfValidDataPts(%u), PsPollAvg(%u)", 3695 dbg_id_str, args[0], args[1], args[2], 3696 args[3], args[4]); 3697 } else { 3698 return false; 3699 } 3700 break; 3701 case COEX_PSP_RX_STATUS_STATE_1: 3702 if (numargs >= 5) { 3703 if (args[2]) { 3704 dbglog_printf(timestamp, vap_id, 3705 "%s: RsExpectedTS(%u), RespActualTS(%u), Overrun, RsOverrunT(%u), RsRxDur(%u)", 3706 dbg_id_str, args[0], args[1], 3707 args[3], args[4]); 3708 } else { 3709 dbglog_printf(timestamp, vap_id, 3710 "%s: RsExpectedTS(%u), RespActualTS(%u), Underrun, RsUnderrunT(%u), RsRxDur(%u)", 3711 dbg_id_str, args[0], args[1], 3712 args[3], args[4]); 3713 } 3714 } else { 3715 return false; 3716 } 3717 break; 3718 default: 3719 return false; 3720 } 3721 3722 return true; 3723 } 3724 3725 static A_BOOL 3726 dbglog_beacon_print_handler(uint32_t mod_id, 3727 uint16_t vap_id, 3728 uint32_t dbg_id, 3729 uint32_t timestamp, 3730 uint16_t numargs, uint32_t *args) 3731 { 3732 static const char *const states[] = { 3733 "INIT", 3734 "ADJUST_START", 3735 "ADJUSTING", 3736 "ADJUST_HOLD", 3737 }; 3738 3739 static const char *const events[] = { 3740 "ADJUST_START", 3741 "ADJUST_RESTART", 3742 "ADJUST_STOP", 3743 "ADJUST_PAUSE", 3744 "ADJUST_UNPAUSE", 3745 "ADJUST_INC_SLOP_STEP", 3746 "ADJUST_HOLD", 3747 "ADJUST_HOLD_TIME_OUT", 3748 }; 3749 3750 switch (dbg_id) { 3751 case DBGLOG_DBGID_SM_FRAMEWORK_PROXY_DBGLOG_MSG: 3752 dbglog_sm_print(timestamp, vap_id, numargs, args, "EARLY_RX", 3753 states, QDF_ARRAY_SIZE(states), events, 3754 QDF_ARRAY_SIZE(events)); 3755 break; 3756 case BEACON_EVENT_EARLY_RX_BMISS_STATUS: 3757 if (numargs == 3) { 3758 dbglog_printf(timestamp, vap_id, 3759 "early_rx bmiss status:rcv=%d total=%d miss=%d", 3760 args[0], args[1], args[2]); 3761 } 3762 break; 3763 case BEACON_EVENT_EARLY_RX_SLEEP_SLOP: 3764 if (numargs == 1) { 3765 dbglog_printf(timestamp, vap_id, 3766 "early_rx update sleep_slop:%d", args[0]); 3767 } 3768 break; 3769 case BEACON_EVENT_EARLY_RX_CONT_BMISS_TIMEOUT: 3770 if (numargs == 1) { 3771 dbglog_printf(timestamp, vap_id, 3772 "early_rx cont bmiss timeout,update sleep_slop:%d", 3773 args[0]); 3774 } 3775 break; 3776 case BEACON_EVENT_EARLY_RX_PAUSE_SKIP_BCN_NUM: 3777 if (numargs == 1) { 3778 dbglog_printf(timestamp, vap_id, 3779 "early_rx skip bcn num:%d", args[0]); 3780 } 3781 break; 3782 case BEACON_EVENT_EARLY_RX_CLK_DRIFT: 3783 if (numargs == 1) { 3784 dbglog_printf(timestamp, vap_id, 3785 "early_rx clk drift:%d", args[0]); 3786 } 3787 break; 3788 case BEACON_EVENT_EARLY_RX_AP_DRIFT: 3789 if (numargs == 1) { 3790 dbglog_printf(timestamp, vap_id, 3791 "early_rx ap drift:%d", args[0]); 3792 } 3793 break; 3794 case BEACON_EVENT_EARLY_RX_BCN_TYPE: 3795 if (numargs == 1) { 3796 dbglog_printf(timestamp, vap_id, 3797 "early_rx bcn type:%d", args[0]); 3798 } 3799 break; 3800 default: 3801 return false; 3802 } 3803 3804 return true; 3805 } 3806 3807 static A_BOOL 3808 dbglog_data_txrx_print_handler(uint32_t mod_id, 3809 uint16_t vap_id, 3810 uint32_t dbg_id, 3811 uint32_t timestamp, 3812 uint16_t numargs, uint32_t *args) 3813 { 3814 switch (dbg_id) { 3815 case DATA_TXRX_DBGID_RX_DATA_SEQ_LEN_INFO: 3816 dbglog_printf(timestamp, vap_id, 3817 "DATA RX seq=0x%x, len=0x%x, stored=0x%x, duperr=0x%x", 3818 args[0], args[1], (args[2] & 0xffff0000) >> 16, 3819 args[2] & 0x0000ffff); 3820 break; 3821 default: 3822 return false; 3823 } 3824 3825 return true; 3826 } 3827 3828 static 3829 A_BOOL dbglog_smps_print_handler(uint32_t mod_id, 3830 uint16_t vap_id, 3831 uint32_t dbg_id, 3832 uint32_t timestamp, 3833 uint16_t numargs, uint32_t *args) 3834 { 3835 static const char *const states[] = { 3836 "S_INACTIVE", 3837 "S_STATIC", 3838 "S_DYNAMIC", 3839 "S_STALLED", 3840 "S_INACTIVE_WAIT", 3841 "S_STATIC_WAIT", 3842 "S_DYNAMIC_WAIT", 3843 }; 3844 3845 static const char *const events[] = { 3846 "E_STOP", 3847 "E_STOP_COMPL", 3848 "E_START", 3849 "E_STATIC", 3850 "E_STATIC_COMPL", 3851 "E_DYNAMIC", 3852 "E_DYNAMIC_COMPL", 3853 "E_STALL", 3854 "E_RSSI_ABOVE_THRESH", 3855 "E_RSSI_BELOW_THRESH", 3856 "E_FORCED_NONE", 3857 }; 3858 switch (dbg_id) { 3859 case DBGLOG_DBGID_SM_FRAMEWORK_PROXY_DBGLOG_MSG: 3860 dbglog_sm_print(timestamp, vap_id, numargs, args, "STA_SMPS SM", 3861 states, QDF_ARRAY_SIZE(states), events, 3862 QDF_ARRAY_SIZE(events)); 3863 break; 3864 case STA_SMPS_DBGID_CREATE_PDEV_INSTANCE: 3865 dbglog_printf(timestamp, vap_id, "STA_SMPS Create PDEV ctx %#x", 3866 args[0]); 3867 break; 3868 case STA_SMPS_DBGID_CREATE_VIRTUAL_CHAN_INSTANCE: 3869 dbglog_printf(timestamp, vap_id, 3870 "STA_SMPS Create Virtual Chan ctx %#x", args[0]); 3871 break; 3872 case STA_SMPS_DBGID_DELETE_VIRTUAL_CHAN_INSTANCE: 3873 dbglog_printf(timestamp, vap_id, 3874 "STA_SMPS Delete Virtual Chan ctx %#x", args[0]); 3875 break; 3876 case STA_SMPS_DBGID_CREATE_STA_INSTANCE: 3877 dbglog_printf(timestamp, vap_id, "STA_SMPS Create STA ctx %#x", 3878 args[0]); 3879 break; 3880 case STA_SMPS_DBGID_DELETE_STA_INSTANCE: 3881 dbglog_printf(timestamp, vap_id, "STA_SMPS Delete STA ctx %#x", 3882 args[0]); 3883 break; 3884 case STA_SMPS_DBGID_VIRTUAL_CHAN_SMPS_START: 3885 break; 3886 case STA_SMPS_DBGID_VIRTUAL_CHAN_SMPS_STOP: 3887 break; 3888 case STA_SMPS_DBGID_SEND_SMPS_ACTION_FRAME: 3889 dbglog_printf(timestamp, vap_id, 3890 "STA_SMPS STA %#x Signal SMPS mode as %s; cb_flags %#x", 3891 args[0], 3892 (args[1] == 3893 0 ? "DISABLED" : (args[1] == 3894 0x1 ? "STATIC" : (args[1] == 3895 0x3 ? 3896 "DYNAMIC" : 3897 "UNKNOWN"))), 3898 args[2]); 3899 break; 3900 case STA_SMPS_DBGID_DTIM_EBT_EVENT_CHMASK_UPDATE: 3901 dbglog_printf(timestamp, vap_id, 3902 "STA_SMPS_DBGID_DTIM_EBT_EVENT_CHMASK_UPDATE"); 3903 break; 3904 case STA_SMPS_DBGID_DTIM_CHMASK_UPDATE: 3905 dbglog_printf(timestamp, vap_id, 3906 "STA_SMPS_DBGID_DTIM_CHMASK_UPDATE tx_mask %#x rx_mask %#x arb_dtim_mask %#x", 3907 args[0], args[1], args[2]); 3908 break; 3909 case STA_SMPS_DBGID_DTIM_BEACON_EVENT_CHMASK_UPDATE: 3910 dbglog_printf(timestamp, vap_id, 3911 "STA_SMPS_DBGID_DTIM_BEACON_EVENT_CHMASK_UPDATE"); 3912 break; 3913 case STA_SMPS_DBGID_DTIM_POWER_STATE_CHANGE: 3914 dbglog_printf(timestamp, vap_id, 3915 "STA_SMPS_DBGID_DTIM_POWER_STATE_CHANGE cur_pwr_state %s new_pwr_state %s", 3916 (args[0] == 3917 0x1 ? "SLEEP" : (args[0] == 3918 0x2 ? "AWAKE" : (args[0] == 3919 0x3 ? 3920 "FULL_SLEEP" : 3921 "UNKNOWN"))), 3922 (args[1] == 3923 0x1 ? "SLEEP" : (args[1] == 3924 0x2 ? "AWAKE" : (args[1] == 3925 0x3 ? 3926 "FULL_SLEEP" : 3927 "UNKNOWN")))); 3928 break; 3929 case STA_SMPS_DBGID_DTIM_CHMASK_UPDATE_SLEEP: 3930 dbglog_printf(timestamp, vap_id, 3931 "STA_SMPS_DBGID_DTIM_CHMASK_UPDATE_SLEEP tx_mask %#x rx_mask %#x orig_rx %#x dtim_rx %#x", 3932 args[0], args[1], args[2], args[3]); 3933 break; 3934 case STA_SMPS_DBGID_DTIM_CHMASK_UPDATE_AWAKE: 3935 dbglog_printf(timestamp, vap_id, 3936 "STA_SMPS_DBGID_DTIM_CHMASK_UPDATE_AWAKE tx_mask %#x rx_mask %#x orig_rx %#x", 3937 args[0], args[1], args[2]); 3938 break; 3939 default: 3940 dbglog_printf(timestamp, vap_id, "STA_SMPS: UNKNOWN DBGID!"); 3941 return false; 3942 } 3943 3944 return true; 3945 } 3946 3947 static A_BOOL 3948 dbglog_p2p_print_handler(uint32_t mod_id, 3949 uint16_t vap_id, 3950 uint32_t dbg_id, 3951 uint32_t timestamp, uint16_t numargs, uint32_t *args) 3952 { 3953 static const char *const states[] = { 3954 "ACTIVE", 3955 "DOZE", 3956 "TX_BCN", 3957 "CTWIN", 3958 "OPPPS", 3959 }; 3960 3961 static const char *const events[] = { 3962 "ONESHOT_NOA", 3963 "CTWINDOW", 3964 "PERIODIC_NOA", 3965 "IDLE", 3966 "NOA_CHANGED", 3967 "TBTT", 3968 "TX_BCN_CMP", 3969 "OPPPS_OK", 3970 "OPPPS_CHANGED", 3971 }; 3972 3973 switch (dbg_id) { 3974 case DBGLOG_DBGID_SM_FRAMEWORK_PROXY_DBGLOG_MSG: 3975 dbglog_sm_print(timestamp, vap_id, numargs, args, "P2P GO PS", 3976 states, QDF_ARRAY_SIZE(states), events, 3977 QDF_ARRAY_SIZE(events)); 3978 break; 3979 default: 3980 return false; 3981 } 3982 3983 return true; 3984 } 3985 3986 static A_BOOL 3987 dbglog_pcielp_print_handler(uint32_t mod_id, 3988 uint16_t vap_id, 3989 uint32_t dbg_id, 3990 uint32_t timestamp, 3991 uint16_t numargs, uint32_t *args) 3992 { 3993 static const char *const states[] = { 3994 "STOP", 3995 "TX", 3996 "RX", 3997 "SLEEP", 3998 "SUSPEND", 3999 }; 4000 4001 static const char *const events[] = { 4002 "VDEV_UP", 4003 "ALL_VDEV_DOWN", 4004 "AWAKE", 4005 "SLEEP", 4006 "TX_ACTIVITY", 4007 "TX_INACTIVITY", 4008 "TX_AC_CHANGE", 4009 "SUSPEND", 4010 "RESUME", 4011 }; 4012 4013 switch (dbg_id) { 4014 case DBGLOG_DBGID_SM_FRAMEWORK_PROXY_DBGLOG_MSG: 4015 dbglog_sm_print(timestamp, vap_id, numargs, args, "PCIELP", 4016 states, QDF_ARRAY_SIZE(states), events, 4017 QDF_ARRAY_SIZE(events)); 4018 break; 4019 default: 4020 return false; 4021 } 4022 4023 return true; 4024 } 4025 4026 #ifdef WLAN_OPEN_SOURCE 4027 static int dbglog_block_open(struct inode *inode, struct file *file) 4028 { 4029 struct fwdebug *fwlog = inode->i_private; 4030 4031 if (fwlog->fwlog_open) 4032 return -EBUSY; 4033 4034 fwlog->fwlog_open = true; 4035 4036 file->private_data = inode->i_private; 4037 return 0; 4038 } 4039 4040 static int dbglog_block_release(struct inode *inode, struct file *file) 4041 { 4042 struct fwdebug *fwlog = inode->i_private; 4043 4044 fwlog->fwlog_open = false; 4045 4046 return 0; 4047 } 4048 4049 static ssize_t dbglog_block_read(struct file *file, 4050 char __user *user_buf, 4051 size_t count, loff_t *ppos) 4052 { 4053 struct fwdebug *fwlog = file->private_data; 4054 struct sk_buff *skb; 4055 ssize_t ret_cnt; 4056 size_t len = 0, not_copied; 4057 char *buf; 4058 int ret; 4059 4060 buf = vmalloc(count); 4061 if (!buf) 4062 return -ENOMEM; 4063 4064 spin_lock_bh(&fwlog->fwlog_queue.lock); 4065 4066 if (skb_queue_len(&fwlog->fwlog_queue) == 0) { 4067 /* we must init under queue lock */ 4068 init_completion(&fwlog->fwlog_completion); 4069 4070 spin_unlock_bh(&fwlog->fwlog_queue.lock); 4071 4072 ret = 4073 wait_for_completion_interruptible(&fwlog->fwlog_completion); 4074 if (ret == -ERESTARTSYS) { 4075 vfree(buf); 4076 return ret; 4077 } 4078 4079 spin_lock_bh(&fwlog->fwlog_queue.lock); 4080 } 4081 4082 while ((skb = __skb_dequeue(&fwlog->fwlog_queue))) { 4083 if (skb->len > count - len) { 4084 /* not enough space, put skb back and leave */ 4085 __skb_queue_head(&fwlog->fwlog_queue, skb); 4086 break; 4087 } 4088 4089 memcpy(buf + len, skb->data, skb->len); 4090 len += skb->len; 4091 4092 kfree_skb(skb); 4093 } 4094 4095 spin_unlock_bh(&fwlog->fwlog_queue.lock); 4096 4097 /* FIXME: what to do if len == 0? */ 4098 not_copied = copy_to_user(user_buf, buf, len); 4099 if (not_copied != 0) { 4100 ret_cnt = -EFAULT; 4101 goto out; 4102 } 4103 4104 *ppos = *ppos + len; 4105 4106 ret_cnt = len; 4107 4108 out: 4109 vfree(buf); 4110 4111 return ret_cnt; 4112 } 4113 4114 static const struct file_operations fops_dbglog_block = { 4115 .open = dbglog_block_open, 4116 .release = dbglog_block_release, 4117 .read = dbglog_block_read, 4118 .owner = THIS_MODULE, 4119 .llseek = default_llseek, 4120 }; 4121 4122 #ifdef WLAN_DEBUGFS 4123 4124 static void dbglog_debugfs_init(wmi_unified_t wmi_handle) 4125 { 4126 4127 wmi_handle->debugfs_phy = debugfs_create_dir(CLD_DEBUGFS_DIR, NULL); 4128 if (!wmi_handle->debugfs_phy) { 4129 qdf_print("Failed to create WMI debug fs"); 4130 return; 4131 } 4132 4133 debugfs_create_file(DEBUGFS_BLOCK_NAME, 0400, 4134 wmi_handle->debugfs_phy, &wmi_handle->dbglog, 4135 &fops_dbglog_block); 4136 4137 return; 4138 } 4139 4140 static void dbglog_debugfs_remove(wmi_unified_t wmi_handle) 4141 { 4142 debugfs_remove_recursive(wmi_handle->debugfs_phy); 4143 } 4144 4145 #else 4146 4147 static void dbglog_debugfs_init(wmi_unified_t wmi_handle) 4148 { 4149 } 4150 4151 static void dbglog_debugfs_remove(wmi_unified_t wmi_handle) 4152 { 4153 } 4154 4155 #endif /* End of WLAN_DEBUGFS */ 4156 4157 #endif /* WLAN_OPEN_SOURCE */ 4158 4159 /** 4160 * cnss_diag_handle_crash_inject() - API to handle crash inject command 4161 * @slot: pointer to struct dbglog_slot 4162 * 4163 * API to handle CNSS diag crash inject command 4164 * 4165 * Return: None 4166 */ 4167 static void cnss_diag_handle_crash_inject(struct dbglog_slot *slot) 4168 { 4169 switch (slot->diag_type) { 4170 case DIAG_TYPE_CRASH_INJECT: 4171 if (slot->length != 2) { 4172 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 4173 ("crash_inject cmd error\n")); 4174 return; 4175 } 4176 4177 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, 4178 ("%s : DIAG_TYPE_CRASH_INJECT: %d %d\n", 4179 __func__, slot->payload[0], 4180 slot->payload[1])); 4181 if (!tgt_assert_enable) { 4182 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, 4183 ("%s: tgt Assert Disabled\n", 4184 __func__)); 4185 return; 4186 } 4187 wma_cli_set2_command(0, (int)GEN_PARAM_CRASH_INJECT, 4188 slot->payload[0], 4189 slot->payload[1], GEN_CMD); 4190 break; 4191 default: 4192 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Unknown cmd[%d] error\n", 4193 slot->diag_type)); 4194 break; 4195 } 4196 } 4197 4198 #ifdef CNSS_GENL 4199 /** 4200 * cnss_diag_cmd_handler() - API to handle CNSS diag command 4201 * @data: Data received 4202 * @data_len: length of the data received 4203 * @ctx: Pointer to stored context 4204 * @pid: Process ID 4205 * 4206 * API to handle CNSS diag commands from user space 4207 * 4208 * Return: None 4209 */ 4210 static void cnss_diag_cmd_handler(const void *data, int data_len, 4211 void *ctx, int pid) 4212 { 4213 struct dbglog_slot *slot = NULL; 4214 struct nlattr *tb[QCA_WLAN_VENDOR_ATTR_MAX + 1]; 4215 4216 /* 4217 * audit note: it is ok to pass a NULL policy here since a 4218 * length check on the data is added later already 4219 */ 4220 if (wlan_cfg80211_nla_parse(tb, CLD80211_ATTR_MAX, 4221 data, data_len, NULL)) { 4222 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("%s: nla parse fails\n", 4223 __func__)); 4224 return; 4225 } 4226 4227 if (!tb[CLD80211_ATTR_DATA]) { 4228 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("%s: attr VENDOR_DATA fails\n", 4229 __func__)); 4230 return; 4231 } 4232 4233 if (nla_len(tb[CLD80211_ATTR_DATA]) != sizeof(struct dbglog_slot)) { 4234 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("%s: attr length check fails\n", 4235 __func__)); 4236 return; 4237 } 4238 slot = (struct dbglog_slot *)nla_data(tb[CLD80211_ATTR_DATA]); 4239 4240 if (!slot) { 4241 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("%s: data NULL\n", __func__)); 4242 return; 4243 } 4244 4245 cnss_diag_handle_crash_inject(slot); 4246 return; 4247 } 4248 4249 /** 4250 * cnss_diag_activate_service() - API to register CNSS diag cmd handler 4251 * 4252 * API to register the CNSS diag command handler using new genl infra. 4253 * Return type is zero to match with legacy prototype 4254 * 4255 * Return: 0 4256 */ 4257 int cnss_diag_activate_service(void) 4258 { 4259 register_cld_cmd_cb(WLAN_NL_MSG_CNSS_DIAG, cnss_diag_cmd_handler, NULL); 4260 return 0; 4261 } 4262 4263 #else 4264 4265 /** 4266 * brief cnss_diag_msg_callback() - Call back invoked by netlink service 4267 * 4268 * This function gets invoked by netlink service when a message is recevied 4269 * from the cnss-diag application in user-space. 4270 * 4271 * param - 4272 * - skb - skb with netlink message 4273 * 4274 * return - 0 for success, non zero for failure 4275 */ 4276 static int cnss_diag_msg_callback(struct sk_buff *skb) 4277 { 4278 struct nlmsghdr *nlh; 4279 uint8_t *msg; 4280 4281 nlh = (struct nlmsghdr *)skb->data; 4282 if (!nlh) { 4283 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 4284 ("%s: Netlink header null\n", __func__)); 4285 return A_ERROR; 4286 } 4287 4288 msg = NLMSG_DATA(nlh); 4289 cnss_diag_handle_crash_inject((struct dbglog_slot *)msg); 4290 4291 return 0; 4292 } 4293 4294 /** 4295 * brief cnss_diag_activate_service() - Activate cnss_diag message handler 4296 * 4297 * This function registers a handler to receive netlink message from 4298 * an cnss-diag application process. 4299 * 4300 * param - 4301 * - None 4302 * 4303 * return - 0 for success, non zero for failure 4304 */ 4305 int cnss_diag_activate_service(void) 4306 { 4307 int ret = 0; 4308 4309 /* Register the msg handler for msgs addressed to WLAN_NL_MSG_OEM */ 4310 ret = nl_srv_register(WLAN_NL_MSG_CNSS_DIAG, cnss_diag_msg_callback); 4311 if (ret) { 4312 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 4313 ("CNSS-DIAG Registration failed")); 4314 return ret; 4315 } 4316 return 0; 4317 } 4318 #endif 4319 4320 static A_BOOL 4321 dbglog_wow_print_handler(uint32_t mod_id, 4322 uint16_t vap_id, 4323 uint32_t dbg_id, 4324 uint32_t timestamp, uint16_t numargs, uint32_t *args) 4325 { 4326 4327 switch (dbg_id) { 4328 case WOW_NS_OFLD_ENABLE: 4329 if (4 == numargs) { 4330 dbglog_printf(timestamp, vap_id, 4331 "Enable NS offload, for sender %02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x", 4332 *(uint8_t *) &args[0], 4333 *((uint8_t *) &args[0] + 1), 4334 *((uint8_t *) &args[0] + 2), 4335 *((uint8_t *) &args[0] + 3), 4336 *(uint8_t *) &args[1], 4337 *((uint8_t *) &args[1] + 1), 4338 *((uint8_t *) &args[1] + 2), 4339 *((uint8_t *) &args[1] + 3), 4340 *(uint8_t *) &args[2], 4341 *((uint8_t *) &args[2] + 1), 4342 *((uint8_t *) &args[2] + 2), 4343 *((uint8_t *) &args[2] + 3), 4344 *(uint8_t *) &args[3], 4345 *((uint8_t *) &args[3] + 1), 4346 *((uint8_t *) &args[3] + 2), 4347 *((uint8_t *) &args[3] + 3)); 4348 } else { 4349 return false; 4350 } 4351 break; 4352 case WOW_ARP_OFLD_ENABLE: 4353 if (1 == numargs) { 4354 dbglog_printf(timestamp, vap_id, 4355 "Enable ARP offload, for sender %d.%d.%d.%d", 4356 *(uint8_t *) args, 4357 *((uint8_t *) args + 1), 4358 *((uint8_t *) args + 2), 4359 *((uint8_t *) args + 3)); 4360 } else { 4361 return false; 4362 } 4363 break; 4364 case WOW_NS_ARP_OFLD_DISABLE: 4365 if (0 == numargs) { 4366 dbglog_printf(timestamp, vap_id, 4367 "disable NS/ARP offload"); 4368 } else { 4369 return false; 4370 } 4371 break; 4372 case WOW_NS_RECEIVED: 4373 if (4 == numargs) { 4374 dbglog_printf(timestamp, vap_id, 4375 "NS requested from %02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x", 4376 *(uint8_t *) &args[0], 4377 *((uint8_t *) &args[0] + 1), 4378 *((uint8_t *) &args[0] + 2), 4379 *((uint8_t *) &args[0] + 3), 4380 *(uint8_t *) &args[1], 4381 *((uint8_t *) &args[1] + 1), 4382 *((uint8_t *) &args[1] + 2), 4383 *((uint8_t *) &args[1] + 3), 4384 *(uint8_t *) &args[2], 4385 *((uint8_t *) &args[2] + 1), 4386 *((uint8_t *) &args[2] + 2), 4387 *((uint8_t *) &args[2] + 3), 4388 *(uint8_t *) &args[3], 4389 *((uint8_t *) &args[3] + 1), 4390 *((uint8_t *) &args[3] + 2), 4391 *((uint8_t *) &args[3] + 3)); 4392 } else { 4393 return false; 4394 } 4395 break; 4396 case WOW_NS_REPLIED: 4397 if (4 == numargs) { 4398 dbglog_printf(timestamp, vap_id, 4399 "NS replied to %02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x", 4400 *(uint8_t *) &args[0], 4401 *((uint8_t *) &args[0] + 1), 4402 *((uint8_t *) &args[0] + 2), 4403 *((uint8_t *) &args[0] + 3), 4404 *(uint8_t *) &args[1], 4405 *((uint8_t *) &args[1] + 1), 4406 *((uint8_t *) &args[1] + 2), 4407 *((uint8_t *) &args[1] + 3), 4408 *(uint8_t *) &args[2], 4409 *((uint8_t *) &args[2] + 1), 4410 *((uint8_t *) &args[2] + 2), 4411 *((uint8_t *) &args[2] + 3), 4412 *(uint8_t *) &args[3], 4413 *((uint8_t *) &args[3] + 1), 4414 *((uint8_t *) &args[3] + 2), 4415 *((uint8_t *) &args[3] + 3)); 4416 } else { 4417 return false; 4418 } 4419 break; 4420 case WOW_ARP_RECEIVED: 4421 if (1 == numargs) { 4422 dbglog_printf(timestamp, vap_id, 4423 "ARP requested from %d.%d.%d.%d", 4424 *(uint8_t *) args, 4425 *((uint8_t *) args + 1), 4426 *((uint8_t *) args + 2), 4427 *((uint8_t *) args + 3)); 4428 } else { 4429 return false; 4430 } 4431 break; 4432 break; 4433 case WOW_ARP_REPLIED: 4434 if (1 == numargs) { 4435 dbglog_printf(timestamp, vap_id, 4436 "ARP replied to %d.%d.%d.%d", 4437 *(uint8_t *) args, 4438 *((uint8_t *) args + 1), 4439 *((uint8_t *) args + 2), 4440 *((uint8_t *) args + 3)); 4441 } else { 4442 return false; 4443 } 4444 break; 4445 default: 4446 return false; 4447 } 4448 4449 return true; 4450 } 4451 4452 int dbglog_parser_type_init(wmi_unified_t wmi_handle, int type) 4453 { 4454 if (type >= DBGLOG_PROCESS_MAX) 4455 return A_ERROR; 4456 4457 dbglog_process_type = type; 4458 gprint_limiter = false; 4459 4460 return A_OK; 4461 } 4462 4463 int dbglog_init(wmi_unified_t wmi_handle) 4464 { 4465 int res = 0; 4466 4467 OS_MEMSET(mod_print, 0, sizeof(mod_print)); 4468 4469 dbglog_reg_modprint(WLAN_MODULE_STA_PWRSAVE, 4470 dbglog_sta_powersave_print_handler); 4471 dbglog_reg_modprint(WLAN_MODULE_AP_PWRSAVE, 4472 dbglog_ap_powersave_print_handler); 4473 dbglog_reg_modprint(WLAN_MODULE_WAL, dbglog_wal_print_handler); 4474 dbglog_reg_modprint(WLAN_MODULE_SCAN, dbglog_scan_print_handler); 4475 dbglog_reg_modprint(WLAN_MODULE_RATECTRL, 4476 dbglog_ratectrl_print_handler); 4477 dbglog_reg_modprint(WLAN_MODULE_ANI, dbglog_ani_print_handler); 4478 dbglog_reg_modprint(WLAN_MODULE_COEX, dbglog_coex_print_handler); 4479 dbglog_reg_modprint(WLAN_MODULE_BEACON, dbglog_beacon_print_handler); 4480 dbglog_reg_modprint(WLAN_MODULE_WOW, dbglog_wow_print_handler); 4481 dbglog_reg_modprint(WLAN_MODULE_DATA_TXRX, 4482 dbglog_data_txrx_print_handler); 4483 dbglog_reg_modprint(WLAN_MODULE_STA_SMPS, dbglog_smps_print_handler); 4484 dbglog_reg_modprint(WLAN_MODULE_P2P, dbglog_p2p_print_handler); 4485 dbglog_reg_modprint(WLAN_MODULE_PCIELP, dbglog_pcielp_print_handler); 4486 dbglog_reg_modprint(WLAN_MODULE_IBSS_PWRSAVE, 4487 dbglog_ibss_powersave_print_handler); 4488 tgt_assert_enable = wmi_handle->tgt_force_assert_enable; 4489 4490 /* Register handler for F3 or debug messages */ 4491 res = 4492 wmi_unified_register_event_handler(wmi_handle, 4493 wmi_dbg_msg_event_id, 4494 dbglog_parse_debug_logs, 4495 WMA_RX_WORK_CTX); 4496 if (res != 0) 4497 return res; 4498 4499 /* Register handler for FW diag events */ 4500 res = wmi_unified_register_event_handler(wmi_handle, 4501 wmi_diag_container_event_id, 4502 fw_diag_data_event_handler, 4503 WMA_RX_WORK_CTX); 4504 if (res != 0) 4505 return res; 4506 4507 /* Register handler for new FW diag Event, LOG, MSG combined */ 4508 res = wmi_unified_register_event_handler(wmi_handle, wmi_diag_event_id, 4509 diag_fw_handler, 4510 WMA_RX_WORK_CTX); 4511 if (res != 0) 4512 return res; 4513 4514 #ifdef WLAN_OPEN_SOURCE 4515 /* Initialize the fw debug log queue */ 4516 skb_queue_head_init(&wmi_handle->dbglog.fwlog_queue); 4517 init_completion(&wmi_handle->dbglog.fwlog_completion); 4518 4519 /* Initialize debugfs */ 4520 dbglog_debugfs_init(wmi_handle); 4521 #endif /* WLAN_OPEN_SOURCE */ 4522 4523 return res; 4524 } 4525 4526 int dbglog_deinit(wmi_unified_t wmi_handle) 4527 { 4528 int res = 0; 4529 4530 #ifdef WLAN_OPEN_SOURCE 4531 /* DeInitialize the fw debug log queue */ 4532 skb_queue_purge(&wmi_handle->dbglog.fwlog_queue); 4533 complete(&wmi_handle->dbglog.fwlog_completion); 4534 4535 /* Deinitialize the debugfs */ 4536 dbglog_debugfs_remove(wmi_handle); 4537 #endif /* WLAN_OPEN_SOURCE */ 4538 tgt_assert_enable = 0; 4539 res = 4540 wmi_unified_unregister_event_handler(wmi_handle, 4541 wmi_dbg_msg_event_id); 4542 if (res != 0) 4543 return res; 4544 4545 return res; 4546 } 4547