xref: /OK3568_Linux_fs/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/tracepoint.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: ISC
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (c) 2013 Broadcom Corporation
4*4882a593Smuzhiyun  */
5*4882a593Smuzhiyun #if !defined(BRCMF_TRACEPOINT_H_) || defined(TRACE_HEADER_MULTI_READ)
6*4882a593Smuzhiyun #define BRCMF_TRACEPOINT_H_
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun #include <linux/types.h>
9*4882a593Smuzhiyun #include <linux/tracepoint.h>
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #ifndef CONFIG_BRCM_TRACING
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #undef TRACE_EVENT
14*4882a593Smuzhiyun #define TRACE_EVENT(name, proto, ...) \
15*4882a593Smuzhiyun static inline void trace_ ## name(proto) {}
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun #undef DECLARE_EVENT_CLASS
18*4882a593Smuzhiyun #define DECLARE_EVENT_CLASS(...)
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun #undef DEFINE_EVENT
21*4882a593Smuzhiyun #define DEFINE_EVENT(evt_class, name, proto, ...) \
22*4882a593Smuzhiyun static inline void trace_ ## name(proto) {}
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun #endif /* CONFIG_BRCM_TRACING */
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun #undef TRACE_SYSTEM
27*4882a593Smuzhiyun #define TRACE_SYSTEM	brcmfmac
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun #define MAX_MSG_LEN		100
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun TRACE_EVENT(brcmf_err,
32*4882a593Smuzhiyun 	TP_PROTO(const char *func, struct va_format *vaf),
33*4882a593Smuzhiyun 	TP_ARGS(func, vaf),
34*4882a593Smuzhiyun 	TP_STRUCT__entry(
35*4882a593Smuzhiyun 		__string(func, func)
36*4882a593Smuzhiyun 		__dynamic_array(char, msg, MAX_MSG_LEN)
37*4882a593Smuzhiyun 	),
38*4882a593Smuzhiyun 	TP_fast_assign(
39*4882a593Smuzhiyun 		__assign_str(func, func);
40*4882a593Smuzhiyun 		WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg),
41*4882a593Smuzhiyun 				       MAX_MSG_LEN, vaf->fmt,
42*4882a593Smuzhiyun 				       *vaf->va) >= MAX_MSG_LEN);
43*4882a593Smuzhiyun 	),
44*4882a593Smuzhiyun 	TP_printk("%s: %s", __get_str(func), __get_str(msg))
45*4882a593Smuzhiyun );
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun TRACE_EVENT(brcmf_dbg,
48*4882a593Smuzhiyun 	TP_PROTO(u32 level, const char *func, struct va_format *vaf),
49*4882a593Smuzhiyun 	TP_ARGS(level, func, vaf),
50*4882a593Smuzhiyun 	TP_STRUCT__entry(
51*4882a593Smuzhiyun 		__field(u32, level)
52*4882a593Smuzhiyun 		__string(func, func)
53*4882a593Smuzhiyun 		__dynamic_array(char, msg, MAX_MSG_LEN)
54*4882a593Smuzhiyun 	),
55*4882a593Smuzhiyun 	TP_fast_assign(
56*4882a593Smuzhiyun 		__entry->level = level;
57*4882a593Smuzhiyun 		__assign_str(func, func);
58*4882a593Smuzhiyun 		WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg),
59*4882a593Smuzhiyun 				       MAX_MSG_LEN, vaf->fmt,
60*4882a593Smuzhiyun 				       *vaf->va) >= MAX_MSG_LEN);
61*4882a593Smuzhiyun 	),
62*4882a593Smuzhiyun 	TP_printk("%s: %s", __get_str(func), __get_str(msg))
63*4882a593Smuzhiyun );
64*4882a593Smuzhiyun 
65*4882a593Smuzhiyun TRACE_EVENT(brcmf_hexdump,
66*4882a593Smuzhiyun 	TP_PROTO(void *data, size_t len),
67*4882a593Smuzhiyun 	TP_ARGS(data, len),
68*4882a593Smuzhiyun 	TP_STRUCT__entry(
69*4882a593Smuzhiyun 		__field(unsigned long, len)
70*4882a593Smuzhiyun 		__field(unsigned long, addr)
71*4882a593Smuzhiyun 		__dynamic_array(u8, hdata, len)
72*4882a593Smuzhiyun 	),
73*4882a593Smuzhiyun 	TP_fast_assign(
74*4882a593Smuzhiyun 		__entry->len = len;
75*4882a593Smuzhiyun 		__entry->addr = (unsigned long)data;
76*4882a593Smuzhiyun 		memcpy(__get_dynamic_array(hdata), data, len);
77*4882a593Smuzhiyun 	),
78*4882a593Smuzhiyun 	TP_printk("hexdump [addr=%lx, length=%lu]", __entry->addr, __entry->len)
79*4882a593Smuzhiyun );
80*4882a593Smuzhiyun 
81*4882a593Smuzhiyun TRACE_EVENT(brcmf_bcdchdr,
82*4882a593Smuzhiyun 	TP_PROTO(void *data),
83*4882a593Smuzhiyun 	TP_ARGS(data),
84*4882a593Smuzhiyun 	TP_STRUCT__entry(
85*4882a593Smuzhiyun 		__field(u8, flags)
86*4882a593Smuzhiyun 		__field(u8, prio)
87*4882a593Smuzhiyun 		__field(u8, flags2)
88*4882a593Smuzhiyun 		__field(u32, siglen)
89*4882a593Smuzhiyun 		__dynamic_array(u8, signal, *((u8 *)data + 3) * 4)
90*4882a593Smuzhiyun 	),
91*4882a593Smuzhiyun 	TP_fast_assign(
92*4882a593Smuzhiyun 		__entry->flags = *(u8 *)data;
93*4882a593Smuzhiyun 		__entry->prio = *((u8 *)data + 1);
94*4882a593Smuzhiyun 		__entry->flags2 = *((u8 *)data + 2);
95*4882a593Smuzhiyun 		__entry->siglen = *((u8 *)data + 3) * 4;
96*4882a593Smuzhiyun 		memcpy(__get_dynamic_array(signal),
97*4882a593Smuzhiyun 		       (u8 *)data + 4, __entry->siglen);
98*4882a593Smuzhiyun 	),
99*4882a593Smuzhiyun 	TP_printk("bcdc: prio=%d siglen=%d", __entry->prio, __entry->siglen)
100*4882a593Smuzhiyun );
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun #ifndef SDPCM_RX
103*4882a593Smuzhiyun #define SDPCM_RX	0
104*4882a593Smuzhiyun #endif
105*4882a593Smuzhiyun #ifndef SDPCM_TX
106*4882a593Smuzhiyun #define SDPCM_TX	1
107*4882a593Smuzhiyun #endif
108*4882a593Smuzhiyun #ifndef SDPCM_GLOM
109*4882a593Smuzhiyun #define SDPCM_GLOM	2
110*4882a593Smuzhiyun #endif
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun TRACE_EVENT(brcmf_sdpcm_hdr,
113*4882a593Smuzhiyun 	TP_PROTO(u8 dir, void *data),
114*4882a593Smuzhiyun 	TP_ARGS(dir, data),
115*4882a593Smuzhiyun 	TP_STRUCT__entry(
116*4882a593Smuzhiyun 		__field(u8, dir)
117*4882a593Smuzhiyun 		__field(u16, len)
118*4882a593Smuzhiyun 		__dynamic_array(u8, hdr, dir == SDPCM_GLOM ? 20 : 12)
119*4882a593Smuzhiyun 	),
120*4882a593Smuzhiyun 	TP_fast_assign(
121*4882a593Smuzhiyun 		memcpy(__get_dynamic_array(hdr), data, dir == SDPCM_GLOM ? 20 : 12);
122*4882a593Smuzhiyun 		__entry->len = *(u8 *)data | (*((u8 *)data + 1) << 8);
123*4882a593Smuzhiyun 		__entry->dir = dir;
124*4882a593Smuzhiyun 	),
125*4882a593Smuzhiyun 	TP_printk("sdpcm: %s len %u, seq %d",
126*4882a593Smuzhiyun 		  __entry->dir == SDPCM_RX ? "RX" : "TX",
127*4882a593Smuzhiyun 		  __entry->len, ((u8 *)__get_dynamic_array(hdr))[4])
128*4882a593Smuzhiyun );
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun #ifdef CONFIG_BRCM_TRACING
131*4882a593Smuzhiyun 
132*4882a593Smuzhiyun #undef TRACE_INCLUDE_PATH
133*4882a593Smuzhiyun #define TRACE_INCLUDE_PATH .
134*4882a593Smuzhiyun #undef TRACE_INCLUDE_FILE
135*4882a593Smuzhiyun #define TRACE_INCLUDE_FILE tracepoint
136*4882a593Smuzhiyun 
137*4882a593Smuzhiyun #include <trace/define_trace.h>
138*4882a593Smuzhiyun 
139*4882a593Smuzhiyun #endif /* CONFIG_BRCM_TRACING */
140*4882a593Smuzhiyun 
141*4882a593Smuzhiyun #endif /* BRCMF_TRACEPOINT_H_ */
142