blob: 3b50ad6d9d35612ad3b881d2d992e622bad260a0 [file] [log] [blame]
Victor Hsue0cd0e72021-06-08 11:05:03 +08001/*
2 * Debug/trace/assert driver definitions for Dongle Host Driver.
3 *
4 * Copyright (C) 2021, Broadcom.
5 *
6 * Unless you and Broadcom execute a separate written software license
7 * agreement governing use of this software, this software is licensed to you
8 * under the terms of the GNU General Public License version 2 (the "GPL"),
9 * available at http://www.broadcom.com/licenses/GPLv2.php, with the
10 * following added to such license:
11 *
12 * As a special exception, the copyright holders of this software give you
13 * permission to link this software with independent modules, and to copy and
14 * distribute the resulting executable under terms of your choice, provided that
15 * you also meet, for each linked independent module, the terms and conditions of
16 * the license of that module. An independent module is a module which is not
17 * derived from this software. The special exception does not apply to any
18 * modifications of the software.
19 *
20 *
21 * <<Broadcom-WL-IPTag/Open:>>
22 *
23 * $Id$
24 */
25
26#ifndef _dhd_dbg_
27#define _dhd_dbg_
28
29#if defined(NDIS)
30#include "wl_nddbg.h"
31#endif /* defined(NDIS) */
32
Victor Hsue0cd0e72021-06-08 11:05:03 +080033#ifdef DHD_DEBUGABILITY_LOG_DUMP_RING
Terry Chenc027f9e2021-07-22 16:49:12 +080034/* Only for writing to ring */
35#define DHD_INFO_RING(args) DHD_ERROR(args)
36/* FW_VERBOSE RING */
37#define DHD_LOG_DUMP_FWLOG DHD_LOG_DUMP_WRITE_EX
38#define DHD_LOG_DUMP_FWLOG_TS DHD_LOG_DUMP_WRITE_EX_TS
Victor Hsue0cd0e72021-06-08 11:05:03 +080039#else
Terry Chenc027f9e2021-07-22 16:49:12 +080040#define DHD_INFO_RING(args)
41/* DLD_BUF_TYPE_GENERAL */
42#define DHD_LOG_DUMP_FWLOG DHD_LOG_DUMP_WRITE
43#define DHD_LOG_DUMP_FWLOG_TS DHD_LOG_DUMP_WRITE_TS
44#endif
Victor Hsue0cd0e72021-06-08 11:05:03 +080045
Terry Chenc027f9e2021-07-22 16:49:12 +080046#ifdef CUSTOM_PREFIX
47#define DBG_PRINT_PREFIX "[%s]"CUSTOM_PREFIX, OSL_GET_RTCTIME()
normanwhl9bab3022022-12-10 13:58:49 +000048#define DBG_PRINT_SYSTEM_TIME pr_cont(DBG_PRINT_PREFIX)
49#define DHD_CONS_ONLY(args) \
50do { \
51 DBG_PRINT_SYSTEM_TIME; \
52 pr_cont args; \
53} while (0)
Victor Hsue0cd0e72021-06-08 11:05:03 +080054#else
55#define DBG_PRINT_PREFIX
Terry Chenc027f9e2021-07-22 16:49:12 +080056#define DBG_PRINT_SYSTEM_TIME pr_cont(DBG_PRINT_PREFIX)
normanwhl9bab3022022-12-10 13:58:49 +000057#define DHD_CONS_ONLY(args) do { printf args;} while (0)
58#endif
Victor Hsue0cd0e72021-06-08 11:05:03 +080059
60#if defined(BCMDBG) || defined(DHD_DEBUG)
61
62#if defined(NDIS)
63#define DHD_ERROR(args) do {if (dhd_msg_level & DHD_ERROR_VAL) \
64 {printf args; DHD_NDDBG_OUTPUT args;}} while (0)
65#define DHD_TRACE(args) do {if (dhd_msg_level & DHD_TRACE_VAL) \
66 {printf args; DHD_NDDBG_OUTPUT args;}} while (0)
67#define DHD_INFO(args) do {if (dhd_msg_level & DHD_INFO_VAL) \
68 {printf args; DHD_NDDBG_OUTPUT args;}} while (0)
69#define DHD_ERROR_ROAM(args) DHD_ERROR(args)
70#else
71/* NON-NDIS cases */
72#ifdef DHD_LOG_DUMP
73#ifdef DHD_EFI
74/* defined(DHD_EFI) && defined(DHD_LOG_DUMP) */
75#define DHD_ERROR(args) \
76do { \
77 if (dhd_msg_level & DHD_ERROR_VAL) { \
78 printf args; \
79 DHD_LOG_DUMP_WRITE("[%s]: ", dhd_log_dump_get_timestamp()); \
80 DHD_LOG_DUMP_WRITE args; \
81 } \
82} while (0)
83
84#define DHD_INFO(args) \
85do { \
86 if (dhd_msg_level & DHD_INFO_VAL) { \
87 printf args; \
88 DHD_LOG_DUMP_WRITE("[%s]: ", dhd_log_dump_get_timestamp()); \
89 DHD_LOG_DUMP_WRITE args; \
90 } \
91} while (0)
92#else /* DHD_EFI */
93/* !defined(DHD_EFI) and defined(DHD_LOG_DUMP) */
94#define DHD_ERROR(args) \
95do { \
96 if (dhd_msg_level & DHD_ERROR_VAL) { \
97 DBG_PRINT_SYSTEM_TIME; \
98 pr_cont args; \
Terry Chenc027f9e2021-07-22 16:49:12 +080099 } \
100 if (dhd_log_level & DHD_ERROR_VAL) { \
Victor Hsue0cd0e72021-06-08 11:05:03 +0800101 DHD_LOG_DUMP_WRITE_TS; \
102 DHD_LOG_DUMP_WRITE args; \
103 } \
104} while (0)
105
Terry Chenc027f9e2021-07-22 16:49:12 +0800106#ifdef DHD_DEBUGABILITY_LOG_DUMP_RING
107#define DHD_INFO(args) \
108do { \
109 if (dhd_msg_level & DHD_INFO_VAL) { \
110 DBG_PRINT_SYSTEM_TIME; \
111 pr_cont args; \
112 } \
113 if (dhd_log_level & DHD_INFO_VAL) { \
114 DHD_LOG_DUMP_WRITE_TS; \
115 DHD_LOG_DUMP_WRITE args; \
116 } \
117} while (0)
118#else
Victor Hsue0cd0e72021-06-08 11:05:03 +0800119#define DHD_INFO(args) do {if (dhd_msg_level & DHD_INFO_VAL) printf args;} while (0)
Terry Chenc027f9e2021-07-22 16:49:12 +0800120#endif /* DHD_DEBUGABILITY_LOG_DUMP_RING */
Victor Hsue0cd0e72021-06-08 11:05:03 +0800121#endif /* DHD_EFI */
122#else /* DHD_LOG_DUMP */
123/* !defined(DHD_LOG_DUMP cases) */
124#define DHD_ERROR(args) do {if (dhd_msg_level & DHD_ERROR_VAL) printf args;} while (0)
125#define DHD_INFO(args) do {if (dhd_msg_level & DHD_INFO_VAL) printf args;} while (0)
126#define DHD_ERROR_ROAM(args) DHD_ERROR(args)
127#endif /* DHD_LOG_DUMP */
128
129#define DHD_TRACE(args) do {if (dhd_msg_level & DHD_TRACE_VAL) printf args;} while (0)
130#endif /* defined(NDIS) */
131
132#ifdef DHD_LOG_DUMP
133/* LOG_DUMP defines common to EFI and NON-EFI */
134#ifdef DHD_EFI
135/* EFI builds with LOG DUMP enabled */
136#define DHD_ERROR_MEM(args) \
137do { \
138 if (dhd_msg_level & DHD_ERROR_VAL) { \
139 if (dhd_msg_level & DHD_ERROR_MEM_VAL) { \
140 printf args; \
141 } \
142 DHD_LOG_DUMP_WRITE("[%s]: ", dhd_log_dump_get_timestamp()); \
143 DHD_LOG_DUMP_WRITE args; \
144 } \
145} while (0)
146#define DHD_IOVAR_MEM(args) \
147do { \
148 if (dhd_msg_level & DHD_ERROR_VAL) { \
149 if (dhd_msg_level & DHD_IOVAR_MEM_VAL) { \
150 printf args; \
151 } \
152 DHD_LOG_DUMP_WRITE("[%s]: ", dhd_log_dump_get_timestamp()); \
153 DHD_LOG_DUMP_WRITE args; \
154 } \
155} while (0)
156#define DHD_LOG_MEM(args) \
157do { \
158 if (dhd_msg_level & DHD_ERROR_VAL) { \
159 DHD_LOG_DUMP_WRITE("[%s]: ", dhd_log_dump_get_timestamp()); \
160 DHD_LOG_DUMP_WRITE args; \
161 } \
162} while (0)
163
164#define DHD_EVENT(args) \
165do { \
166 if (dhd_msg_level & DHD_EVENT_VAL) { \
167 DHD_LOG_DUMP_WRITE_FW("[%s]: ", dhd_log_dump_get_timestamp()); \
168 DHD_LOG_DUMP_WRITE_FW args; \
169 } \
170} while (0)
171#define DHD_ECNTR_LOG(args) DHD_EVENT(args)
172#define DHD_ERROR_EX(args) DHD_ERROR(args)
173#define DHD_ERROR_ROAM(args) DHD_ERROR(args)
174#define DHD_MSGTRACE_LOG(args) \
175do { \
176 if (dhd_msg_level & DHD_MSGTRACE_VAL) { \
177 DHD_LOG_DUMP_WRITE_FW("[%s]: ", dhd_log_dump_get_timestamp()); \
178 DHD_LOG_DUMP_WRITE_FW args; \
179 } \
180} while (0)
181#define DHD_PRSRV_MEM(args) DHD_EVENT(args)
182#else
183/* NON-EFI builds with LOG DUMP enabled */
184#define DHD_ERROR_MEM(args) \
185do { \
186 if (dhd_msg_level & DHD_ERROR_VAL) { \
187 if (dhd_msg_level & DHD_ERROR_MEM_VAL) { \
188 DBG_PRINT_SYSTEM_TIME; \
189 pr_cont args; \
190 } \
Terry Chenc027f9e2021-07-22 16:49:12 +0800191 } \
192 if (dhd_log_level & DHD_ERROR_VAL) { \
193 DHD_LOG_DUMP_WRITE_TS; \
Victor Hsue0cd0e72021-06-08 11:05:03 +0800194 DHD_LOG_DUMP_WRITE args; \
195 } \
196} while (0)
197#define DHD_IOVAR_MEM(args) \
198do { \
199 if (dhd_msg_level & DHD_ERROR_VAL) { \
200 if (dhd_msg_level & DHD_IOVAR_MEM_VAL) { \
201 DBG_PRINT_SYSTEM_TIME; \
202 pr_cont args; \
203 } \
Terry Chenc027f9e2021-07-22 16:49:12 +0800204 } \
205 if (dhd_log_level & DHD_ERROR_VAL) { \
206 DHD_LOG_DUMP_WRITE_TS; \
Victor Hsue0cd0e72021-06-08 11:05:03 +0800207 DHD_LOG_DUMP_WRITE args; \
208 } \
209} while (0)
210#define DHD_LOG_MEM(args) \
211do { \
Terry Chenc027f9e2021-07-22 16:49:12 +0800212 if (dhd_log_level & DHD_ERROR_VAL) { \
213 DHD_LOG_DUMP_WRITE_TS; \
Victor Hsue0cd0e72021-06-08 11:05:03 +0800214 DHD_LOG_DUMP_WRITE args; \
215 } \
216} while (0)
217
218#define DHD_EVENT(args) \
219do { \
220 if (dhd_msg_level & DHD_EVENT_VAL) { \
221 DBG_PRINT_SYSTEM_TIME; \
222 pr_cont args; \
Terry Chenc027f9e2021-07-22 16:49:12 +0800223 } \
224 if (dhd_log_level & DHD_EVENT_VAL) { \
Victor Hsue0cd0e72021-06-08 11:05:03 +0800225 DHD_LOG_DUMP_WRITE_PRSRV_TS; \
226 DHD_LOG_DUMP_WRITE_PRSRV args; \
227 } \
228} while (0)
229#define DHD_PRSRV_MEM(args) \
230do { \
231 if (dhd_msg_level & DHD_EVENT_VAL) { \
232 if (dhd_msg_level & DHD_PRSRV_MEM_VAL) { \
233 DBG_PRINT_SYSTEM_TIME; \
234 printf args; \
235 } \
Terry Chenc027f9e2021-07-22 16:49:12 +0800236 } \
237 if (dhd_log_level & DHD_EVENT_VAL) { \
238 DHD_LOG_DUMP_FWLOG_TS; \
239 DHD_LOG_DUMP_FWLOG args; \
Victor Hsue0cd0e72021-06-08 11:05:03 +0800240 } \
241} while (0)
242/* Re-using 'DHD_MSGTRACE_VAL' for controlling printing of ecounter binary event
243* logs to console and debug dump -- need to cleanup in the future to use separate
244* 'DHD_ECNTR_VAL' bitmap flag. 'DHD_MSGTRACE_VAL' will be defined only
245* for non-android builds.
246*/
247#define DHD_ECNTR_LOG(args) \
248do { \
249 if (dhd_msg_level & DHD_EVENT_VAL) { \
250 if (dhd_msg_level & DHD_MSGTRACE_VAL) { \
251 DBG_PRINT_SYSTEM_TIME; \
252 pr_cont args; \
Terry Chenc027f9e2021-07-22 16:49:12 +0800253 } \
254 } \
255 if (dhd_log_level & DHD_EVENT_VAL) { \
256 if (dhd_log_level & DHD_MSGTRACE_VAL) { \
Victor Hsue0cd0e72021-06-08 11:05:03 +0800257 DHD_LOG_DUMP_WRITE_TS; \
258 DHD_LOG_DUMP_WRITE args; \
259 } \
260 } \
261} while (0)
262#define DHD_ERROR_EX(args) \
263do { \
264 if (dhd_msg_level & DHD_ERROR_VAL) { \
265 DBG_PRINT_SYSTEM_TIME; \
266 pr_cont args; \
Terry Chenc027f9e2021-07-22 16:49:12 +0800267 } \
268 if (dhd_log_level & DHD_ERROR_VAL) { \
Victor Hsue0cd0e72021-06-08 11:05:03 +0800269 DHD_LOG_DUMP_WRITE_EX_TS; \
270 DHD_LOG_DUMP_WRITE_EX args; \
271 } \
272} while (0)
273#define DHD_MSGTRACE_LOG(args) \
274do { \
275 if (dhd_msg_level & DHD_MSGTRACE_VAL) { \
276 DBG_PRINT_SYSTEM_TIME; \
277 pr_cont args; \
278 } \
279 DHD_LOG_DUMP_WRITE_TS; \
280 DHD_LOG_DUMP_WRITE args; \
281} while (0)
282
283#define DHD_ERROR_ROAM(args) \
284do { \
285 if (dhd_msg_level & DHD_ERROR_VAL) { \
286 DBG_PRINT_SYSTEM_TIME; \
287 pr_cont args; \
Terry Chenc027f9e2021-07-22 16:49:12 +0800288 } \
289 if (dhd_log_level & DHD_ERROR_VAL) { \
Victor Hsue0cd0e72021-06-08 11:05:03 +0800290 DHD_LOG_DUMP_WRITE_ROAM_TS; \
291 DHD_LOG_DUMP_WRITE_ROAM args; \
292 } \
293} while (0)
Terry Chenc027f9e2021-07-22 16:49:12 +0800294
295#define DHD_PKT_MON(args) \
296do { \
297 if (dhd_msg_level & DHD_PKT_MON_VAL) { \
298 DBG_PRINT_SYSTEM_TIME; \
299 pr_cont args; \
300 } \
301} while (0)
302
normanwhl0d1a9102022-10-24 10:06:03 +0000303#define DHD_RPM(args) \
304do { \
305 if (dhd_msg_level & DHD_RPM_VAL) { \
306 DBG_PRINT_SYSTEM_TIME; \
307 pr_cont args; \
308 } \
309 if (dhd_log_level & DHD_RPM_VAL) { \
310 DHD_LOG_DUMP_WRITE_TS; \
311 DHD_LOG_DUMP_WRITE args; \
312 } \
313} while (0)
314
Victor Hsue0cd0e72021-06-08 11:05:03 +0800315#endif /* DHD_EFI */
316#else /* DHD_LOG_DUMP */
317/* !DHD_LOG_DUMP */
318#define DHD_MSGTRACE_LOG(args) do {if (dhd_msg_level & DHD_MSGTRACE_VAL) printf args;} while (0)
319#define DHD_ERROR_MEM(args) DHD_ERROR(args)
320#define DHD_IOVAR_MEM(args) DHD_ERROR(args)
321#define DHD_LOG_MEM(args) DHD_ERROR(args)
322#define DHD_EVENT(args) do {if (dhd_msg_level & DHD_EVENT_VAL) printf args;} while (0)
323#define DHD_ECNTR_LOG(args) DHD_EVENT(args)
324#define DHD_PRSRV_MEM(args) DHD_EVENT(args)
325#define DHD_ERROR_EX(args) DHD_ERROR(args)
326#define DHD_ERROR_ROAM(args) DHD_ERROR(args)
Terry Chenc027f9e2021-07-22 16:49:12 +0800327#define DHD_PKT_MON(args) DHD_ERROR(args)
Victor Hsue0cd0e72021-06-08 11:05:03 +0800328#endif /* DHD_LOG_DUMP */
329
330#define DHD_DATA(args) do {if (dhd_msg_level & DHD_DATA_VAL) printf args;} while (0)
331#define DHD_CTL(args) do {if (dhd_msg_level & DHD_CTL_VAL) printf args;} while (0)
332#define DHD_TIMER(args) do {if (dhd_msg_level & DHD_TIMER_VAL) printf args;} while (0)
333#define DHD_HDRS(args) do {if (dhd_msg_level & DHD_HDRS_VAL) printf args;} while (0)
334#define DHD_BYTES(args) do {if (dhd_msg_level & DHD_BYTES_VAL) printf args;} while (0)
335#define DHD_INTR(args) do {if (dhd_msg_level & DHD_INTR_VAL) printf args;} while (0)
336#define DHD_GLOM(args) do {if (dhd_msg_level & DHD_GLOM_VAL) printf args;} while (0)
337#define DHD_BTA(args) do {if (dhd_msg_level & DHD_BTA_VAL) printf args;} while (0)
338#define DHD_ISCAN(args) do {if (dhd_msg_level & DHD_ISCAN_VAL) printf args;} while (0)
339#define DHD_ARPOE(args) do {if (dhd_msg_level & DHD_ARPOE_VAL) printf args;} while (0)
340#define DHD_REORDER(args) do {if (dhd_msg_level & DHD_REORDER_VAL) printf args;} while (0)
341#define DHD_PNO(args) do {if (dhd_msg_level & DHD_PNO_VAL) printf args;} while (0)
342#define DHD_RTT(args) do {if (dhd_msg_level & DHD_RTT_VAL) printf args;} while (0)
normanwhl0d1a9102022-10-24 10:06:03 +0000343#if defined(DHD_EFI) || !defined(DHD_LOG_DUMP)
344#define DHD_RPM(args) do {if (dhd_msg_level & DHD_RPM_VAL) printf args;} while (0)
345#endif /* defined(DHD_EFI) || !defined(DHD_LOG_DUMP) */
Victor Hsue0cd0e72021-06-08 11:05:03 +0800346
347#if defined(DHD_LOG_DUMP)
348#if defined(DHD_EFI)
349#define DHD_FWLOG(args) DHD_MSGTRACE_LOG(args)
350#elif defined(DHD_LOG_PRINT_RATE_LIMIT)
Terry Chenc027f9e2021-07-22 16:49:12 +0800351
Victor Hsue0cd0e72021-06-08 11:05:03 +0800352#define DHD_FWLOG(args) \
Terry Chenc027f9e2021-07-22 16:49:12 +0800353do { \
354 if (dhd_msg_level & DHD_FWLOG_VAL) { \
355 if (control_logtrace && !log_print_threshold) \
356 printf args; \
357 } \
358 if (dhd_log_level & DHD_FWLOG_VAL) { \
359 DHD_LOG_DUMP_FWLOG_TS; \
360 DHD_LOG_DUMP_FWLOG args; \
361 } \
Victor Hsue0cd0e72021-06-08 11:05:03 +0800362} while (0)
363
Terry Chenc027f9e2021-07-22 16:49:12 +0800364#else
Victor Hsue0cd0e72021-06-08 11:05:03 +0800365#define DHD_FWLOG(args) \
366 do { \
367 if (dhd_msg_level & DHD_FWLOG_VAL) { \
368 if (control_logtrace) \
369 printf args; \
370 DHD_LOG_DUMP_WRITE args; \
371 } \
372 } while (0)
373#endif /* DHD_EFI */
374#else /* DHD_LOG_DUMP */
375#if defined(NDIS) && (NDISVER >= 0x0630)
376#define DHD_FWLOG(args) do {if (dhd_msg_level & DHD_FWLOG_VAL) \
377 {printf args; DHD_NDDBG_OUTPUT args;}} while (0)
378#else
379#define DHD_FWLOG(args) do {if (dhd_msg_level & DHD_FWLOG_VAL) printf args;} while (0)
380#endif /* defined(NDIS) && (NDISVER >= 0x0630) */
381#endif /* DHD_LOG_DUMP */
382
383#define DHD_DBGIF(args) do {if (dhd_msg_level & DHD_DBGIF_VAL) printf args;} while (0)
normanwhl0d1a9102022-10-24 10:06:03 +0000384#define DHD_TXFLOWCTL(args) DHD_RPM(args)
Victor Hsue0cd0e72021-06-08 11:05:03 +0800385
386#ifdef CUSTOMER_HW4_DEBUG
387#define DHD_TRACE_HW4 DHD_ERROR
388#define DHD_INFO_HW4 DHD_ERROR
389#define DHD_ERROR_NO_HW4 DHD_INFO
390#else
391#define DHD_TRACE_HW4 DHD_TRACE
392#define DHD_INFO_HW4 DHD_INFO
393#define DHD_ERROR_NO_HW4 DHD_ERROR
394#endif /* CUSTOMER_HW4_DEBUG */
395
396#define DHD_ERROR_ON() (dhd_msg_level & DHD_ERROR_VAL)
397#define DHD_TRACE_ON() (dhd_msg_level & DHD_TRACE_VAL)
398#define DHD_INFO_ON() (dhd_msg_level & DHD_INFO_VAL)
399#define DHD_DATA_ON() (dhd_msg_level & DHD_DATA_VAL)
400#define DHD_CTL_ON() (dhd_msg_level & DHD_CTL_VAL)
401#define DHD_TIMER_ON() (dhd_msg_level & DHD_TIMER_VAL)
402#define DHD_HDRS_ON() (dhd_msg_level & DHD_HDRS_VAL)
403#define DHD_BYTES_ON() (dhd_msg_level & DHD_BYTES_VAL)
404#define DHD_INTR_ON() (dhd_msg_level & DHD_INTR_VAL)
405#define DHD_GLOM_ON() (dhd_msg_level & DHD_GLOM_VAL)
406#define DHD_EVENT_ON() (dhd_msg_level & DHD_EVENT_VAL)
407#define DHD_BTA_ON() (dhd_msg_level & DHD_BTA_VAL)
408#define DHD_ISCAN_ON() (dhd_msg_level & DHD_ISCAN_VAL)
409#define DHD_ARPOE_ON() (dhd_msg_level & DHD_ARPOE_VAL)
410#define DHD_REORDER_ON() (dhd_msg_level & DHD_REORDER_VAL)
411#define DHD_NOCHECKDIED_ON() (dhd_msg_level & DHD_NOCHECKDIED_VAL)
412#define DHD_PNO_ON() (dhd_msg_level & DHD_PNO_VAL)
413#define DHD_RTT_ON() (dhd_msg_level & DHD_RTT_VAL)
414#define DHD_MSGTRACE_ON() (dhd_msg_level & DHD_MSGTRACE_VAL)
415#define DHD_FWLOG_ON() (dhd_msg_level & DHD_FWLOG_VAL)
416#define DHD_DBGIF_ON() (dhd_msg_level & DHD_DBGIF_VAL)
417#define DHD_PKT_MON_ON() (dhd_msg_level & DHD_PKT_MON_VAL)
418#define DHD_PKT_MON_DUMP_ON() (dhd_msg_level & DHD_PKT_MON_DUMP_VAL)
419#ifdef DHD_PCIE_NATIVE_RUNTIMEPM
420#define DHD_RPM_ON() (dhd_msg_level & DHD_RPM_VAL)
421#endif /* DHD_PCIE_NATIVE_RUNTIMEPM */
422
423#else /* defined(BCMDBG) || defined(DHD_DEBUG) */
424
425#if defined(NDIS)
426#define DHD_ERROR(args) do {if (dhd_msg_level & DHD_ERROR_VAL) \
427 {printf args; DHD_NDDBG_OUTPUT args;}} while (0)
428#define DHD_TRACE(args) do {if (dhd_msg_level & DHD_TRACE_VAL) \
429 {DHD_NDDBG_OUTPUT args;}} while (0)
430#define DHD_INFO(args) do {if (dhd_msg_level & DHD_INFO_VAL) \
431 {DHD_NDDBG_OUTPUT args;}} while (0)
432#elif defined(DHD_EFI) && defined(DHD_LOG_DUMP)
433#define DHD_ERROR(args) \
434do { \
435 if (dhd_msg_level & DHD_ERROR_VAL) { \
436 printf args; \
437 DHD_LOG_DUMP_WRITE("[%s]: ", dhd_log_dump_get_timestamp()); \
438 DHD_LOG_DUMP_WRITE args; \
439 } \
440} while (0)
441#define DHD_INFO(args) \
442do { \
443 if (dhd_msg_level & DHD_INFO_VAL) { \
444 printf args; \
445 DHD_LOG_DUMP_WRITE("[%s]: ", dhd_log_dump_get_timestamp()); \
446 DHD_LOG_DUMP_WRITE args; \
447 } \
448} while (0)
449#define DHD_TRACE(args)
450#define DHD_ERROR_ROAM(args) DHD_ERROR(args)
451#else /* DHD_EFI && DHD_LOG_DUMP */
452
453#define DHD_ERROR(args) do {if (dhd_msg_level & DHD_ERROR_VAL) \
454 printf args;} while (0)
455#define DHD_TRACE(args)
456#define DHD_INFO(args)
457#define DHD_ERROR_ROAM(args) DHD_ERROR(args)
458#endif /* defined(NDIS) */
459
460#define DHD_DATA(args)
461#define DHD_CTL(args)
462#define DHD_TIMER(args)
463#define DHD_HDRS(args)
464#define DHD_BYTES(args)
465#define DHD_INTR(args)
466#define DHD_GLOM(args)
467
468#if defined(DHD_EFI) && defined(DHD_LOG_DUMP)
469#define DHD_EVENT(args) \
470do { \
471 if (dhd_msg_level & DHD_EVENT_VAL) { \
472 DHD_LOG_DUMP_WRITE_FW("[%s]: ", dhd_log_dump_get_timestamp()); \
473 DHD_LOG_DUMP_WRITE_FW args; \
474 } \
475} while (0)
476#define DHD_ECNTR_LOG(args) DHD_EVENT(args)
477#else
478#define DHD_EVENT(args)
479#define DHD_ECNTR_LOG(args) DHD_EVENT(args)
480#endif /* DHD_EFI && DHD_LOG_DUMP */
481
482#define DHD_PRSRV_MEM(args) DHD_EVENT(args)
483
484#define DHD_BTA(args)
485#define DHD_ISCAN(args)
486#define DHD_ARPOE(args)
487#define DHD_REORDER(args)
488#define DHD_PNO(args)
489#define DHD_RTT(args)
490#define DHD_PKT_MON(args)
491
492#if defined(DHD_EFI) && defined(DHD_LOG_DUMP)
493#define DHD_MSGTRACE_LOG(args) \
494do { \
495 if (dhd_msg_level & DHD_MSGTRACE_VAL) { \
496 DHD_LOG_DUMP_WRITE_FW("[%s]: ", dhd_log_dump_get_timestamp()); \
497 DHD_LOG_DUMP_WRITE_FW args; \
498 } \
499} while (0)
500#define DHD_FWLOG(args) DHD_MSGTRACE_LOG(args)
501#else
502#define DHD_MSGTRACE_LOG(args)
503#define DHD_FWLOG(args)
504#endif /* DHD_EFI && DHD_LOG_DUMP */
505
506#define DHD_DBGIF(args)
507
508#if defined(DHD_EFI) && defined(DHD_LOG_DUMP)
509#define DHD_ERROR_MEM(args) \
510do { \
511 if (dhd_msg_level & DHD_ERROR_VAL) { \
512 DHD_LOG_DUMP_WRITE("[%s]: ", dhd_log_dump_get_timestamp()); \
513 DHD_LOG_DUMP_WRITE args; \
514 } \
515} while (0)
516#define DHD_IOVAR_MEM(args) \
517do { \
518 if (dhd_msg_level & DHD_ERROR_VAL) { \
519 DHD_LOG_DUMP_WRITE("[%s]: ", dhd_log_dump_get_timestamp()); \
520 DHD_LOG_DUMP_WRITE args; \
521 } \
522} while (0)
523#define DHD_LOG_MEM(args) \
524do { \
525 if (dhd_msg_level & DHD_ERROR_VAL) { \
526 DHD_LOG_DUMP_WRITE("[%s]: ", dhd_log_dump_get_timestamp()); \
527 DHD_LOG_DUMP_WRITE args; \
528 } \
529} while (0)
530#define DHD_ERROR_EX(args) DHD_ERROR(args)
531#else
532#define DHD_ERROR_MEM(args) DHD_ERROR(args)
533#define DHD_IOVAR_MEM(args) DHD_ERROR(args)
534#define DHD_LOG_MEM(args) DHD_ERROR(args)
535#define DHD_ERROR_EX(args) DHD_ERROR(args)
536#endif /* DHD_EFI */
537#define DHD_ERROR_ROAM(args) DHD_ERROR(args)
normanwhl0d1a9102022-10-24 10:06:03 +0000538#define DHD_RPM(args) DHD_ERROR(args)
539#define DHD_TXFLOWCTL(args) DHD_ERROR(args)
Victor Hsue0cd0e72021-06-08 11:05:03 +0800540#ifdef CUSTOMER_HW4_DEBUG
541#define DHD_TRACE_HW4 DHD_ERROR
542#define DHD_INFO_HW4 DHD_ERROR
543#define DHD_ERROR_NO_HW4 DHD_INFO
544#else
545#define DHD_TRACE_HW4 DHD_TRACE
546#define DHD_INFO_HW4 DHD_INFO
547#define DHD_ERROR_NO_HW4 DHD_ERROR
548#endif /* CUSTOMER_HW4_DEBUG */
549
550#define DHD_ERROR_ON() 0
551#define DHD_TRACE_ON() 0
552#define DHD_INFO_ON() 0
553#define DHD_DATA_ON() 0
554#define DHD_CTL_ON() 0
555#define DHD_TIMER_ON() 0
556#define DHD_HDRS_ON() 0
557#define DHD_BYTES_ON() 0
558#define DHD_INTR_ON() 0
559#define DHD_GLOM_ON() 0
560#define DHD_EVENT_ON() 0
561#define DHD_BTA_ON() 0
562#define DHD_ISCAN_ON() 0
563#define DHD_ARPOE_ON() 0
564#define DHD_REORDER_ON() 0
565#define DHD_NOCHECKDIED_ON() 0
566#define DHD_PNO_ON() 0
567#define DHD_RTT_ON() 0
568#define DHD_PKT_MON_ON() 0
569#define DHD_PKT_MON_DUMP_ON() 0
570#define DHD_MSGTRACE_ON() 0
571#define DHD_FWLOG_ON() 0
572#define DHD_DBGIF_ON() 0
573#ifdef DHD_PCIE_NATIVE_RUNTIMEPM
574#define DHD_RPM_ON() 0
575#endif /* DHD_PCIE_NATIVE_RUNTIMEPM */
576#endif /* defined(BCMDBG) || defined(DHD_DEBUG) */
577
578#define PRINT_RATE_LIMIT_PERIOD 5000000u /* 5s in units of us */
579#define DHD_ERROR_RLMT(args) \
580do { \
581 if (dhd_msg_level & DHD_ERROR_VAL) { \
582 static uint64 __err_ts = 0; \
583 static uint32 __err_cnt = 0; \
584 uint64 __cur_ts = 0; \
585 __cur_ts = OSL_SYSUPTIME_US(); \
586 if (__err_ts == 0 || (__cur_ts > __err_ts && \
587 (__cur_ts - __err_ts > PRINT_RATE_LIMIT_PERIOD))) { \
588 __err_ts = __cur_ts; \
589 DHD_ERROR(args); \
590 DHD_ERROR(("[Repeats %u times]\n", __err_cnt)); \
591 __err_cnt = 0; \
592 } else { \
593 ++__err_cnt; \
594 } \
595 } \
596} while (0)
597
598/* even in non-BCMDBG builds, logging of dongle iovars should be available */
599#define DHD_DNGL_IOVAR_SET(args) \
600 do {if (dhd_msg_level & DHD_DNGL_IOVAR_SET_VAL) printf args;} while (0)
601
602#ifdef BCMPERFSTATS
603#define DHD_LOG(args) do {if (dhd_msg_level & DHD_LOG_VAL) bcmlog args;} while (0)
604#else
605#define DHD_LOG(args)
606#endif
607
608#if defined(BCMINTERNAL) && defined(LINUX) && defined(BCMSDIO) && (defined(BCMDBG) || \
609 defined(DHD_DEBUG))
610extern void dhd_blog(char *cp, int size);
611#define DHD_BLOG(cp, size) do { dhd_blog(cp, size);} while (0)
612#else
613#define DHD_BLOG(cp, size)
614#endif
615
616#define DHD_NONE(args)
617extern int dhd_msg_level;
Terry Chenc027f9e2021-07-22 16:49:12 +0800618extern int dhd_log_level;
Victor Hsue0cd0e72021-06-08 11:05:03 +0800619#ifdef DHD_LOG_PRINT_RATE_LIMIT
620extern int log_print_threshold;
621#endif /* DHD_LOG_PRINT_RATE_LIMIT */
622
623/* Defines msg bits */
624#include <dhdioctl.h>
625
626#endif /* _dhd_dbg_ */