xref: /freebsd/sys/contrib/dev/athk/ath10k/trace.h (revision 07724ba62b4c432ea04dce9465a5ab6e2c3f5a0d)
1da8fa4e3SBjoern A. Zeeb /* SPDX-License-Identifier: ISC */
2da8fa4e3SBjoern A. Zeeb /*
3da8fa4e3SBjoern A. Zeeb  * Copyright (c) 2005-2011 Atheros Communications Inc.
4da8fa4e3SBjoern A. Zeeb  * Copyright (c) 2011-2016 Qualcomm Atheros, Inc.
5da8fa4e3SBjoern A. Zeeb  */
6da8fa4e3SBjoern A. Zeeb 
7da8fa4e3SBjoern A. Zeeb #if !defined(_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
8da8fa4e3SBjoern A. Zeeb 
9da8fa4e3SBjoern A. Zeeb #include <linux/tracepoint.h>
10da8fa4e3SBjoern A. Zeeb #include "core.h"
11da8fa4e3SBjoern A. Zeeb 
12da8fa4e3SBjoern A. Zeeb #if !defined(_TRACE_H_)
ath10k_frm_hdr_len(const void * buf,size_t len)13da8fa4e3SBjoern A. Zeeb static inline u32 ath10k_frm_hdr_len(const void *buf, size_t len)
14da8fa4e3SBjoern A. Zeeb {
15da8fa4e3SBjoern A. Zeeb 	const struct ieee80211_hdr *hdr = buf;
16da8fa4e3SBjoern A. Zeeb 
17da8fa4e3SBjoern A. Zeeb 	/* In some rare cases (e.g. fcs error) device reports frame buffer
18da8fa4e3SBjoern A. Zeeb 	 * shorter than what frame header implies (e.g. len = 0). The buffer
19da8fa4e3SBjoern A. Zeeb 	 * can still be accessed so do a simple min() to guarantee caller
20da8fa4e3SBjoern A. Zeeb 	 * doesn't get value greater than len.
21da8fa4e3SBjoern A. Zeeb 	 */
22da8fa4e3SBjoern A. Zeeb 	return min_t(u32, len, ieee80211_hdrlen(hdr->frame_control));
23da8fa4e3SBjoern A. Zeeb }
24da8fa4e3SBjoern A. Zeeb #endif
25da8fa4e3SBjoern A. Zeeb 
26da8fa4e3SBjoern A. Zeeb #define _TRACE_H_
27da8fa4e3SBjoern A. Zeeb 
28da8fa4e3SBjoern A. Zeeb /* create empty functions when tracing is disabled */
29da8fa4e3SBjoern A. Zeeb #if !defined(CONFIG_ATH10K_TRACING)
30da8fa4e3SBjoern A. Zeeb #undef TRACE_EVENT
31da8fa4e3SBjoern A. Zeeb #define TRACE_EVENT(name, proto, ...) \
32da8fa4e3SBjoern A. Zeeb static inline void trace_ ## name(proto) {} \
33da8fa4e3SBjoern A. Zeeb static inline bool trace_##name##_enabled(void) \
34da8fa4e3SBjoern A. Zeeb {						\
35da8fa4e3SBjoern A. Zeeb 	return false;				\
36da8fa4e3SBjoern A. Zeeb }
37da8fa4e3SBjoern A. Zeeb #undef DECLARE_EVENT_CLASS
38da8fa4e3SBjoern A. Zeeb #define DECLARE_EVENT_CLASS(...)
39da8fa4e3SBjoern A. Zeeb #undef DEFINE_EVENT
40da8fa4e3SBjoern A. Zeeb #define DEFINE_EVENT(evt_class, name, proto, ...) \
41da8fa4e3SBjoern A. Zeeb static inline void trace_ ## name(proto) {}
42da8fa4e3SBjoern A. Zeeb #endif /* !CONFIG_ATH10K_TRACING || __CHECKER__ */
43da8fa4e3SBjoern A. Zeeb 
44da8fa4e3SBjoern A. Zeeb #undef TRACE_SYSTEM
45da8fa4e3SBjoern A. Zeeb #define TRACE_SYSTEM ath10k
46da8fa4e3SBjoern A. Zeeb 
47da8fa4e3SBjoern A. Zeeb #define ATH10K_MSG_MAX 400
48da8fa4e3SBjoern A. Zeeb 
49da8fa4e3SBjoern A. Zeeb DECLARE_EVENT_CLASS(ath10k_log_event,
50da8fa4e3SBjoern A. Zeeb 	TP_PROTO(struct ath10k *ar, struct va_format *vaf),
51da8fa4e3SBjoern A. Zeeb 	TP_ARGS(ar, vaf),
52da8fa4e3SBjoern A. Zeeb 	TP_STRUCT__entry(
53da8fa4e3SBjoern A. Zeeb 		__string(device, dev_name(ar->dev))
54da8fa4e3SBjoern A. Zeeb 		__string(driver, dev_driver_string(ar->dev))
55*07724ba6SBjoern A. Zeeb 		__vstring(msg, vaf->fmt, vaf->va)
56da8fa4e3SBjoern A. Zeeb 	),
57da8fa4e3SBjoern A. Zeeb 	TP_fast_assign(
58da8fa4e3SBjoern A. Zeeb 		__assign_str(device, dev_name(ar->dev));
59da8fa4e3SBjoern A. Zeeb 		__assign_str(driver, dev_driver_string(ar->dev));
60*07724ba6SBjoern A. Zeeb 		__assign_vstr(msg, vaf->fmt, vaf->va);
61da8fa4e3SBjoern A. Zeeb 	),
62da8fa4e3SBjoern A. Zeeb 	TP_printk(
63da8fa4e3SBjoern A. Zeeb 		"%s %s %s",
64da8fa4e3SBjoern A. Zeeb 		__get_str(driver),
65da8fa4e3SBjoern A. Zeeb 		__get_str(device),
66da8fa4e3SBjoern A. Zeeb 		__get_str(msg)
67da8fa4e3SBjoern A. Zeeb 	)
68da8fa4e3SBjoern A. Zeeb );
69da8fa4e3SBjoern A. Zeeb 
70da8fa4e3SBjoern A. Zeeb DEFINE_EVENT(ath10k_log_event, ath10k_log_err,
71da8fa4e3SBjoern A. Zeeb 	     TP_PROTO(struct ath10k *ar, struct va_format *vaf),
72da8fa4e3SBjoern A. Zeeb 	     TP_ARGS(ar, vaf)
73da8fa4e3SBjoern A. Zeeb );
74da8fa4e3SBjoern A. Zeeb 
75da8fa4e3SBjoern A. Zeeb DEFINE_EVENT(ath10k_log_event, ath10k_log_warn,
76da8fa4e3SBjoern A. Zeeb 	     TP_PROTO(struct ath10k *ar, struct va_format *vaf),
77da8fa4e3SBjoern A. Zeeb 	     TP_ARGS(ar, vaf)
78da8fa4e3SBjoern A. Zeeb );
79da8fa4e3SBjoern A. Zeeb 
80da8fa4e3SBjoern A. Zeeb DEFINE_EVENT(ath10k_log_event, ath10k_log_info,
81da8fa4e3SBjoern A. Zeeb 	     TP_PROTO(struct ath10k *ar, struct va_format *vaf),
82da8fa4e3SBjoern A. Zeeb 	     TP_ARGS(ar, vaf)
83da8fa4e3SBjoern A. Zeeb );
84da8fa4e3SBjoern A. Zeeb 
85da8fa4e3SBjoern A. Zeeb TRACE_EVENT(ath10k_log_dbg,
86da8fa4e3SBjoern A. Zeeb 	TP_PROTO(struct ath10k *ar, unsigned int level, struct va_format *vaf),
87da8fa4e3SBjoern A. Zeeb 	TP_ARGS(ar, level, vaf),
88da8fa4e3SBjoern A. Zeeb 	TP_STRUCT__entry(
89da8fa4e3SBjoern A. Zeeb 		__string(device, dev_name(ar->dev))
90da8fa4e3SBjoern A. Zeeb 		__string(driver, dev_driver_string(ar->dev))
91da8fa4e3SBjoern A. Zeeb 		__field(unsigned int, level)
92*07724ba6SBjoern A. Zeeb 		__vstring(msg, vaf->fmt, vaf->va)
93da8fa4e3SBjoern A. Zeeb 	),
94da8fa4e3SBjoern A. Zeeb 	TP_fast_assign(
95da8fa4e3SBjoern A. Zeeb 		__assign_str(device, dev_name(ar->dev));
96da8fa4e3SBjoern A. Zeeb 		__assign_str(driver, dev_driver_string(ar->dev));
97da8fa4e3SBjoern A. Zeeb 		__entry->level = level;
98*07724ba6SBjoern A. Zeeb 		__assign_vstr(msg, vaf->fmt, vaf->va);
99da8fa4e3SBjoern A. Zeeb 	),
100da8fa4e3SBjoern A. Zeeb 	TP_printk(
101da8fa4e3SBjoern A. Zeeb 		"%s %s %s",
102da8fa4e3SBjoern A. Zeeb 		__get_str(driver),
103da8fa4e3SBjoern A. Zeeb 		__get_str(device),
104da8fa4e3SBjoern A. Zeeb 		__get_str(msg)
105da8fa4e3SBjoern A. Zeeb 	)
106da8fa4e3SBjoern A. Zeeb );
107da8fa4e3SBjoern A. Zeeb 
108da8fa4e3SBjoern A. Zeeb TRACE_EVENT(ath10k_log_dbg_dump,
109da8fa4e3SBjoern A. Zeeb 	TP_PROTO(struct ath10k *ar, const char *msg, const char *prefix,
110da8fa4e3SBjoern A. Zeeb 		 const void *buf, size_t buf_len),
111da8fa4e3SBjoern A. Zeeb 
112da8fa4e3SBjoern A. Zeeb 	TP_ARGS(ar, msg, prefix, buf, buf_len),
113da8fa4e3SBjoern A. Zeeb 
114da8fa4e3SBjoern A. Zeeb 	TP_STRUCT__entry(
115da8fa4e3SBjoern A. Zeeb 		__string(device, dev_name(ar->dev))
116da8fa4e3SBjoern A. Zeeb 		__string(driver, dev_driver_string(ar->dev))
117da8fa4e3SBjoern A. Zeeb 		__string(msg, msg)
118da8fa4e3SBjoern A. Zeeb 		__string(prefix, prefix)
119da8fa4e3SBjoern A. Zeeb 		__field(size_t, buf_len)
120da8fa4e3SBjoern A. Zeeb 		__dynamic_array(u8, buf, buf_len)
121da8fa4e3SBjoern A. Zeeb 	),
122da8fa4e3SBjoern A. Zeeb 
123da8fa4e3SBjoern A. Zeeb 	TP_fast_assign(
124da8fa4e3SBjoern A. Zeeb 		__assign_str(device, dev_name(ar->dev));
125da8fa4e3SBjoern A. Zeeb 		__assign_str(driver, dev_driver_string(ar->dev));
126da8fa4e3SBjoern A. Zeeb 		__assign_str(msg, msg);
127da8fa4e3SBjoern A. Zeeb 		__assign_str(prefix, prefix);
128da8fa4e3SBjoern A. Zeeb 		__entry->buf_len = buf_len;
129da8fa4e3SBjoern A. Zeeb 		memcpy(__get_dynamic_array(buf), buf, buf_len);
130da8fa4e3SBjoern A. Zeeb 	),
131da8fa4e3SBjoern A. Zeeb 
132da8fa4e3SBjoern A. Zeeb 	TP_printk(
133da8fa4e3SBjoern A. Zeeb 		"%s %s %s/%s\n",
134da8fa4e3SBjoern A. Zeeb 		__get_str(driver),
135da8fa4e3SBjoern A. Zeeb 		__get_str(device),
136da8fa4e3SBjoern A. Zeeb 		__get_str(prefix),
137da8fa4e3SBjoern A. Zeeb 		__get_str(msg)
138da8fa4e3SBjoern A. Zeeb 	)
139da8fa4e3SBjoern A. Zeeb );
140da8fa4e3SBjoern A. Zeeb 
141da8fa4e3SBjoern A. Zeeb TRACE_EVENT(ath10k_wmi_cmd,
142da8fa4e3SBjoern A. Zeeb 	TP_PROTO(struct ath10k *ar, int id, const void *buf, size_t buf_len),
143da8fa4e3SBjoern A. Zeeb 
144da8fa4e3SBjoern A. Zeeb 	TP_ARGS(ar, id, buf, buf_len),
145da8fa4e3SBjoern A. Zeeb 
146da8fa4e3SBjoern A. Zeeb 	TP_STRUCT__entry(
147da8fa4e3SBjoern A. Zeeb 		__string(device, dev_name(ar->dev))
148da8fa4e3SBjoern A. Zeeb 		__string(driver, dev_driver_string(ar->dev))
149da8fa4e3SBjoern A. Zeeb 		__field(unsigned int, id)
150da8fa4e3SBjoern A. Zeeb 		__field(size_t, buf_len)
151da8fa4e3SBjoern A. Zeeb 		__dynamic_array(u8, buf, buf_len)
152da8fa4e3SBjoern A. Zeeb 	),
153da8fa4e3SBjoern A. Zeeb 
154da8fa4e3SBjoern A. Zeeb 	TP_fast_assign(
155da8fa4e3SBjoern A. Zeeb 		__assign_str(device, dev_name(ar->dev));
156da8fa4e3SBjoern A. Zeeb 		__assign_str(driver, dev_driver_string(ar->dev));
157da8fa4e3SBjoern A. Zeeb 		__entry->id = id;
158da8fa4e3SBjoern A. Zeeb 		__entry->buf_len = buf_len;
159da8fa4e3SBjoern A. Zeeb 		memcpy(__get_dynamic_array(buf), buf, buf_len);
160da8fa4e3SBjoern A. Zeeb 	),
161da8fa4e3SBjoern A. Zeeb 
162da8fa4e3SBjoern A. Zeeb 	TP_printk(
163da8fa4e3SBjoern A. Zeeb 		"%s %s id %d len %zu",
164da8fa4e3SBjoern A. Zeeb 		__get_str(driver),
165da8fa4e3SBjoern A. Zeeb 		__get_str(device),
166da8fa4e3SBjoern A. Zeeb 		__entry->id,
167da8fa4e3SBjoern A. Zeeb 		__entry->buf_len
168da8fa4e3SBjoern A. Zeeb 	)
169da8fa4e3SBjoern A. Zeeb );
170da8fa4e3SBjoern A. Zeeb 
171da8fa4e3SBjoern A. Zeeb TRACE_EVENT(ath10k_wmi_event,
172da8fa4e3SBjoern A. Zeeb 	TP_PROTO(struct ath10k *ar, int id, const void *buf, size_t buf_len),
173da8fa4e3SBjoern A. Zeeb 
174da8fa4e3SBjoern A. Zeeb 	TP_ARGS(ar, id, buf, buf_len),
175da8fa4e3SBjoern A. Zeeb 
176da8fa4e3SBjoern A. Zeeb 	TP_STRUCT__entry(
177da8fa4e3SBjoern A. Zeeb 		__string(device, dev_name(ar->dev))
178da8fa4e3SBjoern A. Zeeb 		__string(driver, dev_driver_string(ar->dev))
179da8fa4e3SBjoern A. Zeeb 		__field(unsigned int, id)
180da8fa4e3SBjoern A. Zeeb 		__field(size_t, buf_len)
181da8fa4e3SBjoern A. Zeeb 		__dynamic_array(u8, buf, buf_len)
182da8fa4e3SBjoern A. Zeeb 	),
183da8fa4e3SBjoern A. Zeeb 
184da8fa4e3SBjoern A. Zeeb 	TP_fast_assign(
185da8fa4e3SBjoern A. Zeeb 		__assign_str(device, dev_name(ar->dev));
186da8fa4e3SBjoern A. Zeeb 		__assign_str(driver, dev_driver_string(ar->dev));
187da8fa4e3SBjoern A. Zeeb 		__entry->id = id;
188da8fa4e3SBjoern A. Zeeb 		__entry->buf_len = buf_len;
189da8fa4e3SBjoern A. Zeeb 		memcpy(__get_dynamic_array(buf), buf, buf_len);
190da8fa4e3SBjoern A. Zeeb 	),
191da8fa4e3SBjoern A. Zeeb 
192da8fa4e3SBjoern A. Zeeb 	TP_printk(
193da8fa4e3SBjoern A. Zeeb 		"%s %s id %d len %zu",
194da8fa4e3SBjoern A. Zeeb 		__get_str(driver),
195da8fa4e3SBjoern A. Zeeb 		__get_str(device),
196da8fa4e3SBjoern A. Zeeb 		__entry->id,
197da8fa4e3SBjoern A. Zeeb 		__entry->buf_len
198da8fa4e3SBjoern A. Zeeb 	)
199da8fa4e3SBjoern A. Zeeb );
200da8fa4e3SBjoern A. Zeeb 
201da8fa4e3SBjoern A. Zeeb TRACE_EVENT(ath10k_htt_stats,
202da8fa4e3SBjoern A. Zeeb 	TP_PROTO(struct ath10k *ar, const void *buf, size_t buf_len),
203da8fa4e3SBjoern A. Zeeb 
204da8fa4e3SBjoern A. Zeeb 	TP_ARGS(ar, buf, buf_len),
205da8fa4e3SBjoern A. Zeeb 
206da8fa4e3SBjoern A. Zeeb 	TP_STRUCT__entry(
207da8fa4e3SBjoern A. Zeeb 		__string(device, dev_name(ar->dev))
208da8fa4e3SBjoern A. Zeeb 		__string(driver, dev_driver_string(ar->dev))
209da8fa4e3SBjoern A. Zeeb 		__field(size_t, buf_len)
210da8fa4e3SBjoern A. Zeeb 		__dynamic_array(u8, buf, buf_len)
211da8fa4e3SBjoern A. Zeeb 	),
212da8fa4e3SBjoern A. Zeeb 
213da8fa4e3SBjoern A. Zeeb 	TP_fast_assign(
214da8fa4e3SBjoern A. Zeeb 		__assign_str(device, dev_name(ar->dev));
215da8fa4e3SBjoern A. Zeeb 		__assign_str(driver, dev_driver_string(ar->dev));
216da8fa4e3SBjoern A. Zeeb 		__entry->buf_len = buf_len;
217da8fa4e3SBjoern A. Zeeb 		memcpy(__get_dynamic_array(buf), buf, buf_len);
218da8fa4e3SBjoern A. Zeeb 	),
219da8fa4e3SBjoern A. Zeeb 
220da8fa4e3SBjoern A. Zeeb 	TP_printk(
221da8fa4e3SBjoern A. Zeeb 		"%s %s len %zu",
222da8fa4e3SBjoern A. Zeeb 		__get_str(driver),
223da8fa4e3SBjoern A. Zeeb 		__get_str(device),
224da8fa4e3SBjoern A. Zeeb 		__entry->buf_len
225da8fa4e3SBjoern A. Zeeb 	)
226da8fa4e3SBjoern A. Zeeb );
227da8fa4e3SBjoern A. Zeeb 
228da8fa4e3SBjoern A. Zeeb TRACE_EVENT(ath10k_wmi_dbglog,
229da8fa4e3SBjoern A. Zeeb 	TP_PROTO(struct ath10k *ar, const void *buf, size_t buf_len),
230da8fa4e3SBjoern A. Zeeb 
231da8fa4e3SBjoern A. Zeeb 	TP_ARGS(ar, buf, buf_len),
232da8fa4e3SBjoern A. Zeeb 
233da8fa4e3SBjoern A. Zeeb 	TP_STRUCT__entry(
234da8fa4e3SBjoern A. Zeeb 		__string(device, dev_name(ar->dev))
235da8fa4e3SBjoern A. Zeeb 		__string(driver, dev_driver_string(ar->dev))
236da8fa4e3SBjoern A. Zeeb 		__field(u8, hw_type)
237da8fa4e3SBjoern A. Zeeb 		__field(size_t, buf_len)
238da8fa4e3SBjoern A. Zeeb 		__dynamic_array(u8, buf, buf_len)
239da8fa4e3SBjoern A. Zeeb 	),
240da8fa4e3SBjoern A. Zeeb 
241da8fa4e3SBjoern A. Zeeb 	TP_fast_assign(
242da8fa4e3SBjoern A. Zeeb 		__assign_str(device, dev_name(ar->dev));
243da8fa4e3SBjoern A. Zeeb 		__assign_str(driver, dev_driver_string(ar->dev));
244da8fa4e3SBjoern A. Zeeb 		__entry->hw_type = ar->hw_rev;
245da8fa4e3SBjoern A. Zeeb 		__entry->buf_len = buf_len;
246da8fa4e3SBjoern A. Zeeb 		memcpy(__get_dynamic_array(buf), buf, buf_len);
247da8fa4e3SBjoern A. Zeeb 	),
248da8fa4e3SBjoern A. Zeeb 
249da8fa4e3SBjoern A. Zeeb 	TP_printk(
250da8fa4e3SBjoern A. Zeeb 		"%s %s %d len %zu",
251da8fa4e3SBjoern A. Zeeb 		__get_str(driver),
252da8fa4e3SBjoern A. Zeeb 		__get_str(device),
253da8fa4e3SBjoern A. Zeeb 		__entry->hw_type,
254da8fa4e3SBjoern A. Zeeb 		__entry->buf_len
255da8fa4e3SBjoern A. Zeeb 	)
256da8fa4e3SBjoern A. Zeeb );
257da8fa4e3SBjoern A. Zeeb 
258da8fa4e3SBjoern A. Zeeb TRACE_EVENT(ath10k_htt_pktlog,
259da8fa4e3SBjoern A. Zeeb 	    TP_PROTO(struct ath10k *ar, const void *buf, u16 buf_len),
260da8fa4e3SBjoern A. Zeeb 
261da8fa4e3SBjoern A. Zeeb 	TP_ARGS(ar, buf, buf_len),
262da8fa4e3SBjoern A. Zeeb 
263da8fa4e3SBjoern A. Zeeb 	TP_STRUCT__entry(
264da8fa4e3SBjoern A. Zeeb 		__string(device, dev_name(ar->dev))
265da8fa4e3SBjoern A. Zeeb 		__string(driver, dev_driver_string(ar->dev))
266da8fa4e3SBjoern A. Zeeb 		__field(u8, hw_type)
267da8fa4e3SBjoern A. Zeeb 		__field(u16, buf_len)
268da8fa4e3SBjoern A. Zeeb 		__dynamic_array(u8, pktlog, buf_len)
269da8fa4e3SBjoern A. Zeeb 	),
270da8fa4e3SBjoern A. Zeeb 
271da8fa4e3SBjoern A. Zeeb 	TP_fast_assign(
272da8fa4e3SBjoern A. Zeeb 		__assign_str(device, dev_name(ar->dev));
273da8fa4e3SBjoern A. Zeeb 		__assign_str(driver, dev_driver_string(ar->dev));
274da8fa4e3SBjoern A. Zeeb 		__entry->hw_type = ar->hw_rev;
275da8fa4e3SBjoern A. Zeeb 		__entry->buf_len = buf_len;
276da8fa4e3SBjoern A. Zeeb 		memcpy(__get_dynamic_array(pktlog), buf, buf_len);
277da8fa4e3SBjoern A. Zeeb 	),
278da8fa4e3SBjoern A. Zeeb 
279da8fa4e3SBjoern A. Zeeb 	TP_printk(
280da8fa4e3SBjoern A. Zeeb 		"%s %s %d size %u",
281da8fa4e3SBjoern A. Zeeb 		__get_str(driver),
282da8fa4e3SBjoern A. Zeeb 		__get_str(device),
283da8fa4e3SBjoern A. Zeeb 		__entry->hw_type,
284da8fa4e3SBjoern A. Zeeb 		__entry->buf_len
285da8fa4e3SBjoern A. Zeeb 	 )
286da8fa4e3SBjoern A. Zeeb );
287da8fa4e3SBjoern A. Zeeb 
288da8fa4e3SBjoern A. Zeeb TRACE_EVENT(ath10k_htt_tx,
289da8fa4e3SBjoern A. Zeeb 	    TP_PROTO(struct ath10k *ar, u16 msdu_id, u16 msdu_len,
290da8fa4e3SBjoern A. Zeeb 		     u8 vdev_id, u8 tid),
291da8fa4e3SBjoern A. Zeeb 
292da8fa4e3SBjoern A. Zeeb 	TP_ARGS(ar, msdu_id, msdu_len, vdev_id, tid),
293da8fa4e3SBjoern A. Zeeb 
294da8fa4e3SBjoern A. Zeeb 	TP_STRUCT__entry(
295da8fa4e3SBjoern A. Zeeb 		__string(device, dev_name(ar->dev))
296da8fa4e3SBjoern A. Zeeb 		__string(driver, dev_driver_string(ar->dev))
297da8fa4e3SBjoern A. Zeeb 		__field(u16, msdu_id)
298da8fa4e3SBjoern A. Zeeb 		__field(u16, msdu_len)
299da8fa4e3SBjoern A. Zeeb 		__field(u8, vdev_id)
300da8fa4e3SBjoern A. Zeeb 		__field(u8, tid)
301da8fa4e3SBjoern A. Zeeb 	),
302da8fa4e3SBjoern A. Zeeb 
303da8fa4e3SBjoern A. Zeeb 	TP_fast_assign(
304da8fa4e3SBjoern A. Zeeb 		__assign_str(device, dev_name(ar->dev));
305da8fa4e3SBjoern A. Zeeb 		__assign_str(driver, dev_driver_string(ar->dev));
306da8fa4e3SBjoern A. Zeeb 		__entry->msdu_id = msdu_id;
307da8fa4e3SBjoern A. Zeeb 		__entry->msdu_len = msdu_len;
308da8fa4e3SBjoern A. Zeeb 		__entry->vdev_id = vdev_id;
309da8fa4e3SBjoern A. Zeeb 		__entry->tid = tid;
310da8fa4e3SBjoern A. Zeeb 	),
311da8fa4e3SBjoern A. Zeeb 
312da8fa4e3SBjoern A. Zeeb 	TP_printk(
313da8fa4e3SBjoern A. Zeeb 		"%s %s msdu_id %d msdu_len %d vdev_id %d tid %d",
314da8fa4e3SBjoern A. Zeeb 		__get_str(driver),
315da8fa4e3SBjoern A. Zeeb 		__get_str(device),
316da8fa4e3SBjoern A. Zeeb 		__entry->msdu_id,
317da8fa4e3SBjoern A. Zeeb 		__entry->msdu_len,
318da8fa4e3SBjoern A. Zeeb 		__entry->vdev_id,
319da8fa4e3SBjoern A. Zeeb 		__entry->tid
320da8fa4e3SBjoern A. Zeeb 	 )
321da8fa4e3SBjoern A. Zeeb );
322da8fa4e3SBjoern A. Zeeb 
323da8fa4e3SBjoern A. Zeeb TRACE_EVENT(ath10k_txrx_tx_unref,
324da8fa4e3SBjoern A. Zeeb 	    TP_PROTO(struct ath10k *ar, u16 msdu_id),
325da8fa4e3SBjoern A. Zeeb 
326da8fa4e3SBjoern A. Zeeb 	TP_ARGS(ar, msdu_id),
327da8fa4e3SBjoern A. Zeeb 
328da8fa4e3SBjoern A. Zeeb 	TP_STRUCT__entry(
329da8fa4e3SBjoern A. Zeeb 		__string(device, dev_name(ar->dev))
330da8fa4e3SBjoern A. Zeeb 		__string(driver, dev_driver_string(ar->dev))
331da8fa4e3SBjoern A. Zeeb 		__field(u16, msdu_id)
332da8fa4e3SBjoern A. Zeeb 	),
333da8fa4e3SBjoern A. Zeeb 
334da8fa4e3SBjoern A. Zeeb 	TP_fast_assign(
335da8fa4e3SBjoern A. Zeeb 		__assign_str(device, dev_name(ar->dev));
336da8fa4e3SBjoern A. Zeeb 		__assign_str(driver, dev_driver_string(ar->dev));
337da8fa4e3SBjoern A. Zeeb 		__entry->msdu_id = msdu_id;
338da8fa4e3SBjoern A. Zeeb 	),
339da8fa4e3SBjoern A. Zeeb 
340da8fa4e3SBjoern A. Zeeb 	TP_printk(
341da8fa4e3SBjoern A. Zeeb 		"%s %s msdu_id %d",
342da8fa4e3SBjoern A. Zeeb 		__get_str(driver),
343da8fa4e3SBjoern A. Zeeb 		__get_str(device),
344da8fa4e3SBjoern A. Zeeb 		__entry->msdu_id
345da8fa4e3SBjoern A. Zeeb 	 )
346da8fa4e3SBjoern A. Zeeb );
347da8fa4e3SBjoern A. Zeeb 
348da8fa4e3SBjoern A. Zeeb DECLARE_EVENT_CLASS(ath10k_hdr_event,
349da8fa4e3SBjoern A. Zeeb 		    TP_PROTO(struct ath10k *ar, const void *data, size_t len),
350da8fa4e3SBjoern A. Zeeb 
351da8fa4e3SBjoern A. Zeeb 	TP_ARGS(ar, data, len),
352da8fa4e3SBjoern A. Zeeb 
353da8fa4e3SBjoern A. Zeeb 	TP_STRUCT__entry(
354da8fa4e3SBjoern A. Zeeb 		__string(device, dev_name(ar->dev))
355da8fa4e3SBjoern A. Zeeb 		__string(driver, dev_driver_string(ar->dev))
356da8fa4e3SBjoern A. Zeeb 		__field(size_t, len)
357da8fa4e3SBjoern A. Zeeb 		__dynamic_array(u8, data, ath10k_frm_hdr_len(data, len))
358da8fa4e3SBjoern A. Zeeb 	),
359da8fa4e3SBjoern A. Zeeb 
360da8fa4e3SBjoern A. Zeeb 	TP_fast_assign(
361da8fa4e3SBjoern A. Zeeb 		__assign_str(device, dev_name(ar->dev));
362da8fa4e3SBjoern A. Zeeb 		__assign_str(driver, dev_driver_string(ar->dev));
363da8fa4e3SBjoern A. Zeeb 		__entry->len = ath10k_frm_hdr_len(data, len);
364da8fa4e3SBjoern A. Zeeb 		memcpy(__get_dynamic_array(data), data, __entry->len);
365da8fa4e3SBjoern A. Zeeb 	),
366da8fa4e3SBjoern A. Zeeb 
367da8fa4e3SBjoern A. Zeeb 	TP_printk(
368da8fa4e3SBjoern A. Zeeb 		"%s %s len %zu\n",
369da8fa4e3SBjoern A. Zeeb 		__get_str(driver),
370da8fa4e3SBjoern A. Zeeb 		__get_str(device),
371da8fa4e3SBjoern A. Zeeb 		__entry->len
372da8fa4e3SBjoern A. Zeeb 	)
373da8fa4e3SBjoern A. Zeeb );
374da8fa4e3SBjoern A. Zeeb 
375da8fa4e3SBjoern A. Zeeb DECLARE_EVENT_CLASS(ath10k_payload_event,
376da8fa4e3SBjoern A. Zeeb 		    TP_PROTO(struct ath10k *ar, const void *data, size_t len),
377da8fa4e3SBjoern A. Zeeb 
378da8fa4e3SBjoern A. Zeeb 	TP_ARGS(ar, data, len),
379da8fa4e3SBjoern A. Zeeb 
380da8fa4e3SBjoern A. Zeeb 	TP_STRUCT__entry(
381da8fa4e3SBjoern A. Zeeb 		__string(device, dev_name(ar->dev))
382da8fa4e3SBjoern A. Zeeb 		__string(driver, dev_driver_string(ar->dev))
383da8fa4e3SBjoern A. Zeeb 		__field(size_t, len)
384da8fa4e3SBjoern A. Zeeb 		__dynamic_array(u8, payload, (len -
385da8fa4e3SBjoern A. Zeeb 					      ath10k_frm_hdr_len(data, len)))
386da8fa4e3SBjoern A. Zeeb 	),
387da8fa4e3SBjoern A. Zeeb 
388da8fa4e3SBjoern A. Zeeb 	TP_fast_assign(
389da8fa4e3SBjoern A. Zeeb 		__assign_str(device, dev_name(ar->dev));
390da8fa4e3SBjoern A. Zeeb 		__assign_str(driver, dev_driver_string(ar->dev));
391da8fa4e3SBjoern A. Zeeb 		__entry->len = len - ath10k_frm_hdr_len(data, len);
392da8fa4e3SBjoern A. Zeeb 		memcpy(__get_dynamic_array(payload),
393da8fa4e3SBjoern A. Zeeb 		       data + ath10k_frm_hdr_len(data, len), __entry->len);
394da8fa4e3SBjoern A. Zeeb 	),
395da8fa4e3SBjoern A. Zeeb 
396da8fa4e3SBjoern A. Zeeb 	TP_printk(
397da8fa4e3SBjoern A. Zeeb 		"%s %s len %zu\n",
398da8fa4e3SBjoern A. Zeeb 		__get_str(driver),
399da8fa4e3SBjoern A. Zeeb 		__get_str(device),
400da8fa4e3SBjoern A. Zeeb 		__entry->len
401da8fa4e3SBjoern A. Zeeb 	)
402da8fa4e3SBjoern A. Zeeb );
403da8fa4e3SBjoern A. Zeeb 
404da8fa4e3SBjoern A. Zeeb DEFINE_EVENT(ath10k_hdr_event, ath10k_tx_hdr,
405da8fa4e3SBjoern A. Zeeb 	     TP_PROTO(struct ath10k *ar, const void *data, size_t len),
406da8fa4e3SBjoern A. Zeeb 	     TP_ARGS(ar, data, len)
407da8fa4e3SBjoern A. Zeeb );
408da8fa4e3SBjoern A. Zeeb 
409da8fa4e3SBjoern A. Zeeb DEFINE_EVENT(ath10k_payload_event, ath10k_tx_payload,
410da8fa4e3SBjoern A. Zeeb 	     TP_PROTO(struct ath10k *ar, const void *data, size_t len),
411da8fa4e3SBjoern A. Zeeb 	     TP_ARGS(ar, data, len)
412da8fa4e3SBjoern A. Zeeb );
413da8fa4e3SBjoern A. Zeeb 
414da8fa4e3SBjoern A. Zeeb DEFINE_EVENT(ath10k_hdr_event, ath10k_rx_hdr,
415da8fa4e3SBjoern A. Zeeb 	     TP_PROTO(struct ath10k *ar, const void *data, size_t len),
416da8fa4e3SBjoern A. Zeeb 	     TP_ARGS(ar, data, len)
417da8fa4e3SBjoern A. Zeeb );
418da8fa4e3SBjoern A. Zeeb 
419da8fa4e3SBjoern A. Zeeb DEFINE_EVENT(ath10k_payload_event, ath10k_rx_payload,
420da8fa4e3SBjoern A. Zeeb 	     TP_PROTO(struct ath10k *ar, const void *data, size_t len),
421da8fa4e3SBjoern A. Zeeb 	     TP_ARGS(ar, data, len)
422da8fa4e3SBjoern A. Zeeb );
423da8fa4e3SBjoern A. Zeeb 
424da8fa4e3SBjoern A. Zeeb TRACE_EVENT(ath10k_htt_rx_desc,
425da8fa4e3SBjoern A. Zeeb 	    TP_PROTO(struct ath10k *ar, const void *data, size_t len),
426da8fa4e3SBjoern A. Zeeb 
427da8fa4e3SBjoern A. Zeeb 	TP_ARGS(ar, data, len),
428da8fa4e3SBjoern A. Zeeb 
429da8fa4e3SBjoern A. Zeeb 	TP_STRUCT__entry(
430da8fa4e3SBjoern A. Zeeb 		__string(device, dev_name(ar->dev))
431da8fa4e3SBjoern A. Zeeb 		__string(driver, dev_driver_string(ar->dev))
432da8fa4e3SBjoern A. Zeeb 		__field(u8, hw_type)
433da8fa4e3SBjoern A. Zeeb 		__field(u16, len)
434da8fa4e3SBjoern A. Zeeb 		__dynamic_array(u8, rxdesc, len)
435da8fa4e3SBjoern A. Zeeb 	),
436da8fa4e3SBjoern A. Zeeb 
437da8fa4e3SBjoern A. Zeeb 	TP_fast_assign(
438da8fa4e3SBjoern A. Zeeb 		__assign_str(device, dev_name(ar->dev));
439da8fa4e3SBjoern A. Zeeb 		__assign_str(driver, dev_driver_string(ar->dev));
440da8fa4e3SBjoern A. Zeeb 		__entry->hw_type = ar->hw_rev;
441da8fa4e3SBjoern A. Zeeb 		__entry->len = len;
442da8fa4e3SBjoern A. Zeeb 		memcpy(__get_dynamic_array(rxdesc), data, len);
443da8fa4e3SBjoern A. Zeeb 	),
444da8fa4e3SBjoern A. Zeeb 
445da8fa4e3SBjoern A. Zeeb 	TP_printk(
446da8fa4e3SBjoern A. Zeeb 		"%s %s %d rxdesc len %d",
447da8fa4e3SBjoern A. Zeeb 		__get_str(driver),
448da8fa4e3SBjoern A. Zeeb 		__get_str(device),
449da8fa4e3SBjoern A. Zeeb 		__entry->hw_type,
450da8fa4e3SBjoern A. Zeeb 		__entry->len
451da8fa4e3SBjoern A. Zeeb 	 )
452da8fa4e3SBjoern A. Zeeb );
453da8fa4e3SBjoern A. Zeeb 
454da8fa4e3SBjoern A. Zeeb TRACE_EVENT(ath10k_wmi_diag_container,
455da8fa4e3SBjoern A. Zeeb 	    TP_PROTO(struct ath10k *ar,
456da8fa4e3SBjoern A. Zeeb 		     u8 type,
457da8fa4e3SBjoern A. Zeeb 		     u32 timestamp,
458da8fa4e3SBjoern A. Zeeb 		     u32 code,
459da8fa4e3SBjoern A. Zeeb 		     u16 len,
460da8fa4e3SBjoern A. Zeeb 		     const void *data),
461da8fa4e3SBjoern A. Zeeb 
462da8fa4e3SBjoern A. Zeeb 	TP_ARGS(ar, type, timestamp, code, len, data),
463da8fa4e3SBjoern A. Zeeb 
464da8fa4e3SBjoern A. Zeeb 	TP_STRUCT__entry(
465da8fa4e3SBjoern A. Zeeb 		__string(device, dev_name(ar->dev))
466da8fa4e3SBjoern A. Zeeb 		__string(driver, dev_driver_string(ar->dev))
467da8fa4e3SBjoern A. Zeeb 		__field(u8, type)
468da8fa4e3SBjoern A. Zeeb 		__field(u32, timestamp)
469da8fa4e3SBjoern A. Zeeb 		__field(u32, code)
470da8fa4e3SBjoern A. Zeeb 		__field(u16, len)
471da8fa4e3SBjoern A. Zeeb 		__dynamic_array(u8, data, len)
472da8fa4e3SBjoern A. Zeeb 	),
473da8fa4e3SBjoern A. Zeeb 
474da8fa4e3SBjoern A. Zeeb 	TP_fast_assign(
475da8fa4e3SBjoern A. Zeeb 		__assign_str(device, dev_name(ar->dev));
476da8fa4e3SBjoern A. Zeeb 		__assign_str(driver, dev_driver_string(ar->dev));
477da8fa4e3SBjoern A. Zeeb 		__entry->type = type;
478da8fa4e3SBjoern A. Zeeb 		__entry->timestamp = timestamp;
479da8fa4e3SBjoern A. Zeeb 		__entry->code = code;
480da8fa4e3SBjoern A. Zeeb 		__entry->len = len;
481da8fa4e3SBjoern A. Zeeb 		memcpy(__get_dynamic_array(data), data, len);
482da8fa4e3SBjoern A. Zeeb 	),
483da8fa4e3SBjoern A. Zeeb 
484da8fa4e3SBjoern A. Zeeb 	TP_printk(
485da8fa4e3SBjoern A. Zeeb 		"%s %s diag container type %u timestamp %u code %u len %d",
486da8fa4e3SBjoern A. Zeeb 		__get_str(driver),
487da8fa4e3SBjoern A. Zeeb 		__get_str(device),
488da8fa4e3SBjoern A. Zeeb 		__entry->type,
489da8fa4e3SBjoern A. Zeeb 		__entry->timestamp,
490da8fa4e3SBjoern A. Zeeb 		__entry->code,
491da8fa4e3SBjoern A. Zeeb 		__entry->len
492da8fa4e3SBjoern A. Zeeb 	)
493da8fa4e3SBjoern A. Zeeb );
494da8fa4e3SBjoern A. Zeeb 
495da8fa4e3SBjoern A. Zeeb TRACE_EVENT(ath10k_wmi_diag,
496da8fa4e3SBjoern A. Zeeb 	    TP_PROTO(struct ath10k *ar, const void *data, size_t len),
497da8fa4e3SBjoern A. Zeeb 
498da8fa4e3SBjoern A. Zeeb 	TP_ARGS(ar, data, len),
499da8fa4e3SBjoern A. Zeeb 
500da8fa4e3SBjoern A. Zeeb 	TP_STRUCT__entry(
501da8fa4e3SBjoern A. Zeeb 		__string(device, dev_name(ar->dev))
502da8fa4e3SBjoern A. Zeeb 		__string(driver, dev_driver_string(ar->dev))
503da8fa4e3SBjoern A. Zeeb 		__field(u16, len)
504da8fa4e3SBjoern A. Zeeb 		__dynamic_array(u8, data, len)
505da8fa4e3SBjoern A. Zeeb 	),
506da8fa4e3SBjoern A. Zeeb 
507da8fa4e3SBjoern A. Zeeb 	TP_fast_assign(
508da8fa4e3SBjoern A. Zeeb 		__assign_str(device, dev_name(ar->dev));
509da8fa4e3SBjoern A. Zeeb 		__assign_str(driver, dev_driver_string(ar->dev));
510da8fa4e3SBjoern A. Zeeb 		__entry->len = len;
511da8fa4e3SBjoern A. Zeeb 		memcpy(__get_dynamic_array(data), data, len);
512da8fa4e3SBjoern A. Zeeb 	),
513da8fa4e3SBjoern A. Zeeb 
514da8fa4e3SBjoern A. Zeeb 	TP_printk(
515da8fa4e3SBjoern A. Zeeb 		"%s %s tlv diag len %d",
516da8fa4e3SBjoern A. Zeeb 		__get_str(driver),
517da8fa4e3SBjoern A. Zeeb 		__get_str(device),
518da8fa4e3SBjoern A. Zeeb 		__entry->len
519da8fa4e3SBjoern A. Zeeb 	)
520da8fa4e3SBjoern A. Zeeb );
521da8fa4e3SBjoern A. Zeeb 
522da8fa4e3SBjoern A. Zeeb #endif /* _TRACE_H_ || TRACE_HEADER_MULTI_READ*/
523da8fa4e3SBjoern A. Zeeb 
524da8fa4e3SBjoern A. Zeeb /* we don't want to use include/trace/events */
525da8fa4e3SBjoern A. Zeeb #undef TRACE_INCLUDE_PATH
526da8fa4e3SBjoern A. Zeeb #define TRACE_INCLUDE_PATH .
527da8fa4e3SBjoern A. Zeeb #undef TRACE_INCLUDE_FILE
528da8fa4e3SBjoern A. Zeeb #define TRACE_INCLUDE_FILE trace
529da8fa4e3SBjoern A. Zeeb 
530da8fa4e3SBjoern A. Zeeb /* This part must be outside protection */
531da8fa4e3SBjoern A. Zeeb #include <trace/define_trace.h>
532