1f0553ca9SKalle Valo /* SPDX-License-Identifier: ISC */
25e3dd157SKalle Valo /*
35e3dd157SKalle Valo  * Copyright (c) 2005-2011 Atheros Communications Inc.
48b1083d6SKalle Valo  * Copyright (c) 2011-2016 Qualcomm Atheros, Inc.
55e3dd157SKalle Valo  */
65e3dd157SKalle Valo 
75e3dd157SKalle Valo #if !defined(_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
85e3dd157SKalle Valo 
95e3dd157SKalle Valo #include <linux/tracepoint.h>
10d35a6c18SMichal Kazior #include "core.h"
115e3dd157SKalle Valo 
125ce8e7fdSRajkumar Manoharan #if !defined(_TRACE_H_)
ath10k_frm_hdr_len(const void * buf,size_t len)1336d8230bSMichal Kazior static inline u32 ath10k_frm_hdr_len(const void *buf, size_t len)
145ce8e7fdSRajkumar Manoharan {
15b22a8f49SMichal Kazior 	const struct ieee80211_hdr *hdr = buf;
16b22a8f49SMichal Kazior 
1736d8230bSMichal Kazior 	/* In some rare cases (e.g. fcs error) device reports frame buffer
1836d8230bSMichal Kazior 	 * shorter than what frame header implies (e.g. len = 0). The buffer
1936d8230bSMichal Kazior 	 * can still be accessed so do a simple min() to guarantee caller
2036d8230bSMichal Kazior 	 * doesn't get value greater than len.
2136d8230bSMichal Kazior 	 */
2236d8230bSMichal Kazior 	return min_t(u32, len, ieee80211_hdrlen(hdr->frame_control));
235ce8e7fdSRajkumar Manoharan }
245ce8e7fdSRajkumar Manoharan #endif
255ce8e7fdSRajkumar Manoharan 
265e3dd157SKalle Valo #define _TRACE_H_
275e3dd157SKalle Valo 
285e3dd157SKalle Valo /* create empty functions when tracing is disabled */
295e3dd157SKalle Valo #if !defined(CONFIG_ATH10K_TRACING)
305e3dd157SKalle Valo #undef TRACE_EVENT
315e3dd157SKalle Valo #define TRACE_EVENT(name, proto, ...) \
329d740d63SVenkateswara Naralasetty static inline void trace_ ## name(proto) {} \
339d740d63SVenkateswara Naralasetty static inline bool trace_##name##_enabled(void) \
349d740d63SVenkateswara Naralasetty {						\
359d740d63SVenkateswara Naralasetty 	return false;				\
369d740d63SVenkateswara Naralasetty }
375e3dd157SKalle Valo #undef DECLARE_EVENT_CLASS
385e3dd157SKalle Valo #define DECLARE_EVENT_CLASS(...)
395e3dd157SKalle Valo #undef DEFINE_EVENT
405e3dd157SKalle Valo #define DEFINE_EVENT(evt_class, name, proto, ...) \
415e3dd157SKalle Valo static inline void trace_ ## name(proto) {}
425e3dd157SKalle Valo #endif /* !CONFIG_ATH10K_TRACING || __CHECKER__ */
435e3dd157SKalle Valo 
445e3dd157SKalle Valo #undef TRACE_SYSTEM
455e3dd157SKalle Valo #define TRACE_SYSTEM ath10k
465e3dd157SKalle Valo 
47f42f8eb2SMichal Kazior #define ATH10K_MSG_MAX 400
485e3dd157SKalle Valo 
495e3dd157SKalle Valo DECLARE_EVENT_CLASS(ath10k_log_event,
50d35a6c18SMichal Kazior 	TP_PROTO(struct ath10k *ar, struct va_format *vaf),
51d35a6c18SMichal Kazior 	TP_ARGS(ar, vaf),
525e3dd157SKalle Valo 	TP_STRUCT__entry(
53d35a6c18SMichal Kazior 		__string(device, dev_name(ar->dev))
54d35a6c18SMichal Kazior 		__string(driver, dev_driver_string(ar->dev))
55*c01406f8SSteven Rostedt (Google) 		__vstring(msg, vaf->fmt, vaf->va)
565e3dd157SKalle Valo 	),
575e3dd157SKalle Valo 	TP_fast_assign(
58d35a6c18SMichal Kazior 		__assign_str(device, dev_name(ar->dev));
59d35a6c18SMichal Kazior 		__assign_str(driver, dev_driver_string(ar->dev));
60*c01406f8SSteven Rostedt (Google) 		__assign_vstr(msg, vaf->fmt, vaf->va);
615e3dd157SKalle Valo 	),
62d35a6c18SMichal Kazior 	TP_printk(
63d35a6c18SMichal Kazior 		"%s %s %s",
64d35a6c18SMichal Kazior 		__get_str(driver),
65d35a6c18SMichal Kazior 		__get_str(device),
66d35a6c18SMichal Kazior 		__get_str(msg)
67d35a6c18SMichal Kazior 	)
685e3dd157SKalle Valo );
695e3dd157SKalle Valo 
705e3dd157SKalle Valo DEFINE_EVENT(ath10k_log_event, ath10k_log_err,
71d35a6c18SMichal Kazior 	     TP_PROTO(struct ath10k *ar, struct va_format *vaf),
72d35a6c18SMichal Kazior 	     TP_ARGS(ar, vaf)
735e3dd157SKalle Valo );
745e3dd157SKalle Valo 
755e3dd157SKalle Valo DEFINE_EVENT(ath10k_log_event, ath10k_log_warn,
76d35a6c18SMichal Kazior 	     TP_PROTO(struct ath10k *ar, struct va_format *vaf),
77d35a6c18SMichal Kazior 	     TP_ARGS(ar, vaf)
785e3dd157SKalle Valo );
795e3dd157SKalle Valo 
805e3dd157SKalle Valo DEFINE_EVENT(ath10k_log_event, ath10k_log_info,
81d35a6c18SMichal Kazior 	     TP_PROTO(struct ath10k *ar, struct va_format *vaf),
82d35a6c18SMichal Kazior 	     TP_ARGS(ar, vaf)
835e3dd157SKalle Valo );
845e3dd157SKalle Valo 
855e3dd157SKalle Valo TRACE_EVENT(ath10k_log_dbg,
86d35a6c18SMichal Kazior 	TP_PROTO(struct ath10k *ar, unsigned int level, struct va_format *vaf),
87d35a6c18SMichal Kazior 	TP_ARGS(ar, level, vaf),
885e3dd157SKalle Valo 	TP_STRUCT__entry(
89d35a6c18SMichal Kazior 		__string(device, dev_name(ar->dev))
90d35a6c18SMichal Kazior 		__string(driver, dev_driver_string(ar->dev))
915e3dd157SKalle Valo 		__field(unsigned int, level)
92*c01406f8SSteven Rostedt (Google) 		__vstring(msg, vaf->fmt, vaf->va)
935e3dd157SKalle Valo 	),
945e3dd157SKalle Valo 	TP_fast_assign(
95d35a6c18SMichal Kazior 		__assign_str(device, dev_name(ar->dev));
96d35a6c18SMichal Kazior 		__assign_str(driver, dev_driver_string(ar->dev));
975e3dd157SKalle Valo 		__entry->level = level;
98*c01406f8SSteven Rostedt (Google) 		__assign_vstr(msg, vaf->fmt, vaf->va);
995e3dd157SKalle Valo 	),
100d35a6c18SMichal Kazior 	TP_printk(
101d35a6c18SMichal Kazior 		"%s %s %s",
102d35a6c18SMichal Kazior 		__get_str(driver),
103d35a6c18SMichal Kazior 		__get_str(device),
104d35a6c18SMichal Kazior 		__get_str(msg)
105d35a6c18SMichal Kazior 	)
1065e3dd157SKalle Valo );
1075e3dd157SKalle Valo 
1085e3dd157SKalle Valo TRACE_EVENT(ath10k_log_dbg_dump,
109d35a6c18SMichal Kazior 	TP_PROTO(struct ath10k *ar, const char *msg, const char *prefix,
1105e3dd157SKalle Valo 		 const void *buf, size_t buf_len),
1115e3dd157SKalle Valo 
112d35a6c18SMichal Kazior 	TP_ARGS(ar, msg, prefix, buf, buf_len),
1135e3dd157SKalle Valo 
1145e3dd157SKalle Valo 	TP_STRUCT__entry(
115d35a6c18SMichal Kazior 		__string(device, dev_name(ar->dev))
116d35a6c18SMichal Kazior 		__string(driver, dev_driver_string(ar->dev))
1175e3dd157SKalle Valo 		__string(msg, msg)
1185e3dd157SKalle Valo 		__string(prefix, prefix)
1195e3dd157SKalle Valo 		__field(size_t, buf_len)
1205e3dd157SKalle Valo 		__dynamic_array(u8, buf, buf_len)
1215e3dd157SKalle Valo 	),
1225e3dd157SKalle Valo 
1235e3dd157SKalle Valo 	TP_fast_assign(
124d35a6c18SMichal Kazior 		__assign_str(device, dev_name(ar->dev));
125d35a6c18SMichal Kazior 		__assign_str(driver, dev_driver_string(ar->dev));
1265e3dd157SKalle Valo 		__assign_str(msg, msg);
1275e3dd157SKalle Valo 		__assign_str(prefix, prefix);
1285e3dd157SKalle Valo 		__entry->buf_len = buf_len;
1295e3dd157SKalle Valo 		memcpy(__get_dynamic_array(buf), buf, buf_len);
1305e3dd157SKalle Valo 	),
1315e3dd157SKalle Valo 
1325e3dd157SKalle Valo 	TP_printk(
133d35a6c18SMichal Kazior 		"%s %s %s/%s\n",
134d35a6c18SMichal Kazior 		__get_str(driver),
135d35a6c18SMichal Kazior 		__get_str(device),
136d35a6c18SMichal Kazior 		__get_str(prefix),
137d35a6c18SMichal Kazior 		__get_str(msg)
1385e3dd157SKalle Valo 	)
1395e3dd157SKalle Valo );
1405e3dd157SKalle Valo 
1415e3dd157SKalle Valo TRACE_EVENT(ath10k_wmi_cmd,
1429ef0f58eSCarl Huang 	TP_PROTO(struct ath10k *ar, int id, const void *buf, size_t buf_len),
1435e3dd157SKalle Valo 
1449ef0f58eSCarl Huang 	TP_ARGS(ar, id, buf, buf_len),
1455e3dd157SKalle Valo 
1465e3dd157SKalle Valo 	TP_STRUCT__entry(
147d35a6c18SMichal Kazior 		__string(device, dev_name(ar->dev))
148d35a6c18SMichal Kazior 		__string(driver, dev_driver_string(ar->dev))
1495e3dd157SKalle Valo 		__field(unsigned int, id)
1505e3dd157SKalle Valo 		__field(size_t, buf_len)
1515e3dd157SKalle Valo 		__dynamic_array(u8, buf, buf_len)
1525e3dd157SKalle Valo 	),
1535e3dd157SKalle Valo 
1545e3dd157SKalle Valo 	TP_fast_assign(
155d35a6c18SMichal Kazior 		__assign_str(device, dev_name(ar->dev));
156d35a6c18SMichal Kazior 		__assign_str(driver, dev_driver_string(ar->dev));
1575e3dd157SKalle Valo 		__entry->id = id;
1585e3dd157SKalle Valo 		__entry->buf_len = buf_len;
1595e3dd157SKalle Valo 		memcpy(__get_dynamic_array(buf), buf, buf_len);
1605e3dd157SKalle Valo 	),
1615e3dd157SKalle Valo 
1625e3dd157SKalle Valo 	TP_printk(
1639ef0f58eSCarl Huang 		"%s %s id %d len %zu",
164d35a6c18SMichal Kazior 		__get_str(driver),
165d35a6c18SMichal Kazior 		__get_str(device),
1665e3dd157SKalle Valo 		__entry->id,
1679ef0f58eSCarl Huang 		__entry->buf_len
1685e3dd157SKalle Valo 	)
1695e3dd157SKalle Valo );
1705e3dd157SKalle Valo 
1715e3dd157SKalle Valo TRACE_EVENT(ath10k_wmi_event,
172b22a8f49SMichal Kazior 	TP_PROTO(struct ath10k *ar, int id, const void *buf, size_t buf_len),
1735e3dd157SKalle Valo 
174d35a6c18SMichal Kazior 	TP_ARGS(ar, id, buf, buf_len),
1755e3dd157SKalle Valo 
1765e3dd157SKalle Valo 	TP_STRUCT__entry(
177d35a6c18SMichal Kazior 		__string(device, dev_name(ar->dev))
178d35a6c18SMichal Kazior 		__string(driver, dev_driver_string(ar->dev))
1795e3dd157SKalle Valo 		__field(unsigned int, id)
1805e3dd157SKalle Valo 		__field(size_t, buf_len)
1815e3dd157SKalle Valo 		__dynamic_array(u8, buf, buf_len)
1825e3dd157SKalle Valo 	),
1835e3dd157SKalle Valo 
1845e3dd157SKalle Valo 	TP_fast_assign(
185d35a6c18SMichal Kazior 		__assign_str(device, dev_name(ar->dev));
186d35a6c18SMichal Kazior 		__assign_str(driver, dev_driver_string(ar->dev));
1875e3dd157SKalle Valo 		__entry->id = id;
1885e3dd157SKalle Valo 		__entry->buf_len = buf_len;
1895e3dd157SKalle Valo 		memcpy(__get_dynamic_array(buf), buf, buf_len);
1905e3dd157SKalle Valo 	),
1915e3dd157SKalle Valo 
1925e3dd157SKalle Valo 	TP_printk(
193d35a6c18SMichal Kazior 		"%s %s id %d len %zu",
194d35a6c18SMichal Kazior 		__get_str(driver),
195d35a6c18SMichal Kazior 		__get_str(device),
1965e3dd157SKalle Valo 		__entry->id,
1975e3dd157SKalle Valo 		__entry->buf_len
1985e3dd157SKalle Valo 	)
1995e3dd157SKalle Valo );
2005e3dd157SKalle Valo 
201a9bf0506SKalle Valo TRACE_EVENT(ath10k_htt_stats,
202b22a8f49SMichal Kazior 	TP_PROTO(struct ath10k *ar, const void *buf, size_t buf_len),
203a9bf0506SKalle Valo 
204d35a6c18SMichal Kazior 	TP_ARGS(ar, buf, buf_len),
205a9bf0506SKalle Valo 
206a9bf0506SKalle Valo 	TP_STRUCT__entry(
207d35a6c18SMichal Kazior 		__string(device, dev_name(ar->dev))
208d35a6c18SMichal Kazior 		__string(driver, dev_driver_string(ar->dev))
209a9bf0506SKalle Valo 		__field(size_t, buf_len)
210a9bf0506SKalle Valo 		__dynamic_array(u8, buf, buf_len)
211a9bf0506SKalle Valo 	),
212a9bf0506SKalle Valo 
213a9bf0506SKalle Valo 	TP_fast_assign(
214d35a6c18SMichal Kazior 		__assign_str(device, dev_name(ar->dev));
215d35a6c18SMichal Kazior 		__assign_str(driver, dev_driver_string(ar->dev));
216a9bf0506SKalle Valo 		__entry->buf_len = buf_len;
217a9bf0506SKalle Valo 		memcpy(__get_dynamic_array(buf), buf, buf_len);
218a9bf0506SKalle Valo 	),
219a9bf0506SKalle Valo 
220a9bf0506SKalle Valo 	TP_printk(
221d35a6c18SMichal Kazior 		"%s %s len %zu",
222d35a6c18SMichal Kazior 		__get_str(driver),
223d35a6c18SMichal Kazior 		__get_str(device),
224a9bf0506SKalle Valo 		__entry->buf_len
225a9bf0506SKalle Valo 	)
226a9bf0506SKalle Valo );
227a9bf0506SKalle Valo 
228869526b9SKalle Valo TRACE_EVENT(ath10k_wmi_dbglog,
229b22a8f49SMichal Kazior 	TP_PROTO(struct ath10k *ar, const void *buf, size_t buf_len),
230869526b9SKalle Valo 
231d35a6c18SMichal Kazior 	TP_ARGS(ar, buf, buf_len),
232869526b9SKalle Valo 
233869526b9SKalle Valo 	TP_STRUCT__entry(
234d35a6c18SMichal Kazior 		__string(device, dev_name(ar->dev))
235d35a6c18SMichal Kazior 		__string(driver, dev_driver_string(ar->dev))
23604ae87a5SPeter Zijlstra 		__field(u8, hw_type)
237869526b9SKalle Valo 		__field(size_t, buf_len)
238869526b9SKalle Valo 		__dynamic_array(u8, buf, buf_len)
239869526b9SKalle Valo 	),
240869526b9SKalle Valo 
241869526b9SKalle Valo 	TP_fast_assign(
242d35a6c18SMichal Kazior 		__assign_str(device, dev_name(ar->dev));
243d35a6c18SMichal Kazior 		__assign_str(driver, dev_driver_string(ar->dev));
24418353749SAshok Raj Nagarajan 		__entry->hw_type = ar->hw_rev;
245869526b9SKalle Valo 		__entry->buf_len = buf_len;
246869526b9SKalle Valo 		memcpy(__get_dynamic_array(buf), buf, buf_len);
247869526b9SKalle Valo 	),
248869526b9SKalle Valo 
249869526b9SKalle Valo 	TP_printk(
25018353749SAshok Raj Nagarajan 		"%s %s %d len %zu",
251d35a6c18SMichal Kazior 		__get_str(driver),
252d35a6c18SMichal Kazior 		__get_str(device),
25318353749SAshok Raj Nagarajan 		__entry->hw_type,
254869526b9SKalle Valo 		__entry->buf_len
255869526b9SKalle Valo 	)
256869526b9SKalle Valo );
257869526b9SKalle Valo 
258bfdd7937SRajkumar Manoharan TRACE_EVENT(ath10k_htt_pktlog,
259b22a8f49SMichal Kazior 	    TP_PROTO(struct ath10k *ar, const void *buf, u16 buf_len),
260bfdd7937SRajkumar Manoharan 
261bfdd7937SRajkumar Manoharan 	TP_ARGS(ar, buf, buf_len),
262bfdd7937SRajkumar Manoharan 
263bfdd7937SRajkumar Manoharan 	TP_STRUCT__entry(
264bfdd7937SRajkumar Manoharan 		__string(device, dev_name(ar->dev))
265bfdd7937SRajkumar Manoharan 		__string(driver, dev_driver_string(ar->dev))
26604ae87a5SPeter Zijlstra 		__field(u8, hw_type)
267bfdd7937SRajkumar Manoharan 		__field(u16, buf_len)
268bfdd7937SRajkumar Manoharan 		__dynamic_array(u8, pktlog, buf_len)
269bfdd7937SRajkumar Manoharan 	),
270bfdd7937SRajkumar Manoharan 
271bfdd7937SRajkumar Manoharan 	TP_fast_assign(
272bfdd7937SRajkumar Manoharan 		__assign_str(device, dev_name(ar->dev));
273bfdd7937SRajkumar Manoharan 		__assign_str(driver, dev_driver_string(ar->dev));
27418353749SAshok Raj Nagarajan 		__entry->hw_type = ar->hw_rev;
275bfdd7937SRajkumar Manoharan 		__entry->buf_len = buf_len;
276bfdd7937SRajkumar Manoharan 		memcpy(__get_dynamic_array(pktlog), buf, buf_len);
277bfdd7937SRajkumar Manoharan 	),
278bfdd7937SRajkumar Manoharan 
279bfdd7937SRajkumar Manoharan 	TP_printk(
280779750bbSTom Rix 		"%s %s %d size %u",
281bfdd7937SRajkumar Manoharan 		__get_str(driver),
282bfdd7937SRajkumar Manoharan 		__get_str(device),
28318353749SAshok Raj Nagarajan 		__entry->hw_type,
284bfdd7937SRajkumar Manoharan 		__entry->buf_len
285bfdd7937SRajkumar Manoharan 	 )
286bfdd7937SRajkumar Manoharan );
287bfdd7937SRajkumar Manoharan 
288d1e50f47SRajkumar Manoharan TRACE_EVENT(ath10k_htt_tx,
289d1e50f47SRajkumar Manoharan 	    TP_PROTO(struct ath10k *ar, u16 msdu_id, u16 msdu_len,
290d1e50f47SRajkumar Manoharan 		     u8 vdev_id, u8 tid),
291d1e50f47SRajkumar Manoharan 
292d1e50f47SRajkumar Manoharan 	TP_ARGS(ar, msdu_id, msdu_len, vdev_id, tid),
293d1e50f47SRajkumar Manoharan 
294d1e50f47SRajkumar Manoharan 	TP_STRUCT__entry(
295d1e50f47SRajkumar Manoharan 		__string(device, dev_name(ar->dev))
296d1e50f47SRajkumar Manoharan 		__string(driver, dev_driver_string(ar->dev))
297d1e50f47SRajkumar Manoharan 		__field(u16, msdu_id)
298d1e50f47SRajkumar Manoharan 		__field(u16, msdu_len)
299d1e50f47SRajkumar Manoharan 		__field(u8, vdev_id)
300d1e50f47SRajkumar Manoharan 		__field(u8, tid)
301d1e50f47SRajkumar Manoharan 	),
302d1e50f47SRajkumar Manoharan 
303d1e50f47SRajkumar Manoharan 	TP_fast_assign(
304d1e50f47SRajkumar Manoharan 		__assign_str(device, dev_name(ar->dev));
305d1e50f47SRajkumar Manoharan 		__assign_str(driver, dev_driver_string(ar->dev));
306d1e50f47SRajkumar Manoharan 		__entry->msdu_id = msdu_id;
307d1e50f47SRajkumar Manoharan 		__entry->msdu_len = msdu_len;
308d1e50f47SRajkumar Manoharan 		__entry->vdev_id = vdev_id;
309d1e50f47SRajkumar Manoharan 		__entry->tid = tid;
310d1e50f47SRajkumar Manoharan 	),
311d1e50f47SRajkumar Manoharan 
312d1e50f47SRajkumar Manoharan 	TP_printk(
313d1e50f47SRajkumar Manoharan 		"%s %s msdu_id %d msdu_len %d vdev_id %d tid %d",
314d1e50f47SRajkumar Manoharan 		__get_str(driver),
315d1e50f47SRajkumar Manoharan 		__get_str(device),
316d1e50f47SRajkumar Manoharan 		__entry->msdu_id,
317d1e50f47SRajkumar Manoharan 		__entry->msdu_len,
318d1e50f47SRajkumar Manoharan 		__entry->vdev_id,
319d1e50f47SRajkumar Manoharan 		__entry->tid
320d1e50f47SRajkumar Manoharan 	 )
321d1e50f47SRajkumar Manoharan );
322d1e50f47SRajkumar Manoharan 
323d1e50f47SRajkumar Manoharan TRACE_EVENT(ath10k_txrx_tx_unref,
324d1e50f47SRajkumar Manoharan 	    TP_PROTO(struct ath10k *ar, u16 msdu_id),
325d1e50f47SRajkumar Manoharan 
326d1e50f47SRajkumar Manoharan 	TP_ARGS(ar, msdu_id),
327d1e50f47SRajkumar Manoharan 
328d1e50f47SRajkumar Manoharan 	TP_STRUCT__entry(
329d1e50f47SRajkumar Manoharan 		__string(device, dev_name(ar->dev))
330d1e50f47SRajkumar Manoharan 		__string(driver, dev_driver_string(ar->dev))
331d1e50f47SRajkumar Manoharan 		__field(u16, msdu_id)
332d1e50f47SRajkumar Manoharan 	),
333d1e50f47SRajkumar Manoharan 
334d1e50f47SRajkumar Manoharan 	TP_fast_assign(
335d1e50f47SRajkumar Manoharan 		__assign_str(device, dev_name(ar->dev));
336d1e50f47SRajkumar Manoharan 		__assign_str(driver, dev_driver_string(ar->dev));
337d1e50f47SRajkumar Manoharan 		__entry->msdu_id = msdu_id;
338d1e50f47SRajkumar Manoharan 	),
339d1e50f47SRajkumar Manoharan 
340d1e50f47SRajkumar Manoharan 	TP_printk(
341d1e50f47SRajkumar Manoharan 		"%s %s msdu_id %d",
342d1e50f47SRajkumar Manoharan 		__get_str(driver),
343d1e50f47SRajkumar Manoharan 		__get_str(device),
344d1e50f47SRajkumar Manoharan 		__entry->msdu_id
345d1e50f47SRajkumar Manoharan 	 )
346d1e50f47SRajkumar Manoharan );
3479b57f88fSRajkumar Manoharan 
3485ce8e7fdSRajkumar Manoharan DECLARE_EVENT_CLASS(ath10k_hdr_event,
349b22a8f49SMichal Kazior 		    TP_PROTO(struct ath10k *ar, const void *data, size_t len),
3509b57f88fSRajkumar Manoharan 
3519b57f88fSRajkumar Manoharan 	TP_ARGS(ar, data, len),
3529b57f88fSRajkumar Manoharan 
3539b57f88fSRajkumar Manoharan 	TP_STRUCT__entry(
3549b57f88fSRajkumar Manoharan 		__string(device, dev_name(ar->dev))
3559b57f88fSRajkumar Manoharan 		__string(driver, dev_driver_string(ar->dev))
3569b57f88fSRajkumar Manoharan 		__field(size_t, len)
35736d8230bSMichal Kazior 		__dynamic_array(u8, data, ath10k_frm_hdr_len(data, len))
3589b57f88fSRajkumar Manoharan 	),
3599b57f88fSRajkumar Manoharan 
3609b57f88fSRajkumar Manoharan 	TP_fast_assign(
3619b57f88fSRajkumar Manoharan 		__assign_str(device, dev_name(ar->dev));
3629b57f88fSRajkumar Manoharan 		__assign_str(driver, dev_driver_string(ar->dev));
36336d8230bSMichal Kazior 		__entry->len = ath10k_frm_hdr_len(data, len);
3645ce8e7fdSRajkumar Manoharan 		memcpy(__get_dynamic_array(data), data, __entry->len);
3659b57f88fSRajkumar Manoharan 	),
3669b57f88fSRajkumar Manoharan 
3679b57f88fSRajkumar Manoharan 	TP_printk(
3689b57f88fSRajkumar Manoharan 		"%s %s len %zu\n",
3699b57f88fSRajkumar Manoharan 		__get_str(driver),
3709b57f88fSRajkumar Manoharan 		__get_str(device),
3719b57f88fSRajkumar Manoharan 		__entry->len
3729b57f88fSRajkumar Manoharan 	)
3739b57f88fSRajkumar Manoharan );
3749b57f88fSRajkumar Manoharan 
3755ce8e7fdSRajkumar Manoharan DECLARE_EVENT_CLASS(ath10k_payload_event,
376b22a8f49SMichal Kazior 		    TP_PROTO(struct ath10k *ar, const void *data, size_t len),
3775ce8e7fdSRajkumar Manoharan 
3785ce8e7fdSRajkumar Manoharan 	TP_ARGS(ar, data, len),
3795ce8e7fdSRajkumar Manoharan 
3805ce8e7fdSRajkumar Manoharan 	TP_STRUCT__entry(
3815ce8e7fdSRajkumar Manoharan 		__string(device, dev_name(ar->dev))
3825ce8e7fdSRajkumar Manoharan 		__string(driver, dev_driver_string(ar->dev))
3835ce8e7fdSRajkumar Manoharan 		__field(size_t, len)
38436d8230bSMichal Kazior 		__dynamic_array(u8, payload, (len -
38536d8230bSMichal Kazior 					      ath10k_frm_hdr_len(data, len)))
3865ce8e7fdSRajkumar Manoharan 	),
3875ce8e7fdSRajkumar Manoharan 
3885ce8e7fdSRajkumar Manoharan 	TP_fast_assign(
3895ce8e7fdSRajkumar Manoharan 		__assign_str(device, dev_name(ar->dev));
3905ce8e7fdSRajkumar Manoharan 		__assign_str(driver, dev_driver_string(ar->dev));
39136d8230bSMichal Kazior 		__entry->len = len - ath10k_frm_hdr_len(data, len);
3925ce8e7fdSRajkumar Manoharan 		memcpy(__get_dynamic_array(payload),
39336d8230bSMichal Kazior 		       data + ath10k_frm_hdr_len(data, len), __entry->len);
3945ce8e7fdSRajkumar Manoharan 	),
3955ce8e7fdSRajkumar Manoharan 
3965ce8e7fdSRajkumar Manoharan 	TP_printk(
3975ce8e7fdSRajkumar Manoharan 		"%s %s len %zu\n",
3985ce8e7fdSRajkumar Manoharan 		__get_str(driver),
3995ce8e7fdSRajkumar Manoharan 		__get_str(device),
4005ce8e7fdSRajkumar Manoharan 		__entry->len
4015ce8e7fdSRajkumar Manoharan 	)
4025ce8e7fdSRajkumar Manoharan );
4035ce8e7fdSRajkumar Manoharan 
4045ce8e7fdSRajkumar Manoharan DEFINE_EVENT(ath10k_hdr_event, ath10k_tx_hdr,
405b22a8f49SMichal Kazior 	     TP_PROTO(struct ath10k *ar, const void *data, size_t len),
4069b57f88fSRajkumar Manoharan 	     TP_ARGS(ar, data, len)
4079b57f88fSRajkumar Manoharan );
4089b57f88fSRajkumar Manoharan 
4095ce8e7fdSRajkumar Manoharan DEFINE_EVENT(ath10k_payload_event, ath10k_tx_payload,
410b22a8f49SMichal Kazior 	     TP_PROTO(struct ath10k *ar, const void *data, size_t len),
4119b57f88fSRajkumar Manoharan 	     TP_ARGS(ar, data, len)
4129b57f88fSRajkumar Manoharan );
4139b57f88fSRajkumar Manoharan 
4145ce8e7fdSRajkumar Manoharan DEFINE_EVENT(ath10k_hdr_event, ath10k_rx_hdr,
415b22a8f49SMichal Kazior 	     TP_PROTO(struct ath10k *ar, const void *data, size_t len),
4169b57f88fSRajkumar Manoharan 	     TP_ARGS(ar, data, len)
4179b57f88fSRajkumar Manoharan );
4189b57f88fSRajkumar Manoharan 
4195ce8e7fdSRajkumar Manoharan DEFINE_EVENT(ath10k_payload_event, ath10k_rx_payload,
420b22a8f49SMichal Kazior 	     TP_PROTO(struct ath10k *ar, const void *data, size_t len),
4219b57f88fSRajkumar Manoharan 	     TP_ARGS(ar, data, len)
4229b57f88fSRajkumar Manoharan );
423a5d85f60SMichal Kazior 
4245ce8e7fdSRajkumar Manoharan TRACE_EVENT(ath10k_htt_rx_desc,
425b22a8f49SMichal Kazior 	    TP_PROTO(struct ath10k *ar, const void *data, size_t len),
4265ce8e7fdSRajkumar Manoharan 
4275ce8e7fdSRajkumar Manoharan 	TP_ARGS(ar, data, len),
4285ce8e7fdSRajkumar Manoharan 
4295ce8e7fdSRajkumar Manoharan 	TP_STRUCT__entry(
4305ce8e7fdSRajkumar Manoharan 		__string(device, dev_name(ar->dev))
4315ce8e7fdSRajkumar Manoharan 		__string(driver, dev_driver_string(ar->dev))
43204ae87a5SPeter Zijlstra 		__field(u8, hw_type)
4335ce8e7fdSRajkumar Manoharan 		__field(u16, len)
4345ce8e7fdSRajkumar Manoharan 		__dynamic_array(u8, rxdesc, len)
4355ce8e7fdSRajkumar Manoharan 	),
4365ce8e7fdSRajkumar Manoharan 
4375ce8e7fdSRajkumar Manoharan 	TP_fast_assign(
4385ce8e7fdSRajkumar Manoharan 		__assign_str(device, dev_name(ar->dev));
4395ce8e7fdSRajkumar Manoharan 		__assign_str(driver, dev_driver_string(ar->dev));
44018353749SAshok Raj Nagarajan 		__entry->hw_type = ar->hw_rev;
4415ce8e7fdSRajkumar Manoharan 		__entry->len = len;
4425ce8e7fdSRajkumar Manoharan 		memcpy(__get_dynamic_array(rxdesc), data, len);
4435ce8e7fdSRajkumar Manoharan 	),
4445ce8e7fdSRajkumar Manoharan 
4455ce8e7fdSRajkumar Manoharan 	TP_printk(
44618353749SAshok Raj Nagarajan 		"%s %s %d rxdesc len %d",
4475ce8e7fdSRajkumar Manoharan 		__get_str(driver),
4485ce8e7fdSRajkumar Manoharan 		__get_str(device),
44918353749SAshok Raj Nagarajan 		__entry->hw_type,
4505ce8e7fdSRajkumar Manoharan 		__entry->len
4515ce8e7fdSRajkumar Manoharan 	 )
452a5d85f60SMichal Kazior );
4535ce8e7fdSRajkumar Manoharan 
45404de6c6cSMichal Kazior TRACE_EVENT(ath10k_wmi_diag_container,
45504de6c6cSMichal Kazior 	    TP_PROTO(struct ath10k *ar,
45604de6c6cSMichal Kazior 		     u8 type,
45704de6c6cSMichal Kazior 		     u32 timestamp,
45804de6c6cSMichal Kazior 		     u32 code,
45904de6c6cSMichal Kazior 		     u16 len,
46004de6c6cSMichal Kazior 		     const void *data),
46104de6c6cSMichal Kazior 
46204de6c6cSMichal Kazior 	TP_ARGS(ar, type, timestamp, code, len, data),
46304de6c6cSMichal Kazior 
46404de6c6cSMichal Kazior 	TP_STRUCT__entry(
46504de6c6cSMichal Kazior 		__string(device, dev_name(ar->dev))
46604de6c6cSMichal Kazior 		__string(driver, dev_driver_string(ar->dev))
46704de6c6cSMichal Kazior 		__field(u8, type)
46804de6c6cSMichal Kazior 		__field(u32, timestamp)
46904de6c6cSMichal Kazior 		__field(u32, code)
47004de6c6cSMichal Kazior 		__field(u16, len)
47104de6c6cSMichal Kazior 		__dynamic_array(u8, data, len)
47204de6c6cSMichal Kazior 	),
47304de6c6cSMichal Kazior 
47404de6c6cSMichal Kazior 	TP_fast_assign(
47504de6c6cSMichal Kazior 		__assign_str(device, dev_name(ar->dev));
47604de6c6cSMichal Kazior 		__assign_str(driver, dev_driver_string(ar->dev));
47704de6c6cSMichal Kazior 		__entry->type = type;
47804de6c6cSMichal Kazior 		__entry->timestamp = timestamp;
47904de6c6cSMichal Kazior 		__entry->code = code;
48004de6c6cSMichal Kazior 		__entry->len = len;
48104de6c6cSMichal Kazior 		memcpy(__get_dynamic_array(data), data, len);
48204de6c6cSMichal Kazior 	),
48304de6c6cSMichal Kazior 
48404de6c6cSMichal Kazior 	TP_printk(
485779750bbSTom Rix 		"%s %s diag container type %u timestamp %u code %u len %d",
48604de6c6cSMichal Kazior 		__get_str(driver),
48704de6c6cSMichal Kazior 		__get_str(device),
48804de6c6cSMichal Kazior 		__entry->type,
48904de6c6cSMichal Kazior 		__entry->timestamp,
49004de6c6cSMichal Kazior 		__entry->code,
49104de6c6cSMichal Kazior 		__entry->len
49204de6c6cSMichal Kazior 	)
49304de6c6cSMichal Kazior );
49404de6c6cSMichal Kazior 
495c3113c39SMichal Kazior TRACE_EVENT(ath10k_wmi_diag,
496c3113c39SMichal Kazior 	    TP_PROTO(struct ath10k *ar, const void *data, size_t len),
497c3113c39SMichal Kazior 
498c3113c39SMichal Kazior 	TP_ARGS(ar, data, len),
499c3113c39SMichal Kazior 
500c3113c39SMichal Kazior 	TP_STRUCT__entry(
501c3113c39SMichal Kazior 		__string(device, dev_name(ar->dev))
502c3113c39SMichal Kazior 		__string(driver, dev_driver_string(ar->dev))
503c3113c39SMichal Kazior 		__field(u16, len)
504c3113c39SMichal Kazior 		__dynamic_array(u8, data, len)
505c3113c39SMichal Kazior 	),
506c3113c39SMichal Kazior 
507c3113c39SMichal Kazior 	TP_fast_assign(
508c3113c39SMichal Kazior 		__assign_str(device, dev_name(ar->dev));
509c3113c39SMichal Kazior 		__assign_str(driver, dev_driver_string(ar->dev));
510c3113c39SMichal Kazior 		__entry->len = len;
511c3113c39SMichal Kazior 		memcpy(__get_dynamic_array(data), data, len);
512c3113c39SMichal Kazior 	),
513c3113c39SMichal Kazior 
514c3113c39SMichal Kazior 	TP_printk(
515c3113c39SMichal Kazior 		"%s %s tlv diag len %d",
516c3113c39SMichal Kazior 		__get_str(driver),
517c3113c39SMichal Kazior 		__get_str(device),
518c3113c39SMichal Kazior 		__entry->len
519c3113c39SMichal Kazior 	)
520c3113c39SMichal Kazior );
521c3113c39SMichal Kazior 
5225e3dd157SKalle Valo #endif /* _TRACE_H_ || TRACE_HEADER_MULTI_READ*/
5235e3dd157SKalle Valo 
5245e3dd157SKalle Valo /* we don't want to use include/trace/events */
5255e3dd157SKalle Valo #undef TRACE_INCLUDE_PATH
5265e3dd157SKalle Valo #define TRACE_INCLUDE_PATH .
5275e3dd157SKalle Valo #undef TRACE_INCLUDE_FILE
5285e3dd157SKalle Valo #define TRACE_INCLUDE_FILE trace
5295e3dd157SKalle Valo 
5305e3dd157SKalle Valo /* This part must be outside protection */
5315e3dd157SKalle Valo #include <trace/define_trace.h>
532