xref: /OK3568_Linux_fs/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: ISC
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (c) 2010 Broadcom Corporation
4*4882a593Smuzhiyun  */
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun #ifndef BRCMFMAC_DEBUG_H
7*4882a593Smuzhiyun #define BRCMFMAC_DEBUG_H
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun #include <linux/net.h>	/* net_ratelimit() */
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun /* message levels */
12*4882a593Smuzhiyun #define BRCMF_TRACE_VAL		0x00000002
13*4882a593Smuzhiyun #define BRCMF_INFO_VAL		0x00000004
14*4882a593Smuzhiyun #define BRCMF_DATA_VAL		0x00000008
15*4882a593Smuzhiyun #define BRCMF_CTL_VAL		0x00000010
16*4882a593Smuzhiyun #define BRCMF_TIMER_VAL		0x00000020
17*4882a593Smuzhiyun #define BRCMF_HDRS_VAL		0x00000040
18*4882a593Smuzhiyun #define BRCMF_BYTES_VAL		0x00000080
19*4882a593Smuzhiyun #define BRCMF_INTR_VAL		0x00000100
20*4882a593Smuzhiyun #define BRCMF_GLOM_VAL		0x00000200
21*4882a593Smuzhiyun #define BRCMF_EVENT_VAL		0x00000400
22*4882a593Smuzhiyun #define BRCMF_BTA_VAL		0x00000800
23*4882a593Smuzhiyun #define BRCMF_FIL_VAL		0x00001000
24*4882a593Smuzhiyun #define BRCMF_USB_VAL		0x00002000
25*4882a593Smuzhiyun #define BRCMF_SCAN_VAL		0x00004000
26*4882a593Smuzhiyun #define BRCMF_CONN_VAL		0x00008000
27*4882a593Smuzhiyun #define BRCMF_BCDC_VAL		0x00010000
28*4882a593Smuzhiyun #define BRCMF_SDIO_VAL		0x00020000
29*4882a593Smuzhiyun #define BRCMF_MSGBUF_VAL	0x00040000
30*4882a593Smuzhiyun #define BRCMF_PCIE_VAL		0x00080000
31*4882a593Smuzhiyun #define BRCMF_FWCON_VAL		0x00100000
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun /* set default print format */
34*4882a593Smuzhiyun #undef pr_fmt
35*4882a593Smuzhiyun #define pr_fmt(fmt)		KBUILD_MODNAME ": " fmt
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun struct brcmf_bus;
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun __printf(3, 4)
40*4882a593Smuzhiyun void __brcmf_err(struct brcmf_bus *bus, const char *func, const char *fmt, ...);
41*4882a593Smuzhiyun /* Macro for error messages. When debugging / tracing the driver all error
42*4882a593Smuzhiyun  * messages are important to us.
43*4882a593Smuzhiyun  */
44*4882a593Smuzhiyun #ifndef brcmf_err
45*4882a593Smuzhiyun #define brcmf_err(fmt, ...)						\
46*4882a593Smuzhiyun 	do {								\
47*4882a593Smuzhiyun 		if (IS_ENABLED(CONFIG_BRCMDBG) ||			\
48*4882a593Smuzhiyun 		    IS_ENABLED(CONFIG_BRCM_TRACING) ||			\
49*4882a593Smuzhiyun 		    net_ratelimit())					\
50*4882a593Smuzhiyun 			__brcmf_err(NULL, __func__, fmt, ##__VA_ARGS__);\
51*4882a593Smuzhiyun 	} while (0)
52*4882a593Smuzhiyun #endif
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun #define bphy_err(drvr, fmt, ...)					\
55*4882a593Smuzhiyun 	do {								\
56*4882a593Smuzhiyun 		if (IS_ENABLED(CONFIG_BRCMDBG) ||			\
57*4882a593Smuzhiyun 		    IS_ENABLED(CONFIG_BRCM_TRACING) ||			\
58*4882a593Smuzhiyun 		    net_ratelimit())					\
59*4882a593Smuzhiyun 			wiphy_err((drvr)->wiphy, "%s: " fmt, __func__,	\
60*4882a593Smuzhiyun 				  ##__VA_ARGS__);			\
61*4882a593Smuzhiyun 	} while (0)
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun #if defined(DEBUG) || defined(CONFIG_BRCM_TRACING)
64*4882a593Smuzhiyun 
65*4882a593Smuzhiyun /* For debug/tracing purposes treat info messages as errors */
66*4882a593Smuzhiyun #define brcmf_info brcmf_err
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun __printf(3, 4)
69*4882a593Smuzhiyun void __brcmf_dbg(u32 level, const char *func, const char *fmt, ...);
70*4882a593Smuzhiyun #define brcmf_dbg(level, fmt, ...)				\
71*4882a593Smuzhiyun do {								\
72*4882a593Smuzhiyun 	__brcmf_dbg(BRCMF_##level##_VAL, __func__,		\
73*4882a593Smuzhiyun 		    fmt, ##__VA_ARGS__);			\
74*4882a593Smuzhiyun } while (0)
75*4882a593Smuzhiyun #define BRCMF_DATA_ON()		(brcmf_msg_level & BRCMF_DATA_VAL)
76*4882a593Smuzhiyun #define BRCMF_CTL_ON()		(brcmf_msg_level & BRCMF_CTL_VAL)
77*4882a593Smuzhiyun #define BRCMF_HDRS_ON()		(brcmf_msg_level & BRCMF_HDRS_VAL)
78*4882a593Smuzhiyun #define BRCMF_BYTES_ON()	(brcmf_msg_level & BRCMF_BYTES_VAL)
79*4882a593Smuzhiyun #define BRCMF_GLOM_ON()		(brcmf_msg_level & BRCMF_GLOM_VAL)
80*4882a593Smuzhiyun #define BRCMF_EVENT_ON()	(brcmf_msg_level & BRCMF_EVENT_VAL)
81*4882a593Smuzhiyun #define BRCMF_FIL_ON()		(brcmf_msg_level & BRCMF_FIL_VAL)
82*4882a593Smuzhiyun #define BRCMF_FWCON_ON()	(brcmf_msg_level & BRCMF_FWCON_VAL)
83*4882a593Smuzhiyun #define BRCMF_SCAN_ON()		(brcmf_msg_level & BRCMF_SCAN_VAL)
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun #else /* defined(DEBUG) || defined(CONFIG_BRCM_TRACING) */
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun #define brcmf_info(fmt, ...)						\
88*4882a593Smuzhiyun 	do {								\
89*4882a593Smuzhiyun 		pr_info("%s: " fmt, __func__, ##__VA_ARGS__);		\
90*4882a593Smuzhiyun 	} while (0)
91*4882a593Smuzhiyun 
92*4882a593Smuzhiyun #define brcmf_dbg(level, fmt, ...) no_printk(fmt, ##__VA_ARGS__)
93*4882a593Smuzhiyun 
94*4882a593Smuzhiyun #define BRCMF_DATA_ON()		0
95*4882a593Smuzhiyun #define BRCMF_CTL_ON()		0
96*4882a593Smuzhiyun #define BRCMF_HDRS_ON()		0
97*4882a593Smuzhiyun #define BRCMF_BYTES_ON()	0
98*4882a593Smuzhiyun #define BRCMF_GLOM_ON()		0
99*4882a593Smuzhiyun #define BRCMF_EVENT_ON()	0
100*4882a593Smuzhiyun #define BRCMF_FIL_ON()		0
101*4882a593Smuzhiyun #define BRCMF_FWCON_ON()	0
102*4882a593Smuzhiyun #define BRCMF_SCAN_ON()		0
103*4882a593Smuzhiyun 
104*4882a593Smuzhiyun #endif /* defined(DEBUG) || defined(CONFIG_BRCM_TRACING) */
105*4882a593Smuzhiyun 
106*4882a593Smuzhiyun #define brcmf_dbg_hex_dump(test, data, len, fmt, ...)			\
107*4882a593Smuzhiyun do {									\
108*4882a593Smuzhiyun 	trace_brcmf_hexdump((void *)data, len);				\
109*4882a593Smuzhiyun 	if (test)							\
110*4882a593Smuzhiyun 		brcmu_dbg_hex_dump(data, len, fmt, ##__VA_ARGS__);	\
111*4882a593Smuzhiyun } while (0)
112*4882a593Smuzhiyun 
113*4882a593Smuzhiyun extern int brcmf_msg_level;
114*4882a593Smuzhiyun 
115*4882a593Smuzhiyun struct brcmf_bus;
116*4882a593Smuzhiyun struct brcmf_pub;
117*4882a593Smuzhiyun #ifdef DEBUG
118*4882a593Smuzhiyun struct dentry *brcmf_debugfs_get_devdir(struct brcmf_pub *drvr);
119*4882a593Smuzhiyun void brcmf_debugfs_add_entry(struct brcmf_pub *drvr, const char *fn,
120*4882a593Smuzhiyun 			     int (*read_fn)(struct seq_file *seq, void *data));
121*4882a593Smuzhiyun int brcmf_debug_create_memdump(struct brcmf_bus *bus, const void *data,
122*4882a593Smuzhiyun 			       size_t len);
123*4882a593Smuzhiyun #else
brcmf_debugfs_get_devdir(struct brcmf_pub * drvr)124*4882a593Smuzhiyun static inline struct dentry *brcmf_debugfs_get_devdir(struct brcmf_pub *drvr)
125*4882a593Smuzhiyun {
126*4882a593Smuzhiyun 	return ERR_PTR(-ENOENT);
127*4882a593Smuzhiyun }
128*4882a593Smuzhiyun static inline
brcmf_debugfs_add_entry(struct brcmf_pub * drvr,const char * fn,int (* read_fn)(struct seq_file * seq,void * data))129*4882a593Smuzhiyun void brcmf_debugfs_add_entry(struct brcmf_pub *drvr, const char *fn,
130*4882a593Smuzhiyun 			     int (*read_fn)(struct seq_file *seq, void *data))
131*4882a593Smuzhiyun { }
132*4882a593Smuzhiyun static inline
brcmf_debug_create_memdump(struct brcmf_bus * bus,const void * data,size_t len)133*4882a593Smuzhiyun int brcmf_debug_create_memdump(struct brcmf_bus *bus, const void *data,
134*4882a593Smuzhiyun 			       size_t len)
135*4882a593Smuzhiyun {
136*4882a593Smuzhiyun 	return 0;
137*4882a593Smuzhiyun }
138*4882a593Smuzhiyun #endif
139*4882a593Smuzhiyun 
140*4882a593Smuzhiyun #endif /* BRCMFMAC_DEBUG_H */
141