• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Debug/trace/assert driver definitions for Dongle Host Driver.
4  *
5  * Copyright (C) 1999-2019, Broadcom.
6  *
7  *      Unless you and Broadcom execute a separate written software license
8  * agreement governing use of this software, this software is licensed to you
9  * under the terms of the GNU General Public License version 2 (the "GPL"),
10  * available at http://www.broadcom.com/licenses/GPLv2.php, with the
11  * following added to such license:
12  *
13  *      As a special exception, the copyright holders of this software give you
14  * permission to link this software with independent modules, and to copy and
15  * distribute the resulting executable under terms of your choice, provided that
16  * you also meet, for each linked independent module, the terms and conditions of
17  * the license of that module.  An independent module is a module which is not
18  * derived from this software.  The special exception does not apply to any
19  * modifications of the software.
20  *
21  *      Notwithstanding the above, under no circumstances may you combine this
22  * software in any way with any other Broadcom software provided under a license
23  * other than the GPL, without Broadcom's express prior written consent.
24  *
25  *
26  * <<Broadcom-WL-IPTag/Open:>>
27  *
28  * $Id: dhd_dbg.h 798329 2019-01-08 05:40:39Z $
29  */
30 
31 #ifndef _dhd_dbg_
32 #define _dhd_dbg_
33 
34 #ifdef DHD_LOG_DUMP
35 extern char *dhd_log_dump_get_timestamp(void);
36 extern void dhd_log_dump_write(int type, char *binary_data,
37 		int binary_len, const char *fmt, ...);
38 #ifndef _DHD_LOG_DUMP_DEFINITIONS_
39 #define _DHD_LOG_DUMP_DEFINITIONS_
40 #define GENERAL_LOG_HDR "\n-------------------- General log ---------------------------\n"
41 #define PRESERVE_LOG_HDR "\n-------------------- Preserve log ---------------------------\n"
42 #define SPECIAL_LOG_HDR "\n-------------------- Special log ---------------------------\n"
43 #define DHD_DUMP_LOG_HDR "\n-------------------- 'dhd dump' log -----------------------\n"
44 #define EXT_TRAP_LOG_HDR "\n-------------------- Extended trap data -------------------\n"
45 #define HEALTH_CHK_LOG_HDR "\n-------------------- Health check data --------------------\n"
46 #ifdef DHD_DUMP_PCIE_RINGS
47 #define FLOWRING_DUMP_HDR "\n-------------------- Flowring dump --------------------\n"
48 #endif /* DHD_DUMP_PCIE_RINGS */
49 #define DHD_LOG_DUMP_WRITE(fmt, ...) \
50 	dhd_log_dump_write(DLD_BUF_TYPE_GENERAL, NULL, 0, fmt, ##__VA_ARGS__)
51 #define DHD_LOG_DUMP_WRITE_EX(fmt, ...) \
52 	dhd_log_dump_write(DLD_BUF_TYPE_SPECIAL, NULL, 0, fmt, ##__VA_ARGS__)
53 #define DHD_LOG_DUMP_WRITE_PRSRV(fmt, ...) \
54 	dhd_log_dump_write(DLD_BUF_TYPE_PRESERVE, NULL, 0, fmt, ##__VA_ARGS__)
55 #endif /* !_DHD_LOG_DUMP_DEFINITIONS_ */
56 #define CONCISE_DUMP_BUFLEN 16 * 1024
57 #define ECNTRS_LOG_HDR "\n-------------------- Ecounters log --------------------------\n"
58 #ifdef DHD_STATUS_LOGGING
59 #define STATUS_LOG_HDR "\n-------------------- Status log -----------------------\n"
60 #endif /* DHD_STATUS_LOGGING */
61 #define RTT_LOG_HDR "\n-------------------- RTT log --------------------------\n"
62 #define COOKIE_LOG_HDR "\n-------------------- Cookie List ----------------------------\n"
63 #endif /* DHD_LOG_DUMP */
64 
65 #if defined(DHD_DEBUG)
66 
67 /* NON-NDIS cases */
68 #ifdef DHD_LOG_DUMP
69 /* Common case for EFI and non EFI */
70 #define DHD_ERROR(args)	\
71 do {	\
72 	if (dhd_msg_level & DHD_ERROR_VAL) {	\
73 		printf args;	\
74 		DHD_LOG_DUMP_WRITE("[%s]: ", dhd_log_dump_get_timestamp());	\
75 		DHD_LOG_DUMP_WRITE args;	\
76 	}	\
77 } while (0)
78 
79 /* !defined(DHD_EFI) and defined(DHD_LOG_DUMP) */
80 #define DHD_INFO(args)		do {if (dhd_msg_level & DHD_INFO_VAL) printf args;} while (0)
81 #else /* DHD_LOG_DUMP */
82 /* !defined(DHD_LOG_DUMP cases) */
83 #define DHD_ERROR(args)		do {if (dhd_msg_level & DHD_ERROR_VAL) printf args;} while (0)
84 #define DHD_INFO(args)		do {if (dhd_msg_level & DHD_INFO_VAL) printf args;} while (0)
85 #endif /* DHD_LOG_DUMP */
86 
87 #define DHD_TRACE(args)		do {if (dhd_msg_level & DHD_TRACE_VAL) printf args;} while (0)
88 
89 #ifdef DHD_LOG_DUMP
90 /* LOG_DUMP defines common to EFI and NON-EFI */
91 #define DHD_ERROR_MEM(args) \
92 do {	\
93 	if (dhd_msg_level & DHD_ERROR_VAL) {	\
94 		if (dhd_msg_level & DHD_ERROR_MEM_VAL) {	\
95 			printf args; \
96 		}	\
97 		DHD_LOG_DUMP_WRITE("[%s]: ", dhd_log_dump_get_timestamp());	\
98 		DHD_LOG_DUMP_WRITE args;	\
99 	}	\
100 } while (0)
101 #define DHD_IOVAR_MEM(args) \
102 do {	\
103 	if (dhd_msg_level & DHD_ERROR_VAL) {	\
104 		if (dhd_msg_level & DHD_IOVAR_MEM_VAL) {	\
105 			printf args; \
106 		}	\
107 		DHD_LOG_DUMP_WRITE("[%s]: ", dhd_log_dump_get_timestamp());	\
108 		DHD_LOG_DUMP_WRITE args;	\
109 	}	\
110 } while (0)
111 #define DHD_LOG_MEM(args) \
112 do {	\
113 	if (dhd_msg_level & DHD_ERROR_VAL) {	\
114 		DHD_LOG_DUMP_WRITE("[%s]: ", dhd_log_dump_get_timestamp());	\
115 		DHD_LOG_DUMP_WRITE args;	\
116 	}	\
117 } while (0)
118 /* NON-EFI builds with LOG DUMP enabled */
119 #define DHD_EVENT(args) \
120 do {	\
121 	if (dhd_msg_level & DHD_EVENT_VAL) {	\
122 		printf args; \
123 		DHD_LOG_DUMP_WRITE("[%s]: ", dhd_log_dump_get_timestamp());	\
124 		DHD_LOG_DUMP_WRITE args;	\
125 	}	\
126 } while (0)
127 #define DHD_PRSRV_MEM(args) \
128 do {	\
129 	if (dhd_msg_level & DHD_EVENT_VAL) {	\
130 		if (dhd_msg_level & DHD_PRSRV_MEM_VAL) \
131 			printf args; \
132 		DHD_LOG_DUMP_WRITE_PRSRV("[%s]: ", dhd_log_dump_get_timestamp()); \
133 		DHD_LOG_DUMP_WRITE_PRSRV args;	\
134 	}	\
135 } while (0)
136 
137 /* Re-using 'DHD_MSGTRACE_VAL' for controlling printing of ecounter binary event
138 * logs to console and debug dump -- need to cleanup in the future to use separate
139 * 'DHD_ECNTR_VAL' bitmap flag. 'DHD_MSGTRACE_VAL' will be defined only
140 * for non-android builds.
141 */
142 #define DHD_ECNTR_LOG(args) \
143 do {	\
144 	if (dhd_msg_level & DHD_EVENT_VAL) {	\
145 		if (dhd_msg_level & DHD_MSGTRACE_VAL) {	\
146 			printf args; \
147 			DHD_LOG_DUMP_WRITE("[%s]: ", dhd_log_dump_get_timestamp()); \
148 			DHD_LOG_DUMP_WRITE args;	\
149 		}	\
150 	}	\
151 } while (0)
152 
153 #define DHD_ERROR_EX(args)					\
154 do {										\
155 	if (dhd_msg_level & DHD_ERROR_VAL) {    \
156 		printf args;	\
157 		DHD_LOG_DUMP_WRITE_EX("[%s]: ", dhd_log_dump_get_timestamp());	\
158 		DHD_LOG_DUMP_WRITE_EX args;	\
159 	}	\
160 } while (0)
161 
162 #define DHD_MSGTRACE_LOG(args)	\
163 do {	\
164 	if (dhd_msg_level & DHD_MSGTRACE_VAL) {	\
165 		printf args;	\
166 	}	\
167 	DHD_LOG_DUMP_WRITE("[%s]: ", dhd_log_dump_get_timestamp());	\
168 	DHD_LOG_DUMP_WRITE args;	\
169 } while (0)
170 #else /* DHD_LOG_DUMP */
171 /* !DHD_LOG_DUMP */
172 #define DHD_MSGTRACE_LOG(args)  do {if (dhd_msg_level & DHD_MSGTRACE_VAL) printf args;} while (0)
173 #define DHD_ERROR_MEM(args)	DHD_ERROR(args)
174 #define DHD_IOVAR_MEM(args)	DHD_ERROR(args)
175 #define DHD_LOG_MEM(args)	DHD_ERROR(args)
176 #define DHD_EVENT(args)		do {if (dhd_msg_level & DHD_EVENT_VAL) printf args;} while (0)
177 #define DHD_ECNTR_LOG(args)	DHD_EVENT(args)
178 #define DHD_PRSRV_MEM(args)	DHD_EVENT(args)
179 #define DHD_ERROR_EX(args)	DHD_ERROR(args)
180 #endif /* DHD_LOG_DUMP */
181 
182 #define DHD_DATA(args)		do {if (dhd_msg_level & DHD_DATA_VAL) printf args;} while (0)
183 #define DHD_CTL(args)		do {if (dhd_msg_level & DHD_CTL_VAL) printf args;} while (0)
184 #define DHD_TIMER(args)		do {if (dhd_msg_level & DHD_TIMER_VAL) printf args;} while (0)
185 #define DHD_HDRS(args)		do {if (dhd_msg_level & DHD_HDRS_VAL) printf args;} while (0)
186 #define DHD_BYTES(args)		do {if (dhd_msg_level & DHD_BYTES_VAL) printf args;} while (0)
187 #define DHD_INTR(args)		do {if (dhd_msg_level & DHD_INTR_VAL) printf args;} while (0)
188 #define DHD_GLOM(args)		do {if (dhd_msg_level & DHD_GLOM_VAL) printf args;} while (0)
189 #define DHD_BTA(args)		do {if (dhd_msg_level & DHD_BTA_VAL) printf args;} while (0)
190 #define DHD_ISCAN(args)		do {if (dhd_msg_level & DHD_ISCAN_VAL) printf args;} while (0)
191 #define DHD_ARPOE(args)		do {if (dhd_msg_level & DHD_ARPOE_VAL) printf args;} while (0)
192 #define DHD_REORDER(args)	do {if (dhd_msg_level & DHD_REORDER_VAL) printf args;} while (0)
193 #define DHD_PNO(args)		do {if (dhd_msg_level & DHD_PNO_VAL) printf args;} while (0)
194 #define DHD_RTT(args)		do {if (dhd_msg_level & DHD_RTT_VAL) printf args;} while (0)
195 #define DHD_PKT_MON(args)	do {if (dhd_msg_level & DHD_PKT_MON_VAL) printf args;} while (0)
196 
197 #if defined(DHD_LOG_DUMP)
198 #if defined(DHD_LOG_PRINT_RATE_LIMIT)
199 #define DHD_FWLOG(args)	\
200 	do { \
201 		if (dhd_msg_level & DHD_FWLOG_VAL) { \
202 			if (!log_print_threshold) \
203 				printf args; \
204 			DHD_LOG_DUMP_WRITE args; \
205 		} \
206 	} while (0)
207 #else
208 #define DHD_FWLOG(args)	\
209 	do { \
210 		if (dhd_msg_level & DHD_FWLOG_VAL) { \
211 			printf args; \
212 			DHD_LOG_DUMP_WRITE args; \
213 		} \
214 	} while (0)
215 #endif // endif
216 #else /* DHD_LOG_DUMP */
217 #define DHD_FWLOG(args)		do {if (dhd_msg_level & DHD_FWLOG_VAL) printf args;} while (0)
218 #endif /* DHD_LOG_DUMP */
219 
220 #define DHD_DBGIF(args)		do {if (dhd_msg_level & DHD_DBGIF_VAL) printf args;} while (0)
221 
222 #ifdef DHD_PCIE_NATIVE_RUNTIMEPM
223 #define DHD_RPM(args)		do {if (dhd_msg_level & DHD_RPM_VAL) printf args;} while (0)
224 #endif /* DHD_PCIE_NATIVE_RUNTIMEPM */
225 
226 #define DHD_TRACE_HW4	DHD_TRACE
227 #define DHD_INFO_HW4	DHD_INFO
228 #define DHD_ERROR_NO_HW4	DHD_ERROR
229 
230 #define DHD_ERROR_ON()		(dhd_msg_level & DHD_ERROR_VAL)
231 #define DHD_TRACE_ON()		(dhd_msg_level & DHD_TRACE_VAL)
232 #define DHD_INFO_ON()		(dhd_msg_level & DHD_INFO_VAL)
233 #define DHD_DATA_ON()		(dhd_msg_level & DHD_DATA_VAL)
234 #define DHD_CTL_ON()		(dhd_msg_level & DHD_CTL_VAL)
235 #define DHD_TIMER_ON()		(dhd_msg_level & DHD_TIMER_VAL)
236 #define DHD_HDRS_ON()		(dhd_msg_level & DHD_HDRS_VAL)
237 #define DHD_BYTES_ON()		(dhd_msg_level & DHD_BYTES_VAL)
238 #define DHD_INTR_ON()		(dhd_msg_level & DHD_INTR_VAL)
239 #define DHD_GLOM_ON()		(dhd_msg_level & DHD_GLOM_VAL)
240 #define DHD_EVENT_ON()		(dhd_msg_level & DHD_EVENT_VAL)
241 #define DHD_BTA_ON()		(dhd_msg_level & DHD_BTA_VAL)
242 #define DHD_ISCAN_ON()		(dhd_msg_level & DHD_ISCAN_VAL)
243 #define DHD_ARPOE_ON()		(dhd_msg_level & DHD_ARPOE_VAL)
244 #define DHD_REORDER_ON()	(dhd_msg_level & DHD_REORDER_VAL)
245 #define DHD_NOCHECKDIED_ON()	(dhd_msg_level & DHD_NOCHECKDIED_VAL)
246 #define DHD_PNO_ON()		(dhd_msg_level & DHD_PNO_VAL)
247 #define DHD_RTT_ON()		(dhd_msg_level & DHD_RTT_VAL)
248 #define DHD_MSGTRACE_ON()	(dhd_msg_level & DHD_MSGTRACE_VAL)
249 #define DHD_FWLOG_ON()		(dhd_msg_level & DHD_FWLOG_VAL)
250 #define DHD_DBGIF_ON()		(dhd_msg_level & DHD_DBGIF_VAL)
251 #define DHD_PKT_MON_ON()	(dhd_msg_level & DHD_PKT_MON_VAL)
252 #define DHD_PKT_MON_DUMP_ON()	(dhd_msg_level & DHD_PKT_MON_DUMP_VAL)
253 #ifdef DHD_PCIE_NATIVE_RUNTIMEPM
254 #define DHD_RPM_ON()		(dhd_msg_level & DHD_RPM_VAL)
255 #endif /* DHD_PCIE_NATIVE_RUNTIMEPM */
256 
257 #else /* defined(BCMDBG) || defined(DHD_DEBUG) */
258 
259 #define DHD_ERROR(args)		do {if (dhd_msg_level & DHD_ERROR_VAL) \
260 								printf args;} while (0)
261 #define DHD_TRACE(args)
262 #define DHD_INFO(args)
263 
264 #define DHD_DATA(args)
265 #define DHD_CTL(args)
266 #define DHD_TIMER(args)
267 #define DHD_HDRS(args)
268 #define DHD_BYTES(args)
269 #define DHD_INTR(args)
270 #define DHD_GLOM(args)
271 
272 #define DHD_EVENT(args)
273 #define DHD_ECNTR_LOG(args)	DHD_EVENT(args)
274 
275 #define DHD_PRSRV_MEM(args)	DHD_EVENT(args)
276 
277 #define DHD_BTA(args)
278 #define DHD_ISCAN(args)
279 #define DHD_ARPOE(args)
280 #define DHD_REORDER(args)
281 #define DHD_PNO(args)
282 #define DHD_RTT(args)
283 #define DHD_PKT_MON(args)
284 
285 #define DHD_MSGTRACE_LOG(args)
286 #define DHD_FWLOG(args)
287 
288 #define DHD_DBGIF(args)
289 
290 #define DHD_ERROR_MEM(args)	DHD_ERROR(args)
291 #define DHD_IOVAR_MEM(args)	DHD_ERROR(args)
292 #define DHD_LOG_MEM(args)	DHD_ERROR(args)
293 #define DHD_ERROR_EX(args)	DHD_ERROR(args)
294 
295 #define DHD_TRACE_HW4	DHD_TRACE
296 #define DHD_INFO_HW4	DHD_INFO
297 #define DHD_ERROR_NO_HW4	DHD_ERROR
298 
299 #define DHD_ERROR_ON()		0
300 #define DHD_TRACE_ON()		0
301 #define DHD_INFO_ON()		0
302 #define DHD_DATA_ON()		0
303 #define DHD_CTL_ON()		0
304 #define DHD_TIMER_ON()		0
305 #define DHD_HDRS_ON()		0
306 #define DHD_BYTES_ON()		0
307 #define DHD_INTR_ON()		0
308 #define DHD_GLOM_ON()		0
309 #define DHD_EVENT_ON()		0
310 #define DHD_BTA_ON()		0
311 #define DHD_ISCAN_ON()		0
312 #define DHD_ARPOE_ON()		0
313 #define DHD_REORDER_ON()	0
314 #define DHD_NOCHECKDIED_ON()	0
315 #define DHD_PNO_ON()		0
316 #define DHD_RTT_ON()		0
317 #define DHD_PKT_MON_ON()	0
318 #define DHD_PKT_MON_DUMP_ON()	0
319 #define DHD_MSGTRACE_ON()	0
320 #define DHD_FWLOG_ON()		0
321 #define DHD_DBGIF_ON()		0
322 #ifdef DHD_PCIE_NATIVE_RUNTIMEPM
323 #define DHD_RPM_ON()		0
324 #endif /* DHD_PCIE_NATIVE_RUNTIMEPM */
325 #endif // endif
326 
327 #define PRINT_RATE_LIMIT_PERIOD 5000000u /* 5s in units of us */
328 #define DHD_ERROR_RLMT(args) \
329 do {	\
330 	if (dhd_msg_level & DHD_ERROR_VAL) {	\
331 		static uint64 __err_ts = 0; \
332 		static uint32 __err_cnt = 0; \
333 		uint64 __cur_ts = 0; \
334 		__cur_ts = OSL_SYSUPTIME_US(); \
335 		if (__err_ts == 0 || (__cur_ts > __err_ts && \
336 		(__cur_ts - __err_ts > PRINT_RATE_LIMIT_PERIOD))) { \
337 			__err_ts = __cur_ts; \
338 			DHD_ERROR(args);	\
339 			DHD_ERROR(("[Repeats %u times]\n", __err_cnt)); \
340 			__err_cnt = 0; \
341 		} else { \
342 			++__err_cnt; \
343 		} \
344 	}	\
345 } while (0)
346 
347 /* even in non-BCMDBG builds, logging of dongle iovars should be available */
348 #define DHD_DNGL_IOVAR_SET(args) \
349 	do {if (dhd_msg_level & DHD_DNGL_IOVAR_SET_VAL) printf args;} while (0)
350 
351 #define DHD_LOG(args)
352 
353 #define DHD_BLOG(cp, size)
354 
355 #define DHD_NONE(args)
356 extern int dhd_msg_level;
357 #ifdef DHD_LOG_PRINT_RATE_LIMIT
358 extern int log_print_threshold;
359 #endif /* DHD_LOG_PRINT_RATE_LIMIT */
360 
361 #define DHD_RTT_MEM(args) DHD_LOG_MEM(args)
362 #define DHD_RTT_ERR(args) DHD_ERROR(args)
363 
364 /* Defines msg bits */
365 #include <dhdioctl.h>
366 
367 #endif /* _dhd_dbg_ */
368