1 /* 2 * Copyright (c) 2013-2019 The Linux Foundation. All rights reserved. 3 * 4 * Permission to use, copy, modify, and/or distribute this software for 5 * any purpose with or without fee is hereby granted, provided that the 6 * above copyright notice and this permission notice appear in all 7 * copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 10 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 11 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 12 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 13 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 14 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 15 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 16 * PERFORMANCE OF THIS SOFTWARE. 17 */ 18 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 void 1332 dbglog_set_vap_enable_bitmap(wmi_unified_t wmi_handle, 1333 uint32_t vap_enable_bitmap) 1334 { 1335 wma_config_debug_module_cmd(wmi_handle, 1336 WMI_DEBUG_LOG_PARAM_VDEV_ENABLE_BITMAP, 1337 vap_enable_bitmap, NULL, 0); 1338 } 1339 1340 void 1341 dbglog_set_mod_enable_bitmap(wmi_unified_t wmi_handle, uint32_t log_level, 1342 uint32_t *mod_enable_bitmap, uint32_t bitmap_len) 1343 { 1344 wma_config_debug_module_cmd(wmi_handle, 1345 WMI_DEBUG_LOG_PARAM_MOD_ENABLE_BITMAP, 1346 log_level, mod_enable_bitmap, bitmap_len); 1347 } 1348 1349 int dbglog_report_enable(wmi_unified_t wmi_handle, bool isenable) 1350 { 1351 int bitmap[2] = { 0 }; 1352 1353 if (isenable) { 1354 /* set the vap enable bitmap */ 1355 dbglog_set_vap_enable_bitmap(wmi_handle, 0xFFFF); 1356 bitmap[0] = 0xFFFFFFFF; 1357 bitmap[1] = 0x1F; 1358 /* set the module level bitmap */ 1359 dbglog_set_mod_enable_bitmap(wmi_handle, 0x0, bitmap, 2); 1360 } else { 1361 dbglog_set_vap_enable_bitmap(wmi_handle, bitmap[0]); 1362 dbglog_set_mod_enable_bitmap(wmi_handle, DBGLOG_LVL_MAX, bitmap, 1363 2); 1364 } 1365 return 0; 1366 } 1367 1368 static char *dbglog_get_msg(uint32_t moduleid, uint32_t debugid) 1369 { 1370 static char unknown_str[64]; 1371 1372 if (moduleid < WLAN_MODULE_ID_MAX && debugid < MAX_DBG_MSGS) { 1373 char *str = DBG_MSG_ARR[moduleid][debugid]; 1374 if (str && str[0] != '\0') 1375 return str; 1376 } 1377 1378 snprintf(unknown_str, sizeof(unknown_str), 1379 "UNKNOWN %u:%u", moduleid, debugid); 1380 1381 return unknown_str; 1382 } 1383 1384 static 1385 void dbglog_printf(uint32_t timestamp, uint16_t vap_id, const char *fmt, ...) 1386 { 1387 char buf[128]; 1388 va_list ap; 1389 1390 if (vap_id < DBGLOG_MAX_VDEVID) { 1391 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, 1392 (DBGLOG_PRINT_PREFIX "[%u] vap-%u ", timestamp, 1393 vap_id)); 1394 } else { 1395 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, 1396 (DBGLOG_PRINT_PREFIX "[%u] ", timestamp)); 1397 } 1398 1399 va_start(ap, fmt); 1400 vsnprintf(buf, sizeof(buf), fmt, ap); 1401 va_end(ap); 1402 1403 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, ("%s\n", buf)); 1404 } 1405 1406 static void 1407 dbglog_printf_no_line_break(uint32_t timestamp, 1408 uint16_t vap_id, const char *fmt, ...) 1409 { 1410 char buf[128]; 1411 va_list ap; 1412 1413 if (vap_id < DBGLOG_MAX_VDEVID) { 1414 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, 1415 (DBGLOG_PRINT_PREFIX "[%u] vap-%u ", timestamp, 1416 vap_id)); 1417 } else { 1418 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, 1419 (DBGLOG_PRINT_PREFIX "[%u] ", timestamp)); 1420 } 1421 1422 va_start(ap, fmt); 1423 vsnprintf(buf, sizeof(buf), fmt, ap); 1424 va_end(ap); 1425 1426 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, ("%s", buf)); 1427 } 1428 1429 #define USE_NUMERIC 0 1430 1431 static A_BOOL 1432 dbglog_default_print_handler(uint32_t mod_id, uint16_t vap_id, uint32_t dbg_id, 1433 uint32_t timestamp, uint16_t numargs, 1434 uint32_t *args) 1435 { 1436 int i; 1437 1438 if (vap_id < DBGLOG_MAX_VDEVID) { 1439 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, 1440 (DBGLOG_PRINT_PREFIX "[%u] vap-%u %s ( ", 1441 timestamp, vap_id, dbglog_get_msg(mod_id, 1442 dbg_id))); 1443 } else { 1444 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, 1445 (DBGLOG_PRINT_PREFIX "[%u] %s ( ", timestamp, 1446 dbglog_get_msg(mod_id, dbg_id))); 1447 } 1448 1449 for (i = 0; i < numargs; i++) { 1450 #if USE_NUMERIC 1451 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, ("%u", args[i])); 1452 #else 1453 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, ("%#x", args[i])); 1454 #endif 1455 if ((i + 1) < numargs) { 1456 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, (", ")); 1457 } 1458 } 1459 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, (" )\n")); 1460 1461 return true; 1462 } 1463 1464 #define DBGLOG_PARSE_ARGS_STRING_LENGTH (DBGLOG_NUM_ARGS_MAX * 11 + 10) 1465 static int dbglog_print_raw_data(uint32_t *buffer, uint32_t length) 1466 { 1467 uint32_t timestamp; 1468 uint32_t debugid; 1469 uint32_t moduleid; 1470 uint16_t numargs, curArgs; 1471 uint32_t count = 0, totalWriteLen, writeLen; 1472 char parseArgsString[DBGLOG_PARSE_ARGS_STRING_LENGTH]; 1473 char *dbgidString; 1474 1475 while ((count + 1) < length) { 1476 1477 debugid = DBGLOG_GET_DBGID(buffer[count + 1]); 1478 moduleid = DBGLOG_GET_MODULEID(buffer[count + 1]); 1479 numargs = DBGLOG_GET_NUMARGS(buffer[count + 1]); 1480 timestamp = DBGLOG_GET_TIME_STAMP(buffer[count]); 1481 1482 if (moduleid < WLAN_MODULE_ID_MAX && debugid < MAX_DBG_MSGS 1483 && numargs <= DBGLOG_NUM_ARGS_MAX) { 1484 1485 OS_MEMZERO(parseArgsString, sizeof(parseArgsString)); 1486 totalWriteLen = 0; 1487 1488 if (!numargs || (count + numargs + 2 > length)) 1489 goto skip_args_processing; 1490 1491 for (curArgs = 0; curArgs < numargs; curArgs++) { 1492 /* 1493 * Using sprintf_s instead of sprintf, 1494 * to avoid length overflow 1495 */ 1496 writeLen = 1497 snprintf(parseArgsString + totalWriteLen, 1498 DBGLOG_PARSE_ARGS_STRING_LENGTH - 1499 totalWriteLen, "%x ", 1500 buffer[count + 2 + curArgs]); 1501 totalWriteLen += writeLen; 1502 } 1503 skip_args_processing: 1504 if (debugid < MAX_DBG_MSGS) { 1505 dbgidString = DBG_MSG_ARR[moduleid][debugid]; 1506 if (dbgidString) { 1507 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, 1508 ("fw:%s(%x %x):%s\n", 1509 dbgidString, timestamp, 1510 buffer[count + 1], 1511 parseArgsString)); 1512 } else { 1513 /* host need sync with FW id */ 1514 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, 1515 ("fw:%s:m:%x,id:%x(%x %x):%s\n", 1516 "UNKNOWN", moduleid, 1517 debugid, timestamp, 1518 buffer[count + 1], 1519 parseArgsString)); 1520 } 1521 } else if (debugid == 1522 DBGLOG_DBGID_SM_FRAMEWORK_PROXY_DBGLOG_MSG) { 1523 /* specific debugid */ 1524 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, 1525 ("fw:%s:m:%x,id:%x(%x %x):%s\n", 1526 "DBGLOG_SM_MSG", moduleid, 1527 debugid, timestamp, 1528 buffer[count + 1], 1529 parseArgsString)); 1530 } else { 1531 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, 1532 ("fw:%s:m:%x,id:%x(%x %x):%s\n", 1533 "UNKNOWN", moduleid, debugid, 1534 timestamp, buffer[count + 1], 1535 parseArgsString)); 1536 } 1537 } 1538 1539 /* 32 bit Time stamp + 32 bit Dbg header */ 1540 count += numargs + 2; 1541 } 1542 1543 return 0; 1544 1545 } 1546 1547 #ifdef WLAN_OPEN_SOURCE 1548 static int 1549 dbglog_debugfs_raw_data(wmi_unified_t wmi_handle, const uint8_t *buf, 1550 uint32_t length, uint32_t dropped) 1551 { 1552 struct fwdebug *fwlog = (struct fwdebug *)&wmi_handle->dbglog; 1553 struct dbglog_slot *slot; 1554 struct sk_buff *skb; 1555 size_t slot_len; 1556 1557 if (WARN_ON(length > ATH6KL_FWLOG_PAYLOAD_SIZE)) 1558 return -ENODEV; 1559 1560 slot_len = sizeof(*slot) + ATH6KL_FWLOG_PAYLOAD_SIZE; 1561 1562 skb = alloc_skb(slot_len, GFP_KERNEL); 1563 if (!skb) 1564 return -ENOMEM; 1565 1566 slot = (struct dbglog_slot *)skb_put(skb, slot_len); 1567 slot->diag_type = (uint32_t) DIAG_TYPE_FW_DEBUG_MSG; 1568 slot->timestamp = cpu_to_le32(jiffies); 1569 slot->length = cpu_to_le32(length); 1570 slot->dropped = cpu_to_le32(dropped); 1571 memcpy(slot->payload, buf, length); 1572 1573 /* Need to pad each record to fixed length ATH6KL_FWLOG_PAYLOAD_SIZE */ 1574 memset(slot->payload + length, 0, ATH6KL_FWLOG_PAYLOAD_SIZE - length); 1575 1576 spin_lock(&fwlog->fwlog_queue.lock); 1577 1578 __skb_queue_tail(&fwlog->fwlog_queue, skb); 1579 1580 complete(&fwlog->fwlog_completion); 1581 1582 /* drop oldest entries */ 1583 while (skb_queue_len(&fwlog->fwlog_queue) > ATH6KL_FWLOG_MAX_ENTRIES) { 1584 skb = __skb_dequeue(&fwlog->fwlog_queue); 1585 kfree_skb(skb); 1586 } 1587 1588 spin_unlock(&fwlog->fwlog_queue.lock); 1589 1590 return true; 1591 } 1592 #endif /* WLAN_OPEN_SOURCE */ 1593 1594 /** 1595 * nl_srv_bcast_fw_logs() - Wrapper func to send bcast msgs to FW logs mcast grp 1596 * @skb: sk buffer pointer 1597 * 1598 * Sends the bcast message to FW logs multicast group with generic nl socket 1599 * if CNSS_GENL is enabled. Else, use the legacy netlink socket to send. 1600 * 1601 * Return: zero on success, error code otherwise 1602 */ 1603 static int nl_srv_bcast_fw_logs(struct sk_buff *skb) 1604 { 1605 #ifdef CNSS_GENL 1606 return nl_srv_bcast(skb, CLD80211_MCGRP_FW_LOGS, WLAN_NL_MSG_CNSS_DIAG); 1607 #else 1608 return nl_srv_bcast(skb); 1609 #endif 1610 } 1611 1612 /** 1613 * send_fw_diag_nl_data - pack the data from fw diag event handler 1614 * @buffer: buffer of diag event 1615 * @len: length of the diag event 1616 * @event: the even type 1617 * 1618 * return: 0 if sent successfully, otherwise error code 1619 */ 1620 static int send_fw_diag_nl_data(const uint8_t *buffer, uint32_t len, 1621 uint32_t event_type) 1622 { 1623 struct sk_buff *skb_out; 1624 struct nlmsghdr *nlh; 1625 int res = 0; 1626 tAniNlHdr *wnl; 1627 int radio; 1628 int msg_len; 1629 1630 if (WARN_ON(len > ATH6KL_FWLOG_PAYLOAD_SIZE)) 1631 return -ENODEV; 1632 1633 if (nl_srv_is_initialized() != 0) 1634 return -EIO; 1635 1636 radio = cds_get_radio_index(); 1637 if (radio == -EINVAL) 1638 return -EIO; 1639 1640 if (cds_is_multicast_logging()) { 1641 msg_len = len + sizeof(radio); 1642 skb_out = nlmsg_new(msg_len, GFP_KERNEL); 1643 if (!skb_out) { 1644 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 1645 ("Failed to allocate new skb\n")); 1646 return -ENOMEM; 1647 } 1648 nlh = nlmsg_put(skb_out, 0, 0, WLAN_NL_MSG_CNSS_DIAG, msg_len, 1649 0); 1650 if (!nlh) { 1651 kfree_skb(skb_out); 1652 return -EMSGSIZE; 1653 } 1654 wnl = (tAniNlHdr *)nlh; 1655 wnl->radio = radio; 1656 1657 /* data buffer offset from nlmsg_hdr + sizeof(int) radio */ 1658 memcpy(nlmsg_data(nlh) + sizeof(radio), buffer, len); 1659 1660 res = nl_srv_bcast_fw_logs(skb_out); 1661 if ((res < 0) && (res != -ESRCH)) { 1662 AR_DEBUG_PRINTF(ATH_DEBUG_RSVD1, 1663 ("%s: nl_srv_bcast_fw_logs failed 0x%x\n", 1664 __func__, res)); 1665 return res; 1666 } 1667 } 1668 return res; 1669 } 1670 1671 /** 1672 * process_fw_diag_event_data() - process diag events and fw messages 1673 * @datap: data to be processed 1674 * @num_data: number of data chunks 1675 * 1676 * return: success 1677 */ 1678 static int 1679 process_fw_diag_event_data(uint8_t *datap, uint32_t num_data) 1680 { 1681 uint32_t diag_type; 1682 uint32_t nl_data_len; /* diag hdr + payload */ 1683 uint32_t diag_data_len; /* each fw diag payload */ 1684 struct wlan_diag_data *diag_data; 1685 1686 while (num_data > 0) { 1687 diag_data = (struct wlan_diag_data *)datap; 1688 diag_type = WLAN_DIAG_0_TYPE_GET(diag_data->word0); 1689 diag_data_len = WLAN_DIAG_0_LEN_GET(diag_data->word0); 1690 /* Length of diag struct and len of payload */ 1691 nl_data_len = sizeof(struct wlan_diag_data) + diag_data_len; 1692 if (nl_data_len > num_data) { 1693 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, 1694 ("processed all the messages\n")); 1695 return 0; 1696 } 1697 1698 switch (diag_type) { 1699 case DIAG_TYPE_FW_EVENT: 1700 return send_fw_diag_nl_data(datap, nl_data_len, 1701 diag_type); 1702 break; 1703 case DIAG_TYPE_FW_LOG: 1704 return send_fw_diag_nl_data(datap, nl_data_len, 1705 diag_type); 1706 break; 1707 } 1708 /* Move to the next event and send to cnss-diag */ 1709 datap += nl_data_len; 1710 num_data -= nl_data_len; 1711 } 1712 1713 return 0; 1714 } 1715 1716 static int 1717 send_diag_netlink_data(const uint8_t *buffer, uint32_t len, uint32_t cmd) 1718 { 1719 struct sk_buff *skb_out; 1720 struct nlmsghdr *nlh; 1721 int res = 0; 1722 struct dbglog_slot *slot; 1723 size_t slot_len; 1724 tAniNlHdr *wnl; 1725 int radio; 1726 1727 if (WARN_ON(len > ATH6KL_FWLOG_PAYLOAD_SIZE)) 1728 return -ENODEV; 1729 1730 if (nl_srv_is_initialized() != 0) 1731 return -EIO; 1732 1733 radio = cds_get_radio_index(); 1734 if (radio == -EINVAL) 1735 return -EIO; 1736 1737 if (cds_is_multicast_logging()) { 1738 slot_len = sizeof(*slot) + ATH6KL_FWLOG_PAYLOAD_SIZE + 1739 sizeof(radio); 1740 1741 skb_out = nlmsg_new(slot_len, GFP_ATOMIC); 1742 if (!skb_out) { 1743 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 1744 ("Failed to allocate new skb\n")); 1745 return A_ERROR; 1746 } 1747 1748 nlh = nlmsg_put(skb_out, 0, 0, WLAN_NL_MSG_CNSS_DIAG, 1749 slot_len, 0); 1750 if (!nlh) { 1751 kfree_skb(skb_out); 1752 return -EMSGSIZE; 1753 } 1754 wnl = (tAniNlHdr *)nlh; 1755 wnl->radio = radio; 1756 /* data buffer offset from: nlmsg_hdr + sizeof(int) radio */ 1757 slot = (struct dbglog_slot *) (nlmsg_data(nlh) + sizeof(radio)); 1758 slot->diag_type = cmd; 1759 slot->timestamp = cpu_to_le32(jiffies); 1760 slot->length = cpu_to_le32(len); 1761 /* Version mapped to get_version here */ 1762 slot->dropped = get_version; 1763 memcpy(slot->payload, buffer, len); 1764 1765 /* 1766 * Need to pad each record to fixed length 1767 * ATH6KL_FWLOG_PAYLOAD_SIZE 1768 */ 1769 memset(slot->payload + len, 0, ATH6KL_FWLOG_PAYLOAD_SIZE - len); 1770 1771 res = nl_srv_bcast_fw_logs(skb_out); 1772 if ((res < 0) && (res != -ESRCH)) { 1773 AR_DEBUG_PRINTF(ATH_DEBUG_RSVD1, 1774 ("%s: nl_srv_bcast_fw_logs failed 0x%x\n", 1775 __func__, res)); 1776 return res; 1777 } 1778 } 1779 return res; 1780 } 1781 1782 static int 1783 dbglog_process_netlink_data(wmi_unified_t wmi_handle, const uint8_t *buffer, 1784 uint32_t len, uint32_t dropped) 1785 { 1786 struct sk_buff *skb_out; 1787 struct nlmsghdr *nlh; 1788 int res = 0; 1789 struct dbglog_slot *slot; 1790 size_t slot_len; 1791 tAniNlHdr *wnl; 1792 int radio; 1793 1794 if (WARN_ON(len > ATH6KL_FWLOG_PAYLOAD_SIZE)) 1795 return -ENODEV; 1796 1797 if (nl_srv_is_initialized() != 0) 1798 return -EIO; 1799 1800 radio = cds_get_radio_index(); 1801 if (radio == -EINVAL) 1802 return -EIO; 1803 1804 if (cds_is_multicast_logging()) { 1805 slot_len = sizeof(*slot) + ATH6KL_FWLOG_PAYLOAD_SIZE + 1806 sizeof(radio); 1807 1808 skb_out = nlmsg_new(slot_len, GFP_KERNEL); 1809 if (!skb_out) { 1810 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 1811 ("Failed to allocate new skb\n")); 1812 return A_ERROR; 1813 } 1814 1815 nlh = nlmsg_put(skb_out, 0, 0, WLAN_NL_MSG_CNSS_DIAG, 1816 slot_len, 0); 1817 if (!nlh) { 1818 kfree_skb(skb_out); 1819 return -EMSGSIZE; 1820 } 1821 wnl = (tAniNlHdr *)nlh; 1822 wnl->radio = radio; 1823 /* data buffer offset from: nlmsg_hdr + sizeof(int) radio */ 1824 slot = (struct dbglog_slot *) (nlmsg_data(nlh) + sizeof(radio)); 1825 slot->diag_type = (uint32_t) DIAG_TYPE_FW_DEBUG_MSG; 1826 slot->timestamp = cpu_to_le32(jiffies); 1827 slot->length = cpu_to_le32(len); 1828 slot->dropped = cpu_to_le32(dropped); 1829 memcpy(slot->payload, buffer, len); 1830 1831 /* 1832 * Need to pad each record to fixed length 1833 * ATH6KL_FWLOG_PAYLOAD_SIZE 1834 */ 1835 memset(slot->payload + len, 0, ATH6KL_FWLOG_PAYLOAD_SIZE - len); 1836 1837 res = nl_srv_bcast_fw_logs(skb_out); 1838 if ((res < 0) && (res != -ESRCH)) { 1839 AR_DEBUG_PRINTF(ATH_DEBUG_RSVD1, 1840 ("%s: nl_srv_bcast_fw_logs failed 0x%x\n", 1841 __func__, res)); 1842 return res; 1843 } 1844 } 1845 return res; 1846 } 1847 1848 /* 1849 * WMI diag data event handler, this function invoked as a CB 1850 * when there DIAG_EVENT, DIAG_MSG, DIAG_DBG to be 1851 * forwarded from the FW. This is the new implementation for 1852 * replacement of fw_dbg and dbg messages 1853 */ 1854 1855 static int diag_fw_handler(ol_scn_t scn, uint8_t *data, uint32_t datalen) 1856 { 1857 1858 tp_wma_handle wma = (tp_wma_handle) scn; 1859 WMI_DIAG_EVENTID_param_tlvs *param_buf; 1860 uint8_t *datap; 1861 uint32_t len = 0; 1862 uint32_t *buffer; 1863 1864 if (!wma) { 1865 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("NULL Pointer assigned\n")); 1866 return A_ERROR; 1867 } 1868 /* when fw asser occurs,host can't use TLV format. */ 1869 if (wma->is_fw_assert) { 1870 datap = data; 1871 len = datalen; 1872 wma->is_fw_assert = 0; 1873 } else { 1874 param_buf = (WMI_DIAG_EVENTID_param_tlvs *) data; 1875 if (!param_buf) { 1876 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 1877 ("Get NULL point message from FW\n")); 1878 return A_ERROR; 1879 } 1880 1881 datap = param_buf->bufp; 1882 len = param_buf->num_bufp; 1883 1884 if (!get_version) { 1885 if (len < 2*(sizeof(uint32_t))) { 1886 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 1887 ("len is less than expected\n")); 1888 return A_ERROR; 1889 } 1890 buffer = (uint32_t *) datap; 1891 buffer++; /* skip offset */ 1892 if (WLAN_DIAG_TYPE_CONFIG == DIAG_GET_TYPE(*buffer)) { 1893 if (len < 3*(sizeof(uint32_t))) { 1894 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 1895 ("len is less than expected\n")); 1896 return A_ERROR; 1897 } 1898 buffer++; /* skip */ 1899 if (DIAG_VERSION_INFO == DIAG_GET_ID(*buffer)) { 1900 if (len < 4*(sizeof(uint32_t))) { 1901 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 1902 ("len is less than expected\n")); 1903 return A_ERROR; 1904 } 1905 buffer++; /* skip */ 1906 /* get payload */ 1907 get_version = *buffer; 1908 } 1909 } 1910 } 1911 } 1912 if (dbglog_process_type == DBGLOG_PROCESS_PRINT_RAW) { 1913 if (!gprint_limiter) { 1914 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 1915 ("NOT Supported only supports net link socket\n")); 1916 gprint_limiter = true; 1917 } 1918 return 0; 1919 } 1920 1921 if (dbglog_process_type == DBGLOG_PROCESS_NET_RAW) { 1922 return send_diag_netlink_data((uint8_t *) datap, 1923 len, DIAG_TYPE_FW_MSG); 1924 } 1925 #ifdef WLAN_OPEN_SOURCE 1926 if (dbglog_process_type == DBGLOG_PROCESS_POOL_RAW) { 1927 if (!gprint_limiter) { 1928 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 1929 ("NOT Supported only supports net link socket\n")); 1930 gprint_limiter = true; 1931 } 1932 return 0; 1933 } 1934 #endif /* WLAN_OPEN_SOURCE */ 1935 if (!gprint_limiter) { 1936 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 1937 ("NOT Supported only supports net link socket\n")); 1938 gprint_limiter = true; 1939 } 1940 /* Always returns zero */ 1941 return 0; 1942 } 1943 1944 /* 1945 * WMI diag data event handler, this function invoked as a CB 1946 * when there DIAG_DATA to be forwarded from the FW. 1947 */ 1948 static int 1949 fw_diag_data_event_handler(ol_scn_t scn, uint8_t *data, uint32_t datalen) 1950 { 1951 1952 WMI_DIAG_DATA_CONTAINER_EVENTID_param_tlvs *param_buf; 1953 uint8_t *datap; 1954 uint32_t num_data; /* Total events */ 1955 1956 param_buf = (WMI_DIAG_DATA_CONTAINER_EVENTID_param_tlvs *) data; 1957 if (!param_buf) { 1958 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 1959 ("Got NULL point message from FW\n")); 1960 return A_ERROR; 1961 } 1962 1963 num_data = param_buf->num_bufp; 1964 1965 datap = (uint8_t *) param_buf->bufp; 1966 1967 return process_fw_diag_event_data(datap, num_data); 1968 } 1969 1970 int dbglog_parse_debug_logs(ol_scn_t scn, uint8_t *data, uint32_t datalen) 1971 { 1972 tp_wma_handle wma = (tp_wma_handle) scn; 1973 uint32_t count; 1974 uint32_t *buffer; 1975 uint32_t timestamp; 1976 uint32_t debugid; 1977 uint32_t moduleid; 1978 uint16_t vapid; 1979 uint16_t numargs; 1980 qdf_size_t length; 1981 uint32_t dropped; 1982 WMI_DEBUG_MESG_EVENTID_param_tlvs *param_buf; 1983 uint8_t *datap; 1984 uint32_t len; 1985 1986 if (!wma) { 1987 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("NULL Pointer assigned\n")); 1988 return A_ERROR; 1989 } 1990 /*when fw asser occurs,host can't use TLV format. */ 1991 if (wma->is_fw_assert) { 1992 datap = data; 1993 len = datalen; 1994 wma->is_fw_assert = 0; 1995 } else { 1996 param_buf = (WMI_DEBUG_MESG_EVENTID_param_tlvs *) data; 1997 if (!param_buf) { 1998 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 1999 ("Get NULL point message from FW\n")); 2000 return A_ERROR; 2001 } 2002 2003 datap = param_buf->bufp; 2004 len = param_buf->num_bufp; 2005 } 2006 2007 if (len < sizeof(dropped)) { 2008 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Invalid length\n")); 2009 return A_ERROR; 2010 } 2011 2012 dropped = *((uint32_t *) datap); 2013 if (dropped > 0) { 2014 AR_DEBUG_PRINTF(ATH_DEBUG_TRC, 2015 ("%d log buffers are dropped\n", dropped)); 2016 } 2017 datap += sizeof(dropped); 2018 len -= sizeof(dropped); 2019 2020 count = 0; 2021 buffer = (uint32_t *) datap; 2022 length = (len >> 2); 2023 2024 if (dbglog_process_type == DBGLOG_PROCESS_PRINT_RAW) 2025 return dbglog_print_raw_data(buffer, length); 2026 2027 if (dbglog_process_type == DBGLOG_PROCESS_NET_RAW) { 2028 return dbglog_process_netlink_data((wmi_unified_t) wma-> 2029 wmi_handle, 2030 (uint8_t *) buffer, 2031 len, dropped); 2032 } 2033 #ifdef WLAN_OPEN_SOURCE 2034 if (dbglog_process_type == DBGLOG_PROCESS_POOL_RAW) { 2035 return dbglog_debugfs_raw_data((wmi_unified_t) wma->wmi_handle, 2036 (uint8_t *) buffer, len, 2037 dropped); 2038 } 2039 #endif /* WLAN_OPEN_SOURCE */ 2040 2041 while ((count + 2) < length) { 2042 timestamp = DBGLOG_GET_TIME_STAMP(buffer[count]); 2043 debugid = DBGLOG_GET_DBGID(buffer[count + 1]); 2044 moduleid = DBGLOG_GET_MODULEID(buffer[count + 1]); 2045 vapid = DBGLOG_GET_VDEVID(buffer[count + 1]); 2046 numargs = DBGLOG_GET_NUMARGS(buffer[count + 1]); 2047 2048 if ((count + 2 + numargs) > length) 2049 return A_OK; 2050 2051 if (moduleid >= WLAN_MODULE_ID_MAX) 2052 return A_OK; 2053 2054 if (!mod_print[moduleid]) { 2055 /* 2056 * No module specific log registered 2057 * use the default handler 2058 */ 2059 dbglog_default_print_handler(moduleid, vapid, debugid, 2060 timestamp, numargs, 2061 (((uint32_t *) buffer) + 2062 2 + count)); 2063 } else { 2064 if (!(mod_print[moduleid](moduleid, vapid, debugid, 2065 timestamp, numargs, 2066 (((uint32_t *) buffer) + 2067 2 + count)))) { 2068 /* 2069 * The message is not handled 2070 * by the module specific handler 2071 */ 2072 dbglog_default_print_handler(moduleid, vapid, 2073 debugid, timestamp, 2074 numargs, 2075 (((uint32_t *) 2076 buffer) + 2 + 2077 count)); 2078 2079 } 2080 } 2081 2082 /* 32 bit Time stamp + 32 bit Dbg header */ 2083 count += numargs + 2; 2084 } 2085 /* Always returns zero */ 2086 return A_OK; 2087 } 2088 2089 void dbglog_reg_modprint(uint32_t mod_id, module_dbg_print printfn) 2090 { 2091 if (!mod_print[mod_id]) { 2092 mod_print[mod_id] = printfn; 2093 } else { 2094 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, 2095 ("module print is already registered for this module %d\n", 2096 mod_id)); 2097 } 2098 } 2099 2100 static void 2101 dbglog_sm_print(uint32_t timestamp, 2102 uint16_t vap_id, 2103 uint16_t numargs, 2104 uint32_t *args, 2105 const char *module_prefix, 2106 const char *const states[], uint32_t num_states, 2107 const char *const events[], uint32_t num_events) 2108 { 2109 uint8_t type, arg1, arg2, arg3; 2110 uint32_t extra, extra2, extra3; 2111 2112 if (numargs != 4) 2113 return; 2114 2115 type = (args[0] >> 24) & 0xff; 2116 arg1 = (args[0] >> 16) & 0xff; 2117 arg2 = (args[0] >> 8) & 0xff; 2118 arg3 = (args[0] >> 0) & 0xff; 2119 2120 extra = args[1]; 2121 extra2 = args[2]; 2122 extra3 = args[3]; 2123 2124 switch (type) { 2125 case 0: /* state transition */ 2126 if (arg1 < num_states && arg2 < num_states) { 2127 dbglog_printf(timestamp, vap_id, 2128 "%s: %s => %s (%#x, %#x, %#x)", 2129 module_prefix, states[arg1], states[arg2], 2130 extra, extra2, extra3); 2131 } else { 2132 dbglog_printf(timestamp, vap_id, 2133 "%s: %u => %u (%#x, %#x, %#x)", 2134 module_prefix, arg1, arg2, extra, extra2, 2135 extra3); 2136 } 2137 break; 2138 case 1: /* dispatch event */ 2139 if (arg1 < num_states && arg2 < num_events) { 2140 dbglog_printf(timestamp, vap_id, 2141 "%s: %s < %s (%#x, %#x, %#x)", 2142 module_prefix, states[arg1], events[arg2], 2143 extra, extra2, extra3); 2144 } else { 2145 dbglog_printf(timestamp, vap_id, 2146 "%s: %u < %u (%#x, %#x, %#x)", 2147 module_prefix, arg1, arg2, extra, extra2, 2148 extra3); 2149 } 2150 break; 2151 case 2: /* warning */ 2152 switch (arg1) { 2153 case 0: /* unhandled event */ 2154 if (arg2 < num_states && arg3 < num_events) { 2155 dbglog_printf(timestamp, vap_id, 2156 "%s: unhandled event %s in state %s (%#x, %#x, %#x)", 2157 module_prefix, events[arg3], 2158 states[arg2], extra, extra2, 2159 extra3); 2160 } else { 2161 dbglog_printf(timestamp, vap_id, 2162 "%s: unhandled event %u in state %u (%#x, %#x, %#x)", 2163 module_prefix, arg3, arg2, extra, 2164 extra2, extra3); 2165 } 2166 break; 2167 default: 2168 break; 2169 2170 } 2171 break; 2172 } 2173 } 2174 2175 static A_BOOL 2176 dbglog_sta_powersave_print_handler(uint32_t mod_id, 2177 uint16_t vap_id, 2178 uint32_t dbg_id, 2179 uint32_t timestamp, 2180 uint16_t numargs, uint32_t *args) 2181 { 2182 static const char *const states[] = { 2183 "IDLE", 2184 "ACTIVE", 2185 "SLEEP_TXQ_FLUSH", 2186 "SLEEP_TX_SENT", 2187 "PAUSE", 2188 "SLEEP_DOZE", 2189 "SLEEP_AWAKE", 2190 "ACTIVE_TXQ_FLUSH", 2191 "ACTIVE_TX_SENT", 2192 "PAUSE_TXQ_FLUSH", 2193 "PAUSE_TX_SENT", 2194 "IDLE_TXQ_FLUSH", 2195 "IDLE_TX_SENT", 2196 }; 2197 2198 static const char *const events[] = { 2199 "START", 2200 "STOP", 2201 "PAUSE", 2202 "UNPAUSE", 2203 "TIM", 2204 "DTIM", 2205 "SEND_COMPLETE", 2206 "PRE_SEND", 2207 "RX", 2208 "HWQ_EMPTY", 2209 "PAUSE_TIMEOUT", 2210 "TXRX_INACTIVITY_TIMEOUT", 2211 "PSPOLL_TIMEOUT", 2212 "UAPSD_TIMEOUT", 2213 "DELAYED_SLEEP_TIMEOUT", 2214 "SEND_N_COMPLETE", 2215 "TIDQ_PAUSE_COMPLETE", 2216 "SEND_PSPOLL", 2217 "SEND_SPEC_PSPOLL", 2218 }; 2219 2220 switch (dbg_id) { 2221 case DBGLOG_DBGID_SM_FRAMEWORK_PROXY_DBGLOG_MSG: 2222 dbglog_sm_print(timestamp, vap_id, numargs, args, "STA PS", 2223 states, QDF_ARRAY_SIZE(states), events, 2224 QDF_ARRAY_SIZE(events)); 2225 break; 2226 case PS_STA_PM_ARB_REQUEST: 2227 if (numargs == 4) { 2228 dbglog_printf(timestamp, vap_id, 2229 "PM ARB request flags=%x, last_time=%x %s: %s", 2230 args[1], args[2], 2231 dbglog_get_module_str(args[0]), 2232 args[3] ? "SLEEP" : "WAKE"); 2233 } 2234 break; 2235 case PS_STA_DELIVER_EVENT: 2236 if (numargs == 2) { 2237 dbglog_printf(timestamp, vap_id, "STA PS: %s %s", 2238 (args[0] == 0 ? "PAUSE_COMPLETE" : 2239 (args[0] == 1 ? "UNPAUSE_COMPLETE" : 2240 (args[0] == 2 ? "SLEEP" : 2241 (args[0] == 2242 3 ? "AWAKE" : "UNKNOWN")))), 2243 (args[1] == 2244 0 ? "SUCCESS" : (args[1] == 2245 1 ? "TXQ_FLUSH_TIMEOUT" 2246 : (args[1] == 2247 2 ? "NO_ACK" 2248 : (args[1] == 2249 3 ? 2250 "RX_LEAK_TIMEOUT" 2251 : (args[1] == 2252 4 ? 2253 "PSPOLL_UAPSD_BUSY_TIMEOUT" 2254 : 2255 "UNKNOWN")))))); 2256 } 2257 break; 2258 case PS_STA_PSPOLL_SEQ_DONE: 2259 if (numargs == 5) { 2260 dbglog_printf(timestamp, vap_id, 2261 "STA PS poll: queue=%u comp=%u rsp=%u rsp_dur=%u fc=%x qos=%x %s", 2262 args[0], args[1], args[2], args[3], 2263 (args[4] >> 16) & 0xffff, 2264 (args[4] >> 8) & 0xff, 2265 (args[4] & 0xff) == 2266 0 ? "SUCCESS" : (args[4] & 0xff) == 2267 1 ? "NO_ACK" : (args[4] & 0xff) == 2268 2 ? "DROPPED" : (args[4] & 0xff) == 2269 3 ? "FILTERED" : (args[4] & 0xff) == 2270 4 ? "RSP_TIMEOUT" : "UNKNOWN"); 2271 } 2272 break; 2273 case PS_STA_COEX_MODE: 2274 if (numargs == 1) { 2275 dbglog_printf(timestamp, vap_id, "STA PS COEX MODE %s", 2276 args[0] ? "ENABLED" : "DISABLED"); 2277 } 2278 break; 2279 case PS_STA_PSPOLL_ALLOW: 2280 if (numargs == 3) { 2281 dbglog_printf(timestamp, vap_id, 2282 "STA PS-Poll %s flags=%x time=%u", 2283 args[0] ? "ALLOW" : "DISALLOW", args[1], 2284 args[2]); 2285 } 2286 break; 2287 case PS_STA_SET_PARAM: 2288 if (numargs == 2) { 2289 struct { 2290 char *name; 2291 int is_time_param; 2292 } params[] = { 2293 { 2294 "MAX_SLEEP_ATTEMPTS", 0 2295 }, { 2296 "DELAYED_SLEEP", 1 2297 }, { 2298 "TXRX_INACTIVITY", 1 2299 }, { 2300 "MAX_TX_BEFORE_WAKE", 0 2301 }, { 2302 "UAPSD_TIMEOUT", 1 2303 }, { 2304 "UAPSD_CONFIG", 0 2305 }, { 2306 "PSPOLL_RESPONSE_TIMEOUT", 1 2307 }, { 2308 "MAX_PSPOLL_BEFORE_WAKE", 0 2309 }, { 2310 "RX_WAKE_POLICY", 0 2311 }, { 2312 "DELAYED_PAUSE_RX_LEAK", 1 2313 }, { 2314 "TXRX_INACTIVITY_BLOCKED_RETRY", 1 2315 }, { 2316 "SPEC_WAKE_INTERVAL", 1 2317 }, { 2318 "MAX_SPEC_NODATA_PSPOLL", 0 2319 }, { 2320 "ESTIMATED_PSPOLL_RESP_TIME", 1 2321 }, { 2322 "QPOWER_MAX_PSPOLL_BEFORE_WAKE", 0 2323 }, { 2324 "QPOWER_ENABLE", 0 2325 }, 2326 }; 2327 uint32_t param = args[0]; 2328 uint32_t value = args[1]; 2329 2330 if (param < QDF_ARRAY_SIZE(params)) { 2331 if (params[param].is_time_param) { 2332 dbglog_printf(timestamp, vap_id, 2333 "STA PS SET_PARAM %s => %u (us)", 2334 params[param].name, 2335 value); 2336 } else { 2337 dbglog_printf(timestamp, vap_id, 2338 "STA PS SET_PARAM %s => %#x", 2339 params[param].name, 2340 value); 2341 } 2342 } else { 2343 dbglog_printf(timestamp, vap_id, 2344 "STA PS SET_PARAM %x => %#x", 2345 param, value); 2346 } 2347 } 2348 break; 2349 case PS_STA_SPECPOLL_TIMER_STARTED: 2350 dbglog_printf(timestamp, vap_id, 2351 "SPEC Poll Timer Started: Beacon time Remaining:%d wakeup interval:%d", 2352 args[0], args[1]); 2353 break; 2354 case PS_STA_SPECPOLL_TIMER_STOPPED: 2355 dbglog_printf(timestamp, vap_id, "SPEC Poll Timer Stopped"); 2356 break; 2357 default: 2358 return false; 2359 } 2360 2361 return true; 2362 } 2363 2364 /* IBSS PS sub modules */ 2365 enum wlan_ibss_ps_sub_module { 2366 WLAN_IBSS_PS_SUB_MODULE_IBSS_NW_SM = 0, 2367 WLAN_IBSS_PS_SUB_MODULE_IBSS_SELF_PS = 1, 2368 WLAN_IBSS_PS_SUB_MODULE_IBSS_PEER_PS = 2, 2369 WLAN_IBSS_PS_SUB_MODULE_MAX = 3, 2370 }; 2371 2372 #define WLAN_IBSS_PS_SUB_MODULE_OFFSET 0x1E 2373 2374 static A_BOOL 2375 dbglog_ibss_powersave_print_handler(uint32_t mod_id, 2376 uint16_t vap_id, 2377 uint32_t dbg_id, 2378 uint32_t timestamp, 2379 uint16_t numargs, uint32_t *args) 2380 { 2381 static const char *const nw_states[] = { 2382 "WAIT_FOR_TBTT", 2383 "ATIM_WINDOW_PRE_BCN", 2384 "ATIM_WINDOW_POST_BCN", 2385 "OUT_OF_ATIM_WINDOW", 2386 "PAUSE_PENDING", 2387 "PAUSED", 2388 }; 2389 2390 static const char *const ps_states[] = { 2391 "ACTIVE", 2392 "SLEEP_TX_SEND", 2393 "SLEEP_DOZE_PAUSE_PENDING", 2394 "SLEEP_DOZE", 2395 "SLEEP_AWAKE", 2396 "ACTIVE_TX_SEND", 2397 "PAUSE_TX_SEND", 2398 "PAUSED", 2399 }; 2400 2401 static const char *const peer_ps_states[] = { 2402 "ACTIVE", 2403 "SLEEP_AWAKE", 2404 "SLEEP_DOZE", 2405 "PS_UNKNOWN", 2406 }; 2407 2408 static const char *const events[] = { 2409 "START", 2410 "STOP", 2411 "SWBA", 2412 "TBTT", 2413 "TX_BCN_CMP", 2414 "SEND_COMPLETE", 2415 "SEND_N_COMPLETE", 2416 "PRE_SEND", 2417 "RX", 2418 "UC_INACTIVITY_TIMEOUT", 2419 "BC_INACTIVITY_TIMEOUT", 2420 "ATIM_WINDOW_BEGIN", 2421 "ATIM_WINDOW_END", 2422 "HWQ_EMPTY", 2423 "UC_ATIM_RCVD", 2424 "TRAFFIC_EXCHANGE_DONE", 2425 "POWER_SAVE_STATE_CHANGE", 2426 "NEW_PEER_JOIN", 2427 "IBSS_VDEV_PAUSE_REQUEST", 2428 "IBSS_VDEV_PAUSE_RESPONSE", 2429 "IBSS_VDEV_PAUSE_TIMEOUT", 2430 "IBSS_VDEV_UNPAUSE_REQUEST", 2431 "PS_STATE_CHANGE", 2432 }; 2433 2434 enum wlan_ibss_ps_sub_module sub_module; 2435 2436 switch (dbg_id) { 2437 case DBGLOG_DBGID_SM_FRAMEWORK_PROXY_DBGLOG_MSG: 2438 sub_module = (args[1] >> WLAN_IBSS_PS_SUB_MODULE_OFFSET) & 0x3; 2439 switch (sub_module) { 2440 case WLAN_IBSS_PS_SUB_MODULE_IBSS_NW_SM: 2441 dbglog_sm_print(timestamp, vap_id, numargs, args, 2442 "IBSS PS NW", nw_states, 2443 QDF_ARRAY_SIZE(nw_states), events, 2444 QDF_ARRAY_SIZE(events)); 2445 break; 2446 case WLAN_IBSS_PS_SUB_MODULE_IBSS_SELF_PS: 2447 dbglog_sm_print(timestamp, vap_id, numargs, args, 2448 "IBSS PS Self", ps_states, 2449 QDF_ARRAY_SIZE(ps_states), events, 2450 QDF_ARRAY_SIZE(events)); 2451 break; 2452 case WLAN_IBSS_PS_SUB_MODULE_IBSS_PEER_PS: 2453 dbglog_sm_print(timestamp, vap_id, numargs, args, 2454 "IBSS PS Peer", peer_ps_states, 2455 QDF_ARRAY_SIZE(peer_ps_states), events, 2456 QDF_ARRAY_SIZE(events)); 2457 break; 2458 default: 2459 break; 2460 } 2461 break; 2462 case IBSS_PS_DBGID_PEER_CREATE: 2463 if (numargs == 2) { 2464 dbglog_printf(timestamp, vap_id, 2465 "IBSS PS: peer alloc failed for peer ID:%u", 2466 args[0]); 2467 } else if (numargs == 1) { 2468 dbglog_printf(timestamp, vap_id, 2469 "IBSS PS: create peer ID=%u", args[0]); 2470 } 2471 break; 2472 case IBSS_PS_DBGID_PEER_DELETE: 2473 if (numargs == 4) { 2474 dbglog_printf(timestamp, vap_id, 2475 "IBSS PS: delete peer ID=%u num_peers:%d num_sleeping_peers:%d ps_enabled_for_this_peer:%d", 2476 args[0], args[1], args[2], args[3]); 2477 } 2478 break; 2479 case IBSS_PS_DBGID_VDEV_CREATE: 2480 if (numargs == 1) { 2481 dbglog_printf(timestamp, vap_id, 2482 "IBSS PS: vdev alloc failed", args[0]); 2483 } else if (numargs == 0) { 2484 dbglog_printf(timestamp, vap_id, 2485 "IBSS PS: vdev created"); 2486 } 2487 break; 2488 case IBSS_PS_DBGID_VDEV_DELETE: 2489 dbglog_printf(timestamp, vap_id, "IBSS PS: vdev deleted"); 2490 break; 2491 2492 case IBSS_PS_DBGID_VDEV_EVENT: 2493 if (numargs == 1) { 2494 if (args[0] == 5) { 2495 dbglog_printf(timestamp, vap_id, 2496 "IBSS PS: vdev event for peer add"); 2497 } else if (args[0] == 7) { 2498 dbglog_printf(timestamp, vap_id, 2499 "IBSS PS: vdev event for peer delete"); 2500 } else { 2501 dbglog_printf(timestamp, vap_id, 2502 "IBSS PS: vdev event %u", 2503 args[0]); 2504 } 2505 } 2506 break; 2507 2508 case IBSS_PS_DBGID_PEER_EVENT: 2509 if (numargs == 4) { 2510 if (args[0] == 0xFFFF) { 2511 dbglog_printf(timestamp, vap_id, 2512 "IBSS PS: pre_send for peer:%u peer_type:%u sm_event_mask:%0x", 2513 args[1], args[3], args[2]); 2514 } else if (args[0] == 0x20000) { 2515 dbglog_printf(timestamp, vap_id, 2516 "IBSS PS: send_complete for peer:%u peer_type:%u sm_event_mask:%0x", 2517 args[1], args[3], args[2]); 2518 } else if (args[0] == 0x10) { 2519 dbglog_printf(timestamp, vap_id, 2520 "IBSS PS: send_n_complete for peer:%u peer_type:%u sm_event_mask:%0x", 2521 args[1], args[3], args[2]); 2522 } else if (args[0] == 0x40) { 2523 dbglog_printf(timestamp, vap_id, 2524 "IBSS PS: rx event for peer:%u peer_type:%u sm_event_mask:%0x", 2525 args[1], args[3], args[2]); 2526 } else if (args[0] == 0x4) { 2527 dbglog_printf(timestamp, vap_id, 2528 "IBSS PS: hw_q_empty for peer:%u peer_type:%u sm_event_mask:%0x", 2529 args[1], args[3], args[2]); 2530 } 2531 } 2532 break; 2533 2534 case IBSS_PS_DBGID_DELIVER_CAB: 2535 if (numargs == 4) { 2536 dbglog_printf(timestamp, vap_id, 2537 "IBSS PS: Deliver CAB n_mpdu:%d send_flags:%0x tid_cur:%d q_depth_for_other_tid:%d", 2538 args[0], args[1], args[2], args[3]); 2539 } 2540 break; 2541 2542 case IBSS_PS_DBGID_DELIVER_UC_DATA: 2543 if (numargs == 4) { 2544 dbglog_printf(timestamp, vap_id, 2545 "IBSS PS: Deliver UC data peer:%d tid:%d n_mpdu:%d send_flags:%0x", 2546 args[0], args[1], args[2], args[3]); 2547 } 2548 break; 2549 2550 case IBSS_PS_DBGID_DELIVER_UC_DATA_ERROR: 2551 if (numargs == 4) { 2552 dbglog_printf(timestamp, vap_id, 2553 "IBSS PS: Deliver UC data error peer:%d tid:%d allowed_tidmask:%0x, pending_tidmap:%0x", 2554 args[0], args[1], args[2], args[3]); 2555 } 2556 break; 2557 2558 case IBSS_PS_DBGID_UC_INACTIVITY_TMR_RESTART: 2559 if (numargs == 2) { 2560 dbglog_printf(timestamp, vap_id, 2561 "IBSS PS: UC timer restart peer:%d timer_val:%0x", 2562 args[0], args[1]); 2563 } 2564 break; 2565 2566 case IBSS_PS_DBGID_MC_INACTIVITY_TMR_RESTART: 2567 if (numargs == 1) { 2568 dbglog_printf(timestamp, vap_id, 2569 "IBSS PS: MC timer restart timer_val:%0x", 2570 args[0]); 2571 } 2572 break; 2573 2574 case IBSS_PS_DBGID_NULL_TX_COMPLETION: 2575 if (numargs == 3) { 2576 dbglog_printf(timestamp, vap_id, 2577 "IBSS PS: null tx completion peer:%d tx_completion_status:%d flags:%0x", 2578 args[0], args[1], args[2]); 2579 } 2580 break; 2581 2582 case IBSS_PS_DBGID_ATIM_TIMER_START: 2583 if (numargs == 4) { 2584 dbglog_printf(timestamp, vap_id, 2585 "IBSS PS: ATIM timer start tsf:%0x %0x tbtt:%0x %0x", 2586 args[0], args[1], args[2], args[3]); 2587 } 2588 break; 2589 2590 case IBSS_PS_DBGID_UC_ATIM_SEND: 2591 if (numargs == 2) { 2592 dbglog_printf(timestamp, vap_id, 2593 "IBSS PS: Send ATIM to peer:%d", args[1]); 2594 } else if (numargs == 1) { 2595 dbglog_printf(timestamp, vap_id, 2596 "IBSS PS: no peers to send UC ATIM", 2597 args[1]); 2598 } 2599 break; 2600 2601 case IBSS_PS_DBGID_BC_ATIM_SEND: 2602 if (numargs == 2) { 2603 dbglog_printf(timestamp, vap_id, 2604 "IBSS PS: MC Data, num_of_peers:%d bc_atim_sent:%d", 2605 args[1], args[0]); 2606 } 2607 break; 2608 2609 case IBSS_PS_DBGID_UC_TIMEOUT: 2610 if (numargs == 2) { 2611 dbglog_printf(timestamp, vap_id, 2612 "IBSS PS: UC timeout for peer:%d send_null:%d", 2613 args[0], args[1]); 2614 } 2615 break; 2616 2617 case IBSS_PS_DBGID_PWR_COLLAPSE_ALLOWED: 2618 dbglog_printf(timestamp, vap_id, 2619 "IBSS PS: allow power collapse"); 2620 break; 2621 2622 case IBSS_PS_DBGID_PWR_COLLAPSE_NOT_ALLOWED: 2623 if (numargs == 0) { 2624 dbglog_printf(timestamp, vap_id, 2625 "IBSS PS: power collapse not allowed by INI"); 2626 } else if (numargs == 1) { 2627 dbglog_printf(timestamp, vap_id, 2628 "IBSS PS: power collapse not allowed since peer id:%d is not PS capable", 2629 args[0]); 2630 } else if (numargs == 2) { 2631 dbglog_printf(timestamp, vap_id, 2632 "IBSS PS: power collapse not allowed - no peers in NW"); 2633 } else if (numargs == 3) { 2634 if (args[0] == 2) { 2635 dbglog_printf(timestamp, vap_id, 2636 "IBSS PS: power collapse not allowed, non-zero qdepth %d %d", 2637 args[1], args[2]); 2638 } else if (args[0] == 3) { 2639 dbglog_printf(timestamp, vap_id, 2640 "IBSS PS: power collapse not allowed by peer:%d peer_flags:%0x", 2641 args[1], args[2]); 2642 } 2643 } else if (numargs == 5) { 2644 dbglog_printf(timestamp, vap_id, 2645 "IBSS PS: power collapse not allowed by state m/c nw_cur_state:%d nw_next_state:%d ps_cur_state:%d flags:%0x", 2646 args[1], args[2], args[3], args[4]); 2647 } 2648 break; 2649 2650 case IBSS_PS_DBGID_SET_PARAM: 2651 if (numargs == 2) { 2652 dbglog_printf(timestamp, vap_id, 2653 "IBSS PS: Set Param ID:%0x Value:%0x", 2654 args[0], args[1]); 2655 } 2656 break; 2657 2658 case IBSS_PS_DBGID_HOST_TX_PAUSE: 2659 if (numargs == 1) { 2660 dbglog_printf(timestamp, vap_id, 2661 "IBSS PS: Pausing host, vdev_map:%0x", 2662 args[0]); 2663 } 2664 break; 2665 2666 case IBSS_PS_DBGID_HOST_TX_UNPAUSE: 2667 if (numargs == 1) { 2668 dbglog_printf(timestamp, vap_id, 2669 "IBSS PS: Unpausing host, vdev_map:%0x", 2670 args[0]); 2671 } 2672 break; 2673 case IBSS_PS_DBGID_PS_DESC_BIN_LWM: 2674 if (numargs == 1) { 2675 dbglog_printf(timestamp, vap_id, 2676 "IBSS PS: LWM, vdev_map:%0x", args[0]); 2677 } 2678 break; 2679 2680 case IBSS_PS_DBGID_PS_DESC_BIN_HWM: 2681 if (numargs == 1) { 2682 dbglog_printf(timestamp, vap_id, 2683 "IBSS PS: HWM, vdev_map:%0x", args[0]); 2684 } 2685 break; 2686 2687 case IBSS_PS_DBGID_PS_KICKOUT_PEER: 2688 if (numargs == 3) { 2689 dbglog_printf(timestamp, vap_id, 2690 "IBSS PS: Kickout peer id:%d atim_fail_cnt:%d status:%d", 2691 args[0], args[1], args[2]); 2692 } 2693 break; 2694 2695 case IBSS_PS_DBGID_SET_PEER_PARAM: 2696 if (numargs == 3) { 2697 dbglog_printf(timestamp, vap_id, 2698 "IBSS PS: Set Peer Id:%d Param ID:%0x Value:%0x", 2699 args[0], args[1], args[2]); 2700 } 2701 break; 2702 2703 case IBSS_PS_DBGID_BCN_ATIM_WIN_MISMATCH: 2704 if (numargs == 4) { 2705 if (args[0] == 0xDEAD) { 2706 dbglog_printf(timestamp, vap_id, 2707 "IBSS PS: ATIM window length mismatch, our's:%d, peer id:%d, peer's:%d", 2708 args[1], args[2], args[3]); 2709 } else if (args[0] == 0xBEEF) { 2710 dbglog_printf(timestamp, vap_id, 2711 "IBSS PS: Peer ATIM window length changed, peer id:%d, peer recorded atim window:%d new atim window:%d", 2712 args[1], args[2], args[3]); 2713 } 2714 } 2715 break; 2716 2717 case IBSS_PS_DBGID_RX_CHAINMASK_CHANGE: 2718 if (numargs == 2) { 2719 if (args[1] == 0x1) { 2720 dbglog_printf(timestamp, vap_id, 2721 "IBSS PS: Voting for low power chainmask from :%d", 2722 args[0]); 2723 } else { 2724 dbglog_printf(timestamp, vap_id, 2725 "IBSS PS: Voting for high power chainmask from :%d", 2726 args[0]); 2727 } 2728 } 2729 break; 2730 2731 default: 2732 return false; 2733 } 2734 2735 return true; 2736 } 2737 2738 static 2739 A_BOOL dbglog_ratectrl_print_handler(uint32_t mod_id, 2740 uint16_t vap_id, 2741 uint32_t dbg_id, 2742 uint32_t timestamp, 2743 uint16_t numargs, uint32_t *args) 2744 { 2745 switch (dbg_id) { 2746 case RATECTRL_DBGID_ASSOC: 2747 dbglog_printf(timestamp, vap_id, 2748 "RATE: ChainMask %d, phymode %d, ni_flags 0x%08x, vht_mcs_set 0x%04x, ht_mcs_set 0x%04x", 2749 args[0], args[1], args[2], args[3], args[4]); 2750 break; 2751 case RATECTRL_DBGID_NSS_CHANGE: 2752 dbglog_printf(timestamp, vap_id, "RATE: NEW NSS %d\n", args[0]); 2753 break; 2754 case RATECTRL_DBGID_CHAINMASK_ERR: 2755 dbglog_printf(timestamp, vap_id, 2756 "RATE: Chainmask ERR %d %d %d\n", args[0], 2757 args[1], args[2]); 2758 break; 2759 case RATECTRL_DBGID_UNEXPECTED_FRAME: 2760 dbglog_printf(timestamp, vap_id, 2761 "RATE: WARN1: rate %d flags 0x%08x\n", args[0], 2762 args[1]); 2763 break; 2764 case RATECTRL_DBGID_WAL_RCQUERY: 2765 dbglog_printf(timestamp, vap_id, 2766 "ratectrl_dbgid_wal_rcquery [rix1 %d rix2 %d rix3 %d proberix %d ppduflag 0x%x] ", 2767 args[0], args[1], args[2], args[3], args[4]); 2768 break; 2769 case RATECTRL_DBGID_WAL_RCUPDATE: 2770 dbglog_printf(timestamp, vap_id, 2771 "ratectrl_dbgid_wal_rcupdate [numelems %d ppduflag 0x%x] ", 2772 args[0], args[1]); 2773 break; 2774 case RATECTRL_DBGID_GTX_UPDATE: 2775 { 2776 switch (args[0]) { 2777 case 255: 2778 dbglog_printf(timestamp, vap_id, 2779 "GtxInitPwrCfg [bw[last %d|cur %d] rtcode 0x%x tpc %d tpc_init_pwr_cfg %d] ", 2780 args[1] >> 8, args[1] & 0xff, 2781 args[2], args[3], args[4]); 2782 break; 2783 case 254: 2784 dbglog_printf(timestamp, vap_id, 2785 "gtx_cfg_addr [RTMask0@0x%x PERThreshold@0x%x gtxTPCMin@0x%x userGtxMask@0x%x] ", 2786 args[1], args[2], args[3], 2787 args[4]); 2788 break; 2789 default: 2790 dbglog_printf(timestamp, vap_id, 2791 "gtx_update [act %d bw %d rix 0x%x tpc %d per %d lastrssi %d] ", 2792 args[0], args[1], args[2], 2793 args[3], args[4], args[5]); 2794 } 2795 } 2796 break; 2797 } 2798 return true; 2799 } 2800 2801 static 2802 A_BOOL dbglog_ani_print_handler(uint32_t mod_id, 2803 uint16_t vap_id, 2804 uint32_t dbg_id, 2805 uint32_t timestamp, 2806 uint16_t numargs, uint32_t *args) 2807 { 2808 switch (dbg_id) { 2809 case ANI_DBGID_ENABLE: 2810 dbglog_printf(timestamp, vap_id, "ANI Enable: %d", args[0]); 2811 break; 2812 case ANI_DBGID_POLL: 2813 dbglog_printf(timestamp, vap_id, 2814 "ANI POLLING: AccumListenTime %d ListenTime %d ofdmphyerr %d cckphyerr %d", 2815 args[0], args[1], args[2], args[3]); 2816 break; 2817 case ANI_DBGID_RESTART: 2818 dbglog_printf(timestamp, vap_id, "ANI Restart"); 2819 break; 2820 case ANI_DBGID_CURRENT_LEVEL: 2821 dbglog_printf(timestamp, vap_id, 2822 "ANI CURRENT LEVEL ofdm level %d cck level %d", 2823 args[0], args[1]); 2824 break; 2825 case ANI_DBGID_OFDM_LEVEL: 2826 dbglog_printf(timestamp, vap_id, 2827 "ANI UPDATE ofdm level %d firstep %d firstep_low %d cycpwr_thr %d self_corr_low %d", 2828 args[0], args[1], args[2], args[3], args[4]); 2829 break; 2830 case ANI_DBGID_CCK_LEVEL: 2831 dbglog_printf(timestamp, vap_id, 2832 "ANI UPDATE cck level %d firstep %d firstep_low %d mrc_cck %d", 2833 args[0], args[1], args[2], args[3]); 2834 break; 2835 case ANI_DBGID_CONTROL: 2836 dbglog_printf(timestamp, vap_id, 2837 "ANI CONTROL ofdmlevel %d ccklevel %d\n", 2838 args[0]); 2839 2840 break; 2841 case ANI_DBGID_OFDM_PARAMS: 2842 dbglog_printf(timestamp, vap_id, 2843 "ANI ofdm_control firstep %d cycpwr %d\n", 2844 args[0], args[1]); 2845 break; 2846 case ANI_DBGID_CCK_PARAMS: 2847 dbglog_printf(timestamp, vap_id, 2848 "ANI cck_control mrc_cck %d barker_threshold %d\n", 2849 args[0], args[1]); 2850 break; 2851 case ANI_DBGID_RESET: 2852 dbglog_printf(timestamp, vap_id, 2853 "ANI resetting resetflag %d resetCause %8x channel index %d", 2854 args[0], args[1], args[2]); 2855 break; 2856 case ANI_DBGID_SELF_CORR_LOW: 2857 dbglog_printf(timestamp, vap_id, "ANI self_corr_low %d", 2858 args[0]); 2859 break; 2860 case ANI_DBGID_FIRSTEP: 2861 dbglog_printf(timestamp, vap_id, 2862 "ANI firstep %d firstep_low %d", args[0], 2863 args[1]); 2864 break; 2865 case ANI_DBGID_MRC_CCK: 2866 dbglog_printf(timestamp, vap_id, "ANI mrc_cck %d", args[0]); 2867 break; 2868 case ANI_DBGID_CYCPWR: 2869 dbglog_printf(timestamp, vap_id, "ANI cypwr_thresh %d", 2870 args[0]); 2871 break; 2872 case ANI_DBGID_POLL_PERIOD: 2873 dbglog_printf(timestamp, vap_id, 2874 "ANI Configure poll period to %d", args[0]); 2875 break; 2876 case ANI_DBGID_LISTEN_PERIOD: 2877 dbglog_printf(timestamp, vap_id, 2878 "ANI Configure listen period to %d", args[0]); 2879 break; 2880 case ANI_DBGID_OFDM_LEVEL_CFG: 2881 dbglog_printf(timestamp, vap_id, 2882 "ANI Configure ofdm level to %d", args[0]); 2883 break; 2884 case ANI_DBGID_CCK_LEVEL_CFG: 2885 dbglog_printf(timestamp, vap_id, 2886 "ANI Configure cck level to %d", args[0]); 2887 break; 2888 default: 2889 dbglog_printf(timestamp, vap_id, "ANI arg1 %d arg2 %d arg3 %d", 2890 args[0], args[1], args[2]); 2891 break; 2892 } 2893 return true; 2894 } 2895 2896 static A_BOOL 2897 dbglog_ap_powersave_print_handler(uint32_t mod_id, 2898 uint16_t vap_id, 2899 uint32_t dbg_id, 2900 uint32_t timestamp, 2901 uint16_t numargs, uint32_t *args) 2902 { 2903 switch (dbg_id) { 2904 case AP_PS_DBGID_UPDATE_TIM: 2905 if (numargs == 2) { 2906 dbglog_printf(timestamp, vap_id, 2907 "AP PS: TIM update AID=%u %s", 2908 args[0], args[1] ? "set" : "clear"); 2909 } 2910 break; 2911 case AP_PS_DBGID_PEER_STATE_CHANGE: 2912 if (numargs == 2) { 2913 dbglog_printf(timestamp, vap_id, 2914 "AP PS: AID=%u power save %s", 2915 args[0], 2916 args[1] ? "enabled" : "disabled"); 2917 } 2918 break; 2919 case AP_PS_DBGID_PSPOLL: 2920 if (numargs == 3) { 2921 dbglog_printf(timestamp, vap_id, 2922 "AP PS: AID=%u pspoll response tid=%u flags=%x", 2923 args[0], args[1], args[2]); 2924 } 2925 break; 2926 case AP_PS_DBGID_PEER_CREATE: 2927 if (numargs == 1) { 2928 dbglog_printf(timestamp, vap_id, 2929 "AP PS: create peer AID=%u", args[0]); 2930 } 2931 break; 2932 case AP_PS_DBGID_PEER_DELETE: 2933 if (numargs == 1) { 2934 dbglog_printf(timestamp, vap_id, 2935 "AP PS: delete peer AID=%u", args[0]); 2936 } 2937 break; 2938 case AP_PS_DBGID_VDEV_CREATE: 2939 dbglog_printf(timestamp, vap_id, "AP PS: vdev create"); 2940 break; 2941 case AP_PS_DBGID_VDEV_DELETE: 2942 dbglog_printf(timestamp, vap_id, "AP PS: vdev delete"); 2943 break; 2944 case AP_PS_DBGID_SYNC_TIM: 2945 if (numargs == 3) { 2946 dbglog_printf(timestamp, vap_id, 2947 "AP PS: AID=%u advertised=%#x buffered=%#x", 2948 args[0], args[1], args[2]); 2949 } 2950 break; 2951 case AP_PS_DBGID_NEXT_RESPONSE: 2952 if (numargs == 4) { 2953 dbglog_printf(timestamp, vap_id, 2954 "AP PS: AID=%u select next response %s%s%s", 2955 args[0], args[1] ? "(usp active) " : "", 2956 args[2] ? "(pending usp) " : "", 2957 args[3] ? "(pending poll response)" : ""); 2958 } 2959 break; 2960 case AP_PS_DBGID_START_SP: 2961 if (numargs == 3) { 2962 dbglog_printf(timestamp, vap_id, 2963 "AP PS: AID=%u START SP tsf=%#x (%u)", 2964 args[0], args[1], args[2]); 2965 } 2966 break; 2967 case AP_PS_DBGID_COMPLETED_EOSP: 2968 if (numargs == 3) { 2969 dbglog_printf(timestamp, vap_id, 2970 "AP PS: AID=%u EOSP eosp_tsf=%#x trigger_tsf=%#x", 2971 args[0], args[1], args[2]); 2972 } 2973 break; 2974 case AP_PS_DBGID_TRIGGER: 2975 if (numargs == 4) { 2976 dbglog_printf(timestamp, vap_id, 2977 "AP PS: AID=%u TRIGGER tsf=%#x %s%s", 2978 args[0], args[1], 2979 args[2] ? "(usp active) " : "", 2980 args[3] ? "(send_n in progress)" : ""); 2981 } 2982 break; 2983 case AP_PS_DBGID_DUPLICATE_TRIGGER: 2984 if (numargs == 4) { 2985 dbglog_printf(timestamp, vap_id, 2986 "AP PS: AID=%u DUP TRIGGER tsf=%#x seq=%u ac=%u", 2987 args[0], args[1], args[2], args[3]); 2988 } 2989 break; 2990 case AP_PS_DBGID_UAPSD_RESPONSE: 2991 if (numargs == 5) { 2992 dbglog_printf(timestamp, vap_id, 2993 "AP PS: AID=%u UAPSD response tid=%u, n_mpdu=%u flags=%#x max_sp=%u current_sp=%u", 2994 args[0], args[1], args[2], args[3], 2995 (args[4] >> 16) & 0xffff, 2996 args[4] & 0xffff); 2997 } 2998 break; 2999 case AP_PS_DBGID_SEND_COMPLETE: 3000 if (numargs == 5) { 3001 dbglog_printf(timestamp, vap_id, 3002 "AP PS: AID=%u SEND_COMPLETE fc=%#x qos=%#x %s%s", 3003 args[0], args[1], args[2], 3004 args[3] ? "(usp active) " : "", 3005 args[4] ? "(pending poll response)" : ""); 3006 } 3007 break; 3008 case AP_PS_DBGID_SEND_N_COMPLETE: 3009 if (numargs == 3) { 3010 dbglog_printf(timestamp, vap_id, 3011 "AP PS: AID=%u SEND_N_COMPLETE %s%s", 3012 args[0], 3013 args[1] ? "(usp active) " : "", 3014 args[2] ? "(pending poll response)" : ""); 3015 } 3016 break; 3017 case AP_PS_DBGID_DETECT_OUT_OF_SYNC_STA: 3018 if (numargs == 4) { 3019 dbglog_printf(timestamp, vap_id, 3020 "AP PS: AID=%u detected out-of-sync now=%u tx_waiting=%u txq_depth=%u", 3021 args[0], args[1], args[2], args[3]); 3022 } 3023 break; 3024 case AP_PS_DBGID_DELIVER_CAB: 3025 if (numargs == 4) { 3026 dbglog_printf(timestamp, vap_id, 3027 "AP PS: CAB %s n_mpdus=%u, flags=%x, extra=%u", 3028 (args[0] == 17) ? "MGMT" : "DATA", 3029 args[1], args[2], args[3]); 3030 } 3031 break; 3032 default: 3033 return false; 3034 } 3035 3036 return true; 3037 } 3038 3039 static A_BOOL 3040 dbglog_wal_print_handler(uint32_t mod_id, 3041 uint16_t vap_id, 3042 uint32_t dbg_id, 3043 uint32_t timestamp, uint16_t numargs, uint32_t *args) 3044 { 3045 static const char *const states[] = { 3046 "ACTIVE", 3047 "WAIT", 3048 "WAIT_FILTER", 3049 "PAUSE", 3050 "PAUSE_SEND_N", 3051 "BLOCK", 3052 }; 3053 3054 static const char *const events[] = { 3055 "PAUSE", 3056 "PAUSE_FILTER", 3057 "UNPAUSE", 3058 3059 "BLOCK", 3060 "BLOCK_FILTER", 3061 "UNBLOCK", 3062 3063 "HWQ_EMPTY", 3064 "ALLOW_N", 3065 }; 3066 3067 #define WAL_VDEV_TYPE(type) \ 3068 (type == 0 ? "AP" : \ 3069 (type == 1 ? "STA" : \ 3070 (type == 2 ? "IBSS" : \ 3071 (type == 2 ? "MONITOR" : \ 3072 "UNKNOWN")))) 3073 3074 #define WAL_SLEEP_STATE(state) \ 3075 (state == 1 ? "NETWORK SLEEP" : \ 3076 (state == 2 ? "AWAKE" : \ 3077 (state == 3 ? "SYSTEM SLEEP" : \ 3078 "UNKNOWN"))) 3079 3080 switch (dbg_id) { 3081 case DBGLOG_DBGID_SM_FRAMEWORK_PROXY_DBGLOG_MSG: 3082 dbglog_sm_print(timestamp, vap_id, numargs, args, "TID PAUSE", 3083 states, QDF_ARRAY_SIZE(states), events, 3084 QDF_ARRAY_SIZE(events)); 3085 break; 3086 case WAL_DBGID_SET_POWER_STATE: 3087 if (numargs == 3) { 3088 dbglog_printf(timestamp, vap_id, 3089 "WAL %s => %s, req_count=%u", 3090 WAL_SLEEP_STATE(args[0]), 3091 WAL_SLEEP_STATE(args[1]), args[2]); 3092 } 3093 break; 3094 case WAL_DBGID_CHANNEL_CHANGE_FORCE_RESET: 3095 if (numargs == 4) { 3096 dbglog_printf(timestamp, vap_id, 3097 "WAL channel change (force reset) freq=%u, flags=%u mode=%u rx_ok=%u tx_ok=%u", 3098 args[0] & 0x0000ffff, 3099 (args[0] & 0xffff0000) >> 16, args[1], 3100 args[2], args[3]); 3101 } 3102 break; 3103 case WAL_DBGID_CHANNEL_CHANGE: 3104 if (numargs == 2) { 3105 dbglog_printf(timestamp, vap_id, 3106 "WAL channel change freq=%u, mode=%u flags=%u rx_ok=1 tx_ok=1", 3107 args[0] & 0x0000ffff, 3108 (args[0] & 0xffff0000) >> 16, args[1]); 3109 } 3110 break; 3111 case WAL_DBGID_VDEV_START: 3112 if (numargs == 1) { 3113 dbglog_printf(timestamp, vap_id, "WAL %s vdev started", 3114 WAL_VDEV_TYPE(args[0])); 3115 } 3116 break; 3117 case WAL_DBGID_VDEV_STOP: 3118 dbglog_printf(timestamp, vap_id, "WAL %s vdev stopped", 3119 WAL_VDEV_TYPE(args[0])); 3120 break; 3121 case WAL_DBGID_VDEV_UP: 3122 dbglog_printf(timestamp, vap_id, "WAL %s vdev up, count=%u", 3123 WAL_VDEV_TYPE(args[0]), args[1]); 3124 break; 3125 case WAL_DBGID_VDEV_DOWN: 3126 dbglog_printf(timestamp, vap_id, "WAL %s vdev down, count=%u", 3127 WAL_VDEV_TYPE(args[0]), args[1]); 3128 break; 3129 case WAL_DBGID_TX_MGMT_DESCID_SEQ_TYPE_LEN: 3130 dbglog_printf(timestamp, vap_id, 3131 "WAL Tx Mgmt frame desc_id=0x%x, seq=0x%x, type=0x%x, len=0x%x islocal=0x%x", 3132 args[0], args[1], args[2], 3133 (args[3] & 0xffff0000) >> 16, 3134 args[3] & 0x0000ffff); 3135 break; 3136 case WAL_DBGID_TX_MGMT_COMP_DESCID_STATUS: 3137 dbglog_printf(timestamp, vap_id, 3138 "WAL Tx Mgmt frame completion desc_id=0x%x, status=0x%x, islocal=0x%x", 3139 args[0], args[1], args[2]); 3140 break; 3141 case WAL_DBGID_TX_DATA_MSDUID_SEQ_TYPE_LEN: 3142 dbglog_printf(timestamp, vap_id, 3143 "WAL Tx Data frame msdu_id=0x%x, seq=0x%x, type=0x%x, len=0x%x", 3144 args[0], args[1], args[2], args[3]); 3145 break; 3146 case WAL_DBGID_TX_DATA_COMP_MSDUID_STATUS: 3147 dbglog_printf(timestamp, vap_id, 3148 "WAL Tx Data frame completion desc_id=0x%x, status=0x%x, seq=0x%x", 3149 args[0], args[1], args[2]); 3150 break; 3151 case WAL_DBGID_RESET_PCU_CYCLE_CNT: 3152 dbglog_printf(timestamp, vap_id, 3153 "WAL PCU cycle counter value at reset:%x", 3154 args[0]); 3155 break; 3156 case WAL_DBGID_TX_DISCARD: 3157 dbglog_printf(timestamp, vap_id, 3158 "WAL Tx enqueue discard msdu_id=0x%x", args[0]); 3159 break; 3160 case WAL_DBGID_SET_HW_CHAINMASK: 3161 dbglog_printf(timestamp, vap_id, 3162 "WAL_DBGID_SET_HW_CHAINMASK pdev=%d, txchain=0x%x, rxchain=0x%x", 3163 args[0], args[1], args[2]); 3164 break; 3165 case WAL_DBGID_SET_HW_CHAINMASK_TXRX_STOP_FAIL: 3166 dbglog_printf(timestamp, vap_id, 3167 "WAL_DBGID_SET_HW_CHAINMASK_TXRX_STOP_FAIL rxstop=%d, txstop=%d", 3168 args[0], args[1]); 3169 break; 3170 case WAL_DBGID_GET_HW_CHAINMASK: 3171 dbglog_printf(timestamp, vap_id, "WAL_DBGID_GET_HW_CHAINMASK " 3172 "txchain=0x%x, rxchain=0x%x", args[0], args[1]); 3173 break; 3174 case WAL_DBGID_SMPS_DISABLE: 3175 dbglog_printf(timestamp, vap_id, "WAL_DBGID_SMPS_DISABLE"); 3176 break; 3177 case WAL_DBGID_SMPS_ENABLE_HW_CNTRL: 3178 dbglog_printf(timestamp, vap_id, 3179 "WAL_DBGID_SMPS_ENABLE_HW_CNTRL low_pwr_mask=0x%x, high_pwr_mask=0x%x", 3180 args[0], args[1]); 3181 break; 3182 case WAL_DBGID_SMPS_SWSEL_CHAINMASK: 3183 dbglog_printf(timestamp, vap_id, 3184 "WAL_DBGID_SMPS_SWSEL_CHAINMASK low_pwr=0x%x, chain_mask=0x%x", 3185 args[0], args[1]); 3186 break; 3187 default: 3188 return false; 3189 } 3190 3191 return true; 3192 } 3193 3194 static A_BOOL 3195 dbglog_scan_print_handler(uint32_t mod_id, 3196 uint16_t vap_id, 3197 uint32_t dbg_id, 3198 uint32_t timestamp, uint16_t numargs, uint32_t *args) 3199 { 3200 static const char *const states[] = { 3201 "IDLE", 3202 "BSSCHAN", 3203 "WAIT_FOREIGN_CHAN", 3204 "FOREIGN_CHANNEL", 3205 "TERMINATING" 3206 }; 3207 3208 static const char *const events[] = { 3209 "REQ", 3210 "STOP", 3211 "BSSCHAN", 3212 "FOREIGN_CHAN", 3213 "CHECK_ACTIVITY", 3214 "REST_TIME_EXPIRE", 3215 "DWELL_TIME_EXPIRE", 3216 "PROBE_TIME_EXPIRE", 3217 }; 3218 3219 switch (dbg_id) { 3220 case DBGLOG_DBGID_SM_FRAMEWORK_PROXY_DBGLOG_MSG: 3221 dbglog_sm_print(timestamp, vap_id, numargs, args, "SCAN", 3222 states, QDF_ARRAY_SIZE(states), events, 3223 QDF_ARRAY_SIZE(events)); 3224 break; 3225 default: 3226 return false; 3227 } 3228 3229 return true; 3230 } 3231 3232 static 3233 A_BOOL dbglog_coex_print_handler(uint32_t mod_id, 3234 uint16_t vap_id, 3235 uint32_t dbg_id, 3236 uint32_t timestamp, 3237 uint16_t numargs, uint32_t *args) 3238 { 3239 uint8_t i; 3240 char *dbg_id_str; 3241 3242 static const char *const wlan_rx_xput_status[] = { 3243 "WLAN_XPUT_NORMAL", 3244 "WLAN_XPUT_UNDER_THRESH", 3245 "WLAN_XPUT_CRITICAL", 3246 "WLAN_XPUT_RECOVERY_TIMEOUT", 3247 }; 3248 3249 static const char *const coex_sched_req[] = { 3250 "SCHED_REQ_NEXT", 3251 "SCHED_REQ_BT", 3252 "SCHED_REQ_WLAN", 3253 "SCHED_REQ_POSTPAUSE", 3254 "SCHED_REQ_UNPAUSE", 3255 }; 3256 3257 static const char *const coex_sched_type[] = { 3258 "SCHED_NONE", 3259 "SCHED_WLAN", 3260 "SCHED_BT", 3261 "SCHED_WLAN_PAUSE", 3262 "SCHED_WLAN_POSTPAUSE", 3263 "SCHED_WLAN_UNPAUSE", 3264 "COEX_SCHED_MWS", 3265 }; 3266 3267 static const char *const coex_trf_mgmt_type[] = { 3268 "TRF_MGMT_FREERUN", 3269 "TRF_MGMT_SHAPE_PM", 3270 "TRF_MGMT_SHAPE_PSP", 3271 "TRF_MGMT_SHAPE_S_CTS", 3272 "TRF_MGMT_SHAPE_OCS", 3273 "TRF_MGMT_SHAPE_FIXED_TIME", 3274 "TRF_MGMT_SHAPE_NOA", 3275 "TRF_MGMT_SHAPE_OCS_CRITICAL", 3276 "TRF_MGMT_NONE", 3277 }; 3278 3279 static const char *const coex_system_status[] = { 3280 "ALL_OFF", 3281 "BTCOEX_NOT_REQD", 3282 "WLAN_IS_IDLE", 3283 "EXECUTE_SCHEME", 3284 "BT_FULL_CONCURRENCY", 3285 "WLAN_SLEEPING", 3286 "WLAN_IS_PAUSED", 3287 "WAIT_FOR_NEXT_ACTION", 3288 "SOC_WAKE", 3289 }; 3290 3291 static const char *const wlan_rssi_type[] = { 3292 "LOW_RSSI", 3293 "MID_RSSI", 3294 "HI_RSSI", 3295 "INVALID_RSSI", 3296 }; 3297 3298 static const char *const coex_bt_scheme[] = { 3299 "IDLE_CTRL", 3300 "ACTIVE_ASYNC_CTRL", 3301 "PASSIVE_SYNC_CTRL", 3302 "ACTIVE_SYNC_CTRL", 3303 "DEFAULT_CTRL", 3304 "CONCURRENCY_CTRL", 3305 }; 3306 3307 static const char *const wal_peer_rx_rate_stats_event_sent[] = { 3308 "PR_RX_EVT_SENT_NONE", 3309 "PR_RX_EVT_SENT_LOWER", 3310 "PR_RX_EVT_SENT_UPPER", 3311 }; 3312 3313 static const char *const wlan_psp_stimulus[] = { 3314 "ENTRY", 3315 "EXIT", 3316 "PS_READY", 3317 "PS_NOT_READY", 3318 "RX_MORE_DATA_RCVD", 3319 "RX_NO_MORE_DATA_RCVD", 3320 "TX_DATA_COMPLT", 3321 "TX_COMPLT", 3322 "TIM_SET", 3323 "REQ", 3324 "DONE_SUCCESS", 3325 "DONE_NO_PS_POLL_ACK", 3326 "DONE_RESPONSE_TMO", 3327 "DONE_DROPPED", 3328 "DONE_FILTERED", 3329 "WLAN_START", 3330 "NONWLAN_START", 3331 "NONWLAN_INTVL_UPDATE", 3332 "NULL_TX", 3333 "NULL_TX_COMPLT", 3334 "BMISS_FIRST", 3335 "NULL_TX_FAIL", 3336 "RX_NO_MORE_DATA_DATAFRM", 3337 }; 3338 3339 static const char *const coex_pspoll_state[] = { 3340 "STATE_DISABLED", 3341 "STATE_NOT_READY", 3342 "STATE_ENABLED", 3343 "STATE_READY", 3344 "STATE_TX_STATUS", 3345 "STATE_RX_STATUS", 3346 }; 3347 3348 static const char *const coex_scheduler_interval[] = { 3349 "COEX_SCHED_NONWLAN_INT", 3350 "COEX_SCHED_WLAN_INT", 3351 }; 3352 3353 static const char *const wlan_weight[] = { 3354 "BT_COEX_BASE", 3355 "BT_COEX_LOW", 3356 "BT_COEX_MID", 3357 "BT_COEX_MID_NONSYNC", 3358 "BT_COEX_HI_NONVOICE", 3359 "BT_COEX_HI", 3360 "BT_COEX_CRITICAL", 3361 }; 3362 3363 static const char *const wlan_power_state[] = { 3364 "SLEEP", 3365 "AWAKE", 3366 "FULL_SLEEP", 3367 }; 3368 3369 static const char *const coex_psp_error_type[] = { 3370 "DISABLED_STATE", 3371 "VDEV_NULL", 3372 "COEX_PSP_ENTRY", 3373 "ZERO_INTERVAL", 3374 "COEX_PSP_EXIT", 3375 "READY_DISABLED", 3376 "READY_NOT_DISABLED", 3377 "POLL_PKT_DROPPED", 3378 "SET_TIMER_PARAM", 3379 }; 3380 3381 static const char *const wlan_phymode[] = { 3382 "A", 3383 "G", 3384 "B", 3385 "G_ONLY", 3386 "NA_HT20", 3387 "NG_HT20", 3388 "NA_HT40", 3389 "NG_HT40", 3390 "AC_VHT20", 3391 "AC_VHT40", 3392 "AC_VHT80", 3393 "AC_VHT20_2G", 3394 "AC_VHT40_2G", 3395 "AC_VHT80_2G", 3396 "UNKNOWN", 3397 }; 3398 3399 static const char *const wlan_curr_band[] = { 3400 "2G", 3401 "5G", 3402 }; 3403 3404 dbg_id_str = dbglog_get_msg(mod_id, dbg_id); 3405 3406 switch (dbg_id) { 3407 case COEX_SYSTEM_UPDATE: 3408 if (numargs == 1 && args[0] < 9) { 3409 dbglog_printf(timestamp, vap_id, "%s: %s", dbg_id_str, 3410 coex_system_status[args[0]]); 3411 } else if (numargs >= 5 && args[0] < 9 && args[2] < 9) { 3412 dbglog_printf(timestamp, vap_id, 3413 "%s: %s, WlanSysState(0x%x), %s, NumChains(%u), AggrLimit(%u)", 3414 dbg_id_str, coex_system_status[args[0]], 3415 args[1], coex_trf_mgmt_type[args[2]], 3416 args[3], args[4]); 3417 } else { 3418 return false; 3419 } 3420 break; 3421 case COEX_SCHED_START: 3422 if (numargs >= 5 && args[0] < 5 && args[2] < 9 && args[3] < 4 3423 && args[4] < 4) { 3424 if (args[1] == 0xffffffff) { 3425 dbglog_printf(timestamp, vap_id, 3426 "%s: %s, DETERMINE_DURATION, %s, %s, %s", 3427 dbg_id_str, 3428 coex_sched_req[args[0]], 3429 coex_trf_mgmt_type[args[2]], 3430 wlan_rx_xput_status[args[3]], 3431 wlan_rssi_type[args[4]]); 3432 } else { 3433 dbglog_printf(timestamp, vap_id, 3434 "%s: %s, IntvlDur(%u), %s, %s, %s", 3435 dbg_id_str, 3436 coex_sched_req[args[0]], args[1], 3437 coex_trf_mgmt_type[args[2]], 3438 wlan_rx_xput_status[args[3]], 3439 wlan_rssi_type[args[4]]); 3440 } 3441 } else { 3442 return false; 3443 } 3444 break; 3445 case COEX_SCHED_RESULT: 3446 if (numargs >= 5 && args[0] < 5 && args[1] < 9 && args[2] < 9) { 3447 dbglog_printf(timestamp, vap_id, 3448 "%s: %s, %s, %s, CoexMgrPolicy(%u), IdleOverride(%u)", 3449 dbg_id_str, coex_sched_req[args[0]], 3450 coex_trf_mgmt_type[args[1]], 3451 coex_trf_mgmt_type[args[2]], args[3], 3452 args[4]); 3453 } else { 3454 return false; 3455 } 3456 break; 3457 case COEX_BT_SCHEME: 3458 if (numargs >= 1 && args[0] < 6) { 3459 dbglog_printf(timestamp, vap_id, "%s: %s", dbg_id_str, 3460 coex_bt_scheme[args[0]]); 3461 } else { 3462 return false; 3463 } 3464 break; 3465 case COEX_TRF_FREERUN: 3466 if (numargs >= 5 && args[0] < 7) { 3467 dbglog_printf(timestamp, vap_id, 3468 "%s: %s, AllocatedBtIntvls(%u), BtIntvlCnt(%u), AllocatedWlanIntvls(%u), WlanIntvlCnt(%u)", 3469 dbg_id_str, coex_sched_type[args[0]], 3470 args[1], args[2], args[3], args[4]); 3471 } else { 3472 return false; 3473 } 3474 break; 3475 case COEX_TRF_SHAPE_PM: /* used by ocs now */ 3476 if (numargs >= 3) { 3477 dbglog_printf(timestamp, vap_id, 3478 "%s: IntvlLength(%u), BtDuration(%u), WlanDuration(%u)", 3479 dbg_id_str, args[0], args[1], args[2]); 3480 } else { 3481 return false; 3482 } 3483 break; 3484 case COEX_SYSTEM_MONITOR: 3485 if (numargs >= 5 && args[1] < 4 && args[4] < 4) { 3486 dbglog_printf(timestamp, vap_id, 3487 "%s: WlanRxCritical(%u), %s, MinDirectRxRate(%u), MonitorActiveNum(%u), %s", 3488 dbg_id_str, args[0], 3489 wlan_rx_xput_status[args[1]], args[2], 3490 args[3], wlan_rssi_type[args[4]]); 3491 } else { 3492 return false; 3493 } 3494 break; 3495 case COEX_RX_RATE: 3496 if (numargs >= 5 && args[4] < 3) { 3497 dbglog_printf(timestamp, vap_id, 3498 "%s: NumUnderThreshPeers(%u), MinDirectRate(%u), LastRateSample(%u), DeltaT(%u), %s", 3499 dbg_id_str, args[0], args[1], args[2], 3500 args[3], 3501 wal_peer_rx_rate_stats_event_sent[args 3502 [4]]); 3503 } else { 3504 return false; 3505 } 3506 break; 3507 case COEX_WLAN_INTERVAL_START: 3508 if (numargs >= 5) { 3509 dbglog_printf(timestamp, vap_id, 3510 "%s: WlanIntvlCnt(%u), Duration(%u), Weight(%u), BaseIdleOverride(%u), WeightMat[0](0x%x)", 3511 dbg_id_str, args[0], args[1], args[2], 3512 args[3], args[4]); 3513 } else { 3514 return false; 3515 } 3516 break; 3517 case COEX_WLAN_POSTPAUSE_INTERVAL_START: 3518 if (numargs >= 4) { 3519 dbglog_printf(timestamp, vap_id, 3520 "%s: WlanPostPauseIntvlCnt(%u), XputMonitorActiveNum(%u), Duration(%u), Weight(%u)", 3521 dbg_id_str, args[0], args[1], args[2], 3522 args[3]); 3523 } else { 3524 return false; 3525 } 3526 break; 3527 case COEX_BT_INTERVAL_START: 3528 if (numargs >= 5) { 3529 dbglog_printf(timestamp, vap_id, 3530 "%s: BtIntvlCnt(%u), Duration(%u), Weight(%u), BaseIdleOverride(%u), WeightMat[0](0x%x), ", 3531 dbg_id_str, args[0], args[1], args[2], 3532 args[3], args[4]); 3533 } else { 3534 return false; 3535 } 3536 break; 3537 case COEX_POWER_CHANGE: 3538 if (numargs >= 3 && args[1] < 3 && args[2] < 3) { 3539 dbglog_printf(timestamp, vap_id, 3540 "%s: Event(0x%x) %s->%s", dbg_id_str, 3541 args[0], wlan_power_state[args[1]], 3542 wlan_power_state[args[2]]); 3543 } else { 3544 return false; 3545 } 3546 break; 3547 case COEX_CHANNEL_CHANGE: 3548 if (numargs >= 5 && args[3] < 2 && args[4] < 15) { 3549 dbglog_printf(timestamp, vap_id, 3550 "%s: %uMhz->%uMhz, WlanSysState(0x%x), CurrBand(%s), PhyMode(%s)", 3551 dbg_id_str, args[0], args[1], args[2], 3552 wlan_curr_band[args[3]], 3553 wlan_phymode[args[4]]); 3554 } else { 3555 return false; 3556 } 3557 break; 3558 case COEX_PSP_MGR_ENTER: 3559 if (numargs >= 5 && args[0] < 23 && 3560 args[1] < 6 && args[3] < 2) { 3561 dbglog_printf(timestamp, vap_id, 3562 "%s: %s, %s, PsPollAvg(%u), %s, CurrT(%u)", 3563 dbg_id_str, wlan_psp_stimulus[args[0]], 3564 coex_pspoll_state[args[1]], args[2], 3565 coex_scheduler_interval[args[3]], 3566 args[4]); 3567 } else { 3568 return false; 3569 } 3570 break; 3571 /* Translate following into decimal */ 3572 case COEX_SINGLECHAIN_DBG_1: 3573 case COEX_SINGLECHAIN_DBG_2: 3574 case COEX_SINGLECHAIN_DBG_3: 3575 case COEX_MULTICHAIN_DBG_1: 3576 case COEX_MULTICHAIN_DBG_2: 3577 case COEX_MULTICHAIN_DBG_3: 3578 case BTCOEX_DBG_MCI_1: 3579 case BTCOEX_DBG_MCI_2: 3580 case BTCOEX_DBG_MCI_3: 3581 case BTCOEX_DBG_MCI_4: 3582 case BTCOEX_DBG_MCI_5: 3583 case BTCOEX_DBG_MCI_6: 3584 case BTCOEX_DBG_MCI_7: 3585 case BTCOEX_DBG_MCI_8: 3586 case BTCOEX_DBG_MCI_9: 3587 case BTCOEX_DBG_MCI_10: 3588 3589 if (numargs > 0) { 3590 dbglog_printf_no_line_break(timestamp, vap_id, "%s: %u", 3591 dbg_id_str, args[0]); 3592 for (i = 1; i < numargs; i++) 3593 dbglog_printf_no_line_break(timestamp, vap_id, 3594 "%u", args[i]); 3595 dbglog_printf_no_line_break(timestamp, vap_id, "\n"); 3596 } else { 3597 return false; 3598 } 3599 break; 3600 case COEX_LinkID: 3601 if (numargs >= 4) { 3602 if (args[0]) { /* Add profile */ 3603 dbglog_printf(timestamp, vap_id, 3604 "%s Alloc: LocalID(%u), RemoteID(%u), MinFreeLocalID(%u)", 3605 dbg_id_str, args[1], args[2], 3606 args[3]); 3607 } else { /* Remove profile */ 3608 dbglog_printf(timestamp, vap_id, 3609 "%s Dealloc: LocalID(%u), RemoteID(%u), MinFreeLocalID(%u)", 3610 dbg_id_str, args[1], args[2], 3611 args[3]); 3612 } 3613 } else { 3614 return false; 3615 } 3616 break; 3617 case COEX_PSP_MGR_RESULT: 3618 if (numargs >= 5 && args[0] < 6) { 3619 dbglog_printf(timestamp, vap_id, 3620 "%s: %s, PsPollAvg(%u), EstimationOverrun(%u), EstimationUnderun(%u), NotReadyErr(%u)", 3621 dbg_id_str, coex_pspoll_state[args[0]], 3622 args[1], args[2], args[3], args[4]); 3623 } else { 3624 return false; 3625 } 3626 break; 3627 case COEX_TRF_SHAPE_PSP: 3628 if (numargs >= 5 && args[0] < 7 && args[1] < 7) { 3629 dbglog_printf(timestamp, vap_id, 3630 "%s: %s, %s, Dur(%u), BtTriggerRecvd(%u), PspWlanCritical(%u)", 3631 dbg_id_str, coex_sched_type[args[0]], 3632 wlan_weight[args[1]], args[2], args[3], 3633 args[4]); 3634 } else { 3635 return false; 3636 } 3637 break; 3638 case COEX_PSP_SPEC_POLL: 3639 if (numargs >= 5) { 3640 dbglog_printf(timestamp, vap_id, 3641 "%s: PsPollSpecEna(%u), Count(%u), NextTS(%u), AllowSpecPsPollTx(%u), Intvl(%u)", 3642 dbg_id_str, args[0], args[1], args[2], 3643 args[3], args[4]); 3644 } else { 3645 return false; 3646 } 3647 break; 3648 case COEX_PSP_READY_STATE: 3649 if (numargs >= 5) { 3650 dbglog_printf(timestamp, vap_id, 3651 "%s: T2NonWlan(%u), CoexSchedulerEndTS(%u), MoreData(%u), PSPRespExpectedTS(%u), NonWlanIdleT(%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_NONWLAN_INTERVAL: 3659 if (numargs >= 4) { 3660 dbglog_printf(timestamp, vap_id, 3661 "%s: NonWlanBaseIntvl(%u), NonWlanIdleT(%u), PSPSpecIntvl(%u), ApRespTimeout(%u)", 3662 dbg_id_str, args[0], args[1], args[2], 3663 args[3]); 3664 } else { 3665 return false; 3666 } 3667 break; 3668 case COEX_PSP_ERROR: 3669 if (numargs >= 1 && args[0] < 9) { 3670 dbglog_printf_no_line_break(timestamp, vap_id, "%s: %s", 3671 dbg_id_str, 3672 coex_psp_error_type[args 3673 [0]]); 3674 for (i = 1; i < numargs; i++) { 3675 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, 3676 (", %u", args[i])); 3677 } 3678 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, ("\n")); 3679 } else { 3680 return false; 3681 } 3682 break; 3683 case COEX_PSP_STAT_1: 3684 if (numargs >= 5) { 3685 dbglog_printf(timestamp, vap_id, 3686 "%s: ApResp0(%u), ApResp1(%u), ApResp2(%u), ApResp3(%u), ApResp4(%u)", 3687 dbg_id_str, args[0], args[1], args[2], 3688 args[3], args[4]); 3689 } else { 3690 return false; 3691 } 3692 break; 3693 case COEX_PSP_STAT_2: 3694 if (numargs >= 5) { 3695 dbglog_printf(timestamp, vap_id, 3696 "%s: DataPt(%u), Max(%u), NextApRespIndex(%u), NumOfValidDataPts(%u), PsPollAvg(%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_RX_STATUS_STATE_1: 3704 if (numargs >= 5) { 3705 if (args[2]) { 3706 dbglog_printf(timestamp, vap_id, 3707 "%s: RsExpectedTS(%u), RespActualTS(%u), Overrun, RsOverrunT(%u), RsRxDur(%u)", 3708 dbg_id_str, args[0], args[1], 3709 args[3], args[4]); 3710 } else { 3711 dbglog_printf(timestamp, vap_id, 3712 "%s: RsExpectedTS(%u), RespActualTS(%u), Underrun, RsUnderrunT(%u), RsRxDur(%u)", 3713 dbg_id_str, args[0], args[1], 3714 args[3], args[4]); 3715 } 3716 } else { 3717 return false; 3718 } 3719 break; 3720 default: 3721 return false; 3722 } 3723 3724 return true; 3725 } 3726 3727 static A_BOOL 3728 dbglog_beacon_print_handler(uint32_t mod_id, 3729 uint16_t vap_id, 3730 uint32_t dbg_id, 3731 uint32_t timestamp, 3732 uint16_t numargs, uint32_t *args) 3733 { 3734 static const char *const states[] = { 3735 "INIT", 3736 "ADJUST_START", 3737 "ADJUSTING", 3738 "ADJUST_HOLD", 3739 }; 3740 3741 static const char *const events[] = { 3742 "ADJUST_START", 3743 "ADJUST_RESTART", 3744 "ADJUST_STOP", 3745 "ADJUST_PAUSE", 3746 "ADJUST_UNPAUSE", 3747 "ADJUST_INC_SLOP_STEP", 3748 "ADJUST_HOLD", 3749 "ADJUST_HOLD_TIME_OUT", 3750 }; 3751 3752 switch (dbg_id) { 3753 case DBGLOG_DBGID_SM_FRAMEWORK_PROXY_DBGLOG_MSG: 3754 dbglog_sm_print(timestamp, vap_id, numargs, args, "EARLY_RX", 3755 states, QDF_ARRAY_SIZE(states), events, 3756 QDF_ARRAY_SIZE(events)); 3757 break; 3758 case BEACON_EVENT_EARLY_RX_BMISS_STATUS: 3759 if (numargs == 3) { 3760 dbglog_printf(timestamp, vap_id, 3761 "early_rx bmiss status:rcv=%d total=%d miss=%d", 3762 args[0], args[1], args[2]); 3763 } 3764 break; 3765 case BEACON_EVENT_EARLY_RX_SLEEP_SLOP: 3766 if (numargs == 1) { 3767 dbglog_printf(timestamp, vap_id, 3768 "early_rx update sleep_slop:%d", args[0]); 3769 } 3770 break; 3771 case BEACON_EVENT_EARLY_RX_CONT_BMISS_TIMEOUT: 3772 if (numargs == 1) { 3773 dbglog_printf(timestamp, vap_id, 3774 "early_rx cont bmiss timeout,update sleep_slop:%d", 3775 args[0]); 3776 } 3777 break; 3778 case BEACON_EVENT_EARLY_RX_PAUSE_SKIP_BCN_NUM: 3779 if (numargs == 1) { 3780 dbglog_printf(timestamp, vap_id, 3781 "early_rx skip bcn num:%d", args[0]); 3782 } 3783 break; 3784 case BEACON_EVENT_EARLY_RX_CLK_DRIFT: 3785 if (numargs == 1) { 3786 dbglog_printf(timestamp, vap_id, 3787 "early_rx clk drift:%d", args[0]); 3788 } 3789 break; 3790 case BEACON_EVENT_EARLY_RX_AP_DRIFT: 3791 if (numargs == 1) { 3792 dbglog_printf(timestamp, vap_id, 3793 "early_rx ap drift:%d", args[0]); 3794 } 3795 break; 3796 case BEACON_EVENT_EARLY_RX_BCN_TYPE: 3797 if (numargs == 1) { 3798 dbglog_printf(timestamp, vap_id, 3799 "early_rx bcn type:%d", args[0]); 3800 } 3801 break; 3802 default: 3803 return false; 3804 } 3805 3806 return true; 3807 } 3808 3809 static A_BOOL 3810 dbglog_data_txrx_print_handler(uint32_t mod_id, 3811 uint16_t vap_id, 3812 uint32_t dbg_id, 3813 uint32_t timestamp, 3814 uint16_t numargs, uint32_t *args) 3815 { 3816 switch (dbg_id) { 3817 case DATA_TXRX_DBGID_RX_DATA_SEQ_LEN_INFO: 3818 dbglog_printf(timestamp, vap_id, 3819 "DATA RX seq=0x%x, len=0x%x, stored=0x%x, duperr=0x%x", 3820 args[0], args[1], (args[2] & 0xffff0000) >> 16, 3821 args[2] & 0x0000ffff); 3822 break; 3823 default: 3824 return false; 3825 } 3826 3827 return true; 3828 } 3829 3830 static 3831 A_BOOL dbglog_smps_print_handler(uint32_t mod_id, 3832 uint16_t vap_id, 3833 uint32_t dbg_id, 3834 uint32_t timestamp, 3835 uint16_t numargs, uint32_t *args) 3836 { 3837 static const char *const states[] = { 3838 "S_INACTIVE", 3839 "S_STATIC", 3840 "S_DYNAMIC", 3841 "S_STALLED", 3842 "S_INACTIVE_WAIT", 3843 "S_STATIC_WAIT", 3844 "S_DYNAMIC_WAIT", 3845 }; 3846 3847 static const char *const events[] = { 3848 "E_STOP", 3849 "E_STOP_COMPL", 3850 "E_START", 3851 "E_STATIC", 3852 "E_STATIC_COMPL", 3853 "E_DYNAMIC", 3854 "E_DYNAMIC_COMPL", 3855 "E_STALL", 3856 "E_RSSI_ABOVE_THRESH", 3857 "E_RSSI_BELOW_THRESH", 3858 "E_FORCED_NONE", 3859 }; 3860 switch (dbg_id) { 3861 case DBGLOG_DBGID_SM_FRAMEWORK_PROXY_DBGLOG_MSG: 3862 dbglog_sm_print(timestamp, vap_id, numargs, args, "STA_SMPS SM", 3863 states, QDF_ARRAY_SIZE(states), events, 3864 QDF_ARRAY_SIZE(events)); 3865 break; 3866 case STA_SMPS_DBGID_CREATE_PDEV_INSTANCE: 3867 dbglog_printf(timestamp, vap_id, "STA_SMPS Create PDEV ctx %#x", 3868 args[0]); 3869 break; 3870 case STA_SMPS_DBGID_CREATE_VIRTUAL_CHAN_INSTANCE: 3871 dbglog_printf(timestamp, vap_id, 3872 "STA_SMPS Create Virtual Chan ctx %#x", args[0]); 3873 break; 3874 case STA_SMPS_DBGID_DELETE_VIRTUAL_CHAN_INSTANCE: 3875 dbglog_printf(timestamp, vap_id, 3876 "STA_SMPS Delete Virtual Chan ctx %#x", args[0]); 3877 break; 3878 case STA_SMPS_DBGID_CREATE_STA_INSTANCE: 3879 dbglog_printf(timestamp, vap_id, "STA_SMPS Create STA ctx %#x", 3880 args[0]); 3881 break; 3882 case STA_SMPS_DBGID_DELETE_STA_INSTANCE: 3883 dbglog_printf(timestamp, vap_id, "STA_SMPS Delete STA ctx %#x", 3884 args[0]); 3885 break; 3886 case STA_SMPS_DBGID_VIRTUAL_CHAN_SMPS_START: 3887 break; 3888 case STA_SMPS_DBGID_VIRTUAL_CHAN_SMPS_STOP: 3889 break; 3890 case STA_SMPS_DBGID_SEND_SMPS_ACTION_FRAME: 3891 dbglog_printf(timestamp, vap_id, 3892 "STA_SMPS STA %#x Signal SMPS mode as %s; cb_flags %#x", 3893 args[0], 3894 (args[1] == 3895 0 ? "DISABLED" : (args[1] == 3896 0x1 ? "STATIC" : (args[1] == 3897 0x3 ? 3898 "DYNAMIC" : 3899 "UNKNOWN"))), 3900 args[2]); 3901 break; 3902 case STA_SMPS_DBGID_DTIM_EBT_EVENT_CHMASK_UPDATE: 3903 dbglog_printf(timestamp, vap_id, 3904 "STA_SMPS_DBGID_DTIM_EBT_EVENT_CHMASK_UPDATE"); 3905 break; 3906 case STA_SMPS_DBGID_DTIM_CHMASK_UPDATE: 3907 dbglog_printf(timestamp, vap_id, 3908 "STA_SMPS_DBGID_DTIM_CHMASK_UPDATE tx_mask %#x rx_mask %#x arb_dtim_mask %#x", 3909 args[0], args[1], args[2]); 3910 break; 3911 case STA_SMPS_DBGID_DTIM_BEACON_EVENT_CHMASK_UPDATE: 3912 dbglog_printf(timestamp, vap_id, 3913 "STA_SMPS_DBGID_DTIM_BEACON_EVENT_CHMASK_UPDATE"); 3914 break; 3915 case STA_SMPS_DBGID_DTIM_POWER_STATE_CHANGE: 3916 dbglog_printf(timestamp, vap_id, 3917 "STA_SMPS_DBGID_DTIM_POWER_STATE_CHANGE cur_pwr_state %s new_pwr_state %s", 3918 (args[0] == 3919 0x1 ? "SLEEP" : (args[0] == 3920 0x2 ? "AWAKE" : (args[0] == 3921 0x3 ? 3922 "FULL_SLEEP" : 3923 "UNKNOWN"))), 3924 (args[1] == 3925 0x1 ? "SLEEP" : (args[1] == 3926 0x2 ? "AWAKE" : (args[1] == 3927 0x3 ? 3928 "FULL_SLEEP" : 3929 "UNKNOWN")))); 3930 break; 3931 case STA_SMPS_DBGID_DTIM_CHMASK_UPDATE_SLEEP: 3932 dbglog_printf(timestamp, vap_id, 3933 "STA_SMPS_DBGID_DTIM_CHMASK_UPDATE_SLEEP tx_mask %#x rx_mask %#x orig_rx %#x dtim_rx %#x", 3934 args[0], args[1], args[2], args[3]); 3935 break; 3936 case STA_SMPS_DBGID_DTIM_CHMASK_UPDATE_AWAKE: 3937 dbglog_printf(timestamp, vap_id, 3938 "STA_SMPS_DBGID_DTIM_CHMASK_UPDATE_AWAKE tx_mask %#x rx_mask %#x orig_rx %#x", 3939 args[0], args[1], args[2]); 3940 break; 3941 default: 3942 dbglog_printf(timestamp, vap_id, "STA_SMPS: UNKNOWN DBGID!"); 3943 return false; 3944 } 3945 3946 return true; 3947 } 3948 3949 static A_BOOL 3950 dbglog_p2p_print_handler(uint32_t mod_id, 3951 uint16_t vap_id, 3952 uint32_t dbg_id, 3953 uint32_t timestamp, uint16_t numargs, uint32_t *args) 3954 { 3955 static const char *const states[] = { 3956 "ACTIVE", 3957 "DOZE", 3958 "TX_BCN", 3959 "CTWIN", 3960 "OPPPS", 3961 }; 3962 3963 static const char *const events[] = { 3964 "ONESHOT_NOA", 3965 "CTWINDOW", 3966 "PERIODIC_NOA", 3967 "IDLE", 3968 "NOA_CHANGED", 3969 "TBTT", 3970 "TX_BCN_CMP", 3971 "OPPPS_OK", 3972 "OPPPS_CHANGED", 3973 }; 3974 3975 switch (dbg_id) { 3976 case DBGLOG_DBGID_SM_FRAMEWORK_PROXY_DBGLOG_MSG: 3977 dbglog_sm_print(timestamp, vap_id, numargs, args, "P2P GO PS", 3978 states, QDF_ARRAY_SIZE(states), events, 3979 QDF_ARRAY_SIZE(events)); 3980 break; 3981 default: 3982 return false; 3983 } 3984 3985 return true; 3986 } 3987 3988 static A_BOOL 3989 dbglog_pcielp_print_handler(uint32_t mod_id, 3990 uint16_t vap_id, 3991 uint32_t dbg_id, 3992 uint32_t timestamp, 3993 uint16_t numargs, uint32_t *args) 3994 { 3995 static const char *const states[] = { 3996 "STOP", 3997 "TX", 3998 "RX", 3999 "SLEEP", 4000 "SUSPEND", 4001 }; 4002 4003 static const char *const events[] = { 4004 "VDEV_UP", 4005 "ALL_VDEV_DOWN", 4006 "AWAKE", 4007 "SLEEP", 4008 "TX_ACTIVITY", 4009 "TX_INACTIVITY", 4010 "TX_AC_CHANGE", 4011 "SUSPEND", 4012 "RESUME", 4013 }; 4014 4015 switch (dbg_id) { 4016 case DBGLOG_DBGID_SM_FRAMEWORK_PROXY_DBGLOG_MSG: 4017 dbglog_sm_print(timestamp, vap_id, numargs, args, "PCIELP", 4018 states, QDF_ARRAY_SIZE(states), events, 4019 QDF_ARRAY_SIZE(events)); 4020 break; 4021 default: 4022 return false; 4023 } 4024 4025 return true; 4026 } 4027 4028 #ifdef WLAN_OPEN_SOURCE 4029 static int dbglog_block_open(struct inode *inode, struct file *file) 4030 { 4031 struct fwdebug *fwlog = inode->i_private; 4032 4033 if (fwlog->fwlog_open) 4034 return -EBUSY; 4035 4036 fwlog->fwlog_open = true; 4037 4038 file->private_data = inode->i_private; 4039 return 0; 4040 } 4041 4042 static int dbglog_block_release(struct inode *inode, struct file *file) 4043 { 4044 struct fwdebug *fwlog = inode->i_private; 4045 4046 fwlog->fwlog_open = false; 4047 4048 return 0; 4049 } 4050 4051 static ssize_t dbglog_block_read(struct file *file, 4052 char __user *user_buf, 4053 size_t count, loff_t *ppos) 4054 { 4055 struct fwdebug *fwlog = file->private_data; 4056 struct sk_buff *skb; 4057 ssize_t ret_cnt; 4058 size_t len = 0, not_copied; 4059 char *buf; 4060 int ret; 4061 4062 buf = vzalloc(count); 4063 if (!buf) 4064 return -ENOMEM; 4065 4066 spin_lock_bh(&fwlog->fwlog_queue.lock); 4067 4068 if (skb_queue_len(&fwlog->fwlog_queue) == 0) { 4069 /* we must init under queue lock */ 4070 init_completion(&fwlog->fwlog_completion); 4071 4072 spin_unlock_bh(&fwlog->fwlog_queue.lock); 4073 4074 ret = 4075 wait_for_completion_interruptible(&fwlog->fwlog_completion); 4076 if (ret == -ERESTARTSYS) { 4077 vfree(buf); 4078 return ret; 4079 } 4080 4081 spin_lock_bh(&fwlog->fwlog_queue.lock); 4082 } 4083 4084 while ((skb = __skb_dequeue(&fwlog->fwlog_queue))) { 4085 if (skb->len > count - len) { 4086 /* not enough space, put skb back and leave */ 4087 __skb_queue_head(&fwlog->fwlog_queue, skb); 4088 break; 4089 } 4090 4091 memcpy(buf + len, skb->data, skb->len); 4092 len += skb->len; 4093 4094 kfree_skb(skb); 4095 } 4096 4097 spin_unlock_bh(&fwlog->fwlog_queue.lock); 4098 4099 /* FIXME: what to do if len == 0? */ 4100 not_copied = copy_to_user(user_buf, buf, len); 4101 if (not_copied != 0) { 4102 ret_cnt = -EFAULT; 4103 goto out; 4104 } 4105 4106 *ppos = *ppos + len; 4107 4108 ret_cnt = len; 4109 4110 out: 4111 vfree(buf); 4112 4113 return ret_cnt; 4114 } 4115 4116 static const struct file_operations fops_dbglog_block = { 4117 .open = dbglog_block_open, 4118 .release = dbglog_block_release, 4119 .read = dbglog_block_read, 4120 .owner = THIS_MODULE, 4121 .llseek = default_llseek, 4122 }; 4123 4124 #ifdef WLAN_DEBUGFS 4125 4126 static void dbglog_debugfs_init(wmi_unified_t wmi_handle) 4127 { 4128 4129 wmi_handle->debugfs_phy = debugfs_create_dir(CLD_DEBUGFS_DIR, NULL); 4130 if (!wmi_handle->debugfs_phy) { 4131 qdf_print("Failed to create WMI debug fs"); 4132 return; 4133 } 4134 4135 debugfs_create_file(DEBUGFS_BLOCK_NAME, 0400, 4136 wmi_handle->debugfs_phy, &wmi_handle->dbglog, 4137 &fops_dbglog_block); 4138 4139 return; 4140 } 4141 4142 static void dbglog_debugfs_remove(wmi_unified_t wmi_handle) 4143 { 4144 debugfs_remove_recursive(wmi_handle->debugfs_phy); 4145 } 4146 4147 #else 4148 4149 static void dbglog_debugfs_init(wmi_unified_t wmi_handle) 4150 { 4151 } 4152 4153 static void dbglog_debugfs_remove(wmi_unified_t wmi_handle) 4154 { 4155 } 4156 4157 #endif /* End of WLAN_DEBUGFS */ 4158 4159 #endif /* WLAN_OPEN_SOURCE */ 4160 4161 /** 4162 * cnss_diag_handle_crash_inject() - API to handle crash inject command 4163 * @slot: pointer to struct dbglog_slot 4164 * 4165 * API to handle CNSS diag crash inject command 4166 * 4167 * Return: None 4168 */ 4169 static void cnss_diag_handle_crash_inject(struct dbglog_slot *slot) 4170 { 4171 switch (slot->diag_type) { 4172 case DIAG_TYPE_CRASH_INJECT: 4173 if (slot->length != 2) { 4174 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 4175 ("crash_inject cmd error\n")); 4176 return; 4177 } 4178 4179 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, 4180 ("%s : DIAG_TYPE_CRASH_INJECT: %d %d\n", 4181 __func__, slot->payload[0], 4182 slot->payload[1])); 4183 if (!tgt_assert_enable) { 4184 AR_DEBUG_PRINTF(ATH_DEBUG_INFO, 4185 ("%s: tgt Assert Disabled\n", 4186 __func__)); 4187 return; 4188 } 4189 wma_cli_set2_command(0, (int)GEN_PARAM_CRASH_INJECT, 4190 slot->payload[0], 4191 slot->payload[1], GEN_CMD); 4192 break; 4193 default: 4194 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Unknown cmd[%d] error\n", 4195 slot->diag_type)); 4196 break; 4197 } 4198 } 4199 4200 #ifdef CNSS_GENL 4201 /** 4202 * cnss_diag_cmd_handler() - API to handle CNSS diag command 4203 * @data: Data received 4204 * @data_len: length of the data received 4205 * @ctx: Pointer to stored context 4206 * @pid: Process ID 4207 * 4208 * API to handle CNSS diag commands from user space 4209 * 4210 * Return: None 4211 */ 4212 static void cnss_diag_cmd_handler(const void *data, int data_len, 4213 void *ctx, int pid) 4214 { 4215 struct dbglog_slot *slot = NULL; 4216 struct nlattr *tb[QCA_WLAN_VENDOR_ATTR_MAX + 1]; 4217 4218 /* 4219 * audit note: it is ok to pass a NULL policy here since a 4220 * length check on the data is added later already 4221 */ 4222 if (wlan_cfg80211_nla_parse(tb, CLD80211_ATTR_MAX, 4223 data, data_len, NULL)) { 4224 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("%s: nla parse fails\n", 4225 __func__)); 4226 return; 4227 } 4228 4229 if (!tb[CLD80211_ATTR_DATA]) { 4230 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("%s: attr VENDOR_DATA fails\n", 4231 __func__)); 4232 return; 4233 } 4234 4235 if (nla_len(tb[CLD80211_ATTR_DATA]) != sizeof(struct dbglog_slot)) { 4236 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("%s: attr length check fails\n", 4237 __func__)); 4238 return; 4239 } 4240 slot = (struct dbglog_slot *)nla_data(tb[CLD80211_ATTR_DATA]); 4241 4242 if (!slot) { 4243 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("%s: data NULL\n", __func__)); 4244 return; 4245 } 4246 4247 cnss_diag_handle_crash_inject(slot); 4248 return; 4249 } 4250 4251 int cnss_diag_activate_service(void) 4252 { 4253 register_cld_cmd_cb(WLAN_NL_MSG_CNSS_DIAG, cnss_diag_cmd_handler, NULL); 4254 return 0; 4255 } 4256 4257 int cnss_diag_deactivate_service(void) 4258 { 4259 deregister_cld_cmd_cb(WLAN_NL_MSG_CNSS_DIAG); 4260 return 0; 4261 } 4262 4263 #else 4264 4265 /** 4266 * brief cnss_diag_msg_callback() - Call back invoked by netlink service 4267 * 4268 * This function gets invoked by netlink service when a message is recevied 4269 * from the cnss-diag application in user-space. 4270 * 4271 * param - 4272 * - skb - skb with netlink message 4273 * 4274 * return - 0 for success, non zero for failure 4275 */ 4276 static int cnss_diag_msg_callback(struct sk_buff *skb) 4277 { 4278 struct nlmsghdr *nlh; 4279 uint8_t *msg; 4280 4281 nlh = (struct nlmsghdr *)skb->data; 4282 if (!nlh) { 4283 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 4284 ("%s: Netlink header null\n", __func__)); 4285 return A_ERROR; 4286 } 4287 4288 msg = NLMSG_DATA(nlh); 4289 cnss_diag_handle_crash_inject((struct dbglog_slot *)msg); 4290 4291 return 0; 4292 } 4293 4294 int cnss_diag_activate_service(void) 4295 { 4296 int ret; 4297 4298 /* Register the msg handler for msgs addressed to WLAN_NL_MSG_OEM */ 4299 ret = nl_srv_register(WLAN_NL_MSG_CNSS_DIAG, cnss_diag_msg_callback); 4300 if (ret) 4301 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 4302 ("CNSS-DIAG Registration failed")); 4303 4304 return ret; 4305 } 4306 4307 int cnss_diag_deactivate_service(void) 4308 { 4309 int ret; 4310 4311 /* 4312 * Deregister the msg handler for msgs addressed to 4313 * WLAN_NL_MSG_CNSS_DIAG 4314 */ 4315 ret = nl_srv_unregister(WLAN_NL_MSG_CNSS_DIAG, cnss_diag_msg_callback); 4316 if (ret) 4317 AR_DEBUG_PRINTF(ATH_DEBUG_ERR, 4318 ("CNSS-DIAG Registration failed")); 4319 4320 return ret; 4321 } 4322 #endif 4323 4324 static A_BOOL 4325 dbglog_wow_print_handler(uint32_t mod_id, 4326 uint16_t vap_id, 4327 uint32_t dbg_id, 4328 uint32_t timestamp, uint16_t numargs, uint32_t *args) 4329 { 4330 4331 switch (dbg_id) { 4332 case WOW_NS_OFLD_ENABLE: 4333 if (4 == numargs) { 4334 dbglog_printf(timestamp, vap_id, 4335 "Enable NS offload, for sender %02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x", 4336 *(uint8_t *) &args[0], 4337 *((uint8_t *) &args[0] + 1), 4338 *((uint8_t *) &args[0] + 2), 4339 *((uint8_t *) &args[0] + 3), 4340 *(uint8_t *) &args[1], 4341 *((uint8_t *) &args[1] + 1), 4342 *((uint8_t *) &args[1] + 2), 4343 *((uint8_t *) &args[1] + 3), 4344 *(uint8_t *) &args[2], 4345 *((uint8_t *) &args[2] + 1), 4346 *((uint8_t *) &args[2] + 2), 4347 *((uint8_t *) &args[2] + 3), 4348 *(uint8_t *) &args[3], 4349 *((uint8_t *) &args[3] + 1), 4350 *((uint8_t *) &args[3] + 2), 4351 *((uint8_t *) &args[3] + 3)); 4352 } else { 4353 return false; 4354 } 4355 break; 4356 case WOW_ARP_OFLD_ENABLE: 4357 if (1 == numargs) { 4358 dbglog_printf(timestamp, vap_id, 4359 "Enable ARP offload, for sender %d.%d.%d.%d", 4360 *(uint8_t *) args, 4361 *((uint8_t *) args + 1), 4362 *((uint8_t *) args + 2), 4363 *((uint8_t *) args + 3)); 4364 } else { 4365 return false; 4366 } 4367 break; 4368 case WOW_NS_ARP_OFLD_DISABLE: 4369 if (0 == numargs) { 4370 dbglog_printf(timestamp, vap_id, 4371 "disable NS/ARP offload"); 4372 } else { 4373 return false; 4374 } 4375 break; 4376 case WOW_NS_RECEIVED: 4377 if (4 == numargs) { 4378 dbglog_printf(timestamp, vap_id, 4379 "NS requested from %02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x", 4380 *(uint8_t *) &args[0], 4381 *((uint8_t *) &args[0] + 1), 4382 *((uint8_t *) &args[0] + 2), 4383 *((uint8_t *) &args[0] + 3), 4384 *(uint8_t *) &args[1], 4385 *((uint8_t *) &args[1] + 1), 4386 *((uint8_t *) &args[1] + 2), 4387 *((uint8_t *) &args[1] + 3), 4388 *(uint8_t *) &args[2], 4389 *((uint8_t *) &args[2] + 1), 4390 *((uint8_t *) &args[2] + 2), 4391 *((uint8_t *) &args[2] + 3), 4392 *(uint8_t *) &args[3], 4393 *((uint8_t *) &args[3] + 1), 4394 *((uint8_t *) &args[3] + 2), 4395 *((uint8_t *) &args[3] + 3)); 4396 } else { 4397 return false; 4398 } 4399 break; 4400 case WOW_NS_REPLIED: 4401 if (4 == numargs) { 4402 dbglog_printf(timestamp, vap_id, 4403 "NS replied to %02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x", 4404 *(uint8_t *) &args[0], 4405 *((uint8_t *) &args[0] + 1), 4406 *((uint8_t *) &args[0] + 2), 4407 *((uint8_t *) &args[0] + 3), 4408 *(uint8_t *) &args[1], 4409 *((uint8_t *) &args[1] + 1), 4410 *((uint8_t *) &args[1] + 2), 4411 *((uint8_t *) &args[1] + 3), 4412 *(uint8_t *) &args[2], 4413 *((uint8_t *) &args[2] + 1), 4414 *((uint8_t *) &args[2] + 2), 4415 *((uint8_t *) &args[2] + 3), 4416 *(uint8_t *) &args[3], 4417 *((uint8_t *) &args[3] + 1), 4418 *((uint8_t *) &args[3] + 2), 4419 *((uint8_t *) &args[3] + 3)); 4420 } else { 4421 return false; 4422 } 4423 break; 4424 case WOW_ARP_RECEIVED: 4425 if (1 == numargs) { 4426 dbglog_printf(timestamp, vap_id, 4427 "ARP requested from %d.%d.%d.%d", 4428 *(uint8_t *) args, 4429 *((uint8_t *) args + 1), 4430 *((uint8_t *) args + 2), 4431 *((uint8_t *) args + 3)); 4432 } else { 4433 return false; 4434 } 4435 break; 4436 break; 4437 case WOW_ARP_REPLIED: 4438 if (1 == numargs) { 4439 dbglog_printf(timestamp, vap_id, 4440 "ARP replied to %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 default: 4450 return false; 4451 } 4452 4453 return true; 4454 } 4455 4456 int dbglog_parser_type_init(wmi_unified_t wmi_handle, int type) 4457 { 4458 if (type >= DBGLOG_PROCESS_MAX) 4459 return A_ERROR; 4460 4461 dbglog_process_type = type; 4462 gprint_limiter = false; 4463 4464 return A_OK; 4465 } 4466 4467 int dbglog_init(wmi_unified_t wmi_handle) 4468 { 4469 int res = 0; 4470 4471 OS_MEMSET(mod_print, 0, sizeof(mod_print)); 4472 4473 dbglog_reg_modprint(WLAN_MODULE_STA_PWRSAVE, 4474 dbglog_sta_powersave_print_handler); 4475 dbglog_reg_modprint(WLAN_MODULE_AP_PWRSAVE, 4476 dbglog_ap_powersave_print_handler); 4477 dbglog_reg_modprint(WLAN_MODULE_WAL, dbglog_wal_print_handler); 4478 dbglog_reg_modprint(WLAN_MODULE_SCAN, dbglog_scan_print_handler); 4479 dbglog_reg_modprint(WLAN_MODULE_RATECTRL, 4480 dbglog_ratectrl_print_handler); 4481 dbglog_reg_modprint(WLAN_MODULE_ANI, dbglog_ani_print_handler); 4482 dbglog_reg_modprint(WLAN_MODULE_COEX, dbglog_coex_print_handler); 4483 dbglog_reg_modprint(WLAN_MODULE_BEACON, dbglog_beacon_print_handler); 4484 dbglog_reg_modprint(WLAN_MODULE_WOW, dbglog_wow_print_handler); 4485 dbglog_reg_modprint(WLAN_MODULE_DATA_TXRX, 4486 dbglog_data_txrx_print_handler); 4487 dbglog_reg_modprint(WLAN_MODULE_STA_SMPS, dbglog_smps_print_handler); 4488 dbglog_reg_modprint(WLAN_MODULE_P2P, dbglog_p2p_print_handler); 4489 dbglog_reg_modprint(WLAN_MODULE_PCIELP, dbglog_pcielp_print_handler); 4490 dbglog_reg_modprint(WLAN_MODULE_IBSS_PWRSAVE, 4491 dbglog_ibss_powersave_print_handler); 4492 tgt_assert_enable = wmi_handle->tgt_force_assert_enable; 4493 4494 /* Register handler for F3 or debug messages */ 4495 res = 4496 wmi_unified_register_event_handler(wmi_handle, 4497 wmi_dbg_msg_event_id, 4498 dbglog_parse_debug_logs, 4499 WMA_RX_WORK_CTX); 4500 if (res != 0) 4501 return res; 4502 4503 /* Register handler for FW diag events */ 4504 res = wmi_unified_register_event_handler(wmi_handle, 4505 wmi_diag_container_event_id, 4506 fw_diag_data_event_handler, 4507 WMA_RX_WORK_CTX); 4508 if (res != 0) 4509 return res; 4510 4511 /* Register handler for new FW diag Event, LOG, MSG combined */ 4512 res = wmi_unified_register_event_handler(wmi_handle, wmi_diag_event_id, 4513 diag_fw_handler, 4514 WMA_RX_WORK_CTX); 4515 if (res != 0) 4516 return res; 4517 4518 #ifdef WLAN_OPEN_SOURCE 4519 /* Initialize the fw debug log queue */ 4520 skb_queue_head_init(&wmi_handle->dbglog.fwlog_queue); 4521 init_completion(&wmi_handle->dbglog.fwlog_completion); 4522 4523 /* Initialize debugfs */ 4524 dbglog_debugfs_init(wmi_handle); 4525 #endif /* WLAN_OPEN_SOURCE */ 4526 4527 return res; 4528 } 4529 4530 int dbglog_deinit(wmi_unified_t wmi_handle) 4531 { 4532 int res = 0; 4533 4534 #ifdef WLAN_OPEN_SOURCE 4535 /* DeInitialize the fw debug log queue */ 4536 skb_queue_purge(&wmi_handle->dbglog.fwlog_queue); 4537 complete(&wmi_handle->dbglog.fwlog_completion); 4538 4539 /* Deinitialize the debugfs */ 4540 dbglog_debugfs_remove(wmi_handle); 4541 #endif /* WLAN_OPEN_SOURCE */ 4542 tgt_assert_enable = 0; 4543 res = 4544 wmi_unified_unregister_event_handler(wmi_handle, 4545 wmi_dbg_msg_event_id); 4546 if (res != 0) 4547 return res; 4548 4549 return res; 4550 } 4551