/*
 * Copyright (c) 2013-2017 The Linux Foundation. All rights reserved.
 *
 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
 *
 *
 * Permission to use, copy, modify, and/or distribute this software for
 * any purpose with or without fee is hereby granted, provided that the
 * above copyright notice and this permission notice appear in all
 * copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 * PERFORMANCE OF THIS SOFTWARE.
 */

/*
 * This file was originally distributed by Qualcomm Atheros, Inc.
 * under proprietary terms before Copyright ownership was assigned
 * to the Linux Foundation.
 */

/* Host Debug log implementation */


#include "athdefs.h"
#include "a_types.h"
#include "dbglog_host.h"
#include "wmi.h"
#include "wmi_unified_api.h"
#include "wma.h"
#include "ol_defines.h"
#include <wlan_nlink_srv.h>
#include "vos_diag_core_event.h"
#include "qwlan_version.h"
#include <wlan_hdd_main.h>
#include <wlan_hdd_wext.h>
#include <net/sock.h>
#include <linux/netlink.h>
#ifdef CNSS_GENL
#include <net/cnss_nl.h>
#endif

#ifdef WLAN_OPEN_SOURCE
#include <linux/debugfs.h>
#endif /* WLAN_OPEN_SOURCE */
#include "wmi_unified_priv.h"

#ifdef MULTI_IF_NAME
#define CLD_DEBUGFS_DIR          "cld" MULTI_IF_NAME
#else
#define CLD_DEBUGFS_DIR          "cld"
#endif
#define DEBUGFS_BLOCK_NAME       "dbglog_block"
#define CNSS_DIAG_FWLOG_TIMEOUT	2000

#define ATH_MODULE_NAME fwlog
#include <a_debug.h>
#define FWLOG_DEBUG   ATH_DEBUG_MAKE_MODULE_MASK(0)

#define DBG_STRING(id) [id] = #id

static bool kd_nl_init = FALSE;
static int get_version = 0;
static int gprint_limiter = 0;
static bool tgt_assert_enable = 0;

#if defined(WLAN_DEBUG)

static ATH_DEBUG_MASK_DESCRIPTION g_fwlogDebugDescription[] = {
    {FWLOG_DEBUG,"fwlog"},
};

ATH_DEBUG_INSTANTIATE_MODULE_VAR(fwlog,
                                 "fwlog",
                                "Firmware Debug Log",
                                 ATH_DEBUG_MASK_DEFAULTS | ATH_DEBUG_INFO | ATH_DEBUG_ERR,
                                 ATH_DEBUG_DESCRIPTION_COUNT(g_fwlogDebugDescription),
                                 g_fwlogDebugDescription);
#endif

module_dbg_print mod_print[WLAN_MODULE_ID_MAX];

A_UINT32 dbglog_process_type = DBGLOG_PROCESS_NET_RAW;

A_STATUS
wmi_config_debug_module_cmd(wmi_unified_t  wmi_handle, A_UINT32 param, A_UINT32 val,
                            A_UINT32 *module_id_bitmap, A_UINT32 bitmap_len);

const char *dbglog_get_module_str(A_UINT32 module_id)
{
    switch (module_id) {
    case WLAN_MODULE_INF:
        return "INF";
    case WLAN_MODULE_WMI:
        return "WMI";
    case WLAN_MODULE_STA_PWRSAVE:
        return "STA PS";
    case WLAN_MODULE_WHAL:
        return "WHAL";
    case WLAN_MODULE_COEX:
        return "COEX";
    case WLAN_MODULE_ROAM:
        return "ROAM";
    case WLAN_MODULE_RESMGR_CHAN_MANAGER:
        return "CHANMGR";
    case WLAN_MODULE_RESMGR:
        return "RESMGR";
    case WLAN_MODULE_VDEV_MGR:
        return "VDEV";
    case WLAN_MODULE_SCAN:
        return "SCAN";
    case WLAN_MODULE_RATECTRL:
        return "RC";
    case WLAN_MODULE_AP_PWRSAVE:
        return "AP PS";
    case WLAN_MODULE_BLOCKACK:
        return "BA";
    case WLAN_MODULE_MGMT_TXRX:
        return "MGMT";
    case WLAN_MODULE_DATA_TXRX:
        return "DATA";
    case WLAN_MODULE_HTT:
        return "HTT";
    case WLAN_MODULE_HOST:
        return "HOST";
    case WLAN_MODULE_BEACON:
        return "BEACON";
    case WLAN_MODULE_OFFLOAD:
        return "OFFLOAD";
    case WLAN_MODULE_WAL:
        return "WAL";
    case WAL_MODULE_DE:
        return "DE";
    case WLAN_MODULE_PCIELP:
        return "PCIELP";
    case WLAN_MODULE_RTT:
        return "RTT";
    case WLAN_MODULE_DCS:
        return "DCS";
    case WLAN_MODULE_CACHEMGR:
        return "CACHEMGR";
    case WLAN_MODULE_ANI:
        return "ANI";
    case WLAN_MODULE_TEST:
        return "TESTPOINT";
    case WLAN_MODULE_STA_SMPS:
        return "STA_SMPS";
    case WLAN_MODULE_TDLS:
        return "TDLS";
    case WLAN_MODULE_P2P:
        return "P2P";
    case WLAN_MODULE_WOW:
        return "WoW";
    case WLAN_MODULE_IBSS_PWRSAVE:
        return "IBSS PS";
    case WLAN_MODULE_EXTSCAN:
        return "ExtScan";
    case WLAN_MODULE_UNIT_TEST:
        return "UNIT_TEST";
    case WLAN_MODULE_MLME:
        return "MLME";
    case WLAN_MODULE_SUPPL:
        return "SUPPLICANT";
    case WLAN_MODULE_ERE:
        return "ERE";
    case WLAN_MODULE_OCB:
        return "OCB";
    case WLAN_MODULE_RSSI_MONITOR:
        return "RSSI_MONITOR";
    case WLAN_MODULE_WPM:
        return "WPM";
    case WLAN_MODULE_CSS:
        return "CSS";
    case WLAN_MODULE_PPS:
        return "PPS";
    case WLAN_MODULE_SCAN_CH_PREDICT:
        return "SCAN_CH_PREDICT";
    case WLAN_MODULE_MAWC:
        return "MAWC";
    case WLAN_MODULE_CMC_QMIC:
        return "CMC_QMIC";
    case WLAN_MODULE_EGAP:
        return "EGAP";
    case WLAN_MODULE_NAN20:
        return "NAN20";
    case WLAN_MODULE_QBOOST:
        return "QBOOST";
    default:
        return "UNKNOWN";
    }
}

