Linux Audio

Check our new training course

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