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