char * DBG_MSG_ARR[WLAN_MODULE_ID_MAX][MAX_DBG_MSGS] =
{
    {
        DBG_STRING(INF_DBGID_DEFINITION_START),
        DBG_STRING(INF_ASSERTION_FAILED),
        DBG_STRING(INF_TARGET_ID),
        DBG_STRING(INF_TARGET_MEM_REMAING),
        DBG_STRING(INF_TARGET_MEM_EXT_REMAING),
        DBG_STRING(INF_TARGET_MEM_ALLOC_TRACK),
        DBG_STRING(INF_TARGET_MEM_ALLOC_RAM),
        DBG_STRING(INF_DBGID_DEFINITION_END),
    },
    {
        DBG_STRING(WMI_DBGID_DEFINITION_START),
        DBG_STRING(WMI_CMD_RX_XTND_PKT_TOO_SHORT),
        DBG_STRING(WMI_EXTENDED_CMD_NOT_HANDLED),
        DBG_STRING(WMI_CMD_RX_PKT_TOO_SHORT),
        DBG_STRING(WMI_CALLING_WMI_EXTENSION_FN),
        DBG_STRING(WMI_CMD_NOT_HANDLED),
        DBG_STRING(WMI_IN_SYNC),
        DBG_STRING(WMI_TARGET_WMI_SYNC_CMD),
        DBG_STRING(WMI_SET_SNR_THRESHOLD_PARAMS),
        DBG_STRING(WMI_SET_RSSI_THRESHOLD_PARAMS),
        DBG_STRING(WMI_SET_LQ_TRESHOLD_PARAMS),
        DBG_STRING(WMI_TARGET_CREATE_PSTREAM_CMD),
        DBG_STRING(WMI_WI_DTM_INUSE),
        DBG_STRING(WMI_TARGET_DELETE_PSTREAM_CMD),
        DBG_STRING(WMI_TARGET_IMPLICIT_DELETE_PSTREAM_CMD),
        DBG_STRING(WMI_TARGET_GET_BIT_RATE_CMD),
        DBG_STRING(WMI_GET_RATE_MASK_CMD_FIX_RATE_MASK_IS),
        DBG_STRING(WMI_TARGET_GET_AVAILABLE_CHANNELS_CMD),
        DBG_STRING(WMI_TARGET_GET_TX_PWR_CMD),
        DBG_STRING(WMI_FREE_EVBUF_WMIBUF),
        DBG_STRING(WMI_FREE_EVBUF_DATABUF),
        DBG_STRING(WMI_FREE_EVBUF_BADFLAG),
        DBG_STRING(WMI_HTC_RX_ERROR_DATA_PACKET),
        DBG_STRING(WMI_HTC_RX_SYNC_PAUSING_FOR_MBOX),
        DBG_STRING(WMI_INCORRECT_WMI_DATA_HDR_DROPPING_PKT),
        DBG_STRING(WMI_SENDING_READY_EVENT),
        DBG_STRING(WMI_SETPOWER_MDOE_TO_MAXPERF),
        DBG_STRING(WMI_SETPOWER_MDOE_TO_REC),
        DBG_STRING(WMI_BSSINFO_EVENT_FROM),
        DBG_STRING(WMI_TARGET_GET_STATS_CMD),
        DBG_STRING(WMI_SENDING_SCAN_COMPLETE_EVENT),
        DBG_STRING(WMI_SENDING_RSSI_INDB_THRESHOLD_EVENT),
        DBG_STRING(WMI_SENDING_RSSI_INDBM_THRESHOLD_EVENT),
        DBG_STRING(WMI_SENDING_LINK_QUALITY_THRESHOLD_EVENT),
        DBG_STRING(WMI_SENDING_ERROR_REPORT_EVENT),
        DBG_STRING(WMI_SENDING_CAC_EVENT),
        DBG_STRING(WMI_TARGET_GET_ROAM_TABLE_CMD),
        DBG_STRING(WMI_TARGET_GET_ROAM_DATA_CMD),
        DBG_STRING(WMI_SENDING_GPIO_INTR_EVENT),
        DBG_STRING(WMI_SENDING_GPIO_ACK_EVENT),
        DBG_STRING(WMI_SENDING_GPIO_DATA_EVENT),
        DBG_STRING(WMI_CMD_RX),
        DBG_STRING(WMI_CMD_RX_XTND),
        DBG_STRING(WMI_EVENT_SEND),
        DBG_STRING(WMI_EVENT_SEND_XTND),
        DBG_STRING(WMI_CMD_PARAMS_DUMP_START),
        DBG_STRING(WMI_CMD_PARAMS_DUMP_END),
        DBG_STRING(WMI_CMD_PARAMS),
        DBG_STRING(WMI_EVENT_ALLOC_FAILURE),
        DBG_STRING(WMI_DBGID_DCS_PARAM_CMD),
        DBG_STRING(WMI_SEND_EVENT_WRONG_TLV),
        DBG_STRING(WMI_SEND_EVENT_NO_TLV_DEF),
        DBG_STRING(WMI_RECV_CMD_WRONG_TLV),
        DBG_STRING(WMI_CHECK_TLV_PARAM_GET_NUM_TLVS_ERROR),
        DBG_STRING(WMI_CHECK_TLV_PARAM_TLV_LEN_EXCEEDED_BUF_LEN),
        DBG_STRING(WMI_CHECK_TLV_PARAM_NONEXISTING_TAG_ORDER),
        DBG_STRING(WMI_CHECK_TLV_PARAM_WRONG_TAG_ORDER),
        DBG_STRING(WMI_CHECK_TLV_PARAM_INVALID_TLV_DEF_ARRAY_SIZE),
        DBG_STRING(WMI_CHECK_TLV_PARAM_INVALID_TLV_DEF_VARIED_SIZE),
        DBG_STRING(WMI_CHECK_TLV_PARAM_WRONG_TLV_LENGTH),
        DBG_STRING(WMI_CHECK_TLV_PARAM_UNALIGNED_TLV_LEN),
        DBG_STRING(WMI_CHECK_TLV_PARAM_WRONG_INNER_TLV_LEN),
        DBG_STRING(WMI_CHECK_TLV_PARAM_UNSUPPORTED_ARRAY_TAG),
        DBG_STRING(WMI_CHECK_TLV_PARAM_EXCEEDED_MAX_TLVs),
        DBG_STRING(WMI_CHECK_TLV_PARAM_CMD_BUF_ALLOC_FAILED),
        DBG_STRING(WMI_CHECK_TLV_PARAM_TLV_INFO),
        DBG_STRING(WMI_DBGID_DEFINITION_END),
    },
    {
        DBG_STRING(PS_STA_DEFINITION_START),
        DBG_STRING(PS_STA_PM_ARB_REQUEST),
        DBG_STRING(PS_STA_DELIVER_EVENT),
        DBG_STRING(PS_STA_PSPOLL_SEQ_DONE),
        DBG_STRING(PS_STA_COEX_MODE),
        DBG_STRING(PS_STA_PSPOLL_ALLOW),
        DBG_STRING(PS_STA_SET_PARAM),
        DBG_STRING(PS_STA_SPECPOLL_TIMER_STARTED),
        DBG_STRING(PS_STA_SPECPOLL_TIMER_STOPPED),
        DBG_STRING(PS_STA_AVG_CHANNEL_CONGESTION),
        DBG_STRING(PS_STA_DEFINITION_END),
    },
    {
        DBG_STRING(WHAL_DBGID_DEFINITION_START),
        DBG_STRING(WHAL_ERROR_ANI_CONTROL),
        DBG_STRING(WHAL_ERROR_CHIP_TEST1),
        DBG_STRING(WHAL_ERROR_CHIP_TEST2),
        DBG_STRING(WHAL_ERROR_EEPROM_CHECKSUM),
        DBG_STRING(WHAL_ERROR_EEPROM_MACADDR),
        DBG_STRING(WHAL_ERROR_INTERRUPT_HIU),
        DBG_STRING(WHAL_ERROR_KEYCACHE_RESET),
        DBG_STRING(WHAL_ERROR_KEYCACHE_SET),
        DBG_STRING(WHAL_ERROR_KEYCACHE_TYPE),
        DBG_STRING(WHAL_ERROR_KEYCACHE_TKIPENTRY),
        DBG_STRING(WHAL_ERROR_KEYCACHE_WEPLENGTH),
        DBG_STRING(WHAL_ERROR_PHY_INVALID_CHANNEL),
        DBG_STRING(WHAL_ERROR_POWER_AWAKE),
        DBG_STRING(WHAL_ERROR_POWER_SET),
        DBG_STRING(WHAL_ERROR_RECV_STOPDMA),
        DBG_STRING(WHAL_ERROR_RECV_STOPPCU),
        DBG_STRING(WHAL_ERROR_RESET_CHANNF1),
        DBG_STRING(WHAL_ERROR_RESET_CHANNF2),
        DBG_STRING(WHAL_ERROR_RESET_PM),
        DBG_STRING(WHAL_ERROR_RESET_OFFSETCAL),
        DBG_STRING(WHAL_ERROR_RESET_RFGRANT),
        DBG_STRING(WHAL_ERROR_RESET_RXFRAME),
        DBG_STRING(WHAL_ERROR_RESET_STOPDMA),
        DBG_STRING(WHAL_ERROR_RESET_ERRID),
        DBG_STRING(WHAL_ERROR_RESET_ADCDCCAL1),
        DBG_STRING(WHAL_ERROR_RESET_ADCDCCAL2),
        DBG_STRING(WHAL_ERROR_RESET_TXIQCAL),
        DBG_STRING(WHAL_ERROR_RESET_RXIQCAL),
        DBG_STRING(WHAL_ERROR_RESET_CARRIERLEAK),
        DBG_STRING(WHAL_ERROR_XMIT_COMPUTE),
        DBG_STRING(WHAL_ERROR_XMIT_NOQUEUE),
        DBG_STRING(WHAL_ERROR_XMIT_ACTIVEQUEUE),
        DBG_STRING(WHAL_ERROR_XMIT_BADTYPE),
        DBG_STRING(WHAL_ERROR_XMIT_STOPDMA),
        DBG_STRING(WHAL_ERROR_INTERRUPT_BB_PANIC),
        DBG_STRING(WHAL_ERROR_PAPRD_MAXGAIN_ABOVE_WINDOW),
        DBG_STRING(WHAL_ERROR_QCU_HW_PAUSE_MISMATCH),
        DBG_STRING(WHAL_ERROR_POWER_RFLP_CONFIG),
        DBG_STRING(WHAL_ERROR_POWER_RFLP_SYNTHBYPASS_CONFIG),
        DBG_STRING(WHAL_ERROR_POWER_RFLP_BIAS2X_CONFIG),
        DBG_STRING(WHAL_ERROR_POWER_RFLP_PLLBYPASS_CONFIG),
        DBG_STRING(WHAL_ERROR_POWER_RFLP_OFF1CHAN_CONFIG),
        DBG_STRING(WHAL_ERROR_POWER_ANTENNA_LMIT),
        DBG_STRING(WHAL_ERROR_POWER_REGDMN_TX_LMIT),
        DBG_STRING(WHAL_ERROR_POWER_MODE_SCALED_PWR),
        DBG_STRING(WHAL_ERROR_POWER_EDGE_PWR_TPSCALE),
        DBG_STRING(WHAL_ERROR_POWER_CHAN_REGALLOW),
        DBG_STRING(WHAL_ERROR_WAIT_REG_TIMEOUT),
        DBG_STRING(WHAL_ERROR_XTAL_SET),
        DBG_STRING(WHAL_DBGID_DEFINITION_END),
    },
    {
        DBG_STRING(COEX_DEBUGID_START),
        DBG_STRING(BTCOEX_DBG_MCI_1),
        DBG_STRING(BTCOEX_DBG_MCI_2),
        DBG_STRING(BTCOEX_DBG_MCI_3),
        DBG_STRING(BTCOEX_DBG_MCI_4),
        DBG_STRING(BTCOEX_DBG_MCI_5),
        DBG_STRING(BTCOEX_DBG_MCI_6),
        DBG_STRING(BTCOEX_DBG_MCI_7),
        DBG_STRING(BTCOEX_DBG_MCI_8),
        DBG_STRING(BTCOEX_DBG_MCI_9),
        DBG_STRING(BTCOEX_DBG_MCI_10),
        DBG_STRING(COEX_WAL_BTCOEX_INIT),
        DBG_STRING(COEX_WAL_PAUSE),
        DBG_STRING(COEX_WAL_RESUME),
        DBG_STRING(COEX_UPDATE_AFH),
        DBG_STRING(COEX_HWQ_EMPTY_CB),
        DBG_STRING(COEX_MCI_TIMER_HANDLER),
        DBG_STRING(COEX_MCI_RECOVER),
        DBG_STRING(ERROR_COEX_MCI_ISR),
        DBG_STRING(ERROR_COEX_MCI_GPM),
        DBG_STRING(COEX_ProfileType),
        DBG_STRING(COEX_LinkID),
        DBG_STRING(COEX_LinkState),
        DBG_STRING(COEX_LinkRole),
        DBG_STRING(COEX_LinkRate),
        DBG_STRING(COEX_VoiceType),
        DBG_STRING(COEX_TInterval),
        DBG_STRING(COEX_WRetrx),
        DBG_STRING(COEX_Attempts),
        DBG_STRING(COEX_PerformanceState),
        DBG_STRING(COEX_LinkType),
        DBG_STRING(COEX_RX_MCI_GPM_VERSION_QUERY),
        DBG_STRING(COEX_RX_MCI_GPM_VERSION_RESPONSE),
        DBG_STRING(COEX_RX_MCI_GPM_STATUS_QUERY),
        DBG_STRING(COEX_STATE_WLAN_VDEV_DOWN),
        DBG_STRING(COEX_STATE_WLAN_VDEV_START),
        DBG_STRING(COEX_STATE_WLAN_VDEV_CONNECTED),
        DBG_STRING(COEX_STATE_WLAN_VDEV_SCAN_STARTED),
        DBG_STRING(COEX_STATE_WLAN_VDEV_SCAN_END),
        DBG_STRING(COEX_STATE_WLAN_DEFAULT),
        DBG_STRING(COEX_CHANNEL_CHANGE),
        DBG_STRING(COEX_POWER_CHANGE),
        DBG_STRING(COEX_CONFIG_MGR),
        DBG_STRING(COEX_TX_MCI_GPM_BT_CAL_REQ),
        DBG_STRING(COEX_TX_MCI_GPM_BT_CAL_GRANT),
        DBG_STRING(COEX_TX_MCI_GPM_BT_CAL_DONE),
        DBG_STRING(COEX_TX_MCI_GPM_WLAN_CAL_REQ),
        DBG_STRING(COEX_TX_MCI_GPM_WLAN_CAL_GRANT),
        DBG_STRING(COEX_TX_MCI_GPM_WLAN_CAL_DONE),
        DBG_STRING(COEX_TX_MCI_GPM_BT_DEBUG),
        DBG_STRING(COEX_TX_MCI_GPM_VERSION_QUERY),
        DBG_STRING(COEX_TX_MCI_GPM_VERSION_RESPONSE),
        DBG_STRING(COEX_TX_MCI_GPM_STATUS_QUERY),
        DBG_STRING(COEX_TX_MCI_GPM_HALT_BT_GPM),
        DBG_STRING(COEX_TX_MCI_GPM_WLAN_CHANNELS),
        DBG_STRING(COEX_TX_MCI_GPM_BT_PROFILE_INFO),
        DBG_STRING(COEX_TX_MCI_GPM_BT_STATUS_UPDATE),
        DBG_STRING(COEX_TX_MCI_GPM_BT_UPDATE_FLAGS),
        DBG_STRING(COEX_TX_MCI_GPM_UNKNOWN),
        DBG_STRING(COEX_TX_MCI_SYS_WAKING),
        DBG_STRING(COEX_TX_MCI_LNA_TAKE),
        DBG_STRING(COEX_TX_MCI_LNA_TRANS),
        DBG_STRING(COEX_TX_MCI_SYS_SLEEPING),
        DBG_STRING(COEX_TX_MCI_REQ_WAKE),
        DBG_STRING(COEX_TX_MCI_REMOTE_RESET),
        DBG_STRING(COEX_TX_MCI_TYPE_UNKNOWN),
        DBG_STRING(COEX_WHAL_MCI_RESET),
        DBG_STRING(COEX_POLL_BT_CAL_DONE_TIMEOUT),
        DBG_STRING(COEX_WHAL_PAUSE),
        DBG_STRING(COEX_RX_MCI_GPM_BT_CAL_REQ),
        DBG_STRING(COEX_RX_MCI_GPM_BT_CAL_DONE),
        DBG_STRING(COEX_RX_MCI_GPM_BT_CAL_GRANT),
        DBG_STRING(COEX_WLAN_CAL_START),
        DBG_STRING(COEX_WLAN_CAL_RESULT),
        DBG_STRING(COEX_BtMciState),
        DBG_STRING(COEX_BtCalState),
        DBG_STRING(COEX_WlanCalState),
        DBG_STRING(COEX_RxReqWakeCount),
        DBG_STRING(COEX_RxRemoteResetCount),
        DBG_STRING(COEX_RESTART_CAL),
        DBG_STRING(COEX_SENDMSG_QUEUE),
        DBG_STRING(COEX_RESETSEQ_LNAINFO_TIMEOUT),
        DBG_STRING(COEX_MCI_ISR_IntRaw),
        DBG_STRING(COEX_MCI_ISR_Int1Raw),
        DBG_STRING(COEX_MCI_ISR_RxMsgRaw),
        DBG_STRING(COEX_WHAL_COEX_RESET),
        DBG_STRING(COEX_WAL_COEX_INIT),
        DBG_STRING(COEX_TXRX_CNT_LIMIT_ISR),
        DBG_STRING(COEX_CH_BUSY),
        DBG_STRING(COEX_REASSESS_WLAN_STATE),
        DBG_STRING(COEX_BTCOEX_WLAN_STATE_UPDATE),
        DBG_STRING(COEX_BT_NUM_OF_PROFILES),
        DBG_STRING(COEX_BT_NUM_OF_HID_PROFILES),
        DBG_STRING(COEX_BT_NUM_OF_ACL_PROFILES),
        DBG_STRING(COEX_BT_NUM_OF_HI_ACL_PROFILES),
        DBG_STRING(COEX_BT_NUM_OF_VOICE_PROFILES),
        DBG_STRING(COEX_WLAN_AGGR_LIMIT),
        DBG_STRING(COEX_BT_LOW_PRIO_BUDGET),
        DBG_STRING(COEX_BT_HI_PRIO_BUDGET),
        DBG_STRING(COEX_BT_IDLE_TIME),
        DBG_STRING(COEX_SET_COEX_WEIGHT),
        DBG_STRING(COEX_WLAN_WEIGHT_GROUP),
        DBG_STRING(COEX_BT_WEIGHT_GROUP),
        DBG_STRING(COEX_BT_INTERVAL_ALLOC),
        DBG_STRING(COEX_BT_SCHEME),
        DBG_STRING(COEX_BT_MGR),
        DBG_STRING(COEX_BT_SM_ERROR),
        DBG_STRING(COEX_SYSTEM_UPDATE),
        DBG_STRING(COEX_LOW_PRIO_LIMIT),
        DBG_STRING(COEX_HI_PRIO_LIMIT),
        DBG_STRING(COEX_BT_INTERVAL_START),
        DBG_STRING(COEX_WLAN_INTERVAL_START),
        DBG_STRING(COEX_NON_LINK_BUDGET),
        DBG_STRING(COEX_CONTENTION_MSG),
        DBG_STRING(COEX_SET_NSS),
        DBG_STRING(COEX_SELF_GEN_MASK),
        DBG_STRING(COEX_PROFILE_ERROR),
        DBG_STRING(COEX_WLAN_INIT),
        DBG_STRING(COEX_BEACON_MISS),
        DBG_STRING(COEX_BEACON_OK),
        DBG_STRING(COEX_BTCOEX_SCAN_ACTIVITY),
        DBG_STRING(COEX_SCAN_ACTIVITY),
        DBG_STRING(COEX_FORCE_QUIETTIME),
        DBG_STRING(COEX_BT_MGR_QUIETTIME),
        DBG_STRING(COEX_BT_INACTIVITY_TRIGGER),
        DBG_STRING(COEX_BT_INACTIVITY_REPORTED),
        DBG_STRING(COEX_TX_MCI_GPM_WLAN_PRIO),
        DBG_STRING(COEX_TX_MCI_GPM_BT_PAUSE_PROFILE),
        DBG_STRING(COEX_TX_MCI_GPM_WLAN_SET_ACL_INACTIVITY),
        DBG_STRING(COEX_RX_MCI_GPM_BT_ACL_INACTIVITY_REPORT),
        DBG_STRING(COEX_GENERIC_ERROR),
        DBG_STRING(COEX_RX_RATE_THRESHOLD),
        DBG_STRING(COEX_RSSI),
        DBG_STRING(COEX_WLAN_VDEV_NOTIF_START), //                 133
        DBG_STRING(COEX_WLAN_VDEV_NOTIF_UP), //                    134
        DBG_STRING(COEX_WLAN_VDEV_NOTIF_DOWN),   //                135
        DBG_STRING(COEX_WLAN_VDEV_NOTIF_STOP),    //               136
        DBG_STRING(COEX_WLAN_VDEV_NOTIF_ADD_PEER),    //           137
        DBG_STRING(COEX_WLAN_VDEV_NOTIF_DELETE_PEER),  //          138
        DBG_STRING(COEX_WLAN_VDEV_NOTIF_CONNECTED_PEER),  //       139
        DBG_STRING(COEX_WLAN_VDEV_NOTIF_PAUSE),   //               140
        DBG_STRING(COEX_WLAN_VDEV_NOTIF_UNPAUSED),    //           141
        DBG_STRING(COEX_STATE_WLAN_VDEV_PEER_ADD),    //           142
        DBG_STRING(COEX_STATE_WLAN_VDEV_CONNECTED_PEER),    //     143
        DBG_STRING(COEX_STATE_WLAN_VDEV_DELETE_PEER),  //          144
        DBG_STRING(COEX_STATE_WLAN_VDEV_PAUSE),  //                145
        DBG_STRING(COEX_STATE_WLAN_VDEV_UNPAUSED),    //           146
        DBG_STRING(COEX_SCAN_CALLBACK),           //               147
        DBG_STRING(COEX_RC_SET_CHAINMASK),           //            148
        DBG_STRING(COEX_TX_MCI_GPM_WLAN_SET_BT_RXSS_THRES),  //    149
        DBG_STRING(COEX_TX_MCI_GPM_BT_RXSS_THRES_QUERY),     //    150
        DBG_STRING(COEX_BT_RXSS_THRES),           //               151
        DBG_STRING(COEX_BT_PROFILE_ADD_RMV),           //          152
        DBG_STRING(COEX_BT_SCHED_INFO),           //               153
        DBG_STRING(COEX_TRF_MGMT),           //                    154
        DBG_STRING(COEX_SCHED_START),           //                 155
        DBG_STRING(COEX_SCHED_RESULT),           //                156
        DBG_STRING(COEX_SCHED_ERROR),      //                      157
        DBG_STRING(COEX_SCHED_PRE_OP),      //                     158
        DBG_STRING(COEX_SCHED_POST_OP),      //                    159
        DBG_STRING(COEX_RX_RATE),      //                          160
        DBG_STRING(COEX_ACK_PRIORITY),      //                     161
        DBG_STRING(COEX_STATE_WLAN_VDEV_UP),      //               162
        DBG_STRING(COEX_STATE_WLAN_VDEV_PEER_UPDATE),      //      163
        DBG_STRING(COEX_STATE_WLAN_VDEV_STOP),      //             164
        DBG_STRING(COEX_WLAN_PAUSE_PEER),      //                  165
        DBG_STRING(COEX_WLAN_UNPAUSE_PEER),      //                166
        DBG_STRING(COEX_WLAN_PAUSE_INTERVAL_START),      //        167
        DBG_STRING(COEX_WLAN_POSTPAUSE_INTERVAL_START),      //    168
        DBG_STRING(COEX_TRF_FREERUN),      //                      169
        DBG_STRING(COEX_TRF_SHAPE_PM),      //                     170
        DBG_STRING(COEX_TRF_SHAPE_PSP),      //                    171
        DBG_STRING(COEX_TRF_SHAPE_S_CTS),      //                  172
        DBG_STRING(COEX_CHAIN_CONFIG),        //                   173
        DBG_STRING(COEX_SYSTEM_MONITOR),        //                 174
        DBG_STRING(COEX_SINGLECHAIN_INIT),        //               175
        DBG_STRING(COEX_MULTICHAIN_INIT),        //                176
        DBG_STRING(COEX_SINGLECHAIN_DBG_1),        //              177
        DBG_STRING(COEX_SINGLECHAIN_DBG_2),        //              178
        DBG_STRING(COEX_SINGLECHAIN_DBG_3),        //              179
        DBG_STRING(COEX_MULTICHAIN_DBG_1),        //               180
        DBG_STRING(COEX_MULTICHAIN_DBG_2),        //               181
        DBG_STRING(COEX_MULTICHAIN_DBG_3),        //               182
        DBG_STRING(COEX_PSP_TX_CB),       //                       183
        DBG_STRING(COEX_PSP_RX_CB),       //                       184
        DBG_STRING(COEX_PSP_STAT_1),      //                       185
        DBG_STRING(COEX_PSP_SPEC_POLL),   //                       186
        DBG_STRING(COEX_PSP_READY_STATE), //                       187
        DBG_STRING(COEX_PSP_TX_STATUS_STATE),     //               188
        DBG_STRING(COEX_PSP_RX_STATUS_STATE_1),   //               189
        DBG_STRING(COEX_PSP_NOT_READY_STATE),     //               190
        DBG_STRING(COEX_PSP_DISABLED_STATE),      //               191
        DBG_STRING(COEX_PSP_ENABLED_STATE),       //               192
        DBG_STRING(COEX_PSP_SEND_PSPOLL), //                       193
        DBG_STRING(COEX_PSP_MGR_ENTER),   //                       194
        DBG_STRING(COEX_PSP_MGR_RESULT),  //                       195
        DBG_STRING(COEX_PSP_NONWLAN_INTERVAL),    //               196
        DBG_STRING(COEX_PSP_STAT_2),      //                       197
        DBG_STRING(COEX_PSP_RX_STATUS_STATE_2),   //               198
        DBG_STRING(COEX_PSP_ERROR),       //                       199
        DBG_STRING(COEX_T2BT),    //                               200
        DBG_STRING(COEX_BT_DURATION), //                           201
        DBG_STRING(COEX_TX_MCI_GPM_WLAN_SCHED_INFO_TRIG), //       202
        DBG_STRING(COEX_TX_MCI_GPM_WLAN_SCHED_INFO_TRIG_RSP), //   203
        DBG_STRING(COEX_TX_MCI_GPM_SCAN_OP),  //                   204
        DBG_STRING(COEX_TX_MCI_GPM_BT_PAUSE_GPM_TX),	//       205
        DBG_STRING(COEX_CTS2S_SEND),	//                       206
        DBG_STRING(COEX_CTS2S_RESULT),	//                       207
        DBG_STRING(COEX_ENTER_OCS),	//                       208
        DBG_STRING(COEX_EXIT_OCS),	//                       209
        DBG_STRING(COEX_UPDATE_OCS),	//                       210
        DBG_STRING(COEX_STATUS_OCS),	//                       211
        DBG_STRING(COEX_STATS_BT),	//                       212
        DBG_STRING(COEX_MWS_WLAN_INIT),
        DBG_STRING(COEX_MWS_WBTMR_SYNC),
        DBG_STRING(COEX_MWS_TYPE2_RX),
        DBG_STRING(COEX_MWS_TYPE2_TX),
        DBG_STRING(COEX_MWS_WLAN_CHAVD),
        DBG_STRING(COEX_MWS_WLAN_CHAVD_INSERT),
        DBG_STRING(COEX_MWS_WLAN_CHAVD_MERGE),
        DBG_STRING(COEX_MWS_WLAN_CHAVD_RPT),
        DBG_STRING(COEX_MWS_CP_MSG_SEND),
        DBG_STRING(COEX_MWS_CP_ESCAPE),
        DBG_STRING(COEX_MWS_CP_UNFRAME),
        DBG_STRING(COEX_MWS_CP_SYNC_UPDATE),
        DBG_STRING(COEX_MWS_CP_SYNC),
        DBG_STRING(COEX_MWS_CP_WLAN_STATE_IND),
        DBG_STRING(COEX_MWS_CP_SYNCRESP_TIMEOUT),
        DBG_STRING(COEX_MWS_SCHEME_UPDATE),
        DBG_STRING(COEX_MWS_WLAN_EVENT),
        DBG_STRING(COEX_MWS_UART_UNESCAPE),
        DBG_STRING(COEX_MWS_UART_ENCODE_SEND),
        DBG_STRING(COEX_MWS_UART_RECV_DECODE),
        DBG_STRING(COEX_MWS_UL_HDL),
        DBG_STRING(COEX_MWS_REMOTE_EVENT),
        DBG_STRING(COEX_MWS_OTHER),
        DBG_STRING(COEX_MWS_ERROR),
        DBG_STRING(COEX_MWS_ANT_DIVERSITY),   //237
        DBG_STRING(COEX_P2P_GO),
        DBG_STRING(COEX_P2P_CLIENT),
        DBG_STRING(COEX_SCC_1),
        DBG_STRING(COEX_SCC_2),
        DBG_STRING(COEX_MCC_1),
        DBG_STRING(COEX_MCC_2),
        DBG_STRING(COEX_TRF_SHAPE_NOA),
        DBG_STRING(COEX_NOA_ONESHOT),
        DBG_STRING(COEX_NOA_PERIODIC),
        DBG_STRING(COEX_LE_1),
        DBG_STRING(COEX_LE_2),
        DBG_STRING(COEX_ANT_1),
        DBG_STRING(COEX_ANT_2),
        DBG_STRING(COEX_ENTER_NOA),
        DBG_STRING(COEX_EXIT_NOA),
        DBG_STRING(COEX_BT_SCAN_PROTECT), // 253
        DBG_STRING(COEX_DEBUG_ID_END) // 254
    },
    {
        DBG_STRING(ROAM_DBGID_DEFINITION_START),
        DBG_STRING(ROAM_MODULE_INIT),
        DBG_STRING(ROAM_DEV_START),
        DBG_STRING(ROAM_CONFIG_RSSI_THRESH),
        DBG_STRING(ROAM_CONFIG_SCAN_PERIOD),
        DBG_STRING(ROAM_CONFIG_AP_PROFILE),
        DBG_STRING(ROAM_CONFIG_CHAN_LIST),
        DBG_STRING(ROAM_CONFIG_SCAN_PARAMS),
        DBG_STRING(ROAM_CONFIG_RSSI_CHANGE),
        DBG_STRING(ROAM_SCAN_TIMER_START),
        DBG_STRING(ROAM_SCAN_TIMER_EXPIRE),
        DBG_STRING(ROAM_SCAN_TIMER_STOP),
        DBG_STRING(ROAM_SCAN_STARTED),
        DBG_STRING(ROAM_SCAN_COMPLETE),
        DBG_STRING(ROAM_SCAN_CANCELLED),
        DBG_STRING(ROAM_CANDIDATE_FOUND),
        DBG_STRING(ROAM_RSSI_ACTIVE_SCAN),
        DBG_STRING(ROAM_RSSI_ACTIVE_ROAM),
        DBG_STRING(ROAM_RSSI_GOOD),
        DBG_STRING(ROAM_BMISS_FIRST_RECV),
        DBG_STRING(ROAM_DEV_STOP),
        DBG_STRING(ROAM_FW_OFFLOAD_ENABLE),
        DBG_STRING(ROAM_CANDIDATE_SSID_MATCH),
        DBG_STRING(ROAM_CANDIDATE_SECURITY_MATCH),
        DBG_STRING(ROAM_LOW_RSSI_INTERRUPT),
        DBG_STRING(ROAM_HIGH_RSSI_INTERRUPT),
        DBG_STRING(ROAM_SCAN_REQUESTED),
        DBG_STRING(ROAM_BETTER_CANDIDATE_FOUND),
        DBG_STRING(ROAM_BETTER_AP_EVENT),
        DBG_STRING(ROAM_CANCEL_LOW_PRIO_SCAN),
        DBG_STRING(ROAM_FINAL_BMISS_RECVD),
        DBG_STRING(ROAM_CONFIG_SCAN_MODE),
        DBG_STRING(ROAM_BMISS_FINAL_SCAN_ENABLE),
        DBG_STRING(ROAM_SUITABLE_AP_EVENT),
        DBG_STRING(ROAM_RSN_IE_PARSE_ERROR),
        DBG_STRING(ROAM_WPA_IE_PARSE_ERROR),
        DBG_STRING(ROAM_SCAN_CMD_FROM_HOST),
        DBG_STRING(ROAM_HO_SORT_CANDIDATE),
        DBG_STRING(ROAM_HO_SAVE_CANDIDATE),
        DBG_STRING(ROAM_HO_GET_CANDIDATE),
        DBG_STRING(ROAM_HO_OFFLOAD_SET_PARAM),
        DBG_STRING(ROAM_HO_SM),
        DBG_STRING(ROAM_HO_HTT_SAVED),
        DBG_STRING(ROAM_HO_SYNC_START),
        DBG_STRING(ROAM_HO_START),
        DBG_STRING(ROAM_HO_SYNC_COMPLETE),
        DBG_STRING(ROAM_HO_STOP),
        DBG_STRING(ROAM_HO_HTT_FORWARD),
        DBG_STRING(ROAM_CONFIG_SCAN_PARAMS_1),
        DBG_STRING(ROAM_SCAN_COMPLETE_1),
        DBG_STRING(ROAM_SWBMISS_BCN_RECV_VAL),
        DBG_STRING(ROAM_SWBMISS_BCN_RECV_THRE2),
        DBG_STRING(ROAM_SCAN_REQUESTED_1),
        DBG_STRING(ROAM_HO_SORT_CANDIDATE_CUR),
        DBG_STRING(ROAM_HO_SAVE_CANDIDATE_DUP),
        DBG_STRING(ROAM_HO_SM_EVENT),
        DBG_STRING(ROAM_HO_ENTER_CH),
        DBG_STRING(ROAM_HO_MGMT_RX),
        DBG_STRING(ROAM_HO_CANDIDATE_INFO),
        DBG_STRING(ROAM_HO_OFFLD_DATA_STORE),
        DBG_STRING(ROAM_HO_HTT_DATA_STORE),
        DBG_STRING(ROAM_HO_UPDATE_STATUS),
        DBG_STRING(ROAM_HO_OCS_CH_CB),
        DBG_STRING(ROAM_RSSI_INTERRUPT_STATE),
        DBG_STRING(ROAM_INVOKE_PARAM_CHECK),
        DBG_STRING(ROAM_INVOKE_PARAM_CHAN),
        DBG_STRING(ROAM_INVOKE_PARAM_BSSID),
        DBG_STRING(ROAM_INVOKE_STATE_CHECK),
        DBG_STRING(ROAM_INVOKE_START_SUCCESS),
        DBG_STRING(ROAM_INVOKE_START_FAILURE),
        DBG_STRING(ROAM_INVOKE_BSSID_CHECK),
        DBG_STRING(ROAM_CANDIDATE_INFO),
        DBG_STRING(ROAM_CANDIDATE_FILTER_MATCH),
        DBG_STRING(ROAM_CANDIDATE_RSSI_ADJUST),
        DBG_STRING(ROAM_CONFIG_ROAM_FILTER),
        DBG_STRING(ROAM_EXTENDED_RSSI_TRESHOLD_1),
        DBG_STRING(ROAM_EXTENDED_RSSI_TRESHOLD_2),
        DBG_STRING(ROAM_BLACKLIST_BSSID),
        DBG_STRING(ROAM_WHITELIST_SSID),
        DBG_STRING(ROAM_WHITELIST_SSID_2),
        DBG_STRING(ROAM_PREFERRED_BSSID),
        DBG_STRING(ROAM_PREFERRED_FACTOR),
        DBG_STRING(ROAM_SCAN_HIRSSI_THRESHOLD),
        DBG_STRING(ROAM_SCAN_HIRSSI_CHECK),
        DBG_STRING(ROAM_SCAN_HIRSSI_TIMER_EXPIRED),
        DBG_STRING(ROAM_SCAN_EXTSCAN_CHECK),
        DBG_STRING(ROAM_DBGID_DEFINITION_END)
    },
    {
        DBG_STRING(RESMGR_CHMGR_DEFINITION_START),
        DBG_STRING(RESMGR_CHMGR_PAUSE_COMPLETE),
        DBG_STRING(RESMGR_CHMGR_CHANNEL_CHANGE),
        DBG_STRING(RESMGR_CHMGR_RESUME_COMPLETE),
        DBG_STRING(RESMGR_CHMGR_VDEV_PAUSE),
        DBG_STRING(RESMGR_CHMGR_VDEV_UNPAUSE),
        DBG_STRING(RESMGR_CHMGR_CTS2S_TX_COMP),
        DBG_STRING(RESMGR_CHMGR_CFEND_TX_COMP),
        DBG_STRING(RESMGR_CHMGR_DEFINITION_END)
    },
    {
        DBG_STRING(RESMGR_DEFINITION_START),
        DBG_STRING(RESMGR_OCS_ALLOCRAM_SIZE),
        DBG_STRING(RESMGR_OCS_RESOURCES),
        DBG_STRING(RESMGR_LINK_CREATE),
        DBG_STRING(RESMGR_LINK_DELETE),
        DBG_STRING(RESMGR_OCS_CHREQ_CREATE),
        DBG_STRING(RESMGR_OCS_CHREQ_DELETE),
        DBG_STRING(RESMGR_OCS_CHREQ_START),
        DBG_STRING(RESMGR_OCS_CHREQ_STOP),
        DBG_STRING(RESMGR_OCS_SCHEDULER_INVOKED),
        DBG_STRING(RESMGR_OCS_CHREQ_GRANT),
        DBG_STRING(RESMGR_OCS_CHREQ_COMPLETE),
        DBG_STRING(RESMGR_OCS_NEXT_TSFTIME),
        DBG_STRING(RESMGR_OCS_TSF_TIMEOUT_US),
        DBG_STRING(RESMGR_OCS_CURR_CAT_WINDOW),
        DBG_STRING(RESMGR_OCS_CURR_CAT_WINDOW_REQ),
        DBG_STRING(RESMGR_OCS_CURR_CAT_WINDOW_TIMESLOT),
        DBG_STRING(RESMGR_OCS_CHREQ_RESTART),
        DBG_STRING(RESMGR_OCS_CLEANUP_CH_ALLOCATORS),
        DBG_STRING(RESMGR_OCS_PURGE_CHREQ),
        DBG_STRING(RESMGR_OCS_CH_ALLOCATOR_FREE),
        DBG_STRING(RESMGR_OCS_RECOMPUTE_SCHEDULE),
        DBG_STRING(RESMGR_OCS_NEW_CAT_WINDOW_REQ),
        DBG_STRING(RESMGR_OCS_NEW_CAT_WINDOW_TIMESLOT),
        DBG_STRING(RESMGR_OCS_CUR_CH_ALLOC),
        DBG_STRING(RESMGR_OCS_WIN_CH_ALLOC),
        DBG_STRING(RESMGR_OCS_SCHED_CH_CHANGE),
        DBG_STRING(RESMGR_OCS_CONSTRUCT_CAT_WIN),
        DBG_STRING(RESMGR_OCS_CHREQ_PREEMPTED),
        DBG_STRING(RESMGR_OCS_CH_SWITCH_REQ),
        DBG_STRING(RESMGR_OCS_CHANNEL_SWITCHED),
        DBG_STRING(RESMGR_OCS_CLEANUP_STALE_REQS),
        DBG_STRING(RESMGR_OCS_CHREQ_UPDATE),
        DBG_STRING(RESMGR_OCS_REG_NOA_NOTIF),
        DBG_STRING(RESMGR_OCS_DEREG_NOA_NOTIF),
        DBG_STRING(RESMGR_OCS_GEN_PERIODIC_NOA),
        DBG_STRING(RESMGR_OCS_RECAL_QUOTAS),
        DBG_STRING(RESMGR_OCS_GRANTED_QUOTA_STATS),
        DBG_STRING(RESMGR_OCS_ALLOCATED_QUOTA_STATS),
        DBG_STRING(RESMGR_OCS_REQ_QUOTA_STATS),
        DBG_STRING(RESMGR_OCS_TRACKING_TIME_FIRED),
        DBG_STRING(RESMGR_VC_ARBITRATE_ATTRIBUTES),
        DBG_STRING(RESMGR_OCS_LATENCY_STRICT_TIME_SLOT),
        DBG_STRING(RESMGR_OCS_CURR_TSF),
        DBG_STRING(RESMGR_OCS_QUOTA_REM),
        DBG_STRING(RESMGR_OCS_LATENCY_CASE_NO),
        DBG_STRING(RESMGR_OCS_WIN_CAT_DUR),
        DBG_STRING(RESMGR_VC_UPDATE_CUR_VC),
        DBG_STRING(RESMGR_VC_REG_UNREG_LINK),
        DBG_STRING(RESMGR_VC_PRINT_LINK),
        DBG_STRING(RESMGR_OCS_MISS_TOLERANCE),
        DBG_STRING(RESMGR_DYN_SCH_ALLOCRAM_SIZE),
        DBG_STRING(RESMGR_DYN_SCH_ENABLE),
        DBG_STRING(RESMGR_DYN_SCH_ACTIVE),
        DBG_STRING(RESMGR_DYN_SCH_CH_STATS_START),
        DBG_STRING(RESMGR_DYN_SCH_CH_SX_STATS),
        DBG_STRING(RESMGR_DYN_SCH_TOT_UTIL_PER),
        DBG_STRING(RESMGR_DYN_SCH_HOME_CH_QUOTA),
        DBG_STRING(RESMGR_OCS_REG_RECAL_QUOTA_NOTIF),
        DBG_STRING(RESMGR_OCS_DEREG_RECAL_QUOTA_NOTIF),
        DBG_STRING(RESMGR_DYN_SCH_CH_STATS_END),
        DBG_STRING(RESMGR_DEFINITION_END)
    },
    {
        DBG_STRING(VDEV_MGR_DEFINITION_START), /* vdev Mgr */
        DBG_STRING(VDEV_MGR_FIRST_BMISS_DETECTED),
        DBG_STRING(VDEV_MGR_FINAL_BMISS_DETECTED),
        DBG_STRING(VDEV_MGR_BCN_IN_SYNC),
        DBG_STRING(VDEV_MGR_AP_KEEPALIVE_IDLE),
        DBG_STRING(VDEV_MGR_AP_KEEPALIVE_INACTIVE),
        DBG_STRING(VDEV_MGR_AP_KEEPALIVE_UNRESPONSIVE),
        DBG_STRING(VDEV_MGR_AP_TBTT_CONFIG),
        DBG_STRING(VDEV_MGR_FIRST_BCN_RECEIVED),
        DBG_STRING(VDEV_MGR_VDEV_START),
        DBG_STRING(VDEV_MGR_VDEV_UP),
        DBG_STRING(VDEV_MGR_PEER_AUTHORIZED),
        DBG_STRING(VDEV_MGR_OCS_HP_LP_REQ_POSTED),
        DBG_STRING(VDEV_MGR_VDEV_START_OCS_HP_REQ_COMPLETE),
        DBG_STRING(VDEV_MGR_VDEV_START_OCS_HP_REQ_STOP),
        DBG_STRING(VDEV_MGR_HP_START_TIME),
        DBG_STRING(VDEV_MGR_VDEV_PAUSE_DELAY_UPDATE),
        DBG_STRING(VDEV_MGR_VDEV_PAUSE_FAIL),
        DBG_STRING(VDEV_MGR_GEN_PERIODIC_NOA),
        DBG_STRING(VDEV_MGR_OFF_CHAN_GO_CH_REQ_SETUP),
        DBG_STRING(VDEV_MGR_DEFINITION_END),
    },
    {
        DBG_STRING(SCAN_START_COMMAND_FAILED), /* scan */
        DBG_STRING(SCAN_STOP_COMMAND_FAILED),
        DBG_STRING(SCAN_EVENT_SEND_FAILED),
        DBG_STRING(SCAN_ENGINE_START),
        DBG_STRING(SCAN_ENGINE_CANCEL_COMMAND),
        DBG_STRING(SCAN_ENGINE_STOP_DUE_TO_TIMEOUT),
        DBG_STRING(SCAN_EVENT_SEND_TO_HOST),
        DBG_STRING(SCAN_FWLOG_EVENT_ADD),
        DBG_STRING(SCAN_FWLOG_EVENT_REM),
        DBG_STRING(SCAN_FWLOG_EVENT_PREEMPTED),
        DBG_STRING(SCAN_FWLOG_EVENT_RESTARTED),
        DBG_STRING(SCAN_FWLOG_EVENT_COMPLETED),
        DBG_STRING(SCAN_SM_REQ_NEXT_CH),
        DBG_STRING(SCAN_ENG_START),
        DBG_STRING(SCAN_ENG_CANCEL),
        DBG_STRING(SCAN_ENG_SPOOFED_MAC_ADDR),
        DBG_STRING(SCAN_ENG_PARAM_1),
        DBG_STRING(SCAN_ENG_PARAM_2),
        DBG_STRING(SCAN_ENG_MAX_SCAN_TIMEOUT),
        DBG_STRING(SCAN_ENG_START_IN_PROGRESS),
        DBG_STRING(SCAN_SM_START_COMMAND_FAILED),
        DBG_STRING(SCAN_SCH_START),
        DBG_STRING(SCAN_SCH_START_INFO),
        DBG_STRING(SCAN_SCH_START_NEW_REQ_FAILED),
        DBG_STRING(SCAN_SCH_START_ALLOC_FAIL),
        DBG_STRING(SCAN_SCH_ENGINE_STOP_DUE_TO_TIMEOUT),
        DBG_STRING(SCAN_SCH_POLICY_EVENT),
        DBG_STRING(SCAN_SCH_CANCEL),
        DBG_STRING(SCAN_SCH_STOP_COMMAND_FAILED),
        DBG_STRING(SCAN_SCH_NEXT_SCAN_FAILED),
        DBG_STRING(SCAN_WMI_SET_CHAN_LIST),
        DBG_STRING(SCAN_EVENT_STARTED),
        DBG_STRING(SCAN_EVENT_BSS_CHANNEL),
        DBG_STRING(SCAN_EVENT_FOREIGN_CHANNEL),
        DBG_STRING(SCAN_EVENT_DEQUEUED),
        DBG_STRING(SCAN_EVENT_START_FAILED),
        DBG_STRING(SCAN_EVENT_FOREIGN_CHANNEL_EXIT),
        DBG_STRING(SCAN_SM_DISPATCH),
        DBG_STRING(SCAN_SM_TRANSITIONS),
        DBG_STRING(SCAN_SM_REQ_NEXT_CHAN),
        DBG_STRING(SCAN_SEND_PROBE_REQ_RET_VDEV),
        DBG_STRING(SCAN_SEND_PROBE_REQ_RET_PLM),
        DBG_STRING(SCAN_SEND_PROBE_REQ_RET_PASSIVE),
        DBG_STRING(SCAN_SEND_PROBE_REQ_RET_RADAR),
        DBG_STRING(SCAN_SEND_PROBE_REQ_RET_DFS),
        DBG_STRING(SCAN_SEND_PROBE_REQ_INFO),
        DBG_STRING(SCAN_SM_CANCEL),
        DBG_STRING(SCAN_SM_PROBE_REQ_FRAME_SEND_FAILED),
        DBG_STRING(SCAN_SCH_BANNED_MODULE),
        DBG_STRING(SCAN_SM_STATS_INFO),
        DBG_STRING(SCAN_DBGID_DEFINITION_END),
    },
    {
        DBG_STRING(RATECTRL_DBGID_DEFINITION_START), /* Rate ctrl*/
        DBG_STRING(RATECTRL_DBGID_ASSOC),
        DBG_STRING(RATECTRL_DBGID_NSS_CHANGE),
        DBG_STRING(RATECTRL_DBGID_CHAINMASK_ERR),
        DBG_STRING(RATECTRL_DBGID_UNEXPECTED_FRAME),
        DBG_STRING(RATECTRL_DBGID_WAL_RCQUERY),
        DBG_STRING(RATECTRL_DBGID_WAL_RCUPDATE),
        DBG_STRING(RATECTRL_DBGID_GTX_UPDATE),
        DBG_STRING(RATECTRL_DBGID_DEFINITION_END)
    },
    {
        DBG_STRING(AP_PS_DBGID_DEFINITION_START),
        DBG_STRING(AP_PS_DBGID_UPDATE_TIM),
        DBG_STRING(AP_PS_DBGID_PEER_STATE_CHANGE),
        DBG_STRING(AP_PS_DBGID_PSPOLL),
        DBG_STRING(AP_PS_DBGID_PEER_CREATE),
        DBG_STRING(AP_PS_DBGID_PEER_DELETE),
        DBG_STRING(AP_PS_DBGID_VDEV_CREATE),
        DBG_STRING(AP_PS_DBGID_VDEV_DELETE),
        DBG_STRING(AP_PS_DBGID_SYNC_TIM),
        DBG_STRING(AP_PS_DBGID_NEXT_RESPONSE),
        DBG_STRING(AP_PS_DBGID_START_SP),
        DBG_STRING(AP_PS_DBGID_COMPLETED_EOSP),
        DBG_STRING(AP_PS_DBGID_TRIGGER),
        DBG_STRING(AP_PS_DBGID_DUPLICATE_TRIGGER),
        DBG_STRING(AP_PS_DBGID_UAPSD_RESPONSE),
        DBG_STRING(AP_PS_DBGID_SEND_COMPLETE),
        DBG_STRING(AP_PS_DBGID_SEND_N_COMPLETE),
        DBG_STRING(AP_PS_DBGID_DETECT_OUT_OF_SYNC_STA),
        DBG_STRING(AP_PS_DBGID_DELIVER_CAB),
        DBG_STRING(AP_PS_DBGID_NO_CLIENT),
        DBG_STRING(AP_PS_DBGID_CLIENT_IN_PS_ACTIVE),
        DBG_STRING(AP_PS_DBGID_CLIENT_IN_PS_NON_ACTIVE),
        DBG_STRING(AP_PS_DBGID_CLIENT_IN_AWAKE),
        DBG_STRING(AP_PS_DBGID_EGAP_SET_PARAM),
        DBG_STRING(AP_PS_DBGID_EGAP_VDEV_START),
        DBG_STRING(AP_PS_DBGID_EGAP_VDEV_STOP),
        DBG_STRING(AP_PS_DBGID_EGAP_CONN_PEER),
        DBG_STRING(AP_PS_DBGID_EGAP_DELETE_PEER),
        DBG_STRING(AP_PS_DBGID_EGAP_WAL_PEER_EVENT),
        DBG_STRING(AP_PS_DBGID_EGAP_WAL_PDEV_EVENT),
        DBG_STRING(AP_PS_DBGID_EGAP_NOTIF_STA_SLEEPING),
        DBG_STRING(AP_PS_DBGID_EGAP_PROC_STA_SLEEPING),
        DBG_STRING(AP_PS_DBGID_EGAP_PROC_STA_INACTIVITY),
        DBG_STRING(AP_PS_DBGID_EGAP_CHANGE_CHAINMASK),
        DBG_STRING(AP_PS_DBGID_EGAP_CHANGE_SM_STATE),
    },
    {
        "" /* Block Ack */
    },
    /* Mgmt TxRx */
    {
        DBG_STRING(MGMT_TXRX_DBGID_DEFINITION_START),
        DBG_STRING(MGMT_TXRX_FORWARD_TO_HOST),
        DBG_STRING(MGMT_TXRX_MGMT_FRAME_BUFFER_FULL),
        DBG_STRING(MGMT_TXRX_VDEV_USED_TO_SEND_FRAME_IS_FREE),
        DBG_STRING(MGMT_TXRX_LOCAL_FRAME_SEND_FAILED),
        DBG_STRING(MGMT_TXRX_DBGID_DEFINITION_END),
    },
    { /* Data TxRx */
        DBG_STRING(DATA_TXRX_DBGID_DEFINITION_START),
        DBG_STRING(DATA_TXRX_DBGID_RX_DATA_SEQ_LEN_INFO),
        DBG_STRING(DATA_TXRX_DBGID_REPLAY_CHECK),
        DBG_STRING(DATA_TXRX_DBGID_DUP_CHECK),
        DBG_STRING(DATA_TXRX_INVALID_PEER_AST_STA),
        DBG_STRING(DATA_TXRX_INVALID_PEER_AST_P2P),
        DBG_STRING(DATA_TXRX_INVALID_ADDR1_STA),
        DBG_STRING(DATA_TXRX_INVALID_ADDR1_P2P),
        DBG_STRING(DATA_TXRX_MULTICAST_BROADCAST_FRAME),
        DBG_STRING(DATA_TXRX_INVALID_FRAME_CTRL_OR_ADDR),
        DBG_STRING(DATA_TXRX_DBGID_DEFINITION_END),
    },
    { /* HTT */
        DBG_STRING(HTT_DBGID_DEFINITION_START),
        DBG_STRING(HTT_DBGID_INVALID_VDEVID_OR_GROUP),
        DBG_STRING(HTT_DBGID_DISCARD_INTERNAL_PKTS),
        DBG_STRING(HTT_DBGID_DISCARD_TX_PKTS),
        DBG_STRING(HTT_DBGID_GROUP_CHANGE),
        DBG_STRING(HTT_DBGID_GROUP_CREDIT_STATS),
        DBG_STRING(HTT_DBGID_DISCARD_INTERNAL_PKTS_NUM),
        DBG_STRING(HTT_DBGID_DEFINITION_END),
    },
    { /* HOST */
    },
    { /* BEACON */
        DBG_STRING(BEACON_EVENT_SWBA_SEND_FAILED),
        DBG_STRING(BEACON_EVENT_EARLY_RX_BMISS_STATUS),
        DBG_STRING(BEACON_EVENT_EARLY_RX_SLEEP_SLOP),
        DBG_STRING(BEACON_EVENT_EARLY_RX_CONT_BMISS_TIMEOUT),
        DBG_STRING(BEACON_EVENT_EARLY_RX_PAUSE_SKIP_BCN_NUM),
        DBG_STRING(BEACON_EVENT_EARLY_RX_CLK_DRIFT),
        DBG_STRING(BEACON_EVENT_EARLY_RX_AP_DRIFT),
        DBG_STRING(BEACON_EVENT_EARLY_RX_BCN_TYPE),
    },
    { /* Offload Mgr */
        DBG_STRING(OFFLOAD_MGR_DBGID_DEFINITION_START),
        DBG_STRING(OFFLOADMGR_REGISTER_OFFLOAD),
        DBG_STRING(OFFLOADMGR_DEREGISTER_OFFLOAD),
        DBG_STRING(OFFLOADMGR_NO_REG_DATA_HANDLERS),
        DBG_STRING(OFFLOADMGR_NO_REG_EVENT_HANDLERS),
        DBG_STRING(OFFLOADMGR_REG_OFFLOAD_FAILED),
        DBG_STRING(OFFLOADMGR_DEREG_OFFLOAD_FAILED),
        DBG_STRING(OFFLOADMGR_ENTER_FAILED),
        DBG_STRING(OFFLOADMGR_EXIT_FAILED),
        DBG_STRING(OFFLOADMGR_GTK_FAILED),
        DBG_STRING(OFFLOADMGR_GTK_REKEY_FAILED),
        DBG_STRING(OFFLOADMGR_DBGID_DEFINITION_END),
    },
    {
        DBG_STRING(WAL_DBGID_DEFINITION_START),
        DBG_STRING(WAL_DBGID_FAST_WAKE_REQUEST),
        DBG_STRING(WAL_DBGID_FAST_WAKE_RELEASE),
        DBG_STRING(WAL_DBGID_SET_POWER_STATE),
        DBG_STRING(WAL_DBGID_CHANNEL_CHANGE_FORCE_RESET),
        DBG_STRING(WAL_DBGID_CHANNEL_CHANGE),
        DBG_STRING(WAL_DBGID_VDEV_START),
        DBG_STRING(WAL_DBGID_VDEV_STOP),
        DBG_STRING(WAL_DBGID_VDEV_UP),
        DBG_STRING(WAL_DBGID_VDEV_DOWN),
        DBG_STRING(WAL_DBGID_SW_WDOG_RESET),
        DBG_STRING(WAL_DBGID_TX_SCH_REGISTER_TIDQ),
        DBG_STRING(WAL_DBGID_TX_SCH_UNREGISTER_TIDQ),
        DBG_STRING(WAL_DBGID_TX_SCH_TICKLE_TIDQ),
        DBG_STRING(WAL_DBGID_XCESS_FAILURES),
        DBG_STRING(WAL_DBGID_AST_ADD_WDS_ENTRY),
        DBG_STRING(WAL_DBGID_AST_DEL_WDS_ENTRY),
        DBG_STRING(WAL_DBGID_AST_WDS_ENTRY_PEER_CHG),
        DBG_STRING(WAL_DBGID_AST_WDS_SRC_LEARN_FAIL),
        DBG_STRING(WAL_DBGID_STA_KICKOUT),
        DBG_STRING(WAL_DBGID_BAR_TX_FAIL),
        DBG_STRING(WAL_DBGID_BAR_ALLOC_FAIL),
        DBG_STRING(WAL_DBGID_LOCAL_DATA_TX_FAIL),
        DBG_STRING(WAL_DBGID_SECURITY_PM4_QUEUED),
        DBG_STRING(WAL_DBGID_SECURITY_GM1_QUEUED),
        DBG_STRING(WAL_DBGID_SECURITY_PM4_SENT),
        DBG_STRING(WAL_DBGID_SECURITY_ALLOW_DATA),
        DBG_STRING(WAL_DBGID_SECURITY_UCAST_KEY_SET),
        DBG_STRING(WAL_DBGID_SECURITY_MCAST_KEY_SET),
        DBG_STRING(WAL_DBGID_SECURITY_ENCR_EN),
        DBG_STRING(WAL_DBGID_BB_WDOG_TRIGGERED),
        DBG_STRING(WAL_DBGID_RX_LOCAL_BUFS_LWM),
        DBG_STRING(WAL_DBGID_RX_LOCAL_DROP_LARGE_MGMT),
        DBG_STRING(WAL_DBGID_VHT_ILLEGAL_RATE_PHY_ERR_DETECTED),
        DBG_STRING(WAL_DBGID_DEV_RESET),
        DBG_STRING(WAL_DBGID_TX_BA_SETUP),
        DBG_STRING(WAL_DBGID_RX_BA_SETUP),
        DBG_STRING(WAL_DBGID_DEV_TX_TIMEOUT),
        DBG_STRING(WAL_DBGID_DEV_RX_TIMEOUT),
        DBG_STRING(WAL_DBGID_STA_VDEV_XRETRY),
        DBG_STRING(WAL_DBGID_DCS),
        DBG_STRING(WAL_DBGID_MGMT_TX_FAIL),
        DBG_STRING(WAL_DBGID_SET_M4_SENT_MANUALLY),
        DBG_STRING(WAL_DBGID_PROCESS_4_WAY_HANDSHAKE),
        DBG_STRING(WAL_DBGID_WAL_CHANNEL_CHANGE_START),
        DBG_STRING(WAL_DBGID_WAL_CHANNEL_CHANGE_COMPLETE),
        DBG_STRING(WAL_DBGID_WHAL_CHANNEL_CHANGE_START),
        DBG_STRING(WAL_DBGID_WHAL_CHANNEL_CHANGE_COMPLETE),
        DBG_STRING(WAL_DBGID_TX_MGMT_DESCID_SEQ_TYPE_LEN),
        DBG_STRING(WAL_DBGID_TX_DATA_MSDUID_SEQ_TYPE_LEN),
        DBG_STRING(WAL_DBGID_TX_DISCARD),
        DBG_STRING(WAL_DBGID_TX_MGMT_COMP_DESCID_STATUS),
        DBG_STRING(WAL_DBGID_TX_DATA_COMP_MSDUID_STATUS),
        DBG_STRING(WAL_DBGID_RESET_PCU_CYCLE_CNT),
        DBG_STRING(WAL_DBGID_SETUP_RSSI_INTERRUPTS),
        DBG_STRING(WAL_DBGID_BRSSI_CONFIG),
        DBG_STRING(WAL_DBGID_CURRENT_BRSSI_AVE),
        DBG_STRING(WAL_DBGID_BCN_TX_COMP),
        DBG_STRING(WAL_DBGID_SET_HW_CHAINMASK),
        DBG_STRING(WAL_DBGID_SET_HW_CHAINMASK_TXRX_STOP_FAIL),
        DBG_STRING(WAL_DBGID_GET_HW_CHAINMASK),
        DBG_STRING(WAL_DBGID_SMPS_DISABLE),
        DBG_STRING(WAL_DBGID_SMPS_ENABLE_HW_CNTRL),
        DBG_STRING(WAL_DBGID_SMPS_SWSEL_CHAINMASK),
        DBG_STRING(WAL_DBGID_SUSPEND),
        DBG_STRING(WAL_DBGID_RESUME),
        DBG_STRING(WAL_DBGID_PEER_TX_FAIL_CNT_THRES_EXCEEDED),
        DBG_STRING(WAL_DBGID_RX_FULL_REORDER_SUPPORT),
        DBG_STRING(WAL_DBGID_HCM_BIN),
        DBG_STRING(WAL_DBGID_HCM_BIN_PENALIZE),
        DBG_STRING(WAL_DBGID_HCM_BIN_DEPENALIZE),
        DBG_STRING(WAL_DBGID_AST_UPDATE_WDS_ENTRY),
        DBG_STRING(WAL_DBGID_PEER_EXT_STATS),
        DBG_STRING(WAL_DBGID_TX_AC_BUFFER_SET),
        DBG_STRING(WAL_DBGID_AST_ENTRY_EXIST),
        DBG_STRING(WAL_DBGID_AST_ENTRY_FULL),
        DBG_STRING(WAL_DBGID_WMMAC_TXQ_STATUS),
        DBG_STRING(WAL_DBGID_PROLONGED_TX_PPDU_TOTAL_US),
        DBG_STRING(WAL_DBGID_UPDATE_USED_TIME),
        DBG_STRING(WAL_DBGID_PAST_WB_ACK_TIMESTAMP),
        DBG_STRING(WAL_DBGID_WMMAC_ADD_DEL_TSPEC),
        DBG_STRING(WAL_DBGID_WMMAC_TIMER_EXPIRY),
        DBG_STRING(WAL_DBGID_WMMAC_PARAMS),
        DBG_STRING(WAL_DBGID_TX_MGMT_WAL_PEER_DOES_NOT_EXIST),
        DBG_STRING(WAL_DBGID_TX_MGMT_WAL_PEER_DELETE_IN_PROGRESS),
        DBG_STRING(WAL_DBGID_TX_MGMT_FRAME_DESC_ALLOC_FAILED),
        DBG_STRING(WAL_DBGID_TX_MGMT_TID_STRUCT_NOT_FOUND),
        DBG_STRING(WAL_DBGID_TX_MGMT_ENQUEUE_FAILED),
        DBG_STRING(WAL_DBGID_TX_ARP),
        DBG_STRING(WAL_DBGID_TX_DHCP),
        DBG_STRING(WAL_DBGID_DEFINITION_END),
    },
    {
        "" /* DE */
    },
    {
        "" /* pcie lp */
    },
    {
        /* RTT */
        DBG_STRING(RTT_CALL_FLOW),
        DBG_STRING(RTT_REQ_SUB_TYPE),
        DBG_STRING(RTT_MEAS_REQ_HEAD),
        DBG_STRING(RTT_MEAS_REQ_BODY),
        DBG_STRING(RTT_INIT_GLOBAL_STATE),
        DBG_STRING(RTT_REPORT),
        DBG_STRING(RTT_ERROR_REPORT),
        DBG_STRING(RTT_TIMER_STOP),
        DBG_STRING(RTT_SEND_TM_FRAME),
        DBG_STRING(RTT_V3_RESP_CNT),
        DBG_STRING(RTT_V3_RESP_FINISH),
        DBG_STRING(RTT_CHANNEL_SWITCH_REQ),
        DBG_STRING(RTT_CHANNEL_SWITCH_GRANT),
        DBG_STRING(RTT_CHANNEL_SWITCH_COMPLETE),
        DBG_STRING(RTT_CHANNEL_SWITCH_PREEMPT),
        DBG_STRING(RTT_CHANNEL_SWITCH_STOP),
        DBG_STRING(RTT_TIMER_START),
        DBG_STRING(RTT_FTM_PARAM_INFO),
        DBG_STRING(RTT_RX_TM_FRAME),
        DBG_STRING(RTT_INITR_TSTAMP),
        DBG_STRING(RTT_RSPDR_TSTAMP),
        DBG_STRING(RTT_TX_COMP_STATUS),
        DBG_STRING(RTT_ERROR_WMI_EVENT),
        DBG_STRING(RTT_MEASUREMENT_VALUES),
    },
    {      /* RESOURCE */
        DBG_STRING(RESOURCE_DBGID_DEFINITION_START),
        DBG_STRING(RESOURCE_PEER_ALLOC),
        DBG_STRING(RESOURCE_PEER_FREE),
        DBG_STRING(RESOURCE_PEER_ALLOC_WAL_PEER),
        DBG_STRING(RESOURCE_PEER_NBRHOOD_MGMT_ALLOC),
        DBG_STRING(RESOURCE_PEER_NBRHOOD_MGMT_INFO),
        DBG_STRING(RESOURCE_SMALL_MGMT_BUF_FULL),
        DBG_STRING(RESOURCE_MGMT_AVAIL_BUF_CNT_NOT_ENOUGH),
        DBG_STRING(RESOURCE_MGMT_BUF_FULL),
        DBG_STRING(RESOURCE_MGMT_BUF_INC),
        DBG_STRING(RESOURCE_MGMT_BUF_DEC),
        DBG_STRING(RESOURCE_DBGID_DEFINITION_END),
    },
    { /* DCS */
        DBG_STRING(WLAN_DCS_DBGID_INIT),
        DBG_STRING(WLAN_DCS_DBGID_WMI_CWINT),
        DBG_STRING(WLAN_DCS_DBGID_TIMER),
        DBG_STRING(WLAN_DCS_DBGID_CMDG),
        DBG_STRING(WLAN_DCS_DBGID_CMDS),
        DBG_STRING(WLAN_DCS_DBGID_DINIT)
    },
    {   /* CACHEMGR  */
        ""
    },
    {   /* ANI  */
        DBG_STRING(ANI_DBGID_POLL),
        DBG_STRING(ANI_DBGID_CONTROL),
        DBG_STRING(ANI_DBGID_OFDM_PARAMS),
        DBG_STRING(ANI_DBGID_CCK_PARAMS),
        DBG_STRING(ANI_DBGID_RESET),
        DBG_STRING(ANI_DBGID_RESTART),
        DBG_STRING(ANI_DBGID_OFDM_LEVEL),
        DBG_STRING(ANI_DBGID_CCK_LEVEL),
        DBG_STRING(ANI_DBGID_FIRSTEP),
        DBG_STRING(ANI_DBGID_CYCPWR),
        DBG_STRING(ANI_DBGID_MRC_CCK),
        DBG_STRING(ANI_DBGID_SELF_CORR_LOW),
        DBG_STRING(ANI_DBGID_ENABLE),
        DBG_STRING(ANI_DBGID_CURRENT_LEVEL),
        DBG_STRING(ANI_DBGID_POLL_PERIOD),
        DBG_STRING(ANI_DBGID_LISTEN_PERIOD),
        DBG_STRING(ANI_DBGID_OFDM_LEVEL_CFG),
        DBG_STRING(ANI_DBGID_CCK_LEVEL_CFG)
    },
    {
        DBG_STRING(P2P_DBGID_DEFINITION_START),
        DBG_STRING(P2P_DEV_REGISTER),
        DBG_STRING(P2P_HANDLE_NOA),
        DBG_STRING(P2P_UPDATE_SCHEDULE_OPPS),
        DBG_STRING(P2P_UPDATE_SCHEDULE),
        DBG_STRING(P2P_UPDATE_START_TIME),
        DBG_STRING(P2P_UPDATE_START_TIME_DIFF_TSF32),
        DBG_STRING(P2P_UPDATE_START_TIME_FINAL),
        DBG_STRING(P2P_SETUP_SCHEDULE_TIMER),
        DBG_STRING(P2P_PROCESS_SCHEDULE_AFTER_CALC),
        DBG_STRING(P2P_PROCESS_SCHEDULE_STARTED_TIMER),
        DBG_STRING(P2P_CALC_SCHEDULES_FIRST_CALL_ALL_NEXT_EVENT),
        DBG_STRING(P2P_CALC_SCHEDULES_FIRST_VALUE),
        DBG_STRING(P2P_CALC_SCHEDULES_EARLIEST_NEXT_EVENT),
        DBG_STRING(P2P_CALC_SCHEDULES_SANITY_COUNT),
        DBG_STRING(P2P_CALC_SCHEDULES_CALL_ALL_NEXT_EVENT_FROM_WHILE_LOOP),
        DBG_STRING(P2P_CALC_SCHEDULES_TIMEOUT_1),
        DBG_STRING(P2P_CALC_SCHEDULES_TIMEOUT_2),
        DBG_STRING(P2P_FIND_ALL_NEXT_EVENTS_REQ_EXPIRED),
        DBG_STRING(P2P_FIND_ALL_NEXT_EVENTS_REQ_ACTIVE),
        DBG_STRING(P2P_FIND_NEXT_EVENT_REQ_NOT_STARTED),
        DBG_STRING(P2P_FIND_NEXT_EVENT_REQ_COMPLETE_NON_PERIODIC),
        DBG_STRING(P2P_FIND_NEXT_EVENT_IN_MID_OF_NOA),
        DBG_STRING(P2P_FIND_NEXT_EVENT_REQ_COMPLETE),
        DBG_STRING(P2P_SCHEDULE_TIMEOUT),
        DBG_STRING(P2P_CALC_SCHEDULES_ENTER),
        DBG_STRING(P2P_PROCESS_SCHEDULE_ENTER),
        DBG_STRING(P2P_FIND_ALL_NEXT_EVENTS_INDIVIDUAL_REQ_AFTER_CHANGE),
        DBG_STRING(P2P_FIND_ALL_NEXT_EVENTS_INDIVIDUAL_REQ_BEFORE_CHANGE),
        DBG_STRING(P2P_FIND_ALL_NEXT_EVENTS_ENTER),
        DBG_STRING(P2P_FIND_NEXT_EVENT_ENTER),
        DBG_STRING(P2P_NOA_GO_PRESENT),
        DBG_STRING(P2P_NOA_GO_ABSENT),
        DBG_STRING(P2P_GO_NOA_NOTIF),
        DBG_STRING(P2P_GO_TBTT_OFFSET),
        DBG_STRING(P2P_GO_GET_NOA_INFO),
        DBG_STRING(P2P_GO_ADD_ONE_SHOT_NOA),
        DBG_STRING(P2P_GO_GET_NOA_IE),
        DBG_STRING(P2P_GO_BCN_TX_COMP),
        DBG_STRING(P2P_DBGID_DEFINITION_END),
    },
    {
        DBG_STRING(CSA_DBGID_DEFINITION_START),
        DBG_STRING(CSA_OFFLOAD_POOL_INIT),
        DBG_STRING(CSA_OFFLOAD_REGISTER_VDEV),
        DBG_STRING(CSA_OFFLOAD_DEREGISTER_VDEV),
        DBG_STRING(CSA_DEREGISTER_VDEV_ERROR),
        DBG_STRING(CSA_OFFLOAD_BEACON_RECEIVED),
        DBG_STRING(CSA_OFFLOAD_BEACON_CSA_RECV),
        DBG_STRING(CSA_OFFLOAD_CSA_RECV_ERROR_IE),
        DBG_STRING(CSA_OFFLOAD_CSA_TIMER_ERROR),
        DBG_STRING(CSA_OFFLOAD_CSA_TIMER_EXP),
        DBG_STRING(CSA_OFFLOAD_WMI_EVENT_ERROR),
        DBG_STRING(CSA_OFFLOAD_WMI_EVENT_SENT),
        DBG_STRING(CSA_OFFLOAD_WMI_CHANSWITCH_RECV),
        DBG_STRING(CSA_DBGID_DEFINITION_END),
    },
    {   /* NLO offload */
        DBG_STRING(NLO_DBGID_SSID_TO_BE_SCANNED_LIST),
        DBG_STRING(NLO_DBGID_SSID_TO_BE_SKIPPED_LIST),
    },
    {
        DBG_STRING(WLAN_CHATTER_DBGID_DEFINITION_START),
        DBG_STRING(WLAN_CHATTER_ENTER),
        DBG_STRING(WLAN_CHATTER_EXIT),
        DBG_STRING(WLAN_CHATTER_FILTER_HIT),
        DBG_STRING(WLAN_CHATTER_FILTER_MISS),
        DBG_STRING(WLAN_CHATTER_FILTER_FULL),
        DBG_STRING(WLAN_CHATTER_FILTER_TM_ADJ),
        DBG_STRING(WLAN_CHATTER_BUFFER_FULL),
        DBG_STRING(WLAN_CHATTER_TIMEOUT),
        DBG_STRING(WLAN_CHATTER_MC_FILTER_ADD),
        DBG_STRING(WLAN_CHATTER_MC_FILTER_DEL),
        DBG_STRING(WLAN_CHATTER_MC_FILTER_ALLOW),
        DBG_STRING(WLAN_CHATTER_MC_FILTER_DROP),
        DBG_STRING(WLAN_CHATTER_COALESCING_FILTER_ADD),
        DBG_STRING(WLAN_CHATTER_COALESCING_FILTER_DEL),
        DBG_STRING(WLAN_CHATTER_DBGID_DEFINITION_END),
    },
    {
        DBG_STRING(WOW_DBGID_DEFINITION_START),
        DBG_STRING(WOW_ENABLE_CMDID),
        DBG_STRING(WOW_RECV_DATA_PKT),
        DBG_STRING(WOW_WAKE_HOST_DATA),
        DBG_STRING(WOW_RECV_MGMT),
        DBG_STRING(WOW_WAKE_HOST_MGMT),
        DBG_STRING(WOW_RECV_EVENT),
        DBG_STRING(WOW_WAKE_HOST_EVENT),
        DBG_STRING(WOW_INIT),
        DBG_STRING(WOW_RECV_MAGIC_PKT),
        DBG_STRING(WOW_RECV_BITMAP_PATTERN),
        DBG_STRING(WOW_AP_VDEV_DISALLOW),
        DBG_STRING(WOW_STA_VDEV_DISALLOW),
        DBG_STRING(WOW_P2PGO_VDEV_DISALLOW),
        DBG_STRING(WOW_NS_OFLD_ENABLE),
        DBG_STRING(WOW_ARP_OFLD_ENABLE),
        DBG_STRING(WOW_NS_ARP_OFLD_DISABLE),
        DBG_STRING(WOW_NS_RECEIVED),
        DBG_STRING(WOW_NS_REPLIED),
        DBG_STRING(WOW_ARP_RECEIVED),
        DBG_STRING(WOW_ARP_REPLIED),
        DBG_STRING(WOW_BEACON_OFFLOAD_TX),
        DBG_STRING(WOW_BEACON_OFFLOAD_CFG),
        DBG_STRING(WOW_IBSS_VDEV_ALLOW),
        DBG_STRING(WOW_DBGID_DEFINITION_END),
    },
    {   /* WAL VDEV  */
        ""
    },
    {   /* WAL PDEV  */
        ""
    },
    {   /* TEST  */
        ""
    },
    {   /* STA SMPS  */
        DBG_STRING(STA_SMPS_DBGID_DEFINITION_START),
        DBG_STRING(STA_SMPS_DBGID_CREATE_PDEV_INSTANCE),
        DBG_STRING(STA_SMPS_DBGID_CREATE_VIRTUAL_CHAN_INSTANCE),
        DBG_STRING(STA_SMPS_DBGID_DELETE_VIRTUAL_CHAN_INSTANCE),
        DBG_STRING(STA_SMPS_DBGID_CREATE_STA_INSTANCE),
        DBG_STRING(STA_SMPS_DBGID_DELETE_STA_INSTANCE),
        DBG_STRING(STA_SMPS_DBGID_VIRTUAL_CHAN_SMPS_START),
        DBG_STRING(STA_SMPS_DBGID_VIRTUAL_CHAN_SMPS_STOP),
        DBG_STRING(STA_SMPS_DBGID_SEND_SMPS_ACTION_FRAME),
        DBG_STRING(STA_SMPS_DBGID_HOST_FORCED_MODE),
        DBG_STRING(STA_SMPS_DBGID_FW_FORCED_MODE),
        DBG_STRING(STA_SMPS_DBGID_RSSI_THRESHOLD_CROSSED),
        DBG_STRING(STA_SMPS_DBGID_SMPS_ACTION_FRAME_COMPLETION),
        DBG_STRING(STA_SMPS_DBGID_DTIM_EBT_EVENT_CHMASK_UPDATE),
        DBG_STRING(STA_SMPS_DBGID_DTIM_CHMASK_UPDATE),
        DBG_STRING(STA_SMPS_DBGID_DTIM_BEACON_EVENT_CHMASK_UPDATE),
        DBG_STRING(STA_SMPS_DBGID_DTIM_POWER_STATE_CHANGE),
        DBG_STRING(STA_SMPS_DBGID_DTIM_CHMASK_UPDATE_SLEEP),
        DBG_STRING(STA_SMPS_DBGID_DTIM_CHMASK_UPDATE_AWAKE),
    },
    {   /* SWBMISS */
        DBG_STRING(SWBMISS_DBGID_DEFINITION_START),
        DBG_STRING(SWBMISS_ENABLED),
        DBG_STRING(SWBMISS_DISABLED),
        DBG_STRING(SWBMISS_UPDATE_BEACON_RSSI),
        DBG_STRING(SWBMISS_CHECK_RSSI_OUTLIER),
        DBG_STRING(SWBMISS_TIMER_SET),
        DBG_STRING(SWBMISS_DBGID_DEFINITION_END),
    },
    {   /* WMMAC */
        ""
    },
    {   /* TDLS */
        DBG_STRING(TDLS_DBGID_DEFINITION_START),
        DBG_STRING(TDLS_DBGID_VDEV_CREATE),
        DBG_STRING(TDLS_DBGID_VDEV_DELETE),
        DBG_STRING(TDLS_DBGID_ENABLED_PASSIVE),
        DBG_STRING(TDLS_DBGID_ENABLED_ACTIVE),
        DBG_STRING(TDLS_DBGID_DISABLED),
        DBG_STRING(TDLS_DBGID_CONNTRACK_TIMER),
        DBG_STRING(TDLS_DBGID_WAL_SET),
        DBG_STRING(TDLS_DBGID_WAL_GET),
        DBG_STRING(TDLS_DBGID_WAL_PEER_UPDATE_SET),
        DBG_STRING(TDLS_DBGID_WAL_PEER_UPDATE_EVT),
        DBG_STRING(TDLS_DBGID_WAL_VDEV_CREATE),
        DBG_STRING(TDLS_DBGID_WAL_VDEV_DELETE),
        DBG_STRING(TDLS_DBGID_WLAN_EVENT),
        DBG_STRING(TDLS_DBGID_WLAN_PEER_UPDATE_SET),
        DBG_STRING(TDLS_DBGID_PEER_EVT_DRP_THRESH),
        DBG_STRING(TDLS_DBGID_PEER_EVT_DRP_RATE),
        DBG_STRING(TDLS_DBGID_PEER_EVT_DRP_RSSI),
        DBG_STRING(TDLS_DBGID_PEER_EVT_DISCOVER),
        DBG_STRING(TDLS_DBGID_PEER_EVT_DELETE),
        DBG_STRING(TDLS_DBGID_PEER_CAP_UPDATE),
        DBG_STRING(TDLS_DBGID_UAPSD_SEND_PTI_FRAME),
        DBG_STRING(TDLS_DBGID_UAPSD_SEND_PTI_FRAME2PEER),
        DBG_STRING(TDLS_DBGID_UAPSD_START_PTR_TIMER),
        DBG_STRING(TDLS_DBGID_UAPSD_CANCEL_PTR_TIMER),
        DBG_STRING(TDLS_DBGID_UAPSD_PTR_TIMER_TIMEOUT),
        DBG_STRING(TDLS_DBGID_UAPSD_STA_PS_EVENT_HANDLER),
        DBG_STRING(TDLS_DBGID_UAPSD_PEER_EVENT_HANDLER),
        DBG_STRING(TDLS_DBGID_UAPSD_PS_DEFAULT_SETTINGS),
        DBG_STRING(TDLS_DBGID_UAPSD_GENERIC),
    },
    {   /* HB */
        DBG_STRING(WLAN_HB_DBGID_DEFINITION_START),
        DBG_STRING(WLAN_HB_DBGID_INIT),
        DBG_STRING(WLAN_HB_DBGID_TCP_GET_TXBUF_FAIL),
        DBG_STRING(WLAN_HB_DBGID_TCP_SEND_FAIL),
        DBG_STRING(WLAN_HB_DBGID_BSS_PEER_NULL),
        DBG_STRING(WLAN_HB_DBGID_UDP_GET_TXBUF_FAIL),
        DBG_STRING(WLAN_HB_DBGID_UDP_SEND_FAIL),
        DBG_STRING(WLAN_HB_DBGID_WMI_CMD_INVALID_PARAM),
        DBG_STRING(WLAN_HB_DBGID_WMI_CMD_INVALID_OP),
        DBG_STRING(WLAN_HB_DBGID_WOW_NOT_ENTERED),
        DBG_STRING(WLAN_HB_DBGID_ALLOC_SESS_FAIL),
        DBG_STRING(WLAN_HB_DBGID_CTX_NULL),
        DBG_STRING(WLAN_HB_DBGID_CHKSUM_ERR),
        DBG_STRING(WLAN_HB_DBGID_UDP_TX),
        DBG_STRING(WLAN_HB_DBGID_TCP_TX),
        DBG_STRING(WLAN_HB_DBGID_DEFINITION_END),
    },
    {   /* TXBF */
        DBG_STRING(TXBFEE_DBGID_START),
        DBG_STRING(TXBFEE_DBGID_NDPA_RECEIVED),
        DBG_STRING(TXBFEE_DBGID_HOST_CONFIG_TXBFEE_TYPE),
        DBG_STRING(TXBFER_DBGID_SEND_NDPA),
        DBG_STRING(TXBFER_DBGID_GET_NDPA_BUF_FAIL),
        DBG_STRING(TXBFER_DBGID_SEND_NDPA_FAIL),
        DBG_STRING(TXBFER_DBGID_GET_NDP_BUF_FAIL),
        DBG_STRING(TXBFER_DBGID_SEND_NDP_FAIL),
        DBG_STRING(TXBFER_DBGID_GET_BRPOLL_BUF_FAIL),
        DBG_STRING(TXBFER_DBGID_SEND_BRPOLL_FAIL),
        DBG_STRING(TXBFER_DBGID_HOST_CONFIG_CMDID),
        DBG_STRING(TXBFEE_DBGID_HOST_CONFIG_CMDID),
        DBG_STRING(TXBFEE_DBGID_ENABLE_UPLOAD_H),
        DBG_STRING(TXBFEE_DBGID_UPLOADH_CV_TAG),
        DBG_STRING(TXBFEE_DBGID_UPLOADH_H_TAG),
        DBG_STRING(TXBFEE_DBGID_CAPTUREH_RECEIVED),
        DBG_STRING(TXBFEE_DBGID_PACKET_IS_STEERED),
        DBG_STRING(TXBFEE_UPLOADH_EVENT_ALLOC_MEM_FAIL),
        DBG_STRING(TXBFEE_DBGID_SW_WAR_AID_ZERO),
        DBG_STRING(TXBFEE_DBGID_BRPOLL_RECEIVED),
        DBG_STRING(TXBFEE_DBGID_GID_RECEIVED),
        DBG_STRING(TXBFEE_DBGID_END),
    },
    { /*BATCH SCAN*/
    },
    { /*THERMAL MGR*/
        DBG_STRING(THERMAL_MGR_DBGID_DEFINITION_START),
        DBG_STRING(THERMAL_MGR_NEW_THRESH),
        DBG_STRING(THERMAL_MGR_THRESH_CROSSED),
        DBG_STRING(THERMAL_MGR_DBGID_DEFINITION_END),
    },
    {   /* WLAN_MODULE_PHYERR_DFS */
        DBG_STRING(WLAN_PHYERR_DFS_DBGID_DEFINITION_START),
        DBG_STRING(WLAN_PHYERR_DFS_PHYERR_INFO_CHAN_BUFLEN),
        DBG_STRING(WLAN_PHYERR_DFS_PHYERR_INFO_PPDU),
        DBG_STRING(WLAN_PHYERR_DFS_DBDID_RADAR_SUMMARY),
        DBG_STRING(WLAN_PHYERR_DFS_DBDID_SEARCH_FFT),
        DBG_STRING(WLAN_PHTERR_DFS_DBDID_FILTER_STATUS),
        DBG_STRING(WLAN_PHYERR_DFS_DBGID_DEFINITION_END),
    },
    {
        /* WLAN_MODULE_RMC */
        DBG_STRING(RMC_DBGID_DEFINITION_START),
        DBG_STRING(RMC_SM_INIT_ERR),
        DBG_STRING(RMC_VDEV_ALLOC_ERR),
        DBG_STRING(RMC_CREATE_INSTANCE),
        DBG_STRING(RMC_DELETE_INSTANCE),
        DBG_STRING(RMC_NEW_PRI_LEADER),
        DBG_STRING(RMC_NEW_SEC_LEADER),
        DBG_STRING(RMC_NO_LDR_CHANGE),
        DBG_STRING(RMC_LDR_INFORM_SENT),
        DBG_STRING(RMC_PEER_ADD),
        DBG_STRING(RMC_PEER_DELETE),
        DBG_STRING(RMC_PEER_UNKNOWN),
        DBG_STRING(RMC_PRI_LDR_RSSI_UPDATE),
        DBG_STRING(RMC_SEC_LDR_RSSI_UPDATE),
        DBG_STRING(RMC_SET_MODE),
        DBG_STRING(RMC_SET_ACTION_PERIOD),
        DBG_STRING(RMC_DBGID_DEFINITION_END),
    },
    {
        /* WLAN_MODULE_STATS */
        DBG_STRING(WLAN_STATS_DBGID_DEFINITION_START),
        DBG_STRING(WLAN_STATS_DBGID_EST_LINKSPEED_VDEV_EN_DIS),
        DBG_STRING(WLAN_STATS_DBGID_EST_LINKSPEED_CHAN_TIME_START),
        DBG_STRING(WLAN_STATS_DBGID_EST_LINKSPEED_CHAN_TIME_END),
        DBG_STRING(WLAN_STATS_DBGID_EST_LINKSPEED_CALC),
        DBG_STRING(WLAN_STATS_DBGID_EST_LINKSPEED_UPDATE_HOME_CHAN),
        DBG_STRING(WLAN_STATS_DBGID_RSSI),
        DBG_STRING(WLAN_STATS_DBGID_CNE_RSSI),
        DBG_STRING(WLAN_STATS_DBGID_DEFINITION_END),
    },
    {
        /* WLAN_MODULE_NAN */
        DBG_STRING(NAN_DBGID_START),
        DBG_STRING(NAN_DBGID_FUNC_BEGIN),
        DBG_STRING(NAN_DBGID_FUNC_END),
        DBG_STRING(NAN_DBGID_MAIN_DEBUG),
        DBG_STRING(NAN_DBGID_MAC_DEBUG),
        DBG_STRING(NAN_DBGID_BLOOM_FILTER_DEBUG),
        DBG_STRING(NAN_DBGID_MAC_ADDR),
        DBG_STRING(NAN_DBGID_PARAM_UPDATED),
        DBG_STRING(NAN_DBGID_NULL_PTR),
        DBG_STRING(NAN_DBGID_INVALID_FUNC_ARG),
        DBG_STRING(NAN_DBGID_INVALID_MSG_PARAM),
        DBG_STRING(NAN_DBGID_MISSING_MSG_PARAM),
        DBG_STRING(NAN_DBGID_DEPRECATED_MSG_PARAM),
        DBG_STRING(NAN_DBGID_UNSUPPORTED_MSG_PARAM),
        DBG_STRING(NAN_DBGID_INVALID_PKT_DATA),
        DBG_STRING(NAN_DBGID_LOG_PKT_DATA),
        DBG_STRING(NAN_DBGID_INVALID_VALUE),
        DBG_STRING(NAN_DBGID_INVALID_OPERATION),
        DBG_STRING(NAN_DBGID_INVALID_STATE),
        DBG_STRING(NAN_DBGID_FUNCTION_ENABLED),
        DBG_STRING(NAN_DBGID_FUNCTION_DISABLED),
        DBG_STRING(NAN_DBGID_INVALID_FUNCTION_STATE),
        DBG_STRING(NAN_DBGID_READ_ERROR),
        DBG_STRING(NAN_DBGID_WRITE_ERROR),
        DBG_STRING(NAN_DBGID_RECEIVE_ERROR),
        DBG_STRING(NAN_DBGID_TRANSMIT_ERROR),
        DBG_STRING(NAN_DBGID_PARSE_ERROR),
        DBG_STRING(NAN_DBGID_RES_ALLOC_ERROR),
        DBG_STRING(NAN_DBGID_DBG_LOG_LAST),
    },
    {
        /* WLAN_MODULE_IBSS_PWRSAVE */
        DBG_STRING(IBSS_PS_DBGID_DEFINITION_START),
        DBG_STRING(IBSS_PS_DBGID_PEER_CREATE),
        DBG_STRING(IBSS_PS_DBGID_PEER_DELETE),
        DBG_STRING(IBSS_PS_DBGID_VDEV_CREATE),
        DBG_STRING(IBSS_PS_DBGID_VDEV_DELETE),
        DBG_STRING(IBSS_PS_DBGID_VDEV_EVENT),
        DBG_STRING(IBSS_PS_DBGID_PEER_EVENT),
        DBG_STRING(IBSS_PS_DBGID_DELIVER_CAB),
        DBG_STRING(IBSS_PS_DBGID_DELIVER_UC_DATA),
        DBG_STRING(IBSS_PS_DBGID_DELIVER_UC_DATA_ERROR),
        DBG_STRING(IBSS_PS_DBGID_UC_INACTIVITY_TMR_RESTART),
        DBG_STRING(IBSS_PS_DBGID_MC_INACTIVITY_TMR_RESTART),
        DBG_STRING(IBSS_PS_DBGID_NULL_TX_COMPLETION),
        DBG_STRING(IBSS_PS_DBGID_ATIM_TIMER_START),
        DBG_STRING(IBSS_PS_DBGID_UC_ATIM_SEND),
        DBG_STRING(IBSS_PS_DBGID_BC_ATIM_SEND),
        DBG_STRING(IBSS_PS_DBGID_UC_TIMEOUT),
        DBG_STRING(IBSS_PS_DBGID_PWR_COLLAPSE_ALLOWED),
        DBG_STRING(IBSS_PS_DBGID_PWR_COLLAPSE_NOT_ALLOWED),
        DBG_STRING(IBSS_PS_DBGID_SET_PARAM),
        DBG_STRING(IBSS_PS_DBGID_HOST_TX_PAUSE),
        DBG_STRING(IBSS_PS_DBGID_HOST_TX_UNPAUSE),
        DBG_STRING(IBSS_PS_DBGID_PS_DESC_BIN_HWM),
        DBG_STRING(IBSS_PS_DBGID_PS_DESC_BIN_LWM),
        DBG_STRING(IBSS_PS_DBGID_PS_KICKOUT_PEER),
        DBG_STRING(IBSS_PS_DBGID_SET_PEER_PARAM),
        DBG_STRING(IBSS_PS_DBGID_BCN_ATIM_WIN_MISMATCH),
        DBG_STRING(IBSS_PS_DBGID_RX_CHAINMASK_CHANGE),
    },
    {
        /* HIF UART Interface DBGIDs */
        DBG_STRING(HIF_UART_DBGID_START),
        DBG_STRING(HIF_UART_DBGID_POWER_STATE),
        DBG_STRING(HIF_UART_DBGID_TXRX_FLOW),
        DBG_STRING(HIF_UART_DBGID_TXRX_CTRL_CHAR),
        DBG_STRING(HIF_UART_DBGID_TXRX_BUF_DUMP),
    },
    {
        /* LPI */
        ""
    },
    {
        /* EXTSCAN DBGIDs */
        DBG_STRING(EXTSCAN_START),
        DBG_STRING(EXTSCAN_STOP),
        DBG_STRING(EXTSCAN_CLEAR_ENTRY_CONTENT),
        DBG_STRING(EXTSCAN_GET_FREE_ENTRY_SUCCESS),
        DBG_STRING(EXTSCAN_GET_FREE_ENTRY_INCONSISTENT),
        DBG_STRING(EXTSCAN_GET_FREE_ENTRY_NO_MORE_ENTRIES),
        DBG_STRING(EXTSCAN_CREATE_ENTRY_SUCCESS),
        DBG_STRING(EXTSCAN_CREATE_ENTRY_ERROR),
        DBG_STRING(EXTSCAN_SEARCH_SCAN_ENTRY_QUEUE),
        DBG_STRING(EXTSCAN_SEARCH_SCAN_ENTRY_KEY_FOUND),
        DBG_STRING(EXTSCAN_SEARCH_SCAN_ENTRY_KEY_NOT_FOUND),
        DBG_STRING(EXTSCAN_ADD_ENTRY),
        DBG_STRING(EXTSCAN_BUCKET_SEND_OPERATION_EVENT),
        DBG_STRING(EXTSCAN_BUCKET_SEND_OPERATION_EVENT_FAILED),
        DBG_STRING(EXTSCAN_BUCKET_START_SCAN_CYCLE),
        DBG_STRING(EXTSCAN_BUCKET_PERIODIC_TIMER),
        DBG_STRING(EXTSCAN_SEND_START_STOP_EVENT),
        DBG_STRING(EXTSCAN_NOTIFY_WLAN_CHANGE),
        DBG_STRING(EXTSCAN_NOTIFY_WLAN_HOTLIST_MATCH),
        DBG_STRING(EXTSCAN_MAIN_RECEIVED_FRAME),
        DBG_STRING(EXTSCAN_MAIN_NO_SSID_IE),
        DBG_STRING(EXTSCAN_MAIN_MALFORMED_FRAME),
        DBG_STRING(EXTSCAN_FIND_BSSID_BY_REFERENCE),
        DBG_STRING(EXTSCAN_FIND_BSSID_BY_REFERENCE_ERROR),
        DBG_STRING(EXTSCAN_NOTIFY_TABLE_USAGE),
        DBG_STRING(EXTSCAN_FOUND_RSSI_ENTRY),
        DBG_STRING(EXTSCAN_BSSID_FOUND_RSSI_SAMPLE),
        DBG_STRING(EXTSCAN_BSSID_ADDED_RSSI_SAMPLE),
        DBG_STRING(EXTSCAN_BSSID_REPLACED_RSSI_SAMPLE),
        DBG_STRING(EXTSCAN_BSSID_TRANSFER_CURRENT_SAMPLES),
        DBG_STRING(EXTSCAN_BUCKET_PROCESS_SCAN_EVENT),
        DBG_STRING(EXTSCAN_BUCKET_CANNOT_FIND_BUCKET),
        DBG_STRING(EXTSCAN_START_SCAN_REQUEST_FAILED),
        DBG_STRING(EXTSCAN_BUCKET_STOP_CURRENT_SCANS),
        DBG_STRING(EXTSCAN_BUCKET_SCAN_STOP_REQUEST),
        DBG_STRING(EXTSCAN_BUCKET_PERIODIC_TIMER_ERROR),
        DBG_STRING(EXTSCAN_BUCKET_START_OPERATION),
        DBG_STRING(EXTSCAN_START_INTERNAL_ERROR),
        DBG_STRING(EXTSCAN_NOTIFY_HOTLIST_MATCH),
        DBG_STRING(EXTSCAN_CONFIG_HOTLIST_TABLE),
        DBG_STRING(EXTSCAN_CONFIG_WLAN_CHANGE_TABLE),
        DBG_STRING(EXTSCAN_EVENT_SEND_FAILED),
    },
    {   /* UNIT_TEST */
        DBG_STRING(UNIT_TEST_GEN),
    },
    {   /* MLME */
        DBG_STRING(MLME_DEBUG_CMN),
        DBG_STRING(MLME_DEBUG_IF),
        DBG_STRING(MLME_DEBUG_AUTH),
        DBG_STRING(MLME_DEBUG_REASSOC),
        DBG_STRING(MLME_DEBUG_DEAUTH),
        DBG_STRING(MLME_DEBUG_DISASSOC),
        DBG_STRING(MLME_DEBUG_ROAM),
        DBG_STRING(MLME_DEBUG_RETRY),
        DBG_STRING(MLME_DEBUG_TIMER),
        DBG_STRING(MLME_DEBUG_FRAMEPARSE),
    },
    {   /*SUPPLICANT */
        DBG_STRING(SUPPL_DBGID_INIT),
        DBG_STRING(SUPPL_DBGID_RECV_EAPOL),
        DBG_STRING(SUPPL_DBGID_RECV_EAPOL_TIMEOUT),
        DBG_STRING(SUPPL_DBGID_SEND_EAPOL),
        DBG_STRING(SUPPL_DBGID_MIC_MISMATCH),
        DBG_STRING(SUPPL_DBGID_FINISH),
        DBG_STRING(SUPPL_DBGID_GET_FRM_INFO),
        DBG_STRING(SUPPL_DBGID_DUMP_TYPE),
        DBG_STRING(SUPPL_DBGID_DUMP_HEX),
        DBG_STRING(SUPPL_DBGID_NODE_NOT_FOUND),
        DBG_STRING(SUPPL_DBGID_GET_EAPOL_BUF),
        DBG_STRING(SUPPL_DBGID_GET_BUF_FAIL),
        DBG_STRING(SUPPL_DBGID_RECV_EAPOL_ERROR),
    },
    {
        /* ERE */
        ""
    },
    {
        DBG_STRING(OCB_DBGID_VDEV_CREATE),
        DBG_STRING(OCB_DBGID_VDEV_DELETE),
        DBG_STRING(OCB_DBGID_CHAN_PAUSE),
        DBG_STRING(OCB_DBGID_CHAN_UNPAUSE),
        DBG_STRING(OCB_DBGID_PEER_CREATE),
        DBG_STRING(OCB_DBGID_PEER_DELETE),
        DBG_STRING(OCB_DBGID_DCC_START),
        DBG_STRING(OCB_DBGID_DCC_STOP),
        DBG_STRING(OCB_DBGID_SET_CONFIG_CMD),
        DBG_STRING(OCB_DBGID_SET_UTC_TIME_CMD),
        DBG_STRING(OCB_DBGID_START_TIMING_ADVERT_CMD),
        DBG_STRING(OCB_DBGID_STOP_TIMING_ADVERT_CMD),
        DBG_STRING(OCB_DBGID_GET_TSF_TIMER_CMD),
        DBG_STRING(OCB_DBGID_GET_DCC_STATS_CMD),
        DBG_STRING(OCB_DBGID_UPDATE_DCC_NDL_CMD),
        DBG_STRING(OCB_DBGID_SET_CONFIG_RESP_EVENT),
        DBG_STRING(OCB_DBGID_GET_TSF_TIMER_RESP_EVENT),
        DBG_STRING(OCB_DBGID_GET_DCC_STATS_RESP_EVENT),
        DBG_STRING(OCB_DBGID_DCC_STATS_EVENT),
        DBG_STRING(OCB_UPDATE_DCC_NDL_RESP_EVENT),
        DBG_STRING(OCB_DBGID_GENERIC),
        DBG_STRING(OCB_DBGID_VDEV_START),
        DBG_STRING(OCB_DBGID_CHANNEL_SCHED_EVENT),
        DBG_STRING(OCB_DBGID_GPS_EVENT_START),
        DBG_STRING(OCB_DBGID_GPS_EVENT_END),
        DBG_STRING(OCB_DBGID_TX_TA_FRAME),
        DBG_STRING(OCB_DBGID_RX_TA_FRAME),
    },
    {
        DBG_STRING(RSSI_MONITOR_DBGID_DEFINITION_START),
        DBG_STRING(RSSI_MONITOR_VDEV_INIT),
        DBG_STRING(RSSI_MONITOR_VDEV_FREE),
        DBG_STRING(RSSI_MONITOR_VDEV_EVENT),
        DBG_STRING(RSSI_MONITOR_HW_EVENT),
        DBG_STRING(RSSI_MONITOR_ENABLE_THRESHOLDS_CLIENT_REQ),
        DBG_STRING(RSSI_MONITOR_ENABLE_THRESHOLDS_CLIENT_REQ_ERR),
        DBG_STRING(RSSI_MONITOR_DISABLE_THRESHOLDS_CLIENT_REQ),
        DBG_STRING(RSSI_MONITOR_DISABLE_THRESHOLDS_CLIENT_REQ_ERR),
        DBG_STRING(RSSI_MONITOR_ARBITER),
        DBG_STRING(RSSI_MONITOR_ARBITER_CONFIG_HW),
        DBG_STRING(RSSI_MONITOR_CHECK_AND_DELIVER_EVENT),
        DBG_STRING(RSSI_MONITOR_DELIVER_EVENT),
        DBG_STRING(RSSI_MONITOR_UPDATE_BEACON_RSSI),
        DBG_STRING(RSSI_MONITOR_DBGID_DEFINITION_END),
    },
    {
        /* WPM */
        ""
    },
    {
        /* CSS */
        ""
    },
    {
        /* PPS */
        ""
    },
    {
        /* SCAN_CH_PREDICT */
        ""
    },
    {
        /* MAWCE */
        ""
    },
    {
        /* CMC_QMIC */
        ""
    },
    {
        /* EGAP */
        ""
    },
    {
        /* NAN20 */
        ""
    },
    {
        DBG_STRING(WLAN_MODULE_QBOOST_DEFINITION_START),
        DBG_STRING(WLAN_MODULE_QBOOST_DBGID_WLAN_PEER_NOT_FOUND),
        DBG_STRING(WLAN_MODULE_QBOOST_DEFINITION_END),
    },

};

