xref: /freebsd/sys/contrib/dev/athk/ath11k/trace.h (revision 28348caeee6ee98251b0aaa026e8d52b5032e92c)
1dd4f32aeSBjoern A. Zeeb /* SPDX-License-Identifier: BSD-3-Clause-Clear */
2dd4f32aeSBjoern A. Zeeb /*
3dd4f32aeSBjoern A. Zeeb  * Copyright (c) 2019 The Linux Foundation. All rights reserved.
4dd4f32aeSBjoern A. Zeeb  */
5dd4f32aeSBjoern A. Zeeb 
6dd4f32aeSBjoern A. Zeeb #if !defined(_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
7dd4f32aeSBjoern A. Zeeb 
8dd4f32aeSBjoern A. Zeeb #include <linux/tracepoint.h>
9dd4f32aeSBjoern A. Zeeb #include "core.h"
10dd4f32aeSBjoern A. Zeeb 
11dd4f32aeSBjoern A. Zeeb #define _TRACE_H_
12dd4f32aeSBjoern A. Zeeb 
13dd4f32aeSBjoern A. Zeeb /* create empty functions when tracing is disabled */
14dd4f32aeSBjoern A. Zeeb #if !defined(CONFIG_ATH11K_TRACING)
15dd4f32aeSBjoern A. Zeeb #undef TRACE_EVENT
16dd4f32aeSBjoern A. Zeeb #define TRACE_EVENT(name, proto, ...) \
17dd4f32aeSBjoern A. Zeeb static inline void trace_ ## name(proto) {} \
18dd4f32aeSBjoern A. Zeeb static inline bool trace_##name##_enabled(void) \
19dd4f32aeSBjoern A. Zeeb {						\
20dd4f32aeSBjoern A. Zeeb 	return false;				\
21dd4f32aeSBjoern A. Zeeb }
22dd4f32aeSBjoern A. Zeeb 
23dd4f32aeSBjoern A. Zeeb #undef DECLARE_EVENT_CLASS
24dd4f32aeSBjoern A. Zeeb #define DECLARE_EVENT_CLASS(...)
25dd4f32aeSBjoern A. Zeeb #undef DEFINE_EVENT
26dd4f32aeSBjoern A. Zeeb #define DEFINE_EVENT(evt_class, name, proto, ...) \
27dd4f32aeSBjoern A. Zeeb static inline void trace_ ## name(proto) {}
28dd4f32aeSBjoern A. Zeeb #endif /* !CONFIG_ATH11K_TRACING || __CHECKER__ */
29dd4f32aeSBjoern A. Zeeb 
30dd4f32aeSBjoern A. Zeeb #undef TRACE_SYSTEM
31dd4f32aeSBjoern A. Zeeb #define TRACE_SYSTEM ath11k
32dd4f32aeSBjoern A. Zeeb 
33dd4f32aeSBjoern A. Zeeb #define ATH11K_MSG_MAX 400
34dd4f32aeSBjoern A. Zeeb 
35dd4f32aeSBjoern A. Zeeb TRACE_EVENT(ath11k_htt_pktlog,
36dd4f32aeSBjoern A. Zeeb 	    TP_PROTO(struct ath11k *ar, const void *buf, u16 buf_len,
37dd4f32aeSBjoern A. Zeeb 		     u32 pktlog_checksum),
38dd4f32aeSBjoern A. Zeeb 
39dd4f32aeSBjoern A. Zeeb 	TP_ARGS(ar, buf, buf_len, pktlog_checksum),
40dd4f32aeSBjoern A. Zeeb 
41dd4f32aeSBjoern A. Zeeb 	TP_STRUCT__entry(
42dd4f32aeSBjoern A. Zeeb 		__string(device, dev_name(ar->ab->dev))
43dd4f32aeSBjoern A. Zeeb 		__string(driver, dev_driver_string(ar->ab->dev))
44dd4f32aeSBjoern A. Zeeb 		__field(u16, buf_len)
45dd4f32aeSBjoern A. Zeeb 		__field(u32, pktlog_checksum)
46dd4f32aeSBjoern A. Zeeb 		__dynamic_array(u8, pktlog, buf_len)
47dd4f32aeSBjoern A. Zeeb 	),
48dd4f32aeSBjoern A. Zeeb 
49dd4f32aeSBjoern A. Zeeb 	TP_fast_assign(
50dd4f32aeSBjoern A. Zeeb 		__assign_str(device, dev_name(ar->ab->dev));
51dd4f32aeSBjoern A. Zeeb 		__assign_str(driver, dev_driver_string(ar->ab->dev));
52dd4f32aeSBjoern A. Zeeb 		__entry->buf_len = buf_len;
53dd4f32aeSBjoern A. Zeeb 		__entry->pktlog_checksum = pktlog_checksum;
54dd4f32aeSBjoern A. Zeeb 		memcpy(__get_dynamic_array(pktlog), buf, buf_len);
55dd4f32aeSBjoern A. Zeeb 	),
56dd4f32aeSBjoern A. Zeeb 
57dd4f32aeSBjoern A. Zeeb 	TP_printk(
58dd4f32aeSBjoern A. Zeeb 		"%s %s size %u pktlog_checksum %d",
59dd4f32aeSBjoern A. Zeeb 		__get_str(driver),
60dd4f32aeSBjoern A. Zeeb 		__get_str(device),
61dd4f32aeSBjoern A. Zeeb 		__entry->buf_len,
62dd4f32aeSBjoern A. Zeeb 		__entry->pktlog_checksum
63dd4f32aeSBjoern A. Zeeb 	 )
64dd4f32aeSBjoern A. Zeeb );
65dd4f32aeSBjoern A. Zeeb 
66dd4f32aeSBjoern A. Zeeb TRACE_EVENT(ath11k_htt_ppdu_stats,
67dd4f32aeSBjoern A. Zeeb 	    TP_PROTO(struct ath11k *ar, const void *data, size_t len),
68dd4f32aeSBjoern A. Zeeb 
69dd4f32aeSBjoern A. Zeeb 	TP_ARGS(ar, data, len),
70dd4f32aeSBjoern A. Zeeb 
71dd4f32aeSBjoern A. Zeeb 	TP_STRUCT__entry(
72dd4f32aeSBjoern A. Zeeb 		__string(device, dev_name(ar->ab->dev))
73dd4f32aeSBjoern A. Zeeb 		__string(driver, dev_driver_string(ar->ab->dev))
74dd4f32aeSBjoern A. Zeeb 		__field(u16, len)
75dd4f32aeSBjoern A. Zeeb 		__dynamic_array(u8, ppdu, len)
76dd4f32aeSBjoern A. Zeeb 	),
77dd4f32aeSBjoern A. Zeeb 
78dd4f32aeSBjoern A. Zeeb 	TP_fast_assign(
79dd4f32aeSBjoern A. Zeeb 		__assign_str(device, dev_name(ar->ab->dev));
80dd4f32aeSBjoern A. Zeeb 		__assign_str(driver, dev_driver_string(ar->ab->dev));
81dd4f32aeSBjoern A. Zeeb 		__entry->len = len;
82dd4f32aeSBjoern A. Zeeb 		memcpy(__get_dynamic_array(ppdu), data, len);
83dd4f32aeSBjoern A. Zeeb 	),
84dd4f32aeSBjoern A. Zeeb 
85dd4f32aeSBjoern A. Zeeb 	TP_printk(
86dd4f32aeSBjoern A. Zeeb 		"%s %s ppdu len %d",
87dd4f32aeSBjoern A. Zeeb 		__get_str(driver),
88dd4f32aeSBjoern A. Zeeb 		__get_str(device),
89dd4f32aeSBjoern A. Zeeb 		__entry->len
90dd4f32aeSBjoern A. Zeeb 	 )
91dd4f32aeSBjoern A. Zeeb );
92dd4f32aeSBjoern A. Zeeb 
93dd4f32aeSBjoern A. Zeeb TRACE_EVENT(ath11k_htt_rxdesc,
94dd4f32aeSBjoern A. Zeeb 	    TP_PROTO(struct ath11k *ar, const void *data, size_t log_type, size_t len),
95dd4f32aeSBjoern A. Zeeb 
96dd4f32aeSBjoern A. Zeeb 	TP_ARGS(ar, data, log_type, len),
97dd4f32aeSBjoern A. Zeeb 
98dd4f32aeSBjoern A. Zeeb 	TP_STRUCT__entry(
99dd4f32aeSBjoern A. Zeeb 		__string(device, dev_name(ar->ab->dev))
100dd4f32aeSBjoern A. Zeeb 		__string(driver, dev_driver_string(ar->ab->dev))
101dd4f32aeSBjoern A. Zeeb 		__field(u16, len)
102dd4f32aeSBjoern A. Zeeb 		__field(u16, log_type)
103dd4f32aeSBjoern A. Zeeb 		__dynamic_array(u8, rxdesc, len)
104dd4f32aeSBjoern A. Zeeb 	),
105dd4f32aeSBjoern A. Zeeb 
106dd4f32aeSBjoern A. Zeeb 	TP_fast_assign(
107dd4f32aeSBjoern A. Zeeb 		__assign_str(device, dev_name(ar->ab->dev));
108dd4f32aeSBjoern A. Zeeb 		__assign_str(driver, dev_driver_string(ar->ab->dev));
109dd4f32aeSBjoern A. Zeeb 		__entry->len = len;
110dd4f32aeSBjoern A. Zeeb 		__entry->log_type = log_type;
111dd4f32aeSBjoern A. Zeeb 		memcpy(__get_dynamic_array(rxdesc), data, len);
112dd4f32aeSBjoern A. Zeeb 	),
113dd4f32aeSBjoern A. Zeeb 
114dd4f32aeSBjoern A. Zeeb 	TP_printk(
115dd4f32aeSBjoern A. Zeeb 		"%s %s rxdesc len %d type %d",
116dd4f32aeSBjoern A. Zeeb 		__get_str(driver),
117dd4f32aeSBjoern A. Zeeb 		__get_str(device),
118dd4f32aeSBjoern A. Zeeb 		__entry->len,
119dd4f32aeSBjoern A. Zeeb 		__entry->log_type
120dd4f32aeSBjoern A. Zeeb 	 )
121dd4f32aeSBjoern A. Zeeb );
122dd4f32aeSBjoern A. Zeeb 
123dd4f32aeSBjoern A. Zeeb DECLARE_EVENT_CLASS(ath11k_log_event,
124dd4f32aeSBjoern A. Zeeb 		    TP_PROTO(struct ath11k_base *ab, struct va_format *vaf),
125dd4f32aeSBjoern A. Zeeb 	TP_ARGS(ab, vaf),
126dd4f32aeSBjoern A. Zeeb 	TP_STRUCT__entry(
127dd4f32aeSBjoern A. Zeeb 		__string(device, dev_name(ab->dev))
128dd4f32aeSBjoern A. Zeeb 		__string(driver, dev_driver_string(ab->dev))
129*28348caeSBjoern A. Zeeb 		__vstring(msg, vaf->fmt, vaf->va)
130dd4f32aeSBjoern A. Zeeb 	),
131dd4f32aeSBjoern A. Zeeb 	TP_fast_assign(
132dd4f32aeSBjoern A. Zeeb 		__assign_str(device, dev_name(ab->dev));
133dd4f32aeSBjoern A. Zeeb 		__assign_str(driver, dev_driver_string(ab->dev));
134*28348caeSBjoern A. Zeeb 		__assign_vstr(msg, vaf->fmt, vaf->va);
135dd4f32aeSBjoern A. Zeeb 	),
136dd4f32aeSBjoern A. Zeeb 	TP_printk(
137dd4f32aeSBjoern A. Zeeb 		"%s %s %s",
138dd4f32aeSBjoern A. Zeeb 		__get_str(driver),
139dd4f32aeSBjoern A. Zeeb 		__get_str(device),
140dd4f32aeSBjoern A. Zeeb 		__get_str(msg)
141dd4f32aeSBjoern A. Zeeb 	)
142dd4f32aeSBjoern A. Zeeb );
143dd4f32aeSBjoern A. Zeeb 
144dd4f32aeSBjoern A. Zeeb DEFINE_EVENT(ath11k_log_event, ath11k_log_err,
145dd4f32aeSBjoern A. Zeeb 	     TP_PROTO(struct ath11k_base *ab, struct va_format *vaf),
146dd4f32aeSBjoern A. Zeeb 	     TP_ARGS(ab, vaf)
147dd4f32aeSBjoern A. Zeeb );
148dd4f32aeSBjoern A. Zeeb 
149dd4f32aeSBjoern A. Zeeb DEFINE_EVENT(ath11k_log_event, ath11k_log_warn,
150dd4f32aeSBjoern A. Zeeb 	     TP_PROTO(struct ath11k_base *ab, struct va_format *vaf),
151dd4f32aeSBjoern A. Zeeb 	     TP_ARGS(ab, vaf)
152dd4f32aeSBjoern A. Zeeb );
153dd4f32aeSBjoern A. Zeeb 
154dd4f32aeSBjoern A. Zeeb DEFINE_EVENT(ath11k_log_event, ath11k_log_info,
155dd4f32aeSBjoern A. Zeeb 	     TP_PROTO(struct ath11k_base *ab, struct va_format *vaf),
156dd4f32aeSBjoern A. Zeeb 	     TP_ARGS(ab, vaf)
157dd4f32aeSBjoern A. Zeeb );
158dd4f32aeSBjoern A. Zeeb 
159dd4f32aeSBjoern A. Zeeb TRACE_EVENT(ath11k_wmi_cmd,
160dd4f32aeSBjoern A. Zeeb 	    TP_PROTO(struct ath11k_base *ab, int id, const void *buf, size_t buf_len),
161dd4f32aeSBjoern A. Zeeb 
162dd4f32aeSBjoern A. Zeeb 	TP_ARGS(ab, id, buf, buf_len),
163dd4f32aeSBjoern A. Zeeb 
164dd4f32aeSBjoern A. Zeeb 	TP_STRUCT__entry(
165dd4f32aeSBjoern A. Zeeb 		__string(device, dev_name(ab->dev))
166dd4f32aeSBjoern A. Zeeb 		__string(driver, dev_driver_string(ab->dev))
167dd4f32aeSBjoern A. Zeeb 		__field(unsigned int, id)
168dd4f32aeSBjoern A. Zeeb 		__field(size_t, buf_len)
169dd4f32aeSBjoern A. Zeeb 		__dynamic_array(u8, buf, buf_len)
170dd4f32aeSBjoern A. Zeeb 	),
171dd4f32aeSBjoern A. Zeeb 
172dd4f32aeSBjoern A. Zeeb 	TP_fast_assign(
173dd4f32aeSBjoern A. Zeeb 		__assign_str(device, dev_name(ab->dev));
174dd4f32aeSBjoern A. Zeeb 		__assign_str(driver, dev_driver_string(ab->dev));
175dd4f32aeSBjoern A. Zeeb 		__entry->id = id;
176dd4f32aeSBjoern A. Zeeb 		__entry->buf_len = buf_len;
177dd4f32aeSBjoern A. Zeeb 		memcpy(__get_dynamic_array(buf), buf, buf_len);
178dd4f32aeSBjoern A. Zeeb 	),
179dd4f32aeSBjoern A. Zeeb 
180dd4f32aeSBjoern A. Zeeb 	TP_printk(
181dd4f32aeSBjoern A. Zeeb 		"%s %s id %d len %zu",
182dd4f32aeSBjoern A. Zeeb 		__get_str(driver),
183dd4f32aeSBjoern A. Zeeb 		__get_str(device),
184dd4f32aeSBjoern A. Zeeb 		__entry->id,
185dd4f32aeSBjoern A. Zeeb 		__entry->buf_len
186dd4f32aeSBjoern A. Zeeb 	 )
187dd4f32aeSBjoern A. Zeeb );
188dd4f32aeSBjoern A. Zeeb 
189dd4f32aeSBjoern A. Zeeb TRACE_EVENT(ath11k_wmi_event,
190dd4f32aeSBjoern A. Zeeb 	    TP_PROTO(struct ath11k_base *ab, int id, const void *buf, size_t buf_len),
191dd4f32aeSBjoern A. Zeeb 
192dd4f32aeSBjoern A. Zeeb 	TP_ARGS(ab, id, buf, buf_len),
193dd4f32aeSBjoern A. Zeeb 
194dd4f32aeSBjoern A. Zeeb 	TP_STRUCT__entry(
195dd4f32aeSBjoern A. Zeeb 		__string(device, dev_name(ab->dev))
196dd4f32aeSBjoern A. Zeeb 		__string(driver, dev_driver_string(ab->dev))
197dd4f32aeSBjoern A. Zeeb 		__field(unsigned int, id)
198dd4f32aeSBjoern A. Zeeb 		__field(size_t, buf_len)
199dd4f32aeSBjoern A. Zeeb 		__dynamic_array(u8, buf, buf_len)
200dd4f32aeSBjoern A. Zeeb 	),
201dd4f32aeSBjoern A. Zeeb 
202dd4f32aeSBjoern A. Zeeb 	TP_fast_assign(
203dd4f32aeSBjoern A. Zeeb 		__assign_str(device, dev_name(ab->dev));
204dd4f32aeSBjoern A. Zeeb 		__assign_str(driver, dev_driver_string(ab->dev));
205dd4f32aeSBjoern A. Zeeb 		__entry->id = id;
206dd4f32aeSBjoern A. Zeeb 		__entry->buf_len = buf_len;
207dd4f32aeSBjoern A. Zeeb 		memcpy(__get_dynamic_array(buf), buf, buf_len);
208dd4f32aeSBjoern A. Zeeb 	),
209dd4f32aeSBjoern A. Zeeb 
210dd4f32aeSBjoern A. Zeeb 	TP_printk(
211dd4f32aeSBjoern A. Zeeb 		"%s %s id %d len %zu",
212dd4f32aeSBjoern A. Zeeb 		__get_str(driver),
213dd4f32aeSBjoern A. Zeeb 		__get_str(device),
214dd4f32aeSBjoern A. Zeeb 		__entry->id,
215dd4f32aeSBjoern A. Zeeb 		__entry->buf_len
216dd4f32aeSBjoern A. Zeeb 	)
217dd4f32aeSBjoern A. Zeeb );
218dd4f32aeSBjoern A. Zeeb 
219dd4f32aeSBjoern A. Zeeb TRACE_EVENT(ath11k_log_dbg,
220dd4f32aeSBjoern A. Zeeb 	    TP_PROTO(struct ath11k_base *ab, unsigned int level, struct va_format *vaf),
221dd4f32aeSBjoern A. Zeeb 
222dd4f32aeSBjoern A. Zeeb 	TP_ARGS(ab, level, vaf),
223dd4f32aeSBjoern A. Zeeb 
224dd4f32aeSBjoern A. Zeeb 	TP_STRUCT__entry(
225dd4f32aeSBjoern A. Zeeb 		__string(device, dev_name(ab->dev))
226dd4f32aeSBjoern A. Zeeb 		__string(driver, dev_driver_string(ab->dev))
227dd4f32aeSBjoern A. Zeeb 		__field(unsigned int, level)
228dd4f32aeSBjoern A. Zeeb 		__dynamic_array(char, msg, ATH11K_MSG_MAX)
229dd4f32aeSBjoern A. Zeeb 	),
230dd4f32aeSBjoern A. Zeeb 
231dd4f32aeSBjoern A. Zeeb 	TP_fast_assign(
232dd4f32aeSBjoern A. Zeeb 		__assign_str(device, dev_name(ab->dev));
233dd4f32aeSBjoern A. Zeeb 		__assign_str(driver, dev_driver_string(ab->dev));
234dd4f32aeSBjoern A. Zeeb 		__entry->level = level;
235dd4f32aeSBjoern A. Zeeb 		WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg),
236dd4f32aeSBjoern A. Zeeb 				       ATH11K_MSG_MAX, vaf->fmt,
237dd4f32aeSBjoern A. Zeeb 				       *vaf->va) >= ATH11K_MSG_MAX);
238dd4f32aeSBjoern A. Zeeb 	),
239dd4f32aeSBjoern A. Zeeb 
240dd4f32aeSBjoern A. Zeeb 	TP_printk(
241dd4f32aeSBjoern A. Zeeb 		"%s %s %s",
242dd4f32aeSBjoern A. Zeeb 		__get_str(driver),
243dd4f32aeSBjoern A. Zeeb 		__get_str(device),
244dd4f32aeSBjoern A. Zeeb 		__get_str(msg)
245dd4f32aeSBjoern A. Zeeb 	)
246dd4f32aeSBjoern A. Zeeb );
247dd4f32aeSBjoern A. Zeeb 
248dd4f32aeSBjoern A. Zeeb TRACE_EVENT(ath11k_log_dbg_dump,
249dd4f32aeSBjoern A. Zeeb 	    TP_PROTO(struct ath11k_base *ab, const char *msg, const char *prefix,
250dd4f32aeSBjoern A. Zeeb 		     const void *buf, size_t buf_len),
251dd4f32aeSBjoern A. Zeeb 
252dd4f32aeSBjoern A. Zeeb 	TP_ARGS(ab, msg, prefix, buf, buf_len),
253dd4f32aeSBjoern A. Zeeb 
254dd4f32aeSBjoern A. Zeeb 	TP_STRUCT__entry(
255dd4f32aeSBjoern A. Zeeb 		__string(device, dev_name(ab->dev))
256dd4f32aeSBjoern A. Zeeb 		__string(driver, dev_driver_string(ab->dev))
257dd4f32aeSBjoern A. Zeeb 		__string(msg, msg)
258dd4f32aeSBjoern A. Zeeb 		__string(prefix, prefix)
259dd4f32aeSBjoern A. Zeeb 		__field(size_t, buf_len)
260dd4f32aeSBjoern A. Zeeb 		__dynamic_array(u8, buf, buf_len)
261dd4f32aeSBjoern A. Zeeb 	),
262dd4f32aeSBjoern A. Zeeb 
263dd4f32aeSBjoern A. Zeeb 	TP_fast_assign(
264dd4f32aeSBjoern A. Zeeb 		__assign_str(device, dev_name(ab->dev));
265dd4f32aeSBjoern A. Zeeb 		__assign_str(driver, dev_driver_string(ab->dev));
266dd4f32aeSBjoern A. Zeeb 		__assign_str(msg, msg);
267dd4f32aeSBjoern A. Zeeb 		__assign_str(prefix, prefix);
268dd4f32aeSBjoern A. Zeeb 		__entry->buf_len = buf_len;
269dd4f32aeSBjoern A. Zeeb 		memcpy(__get_dynamic_array(buf), buf, buf_len);
270dd4f32aeSBjoern A. Zeeb 	),
271dd4f32aeSBjoern A. Zeeb 
272dd4f32aeSBjoern A. Zeeb 	TP_printk(
273dd4f32aeSBjoern A. Zeeb 		"%s %s %s/%s\n",
274dd4f32aeSBjoern A. Zeeb 		__get_str(driver),
275dd4f32aeSBjoern A. Zeeb 		__get_str(device),
276dd4f32aeSBjoern A. Zeeb 		__get_str(prefix),
277dd4f32aeSBjoern A. Zeeb 		__get_str(msg)
278dd4f32aeSBjoern A. Zeeb 	)
279dd4f32aeSBjoern A. Zeeb );
280dd4f32aeSBjoern A. Zeeb 
281dd4f32aeSBjoern A. Zeeb TRACE_EVENT(ath11k_wmi_diag,
282dd4f32aeSBjoern A. Zeeb 	    TP_PROTO(struct ath11k_base *ab, const void *data, size_t len),
283dd4f32aeSBjoern A. Zeeb 
284dd4f32aeSBjoern A. Zeeb 	TP_ARGS(ab, data, len),
285dd4f32aeSBjoern A. Zeeb 
286dd4f32aeSBjoern A. Zeeb 	TP_STRUCT__entry(
287dd4f32aeSBjoern A. Zeeb 		__string(device, dev_name(ab->dev))
288dd4f32aeSBjoern A. Zeeb 		__string(driver, dev_driver_string(ab->dev))
289dd4f32aeSBjoern A. Zeeb 		__field(u16, len)
290dd4f32aeSBjoern A. Zeeb 		__dynamic_array(u8, data, len)
291dd4f32aeSBjoern A. Zeeb 	),
292dd4f32aeSBjoern A. Zeeb 
293dd4f32aeSBjoern A. Zeeb 	TP_fast_assign(
294dd4f32aeSBjoern A. Zeeb 		__assign_str(device, dev_name(ab->dev));
295dd4f32aeSBjoern A. Zeeb 		__assign_str(driver, dev_driver_string(ab->dev));
296dd4f32aeSBjoern A. Zeeb 		__entry->len = len;
297dd4f32aeSBjoern A. Zeeb 		memcpy(__get_dynamic_array(data), data, len);
298dd4f32aeSBjoern A. Zeeb 	),
299dd4f32aeSBjoern A. Zeeb 
300dd4f32aeSBjoern A. Zeeb 	TP_printk(
301dd4f32aeSBjoern A. Zeeb 		"%s %s tlv diag len %d",
302dd4f32aeSBjoern A. Zeeb 		__get_str(driver),
303dd4f32aeSBjoern A. Zeeb 		__get_str(device),
304dd4f32aeSBjoern A. Zeeb 		__entry->len
305dd4f32aeSBjoern A. Zeeb 	)
306dd4f32aeSBjoern A. Zeeb );
307dd4f32aeSBjoern A. Zeeb 
308*28348caeSBjoern A. Zeeb TRACE_EVENT(ath11k_ps_timekeeper,
309*28348caeSBjoern A. Zeeb 	    TP_PROTO(struct ath11k *ar, const void *peer_addr,
310*28348caeSBjoern A. Zeeb 		     u32 peer_ps_timestamp, u8 peer_ps_state),
311*28348caeSBjoern A. Zeeb 	TP_ARGS(ar, peer_addr, peer_ps_timestamp, peer_ps_state),
312*28348caeSBjoern A. Zeeb 
313*28348caeSBjoern A. Zeeb 	TP_STRUCT__entry(__string(device, dev_name(ar->ab->dev))
314*28348caeSBjoern A. Zeeb 			 __string(driver, dev_driver_string(ar->ab->dev))
315*28348caeSBjoern A. Zeeb 			 __dynamic_array(u8, peer_addr, ETH_ALEN)
316*28348caeSBjoern A. Zeeb 			 __field(u8, peer_ps_state)
317*28348caeSBjoern A. Zeeb 			 __field(u32, peer_ps_timestamp)
318*28348caeSBjoern A. Zeeb 	),
319*28348caeSBjoern A. Zeeb 
320*28348caeSBjoern A. Zeeb 	TP_fast_assign(__assign_str(device, dev_name(ar->ab->dev));
321*28348caeSBjoern A. Zeeb 		       __assign_str(driver, dev_driver_string(ar->ab->dev));
322*28348caeSBjoern A. Zeeb 		       memcpy(__get_dynamic_array(peer_addr), peer_addr,
323*28348caeSBjoern A. Zeeb 			      ETH_ALEN);
324*28348caeSBjoern A. Zeeb 		       __entry->peer_ps_state = peer_ps_state;
325*28348caeSBjoern A. Zeeb 		       __entry->peer_ps_timestamp = peer_ps_timestamp;
326*28348caeSBjoern A. Zeeb 	),
327*28348caeSBjoern A. Zeeb 
328*28348caeSBjoern A. Zeeb 	TP_printk("%s %s %u %u",
329*28348caeSBjoern A. Zeeb 		  __get_str(driver),
330*28348caeSBjoern A. Zeeb 		  __get_str(device),
331*28348caeSBjoern A. Zeeb 		  __entry->peer_ps_state,
332*28348caeSBjoern A. Zeeb 		  __entry->peer_ps_timestamp
333*28348caeSBjoern A. Zeeb 	)
334*28348caeSBjoern A. Zeeb );
335*28348caeSBjoern A. Zeeb 
336dd4f32aeSBjoern A. Zeeb #endif /* _TRACE_H_ || TRACE_HEADER_MULTI_READ*/
337dd4f32aeSBjoern A. Zeeb 
338dd4f32aeSBjoern A. Zeeb /* we don't want to use include/trace/events */
339dd4f32aeSBjoern A. Zeeb #undef TRACE_INCLUDE_PATH
340dd4f32aeSBjoern A. Zeeb #define TRACE_INCLUDE_PATH .
341dd4f32aeSBjoern A. Zeeb #undef TRACE_INCLUDE_FILE
342dd4f32aeSBjoern A. Zeeb #define TRACE_INCLUDE_FILE trace
343dd4f32aeSBjoern A. Zeeb 
344dd4f32aeSBjoern A. Zeeb /* This part must be outside protection */
345dd4f32aeSBjoern A. Zeeb #include <trace/define_trace.h>
346