xref: /OK3568_Linux_fs/external/rkwifibt/drivers/bcmdhd/dhd_dbg.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Debug/trace/assert driver definitions for Dongle Host Driver.
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Copyright (C) 2020, Broadcom.
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  *      Unless you and Broadcom execute a separate written software license
7*4882a593Smuzhiyun  * agreement governing use of this software, this software is licensed to you
8*4882a593Smuzhiyun  * under the terms of the GNU General Public License version 2 (the "GPL"),
9*4882a593Smuzhiyun  * available at http://www.broadcom.com/licenses/GPLv2.php, with the
10*4882a593Smuzhiyun  * following added to such license:
11*4882a593Smuzhiyun  *
12*4882a593Smuzhiyun  *      As a special exception, the copyright holders of this software give you
13*4882a593Smuzhiyun  * permission to link this software with independent modules, and to copy and
14*4882a593Smuzhiyun  * distribute the resulting executable under terms of your choice, provided that
15*4882a593Smuzhiyun  * you also meet, for each linked independent module, the terms and conditions of
16*4882a593Smuzhiyun  * the license of that module.  An independent module is a module which is not
17*4882a593Smuzhiyun  * derived from this software.  The special exception does not apply to any
18*4882a593Smuzhiyun  * modifications of the software.
19*4882a593Smuzhiyun  *
20*4882a593Smuzhiyun  *
21*4882a593Smuzhiyun  * <<Broadcom-WL-IPTag/Open:>>
22*4882a593Smuzhiyun  *
23*4882a593Smuzhiyun  * $Id$
24*4882a593Smuzhiyun  */
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun #ifndef _dhd_dbg_
27*4882a593Smuzhiyun #define _dhd_dbg_
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun #if defined(NDIS)
30*4882a593Smuzhiyun #include "wl_nddbg.h"
31*4882a593Smuzhiyun #endif /* defined(NDIS) */
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun #ifdef DHD_LOG_DUMP
34*4882a593Smuzhiyun extern char *dhd_log_dump_get_timestamp(void);
35*4882a593Smuzhiyun #ifdef DHD_EFI
36*4882a593Smuzhiyun /* FW verbose/console output to FW ring buffer */
37*4882a593Smuzhiyun extern void dhd_log_dump_print(const char *fmt, ...);
38*4882a593Smuzhiyun /* DHD verbose/console output to DHD ring buffer */
39*4882a593Smuzhiyun extern void dhd_log_dump_print_drv(const char *fmt, ...);
40*4882a593Smuzhiyun #define DHD_LOG_DUMP_WRITE(fmt, ...)	dhd_log_dump_print_drv(fmt, ##__VA_ARGS__)
41*4882a593Smuzhiyun #define DHD_LOG_DUMP_WRITE_FW(fmt, ...)	dhd_log_dump_print(fmt, ##__VA_ARGS__)
42*4882a593Smuzhiyun #else
43*4882a593Smuzhiyun #ifndef _DHD_LOG_DUMP_DEFINITIONS_
44*4882a593Smuzhiyun #define _DHD_LOG_DUMP_DEFINITIONS_
45*4882a593Smuzhiyun #define GENERAL_LOG_HDR "\n-------------------- General log ---------------------------\n"
46*4882a593Smuzhiyun #define PRESERVE_LOG_HDR "\n-------------------- Preserve log ---------------------------\n"
47*4882a593Smuzhiyun #define SPECIAL_LOG_HDR "\n-------------------- Special log ---------------------------\n"
48*4882a593Smuzhiyun #define DHD_DUMP_LOG_HDR "\n-------------------- 'dhd dump' log -----------------------\n"
49*4882a593Smuzhiyun #define EXT_TRAP_LOG_HDR "\n-------------------- Extended trap data -------------------\n"
50*4882a593Smuzhiyun #define HEALTH_CHK_LOG_HDR "\n-------------------- Health check data --------------------\n"
51*4882a593Smuzhiyun #ifdef DHD_DUMP_PCIE_RINGS
52*4882a593Smuzhiyun #define FLOWRING_DUMP_HDR "\n-------------------- Flowring dump --------------------\n"
53*4882a593Smuzhiyun #endif /* DHD_DUMP_PCIE_RINGS */
54*4882a593Smuzhiyun #define DHD_LOG_DUMP_DLD(fmt, ...) \
55*4882a593Smuzhiyun 	dhd_log_dump_write(DLD_BUF_TYPE_GENERAL, NULL, 0, fmt, ##__VA_ARGS__)
56*4882a593Smuzhiyun #define DHD_LOG_DUMP_DLD_EX(fmt, ...) \
57*4882a593Smuzhiyun 	dhd_log_dump_write(DLD_BUF_TYPE_SPECIAL, NULL, 0, fmt, ##__VA_ARGS__)
58*4882a593Smuzhiyun #define DHD_LOG_DUMP_DLD_PRSRV(fmt, ...) \
59*4882a593Smuzhiyun 	dhd_log_dump_write(DLD_BUF_TYPE_PRESERVE, NULL, 0, fmt, ##__VA_ARGS__)
60*4882a593Smuzhiyun #endif /* !_DHD_LOG_DUMP_DEFINITIONS_ */
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun #ifndef DHD_LOG_DUMP_RING_DEFINITIONS
63*4882a593Smuzhiyun #define DHD_LOG_DUMP_RING_DEFINITIONS
64*4882a593Smuzhiyun #ifdef DHD_DEBUGABILITY_LOG_DUMP_RING
65*4882a593Smuzhiyun /* Enabled DHD_DEBUGABILITY_LOG_DUMP_RING */
66*4882a593Smuzhiyun extern void dhd_dbg_ring_write(int type, char *binary_data,
67*4882a593Smuzhiyun 	int binary_len, const char *fmt, ...);
68*4882a593Smuzhiyun extern char* dhd_dbg_get_system_timestamp(void);
69*4882a593Smuzhiyun #define DHD_DBG_RING(fmt, ...) \
70*4882a593Smuzhiyun 	dhd_dbg_ring_write(DRIVER_LOG_RING_ID, NULL, 0, fmt, ##__VA_ARGS__)
71*4882a593Smuzhiyun #define DHD_DBG_RING_EX(fmt, ...) \
72*4882a593Smuzhiyun 	dhd_dbg_ring_write(FW_VERBOSE_RING_ID, NULL, 0, fmt, ##__VA_ARGS__)
73*4882a593Smuzhiyun #define DHD_DBG_RING_ROAM(fmt, ...) \
74*4882a593Smuzhiyun 	dhd_dbg_ring_write(ROAM_STATS_RING_ID, NULL, 0, fmt, ##__VA_ARGS__)
75*4882a593Smuzhiyun 
76*4882a593Smuzhiyun #define DHD_LOG_DUMP_WRITE		DHD_DBG_RING
77*4882a593Smuzhiyun #define DHD_LOG_DUMP_WRITE_EX		DHD_DBG_RING_EX
78*4882a593Smuzhiyun #define DHD_LOG_DUMP_WRITE_PRSRV	DHD_DBG_RING
79*4882a593Smuzhiyun #define DHD_LOG_DUMP_WRITE_ROAM		DHD_DBG_RING_ROAM
80*4882a593Smuzhiyun 
81*4882a593Smuzhiyun #define DHD_PREFIX_TS "[%s][%s]: ", dhd_dbg_get_system_timestamp(), dhd_log_dump_get_timestamp()
82*4882a593Smuzhiyun #define DHD_PREFIX_TS_FN		DHD_PREFIX_TS
83*4882a593Smuzhiyun #define DHD_LOG_DUMP_WRITE_TS		DHD_DBG_RING(DHD_PREFIX_TS)
84*4882a593Smuzhiyun #define DHD_LOG_DUMP_WRITE_TS_FN	DHD_DBG_RING(DHD_PREFIX_TS_FN)
85*4882a593Smuzhiyun #define DHD_LOG_DUMP_WRITE_EX_TS	DHD_DBG_RING_EX(DHD_PREFIX_TS)
86*4882a593Smuzhiyun #define DHD_LOG_DUMP_WRITE_EX_TS_FN	DHD_DBG_RING_EX(DHD_PREFIX_TS_FN)
87*4882a593Smuzhiyun #define DHD_LOG_DUMP_WRITE_PRSRV_TS	DHD_DBG_RING(DHD_PREFIX_TS)
88*4882a593Smuzhiyun #define DHD_LOG_DUMP_WRITE_PRSRV_TS_FN	DHD_DBG_RING(DHD_PREFIX_TS_FN)
89*4882a593Smuzhiyun #define DHD_LOG_DUMP_WRITE_ROAM_TS	DHD_DBG_RING_ROAM(DHD_PREFIX_TS)
90*4882a593Smuzhiyun #define DHD_LOG_DUMP_WRITE_ROAM_TS_FN	DHD_DBG_RING_ROAM(DHD_PREFIX_TS_FN)
91*4882a593Smuzhiyun #else
92*4882a593Smuzhiyun /* Not enabled DHD_DEBUGABILITY_LOG_DUMP_RING */
93*4882a593Smuzhiyun #define DHD_LOG_DUMP_WRITE		DHD_LOG_DUMP_DLD
94*4882a593Smuzhiyun #define DHD_LOG_DUMP_WRITE_EX		DHD_LOG_DUMP_DLD_EX
95*4882a593Smuzhiyun #define DHD_LOG_DUMP_WRITE_PRSRV	DHD_LOG_DUMP_DLD_PRSRV
96*4882a593Smuzhiyun #define DHD_LOG_DUMP_WRITE_ROAM		DHD_LOG_DUMP_DLD
97*4882a593Smuzhiyun 
98*4882a593Smuzhiyun #define DHD_PREFIX_TS "[%s]: ", dhd_log_dump_get_timestamp()
99*4882a593Smuzhiyun #define DHD_PREFIX_TS_FN "[%s] %s: ", dhd_log_dump_get_timestamp(), __func__
100*4882a593Smuzhiyun #define DHD_LOG_DUMP_WRITE_TS		DHD_LOG_DUMP_DLD(DHD_PREFIX_TS)
101*4882a593Smuzhiyun #define DHD_LOG_DUMP_WRITE_TS_FN	DHD_LOG_DUMP_DLD(DHD_PREFIX_TS_FN)
102*4882a593Smuzhiyun #define DHD_LOG_DUMP_WRITE_EX_TS	DHD_LOG_DUMP_DLD_EX(DHD_PREFIX_TS)
103*4882a593Smuzhiyun #define DHD_LOG_DUMP_WRITE_EX_TS_FN	DHD_LOG_DUMP_DLD_EX(DHD_PREFIX_TS_FN)
104*4882a593Smuzhiyun #define DHD_LOG_DUMP_WRITE_PRSRV_TS	DHD_LOG_DUMP_DLD_PRSRV(DHD_PREFIX_TS)
105*4882a593Smuzhiyun #define DHD_LOG_DUMP_WRITE_PRSRV_TS_FN	DHD_LOG_DUMP_DLD_PRSRV(DHD_PREFIX_TS_FN)
106*4882a593Smuzhiyun #define DHD_LOG_DUMP_WRITE_ROAM_TS	DHD_LOG_DUMP_DLD(DHD_PREFIX_TS)
107*4882a593Smuzhiyun #define DHD_LOG_DUMP_WRITE_ROAM_TS_FN	DHD_LOG_DUMP_DLD(DHD_PREFIX_TS_FN)
108*4882a593Smuzhiyun #endif /* DHD_DEBUGABILITY_LOG_DUMP_RING */
109*4882a593Smuzhiyun #endif /* DHD_LOG_DUMP_RING_DEFINITIONS */
110*4882a593Smuzhiyun 
111*4882a593Smuzhiyun #endif /* DHD_EFI */
112*4882a593Smuzhiyun #define CONCISE_DUMP_BUFLEN 32 * 1024
113*4882a593Smuzhiyun #define ECNTRS_LOG_HDR "\n-------------------- Ecounters log --------------------------\n"
114*4882a593Smuzhiyun #ifdef DHD_STATUS_LOGGING
115*4882a593Smuzhiyun #define STATUS_LOG_HDR "\n-------------------- Status log -----------------------\n"
116*4882a593Smuzhiyun #endif /* DHD_STATUS_LOGGING */
117*4882a593Smuzhiyun #define RTT_LOG_HDR "\n-------------------- RTT log --------------------------\n"
118*4882a593Smuzhiyun #define BCM_TRACE_LOG_HDR "\n-------------------- BCM Trace log --------------------------\n"
119*4882a593Smuzhiyun #define COOKIE_LOG_HDR "\n-------------------- Cookie List ----------------------------\n"
120*4882a593Smuzhiyun #endif /* DHD_LOG_DUMP */
121*4882a593Smuzhiyun 
122*4882a593Smuzhiyun #if defined(CUSTOMER_DBG_SYSTEM_TIME) && defined(DHD_DEBUGABILITY_LOG_DUMP_RING)
123*4882a593Smuzhiyun #define DBG_PRINT_PREFIX "[%s][dhd][wlan]", dhd_dbg_get_system_timestamp()
124*4882a593Smuzhiyun #else
125*4882a593Smuzhiyun #define DBG_PRINT_PREFIX
126*4882a593Smuzhiyun #endif
127*4882a593Smuzhiyun #define DBG_PRINT_SYSTEM_TIME pr_cont(DBG_PRINT_PREFIX)
128*4882a593Smuzhiyun 
129*4882a593Smuzhiyun #if defined(BCMDBG) || defined(DHD_DEBUG)
130*4882a593Smuzhiyun 
131*4882a593Smuzhiyun #if defined(NDIS)
132*4882a593Smuzhiyun #define DHD_ERROR(args)		do {if (dhd_msg_level & DHD_ERROR_VAL) \
133*4882a593Smuzhiyun 					{printf args;  DHD_NDDBG_OUTPUT args;}} while (0)
134*4882a593Smuzhiyun #define DHD_TRACE(args)		do {if (dhd_msg_level & DHD_TRACE_VAL) \
135*4882a593Smuzhiyun 					{printf args; DHD_NDDBG_OUTPUT args;}} while (0)
136*4882a593Smuzhiyun #define DHD_INFO(args)		do {if (dhd_msg_level & DHD_INFO_VAL) \
137*4882a593Smuzhiyun 					{printf args; DHD_NDDBG_OUTPUT args;}} while (0)
138*4882a593Smuzhiyun #define DHD_ERROR_ROAM(args)	DHD_ERROR(args)
139*4882a593Smuzhiyun #else
140*4882a593Smuzhiyun /* NON-NDIS cases */
141*4882a593Smuzhiyun #ifdef DHD_LOG_DUMP
142*4882a593Smuzhiyun #ifdef DHD_EFI
143*4882a593Smuzhiyun /* defined(DHD_EFI) && defined(DHD_LOG_DUMP) */
144*4882a593Smuzhiyun #define DHD_ERROR(args)	\
145*4882a593Smuzhiyun do {	\
146*4882a593Smuzhiyun 	if (dhd_msg_level & DHD_ERROR_VAL) {	\
147*4882a593Smuzhiyun 		printf args;	\
148*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE("[%s]: ", dhd_log_dump_get_timestamp());	\
149*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE args;	\
150*4882a593Smuzhiyun 	}	\
151*4882a593Smuzhiyun } while (0)
152*4882a593Smuzhiyun 
153*4882a593Smuzhiyun #define DHD_INFO(args) \
154*4882a593Smuzhiyun do {	\
155*4882a593Smuzhiyun 	if (dhd_msg_level & DHD_INFO_VAL) {	\
156*4882a593Smuzhiyun 		printf args;	\
157*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE("[%s]: ", dhd_log_dump_get_timestamp());	\
158*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE args;	\
159*4882a593Smuzhiyun 	}	\
160*4882a593Smuzhiyun } while (0)
161*4882a593Smuzhiyun #else /* DHD_EFI */
162*4882a593Smuzhiyun /* !defined(DHD_EFI) and defined(DHD_LOG_DUMP) */
163*4882a593Smuzhiyun #define DHD_ERROR(args)	\
164*4882a593Smuzhiyun do {	\
165*4882a593Smuzhiyun 	if (dhd_msg_level & DHD_ERROR_VAL) {	\
166*4882a593Smuzhiyun 		printf args;		\
167*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE_TS;	\
168*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE args;	\
169*4882a593Smuzhiyun 	}	\
170*4882a593Smuzhiyun } while (0)
171*4882a593Smuzhiyun 
172*4882a593Smuzhiyun #define DHD_INFO(args)		do {if (dhd_msg_level & DHD_INFO_VAL) printf args;} while (0)
173*4882a593Smuzhiyun #endif /* DHD_EFI */
174*4882a593Smuzhiyun #else /* DHD_LOG_DUMP */
175*4882a593Smuzhiyun /* !defined(DHD_LOG_DUMP cases) */
176*4882a593Smuzhiyun #define DHD_ERROR(args)		do {if (dhd_msg_level & DHD_ERROR_VAL) printf args;} while (0)
177*4882a593Smuzhiyun #define DHD_INFO(args)		do {if (dhd_msg_level & DHD_INFO_VAL) printf args;} while (0)
178*4882a593Smuzhiyun #define DHD_ERROR_ROAM(args)	DHD_ERROR(args)
179*4882a593Smuzhiyun #endif /* DHD_LOG_DUMP */
180*4882a593Smuzhiyun 
181*4882a593Smuzhiyun #define DHD_TRACE(args)		do {if (dhd_msg_level & DHD_TRACE_VAL) printf args;} while (0)
182*4882a593Smuzhiyun #endif /* defined(NDIS) */
183*4882a593Smuzhiyun 
184*4882a593Smuzhiyun #ifdef DHD_LOG_DUMP
185*4882a593Smuzhiyun /* LOG_DUMP defines common to EFI and NON-EFI */
186*4882a593Smuzhiyun #ifdef DHD_EFI
187*4882a593Smuzhiyun /* EFI builds with LOG DUMP enabled */
188*4882a593Smuzhiyun #define DHD_ERROR_MEM(args) \
189*4882a593Smuzhiyun do {	\
190*4882a593Smuzhiyun 	if (dhd_msg_level & DHD_ERROR_VAL) {	\
191*4882a593Smuzhiyun 		if (dhd_msg_level & DHD_ERROR_MEM_VAL) {	\
192*4882a593Smuzhiyun 			printf args; \
193*4882a593Smuzhiyun 		}	\
194*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE("[%s]: ", dhd_log_dump_get_timestamp());	\
195*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE args;	\
196*4882a593Smuzhiyun 	}	\
197*4882a593Smuzhiyun } while (0)
198*4882a593Smuzhiyun #define DHD_IOVAR_MEM(args) \
199*4882a593Smuzhiyun do {	\
200*4882a593Smuzhiyun 	if (dhd_msg_level & DHD_ERROR_VAL) {	\
201*4882a593Smuzhiyun 		if (dhd_msg_level & DHD_IOVAR_MEM_VAL) {	\
202*4882a593Smuzhiyun 			printf args; \
203*4882a593Smuzhiyun 		}	\
204*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE("[%s]: ", dhd_log_dump_get_timestamp());	\
205*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE args;	\
206*4882a593Smuzhiyun 	}	\
207*4882a593Smuzhiyun } while (0)
208*4882a593Smuzhiyun #define DHD_LOG_MEM(args) \
209*4882a593Smuzhiyun do {	\
210*4882a593Smuzhiyun 	if (dhd_msg_level & DHD_ERROR_VAL) {	\
211*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE("[%s]: ", dhd_log_dump_get_timestamp());	\
212*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE args;	\
213*4882a593Smuzhiyun 	}	\
214*4882a593Smuzhiyun } while (0)
215*4882a593Smuzhiyun 
216*4882a593Smuzhiyun #define DHD_EVENT(args) \
217*4882a593Smuzhiyun do {	\
218*4882a593Smuzhiyun 	if (dhd_msg_level & DHD_EVENT_VAL) {	\
219*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE_FW("[%s]: ", dhd_log_dump_get_timestamp());	\
220*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE_FW args;	\
221*4882a593Smuzhiyun 	}	\
222*4882a593Smuzhiyun } while (0)
223*4882a593Smuzhiyun #define DHD_ECNTR_LOG(args)	DHD_EVENT(args)
224*4882a593Smuzhiyun #define DHD_ERROR_EX(args)	DHD_ERROR(args)
225*4882a593Smuzhiyun #define DHD_ERROR_ROAM(args)	DHD_ERROR(args)
226*4882a593Smuzhiyun #define DHD_MSGTRACE_LOG(args)	\
227*4882a593Smuzhiyun do {	\
228*4882a593Smuzhiyun 	if (dhd_msg_level & DHD_MSGTRACE_VAL) {	\
229*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE_FW("[%s]: ", dhd_log_dump_get_timestamp());	\
230*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE_FW args;	\
231*4882a593Smuzhiyun 	}   \
232*4882a593Smuzhiyun } while (0)
233*4882a593Smuzhiyun #define DHD_PRSRV_MEM(args) DHD_EVENT(args)
234*4882a593Smuzhiyun #else
235*4882a593Smuzhiyun /* NON-EFI builds with LOG DUMP enabled */
236*4882a593Smuzhiyun #define DHD_ERROR_MEM(args) \
237*4882a593Smuzhiyun do {	\
238*4882a593Smuzhiyun 	if (dhd_msg_level & DHD_ERROR_VAL) {	\
239*4882a593Smuzhiyun 		if (dhd_msg_level & DHD_ERROR_MEM_VAL) {	\
240*4882a593Smuzhiyun 			printf args;		\
241*4882a593Smuzhiyun 		}	\
242*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE args;	\
243*4882a593Smuzhiyun 	}	\
244*4882a593Smuzhiyun } while (0)
245*4882a593Smuzhiyun #define DHD_IOVAR_MEM(args) \
246*4882a593Smuzhiyun do {	\
247*4882a593Smuzhiyun 	if (dhd_msg_level & DHD_ERROR_VAL) {	\
248*4882a593Smuzhiyun 		if (dhd_msg_level & DHD_IOVAR_MEM_VAL) {	\
249*4882a593Smuzhiyun 			printf args;		\
250*4882a593Smuzhiyun 		}	\
251*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE args;	\
252*4882a593Smuzhiyun 	}	\
253*4882a593Smuzhiyun } while (0)
254*4882a593Smuzhiyun #define DHD_LOG_MEM(args) \
255*4882a593Smuzhiyun do {	\
256*4882a593Smuzhiyun 	if (dhd_msg_level & DHD_ERROR_VAL) {	\
257*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE args;	\
258*4882a593Smuzhiyun 	}	\
259*4882a593Smuzhiyun } while (0)
260*4882a593Smuzhiyun 
261*4882a593Smuzhiyun #define DHD_EVENT(args) \
262*4882a593Smuzhiyun do {	\
263*4882a593Smuzhiyun 	if (dhd_msg_level & DHD_EVENT_VAL) {	\
264*4882a593Smuzhiyun 		printf args;		\
265*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE_PRSRV_TS;	\
266*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE_PRSRV args;	\
267*4882a593Smuzhiyun 	}	\
268*4882a593Smuzhiyun } while (0)
269*4882a593Smuzhiyun #define DHD_PRSRV_MEM(args) \
270*4882a593Smuzhiyun do {	\
271*4882a593Smuzhiyun 	if (dhd_msg_level & DHD_EVENT_VAL) {	\
272*4882a593Smuzhiyun 		if (dhd_msg_level & DHD_PRSRV_MEM_VAL) {	\
273*4882a593Smuzhiyun 			printf args;		\
274*4882a593Smuzhiyun 		}	\
275*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE_TS;		\
276*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE args;	\
277*4882a593Smuzhiyun 	}	\
278*4882a593Smuzhiyun } while (0)
279*4882a593Smuzhiyun /* Re-using 'DHD_MSGTRACE_VAL' for controlling printing of ecounter binary event
280*4882a593Smuzhiyun * logs to console and debug dump -- need to cleanup in the future to use separate
281*4882a593Smuzhiyun * 'DHD_ECNTR_VAL' bitmap flag. 'DHD_MSGTRACE_VAL' will be defined only
282*4882a593Smuzhiyun * for non-android builds.
283*4882a593Smuzhiyun */
284*4882a593Smuzhiyun #define DHD_ECNTR_LOG(args) \
285*4882a593Smuzhiyun do {	\
286*4882a593Smuzhiyun 	if (dhd_msg_level & DHD_EVENT_VAL) {	\
287*4882a593Smuzhiyun 		if (dhd_msg_level & DHD_MSGTRACE_VAL) { \
288*4882a593Smuzhiyun 			printf args;		\
289*4882a593Smuzhiyun 			DHD_LOG_DUMP_WRITE_TS;		\
290*4882a593Smuzhiyun 			DHD_LOG_DUMP_WRITE args;	\
291*4882a593Smuzhiyun 		}	\
292*4882a593Smuzhiyun 	}	\
293*4882a593Smuzhiyun } while (0)
294*4882a593Smuzhiyun #define DHD_ERROR_EX(args)					\
295*4882a593Smuzhiyun do {										\
296*4882a593Smuzhiyun 	if (dhd_msg_level & DHD_ERROR_VAL) {    \
297*4882a593Smuzhiyun 		printf args;		\
298*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE_EX_TS;	\
299*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE_EX args;	\
300*4882a593Smuzhiyun 	}	\
301*4882a593Smuzhiyun } while (0)
302*4882a593Smuzhiyun #define DHD_MSGTRACE_LOG(args)	\
303*4882a593Smuzhiyun do {	\
304*4882a593Smuzhiyun 	if (dhd_msg_level & DHD_MSGTRACE_VAL) {	\
305*4882a593Smuzhiyun 		printf args;		\
306*4882a593Smuzhiyun 	}	\
307*4882a593Smuzhiyun 	DHD_LOG_DUMP_WRITE_TS;		\
308*4882a593Smuzhiyun 	DHD_LOG_DUMP_WRITE args;	\
309*4882a593Smuzhiyun } while (0)
310*4882a593Smuzhiyun 
311*4882a593Smuzhiyun #define DHD_ERROR_ROAM(args)	\
312*4882a593Smuzhiyun do {	\
313*4882a593Smuzhiyun 	if (dhd_msg_level & DHD_ERROR_VAL) {	\
314*4882a593Smuzhiyun 		printf args;		\
315*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE_ROAM_TS;	\
316*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE_ROAM args;	\
317*4882a593Smuzhiyun 	}	\
318*4882a593Smuzhiyun } while (0)
319*4882a593Smuzhiyun #endif /* DHD_EFI */
320*4882a593Smuzhiyun #else /* DHD_LOG_DUMP */
321*4882a593Smuzhiyun /* !DHD_LOG_DUMP */
322*4882a593Smuzhiyun #define DHD_MSGTRACE_LOG(args)  do {if (dhd_msg_level & DHD_MSGTRACE_VAL) printf args;} while (0)
323*4882a593Smuzhiyun #define DHD_ERROR_MEM(args)	DHD_ERROR(args)
324*4882a593Smuzhiyun #define DHD_IOVAR_MEM(args)	DHD_ERROR(args)
325*4882a593Smuzhiyun #define DHD_LOG_MEM(args)	DHD_ERROR(args)
326*4882a593Smuzhiyun #define DHD_EVENT(args)		do {if (dhd_msg_level & DHD_EVENT_VAL) printf args;} while (0)
327*4882a593Smuzhiyun #define DHD_ECNTR_LOG(args)	DHD_EVENT(args)
328*4882a593Smuzhiyun #define DHD_PRSRV_MEM(args)	DHD_EVENT(args)
329*4882a593Smuzhiyun #define DHD_ERROR_EX(args)	DHD_ERROR(args)
330*4882a593Smuzhiyun #define DHD_ERROR_ROAM(args)	DHD_ERROR(args)
331*4882a593Smuzhiyun #endif /* DHD_LOG_DUMP */
332*4882a593Smuzhiyun 
333*4882a593Smuzhiyun #define DHD_DATA(args)		do {if (dhd_msg_level & DHD_DATA_VAL) printf args;} while (0)
334*4882a593Smuzhiyun #define DHD_CTL(args)		do {if (dhd_msg_level & DHD_CTL_VAL) printf args;} while (0)
335*4882a593Smuzhiyun #define DHD_TIMER(args)		do {if (dhd_msg_level & DHD_TIMER_VAL) printf args;} while (0)
336*4882a593Smuzhiyun #define DHD_HDRS(args)		do {if (dhd_msg_level & DHD_HDRS_VAL) printf args;} while (0)
337*4882a593Smuzhiyun #define DHD_BYTES(args)		do {if (dhd_msg_level & DHD_BYTES_VAL) printf args;} while (0)
338*4882a593Smuzhiyun #define DHD_INTR(args)		do {if (dhd_msg_level & DHD_INTR_VAL) printf args;} while (0)
339*4882a593Smuzhiyun #define DHD_GLOM(args)		do {if (dhd_msg_level & DHD_GLOM_VAL) printf args;} while (0)
340*4882a593Smuzhiyun #define DHD_BTA(args)		do {if (dhd_msg_level & DHD_BTA_VAL) printf args;} while (0)
341*4882a593Smuzhiyun #define DHD_ISCAN(args)		do {if (dhd_msg_level & DHD_ISCAN_VAL) printf args;} while (0)
342*4882a593Smuzhiyun #define DHD_ARPOE(args)		do {if (dhd_msg_level & DHD_ARPOE_VAL) printf args;} while (0)
343*4882a593Smuzhiyun #define DHD_REORDER(args)	do {if (dhd_msg_level & DHD_REORDER_VAL) printf args;} while (0)
344*4882a593Smuzhiyun #define DHD_PNO(args)		do {if (dhd_msg_level & DHD_PNO_VAL) printf args;} while (0)
345*4882a593Smuzhiyun #define DHD_RTT(args)		do {if (dhd_msg_level & DHD_RTT_VAL) printf args;} while (0)
346*4882a593Smuzhiyun #define DHD_RPM(args)		do {if (dhd_msg_level & DHD_RPM_VAL) printf args;} while (0)
347*4882a593Smuzhiyun #define DHD_PKT_MON(args)	do {if (dhd_msg_level & DHD_PKT_MON_VAL) printf args;} while (0)
348*4882a593Smuzhiyun 
349*4882a593Smuzhiyun #if defined(DHD_LOG_DUMP)
350*4882a593Smuzhiyun #if defined(DHD_EFI)
351*4882a593Smuzhiyun #define DHD_FWLOG(args) DHD_MSGTRACE_LOG(args)
352*4882a593Smuzhiyun #elif defined(DHD_LOG_PRINT_RATE_LIMIT)
353*4882a593Smuzhiyun #define DHD_FW_VERBOSE(args)        \
354*4882a593Smuzhiyun do {    \
355*4882a593Smuzhiyun 	if (dbgring_msg_level & DHD_FWLOG_VAL) {        \
356*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE_EX args;     \
357*4882a593Smuzhiyun 	}       \
358*4882a593Smuzhiyun } while (0)
359*4882a593Smuzhiyun #define DHD_FWLOG(args)	\
360*4882a593Smuzhiyun 	do { \
361*4882a593Smuzhiyun 		if (dhd_msg_level & DHD_FWLOG_VAL) { \
362*4882a593Smuzhiyun 			if (control_logtrace && !log_print_threshold) \
363*4882a593Smuzhiyun 				printf args; \
364*4882a593Smuzhiyun 			DHD_LOG_DUMP_WRITE args; \
365*4882a593Smuzhiyun 		} \
366*4882a593Smuzhiyun 	} while (0)
367*4882a593Smuzhiyun #else
368*4882a593Smuzhiyun #define DHD_FW_VERBOSE(args)        \
369*4882a593Smuzhiyun do {    \
370*4882a593Smuzhiyun 	if (dbgring_msg_level & DHD_FWLOG_VAL) {        \
371*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE_EX args;     \
372*4882a593Smuzhiyun 	}       \
373*4882a593Smuzhiyun } while (0)
374*4882a593Smuzhiyun 
375*4882a593Smuzhiyun #define DHD_FWLOG(args)	\
376*4882a593Smuzhiyun 	do { \
377*4882a593Smuzhiyun 		if (dhd_msg_level & DHD_FWLOG_VAL) { \
378*4882a593Smuzhiyun 			if (control_logtrace) \
379*4882a593Smuzhiyun 				printf args; \
380*4882a593Smuzhiyun 			DHD_LOG_DUMP_WRITE args; \
381*4882a593Smuzhiyun 		} \
382*4882a593Smuzhiyun 	} while (0)
383*4882a593Smuzhiyun #endif /* DHD_EFI */
384*4882a593Smuzhiyun #else /* DHD_LOG_DUMP */
385*4882a593Smuzhiyun #if defined(NDIS) && (NDISVER >= 0x0630)
386*4882a593Smuzhiyun #define DHD_FWLOG(args)		do {if (dhd_msg_level & DHD_FWLOG_VAL) \
387*4882a593Smuzhiyun 					{printf args;  DHD_NDDBG_OUTPUT args;}} while (0)
388*4882a593Smuzhiyun #else
389*4882a593Smuzhiyun #define DHD_FWLOG(args)		do {if (dhd_msg_level & DHD_FWLOG_VAL) printf args;} while (0)
390*4882a593Smuzhiyun #endif /* defined(NDIS) && (NDISVER >= 0x0630) */
391*4882a593Smuzhiyun #endif /* DHD_LOG_DUMP */
392*4882a593Smuzhiyun 
393*4882a593Smuzhiyun #define DHD_DBGIF(args)		do {if (dhd_msg_level & DHD_DBGIF_VAL) printf args;} while (0)
394*4882a593Smuzhiyun 
395*4882a593Smuzhiyun #ifdef DHD_PCIE_NATIVE_RUNTIMEPM
396*4882a593Smuzhiyun #define DHD_RPM(args)		do {if (dhd_msg_level & DHD_RPM_VAL) printf args;} while (0)
397*4882a593Smuzhiyun #endif /* DHD_PCIE_NATIVE_RUNTIMEPM */
398*4882a593Smuzhiyun 
399*4882a593Smuzhiyun #ifdef CUSTOMER_HW4_DEBUG
400*4882a593Smuzhiyun #define DHD_TRACE_HW4	DHD_ERROR
401*4882a593Smuzhiyun #define DHD_INFO_HW4	DHD_ERROR
402*4882a593Smuzhiyun #define DHD_ERROR_NO_HW4	DHD_INFO
403*4882a593Smuzhiyun #else
404*4882a593Smuzhiyun #define DHD_TRACE_HW4	DHD_TRACE
405*4882a593Smuzhiyun #define DHD_INFO_HW4	DHD_INFO
406*4882a593Smuzhiyun #define DHD_ERROR_NO_HW4	DHD_ERROR
407*4882a593Smuzhiyun #endif /* CUSTOMER_HW4_DEBUG */
408*4882a593Smuzhiyun 
409*4882a593Smuzhiyun #define DHD_ERROR_ON()		(dhd_msg_level & DHD_ERROR_VAL)
410*4882a593Smuzhiyun #define DHD_TRACE_ON()		(dhd_msg_level & DHD_TRACE_VAL)
411*4882a593Smuzhiyun #define DHD_INFO_ON()		(dhd_msg_level & DHD_INFO_VAL)
412*4882a593Smuzhiyun #define DHD_DATA_ON()		(dhd_msg_level & DHD_DATA_VAL)
413*4882a593Smuzhiyun #define DHD_CTL_ON()		(dhd_msg_level & DHD_CTL_VAL)
414*4882a593Smuzhiyun #define DHD_TIMER_ON()		(dhd_msg_level & DHD_TIMER_VAL)
415*4882a593Smuzhiyun #define DHD_HDRS_ON()		(dhd_msg_level & DHD_HDRS_VAL)
416*4882a593Smuzhiyun #define DHD_BYTES_ON()		(dhd_msg_level & DHD_BYTES_VAL)
417*4882a593Smuzhiyun #define DHD_INTR_ON()		(dhd_msg_level & DHD_INTR_VAL)
418*4882a593Smuzhiyun #define DHD_GLOM_ON()		(dhd_msg_level & DHD_GLOM_VAL)
419*4882a593Smuzhiyun #define DHD_EVENT_ON()		(dhd_msg_level & DHD_EVENT_VAL)
420*4882a593Smuzhiyun #define DHD_BTA_ON()		(dhd_msg_level & DHD_BTA_VAL)
421*4882a593Smuzhiyun #define DHD_ISCAN_ON()		(dhd_msg_level & DHD_ISCAN_VAL)
422*4882a593Smuzhiyun #define DHD_ARPOE_ON()		(dhd_msg_level & DHD_ARPOE_VAL)
423*4882a593Smuzhiyun #define DHD_REORDER_ON()	(dhd_msg_level & DHD_REORDER_VAL)
424*4882a593Smuzhiyun #define DHD_NOCHECKDIED_ON()	(dhd_msg_level & DHD_NOCHECKDIED_VAL)
425*4882a593Smuzhiyun #define DHD_PNO_ON()		(dhd_msg_level & DHD_PNO_VAL)
426*4882a593Smuzhiyun #define DHD_RTT_ON()		(dhd_msg_level & DHD_RTT_VAL)
427*4882a593Smuzhiyun #define DHD_MSGTRACE_ON()	(dhd_msg_level & DHD_MSGTRACE_VAL)
428*4882a593Smuzhiyun #define DHD_FWLOG_ON()		(dhd_msg_level & DHD_FWLOG_VAL)
429*4882a593Smuzhiyun #define DHD_DBGIF_ON()		(dhd_msg_level & DHD_DBGIF_VAL)
430*4882a593Smuzhiyun #define DHD_PKT_MON_ON()	(dhd_msg_level & DHD_PKT_MON_VAL)
431*4882a593Smuzhiyun #define DHD_PKT_MON_DUMP_ON()	(dhd_msg_level & DHD_PKT_MON_DUMP_VAL)
432*4882a593Smuzhiyun #ifdef DHD_PCIE_NATIVE_RUNTIMEPM
433*4882a593Smuzhiyun #define DHD_RPM_ON()		(dhd_msg_level & DHD_RPM_VAL)
434*4882a593Smuzhiyun #endif /* DHD_PCIE_NATIVE_RUNTIMEPM */
435*4882a593Smuzhiyun 
436*4882a593Smuzhiyun #else /* defined(BCMDBG) || defined(DHD_DEBUG) */
437*4882a593Smuzhiyun 
438*4882a593Smuzhiyun #if defined(NDIS)
439*4882a593Smuzhiyun #define DHD_ERROR(args)		do {if (dhd_msg_level & DHD_ERROR_VAL) \
440*4882a593Smuzhiyun 					{printf args;  DHD_NDDBG_OUTPUT args;}} while (0)
441*4882a593Smuzhiyun #define DHD_TRACE(args)		do {if (dhd_msg_level & DHD_TRACE_VAL) \
442*4882a593Smuzhiyun 					{DHD_NDDBG_OUTPUT args;}} while (0)
443*4882a593Smuzhiyun #define DHD_INFO(args)		do {if (dhd_msg_level & DHD_INFO_VAL) \
444*4882a593Smuzhiyun 					{DHD_NDDBG_OUTPUT args;}} while (0)
445*4882a593Smuzhiyun #elif defined(DHD_EFI) && defined(DHD_LOG_DUMP)
446*4882a593Smuzhiyun #define DHD_ERROR(args)	\
447*4882a593Smuzhiyun do {	\
448*4882a593Smuzhiyun 	if (dhd_msg_level & DHD_ERROR_VAL) {	\
449*4882a593Smuzhiyun 		printf args;	\
450*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE("[%s]: ", dhd_log_dump_get_timestamp());	\
451*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE args;	\
452*4882a593Smuzhiyun 	}	\
453*4882a593Smuzhiyun } while (0)
454*4882a593Smuzhiyun #define DHD_INFO(args) \
455*4882a593Smuzhiyun do {	\
456*4882a593Smuzhiyun 	if (dhd_msg_level & DHD_INFO_VAL) {	\
457*4882a593Smuzhiyun 		printf args;	\
458*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE("[%s]: ", dhd_log_dump_get_timestamp());	\
459*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE args;	\
460*4882a593Smuzhiyun 	}	\
461*4882a593Smuzhiyun } while (0)
462*4882a593Smuzhiyun #define DHD_TRACE(args)
463*4882a593Smuzhiyun #define DHD_ERROR_ROAM(args)	DHD_ERROR(args)
464*4882a593Smuzhiyun #else /* DHD_EFI && DHD_LOG_DUMP */
465*4882a593Smuzhiyun 
466*4882a593Smuzhiyun #define DHD_ERROR(args)		do {if (dhd_msg_level & DHD_ERROR_VAL) \
467*4882a593Smuzhiyun 								printf args;} while (0)
468*4882a593Smuzhiyun #define DHD_TRACE(args)
469*4882a593Smuzhiyun #define DHD_INFO(args)
470*4882a593Smuzhiyun #define DHD_ERROR_ROAM(args)	DHD_ERROR(args)
471*4882a593Smuzhiyun #endif /* defined(NDIS) */
472*4882a593Smuzhiyun 
473*4882a593Smuzhiyun #define DHD_DATA(args)
474*4882a593Smuzhiyun #define DHD_CTL(args)
475*4882a593Smuzhiyun #define DHD_TIMER(args)
476*4882a593Smuzhiyun #define DHD_HDRS(args)
477*4882a593Smuzhiyun #define DHD_BYTES(args)
478*4882a593Smuzhiyun #define DHD_INTR(args)
479*4882a593Smuzhiyun #define DHD_GLOM(args)
480*4882a593Smuzhiyun 
481*4882a593Smuzhiyun #if defined(DHD_EFI) && defined(DHD_LOG_DUMP)
482*4882a593Smuzhiyun #define DHD_EVENT(args) \
483*4882a593Smuzhiyun do {	\
484*4882a593Smuzhiyun 	if (dhd_msg_level & DHD_EVENT_VAL) {	\
485*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE_FW("[%s]: ", dhd_log_dump_get_timestamp());	\
486*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE_FW args;	\
487*4882a593Smuzhiyun 	}	\
488*4882a593Smuzhiyun } while (0)
489*4882a593Smuzhiyun #define DHD_ECNTR_LOG(args)	DHD_EVENT(args)
490*4882a593Smuzhiyun #else
491*4882a593Smuzhiyun #define DHD_EVENT(args)
492*4882a593Smuzhiyun #define DHD_ECNTR_LOG(args)	DHD_EVENT(args)
493*4882a593Smuzhiyun #endif /* DHD_EFI && DHD_LOG_DUMP */
494*4882a593Smuzhiyun 
495*4882a593Smuzhiyun #define DHD_PRSRV_MEM(args)	DHD_EVENT(args)
496*4882a593Smuzhiyun 
497*4882a593Smuzhiyun #define DHD_BTA(args)
498*4882a593Smuzhiyun #define DHD_ISCAN(args)
499*4882a593Smuzhiyun #define DHD_ARPOE(args)
500*4882a593Smuzhiyun #define DHD_REORDER(args)
501*4882a593Smuzhiyun #define DHD_PNO(args)
502*4882a593Smuzhiyun #define DHD_RTT(args)
503*4882a593Smuzhiyun #define DHD_PKT_MON(args)
504*4882a593Smuzhiyun 
505*4882a593Smuzhiyun #if defined(DHD_EFI) && defined(DHD_LOG_DUMP)
506*4882a593Smuzhiyun #define DHD_MSGTRACE_LOG(args)	\
507*4882a593Smuzhiyun do {	\
508*4882a593Smuzhiyun 	if (dhd_msg_level & DHD_MSGTRACE_VAL) {	\
509*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE_FW("[%s]: ", dhd_log_dump_get_timestamp());	\
510*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE_FW args;	\
511*4882a593Smuzhiyun 	}   \
512*4882a593Smuzhiyun } while (0)
513*4882a593Smuzhiyun #define DHD_FWLOG(args) DHD_MSGTRACE_LOG(args)
514*4882a593Smuzhiyun #else
515*4882a593Smuzhiyun #define DHD_MSGTRACE_LOG(args)
516*4882a593Smuzhiyun #define DHD_FWLOG(args)
517*4882a593Smuzhiyun #endif /* DHD_EFI && DHD_LOG_DUMP */
518*4882a593Smuzhiyun 
519*4882a593Smuzhiyun #define DHD_DBGIF(args)
520*4882a593Smuzhiyun 
521*4882a593Smuzhiyun #if defined(DHD_EFI) && defined(DHD_LOG_DUMP)
522*4882a593Smuzhiyun #define DHD_ERROR_MEM(args) \
523*4882a593Smuzhiyun do {	\
524*4882a593Smuzhiyun 	if (dhd_msg_level & DHD_ERROR_VAL) {	\
525*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE("[%s]: ", dhd_log_dump_get_timestamp());	\
526*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE args;	\
527*4882a593Smuzhiyun 	}	\
528*4882a593Smuzhiyun } while (0)
529*4882a593Smuzhiyun #define DHD_IOVAR_MEM(args) \
530*4882a593Smuzhiyun do {	\
531*4882a593Smuzhiyun 	if (dhd_msg_level & DHD_ERROR_VAL) {	\
532*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE("[%s]: ", dhd_log_dump_get_timestamp());	\
533*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE args;	\
534*4882a593Smuzhiyun 	}	\
535*4882a593Smuzhiyun } while (0)
536*4882a593Smuzhiyun #define DHD_LOG_MEM(args) \
537*4882a593Smuzhiyun do {	\
538*4882a593Smuzhiyun 	if (dhd_msg_level & DHD_ERROR_VAL) {	\
539*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE("[%s]: ", dhd_log_dump_get_timestamp());	\
540*4882a593Smuzhiyun 		DHD_LOG_DUMP_WRITE args;	\
541*4882a593Smuzhiyun 	}	\
542*4882a593Smuzhiyun } while (0)
543*4882a593Smuzhiyun #define DHD_ERROR_EX(args) DHD_ERROR(args)
544*4882a593Smuzhiyun #else
545*4882a593Smuzhiyun #define DHD_ERROR_MEM(args)	DHD_ERROR(args)
546*4882a593Smuzhiyun #define DHD_IOVAR_MEM(args)	DHD_ERROR(args)
547*4882a593Smuzhiyun #define DHD_LOG_MEM(args)	DHD_ERROR(args)
548*4882a593Smuzhiyun #define DHD_ERROR_EX(args)	DHD_ERROR(args)
549*4882a593Smuzhiyun #endif /* DHD_EFI */
550*4882a593Smuzhiyun #define DHD_ERROR_ROAM(args)    DHD_ERROR(args)
551*4882a593Smuzhiyun #ifdef CUSTOMER_HW4_DEBUG
552*4882a593Smuzhiyun #define DHD_TRACE_HW4	DHD_ERROR
553*4882a593Smuzhiyun #define DHD_INFO_HW4	DHD_ERROR
554*4882a593Smuzhiyun #define DHD_ERROR_NO_HW4	DHD_INFO
555*4882a593Smuzhiyun #else
556*4882a593Smuzhiyun #define DHD_TRACE_HW4	DHD_TRACE
557*4882a593Smuzhiyun #define DHD_INFO_HW4	DHD_INFO
558*4882a593Smuzhiyun #define DHD_ERROR_NO_HW4	DHD_ERROR
559*4882a593Smuzhiyun #endif /* CUSTOMER_HW4_DEBUG */
560*4882a593Smuzhiyun 
561*4882a593Smuzhiyun #define DHD_ERROR_ON()		0
562*4882a593Smuzhiyun #define DHD_TRACE_ON()		0
563*4882a593Smuzhiyun #define DHD_INFO_ON()		0
564*4882a593Smuzhiyun #define DHD_DATA_ON()		0
565*4882a593Smuzhiyun #define DHD_CTL_ON()		0
566*4882a593Smuzhiyun #define DHD_TIMER_ON()		0
567*4882a593Smuzhiyun #define DHD_HDRS_ON()		0
568*4882a593Smuzhiyun #define DHD_BYTES_ON()		0
569*4882a593Smuzhiyun #define DHD_INTR_ON()		0
570*4882a593Smuzhiyun #define DHD_GLOM_ON()		0
571*4882a593Smuzhiyun #define DHD_EVENT_ON()		0
572*4882a593Smuzhiyun #define DHD_BTA_ON()		0
573*4882a593Smuzhiyun #define DHD_ISCAN_ON()		0
574*4882a593Smuzhiyun #define DHD_ARPOE_ON()		0
575*4882a593Smuzhiyun #define DHD_REORDER_ON()	0
576*4882a593Smuzhiyun #define DHD_NOCHECKDIED_ON()	0
577*4882a593Smuzhiyun #define DHD_PNO_ON()		0
578*4882a593Smuzhiyun #define DHD_RTT_ON()		0
579*4882a593Smuzhiyun #define DHD_PKT_MON_ON()	0
580*4882a593Smuzhiyun #define DHD_PKT_MON_DUMP_ON()	0
581*4882a593Smuzhiyun #define DHD_MSGTRACE_ON()	0
582*4882a593Smuzhiyun #define DHD_FWLOG_ON()		0
583*4882a593Smuzhiyun #define DHD_DBGIF_ON()		0
584*4882a593Smuzhiyun #ifdef DHD_PCIE_NATIVE_RUNTIMEPM
585*4882a593Smuzhiyun #define DHD_RPM_ON()		0
586*4882a593Smuzhiyun #endif /* DHD_PCIE_NATIVE_RUNTIMEPM */
587*4882a593Smuzhiyun #endif /* defined(BCMDBG) || defined(DHD_DEBUG) */
588*4882a593Smuzhiyun 
589*4882a593Smuzhiyun #define PRINT_RATE_LIMIT_PERIOD 5000000u /* 5s in units of us */
590*4882a593Smuzhiyun #define DHD_ERROR_RLMT(args) \
591*4882a593Smuzhiyun do {	\
592*4882a593Smuzhiyun 	if (dhd_msg_level & DHD_ERROR_VAL) {	\
593*4882a593Smuzhiyun 		static uint64 __err_ts = 0; \
594*4882a593Smuzhiyun 		static uint32 __err_cnt = 0; \
595*4882a593Smuzhiyun 		uint64 __cur_ts = 0; \
596*4882a593Smuzhiyun 		__cur_ts = OSL_SYSUPTIME_US(); \
597*4882a593Smuzhiyun 		if (__err_ts == 0 || (__cur_ts > __err_ts && \
598*4882a593Smuzhiyun 		(__cur_ts - __err_ts > PRINT_RATE_LIMIT_PERIOD))) { \
599*4882a593Smuzhiyun 			__err_ts = __cur_ts; \
600*4882a593Smuzhiyun 			DHD_ERROR(args);	\
601*4882a593Smuzhiyun 			DHD_ERROR(("[Repeats %u times]\n", __err_cnt)); \
602*4882a593Smuzhiyun 			__err_cnt = 0; \
603*4882a593Smuzhiyun 		} else { \
604*4882a593Smuzhiyun 			++__err_cnt; \
605*4882a593Smuzhiyun 		} \
606*4882a593Smuzhiyun 	}	\
607*4882a593Smuzhiyun } while (0)
608*4882a593Smuzhiyun 
609*4882a593Smuzhiyun /* even in non-BCMDBG builds, logging of dongle iovars should be available */
610*4882a593Smuzhiyun #define DHD_DNGL_IOVAR_SET(args) \
611*4882a593Smuzhiyun 	do {if (dhd_msg_level & DHD_DNGL_IOVAR_SET_VAL) printf args;} while (0)
612*4882a593Smuzhiyun 
613*4882a593Smuzhiyun #ifdef BCMPERFSTATS
614*4882a593Smuzhiyun #define DHD_LOG(args)		do {if (dhd_msg_level & DHD_LOG_VAL) bcmlog args;} while (0)
615*4882a593Smuzhiyun #else
616*4882a593Smuzhiyun #define DHD_LOG(args)
617*4882a593Smuzhiyun #endif
618*4882a593Smuzhiyun 
619*4882a593Smuzhiyun #if defined(BCMINTERNAL) && defined(LINUX) && defined(BCMSDIO) && (defined(BCMDBG) || \
620*4882a593Smuzhiyun 	defined(DHD_DEBUG))
621*4882a593Smuzhiyun extern void dhd_blog(char *cp, int size);
622*4882a593Smuzhiyun #define DHD_BLOG(cp, size)		do { dhd_blog(cp, size);} while (0)
623*4882a593Smuzhiyun #else
624*4882a593Smuzhiyun #define DHD_BLOG(cp, size)
625*4882a593Smuzhiyun #endif
626*4882a593Smuzhiyun 
627*4882a593Smuzhiyun #define DHD_NONE(args)
628*4882a593Smuzhiyun extern int dhd_msg_level;
629*4882a593Smuzhiyun extern int dbgring_msg_level;
630*4882a593Smuzhiyun #ifdef DHD_LOG_PRINT_RATE_LIMIT
631*4882a593Smuzhiyun extern int log_print_threshold;
632*4882a593Smuzhiyun #endif /* DHD_LOG_PRINT_RATE_LIMIT */
633*4882a593Smuzhiyun 
634*4882a593Smuzhiyun /* Defines msg bits */
635*4882a593Smuzhiyun #include <dhdioctl.h>
636*4882a593Smuzhiyun 
637*4882a593Smuzhiyun #endif /* _dhd_dbg_ */
638