int dbglog_module_log_enable(wmi_unified_t  wmi_handle, A_UINT32 mod_id,
                  bool isenable)
{
    A_UINT32 val = 0;

    if (mod_id > WLAN_MODULE_ID_MAX) {
            AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("dbglog_module_log_enable: Invalid module id %d\n",
                mod_id));
        return -EINVAL;
    }

    WMI_DBGLOG_SET_MODULE_ID(val,mod_id);
    if (isenable) {
        /* set it to global module level */
        WMI_DBGLOG_SET_LOG_LEVEL(val,DBGLOG_INFO);
    } else {
        /* set it to ERROR level */
        WMI_DBGLOG_SET_LOG_LEVEL(val,DBGLOG_ERR);
    }
    wmi_config_debug_module_cmd(wmi_handle, WMI_DEBUG_LOG_PARAM_LOG_LEVEL,  val, NULL,0);

    return 0;
}

int dbglog_vap_log_enable(wmi_unified_t  wmi_handle, A_UINT16 vap_id,
               bool isenable)
{
    if (vap_id > DBGLOG_MAX_VDEVID) {
        AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("dbglog_vap_log_enable:Invalid vap_id %d\n",
        vap_id));
        return -EINVAL;
    }

    wmi_config_debug_module_cmd(wmi_handle,
             isenable ? WMI_DEBUG_LOG_PARAM_VDEV_ENABLE:WMI_DEBUG_LOG_PARAM_VDEV_DISABLE, vap_id, NULL,0 );

    return 0;
}

