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