/* * log_dump - debugability support for dumping logs to file - header file * * Copyright (C) 2022, Broadcom. * * Unless you and Broadcom execute a separate written software license * agreement governing use of this software, this software is licensed to you * under the terms of the GNU General Public License version 2 (the "GPL"), * available at http://www.broadcom.com/licenses/GPLv2.php, with the * following added to such license: * * As a special exception, the copyright holders of this software give you * permission to link this software with independent modules, and to copy and * distribute the resulting executable under terms of your choice, provided that * you also meet, for each linked independent module, the terms and conditions of * the license of that module. An independent module is a module which is not * derived from this software. The special exception does not apply to any * modifications of the software. * * * <> * * $Id$ */ #ifndef __DHD_LOG_DUMP_H__ #define __DHD_LOG_DUMP_H__ #ifdef DHD_LOG_DUMP #include #define LOG_DUMP_MAGIC 0xDEB3DEB3 #ifdef EWP_ECNTRS_LOGGING #define ECNTR_RING_ID 0xECDB #define ECNTR_RING_NAME "ewp_ecntr_ring" #endif /* EWP_ECNTRS_LOGGING */ #ifdef EWP_RTT_LOGGING #define RTT_RING_ID 0xADCD #define RTT_RING_NAME "ewp_rtt_ring" #endif /* EWP_ECNTRS_LOGGING */ #ifdef EWP_BCM_TRACE #define BCM_TRACE_RING_ID 0xBCBC #define BCM_TRACE_RING_NAME "ewp_bcm_trace_ring" #endif /* EWP_BCM_TRACE */ #define DHD_LOG_DUMP_MAX_TEMP_BUFFER_SIZE 512 #define DHD_LOG_DUMP_MAX_TAIL_FLUSH_SIZE (80 * 1024) #define DHD_LOG_DUMP_TS_MULTIPLIER_VALUE 60 #define DHD_LOG_DUMP_TS_FMT_YYMMDDHHMMSSMSMS "%02d%02d%02d%02d%02d%02d%04lu" #define DHD_LOG_DUMP_TS_FMT_YYMMDDHHMMSS "%02d%02d%02d%02d%02d%02d" #define DHD_DEBUG_DUMP_TYPE "debug_dump" #define DEBUG_DUMP_TRIGGER_INTERVAL_SEC 4 #ifdef DHD_EFI #define DHD_LOG_DUMP_WRITE(fmt, ...) dhd_log_dump_print_drv(fmt, ##__VA_ARGS__) #define DHD_LOG_DUMP_WRITE_FW(fmt, ...) dhd_log_dump_print(fmt, ##__VA_ARGS__) #else /* DHD_EFI */ #ifndef _DHD_LOG_DUMP_DEFINITIONS_ #define _DHD_LOG_DUMP_DEFINITIONS_ #define GENERAL_LOG_HDR "\n-------------------- General log ---------------------------\n" #define PRESERVE_LOG_HDR "\n-------------------- Preserve log ---------------------------\n" #define SPECIAL_LOG_HDR "\n-------------------- Special log ---------------------------\n" #define DHD_DUMP_LOG_HDR "\n-------------------- 'dhd dump' log -----------------------\n" #define EXT_TRAP_LOG_HDR "\n-------------------- Extended trap data -------------------\n" #define HEALTH_CHK_LOG_HDR "\n-------------------- Health check data --------------------\n" #ifdef DHD_DUMP_PCIE_RINGS #define RING_DUMP_HDR "\n-------------------- Ring dump --------------------\n" #endif /* DHD_DUMP_PCIE_RINGS */ #define DHD_LOG_DUMP_DLD(fmt, ...) \ dhd_log_dump_write(DLD_BUF_TYPE_GENERAL, NULL, 0, fmt, ##__VA_ARGS__) #define DHD_LOG_DUMP_DLD_EX(fmt, ...) \ dhd_log_dump_write(DLD_BUF_TYPE_SPECIAL, NULL, 0, fmt, ##__VA_ARGS__) #define DHD_LOG_DUMP_DLD_PRSRV(fmt, ...) \ dhd_log_dump_write(DLD_BUF_TYPE_PRESERVE, NULL, 0, fmt, ##__VA_ARGS__) #endif /* !_DHD_LOG_DUMP_DEFINITIONS_ */ #ifndef DHD_LOG_DUMP_RING_DEFINITIONS #define DHD_LOG_DUMP_RING_DEFINITIONS #ifdef DHD_DEBUGABILITY_LOG_DUMP_RING /* Enabled DHD_DEBUGABILITY_LOG_DUMP_RING */ #define DHD_DBG_RING(fmt, ...) \ dhd_dbg_ring_write(DRIVER_LOG_RING_ID, NULL, 0, fmt, ##__VA_ARGS__) #define DHD_DBG_RING_EX(fmt, ...) \ dhd_dbg_ring_write(FW_VERBOSE_RING_ID, NULL, 0, fmt, ##__VA_ARGS__) #define DHD_DBG_RING_ROAM(fmt, ...) \ dhd_dbg_ring_write(ROAM_STATS_RING_ID, NULL, 0, fmt, ##__VA_ARGS__) #define DHD_LOG_DUMP_WRITE DHD_DBG_RING #define DHD_LOG_DUMP_WRITE_EX DHD_DBG_RING_EX #define DHD_LOG_DUMP_WRITE_PRSRV DHD_DBG_RING #define DHD_LOG_DUMP_WRITE_ROAM DHD_DBG_RING_ROAM #define DHD_PREFIX_TS "[%s][%s] ", \ OSL_GET_RTCTIME(), dhd_log_dump_get_timestamp() #define DHD_PREFIX_TS_FN "[%s][%s] %s: ", \ OSL_GET_RTCTIME(), dhd_log_dump_get_timestamp(), __func__ #define DHD_LOG_DUMP_WRITE_TS DHD_DBG_RING(DHD_PREFIX_TS) #define DHD_LOG_DUMP_WRITE_TS_FN DHD_DBG_RING(DHD_PREFIX_TS_FN) #define DHD_LOG_DUMP_WRITE_EX_TS DHD_DBG_RING_EX(DHD_PREFIX_TS) #define DHD_LOG_DUMP_WRITE_EX_TS_FN DHD_DBG_RING_EX(DHD_PREFIX_TS_FN) #define DHD_LOG_DUMP_WRITE_PRSRV_TS DHD_DBG_RING(DHD_PREFIX_TS) #define DHD_LOG_DUMP_WRITE_PRSRV_TS_FN DHD_DBG_RING(DHD_PREFIX_TS_FN) #define DHD_LOG_DUMP_WRITE_ROAM_TS DHD_DBG_RING_ROAM(DHD_PREFIX_TS) #define DHD_LOG_DUMP_WRITE_ROAM_TS_FN DHD_DBG_RING_ROAM(DHD_PREFIX_TS_FN) #else /* Not enabled DHD_DEBUGABILITY_LOG_DUMP_RING */ #define DHD_LOG_DUMP_WRITE DHD_LOG_DUMP_DLD #define DHD_LOG_DUMP_WRITE_EX DHD_LOG_DUMP_DLD_EX #define DHD_LOG_DUMP_WRITE_PRSRV DHD_LOG_DUMP_DLD_PRSRV #define DHD_LOG_DUMP_WRITE_ROAM DHD_LOG_DUMP_DLD #define DHD_PREFIX_TS "[%s]: ", dhd_log_dump_get_timestamp() #define DHD_PREFIX_TS_FN "[%s] %s: ", dhd_log_dump_get_timestamp(), __func__ #define DHD_LOG_DUMP_WRITE_TS DHD_LOG_DUMP_DLD(DHD_PREFIX_TS) #define DHD_LOG_DUMP_WRITE_TS_FN DHD_LOG_DUMP_DLD(DHD_PREFIX_TS_FN) #define DHD_LOG_DUMP_WRITE_EX_TS DHD_LOG_DUMP_DLD_EX(DHD_PREFIX_TS) #define DHD_LOG_DUMP_WRITE_EX_TS_FN DHD_LOG_DUMP_DLD_EX(DHD_PREFIX_TS_FN) #define DHD_LOG_DUMP_WRITE_PRSRV_TS DHD_LOG_DUMP_DLD_PRSRV(DHD_PREFIX_TS) #define DHD_LOG_DUMP_WRITE_PRSRV_TS_FN DHD_LOG_DUMP_DLD_PRSRV(DHD_PREFIX_TS_FN) #define DHD_LOG_DUMP_WRITE_ROAM_TS DHD_LOG_DUMP_DLD(DHD_PREFIX_TS) #define DHD_LOG_DUMP_WRITE_ROAM_TS_FN DHD_LOG_DUMP_DLD(DHD_PREFIX_TS_FN) #endif /* DHD_DEBUGABILITY_LOG_DUMP_RING */ #endif /* DHD_LOG_DUMP_RING_DEFINITIONS */ #endif /* DHD_EFI */ #define CONCISE_DUMP_BUFLEN 32 * 1024 #define ECNTRS_LOG_HDR "\n-------------------- Ecounters log --------------------------\n" #ifdef DHD_STATUS_LOGGING #define STATUS_LOG_HDR "\n-------------------- Status log -----------------------\n" #endif /* DHD_STATUS_LOGGING */ #define RTT_LOG_HDR "\n-------------------- RTT log --------------------------\n" #define BCM_TRACE_LOG_HDR "\n-------------------- BCM Trace log --------------------------\n" #define COOKIE_LOG_HDR "\n-------------------- Cookie List ----------------------------\n" #define DHD_PKTID_MAP_LOG_HDR "\n---------------- PKTID MAP log -----------------------\n" #define DHD_PKTID_UNMAP_LOG_HDR "\n------------------ PKTID UNMAP log -----------------------\n" #define PKTID_LOG_DUMP_FMT \ "\nIndex \t\tTimestamp \tPktaddr(PA) \tPktid \tSize \tPkttype\n(Current=%d)\n" /* 0: DLD_BUF_TYPE_GENERAL, 1: DLD_BUF_TYPE_PRESERVE * 2: DLD_BUF_TYPE_SPECIAL */ #define DLD_BUFFER_NUM 3 #ifndef CUSTOM_LOG_DUMP_BUFSIZE_MB #define CUSTOM_LOG_DUMP_BUFSIZE_MB 4 /* DHD_LOG_DUMP_BUF_SIZE 4 MB static memory in kernel */ #endif /* CUSTOM_LOG_DUMP_BUFSIZE_MB */ #define LOG_DUMP_TOTAL_BUFSIZE (1024 * 1024 * CUSTOM_LOG_DUMP_BUFSIZE_MB) /* * Below are different sections that use the prealloced buffer * and sum of the sizes of these should not cross LOG_DUMP_TOTAL_BUFSIZE */ #ifdef EWP_BCM_TRACE #define LOG_DUMP_GENERAL_MAX_BUFSIZE (192 * 1024 * CUSTOM_LOG_DUMP_BUFSIZE_MB) #define LOG_DUMP_BCM_TRACE_MAX_BUFSIZE (64 * 1024 * CUSTOM_LOG_DUMP_BUFSIZE_MB) #else #define LOG_DUMP_GENERAL_MAX_BUFSIZE (256 * 1024 * CUSTOM_LOG_DUMP_BUFSIZE_MB) #define LOG_DUMP_BCM_TRACE_MAX_BUFSIZE 0 #endif /* EWP_BCM_TRACE */ #define LOG_DUMP_PRESERVE_MAX_BUFSIZE (128 * 1024 * CUSTOM_LOG_DUMP_BUFSIZE_MB) #define LOG_DUMP_ECNTRS_MAX_BUFSIZE (256 * 1024 * CUSTOM_LOG_DUMP_BUFSIZE_MB) #define LOG_DUMP_RTT_MAX_BUFSIZE (256 * 1024 * CUSTOM_LOG_DUMP_BUFSIZE_MB) #define LOG_DUMP_FILTER_MAX_BUFSIZE (128 * 1024 * CUSTOM_LOG_DUMP_BUFSIZE_MB) #if LOG_DUMP_TOTAL_BUFSIZE < (LOG_DUMP_GENERAL_MAX_BUFSIZE + \ LOG_DUMP_PRESERVE_MAX_BUFSIZE + LOG_DUMP_ECNTRS_MAX_BUFSIZE + LOG_DUMP_RTT_MAX_BUFSIZE \ + LOG_DUMP_BCM_TRACE_MAX_BUFSIZE + LOG_DUMP_FILTER_MAX_BUFSIZE) #error "LOG_DUMP_TOTAL_BUFSIZE is lesser than sum of all rings" #endif /* Special buffer is allocated as separately in prealloc */ #define LOG_DUMP_SPECIAL_MAX_BUFSIZE (8 * 1024) #define LOG_DUMP_MAX_FILESIZE (8 *1024 * 1024) /* 8 MB default */ #ifdef CONFIG_LOG_BUF_SHIFT /* 15% of kernel log buf size, if for example klog buf size is 512KB * 15% of 512KB ~= 80KB */ #define LOG_DUMP_KERNEL_TAIL_FLUSH_SIZE \ (15 * ((1 << CONFIG_LOG_BUF_SHIFT)/100)) #endif /* CONFIG_LOG_BUF_SHIFT */ #define LOG_DUMP_COOKIE_BUFSIZE 1024u #define DHD_PRINT_BUF_NAME_LEN 30 #ifdef DHD_SSSR_DUMP #define DUMP_SSSR_ATTR_START 2 #define DUMP_SSSR_ATTR_COUNT 10 typedef enum { SSSR_C0_D11_BEFORE = 0, SSSR_C0_D11_AFTER = 1, SSSR_C1_D11_BEFORE = 2, SSSR_C1_D11_AFTER = 3, SSSR_C2_D11_BEFORE = 4, SSSR_C2_D11_AFTER = 5, SSSR_DIG_BEFORE = 6, SSSR_DIG_AFTER = 7 } EWP_SSSR_DUMP; #endif /* DHD_SSSR_DUMP */ typedef enum { DLD_BUF_TYPE_GENERAL = 0, DLD_BUF_TYPE_PRESERVE = 1, DLD_BUF_TYPE_SPECIAL = 2, DLD_BUF_TYPE_ECNTRS = 3, DLD_BUF_TYPE_FILTER = 4, DLD_BUF_TYPE_ALL = 5 } log_dump_type_t; /* * XXX: Always add new enums at the end to compatible with parser, * also add new section in split_ret of EWP_config.py */ typedef enum { LOG_DUMP_SECTION_GENERAL = 0, LOG_DUMP_SECTION_ECNTRS, LOG_DUMP_SECTION_SPECIAL, LOG_DUMP_SECTION_DHD_DUMP, LOG_DUMP_SECTION_EXT_TRAP, LOG_DUMP_SECTION_HEALTH_CHK, LOG_DUMP_SECTION_PRESERVE, LOG_DUMP_SECTION_COOKIE, LOG_DUMP_SECTION_RING, LOG_DUMP_SECTION_STATUS, LOG_DUMP_SECTION_RTT, LOG_DUMP_SECTION_BCM_TRACE, LOG_DUMP_SECTION_PKTID_MAP_LOG, LOG_DUMP_SECTION_PKTID_UNMAP_LOG, LOG_DUMP_SECTION_TIMESTAMP, LOG_DUMP_SECTION_MAX } log_dump_section_type_t; /* Each section in the debug_dump log file shall begin with a header */ typedef struct { uint32 magic; /* 0xDEB3DEB3 */ uint32 type; /* of type log_dump_section_type_t */ uint64 timestamp; uint32 length; /* length of the section that follows */ } log_dump_section_hdr_t; #ifdef DHD_DEBUGABILITY_LOG_DUMP_RING struct dhd_dbg_ring_buf { void *dhd_pub; }; extern struct dhd_dbg_ring_buf g_ring_buf; #endif /* DHD_DEBUGABILITY_LOG_DUMP_RING */ typedef struct dhd_debug_dump_ring_entry { log_dump_section_type_t type; uint32 debug_dump_ring; } dhd_debug_dump_ring_entry_t; /* below structure describe ring buffer. */ struct dhd_log_dump_buf { spinlock_t lock; void *dhd_pub; unsigned int enable; unsigned int wraparound; unsigned long max; unsigned int remain; char* present; char* front; char* buffer; }; typedef struct { char *hdr_str; log_dump_section_type_t sec_type; } dld_hdr_t; extern void dhd_log_dump_write(int type, char *binary_data, int binary_len, const char *fmt, ...); void dhd_schedule_log_dump(dhd_pub_t *dhdp, void *type); void dhd_log_dump_trigger(dhd_pub_t *dhdp, int subcmd); void dhd_log_dump_vendor_trigger(dhd_pub_t *dhd_pub); #ifdef DHD_DEBUGABILITY_DEBUG_DUMP int dhd_debug_dump_get_ring_num(int sec_type); #endif /* DHD_DEBUGABILITY_DEBUG_DUMP */ int dhd_log_dump_ring_to_file(dhd_pub_t *dhdp, void *ring_ptr, void *file, unsigned long *file_posn, log_dump_section_hdr_t *sec_hdr, char *text_hdr, uint32 sec_type); int dhd_dump_debug_ring(dhd_pub_t *dhdp, void *ring_ptr, const void *user_buf, log_dump_section_hdr_t *sec_hdr, char *text_hdr, int buflen, uint32 sec_type); int dhd_log_dump_cookie_to_file(dhd_pub_t *dhdp, void *fp, const void *user_buf, unsigned long *f_pos); int dhd_log_dump_cookie(dhd_pub_t *dhdp, const void *user_buf); uint32 dhd_log_dump_cookie_len(dhd_pub_t *dhdp); int dhd_logdump_cookie_init(dhd_pub_t *dhdp, uint8 *buf, uint32 buf_size); void dhd_logdump_cookie_deinit(dhd_pub_t *dhdp); void dhd_logdump_cookie_save(dhd_pub_t *dhdp, char *cookie, char *type); int dhd_logdump_cookie_get(dhd_pub_t *dhdp, char *ret_cookie, uint32 buf_size); int dhd_logdump_cookie_count(dhd_pub_t *dhdp); int dhd_get_dld_log_dump(void *dev, dhd_pub_t *dhdp, const void *user_buf, void *fp, uint32 len, int type, void *pos); #if defined(BCMPCIE) int dhd_print_ext_trap_data(void *dev, dhd_pub_t *dhdp, const void *user_buf, void *fp, uint32 len, void *pos); uint32 dhd_get_ext_trap_len(void *ndev, dhd_pub_t *dhdp); #endif /* BCMPCIE */ int dhd_print_dump_data(void *dev, dhd_pub_t *dhdp, const void *user_buf, void *fp, uint32 len, void *pos); int dhd_print_cookie_data(void *dev, dhd_pub_t *dhdp, const void *user_buf, void *fp, uint32 len, void *pos); int dhd_print_health_chk_data(void *dev, dhd_pub_t *dhdp, const void *user_buf, void *fp, uint32 len, void *pos); int dhd_print_time_str(const void *user_buf, void *fp, uint32 len, void *pos); #ifdef DHD_DUMP_PCIE_RINGS int dhd_print_flowring_data(void *dev, dhd_pub_t *dhdp, const void *user_buf, void *fp, uint32 len, void *pos); uint32 dhd_get_flowring_len(void *ndev, dhd_pub_t *dhdp); #endif /* DHD_DUMP_PCIE_RINGS */ #ifdef DHD_STATUS_LOGGING extern int dhd_print_status_log_data(void *dev, dhd_pub_t *dhdp, const void *user_buf, void *fp, uint32 len, void *pos); extern uint32 dhd_get_status_log_len(void *ndev, dhd_pub_t *dhdp); #endif /* DHD_STATUS_LOGGING */ #ifdef DHD_MAP_PKTID_LOGGING extern uint32 dhd_pktid_buf_len(dhd_pub_t *dhd, bool is_map); extern int dhd_print_pktid_map_log_data(void *dev, dhd_pub_t *dhdp, const void *user_buf, void *fp, uint32 len, void *pos, bool is_map); extern int dhd_write_pktid_log_dump(dhd_pub_t *dhdp, const void *user_buf, void *fp, uint32 len, unsigned long *pos, bool is_map); extern uint32 dhd_get_pktid_map_logging_len(void *ndev, dhd_pub_t *dhdp, bool is_map); #endif /* DHD_MAP_PKTID_LOGGING */ int dhd_print_ecntrs_data(void *dev, dhd_pub_t *dhdp, const void *user_buf, void *fp, uint32 len, void *pos); int dhd_print_rtt_data(void *dev, dhd_pub_t *dhdp, const void *user_buf, void *fp, uint32 len, void *pos); int dhd_get_debug_dump_file_name(void *dev, dhd_pub_t *dhdp, char *dump_path, int size); uint32 dhd_get_time_str_len(void); uint32 dhd_get_health_chk_len(void *ndev, dhd_pub_t *dhdp); uint32 dhd_get_dhd_dump_len(void *ndev, dhd_pub_t *dhdp); uint32 dhd_get_cookie_log_len(void *ndev, dhd_pub_t *dhdp); uint32 dhd_get_ecntrs_len(void *ndev, dhd_pub_t *dhdp); uint32 dhd_get_rtt_len(void *ndev, dhd_pub_t *dhdp); uint32 dhd_get_dld_len(int log_type); void dhd_init_sec_hdr(log_dump_section_hdr_t *sec_hdr); extern char *dhd_log_dump_get_timestamp(void); bool dhd_log_dump_ecntr_enabled(void); bool dhd_log_dump_rtt_enabled(void); void dhd_nla_put_sssr_dump_len(void *ndev, uint32 *arr_len); int dhd_get_debug_dump(void *dev, const void *user_buf, uint32 len, int type); #ifdef DHD_SSSR_DUMP_BEFORE_SR int dhd_sssr_dump_d11_buf_before(void *dev, const void *user_buf, uint32 len, int core); int dhd_sssr_dump_dig_buf_before(void *dev, const void *user_buf, uint32 len); #endif /* DHD_SSSR_DUMP_BEFORE_SR */ int dhd_sssr_dump_d11_buf_after(void *dev, const void *user_buf, uint32 len, int core); int dhd_sssr_dump_dig_buf_after(void *dev, const void *user_buf, uint32 len); #ifdef DHD_PKT_LOGGING extern int dhd_os_get_pktlog_dump(void *dev, const void *user_buf, uint32 len); extern spinlock_t* dhd_os_get_pktlog_lock(dhd_pub_t *dhdp); extern uint32 dhd_os_get_pktlog_dump_size(struct net_device *dev); extern void dhd_os_get_pktlogdump_filename(struct net_device *dev, char *dump_path, int len); #endif /* DHD_PKT_LOGGING */ #ifdef DNGL_AXI_ERROR_LOGGING extern int dhd_os_get_axi_error_dump(void *dev, const void *user_buf, uint32 len); extern int dhd_os_get_axi_error_dump_size(struct net_device *dev); extern void dhd_os_get_axi_error_filename(struct net_device *dev, char *dump_path, int len); #endif /* DNGL_AXI_ERROR_LOGGING */ #ifdef DHD_DEBUGABILITY_DEBUG_DUMP extern int dhd_debug_dump_to_ring(dhd_pub_t *dhdp); #endif /* DHD_DEBUGABILITY_DEBUG_DUMP */ extern char *dhd_log_dump_get_timestamp(void); #ifdef DHD_EFI /* FW verbose/console output to FW ring buffer */ extern void dhd_log_dump_print(const char *fmt, ...); /* DHD verbose/console output to DHD ring buffer */ extern void dhd_log_dump_print_drv(const char *fmt, ...); #else extern void dhd_dbg_ring_write(int type, char *binary_data, int binary_len, const char *fmt, ...); #endif /* DHD_EFI */ void dhd_log_dump_init(dhd_pub_t *dhd); void dhd_log_dump_deinit(dhd_pub_t *dhd); void dhd_log_dump(void *handle, void *event_info, uint8 event); int do_dhd_log_dump(dhd_pub_t *dhdp, log_dump_type_t *type); void dhd_print_buf_addr(dhd_pub_t *dhdp, char *name, void *buf, unsigned int size); void dhd_log_dump_buf_addr(dhd_pub_t *dhdp, log_dump_type_t *type); int dhd_log_flush(dhd_pub_t *dhdp, log_dump_type_t *type); extern void get_debug_dump_time(char *str); extern void clear_debug_dump_time(char *str); #if defined(WL_CFGVENDOR_SEND_HANG_EVENT) || defined(DHD_PKT_LOGGING) extern void copy_debug_dump_time(char *dest, char *src); #endif /* WL_CFGVENDOR_SEND_HANG_EVENT || DHD_PKT_LOGGING */ #ifndef DHD_EFI void dhd_get_debug_dump_len(void *handle, struct sk_buff *skb, void *event_info, uint8 event); void cfgvendor_log_dump_len(dhd_pub_t *dhdp, log_dump_type_t *type, struct sk_buff *skb); #endif #ifdef DHD_IOVAR_LOG_FILTER_DUMP bool dhd_iovar_log_dump_check(dhd_pub_t *dhd_pub, uint32 cmd, char *msg); #endif /* DHD_IOVAR_LOG_FILTER_DUMP */ #endif /* DHD_LOG_DUMP */ #endif /* !__DHD_LOG_DUMP_H__ */