int dbglog_set_log_lvl(wmi_unified_t  wmi_handle, DBGLOG_LOG_LVL log_lvl)
{
    A_UINT32 val = 0;

    if (log_lvl > DBGLOG_LVL_MAX) {
        AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("dbglog_set_log_lvl:Invalid log level %d\n",
        log_lvl));
        return -EINVAL;
    }

    WMI_DBGLOG_SET_MODULE_ID(val,WMI_DEBUG_LOG_MODULE_ALL);
    WMI_DBGLOG_SET_LOG_LEVEL(val,log_lvl);
    wmi_config_debug_module_cmd(wmi_handle, WMI_DEBUG_LOG_PARAM_LOG_LEVEL,  val, NULL,0);

    return 0;
}

int dbglog_set_mod_log_lvl(wmi_unified_t  wmi_handle, A_UINT32 mod_log_lvl)
{
    A_UINT32 val = 0;
    /* set the global module level to log_lvl */
    WMI_DBGLOG_SET_MODULE_ID(val,(mod_log_lvl/10));
    WMI_DBGLOG_SET_LOG_LEVEL(val,(mod_log_lvl%10));
    wmi_config_debug_module_cmd(wmi_handle, WMI_DEBUG_LOG_PARAM_LOG_LEVEL,  val, NULL,0);

    return 0;
}

A_STATUS
wmi_config_debug_module_cmd(wmi_unified_t  wmi_handle, A_UINT32 param, A_UINT32 val,
                            A_UINT32 *module_id_bitmap, A_UINT32 bitmap_len)
{
    wmi_buf_t buf;
    wmi_debug_log_config_cmd_fixed_param *configmsg;
    A_STATUS status = A_OK;
    int i;
    int len;
    int8_t *buf_ptr;
    int32_t *module_id_bitmap_array; /* Used to fomr the second tlv*/


    ASSERT(bitmap_len < MAX_MODULE_ID_BITMAP_WORDS);

    /* Allocate size for 2 tlvs - including tlv hdr space for second tlv*/
    len = sizeof(wmi_debug_log_config_cmd_fixed_param) + WMI_TLV_HDR_SIZE +
          (sizeof(int32_t) * MAX_MODULE_ID_BITMAP_WORDS);
    buf = wmi_buf_alloc(wmi_handle, len);
    if (buf == NULL)
        return A_NO_MEMORY;

    configmsg = (wmi_debug_log_config_cmd_fixed_param *)(wmi_buf_data(buf));
    buf_ptr = (int8_t *)configmsg;
    WMITLV_SET_HDR(&configmsg->tlv_header,
           WMITLV_TAG_STRUC_wmi_debug_log_config_cmd_fixed_param,
       WMITLV_GET_STRUCT_TLVLEN(wmi_debug_log_config_cmd_fixed_param));
    configmsg->dbg_log_param = param;
    configmsg->value = val;
    /* Filling in the data part of second tlv -- should follow first tlv _ WMI_TLV_HDR_SIZE*/
    module_id_bitmap_array = (A_UINT32*)(buf_ptr +
                             sizeof(wmi_debug_log_config_cmd_fixed_param) +
                 WMI_TLV_HDR_SIZE);
    WMITLV_SET_HDR(buf_ptr + sizeof(wmi_debug_log_config_cmd_fixed_param),
                   WMITLV_TAG_ARRAY_UINT32,
           sizeof(A_UINT32) * MAX_MODULE_ID_BITMAP_WORDS);
    if (module_id_bitmap) {
        for(i=0;i<bitmap_len;++i) {
            module_id_bitmap_array[i] = module_id_bitmap[i];
        }
    }

    AR_DEBUG_PRINTF(ATH_DEBUG_RSVD1,
                    ("wmi_dbg_cfg_send: param 0x%x val 0x%x \n",
                                     param, val));

    status = wmi_unified_cmd_send(wmi_handle, buf,
                len, WMI_DBGLOG_CFG_CMDID);

    if (status != A_OK)
        adf_nbuf_free(buf);

    return status;
}

void
dbglog_set_vap_enable_bitmap(wmi_unified_t  wmi_handle, A_UINT32 vap_enable_bitmap)
{
     wmi_config_debug_module_cmd(wmi_handle,
		       WMI_DEBUG_LOG_PARAM_VDEV_ENABLE_BITMAP,
		       vap_enable_bitmap, NULL,0 );
}

void
dbglog_set_mod_enable_bitmap(wmi_unified_t  wmi_handle,A_UINT32 log_level, A_UINT32 *mod_enable_bitmap, A_UINT32 bitmap_len )
{
     wmi_config_debug_module_cmd(wmi_handle,
			WMI_DEBUG_LOG_PARAM_MOD_ENABLE_BITMAP,
			log_level,
			mod_enable_bitmap,bitmap_len);
}

int dbglog_report_enable(wmi_unified_t  wmi_handle, bool isenable)
{
    int bitmap[2] = {0};

    if(isenable){
	/* set the vap enable bitmap */
        dbglog_set_vap_enable_bitmap(wmi_handle, 0xFFFF);
	bitmap[0] = 0xFFFFFFFF;
	bitmap[1] = 0x1F;
	/* set the module level bitmap  */
	dbglog_set_mod_enable_bitmap(wmi_handle, 0x0, bitmap, 2);
    } else {
        dbglog_set_vap_enable_bitmap(wmi_handle, bitmap[0]);
        dbglog_set_mod_enable_bitmap(wmi_handle, DBGLOG_LVL_MAX, bitmap, 2);
    }
    return 0;
}

static char *
dbglog_get_msg(A_UINT32 moduleid, A_UINT32 debugid)
{
    static char unknown_str[64];

    if (moduleid < WLAN_MODULE_ID_MAX && debugid < MAX_DBG_MSGS) {
        char *str = DBG_MSG_ARR[moduleid][debugid];
        if (str && str[0] != '\0') {
            return str;
        }
    }

    snprintf(unknown_str, sizeof(unknown_str),
            "UNKNOWN %u:%u",
            moduleid, debugid);

    return unknown_str;
}

void
dbglog_printf(
        A_UINT32 timestamp,
        A_UINT16 vap_id,
        const char *fmt, ...)
{
    char buf[128];
    va_list ap;

    if (vap_id < DBGLOG_MAX_VDEVID) {
        AR_DEBUG_PRINTF(ATH_DEBUG_INFO, (DBGLOG_PRINT_PREFIX "[%u] vap-%u ", timestamp, vap_id));
    } else {
        AR_DEBUG_PRINTF(ATH_DEBUG_INFO, (DBGLOG_PRINT_PREFIX "[%u] ", timestamp));
    }

    va_start(ap, fmt);
    vsnprintf(buf, sizeof(buf), fmt, ap);
    va_end(ap);

    AR_DEBUG_PRINTF(ATH_DEBUG_INFO, ("%s\n", buf));
}

void
dbglog_printf_no_line_break(
        A_UINT32 timestamp,
        A_UINT16 vap_id,
        const char *fmt, ...)
{
    char buf[128];
    va_list ap;

    if (vap_id < DBGLOG_MAX_VDEVID) {
        AR_DEBUG_PRINTF(ATH_DEBUG_INFO, (DBGLOG_PRINT_PREFIX "[%u] vap-%u ", timestamp, vap_id));
    } else {
        AR_DEBUG_PRINTF(ATH_DEBUG_INFO, (DBGLOG_PRINT_PREFIX "[%u] ", timestamp));
    }

    va_start(ap, fmt);
    vsnprintf(buf, sizeof(buf), fmt, ap);
    va_end(ap);

    AR_DEBUG_PRINTF(ATH_DEBUG_INFO, ("%s", buf));
}

#define USE_NUMERIC 0

A_BOOL
dbglog_default_print_handler(A_UINT32 mod_id, A_UINT16 vap_id, A_UINT32 dbg_id,
                             A_UINT32 timestamp, A_UINT16 numargs, A_UINT32 *args)
{
    int i;

    if (vap_id < DBGLOG_MAX_VDEVID) {
        AR_DEBUG_PRINTF(ATH_DEBUG_INFO, (DBGLOG_PRINT_PREFIX "[%u] vap-%u %s ( ", timestamp, vap_id, dbglog_get_msg(mod_id, dbg_id)));
    } else {
        AR_DEBUG_PRINTF(ATH_DEBUG_INFO, (DBGLOG_PRINT_PREFIX "[%u] %s ( ", timestamp, dbglog_get_msg(mod_id, dbg_id)));
    }

    for (i = 0; i < numargs; i++) {
#if USE_NUMERIC
        AR_DEBUG_PRINTF(ATH_DEBUG_INFO, ("%u", args[i]));
#else
        AR_DEBUG_PRINTF(ATH_DEBUG_INFO, ("%#x", args[i]));
#endif
        if ((i + 1) < numargs) {
            AR_DEBUG_PRINTF(ATH_DEBUG_INFO, (", "));
        }
    }
    AR_DEBUG_PRINTF(ATH_DEBUG_INFO, (" )\n"));

    return TRUE;
}

#define DBGLOG_PARSE_ARGS_STRING_LENGTH    (DBGLOG_NUM_ARGS_MAX * 11 + 10)
static int
dbglog_print_raw_data(A_UINT32 *buffer, A_UINT32 length)
{
    A_UINT32 timestamp;
    A_UINT32 debugid;
    A_UINT32 moduleid;
    A_UINT16 numargs, curArgs;
    A_UINT32 count = 0, totalWriteLen, writeLen;
    char parseArgsString[DBGLOG_PARSE_ARGS_STRING_LENGTH];
    char *dbgidString;

    while (count < length) {

        debugid = DBGLOG_GET_DBGID(buffer[count + 1]);
        moduleid = DBGLOG_GET_MODULEID(buffer[count + 1]);
        numargs = DBGLOG_GET_NUMARGS(buffer[count + 1]);
        timestamp = DBGLOG_GET_TIME_STAMP(buffer[count]);

        if (moduleid < WLAN_MODULE_ID_MAX && debugid < MAX_DBG_MSGS && numargs <= DBGLOG_NUM_ARGS_MAX) {

            OS_MEMZERO(parseArgsString, sizeof(parseArgsString));
            totalWriteLen = 0;

            for (curArgs = 0; curArgs < numargs; curArgs++){
                // Using sprintf_s instead of sprintf, to avoid length overflow
                writeLen = snprintf(parseArgsString + totalWriteLen, DBGLOG_PARSE_ARGS_STRING_LENGTH - totalWriteLen, "%x ", buffer[count + 2 + curArgs]);
                totalWriteLen += writeLen;
            }

            if (debugid < MAX_DBG_MSGS){
                dbgidString = DBG_MSG_ARR[moduleid][debugid];
                if (dbgidString != NULL) {
                    AR_DEBUG_PRINTF(ATH_DEBUG_INFO, ("fw:%s(%x %x):%s\n",
                           dbgidString,
                           timestamp, buffer[count+1],
                           parseArgsString));
                } else {
                    /* host need sync with FW id */
                    AR_DEBUG_PRINTF(ATH_DEBUG_INFO, ("fw:%s:m:%x,id:%x(%x %x):%s\n",
                           "UNKNOWN", moduleid, debugid,
                           timestamp, buffer[count+1],
                           parseArgsString));
                }
            } else if (debugid == DBGLOG_DBGID_SM_FRAMEWORK_PROXY_DBGLOG_MSG) {
                /* specific debugid */
                AR_DEBUG_PRINTF(ATH_DEBUG_INFO, ("fw:%s:m:%x,id:%x(%x %x):%s\n",
                       "DBGLOG_SM_MSG", moduleid, debugid,
                       timestamp, buffer[count+1],
                       parseArgsString));
            } else {
                AR_DEBUG_PRINTF(ATH_DEBUG_INFO, ("fw:%s:m:%x,id:%x(%x %x):%s\n",
                       "UNKNOWN", moduleid, debugid,
                       timestamp, buffer[count+1],
                       parseArgsString));
            }
        }

        count += numargs + 2; /* 32 bit Time stamp + 32 bit Dbg header*/
    }

    return 0;

}

#ifdef WLAN_OPEN_SOURCE
static int
dbglog_debugfs_raw_data(wmi_unified_t wmi_handle, const u_int8_t *buf, A_UINT32 length, A_UINT32 dropped)
{
    struct fwdebug *fwlog = (struct fwdebug *)&wmi_handle->dbglog;
    struct dbglog_slot *slot;
    struct sk_buff *skb;
    size_t slot_len;

    if (WARN_ON(length > ATH6KL_FWLOG_PAYLOAD_SIZE))
        return -ENODEV;

    slot_len = sizeof(*slot) + ATH6KL_FWLOG_PAYLOAD_SIZE;

    skb = alloc_skb(slot_len, GFP_KERNEL);
    if (!skb)
        return -ENOMEM;

    slot = (struct dbglog_slot *) skb_put(skb, slot_len);
    slot->diag_type = (A_UINT32)DIAG_TYPE_FW_DEBUG_MSG;
    slot->timestamp = cpu_to_le32(jiffies);
    slot->length = cpu_to_le32(length);
    slot->dropped = cpu_to_le32(dropped);
    memcpy(slot->payload, buf, length);

    /* Need to pad each record to fixed length ATH6KL_FWLOG_PAYLOAD_SIZE */
    memset(slot->payload + length, 0, ATH6KL_FWLOG_PAYLOAD_SIZE - length);

    spin_lock(&fwlog->fwlog_queue.lock);

    __skb_queue_tail(&fwlog->fwlog_queue, skb);

    complete(&fwlog->fwlog_completion);

    /* drop oldest entries */
    while (skb_queue_len(&fwlog->fwlog_queue) >
           ATH6KL_FWLOG_MAX_ENTRIES) {
        skb = __skb_dequeue(&fwlog->fwlog_queue);
        kfree_skb(skb);
    }

    spin_unlock(&fwlog->fwlog_queue.lock);

    return TRUE;
}
#endif /* WLAN_OPEN_SOURCE */

/**
 * nl_srv_bcast_fw_logs() - Wrapper func to send bcast msgs to FW logs mcast grp
 * @skb: sk buffer pointer
 *
 * Sends the bcast message to FW logs multicast group with generic nl socket
 * if CNSS_GENL is enabled. Else, use the legacy netlink socket to send.
 *
 * Return: zero on success, error code otherwise
 */
static int nl_srv_bcast_fw_logs(struct sk_buff *skb)
{
#ifdef CNSS_GENL
	return nl_srv_bcast(skb, CLD80211_MCGRP_FW_LOGS, WLAN_NL_MSG_CNSS_DIAG);
#else
	return nl_srv_bcast(skb);
#endif
}

/*
 * Package the data from the fw diag WMI event handler.
 * Pass this data to cnss-diag service
 */
static int
send_fw_diag_nl_data(const u_int8_t *buffer,
                     A_UINT32 len, A_UINT32 event_type)
{
    struct sk_buff *skb_out;
    struct nlmsghdr *nlh;
    int res = 0;
    tAniNlHdr *wnl;
    int radio;
    int msg_len;

    if (WARN_ON(len > ATH6KL_FWLOG_PAYLOAD_SIZE))
        return -ENODEV;

    if (nl_srv_is_initialized() != 0)
        return -EIO;

    radio = vos_get_radio_index();
    if (radio == -EINVAL)
        return -EIO;

    if (vos_is_multicast_logging())
    {
        msg_len = len + sizeof(radio);
        skb_out = nlmsg_new(msg_len, GFP_KERNEL);
        if (!skb_out)
        {
            AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Failed to allocate new skb\n"));
            return -1;
        }
        nlh = nlmsg_put(skb_out, 0, 0, WLAN_NL_MSG_CNSS_DIAG, msg_len, 0);
        if (nlh == NULL) {
            AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
                            ("%s: nlmsg_put failed\n", __func__));
            nlmsg_free(skb_out);
            return -ENOMEM;
        }
        wnl = (tAniNlHdr *)nlh;
        wnl->radio = radio;

        /* data buffer should offset after the nlmsg_hdr + sizeof(int) radio */
        memcpy(nlmsg_data(nlh) + sizeof(radio), buffer, len);

        res = nl_srv_bcast_fw_logs(skb_out);
        if ((res < 0) && (res != -ESRCH))
        {
            AR_DEBUG_PRINTF(ATH_DEBUG_RSVD1,
                            ("%s: nl_srv_bcast_fw_logs failed 0x%x \n", __func__, res));
            return res;
        }
    }
    return res;
}

static int
send_diag_netlink_data(const u_int8_t *buffer, A_UINT32 len, A_UINT32 cmd)
{
    struct sk_buff *skb_out;
    struct nlmsghdr *nlh;
    int res = 0;
    struct dbglog_slot *slot;
    size_t slot_len;
    tAniNlHdr *wnl;
    int radio;

    if (WARN_ON(len > ATH6KL_FWLOG_PAYLOAD_SIZE))
        return -ENODEV;

    if (nl_srv_is_initialized() != 0)
        return -EIO;

    radio = vos_get_radio_index();
    if (radio == -EINVAL)
        return -EIO;

    if (vos_is_multicast_logging()) {
        slot_len = sizeof(*slot) + ATH6KL_FWLOG_PAYLOAD_SIZE + sizeof(radio);

        skb_out = nlmsg_new(slot_len, GFP_KERNEL);
        if (!skb_out) {
            AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
                            ("Failed to allocate new skb\n"));
            return -1;
        }

        nlh = nlmsg_put(skb_out, 0, 0, WLAN_NL_MSG_CNSS_DIAG, slot_len, 0);
        if (nlh == NULL) {
            AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
                            ("%s: nlmsg_put failed\n", __func__));
            nlmsg_free(skb_out);
            return -ENOMEM;
        }
        wnl = (tAniNlHdr *)nlh;

        wnl->radio = radio;

        /* data buffer should offset after the nlmsg_hdr + sizeof(int) radio */
        slot = (struct dbglog_slot *) (nlmsg_data(nlh) + sizeof(radio));
        slot->diag_type = cmd;
        slot->timestamp = cpu_to_le32(jiffies);
        slot->length = cpu_to_le32(len);
        /* Version mapped to get_version here */
        slot->dropped = get_version;
        memcpy(slot->payload, buffer, len);

        res = nl_srv_bcast_fw_logs(skb_out);
        if ((res < 0) && (res != -ESRCH)) {
            AR_DEBUG_PRINTF(ATH_DEBUG_RSVD1,
                            ("%s: nl_srv_bcast_fw_logs failed 0x%x \n", __func__, res));
            return res;
        }
    }
    return res;
}


int
dbglog_process_netlink_data(wmi_unified_t wmi_handle, const u_int8_t *buffer,
                            A_UINT32 len, A_UINT32 dropped)
{
    struct sk_buff *skb_out;
    struct nlmsghdr *nlh;
    int res = 0;
    struct dbglog_slot *slot;
    size_t slot_len;
    tAniNlHdr *wnl;
    int radio;

    if (WARN_ON(len > ATH6KL_FWLOG_PAYLOAD_SIZE))
        return -ENODEV;

    if (nl_srv_is_initialized() != 0)
        return -EIO;

    radio = vos_get_radio_index();
    if (radio == -EINVAL)
        return -EIO;

    if (vos_is_multicast_logging())
    {
        slot_len = sizeof(*slot) + ATH6KL_FWLOG_PAYLOAD_SIZE + sizeof(radio);
        skb_out = nlmsg_new(slot_len, GFP_KERNEL);
        if (!skb_out)
        {
            AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Failed to allocate new skb\n"));
            return -1;
        }

        nlh = nlmsg_put(skb_out, 0, 0, WLAN_NL_MSG_CNSS_DIAG, slot_len, 0);
        if (nlh == NULL) {
            AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
                            ("%s: nlmsg_put failed\n", __func__));
            nlmsg_free(skb_out);
            return -ENOMEM;
        }
        wnl = (tAniNlHdr *)nlh;

        wnl->radio = radio;

        /* data buffer should offset after the nlmsg_hdr + sizeof(int) radio */
        slot = (struct dbglog_slot *) (nlmsg_data(nlh) + sizeof(radio));
        slot->diag_type = (A_UINT32)DIAG_TYPE_FW_DEBUG_MSG;
        slot->timestamp = cpu_to_le32(jiffies);
        slot->length = cpu_to_le32(len);
        slot->dropped = cpu_to_le32(dropped);
        memcpy(slot->payload, buffer, len);

        res = nl_srv_bcast_fw_logs(skb_out);
        if ((res < 0) && (res != -ESRCH))
        {
            AR_DEBUG_PRINTF(ATH_DEBUG_RSVD1,
                            ("%s: nl_srv_bcast_fw_logs failed 0x%x \n", __func__, res));
            return res;
        }
    }
    return res;
}

/*
 * WMI diag data event handler, this function invoked as a CB
 * when there DIAG_EVENT, DIAG_MSG, DIAG_DBG to be
 * forwarded from the FW. This is the new implementation for
 * replacement of fw_dbg and dbg messages
 */

static int
diag_fw_handler(ol_scn_t scn, u_int8_t *data, u_int32_t datalen)
{

    tp_wma_handle wma = (tp_wma_handle)scn;
    WMI_DIAG_EVENTID_param_tlvs *param_buf;
    u_int8_t *datap;
    u_int32_t len = 0;
    u_int32_t *buffer;

    if (!wma) {
        AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("NULL Pointer assigned\n"));
        return -1;
    }
    /* when fw asser occurs,host can't use TLV format. */
    if (wma->is_fw_assert) {
        datap = data;
        len = datalen;
        wma->is_fw_assert = 0;
    } else {
        param_buf = (WMI_DIAG_EVENTID_param_tlvs *) data;
        if (!param_buf) {
            AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
                            ("Get NULL point message from FW\n"));
            return -1;
        }

        param_buf = (WMI_DIAG_EVENTID_param_tlvs *) data;
        datap = param_buf->bufp;
        len = param_buf->num_bufp;
        if (!get_version) {
		if (len < 2*(sizeof(uint32_t))) {
			AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
				("len is less than expected\n"));
			return A_ERROR;
		}
             buffer = (u_int32_t *)datap  ;
             buffer++; /* skip offset */
             if (WLAN_DIAG_TYPE_CONFIG == DIAG_GET_TYPE(*buffer)) {
			if (len < 3*(sizeof(uint32_t))) {
				AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
						("len is less than expected\n"));
				return A_ERROR;
		}
                 buffer++; /* skip  */
                 if (DIAG_VERSION_INFO == DIAG_GET_ID(*buffer)) {
			 if (len < 4*(sizeof(uint32_t))) {
				AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
						("len is less than expected\n"));
				return A_ERROR;
			}
                    buffer++; /* skip  */
                    /* get payload */
                    get_version = *buffer;
                 }
             }
        }
    }
    if (dbglog_process_type == DBGLOG_PROCESS_PRINT_RAW) {
        if (!gprint_limiter) {
            AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("NOT Supported"
                            " only supports net link socket\n"));
            gprint_limiter = TRUE;
        }
        return 0;
    }

    if ( dbglog_process_type == DBGLOG_PROCESS_NET_RAW) {
         return send_diag_netlink_data((A_UINT8 *)datap,
                                          len, DIAG_TYPE_FW_MSG);
    }

#ifdef WLAN_OPEN_SOURCE
    if (dbglog_process_type == DBGLOG_PROCESS_POOL_RAW) {
        if (!gprint_limiter) {
            AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("NOT Supported"
                            " only supports net link socket\n"));
            gprint_limiter = TRUE;
        }
        return 0;
    }
#endif /* WLAN_OPEN_SOURCE */
    if (!gprint_limiter) {
        AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("NOT Supported"
                        " only supports net link socket\n"));
        gprint_limiter = TRUE;
    }
    /* Always returns zero */
    return (0);
}

/**
 * process_fw_diag_event_data - process diag events and fw messages
 * @datap: data to be processed
 * num_data: number of data chunks
 *
 * return: success
 */
static int
process_fw_diag_event_data(uint8_t *datap, uint32_t num_data)
{
	uint32_t diag_type;
	uint32_t nl_data_len; /* diag hdr + payload */
	uint32_t diag_data_len; /* each fw diag payload */
	struct wlan_diag_data *diag_data;

	while (num_data > 0) {
		diag_data = (struct wlan_diag_data *)datap;
		diag_type = WLAN_DIAG_0_TYPE_GET(diag_data->word0);
		diag_data_len = WLAN_DIAG_0_LEN_GET(diag_data->word0);
		/* Length of diag struct and len of payload */
		nl_data_len = sizeof(struct wlan_diag_data) + diag_data_len;
		if (nl_data_len > num_data) {
			AR_DEBUG_PRINTF(ATH_DEBUG_INFO,
					("processed all the messages\n"));
			return 0;
		}
		switch (diag_type) {
		case DIAG_TYPE_FW_EVENT:
			return send_fw_diag_nl_data(datap, nl_data_len,
							diag_type);
			break;
		case DIAG_TYPE_FW_LOG:
			return send_fw_diag_nl_data(datap, nl_data_len,
							diag_type);
			break;
		}
		/* Move to the next event and send to cnss-diag */
		datap += nl_data_len;
		num_data -= nl_data_len;
	}

	return 0;
}

/*
 * WMI diag data event handler, this function invoked as a CB
 * when there DIAG_DATA to be forwarded from the FW.
 */

static int
fw_diag_data_event_handler(ol_scn_t scn, u_int8_t *data, u_int32_t datalen)
{

    WMI_DIAG_DATA_CONTAINER_EVENTID_param_tlvs *param_buf;
    u_int8_t *datap;
    u_int32_t num_data; /* Total events */

    param_buf = (WMI_DIAG_DATA_CONTAINER_EVENTID_param_tlvs *) data;
    if (!param_buf) {
        AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Got NULL point message from FW\n"));
        return -1;
    }

    num_data = param_buf->num_bufp;

    datap = (u_int8_t *)param_buf->bufp;

    return process_fw_diag_event_data(datap, num_data);
}


int
dbglog_parse_debug_logs(ol_scn_t scn, u_int8_t *data, u_int32_t datalen)
{
    tp_wma_handle wma = (tp_wma_handle)scn;
    A_UINT32 count;
    A_UINT32 *buffer;
    A_UINT32 timestamp;
    A_UINT32 debugid;
    A_UINT32 moduleid;
    A_UINT16 vapid;
    A_UINT16 numargs;
    adf_os_size_t   length;
    A_UINT32 dropped;
    WMI_DEBUG_MESG_EVENTID_param_tlvs *param_buf;
    u_int8_t *datap;
    u_int32_t len;

    if (!wma) {
        AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("NULL Pointer assigned\n"));
        return -1;
    }
    /*when fw asser occurs,host can't use TLV format.*/
    if (wma->is_fw_assert) {
        datap = data;
        len = datalen;
        wma->is_fw_assert = 0;
    } else {
        param_buf = (WMI_DEBUG_MESG_EVENTID_param_tlvs *) data;
        if (!param_buf) {
            AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Get NULL point message from FW\n"));
            return -1;
        }

        datap = param_buf->bufp;
        len = param_buf->num_bufp;
    }

    dropped = *((A_UINT32 *)datap);
    if (dropped > 0) {
        AR_DEBUG_PRINTF(ATH_DEBUG_TRC , ("%d log buffers are dropped \n", dropped));
    }
    datap += sizeof(dropped);
    len -= sizeof(dropped);

    count = 0;
    buffer = (A_UINT32 *)datap;
    length = (len >> 2);

    if ( dbglog_process_type == DBGLOG_PROCESS_PRINT_RAW) {
        return dbglog_print_raw_data(buffer, length);
    }

    if (dbglog_process_type == DBGLOG_PROCESS_NET_RAW) {
        return dbglog_process_netlink_data((wmi_unified_t)wma->wmi_handle,
                                           (A_UINT8 *)buffer,
                                           len, dropped);
    }

#ifdef WLAN_OPEN_SOURCE
    if (dbglog_process_type == DBGLOG_PROCESS_POOL_RAW) {
        return dbglog_debugfs_raw_data((wmi_unified_t)wma->wmi_handle,
                                                     (A_UINT8 *)buffer, len, dropped);
    }
#endif /* WLAN_OPEN_SOURCE */

    while ((count + 2) < length) {
        timestamp = DBGLOG_GET_TIME_STAMP(buffer[count]);
        debugid = DBGLOG_GET_DBGID(buffer[count + 1]);
        moduleid = DBGLOG_GET_MODULEID(buffer[count + 1]);
        vapid = DBGLOG_GET_VDEVID(buffer[count + 1]);
        numargs = DBGLOG_GET_NUMARGS(buffer[count + 1]);

        if ((count + 2 + numargs) > length)
            return 0;

        if (moduleid >= WLAN_MODULE_ID_MAX)
            return 0;

        if (mod_print[moduleid] == NULL) {
            /* No module specific log registered use the default handler*/
            dbglog_default_print_handler(moduleid, vapid, debugid, timestamp,
                                         numargs,
                                         (((A_UINT32 *)buffer) + 2 + count));
        } else {
            if(!(mod_print[moduleid](moduleid, vapid, debugid, timestamp,
                            numargs,
                            (((A_UINT32 *)buffer) + 2 + count)))) {
                /* The message is not handled by the module specific handler*/
                dbglog_default_print_handler(moduleid, vapid, debugid, timestamp,
                        numargs,
                        (((A_UINT32 *)buffer) + 2 + count));

            }
        }

        count += numargs + 2; /* 32 bit Time stamp + 32 bit Dbg header*/
    }
    /* Always returns zero */
    return (0);
}

void
dbglog_reg_modprint(A_UINT32 mod_id, module_dbg_print printfn)
{
    if (!mod_print[mod_id]) {
        mod_print[mod_id] = printfn;
    } else {
        AR_DEBUG_PRINTF(ATH_DEBUG_INFO, ("module print is already registered for this module %d\n",
               mod_id));
    }
}

void
dbglog_sm_print(
        A_UINT32 timestamp,
        A_UINT16 vap_id,
        A_UINT16 numargs,
        A_UINT32 *args,
        const char *module_prefix,
        const char *states[], A_UINT32 num_states,
        const char *events[], A_UINT32 num_events)
{
    A_UINT8 type, arg1, arg2, arg3;
    A_UINT32 extra, extra2, extra3;

    if (numargs != 4) {
        return;
    }

    type = (args[0] >> 24) & 0xff;
    arg1 = (args[0] >> 16) & 0xff;
    arg2 = (args[0] >>  8) & 0xff;
    arg3 = (args[0] >>  0) & 0xff;

    extra = args[1];
    extra2 = args[2];
    extra3 = args[3];

    switch (type) {
    case 0: /* state transition */
        if (arg1 < num_states && arg2 < num_states) {
            dbglog_printf(timestamp, vap_id, "%s: %s => %s (%#x, %#x, %#x)",
                    module_prefix, states[arg1], states[arg2], extra, extra2, extra3);
        } else {
            dbglog_printf(timestamp, vap_id, "%s: %u => %u (%#x, %#x, %#x)",
                    module_prefix, arg1, arg2, extra, extra2, extra3);
        }
        break;
    case 1: /* dispatch event */
        if (arg1 < num_states && arg2 < num_events) {
            dbglog_printf(timestamp, vap_id, "%s: %s < %s (%#x, %#x, %#x)",
                    module_prefix, states[arg1], events[arg2], extra, extra2, extra3);
        } else {
            dbglog_printf(timestamp, vap_id, "%s: %u < %u (%#x, %#x, %#x)",
                    module_prefix, arg1, arg2, extra, extra2, extra3);
        }
        break;
    case 2: /* warning */
        switch (arg1) {
        case 0: /* unhandled event */
            if (arg2 < num_states && arg3 < num_events) {
                dbglog_printf(timestamp, vap_id, "%s: unhandled event %s in state %s (%#x, %#x, %#x)",
                        module_prefix, events[arg3], states[arg2], extra, extra2, extra3);
            } else {
                dbglog_printf(timestamp, vap_id, "%s: unhandled event %u in state %u (%#x, %#x, %#x)",
                        module_prefix, arg3, arg2, extra, extra2, extra3);
            }
            break;
        default:
            break;

        }
        break;
    }
}

A_BOOL
dbglog_sta_powersave_print_handler(
        A_UINT32 mod_id,
        A_UINT16 vap_id,
        A_UINT32 dbg_id,
        A_UINT32 timestamp,
        A_UINT16 numargs,
        A_UINT32 *args)
{
    static const char *states[] = {
        "IDLE",
        "ACTIVE",
        "SLEEP_TXQ_FLUSH",
        "SLEEP_TX_SENT",
        "PAUSE",
        "SLEEP_DOZE",
        "SLEEP_AWAKE",
        "ACTIVE_TXQ_FLUSH",
        "ACTIVE_TX_SENT",
        "PAUSE_TXQ_FLUSH",
        "PAUSE_TX_SENT",
        "IDLE_TXQ_FLUSH",
        "IDLE_TX_SENT",
    };

    static const char *events[] = {
        "START",
        "STOP",
        "PAUSE",
        "UNPAUSE",
        "TIM",
        "DTIM",
        "SEND_COMPLETE",
        "PRE_SEND",
        "RX",
        "HWQ_EMPTY",
        "PAUSE_TIMEOUT",
        "TXRX_INACTIVITY_TIMEOUT",
        "PSPOLL_TIMEOUT",
        "UAPSD_TIMEOUT",
        "DELAYED_SLEEP_TIMEOUT",
        "SEND_N_COMPLETE",
        "TIDQ_PAUSE_COMPLETE",
        "SEND_PSPOLL",
        "SEND_SPEC_PSPOLL",
    };

    switch (dbg_id) {
    case DBGLOG_DBGID_SM_FRAMEWORK_PROXY_DBGLOG_MSG:
        dbglog_sm_print(timestamp, vap_id, numargs, args, "STA PS",
                states, ARRAY_LENGTH(states), events, ARRAY_LENGTH(events));
        break;
    case PS_STA_PM_ARB_REQUEST:
        if (numargs == 4) {
            dbglog_printf(timestamp, vap_id, "PM ARB request flags=%x, last_time=%x %s: %s",
                    args[1], args[2], dbglog_get_module_str(args[0]), args[3] ? "SLEEP" : "WAKE");
        }
        break;
    case PS_STA_DELIVER_EVENT:
        if (numargs == 2) {
            dbglog_printf(timestamp, vap_id, "STA PS: %s %s",
                    (args[0] == 0 ? "PAUSE_COMPLETE" :
                     (args[0] == 1 ? "UNPAUSE_COMPLETE" :
                      (args[0] == 2 ? "SLEEP" :
                       (args[0] == 3 ? "AWAKE" : "UNKNOWN")))),
                    (args[1] == 0 ? "SUCCESS" :
                     (args[1] == 1 ? "TXQ_FLUSH_TIMEOUT" :
                      (args[1] == 2 ? "NO_ACK" :
                       (args[1] == 3 ? "RX_LEAK_TIMEOUT" :
                        (args[1] == 4 ? "PSPOLL_UAPSD_BUSY_TIMEOUT" : "UNKNOWN"))))));
        }
        break;
    case PS_STA_PSPOLL_SEQ_DONE:
        if (numargs == 5) {
            dbglog_printf(timestamp, vap_id, "STA PS poll: queue=%u comp=%u rsp=%u rsp_dur=%u fc=%x qos=%x %s",
                    args[0], args[1], args[2], args[3],
                    (args[4] >> 16) & 0xffff,
                    (args[4] >> 8) & 0xff,
                    (args[4] & 0xff) == 0 ? "SUCCESS" :
                    (args[4] & 0xff) == 1 ? "NO_ACK" :
                    (args[4] & 0xff) == 2 ? "DROPPED" :
                    (args[4] & 0xff) == 3 ? "FILTERED" :
                    (args[4] & 0xff) == 4 ? "RSP_TIMEOUT" : "UNKNOWN");
        }
        break;
    case PS_STA_COEX_MODE:
        if (numargs == 1) {
            dbglog_printf(timestamp, vap_id, "STA PS COEX MODE %s",
                    args[0] ? "ENABLED" : "DISABLED");
        }
        break;
    case PS_STA_PSPOLL_ALLOW:
        if (numargs == 3) {
            dbglog_printf(timestamp, vap_id, "STA PS-Poll %s flags=%x time=%u",
                    args[0] ? "ALLOW" : "DISALLOW", args[1], args[2]);
        }
        break;
    case PS_STA_SET_PARAM:
        if (numargs == 2) {
            struct {
                char *name;
                int is_time_param;
            } params[] = {
                { "MAX_SLEEP_ATTEMPTS", 0 },
                { "DELAYED_SLEEP", 1 },
                { "TXRX_INACTIVITY", 1 },
                { "MAX_TX_BEFORE_WAKE", 0 },
                { "UAPSD_TIMEOUT", 1 },
                { "UAPSD_CONFIG", 0 },
                { "PSPOLL_RESPONSE_TIMEOUT", 1 },
                { "MAX_PSPOLL_BEFORE_WAKE", 0 },
                { "RX_WAKE_POLICY", 0 },
                { "DELAYED_PAUSE_RX_LEAK", 1 },
                { "TXRX_INACTIVITY_BLOCKED_RETRY", 1 },
                { "SPEC_WAKE_INTERVAL", 1 },
                { "MAX_SPEC_NODATA_PSPOLL", 0 },
                { "ESTIMATED_PSPOLL_RESP_TIME", 1 },
                { "QPOWER_MAX_PSPOLL_BEFORE_WAKE", 0 },
                { "QPOWER_ENABLE", 0 },
            };
            A_UINT32 param = args[0];
            A_UINT32 value = args[1];

            if (param < ARRAY_LENGTH(params)) {
                if (params[param].is_time_param) {
                    dbglog_printf(timestamp, vap_id, "STA PS SET_PARAM %s => %u (us)",
                            params[param].name, value);
                } else {
                    dbglog_printf(timestamp, vap_id, "STA PS SET_PARAM %s => %#x",
                            params[param].name, value);
                }
            } else {
                dbglog_printf(timestamp, vap_id, "STA PS SET_PARAM %x => %#x",
                        param, value);
            }
        }
        break;
    case PS_STA_SPECPOLL_TIMER_STARTED:
        dbglog_printf(timestamp, vap_id, "SPEC Poll Timer Started: Beacon time Remaining:%d wakeup interval:%d", args[0], args[1]);
        break;
    case PS_STA_SPECPOLL_TIMER_STOPPED:
        dbglog_printf(timestamp, vap_id,
                        "SPEC Poll Timer Stopped");
        break;
    default:
        return FALSE;
    }

    return TRUE;
}
/* IBSS PS sub modules */
enum wlan_ibss_ps_sub_module {
    WLAN_IBSS_PS_SUB_MODULE_IBSS_NW_SM = 0,
    WLAN_IBSS_PS_SUB_MODULE_IBSS_SELF_PS = 1,
    WLAN_IBSS_PS_SUB_MODULE_IBSS_PEER_PS = 2,
    WLAN_IBSS_PS_SUB_MODULE_MAX = 3,
};

#define WLAN_IBSS_PS_SUB_MODULE_OFFSET  0x1E

A_BOOL
dbglog_ibss_powersave_print_handler(
        A_UINT32 mod_id,
        A_UINT16 vap_id,
        A_UINT32 dbg_id,
        A_UINT32 timestamp,
        A_UINT16 numargs,
        A_UINT32 *args)
{
    static const char *nw_states[] = {
        "WAIT_FOR_TBTT",
        "ATIM_WINDOW_PRE_BCN",
        "ATIM_WINDOW_POST_BCN",
        "OUT_OF_ATIM_WINDOW",
        "PAUSE_PENDING",
        "PAUSED",
    };

    static const char *ps_states[] = {
        "ACTIVE",
        "SLEEP_TX_SEND",
        "SLEEP_DOZE_PAUSE_PENDING",
        "SLEEP_DOZE",
        "SLEEP_AWAKE",
        "ACTIVE_TX_SEND",
        "PAUSE_TX_SEND",
        "PAUSED",
    };

    static const char *peer_ps_states[] = {
        "ACTIVE",
        "SLEEP_AWAKE",
        "SLEEP_DOZE",
        "PS_UNKNOWN",
    };

    static const char *events[] = {
        "START",
        "STOP",
        "SWBA",
        "TBTT",
        "TX_BCN_CMP",
        "SEND_COMPLETE",
        "SEND_N_COMPLETE",
        "PRE_SEND",
        "RX",
        "UC_INACTIVITY_TIMEOUT",
        "BC_INACTIVITY_TIMEOUT",
        "ATIM_WINDOW_BEGIN",
        "ATIM_WINDOW_END",
        "HWQ_EMPTY",
        "UC_ATIM_RCVD",
        "TRAFFIC_EXCHANGE_DONE",
        "POWER_SAVE_STATE_CHANGE",
        "NEW_PEER_JOIN",
        "IBSS_VDEV_PAUSE_REQUEST",
        "IBSS_VDEV_PAUSE_RESPONSE",
        "IBSS_VDEV_PAUSE_TIMEOUT",
        "IBSS_VDEV_UNPAUSE_REQUEST",
        "PS_STATE_CHANGE",
    };

    enum wlan_ibss_ps_sub_module sub_module;

    switch (dbg_id) {
    case DBGLOG_DBGID_SM_FRAMEWORK_PROXY_DBGLOG_MSG:
        sub_module = (args[1] >> WLAN_IBSS_PS_SUB_MODULE_OFFSET) & 0x3;
        switch(sub_module)
        {
            case WLAN_IBSS_PS_SUB_MODULE_IBSS_NW_SM:
                dbglog_sm_print(timestamp, vap_id, numargs, args, "IBSS PS NW",
                                nw_states, ARRAY_LENGTH(nw_states), events,
                                ARRAY_LENGTH(events));
                break;
            case WLAN_IBSS_PS_SUB_MODULE_IBSS_SELF_PS:
                dbglog_sm_print(timestamp, vap_id, numargs, args,
                                "IBSS PS Self", ps_states, ARRAY_LENGTH(ps_states),
                                events, ARRAY_LENGTH(events));
                break;
            case WLAN_IBSS_PS_SUB_MODULE_IBSS_PEER_PS:
                dbglog_sm_print(timestamp, vap_id, numargs, args,
                                "IBSS PS Peer", peer_ps_states,
                                 ARRAY_LENGTH(peer_ps_states), events,
                                 ARRAY_LENGTH(events));
                break;
            default:
                break;
        }
        break;
    case IBSS_PS_DBGID_PEER_CREATE:
        if (numargs == 2) {
            dbglog_printf(timestamp, vap_id,
                          "IBSS PS: peer alloc failed for peer ID:%u", args[0]);
        } else if (numargs == 1) {
                   dbglog_printf(timestamp, vap_id,
                                 "IBSS PS: create peer ID=%u", args[0]);
        }
        break;
    case IBSS_PS_DBGID_PEER_DELETE:
        if (numargs == 4) {
            dbglog_printf(timestamp, vap_id,
                "IBSS PS: delete peer ID=%u num_peers:%d num_sleeping_peers:%d ps_enabled_for_this_peer:%d",
                          args[0], args[1], args[2], args[3]);
        }
        break;
    case IBSS_PS_DBGID_VDEV_CREATE:
        if (numargs == 1) {
            dbglog_printf(timestamp, vap_id,
                          "IBSS PS: vdev alloc failed",
                          args[0]);
        } else if (numargs == 0) {
                   dbglog_printf(timestamp, vap_id,
                                 "IBSS PS: vdev created");
        }
        break;
    case IBSS_PS_DBGID_VDEV_DELETE:
        dbglog_printf(timestamp, vap_id, "IBSS PS: vdev deleted");
        break;

    case IBSS_PS_DBGID_VDEV_EVENT:
        if (numargs == 1) {
           if (args[0] == 5) {
               dbglog_printf(timestamp, vap_id,
                             "IBSS PS: vdev event for peer add");
           } else if (args[0] == 7) {
                      dbglog_printf(timestamp, vap_id,
                                    "IBSS PS: vdev event for peer delete");
            }
            else {
                     dbglog_printf(timestamp, vap_id,
                                   "IBSS PS: vdev event %u", args[0]);
            }
        }
        break;

    case IBSS_PS_DBGID_PEER_EVENT:
        if (numargs == 4) {
            if (args[0] == 0xFFFF) {
                dbglog_printf(timestamp, vap_id,
                              "IBSS PS: pre_send for peer:%u peer_type:%u sm_event_mask:%0x",
                              args[1], args[3], args[2]);
            } else if (args[0] == 0x20000) {
                dbglog_printf(timestamp, vap_id,
                              "IBSS PS: send_complete for peer:%u peer_type:%u sm_event_mask:%0x",
                              args[1], args[3], args[2]);
            } else if (args[0] == 0x10) {
                dbglog_printf(timestamp, vap_id,
                              "IBSS PS: send_n_complete for peer:%u peer_type:%u sm_event_mask:%0x",
                              args[1], args[3], args[2]);
            } else if (args[0] == 0x40) {
                dbglog_printf(timestamp, vap_id,
                              "IBSS PS: rx event for peer:%u peer_type:%u sm_event_mask:%0x",
                              args[1], args[3], args[2]);
            } else if (args[0] == 0x4) {
                dbglog_printf(timestamp, vap_id,
                              "IBSS PS: hw_q_empty for peer:%u peer_type:%u sm_event_mask:%0x",
                              args[1], args[3], args[2]);
            }
        }
        break;

    case IBSS_PS_DBGID_DELIVER_CAB:
        if (numargs == 4) {
            dbglog_printf(timestamp, vap_id,
                          "IBSS PS: Deliver CAB n_mpdu:%d send_flags:%0x tid_cur:%d q_depth_for_other_tid:%d",
                          args[0], args[1], args[2], args[3]);
        }
        break;

    case IBSS_PS_DBGID_DELIVER_UC_DATA:
        if (numargs == 4) {
            dbglog_printf(timestamp, vap_id,
                          "IBSS PS: Deliver UC data peer:%d tid:%d n_mpdu:%d send_flags:%0x",
                          args[0], args[1], args[2], args[3]);
        }
        break;

    case IBSS_PS_DBGID_DELIVER_UC_DATA_ERROR:
        if (numargs == 4) {
            dbglog_printf(timestamp, vap_id,
                          "IBSS PS: Deliver UC data error peer:%d tid:%d allowed_tidmask:%0x, pending_tidmap:%0x",
                          args[0], args[1], args[2], args[3]);
        }
        break;

    case IBSS_PS_DBGID_UC_INACTIVITY_TMR_RESTART:
        if (numargs == 2) {
            dbglog_printf(timestamp, vap_id,
                          "IBSS PS: UC timer restart peer:%d timer_val:%0x",
                          args[0], args[1]);
        }
        break;

    case IBSS_PS_DBGID_MC_INACTIVITY_TMR_RESTART:
        if (numargs == 1) {
            dbglog_printf(timestamp, vap_id,
                          "IBSS PS: MC timer restart timer_val:%0x",
                          args[0]);
        }
        break;

    case IBSS_PS_DBGID_NULL_TX_COMPLETION:
        if (numargs == 3) {
            dbglog_printf(timestamp, vap_id,
                          "IBSS PS: null tx completion peer:%d tx_completion_status:%d flags:%0x",
                          args[0], args[1], args[2]);
        }
        break;

    case IBSS_PS_DBGID_ATIM_TIMER_START:
        if (numargs == 4) {
            dbglog_printf(timestamp, vap_id,
                          "IBSS PS: ATIM timer start tsf:%0x %0x tbtt:%0x %0x",
                          args[0], args[1], args[2], args[3]);
        }
        break;

    case IBSS_PS_DBGID_UC_ATIM_SEND:
        if (numargs == 2) {
            dbglog_printf(timestamp, vap_id,
                          "IBSS PS: Send ATIM to peer:%d",
                          args[1]);
        } else if (numargs == 1) {
                   dbglog_printf(timestamp, vap_id,
                                 "IBSS PS: no peers to send UC ATIM",
                                 args[1]);
        }
        break;

    case IBSS_PS_DBGID_BC_ATIM_SEND:
        if (numargs == 2) {
            dbglog_printf(timestamp, vap_id,
                          "IBSS PS: MC Data, num_of_peers:%d bc_atim_sent:%d",
                          args[1], args[0]);
        }
        break;

    case IBSS_PS_DBGID_UC_TIMEOUT:
        if (numargs == 2) {
            dbglog_printf(timestamp, vap_id,
                          "IBSS PS: UC timeout for peer:%d send_null:%d",
                          args[0], args[1]);
        }
        break;

    case IBSS_PS_DBGID_PWR_COLLAPSE_ALLOWED:
        dbglog_printf(timestamp, vap_id, "IBSS PS: allow power collapse");
        break;

    case IBSS_PS_DBGID_PWR_COLLAPSE_NOT_ALLOWED:
        if (numargs == 0) {
            dbglog_printf(timestamp, vap_id,
                           "IBSS PS: power collapse not allowed by INI");
        } else if(numargs == 1) {
            dbglog_printf(timestamp, vap_id, "IBSS PS: power collapse not allowed since peer id:%d is not PS capable",
                args[0]);
        } else if(numargs == 2) {
            dbglog_printf(timestamp, vap_id, "IBSS PS: power collapse not allowed - no peers in NW");
        } else if (numargs == 3) {
                  if (args[0] == 2) {
                      dbglog_printf(timestamp, vap_id,
                                    "IBSS PS: power collapse not allowed, non-zero qdepth %d %d",
                                    args[1], args[2]);
                  } else if (args[0] == 3) {
                             dbglog_printf(timestamp, vap_id,
                                           "IBSS PS: power collapse not allowed by peer:%d peer_flags:%0x",
                                           args[1], args[2]);
                  }
        } else if (numargs == 5) {
                   dbglog_printf(timestamp, vap_id,
                                 "IBSS PS: power collapse not allowed by state m/c nw_cur_state:%d nw_next_state:%d ps_cur_state:%d flags:%0x",
                                 args[1], args[2], args[3], args[4]);
        }
        break;

    case IBSS_PS_DBGID_SET_PARAM:
        if (numargs == 2) {
            dbglog_printf(timestamp, vap_id,
                          "IBSS PS: Set Param ID:%0x Value:%0x",
                          args[0], args[1]);
        }
        break;

    case IBSS_PS_DBGID_HOST_TX_PAUSE:
        if (numargs == 1) {
            dbglog_printf(timestamp, vap_id,
                          "IBSS PS: Pausing host, vdev_map:%0x",
                          args[0]);
        }
        break;

    case IBSS_PS_DBGID_HOST_TX_UNPAUSE:
        if (numargs == 1) {
            dbglog_printf(timestamp, vap_id,
                          "IBSS PS: Unpausing host, vdev_map:%0x",
                          args[0]);
        }
        break;
    case IBSS_PS_DBGID_PS_DESC_BIN_LWM:
        if (numargs == 1) {
            dbglog_printf(timestamp, vap_id,
                          "IBSS PS: LWM, vdev_map:%0x",
                          args[0]);
        }
        break;

    case IBSS_PS_DBGID_PS_DESC_BIN_HWM:
        if (numargs == 1) {
            dbglog_printf(timestamp, vap_id,
                          "IBSS PS: HWM, vdev_map:%0x",
                          args[0]);
        }
        break;

    case IBSS_PS_DBGID_PS_KICKOUT_PEER:
        if (numargs == 3) {
            dbglog_printf(timestamp, vap_id,
                          "IBSS PS: Kickout peer id:%d atim_fail_cnt:%d status:%d",
                          args[0], args[1], args[2]);
        }
        break;

    case IBSS_PS_DBGID_SET_PEER_PARAM:
        if(numargs == 3) {
            dbglog_printf(timestamp, vap_id, "IBSS PS: Set Peer Id:%d Param ID:%0x Value:%0x",
                args[0], args[1], args[2]);
        }
        break;

    case IBSS_PS_DBGID_BCN_ATIM_WIN_MISMATCH:
        if(numargs == 4) {
            if(args[0] == 0xDEAD) {
                dbglog_printf(timestamp, vap_id, "IBSS PS: ATIM window length mismatch, our's:%d, peer id:%d, peer's:%d",
                    args[1], args[2], args[3]);
            } else if(args[0] == 0xBEEF) {
                dbglog_printf(timestamp, vap_id, "IBSS PS: Peer ATIM window length changed, peer id:%d, peer recorded atim window:%d new atim window:%d",
                    args[1], args[2], args[3]);
            }
        }
        break;

    case IBSS_PS_DBGID_RX_CHAINMASK_CHANGE:
        if(numargs == 2) {
            if(args[1] == 0x1) {
                dbglog_printf(timestamp, vap_id, "IBSS PS: Voting for low power chainmask from :%d", args[0]);
            } else {
                dbglog_printf(timestamp, vap_id, "IBSS PS: Voting for high power chainmask from :%d", args[0]);
            }
        }
        break;

    default:
        return FALSE;
    }

    return TRUE;
}

A_BOOL dbglog_ratectrl_print_handler(
        A_UINT32 mod_id,
        A_UINT16 vap_id,
        A_UINT32 dbg_id,
        A_UINT32 timestamp,
        A_UINT16 numargs,
        A_UINT32 *args)
{
    switch (dbg_id) {
        case RATECTRL_DBGID_ASSOC:
           dbglog_printf(timestamp, vap_id, "RATE: ChainMask %d, phymode %d, ni_flags 0x%08x, vht_mcs_set 0x%04x, ht_mcs_set 0x%04x",
              args[0], args[1], args[2], args[3], args[4]);
           break;
        case RATECTRL_DBGID_NSS_CHANGE:
           dbglog_printf(timestamp, vap_id, "RATE: NEW NSS %d\n", args[0]);
           break;
        case RATECTRL_DBGID_CHAINMASK_ERR:
           dbglog_printf(timestamp, vap_id, "RATE: Chainmask ERR %d %d %d\n",
               args[0], args[1], args[2]);
           break;
        case RATECTRL_DBGID_UNEXPECTED_FRAME:
           dbglog_printf(timestamp, vap_id, "RATE: WARN1: rate %d flags 0x%08x\n", args[0], args[1]);
           break;
        case RATECTRL_DBGID_WAL_RCQUERY:
            dbglog_printf(timestamp, vap_id, "ratectrl_dbgid_wal_rcquery [rix1 %d rix2 %d rix3 %d proberix %d ppduflag 0x%x] ",
                    args[0], args[1], args[2], args[3], args[4]);
            break;
        case RATECTRL_DBGID_WAL_RCUPDATE:
            dbglog_printf(timestamp, vap_id, "ratectrl_dbgid_wal_rcupdate [numelems %d ppduflag 0x%x] ",
                    args[0], args[1]);
			break;
		case RATECTRL_DBGID_GTX_UPDATE:
		{
										  switch (args[0]) {
										  case 255:
											  dbglog_printf(timestamp, vap_id, "GtxInitPwrCfg [bw[last %d|cur %d] rtcode 0x%x tpc %d tpc_init_pwr_cfg %d] ",
												  args[1] >> 8, args[1] & 0xff, args[2], args[3], args[4]);
											  break;
										  case 254:
											  dbglog_printf(timestamp, vap_id, "gtx_cfg_addr [RTMask0@0x%x PERThreshold@0x%x gtxTPCMin@0x%x userGtxMask@0x%x] ",
												  args[1], args[2], args[3], args[4]);
											  break;
										  default:
											  dbglog_printf(timestamp, vap_id, "gtx_update [act %d bw %d rix 0x%x tpc %d per %d lastrssi %d] ",
												  args[0], args[1], args[2], args[3], args[4], args[5]);
										  }
		}
			break;
    }
    return TRUE;
}

A_BOOL dbglog_ani_print_handler(
        A_UINT32 mod_id,
        A_UINT16 vap_id,
        A_UINT32 dbg_id,
        A_UINT32 timestamp,
        A_UINT16 numargs,
        A_UINT32 *args)
{
  switch (dbg_id) {
   case ANI_DBGID_ENABLE:
        dbglog_printf(timestamp, vap_id,
        "ANI Enable:  %d", args[0]);
        break;
   case ANI_DBGID_POLL:
        dbglog_printf(timestamp, vap_id,
        "ANI POLLING: AccumListenTime %d ListenTime %d ofdmphyerr %d cckphyerr %d",
                args[0], args[1], args[2],args[3]);
        break;
   case ANI_DBGID_RESTART:
        dbglog_printf(timestamp, vap_id,"ANI Restart");
        break;
   case ANI_DBGID_CURRENT_LEVEL:
        dbglog_printf(timestamp, vap_id,
        "ANI CURRENT LEVEL ofdm level %d cck level %d",args[0],args[1]);
        break;
   case ANI_DBGID_OFDM_LEVEL:
        dbglog_printf(timestamp, vap_id,
        "ANI UPDATE ofdm level %d firstep %d firstep_low %d cycpwr_thr %d self_corr_low %d",
        args[0], args[1],args[2],args[3],args[4]);
        break;
   case ANI_DBGID_CCK_LEVEL:
        dbglog_printf(timestamp, vap_id,
                "ANI  UPDATE cck level %d firstep %d firstep_low %d mrc_cck %d",
                args[0],args[1],args[2],args[3]);
        break;
   case ANI_DBGID_CONTROL:
        dbglog_printf(timestamp, vap_id,
                "ANI CONTROL ofdmlevel %d ccklevel %d\n",
                args[0]);

        break;
   case ANI_DBGID_OFDM_PARAMS:
        dbglog_printf(timestamp, vap_id,
                "ANI ofdm_control firstep %d cycpwr %d\n",
                args[0],args[1]);
        break;
   case ANI_DBGID_CCK_PARAMS:
        dbglog_printf(timestamp, vap_id,
                "ANI cck_control mrc_cck %d barker_threshold %d\n",
                args[0],args[1]);
        break;
   case ANI_DBGID_RESET:
        dbglog_printf(timestamp, vap_id,
                "ANI resetting resetflag %d resetCause %8x channel index %d",
                args[0],args[1],args[2]);
        break;
   case ANI_DBGID_SELF_CORR_LOW:
        dbglog_printf(timestamp, vap_id,"ANI self_corr_low %d",args[0]);
        break;
   case ANI_DBGID_FIRSTEP:
        dbglog_printf(timestamp, vap_id,"ANI firstep %d firstep_low %d",
            args[0],args[1]);
        break;
   case ANI_DBGID_MRC_CCK:
        dbglog_printf(timestamp, vap_id,"ANI mrc_cck %d",args[0]);
        break;
   case ANI_DBGID_CYCPWR:
        dbglog_printf(timestamp, vap_id,"ANI cypwr_thresh %d",args[0]);
        break;
   case ANI_DBGID_POLL_PERIOD:
        dbglog_printf(timestamp, vap_id,"ANI Configure poll period to %d",args[0]);
        break;
   case ANI_DBGID_LISTEN_PERIOD:
        dbglog_printf(timestamp, vap_id,"ANI Configure listen period to %d",args[0]);
        break;
   case ANI_DBGID_OFDM_LEVEL_CFG:
        dbglog_printf(timestamp, vap_id,"ANI Configure ofdm level to %d",args[0]);
        break;
   case ANI_DBGID_CCK_LEVEL_CFG:
        dbglog_printf(timestamp, vap_id,"ANI Configure cck level to %d",args[0]);
        break;
   default:
        dbglog_printf(timestamp, vap_id,"ANI arg1 %d arg2 %d arg3 %d",
              args[0],args[1],args[2]);
        break;
  }
    return TRUE;
}

A_BOOL
dbglog_ap_powersave_print_handler(
        A_UINT32 mod_id,
        A_UINT16 vap_id,
        A_UINT32 dbg_id,
        A_UINT32 timestamp,
        A_UINT16 numargs,
        A_UINT32 *args)
{
    switch (dbg_id) {
    case AP_PS_DBGID_UPDATE_TIM:
        if (numargs == 2) {
            dbglog_printf(timestamp, vap_id,
                    "AP PS: TIM update AID=%u %s",
                    args[0], args[1] ? "set" : "clear");
        }
        break;
    case AP_PS_DBGID_PEER_STATE_CHANGE:
        if (numargs == 2) {
            dbglog_printf(timestamp, vap_id,
                    "AP PS: AID=%u power save %s",
                    args[0], args[1] ? "enabled" : "disabled");
        }
        break;
    case AP_PS_DBGID_PSPOLL:
        if (numargs == 3) {
            dbglog_printf(timestamp, vap_id,
                    "AP PS: AID=%u pspoll response tid=%u flags=%x",
                    args[0], args[1], args[2]);
        }
        break;
    case AP_PS_DBGID_PEER_CREATE:
        if (numargs == 1) {
            dbglog_printf(timestamp, vap_id,
                    "AP PS: create peer AID=%u", args[0]);
        }
        break;
    case AP_PS_DBGID_PEER_DELETE:
        if (numargs == 1) {
            dbglog_printf(timestamp, vap_id,
                    "AP PS: delete peer AID=%u", args[0]);
        }
        break;
    case AP_PS_DBGID_VDEV_CREATE:
        dbglog_printf(timestamp, vap_id, "AP PS: vdev create");
        break;
    case AP_PS_DBGID_VDEV_DELETE:
        dbglog_printf(timestamp, vap_id, "AP PS: vdev delete");
        break;
    case AP_PS_DBGID_SYNC_TIM:
        if (numargs == 3) {
            dbglog_printf(timestamp, vap_id,
                    "AP PS: AID=%u advertised=%#x buffered=%#x", args[0], args[1], args[2]);
        }
        break;
    case AP_PS_DBGID_NEXT_RESPONSE:
        if (numargs == 4) {
            dbglog_printf(timestamp, vap_id,
                    "AP PS: AID=%u select next response %s%s%s", args[0],
                    args[1] ? "(usp active) " : "",
                    args[2] ? "(pending usp) " : "",
                    args[3] ? "(pending poll response)" : "");
        }
        break;
    case AP_PS_DBGID_START_SP:
        if (numargs == 3) {
            dbglog_printf(timestamp, vap_id,
                    "AP PS: AID=%u START SP tsf=%#x (%u)",
                    args[0], args[1], args[2]);
        }
        break;
    case AP_PS_DBGID_COMPLETED_EOSP:
        if (numargs == 3) {
            dbglog_printf(timestamp, vap_id,
                    "AP PS: AID=%u EOSP eosp_tsf=%#x trigger_tsf=%#x",
                    args[0], args[1], args[2]);
        }
        break;
    case AP_PS_DBGID_TRIGGER:
        if (numargs == 4) {
            dbglog_printf(timestamp, vap_id,
                    "AP PS: AID=%u TRIGGER tsf=%#x %s%s", args[0], args[1],
                    args[2] ? "(usp active) " : "",
                    args[3] ? "(send_n in progress)" : "");
        }
        break;
    case AP_PS_DBGID_DUPLICATE_TRIGGER:
        if (numargs == 4) {
            dbglog_printf(timestamp, vap_id,
                    "AP PS: AID=%u DUP TRIGGER tsf=%#x seq=%u ac=%u",
                    args[0], args[1], args[2], args[3]);
        }
        break;
    case AP_PS_DBGID_UAPSD_RESPONSE:
        if (numargs == 5) {
            dbglog_printf(timestamp, vap_id,
                    "AP PS: AID=%u UAPSD response tid=%u, n_mpdu=%u flags=%#x max_sp=%u current_sp=%u",
                    args[0], args[1], args[2], args[3], (args[4] >> 16) & 0xffff, args[4] & 0xffff);
        }
        break;
    case AP_PS_DBGID_SEND_COMPLETE:
        if (numargs == 5) {
            dbglog_printf(timestamp, vap_id,
                    "AP PS: AID=%u SEND_COMPLETE fc=%#x qos=%#x %s%s",
                    args[0], args[1], args[2],
                    args[3] ? "(usp active) " : "",
                    args[4] ? "(pending poll response)" : "");
        }
        break;
    case AP_PS_DBGID_SEND_N_COMPLETE:
        if (numargs == 3) {
            dbglog_printf(timestamp, vap_id,
                    "AP PS: AID=%u SEND_N_COMPLETE %s%s",
                    args[0],
                    args[1] ? "(usp active) " : "",
                    args[2] ? "(pending poll response)" : "");
        }
        break;
    case AP_PS_DBGID_DETECT_OUT_OF_SYNC_STA:
        if (numargs == 4) {
            dbglog_printf(timestamp, vap_id,
                    "AP PS: AID=%u detected out-of-sync now=%u tx_waiting=%u txq_depth=%u",
                   args[0], args[1], args[2], args[3]);
        }
        break;
    case AP_PS_DBGID_DELIVER_CAB:
        if (numargs == 4) {
            dbglog_printf(timestamp, vap_id,
                    "AP PS: CAB %s n_mpdus=%u, flags=%x, extra=%u",
                   (args[0] == 17) ? "MGMT" : "DATA", args[1], args[2], args[3]);
        }
        break;
    default:
        return FALSE;
    }

    return TRUE;
}

A_BOOL
dbglog_wal_print_handler(
        A_UINT32 mod_id,
        A_UINT16 vap_id,
        A_UINT32 dbg_id,
        A_UINT32 timestamp,
        A_UINT16 numargs,
        A_UINT32 *args)
{
    static const char *states[] = {
        "ACTIVE",
        "WAIT",
        "WAIT_FILTER",
        "PAUSE",
        "PAUSE_SEND_N",
        "BLOCK",
    };

    static const char *events[] = {
        "PAUSE",
        "PAUSE_FILTER",
        "UNPAUSE",

        "BLOCK",
        "BLOCK_FILTER",
        "UNBLOCK",

        "HWQ_EMPTY",
        "ALLOW_N",
    };

#define WAL_VDEV_TYPE(type)     \
    (type == 0 ? "AP" :       \
    (type == 1 ? "STA" :        \
    (type == 2 ? "IBSS" :         \
    (type == 2 ? "MONITOR" :    \
     "UNKNOWN"))))

#define WAL_SLEEP_STATE(state)      \
    (state == 1 ? "NETWORK SLEEP" : \
    (state == 2 ? "AWAKE" :         \
    (state == 3 ? "SYSTEM SLEEP" :  \
    "UNKNOWN")))

    switch (dbg_id) {
    case DBGLOG_DBGID_SM_FRAMEWORK_PROXY_DBGLOG_MSG:
        dbglog_sm_print(timestamp, vap_id, numargs, args, "TID PAUSE",
                states, ARRAY_LENGTH(states), events, ARRAY_LENGTH(events));
        break;
    case WAL_DBGID_SET_POWER_STATE:
        if (numargs == 3) {
            dbglog_printf(timestamp, vap_id,
                    "WAL %s => %s, req_count=%u",
                    WAL_SLEEP_STATE(args[0]), WAL_SLEEP_STATE(args[1]),
                    args[2]);
        }
        break;
    case WAL_DBGID_CHANNEL_CHANGE_FORCE_RESET:
        if (numargs == 4) {
            dbglog_printf(timestamp, vap_id,
                    "WAL channel change (force reset) freq=%u, flags=%u mode=%u rx_ok=%u tx_ok=%u",
                    args[0] & 0x0000ffff, (args[0] & 0xffff0000) >> 16, args[1],
                    args[2], args[3]);
        }
        break;
    case WAL_DBGID_CHANNEL_CHANGE:
        if (numargs == 2) {
            dbglog_printf(timestamp, vap_id,
                    "WAL channel change freq=%u, mode=%u flags=%u rx_ok=1 tx_ok=1",
                    args[0] & 0x0000ffff, (args[0] & 0xffff0000) >> 16, args[1]);
        }
        break;
    case WAL_DBGID_VDEV_START:
        if (numargs == 1) {
            dbglog_printf(timestamp, vap_id, "WAL %s vdev started",
                    WAL_VDEV_TYPE(args[0]));
        }
        break;
    case WAL_DBGID_VDEV_STOP:
        dbglog_printf(timestamp, vap_id, "WAL %s vdev stopped",
                WAL_VDEV_TYPE(args[0]));
        break;
    case WAL_DBGID_VDEV_UP:
        dbglog_printf(timestamp, vap_id, "WAL %s vdev up, count=%u",
                WAL_VDEV_TYPE(args[0]), args[1]);
        break;
    case WAL_DBGID_VDEV_DOWN:
        dbglog_printf(timestamp, vap_id, "WAL %s vdev down, count=%u",
                WAL_VDEV_TYPE(args[0]), args[1]);
        break;
    case WAL_DBGID_TX_MGMT_DESCID_SEQ_TYPE_LEN:
        dbglog_printf(timestamp, vap_id, "WAL Tx Mgmt frame desc_id=0x%x, seq=0x%x, type=0x%x, len=0x%x islocal=0x%x",
                args[0], args[1], args[2], (args[3] & 0xffff0000) >> 16, args[3] & 0x0000ffff);
        break;
    case WAL_DBGID_TX_MGMT_COMP_DESCID_STATUS:
        dbglog_printf(timestamp, vap_id, "WAL Tx Mgmt frame completion desc_id=0x%x, status=0x%x, islocal=0x%x",
                args[0], args[1], args[2]);
        break;
    case WAL_DBGID_TX_DATA_MSDUID_SEQ_TYPE_LEN:
        dbglog_printf(timestamp, vap_id, "WAL Tx Data frame msdu_id=0x%x, seq=0x%x, type=0x%x, len=0x%x",
                args[0], args[1], args[2], args[3]);
        break;
    case WAL_DBGID_TX_DATA_COMP_MSDUID_STATUS:
        dbglog_printf(timestamp, vap_id, "WAL Tx Data frame completion desc_id=0x%x, status=0x%x, seq=0x%x",
                args[0], args[1], args[2]);
        break;
    case WAL_DBGID_RESET_PCU_CYCLE_CNT:
        dbglog_printf(timestamp, vap_id, "WAL PCU cycle counter value at reset:%x", args[0]);
        break;
    case WAL_DBGID_TX_DISCARD:
        dbglog_printf(timestamp, vap_id, "WAL Tx enqueue discard msdu_id=0x%x", args[0]);
        break;
    case WAL_DBGID_SET_HW_CHAINMASK:
        dbglog_printf(timestamp, vap_id, "WAL_DBGID_SET_HW_CHAINMASK "
                                         "pdev=%d, txchain=0x%x, rxchain=0x%x",
                args[0], args[1], args[2]);
        break;
    case WAL_DBGID_SET_HW_CHAINMASK_TXRX_STOP_FAIL:
        dbglog_printf(timestamp, vap_id, "WAL_DBGID_SET_HW_CHAINMASK_TXRX_STOP_FAIL rxstop=%d, txstop=%d",
                args[0], args[1]);
        break;
    case WAL_DBGID_GET_HW_CHAINMASK:
        dbglog_printf(timestamp, vap_id, "WAL_DBGID_GET_HW_CHAINMASK "
                                         "txchain=0x%x, rxchain=0x%x",
                args[0], args[1]);
        break;
    case WAL_DBGID_SMPS_DISABLE:
        dbglog_printf(timestamp, vap_id, "WAL_DBGID_SMPS_DISABLE");
        break;
    case WAL_DBGID_SMPS_ENABLE_HW_CNTRL:
        dbglog_printf(timestamp, vap_id, "WAL_DBGID_SMPS_ENABLE_HW_CNTRL low_pwr_mask=0x%x, high_pwr_mask=0x%x",
                args[0], args[1]);
        break;
    case WAL_DBGID_SMPS_SWSEL_CHAINMASK:
        dbglog_printf(timestamp, vap_id, "WAL_DBGID_SMPS_SWSEL_CHAINMASK low_pwr=0x%x, chain_mask=0x%x",
                args[0], args[1]);
    break;
    default:
        return FALSE;
    }

    return TRUE;
}

A_BOOL
dbglog_scan_print_handler(
        A_UINT32 mod_id,
        A_UINT16 vap_id,
        A_UINT32 dbg_id,
        A_UINT32 timestamp,
        A_UINT16 numargs,
        A_UINT32 *args)
{
    static const char *states[] = {
        "IDLE",
        "BSSCHAN",
        "WAIT_FOREIGN_CHAN",
        "FOREIGN_CHANNEL",
        "TERMINATING"
    };

    static const char *events[] = {
        "REQ",
        "STOP",
        "BSSCHAN",
        "FOREIGN_CHAN",
        "CHECK_ACTIVITY",
        "REST_TIME_EXPIRE",
        "DWELL_TIME_EXPIRE",
        "PROBE_TIME_EXPIRE",
    };

    switch (dbg_id) {
    case DBGLOG_DBGID_SM_FRAMEWORK_PROXY_DBGLOG_MSG:
        dbglog_sm_print(timestamp, vap_id, numargs, args, "SCAN",
                states, ARRAY_LENGTH(states), events, ARRAY_LENGTH(events));
        break;
    default:
        return FALSE;
    }

    return TRUE;
}

A_BOOL dbglog_coex_print_handler(
        A_UINT32 mod_id,
        A_UINT16 vap_id,
        A_UINT32 dbg_id,
        A_UINT32 timestamp,
        A_UINT16 numargs,
        A_UINT32 * args)
{
    A_UINT8 i;
    char * dbg_id_str;

    static const char * wlan_rx_xput_status[] = {
        "WLAN_XPUT_NORMAL",
        "WLAN_XPUT_UNDER_THRESH",
        "WLAN_XPUT_CRITICAL",
        "WLAN_XPUT_RECOVERY_TIMEOUT",
    };

    static const char * coex_sched_req[] = {
        "SCHED_REQ_NEXT",
        "SCHED_REQ_BT",
        "SCHED_REQ_WLAN",
        "SCHED_REQ_POSTPAUSE",
        "SCHED_REQ_UNPAUSE",
    };

    static const char * coex_sched_type[] = {
        "SCHED_NONE",
        "SCHED_WLAN",
        "SCHED_BT",
        "SCHED_WLAN_PAUSE",
        "SCHED_WLAN_POSTPAUSE",
        "SCHED_WLAN_UNPAUSE",
        "COEX_SCHED_MWS",
    };

    static const char * coex_trf_mgmt_type[] = {
        "TRF_MGMT_FREERUN",
        "TRF_MGMT_SHAPE_PM",
        "TRF_MGMT_SHAPE_PSP",
        "TRF_MGMT_SHAPE_S_CTS",
        "TRF_MGMT_SHAPE_OCS",
        "TRF_MGMT_SHAPE_FIXED_TIME",
        "TRF_MGMT_SHAPE_NOA",
        "TRF_MGMT_SHAPE_OCS_CRITICAL",
        "TRF_MGMT_NONE",
    };

    static const char * coex_system_status[] = {
        "ALL_OFF",
        "BTCOEX_NOT_REQD",
        "WLAN_IS_IDLE",
        "EXECUTE_SCHEME",
        "BT_FULL_CONCURRENCY",
        "WLAN_SLEEPING",
        "WLAN_IS_PAUSED",
        "WAIT_FOR_NEXT_ACTION",
        "SOC_WAKE",
    };

    static const char * wlan_rssi_type[] = {
        "LOW_RSSI",
        "MID_RSSI",
        "HI_RSSI",
        "INVALID_RSSI",
    };

    static const char * coex_bt_scheme[] = {
        "IDLE_CTRL",
        "ACTIVE_ASYNC_CTRL",
        "PASSIVE_SYNC_CTRL",
        "ACTIVE_SYNC_CTRL",
        "DEFAULT_CTRL",
        "CONCURRENCY_CTRL",
    };

    static const char * wal_peer_rx_rate_stats_event_sent[] = {
        "PR_RX_EVT_SENT_NONE",
        "PR_RX_EVT_SENT_LOWER",
        "PR_RX_EVT_SENT_UPPER",
    };

    static const char * wlan_psp_stimulus[] = {
        "ENTRY",
        "EXIT",
        "PS_READY",
        "PS_NOT_READY",
        "RX_MORE_DATA_RCVD",
        "RX_NO_MORE_DATA_RCVD",
        "TX_DATA_COMPLT",
        "TX_COMPLT",
        "TIM_SET",
        "REQ",
        "DONE_SUCCESS",
        "DONE_NO_PS_POLL_ACK",
        "DONE_RESPONSE_TMO",
        "DONE_DROPPED",
        "DONE_FILTERED",
        "WLAN_START",
        "NONWLAN_START",
        "NONWLAN_INTVL_UPDATE",
        "NULL_TX",
        "NULL_TX_COMPLT",
        "BMISS_FIRST",
        "NULL_TX_FAIL",
        "RX_NO_MORE_DATA_DATAFRM",
    };

    static const char * coex_pspoll_state[] = {
        "STATE_DISABLED",
        "STATE_NOT_READY",
        "STATE_ENABLED",
        "STATE_READY",
        "STATE_TX_STATUS",
        "STATE_RX_STATUS",
    };

    static const char * coex_scheduler_interval[] = {
        "COEX_SCHED_NONWLAN_INT",
        "COEX_SCHED_WLAN_INT",
    };

    static const char * wlan_weight[] = {
        "BT_COEX_BASE",
        "BT_COEX_LOW",
        "BT_COEX_MID",
        "BT_COEX_MID_NONSYNC",
        "BT_COEX_HI_NONVOICE",
        "BT_COEX_HI",
        "BT_COEX_CRITICAL",
    };

    static const char * wlan_power_state[] = {
        "SLEEP",
        "AWAKE",
        "FULL_SLEEP",
    };

    static const char * coex_psp_error_type[] = {
        "DISABLED_STATE",
        "VDEV_NULL",
        "COEX_PSP_ENTRY",
        "ZERO_INTERVAL",
        "COEX_PSP_EXIT",
        "READY_DISABLED",
        "READY_NOT_DISABLED",
        "POLL_PKT_DROPPED",
        "SET_TIMER_PARAM",
    };

    static const char * wlan_phymode[] = {
        "A",
        "G",
        "B",
        "G_ONLY",
        "NA_HT20",
        "NG_HT20",
        "NA_HT40",
        "NG_HT40",
        "AC_VHT20",
        "AC_VHT40",
        "AC_VHT80",
        "AC_VHT20_2G",
        "AC_VHT40_2G",
        "AC_VHT80_2G",
        "UNKNOWN",
    };

    static const char * wlan_curr_band[] = {
        "2G",
        "5G",
    };

    dbg_id_str = dbglog_get_msg(mod_id, dbg_id);

    switch (dbg_id) {
        case COEX_SYSTEM_UPDATE:
            if (numargs == 1 && args[0] < 9) {
                dbglog_printf(timestamp, vap_id, "%s: %s", dbg_id_str, coex_system_status[args[0]]);
            } else if (numargs >= 5 && args[0] < 9 && args[2] < 9) {
                dbglog_printf(timestamp, vap_id, "%s: %s, WlanSysState(0x%x), %s, NumChains(%u), AggrLimit(%u)",
                    dbg_id_str, coex_system_status[args[0]], args[1], coex_trf_mgmt_type[args[2]], args[3], args[4]);
            } else {
                return FALSE;
            }
            break;
        case COEX_SCHED_START:
            if (numargs >= 5 && args[0] < 5 && args[2] < 9 && args[3] < 4 && args[4] < 4) {
                if (args[1] == 0xffffffff) {
                    dbglog_printf(timestamp, vap_id, "%s: %s, DETERMINE_DURATION, %s, %s, %s",
                        dbg_id_str, coex_sched_req[args[0]], coex_trf_mgmt_type[args[2]], wlan_rx_xput_status[args[3]], wlan_rssi_type[args[4]]);
                } else {
                    dbglog_printf(timestamp, vap_id, "%s: %s, IntvlDur(%u), %s, %s, %s",
                        dbg_id_str, coex_sched_req[args[0]], args[1], coex_trf_mgmt_type[args[2]], wlan_rx_xput_status[args[3]], wlan_rssi_type[args[4]]);
                }
            } else {
                return FALSE;
            }
            break;
        case COEX_SCHED_RESULT:
            if (numargs >= 5 && args[0] < 5 && args[1] < 9 && args[2] < 9) {
                dbglog_printf(timestamp, vap_id, "%s: %s, %s, %s, CoexMgrPolicy(%u), IdleOverride(%u)",
                    dbg_id_str, coex_sched_req[args[0]], coex_trf_mgmt_type[args[1]], coex_trf_mgmt_type[args[2]], args[3], args[4]);
            } else {
                return FALSE;
            }
            break;
        case COEX_BT_SCHEME:
            if (numargs >= 1 && args[0] < 6) {
                dbglog_printf(timestamp, vap_id, "%s: %s", dbg_id_str, coex_bt_scheme[args[0]]);
            } else {
                return FALSE;
            }
            break;
        case COEX_TRF_FREERUN:
            if (numargs >= 5 && args[0] < 7) {
                dbglog_printf(timestamp, vap_id, "%s: %s, AllocatedBtIntvls(%u), BtIntvlCnt(%u), AllocatedWlanIntvls(%u), WlanIntvlCnt(%u)",
                    dbg_id_str, coex_sched_type[args[0]], args[1], args[2], args[3], args[4]);
            } else {
                return FALSE;
            }
            break;
        case COEX_TRF_SHAPE_PM: // used by ocs now
            if (numargs >= 3) {
                dbglog_printf(timestamp, vap_id, "%s: IntvlLength(%u), BtDuration(%u), WlanDuration(%u)",
                    dbg_id_str, args[0], args[1], args[2]);
            } else {
                return FALSE;
            }
            break;
        case COEX_SYSTEM_MONITOR:
            if (numargs >= 5 && args[1] < 4 && args[4] < 4) {
                dbglog_printf(timestamp, vap_id, "%s: WlanRxCritical(%u), %s, MinDirectRxRate(%u), MonitorActiveNum(%u), %s",
                    dbg_id_str, args[0], wlan_rx_xput_status[args[1]], args[2], args[3], wlan_rssi_type[args[4]]);
            } else {
                return FALSE;
            }
            break;
        case COEX_RX_RATE:
            if (numargs >= 5 && args[4] < 3) {
                dbglog_printf(timestamp, vap_id, "%s: NumUnderThreshPeers(%u), MinDirectRate(%u), LastRateSample(%u), DeltaT(%u), %s",
                    dbg_id_str, args[0], args[1], args[2], args[3], wal_peer_rx_rate_stats_event_sent[args[4]]);
            } else {
                return FALSE;
            }
            break;
        case COEX_WLAN_INTERVAL_START:
            if (numargs >= 5) {
                dbglog_printf(timestamp, vap_id, "%s: WlanIntvlCnt(%u), Duration(%u), Weight(%u), BaseIdleOverride(%u), WeightMat[0](0x%x)",
                    dbg_id_str, args[0], args[1], args[2], args[3], args[4]);
            } else {
                return FALSE;
            }
            break;
        case COEX_WLAN_POSTPAUSE_INTERVAL_START:
            if (numargs >= 4) {
                dbglog_printf(timestamp, vap_id, "%s: WlanPostPauseIntvlCnt(%u), XputMonitorActiveNum(%u), Duration(%u), Weight(%u)",
                    dbg_id_str, args[0], args[1], args[2], args[3]);
            } else {
                return FALSE;
            }
            break;
        case COEX_BT_INTERVAL_START:
            if (numargs >= 5) {
                dbglog_printf(timestamp, vap_id, "%s: BtIntvlCnt(%u), Duration(%u), Weight(%u), BaseIdleOverride(%u), WeightMat[0](0x%x), ",
                    dbg_id_str, args[0], args[1], args[2], args[3], args[4]);
            } else {
                return FALSE;
            }
            break;
        case COEX_POWER_CHANGE:
            if (numargs >= 3 && args[1] < 3 && args[2] < 3) {
                dbglog_printf(timestamp, vap_id, "%s: Event(0x%x) %s->%s",
                    dbg_id_str, args[0], wlan_power_state[args[1]], wlan_power_state[args[2]]);
            } else {
                return FALSE;
            }
            break;
        case COEX_CHANNEL_CHANGE:
            if (numargs >= 5 && args[3] < 2 && args[4] < 15) {
                dbglog_printf(timestamp, vap_id, "%s: %uMhz->%uMhz, WlanSysState(0x%x), CurrBand(%s), PhyMode(%s)",
                    dbg_id_str, args[0], args[1], args[2], wlan_curr_band[args[3]], wlan_phymode[args[4]]);
            } else {
                return FALSE;
            }
            break;
        case COEX_PSP_MGR_ENTER:
            if (numargs >= 5 && args[0] < 23 && args[1] < 6 && args[3] < 2) {
                dbglog_printf(timestamp, vap_id, "%s: %s, %s, PsPollAvg(%u), %s, CurrT(%u)",
                    dbg_id_str, wlan_psp_stimulus[args[0]], coex_pspoll_state[args[1]], args[2], coex_scheduler_interval[args[3]], args[4]);
            } else {
                return FALSE;
            }
            break;
        //Translate following into decimal
        case COEX_SINGLECHAIN_DBG_1:
        case COEX_SINGLECHAIN_DBG_2:
        case COEX_SINGLECHAIN_DBG_3:
        case COEX_MULTICHAIN_DBG_1:
        case COEX_MULTICHAIN_DBG_2:
        case COEX_MULTICHAIN_DBG_3:
        case BTCOEX_DBG_MCI_1:
        case BTCOEX_DBG_MCI_2:
        case BTCOEX_DBG_MCI_3:
        case BTCOEX_DBG_MCI_4:
        case BTCOEX_DBG_MCI_5:
        case BTCOEX_DBG_MCI_6:
        case BTCOEX_DBG_MCI_7:
        case BTCOEX_DBG_MCI_8:
        case BTCOEX_DBG_MCI_9:
        case BTCOEX_DBG_MCI_10:

            if (numargs > 0) {
                dbglog_printf_no_line_break(timestamp, vap_id, "%s: %u",
                        dbg_id_str, args[0]);
                for (i = 1; i < numargs; i++) {
                    printk(", %u", args[i]);
                }
                printk("\n");
            } else {
                return FALSE;
            }
            break;
        case COEX_LinkID:
            if (numargs >= 4) {
                if (args[0]) {  //Add profile
                    dbglog_printf(timestamp, vap_id, "%s Alloc: LocalID(%u), RemoteID(%u), MinFreeLocalID(%u)",
                        dbg_id_str, args[1], args[2], args[3]);
                } else {  //Remove profile
                    dbglog_printf(timestamp, vap_id, "%s Dealloc: LocalID(%u), RemoteID(%u), MinFreeLocalID(%u)",
                        dbg_id_str, args[1], args[2], args[3]);
                }
            } else {
                return FALSE;
            }
            break;
        case COEX_PSP_MGR_RESULT:
            if (numargs >= 5 && args[0] < 6) {
                dbglog_printf(timestamp, vap_id, "%s: %s, PsPollAvg(%u), EstimationOverrun(%u), EstimationUnderun(%u), NotReadyErr(%u)",
                    dbg_id_str, coex_pspoll_state[args[0]], args[1], args[2], args[3], args[4]);
            } else {
                return FALSE;
            }
            break;
        case COEX_TRF_SHAPE_PSP:
            if (numargs >= 5 && args[0] < 7 && args[1] < 7) {
                    dbglog_printf(timestamp, vap_id, "%s: %s, %s, Dur(%u), BtTriggerRecvd(%u), PspWlanCritical(%u)",
                        dbg_id_str, coex_sched_type[args[0]], wlan_weight[args[1]], args[2], args[3], args[4]);
            } else {
                return FALSE;
            }
            break;
        case COEX_PSP_SPEC_POLL:
            if (numargs >= 5) {
                dbglog_printf(timestamp, vap_id, "%s: PsPollSpecEna(%u), Count(%u), NextTS(%u), AllowSpecPsPollTx(%u), Intvl(%u)",
                    dbg_id_str, args[0], args[1], args[2], args[3], args[4]);
            } else {
                return FALSE;
            }
            break;
        case COEX_PSP_READY_STATE:
            if (numargs >= 5) {
                dbglog_printf(timestamp, vap_id, "%s: T2NonWlan(%u), CoexSchedulerEndTS(%u), MoreData(%u), PSPRespExpectedTS(%u), NonWlanIdleT(%u)",
                    dbg_id_str, args[0], args[1], args[2], args[3], args[4]);
            } else {
                return FALSE;
            }
            break;
        case COEX_PSP_NONWLAN_INTERVAL:
            if (numargs >= 4) {
                dbglog_printf(timestamp, vap_id, "%s: NonWlanBaseIntvl(%u), NonWlanIdleT(%u), PSPSpecIntvl(%u), ApRespTimeout(%u)",
                    dbg_id_str, args[0], args[1], args[2], args[3]);
            } else {
                return FALSE;
            }
            break;
        case COEX_PSP_ERROR:
            if (numargs >= 1 && args[0] < 9) {
                dbglog_printf_no_line_break(timestamp, vap_id, "%s: %s",
                    dbg_id_str, coex_psp_error_type[args[0]]);
                for (i = 1; i < numargs; i++) {
                    AR_DEBUG_PRINTF(ATH_DEBUG_INFO, (", %u", args[i]));
                }
                AR_DEBUG_PRINTF(ATH_DEBUG_INFO, ("\n"));
            } else {
                return FALSE;
            }
            break;
        case COEX_PSP_STAT_1:
            if (numargs >= 5) {
                dbglog_printf(timestamp, vap_id, "%s: ApResp0(%u), ApResp1(%u), ApResp2(%u), ApResp3(%u), ApResp4(%u)",
                    dbg_id_str, args[0], args[1], args[2], args[3], args[4]);
            } else {
                return FALSE;
            }
            break;
        case COEX_PSP_STAT_2:
            if (numargs >= 5) {
                dbglog_printf(timestamp, vap_id, "%s: DataPt(%u), Max(%u), NextApRespIndex(%u), NumOfValidDataPts(%u), PsPollAvg(%u)",
                    dbg_id_str, args[0], args[1], args[2], args[3], args[4]);
            } else {
                return FALSE;
            }
            break;
        case COEX_PSP_RX_STATUS_STATE_1:
            if (numargs >= 5) {
                if (args[2]) {
                    dbglog_printf(timestamp, vap_id, "%s: RsExpectedTS(%u), RespActualTS(%u), Overrun, RsOverrunT(%u), RsRxDur(%u)",
                        dbg_id_str, args[0], args[1], args[3], args[4]);
                } else {
                    dbglog_printf(timestamp, vap_id, "%s: RsExpectedTS(%u), RespActualTS(%u), Underrun, RsUnderrunT(%u), RsRxDur(%u)",
                        dbg_id_str, args[0], args[1], args[3], args[4]);
                }
            } else {
                return FALSE;
            }
            break;
        default:
            return FALSE;
    }

    return TRUE;
}

A_BOOL
dbglog_beacon_print_handler(
        A_UINT32 mod_id,
        A_UINT16 vap_id,
        A_UINT32 dbg_id,
        A_UINT32 timestamp,
        A_UINT16 numargs,
        A_UINT32 *args)
{
    static const char *states[] = {
        "INIT",
        "ADJUST_START",
        "ADJUSTING",
        "ADJUST_HOLD",
    };

    static const char *events[] = {
        "ADJUST_START",
        "ADJUST_RESTART",
        "ADJUST_STOP",
        "ADJUST_PAUSE",
        "ADJUST_UNPAUSE",
        "ADJUST_INC_SLOP_STEP",
        "ADJUST_HOLD",
        "ADJUST_HOLD_TIME_OUT",
    };

    switch (dbg_id) {
    case DBGLOG_DBGID_SM_FRAMEWORK_PROXY_DBGLOG_MSG:
        dbglog_sm_print(timestamp, vap_id, numargs, args, "EARLY_RX",
                states, ARRAY_LENGTH(states), events, ARRAY_LENGTH(events));
        break;
    case BEACON_EVENT_EARLY_RX_BMISS_STATUS:
        if (numargs == 3) {
            dbglog_printf(timestamp, vap_id,
                    "early_rx bmiss status:rcv=%d total=%d miss=%d",
                    args[0], args[1], args[2]);
        }
        break;
    case BEACON_EVENT_EARLY_RX_SLEEP_SLOP:
        if (numargs == 1) {
            dbglog_printf(timestamp, vap_id,
                    "early_rx update sleep_slop:%d",
                    args[0]);
        }
        break;
    case BEACON_EVENT_EARLY_RX_CONT_BMISS_TIMEOUT:
        if (numargs == 1) {
            dbglog_printf(timestamp, vap_id,
                    "early_rx cont bmiss timeout,update sleep_slop:%d",
                    args[0]);
        }
        break;
    case BEACON_EVENT_EARLY_RX_PAUSE_SKIP_BCN_NUM:
        if (numargs == 1) {
            dbglog_printf(timestamp, vap_id,
                    "early_rx skip bcn num:%d",
                    args[0]);
        }
        break;
    case BEACON_EVENT_EARLY_RX_CLK_DRIFT:
        if (numargs == 1) {
            dbglog_printf(timestamp, vap_id,
                    "early_rx clk drift:%d",
                    args[0]);
        }
        break;
    case BEACON_EVENT_EARLY_RX_AP_DRIFT:
        if (numargs == 1) {
            dbglog_printf(timestamp, vap_id,
                    "early_rx ap drift:%d",
                    args[0]);
        }
        break;
    case BEACON_EVENT_EARLY_RX_BCN_TYPE:
        if (numargs == 1) {
            dbglog_printf(timestamp, vap_id,
                    "early_rx bcn type:%d",
                    args[0]);
        }
        break;
    default:
        return FALSE;
    }

    return TRUE;
}

A_BOOL
dbglog_data_txrx_print_handler(
        A_UINT32 mod_id,
        A_UINT16 vap_id,
        A_UINT32 dbg_id,
        A_UINT32 timestamp,
        A_UINT16 numargs,
        A_UINT32 *args)
{
    switch (dbg_id) {
    case DATA_TXRX_DBGID_RX_DATA_SEQ_LEN_INFO:
        dbglog_printf(timestamp, vap_id, "DATA RX seq=0x%x, len=0x%x, stored=0x%x, duperr=0x%x",
            args[0], args[1], (args[2] & 0xffff0000) >> 16, args[2] & 0x0000ffff);
        break;
    default:
        return FALSE;
    }

    return TRUE;
}

A_BOOL dbglog_smps_print_handler(A_UINT32 mod_id,
                                           A_UINT16 vap_id,
                                           A_UINT32 dbg_id,
                                           A_UINT32 timestamp,
                                           A_UINT16 numargs,
                                           A_UINT32 *args)
{
    static const char *states[] = {
        "S_INACTIVE",
        "S_STATIC",
        "S_DYNAMIC",
        "S_STALLED",
        "S_INACTIVE_WAIT",
        "S_STATIC_WAIT",
        "S_DYNAMIC_WAIT",
    };

    static const char *events[] = {
        "E_STOP",
        "E_STOP_COMPL",
        "E_START",
        "E_STATIC",
        "E_STATIC_COMPL",
        "E_DYNAMIC",
        "E_DYNAMIC_COMPL",
        "E_STALL",
        "E_RSSI_ABOVE_THRESH",
        "E_RSSI_BELOW_THRESH",
        "E_FORCED_NONE",
    };
    switch(dbg_id) {
    case DBGLOG_DBGID_SM_FRAMEWORK_PROXY_DBGLOG_MSG:
        dbglog_sm_print(timestamp, vap_id, numargs, args, "STA_SMPS SM",
                states, ARRAY_LENGTH(states), events, ARRAY_LENGTH(events));
        break;
    case STA_SMPS_DBGID_CREATE_PDEV_INSTANCE:
        dbglog_printf(timestamp, vap_id, "STA_SMPS Create PDEV ctx %#x",
                args[0]);
        break;
    case STA_SMPS_DBGID_CREATE_VIRTUAL_CHAN_INSTANCE:
        dbglog_printf(timestamp, vap_id, "STA_SMPS Create Virtual Chan ctx %#x",
                args[0]);
        break;
    case STA_SMPS_DBGID_DELETE_VIRTUAL_CHAN_INSTANCE:
        dbglog_printf(timestamp, vap_id, "STA_SMPS Delete Virtual Chan ctx %#x",
                args[0]);
        break;
    case STA_SMPS_DBGID_CREATE_STA_INSTANCE:
        dbglog_printf(timestamp, vap_id, "STA_SMPS Create STA ctx %#x",
                args[0]);
        break;
    case STA_SMPS_DBGID_DELETE_STA_INSTANCE:
        dbglog_printf(timestamp, vap_id, "STA_SMPS Delete STA ctx %#x",
                args[0]);
        break;
    case STA_SMPS_DBGID_VIRTUAL_CHAN_SMPS_START:
        break;
    case STA_SMPS_DBGID_VIRTUAL_CHAN_SMPS_STOP:
        break;
    case STA_SMPS_DBGID_SEND_SMPS_ACTION_FRAME:
        dbglog_printf(timestamp, vap_id, "STA_SMPS STA %#x Signal SMPS mode as %s; cb_flags %#x",
                args[0],
                (args[1] == 0 ? "DISABLED":
                 (args[1] == 0x1 ? "STATIC" :
                  (args[1] == 0x3 ? "DYNAMIC" : "UNKNOWN"))),
                args[2]);
        break;
    case STA_SMPS_DBGID_DTIM_EBT_EVENT_CHMASK_UPDATE:
        dbglog_printf(timestamp, vap_id, "STA_SMPS_DBGID_DTIM_EBT_EVENT_CHMASK_UPDATE");
        break;
    case STA_SMPS_DBGID_DTIM_CHMASK_UPDATE:
        dbglog_printf(timestamp, vap_id, "STA_SMPS_DBGID_DTIM_CHMASK_UPDATE "
                                         "tx_mask %#x rx_mask %#x arb_dtim_mask %#x",
                args[0], args[1], args[2]);
        break;
    case STA_SMPS_DBGID_DTIM_BEACON_EVENT_CHMASK_UPDATE:
        dbglog_printf(timestamp, vap_id, "STA_SMPS_DBGID_DTIM_BEACON_EVENT_CHMASK_UPDATE");
        break;
    case STA_SMPS_DBGID_DTIM_POWER_STATE_CHANGE:
        dbglog_printf(timestamp, vap_id, "STA_SMPS_DBGID_DTIM_POWER_STATE_CHANGE cur_pwr_state %s new_pwr_state %s",
                (args[0] == 0x1 ? "SLEEP":
                 (args[0] == 0x2 ? "AWAKE":
                  (args[0] == 0x3 ? "FULL_SLEEP" : "UNKNOWN"))),
                (args[1] == 0x1 ? "SLEEP":
                 (args[1] == 0x2 ? "AWAKE":
                  (args[1] == 0x3 ? "FULL_SLEEP" : "UNKNOWN"))));
        break;
    case STA_SMPS_DBGID_DTIM_CHMASK_UPDATE_SLEEP:
        dbglog_printf(timestamp, vap_id, "STA_SMPS_DBGID_DTIM_CHMASK_UPDATE_SLEEP "
                                         "tx_mask %#x rx_mask %#x orig_rx %#x dtim_rx %#x",
                args[0], args[1], args[2], args[3]);
        break;
    case STA_SMPS_DBGID_DTIM_CHMASK_UPDATE_AWAKE:
        dbglog_printf(timestamp, vap_id, "STA_SMPS_DBGID_DTIM_CHMASK_UPDATE_AWAKE "
                                         "tx_mask %#x rx_mask %#x orig_rx %#x",
                args[0], args[1], args[2]);
        break;
    default:
        dbglog_printf(
                timestamp,
                vap_id,
                "STA_SMPS: UNKNOWN DBGID!");
        return FALSE;
    }

    return TRUE;
}


A_BOOL
dbglog_p2p_print_handler(
        A_UINT32 mod_id,
        A_UINT16 vap_id,
        A_UINT32 dbg_id,
        A_UINT32 timestamp,
        A_UINT16 numargs,
        A_UINT32 *args)
{
    static const char *states[] = {
        "ACTIVE",
        "DOZE",
        "TX_BCN",
        "CTWIN",
        "OPPPS",
    };

    static const char *events[] = {
        "ONESHOT_NOA",
        "CTWINDOW",
        "PERIODIC_NOA",
        "IDLE",
        "NOA_CHANGED",
        "TBTT",
        "TX_BCN_CMP",
        "OPPPS_OK",
        "OPPPS_CHANGED",
    };

    switch (dbg_id) {
    case DBGLOG_DBGID_SM_FRAMEWORK_PROXY_DBGLOG_MSG:
        dbglog_sm_print(timestamp, vap_id, numargs, args, "P2P GO PS",
                states, ARRAY_LENGTH(states), events, ARRAY_LENGTH(events));
        break;
    default:
        return FALSE;
    }

    return TRUE;
}

A_BOOL
dbglog_pcielp_print_handler(
        A_UINT32 mod_id,
        A_UINT16 vap_id,
        A_UINT32 dbg_id,
        A_UINT32 timestamp,
        A_UINT16 numargs,
        A_UINT32 *args)
{
    static const char *states[] = {
        "STOP",
        "TX",
        "RX",
        "SLEEP",
        "SUSPEND",
    };

    static const char *events[] = {
        "VDEV_UP",
        "ALL_VDEV_DOWN",
        "AWAKE",
        "SLEEP",
        "TX_ACTIVITY",
        "TX_INACTIVITY",
        "TX_AC_CHANGE",
        "SUSPEND",
        "RESUME",
    };

    switch (dbg_id) {
    case DBGLOG_DBGID_SM_FRAMEWORK_PROXY_DBGLOG_MSG:
        dbglog_sm_print(timestamp, vap_id, numargs, args, "PCIELP",
                states, ARRAY_LENGTH(states), events, ARRAY_LENGTH(events));
        break;
    default:
        return FALSE;
    }

    return TRUE;
}


#ifdef WLAN_OPEN_SOURCE
static int dbglog_block_open(struct inode *inode, struct file *file)
{
    struct fwdebug *fwlog = inode->i_private;

    if (fwlog->fwlog_open)
        return -EBUSY;

    fwlog->fwlog_open = TRUE;

    file->private_data = inode->i_private;
    return 0;
}

static int dbglog_block_release(struct inode *inode, struct file *file)
{
    struct fwdebug *fwlog = inode->i_private;

    fwlog->fwlog_open = FALSE;

    return 0;
}

static ssize_t dbglog_block_read(struct file *file,
                                       char __user *user_buf,
                                       size_t count,
                                       loff_t *ppos)
{
    struct fwdebug *fwlog = file->private_data;
    struct sk_buff *skb;
    ssize_t ret_cnt;
    size_t len = 0, not_copied;
    char *buf;
    int ret;

    buf = vmalloc(count);
    if (!buf)
       return -ENOMEM;

    spin_lock_bh(&fwlog->fwlog_queue.lock);

    if (skb_queue_len(&fwlog->fwlog_queue) == 0) {
       /* we must init under queue lock */
       init_completion(&fwlog->fwlog_completion);

       spin_unlock_bh(&fwlog->fwlog_queue.lock);

       ret = wait_for_completion_interruptible_timeout(
                    &fwlog->fwlog_completion,
		    msecs_to_jiffies(CNSS_DIAG_FWLOG_TIMEOUT));
       if (ret == -ERESTARTSYS) {
               vfree(buf);
               return ret;
       }

       spin_lock_bh(&fwlog->fwlog_queue.lock);
    }

    while ((skb = __skb_dequeue(&fwlog->fwlog_queue))) {
       if (skb->len > count - len) {
           /* not enough space, put skb back and leave */
           __skb_queue_head(&fwlog->fwlog_queue, skb);
           break;
       }

       memcpy(buf + len, skb->data, skb->len);
       len += skb->len;

       kfree_skb(skb);
    }

    spin_unlock_bh(&fwlog->fwlog_queue.lock);

    /* FIXME: what to do if len == 0? */
    not_copied = copy_to_user(user_buf, buf, len);
    if (not_copied != 0) {
        ret_cnt = -EFAULT;
        goto out;
    }

    *ppos = *ppos + len;

    ret_cnt = len;

out:
    vfree(buf);

    return ret_cnt;
}

static const struct file_operations fops_dbglog_block = {
    .open = dbglog_block_open,
    .release = dbglog_block_release,
    .read = dbglog_block_read,
    .owner = THIS_MODULE,
    .llseek = default_llseek,
};

int dbglog_debugfs_init(wmi_unified_t wmi_handle)
{

    wmi_handle->debugfs_phy = debugfs_create_dir(CLD_DEBUGFS_DIR, NULL);
    if (!wmi_handle->debugfs_phy)
        return -ENOMEM;

    debugfs_create_file(DEBUGFS_BLOCK_NAME, S_IRUSR, wmi_handle->debugfs_phy, &wmi_handle->dbglog,
                            &fops_dbglog_block);

    return TRUE;
}
int dbglog_debugfs_remove(wmi_unified_t wmi_handle)
{
    debugfs_remove_recursive(wmi_handle->debugfs_phy);
    return TRUE;
}
#endif /* WLAN_OPEN_SOURCE */

/**
 * cnss_diag_handle_crash_inject() - API to handle crash inject command
 * @slot: pointer to struct dbglog_slot
 *
 * API to handle CNSS diag crash inject command
 *
 * Return: None
 */
static void cnss_diag_handle_crash_inject(struct dbglog_slot *slot)
{
	switch (slot->diag_type) {
	case DIAG_TYPE_CRASH_INJECT:
		if (slot->length != 2) {
			AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("crash_inject cmd error\n"));
			return;
		}

		AR_DEBUG_PRINTF(ATH_DEBUG_INFO,
				("%s : DIAG_TYPE_CRASH_INJECT: %d %d\n", __func__,
				 slot->payload[0], slot->payload[1]));
		if (!tgt_assert_enable) {
			AR_DEBUG_PRINTF(ATH_DEBUG_INFO,
					("%s: tgt Assert Disabled\n", __func__));
			return;
		}
		process_wma_set_command_twoargs(0,
				(int)GEN_PARAM_CRASH_INJECT,
				slot->payload[0],
				slot->payload[1], GEN_CMD);
		break;
	default:
		AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Unknown cmd[%d] error\n",
						slot->diag_type));
		break;
	}
}

/**---------------------------------------------------------------------------
  \brief cnss_diag_msg_callback() - Call back invoked by netlink service

  This function gets invoked by netlink service when a message is recevied
  from the cnss-diag application in user-space.

  \param -
      - skb - skb with netlink message

  \return - 0 for success, non zero for failure
--------------------------------------------------------------------------*/
int cnss_diag_msg_callback(struct sk_buff *skb)
{
	struct nlmsghdr *nlh;
	A_UINT8 *msg;

	nlh = (struct nlmsghdr *)skb->data;
	if (!nlh) {
		AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("%s: Netlink header null \n",
						__func__));
		return -1;
	}

	msg = NLMSG_DATA(nlh);
	cnss_diag_handle_crash_inject((struct dbglog_slot *)msg);

	return 0;
}

#ifdef CNSS_GENL

/**
 * cnss_diag_cmd_handler() - API to handle CNSS diag command
 * @data: Data received
 * @data_len: length of the data received
 * @ctx: Pointer to stored context
 * @pid: Process ID
 *
 * API to handle CNSS diag commands from user space
 *
 * Return: None
 */
static void cnss_diag_cmd_handler(const void *data, int data_len,
						void *ctx, int pid)
{
	struct dbglog_slot *slot = NULL;
	struct nlattr *tb[QCA_WLAN_VENDOR_ATTR_MAX + 1];

	/*
	 * audit note: it is ok to pass a NULL policy here since a
	 * length check on the data is added later already
	 */
	if (nla_parse(tb, CLD80211_ATTR_MAX, data, data_len, NULL)) {
		AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("%s: nla parse fails \n",
							__func__));
		return;
	}

	if (!tb[CLD80211_ATTR_DATA]) {
		AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("%s: attr VENDOR_DATA fails \n",
								__func__));
		return;
	}

	if (nla_len(tb[CLD80211_ATTR_DATA]) != sizeof(struct dbglog_slot)) {
		AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("%s: attr length check fails\n",
				__func__));
		return;
	}
	slot = (struct dbglog_slot *)nla_data(tb[CLD80211_ATTR_DATA]);

	if (!slot) {
		AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("%s: data NULL \n", __func__));
		return;
	}

	cnss_diag_handle_crash_inject(slot);
	return;
}

/**
 * cnss_diag_activate_service() - API to register CNSS diag cmd handler
 *
 * API to register the CNSS diag command handler using new genl infra.
 * Return type is zero to match with legacy prototype
 *
 * Return: 0
 */
int cnss_diag_activate_service(void)
{
	register_cld_cmd_cb(WLAN_NL_MSG_CNSS_DIAG, cnss_diag_cmd_handler, NULL);
	return 0;
}

#else
/**---------------------------------------------------------------------------
  \brief cnss_diag_activate_service() - Activate cnss_diag message handler

  This function registers a handler to receive netlink message from
  an cnss-diag application process.

  \param -
      - None

  \return - 0 for success, non zero for failure
--------------------------------------------------------------------------*/
int cnss_diag_activate_service(void)
{
    int ret = 0;

    /* Register the msg handler for msgs addressed to WLAN_NL_MSG_OEM */
    ret = nl_srv_register(WLAN_NL_MSG_CNSS_DIAG, cnss_diag_msg_callback);
    if (ret == -EINVAL)
    {
        AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("CNSS-DIAG Registeration failed \n"));
        return ret;
    }
    kd_nl_init = TRUE;
    return 0;
}
#endif

A_BOOL
dbglog_wow_print_handler(
			 A_UINT32 mod_id,
			 A_UINT16 vap_id,
			 A_UINT32 dbg_id,
			 A_UINT32 timestamp,
			 A_UINT16 numargs,
			 A_UINT32 *args)
{

	switch (dbg_id) {
	case WOW_NS_OFLD_ENABLE:
		if (4 == numargs) {
			dbglog_printf(timestamp, vap_id,
                "Enable NS offload, for sender %02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x",
				      *(A_UINT8*)&args[0], *((A_UINT8*)&args[0]+1), *((A_UINT8*)&args[0]+2), *((A_UINT8*)&args[0]+3),
				      *(A_UINT8*)&args[1], *((A_UINT8*)&args[1]+1), *((A_UINT8*)&args[1]+2), *((A_UINT8*)&args[1]+3),
				      *(A_UINT8*)&args[2], *((A_UINT8*)&args[2]+1), *((A_UINT8*)&args[2]+2), *((A_UINT8*)&args[2]+3),
				      *(A_UINT8*)&args[3], *((A_UINT8*)&args[3]+1), *((A_UINT8*)&args[3]+2), *((A_UINT8*)&args[3]+3));
		} else {
			return FALSE;
		}
		break;
	case WOW_ARP_OFLD_ENABLE:
		if (1 == numargs) {
			dbglog_printf(timestamp, vap_id,
				      "Enable ARP offload, for sender %d.%d.%d.%d",
				      *(A_UINT8*)args, *((A_UINT8*)args+1), *((A_UINT8*)args+2), *((A_UINT8*)args+3));
		} else {
			return FALSE;
		}
		break;
	case WOW_NS_ARP_OFLD_DISABLE:
		if (0 == numargs) {
			dbglog_printf(timestamp, vap_id, "disable NS/ARP offload");
		} else {
			return FALSE;
		}
		break;
	case WOW_NS_RECEIVED:
		if (4 == numargs) {
			dbglog_printf(timestamp, vap_id,
				      "NS requested from %02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x",
				      *(A_UINT8*)&args[0], *((A_UINT8*)&args[0]+1), *((A_UINT8*)&args[0]+2), *((A_UINT8*)&args[0]+3),
				      *(A_UINT8*)&args[1], *((A_UINT8*)&args[1]+1), *((A_UINT8*)&args[1]+2), *((A_UINT8*)&args[1]+3),
				      *(A_UINT8*)&args[2], *((A_UINT8*)&args[2]+1), *((A_UINT8*)&args[2]+2), *((A_UINT8*)&args[2]+3),
				      *(A_UINT8*)&args[3], *((A_UINT8*)&args[3]+1), *((A_UINT8*)&args[3]+2), *((A_UINT8*)&args[3]+3));
		} else {
			return FALSE;
		}
		break;
	case WOW_NS_REPLIED:
		if (4 == numargs) {
			dbglog_printf(timestamp, vap_id,
				      "NS replied to %02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x",
				      *(A_UINT8*)&args[0], *((A_UINT8*)&args[0]+1), *((A_UINT8*)&args[0]+2), *((A_UINT8*)&args[0]+3),
				      *(A_UINT8*)&args[1], *((A_UINT8*)&args[1]+1), *((A_UINT8*)&args[1]+2), *((A_UINT8*)&args[1]+3),
				      *(A_UINT8*)&args[2], *((A_UINT8*)&args[2]+1), *((A_UINT8*)&args[2]+2), *((A_UINT8*)&args[2]+3),
				      *(A_UINT8*)&args[3], *((A_UINT8*)&args[3]+1), *((A_UINT8*)&args[3]+2), *((A_UINT8*)&args[3]+3));
		} else {
			return FALSE;
		}
		break;
	case WOW_ARP_RECEIVED:
		if (1 == numargs) {
			dbglog_printf(timestamp, vap_id,
				      "ARP requested from %d.%d.%d.%d",
				      *(A_UINT8*)args, *((A_UINT8*)args+1), *((A_UINT8*)args+2), *((A_UINT8*)args+3));
		} else {
			return FALSE;
		}
		break;
		break;
	case WOW_ARP_REPLIED:
		if (1 == numargs) {
			dbglog_printf(timestamp, vap_id,
				      "ARP replied to %d.%d.%d.%d",
				      *(A_UINT8*)args, *((A_UINT8*)args+1), *((A_UINT8*)args+2), *((A_UINT8*)args+3));
		} else {
			return FALSE;
		}
		break;
	default:
		return FALSE;
	}

	return TRUE;
}

int dbglog_parser_type_init(wmi_unified_t wmi_handle, int type)
{
    if(type >= DBGLOG_PROCESS_MAX){
        return A_ERROR;
    }

    dbglog_process_type = type;
    gprint_limiter = FALSE;

    return A_OK;
}

int
dbglog_init(wmi_unified_t wmi_handle)
{
    int res = 0;
    OS_MEMSET(mod_print, 0, sizeof(mod_print));

    dbglog_reg_modprint(WLAN_MODULE_STA_PWRSAVE, dbglog_sta_powersave_print_handler);
    dbglog_reg_modprint(WLAN_MODULE_AP_PWRSAVE, dbglog_ap_powersave_print_handler);
    dbglog_reg_modprint(WLAN_MODULE_WAL, dbglog_wal_print_handler);
    dbglog_reg_modprint(WLAN_MODULE_SCAN, dbglog_scan_print_handler);
    dbglog_reg_modprint(WLAN_MODULE_RATECTRL, dbglog_ratectrl_print_handler);
    dbglog_reg_modprint(WLAN_MODULE_ANI, dbglog_ani_print_handler);
    dbglog_reg_modprint(WLAN_MODULE_COEX, dbglog_coex_print_handler);
    dbglog_reg_modprint(WLAN_MODULE_BEACON,dbglog_beacon_print_handler);
    dbglog_reg_modprint(WLAN_MODULE_WOW, dbglog_wow_print_handler);
    dbglog_reg_modprint(WLAN_MODULE_DATA_TXRX,dbglog_data_txrx_print_handler);
    dbglog_reg_modprint(WLAN_MODULE_STA_SMPS, dbglog_smps_print_handler);
    dbglog_reg_modprint(WLAN_MODULE_P2P, dbglog_p2p_print_handler);
    dbglog_reg_modprint(WLAN_MODULE_PCIELP, dbglog_pcielp_print_handler);
    dbglog_reg_modprint(WLAN_MODULE_IBSS_PWRSAVE,
                        dbglog_ibss_powersave_print_handler);
    tgt_assert_enable = wmi_handle->tgt_force_assert_enable;
    /* Register handler for F3 or debug messages */
    res = wmi_unified_register_event_handler(wmi_handle, WMI_DEBUG_MESG_EVENTID,
                       dbglog_parse_debug_logs);
    if (res != 0)
        return res;

    /* Register handler for FW diag events */
    res = wmi_unified_register_event_handler(wmi_handle,
                     WMI_DIAG_DATA_CONTAINER_EVENTID,
                     fw_diag_data_event_handler);
    if (res != 0)
        return res;

    /* Register handler for new FW diag  Event, LOG, MSG combined */
    res = wmi_unified_register_event_handler(wmi_handle, WMI_DIAG_EVENTID,
                                   diag_fw_handler);
    if (res != 0)
       return res;

#ifdef WLAN_OPEN_SOURCE
    /* Initialize the fw debug log queue */
    skb_queue_head_init(&wmi_handle->dbglog.fwlog_queue);
    init_completion(&wmi_handle->dbglog.fwlog_completion);

    /* Initialize debugfs */
    dbglog_debugfs_init(wmi_handle);
#endif /* WLAN_OPEN_SOURCE */

    return res;
}

int
dbglog_deinit(wmi_unified_t wmi_handle)
{
    int res = 0;

#ifdef WLAN_OPEN_SOURCE
    /* DeInitialize the fw debug log queue */
    skb_queue_purge(&wmi_handle->dbglog.fwlog_queue);
    complete(&wmi_handle->dbglog.fwlog_completion);

    /* Deinitialize the debugfs */
    dbglog_debugfs_remove(wmi_handle);
#endif /* WLAN_OPEN_SOURCE */

    tgt_assert_enable = 0;
    res = wmi_unified_unregister_event_handler(wmi_handle, WMI_DEBUG_MESG_EVENTID);
    if(res != 0)
        return res;

    kd_nl_init = FALSE;
    return res;
}
