Linux Audio

Check our new training course

Loading...
v5.9
  1/* SPDX-License-Identifier: ISC */
  2#if !defined(_ATH6KL_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
  3
  4#include <net/cfg80211.h>
  5#include <linux/skbuff.h>
  6#include <linux/tracepoint.h>
  7#include "wmi.h"
  8#include "hif.h"
  9
 10#if !defined(_ATH6KL_TRACE_H)
 11static inline unsigned int ath6kl_get_wmi_id(void *buf, size_t buf_len)
 12{
 13	struct wmi_cmd_hdr *hdr = buf;
 14
 15	if (buf_len < sizeof(*hdr))
 16		return 0;
 17
 18	return le16_to_cpu(hdr->cmd_id);
 19}
 20#endif /* __ATH6KL_TRACE_H */
 21
 22#define _ATH6KL_TRACE_H
 23
 24/* create empty functions when tracing is disabled */
 25#if !defined(CONFIG_ATH6KL_TRACING)
 26#undef TRACE_EVENT
 27#define TRACE_EVENT(name, proto, ...) \
 28static inline void trace_ ## name(proto) {}
 29#undef DECLARE_EVENT_CLASS
 30#define DECLARE_EVENT_CLASS(...)
 31#undef DEFINE_EVENT
 32#define DEFINE_EVENT(evt_class, name, proto, ...) \
 33static inline void trace_ ## name(proto) {}
 34#endif /* !CONFIG_ATH6KL_TRACING || __CHECKER__ */
 35
 36#undef TRACE_SYSTEM
 37#define TRACE_SYSTEM ath6kl
 38
 39TRACE_EVENT(ath6kl_wmi_cmd,
 40	TP_PROTO(void *buf, size_t buf_len),
 41
 42	TP_ARGS(buf, buf_len),
 43
 44	TP_STRUCT__entry(
 45		__field(unsigned int, id)
 46		__field(size_t, buf_len)
 47		__dynamic_array(u8, buf, buf_len)
 48	),
 49
 50	TP_fast_assign(
 51		__entry->id = ath6kl_get_wmi_id(buf, buf_len);
 52		__entry->buf_len = buf_len;
 53		memcpy(__get_dynamic_array(buf), buf, buf_len);
 54	),
 55
 56	TP_printk(
 57		"id %d len %zd",
 58		__entry->id, __entry->buf_len
 59	)
 60);
 61
 62TRACE_EVENT(ath6kl_wmi_event,
 63	TP_PROTO(void *buf, size_t buf_len),
 64
 65	TP_ARGS(buf, buf_len),
 66
 67	TP_STRUCT__entry(
 68		__field(unsigned int, id)
 69		__field(size_t, buf_len)
 70		__dynamic_array(u8, buf, buf_len)
 71	),
 72
 73	TP_fast_assign(
 74		__entry->id = ath6kl_get_wmi_id(buf, buf_len);
 75		__entry->buf_len = buf_len;
 76		memcpy(__get_dynamic_array(buf), buf, buf_len);
 77	),
 78
 79	TP_printk(
 80		"id %d len %zd",
 81		__entry->id, __entry->buf_len
 82	)
 83);
 84
 85TRACE_EVENT(ath6kl_sdio,
 86	TP_PROTO(unsigned int addr, int flags,
 87		 void *buf, size_t buf_len),
 88
 89	TP_ARGS(addr, flags, buf, buf_len),
 90
 91	TP_STRUCT__entry(
 92		__field(unsigned int, tx)
 93		__field(unsigned int, addr)
 94		__field(int, flags)
 95		__field(size_t, buf_len)
 96		__dynamic_array(u8, buf, buf_len)
 97	),
 98
 99	TP_fast_assign(
100		__entry->addr = addr;
101		__entry->flags = flags;
102		__entry->buf_len = buf_len;
103		memcpy(__get_dynamic_array(buf), buf, buf_len);
104
105		if (flags & HIF_WRITE)
106			__entry->tx = 1;
107		else
108			__entry->tx = 0;
109	),
110
111	TP_printk(
112		"%s addr 0x%x flags 0x%x len %zd\n",
113		__entry->tx ? "tx" : "rx",
114		__entry->addr,
115		__entry->flags,
116		__entry->buf_len
117	)
118);
119
120TRACE_EVENT(ath6kl_sdio_scat,
121	TP_PROTO(unsigned int addr, int flags, unsigned int total_len,
122		 unsigned int entries, struct hif_scatter_item *list),
123
124	TP_ARGS(addr, flags, total_len, entries, list),
125
126	TP_STRUCT__entry(
127		__field(unsigned int, tx)
128		__field(unsigned int, addr)
129		__field(int, flags)
130		__field(unsigned int, entries)
131		__field(size_t, total_len)
132		__dynamic_array(unsigned int, len_array, entries)
133		__dynamic_array(u8, data, total_len)
134	),
135
136	TP_fast_assign(
137		unsigned int *len_array;
138		int i, offset = 0;
139		size_t len;
140
141		__entry->addr = addr;
142		__entry->flags = flags;
143		__entry->entries = entries;
144		__entry->total_len = total_len;
145
146		if (flags & HIF_WRITE)
147			__entry->tx = 1;
148		else
149			__entry->tx = 0;
150
151		len_array = __get_dynamic_array(len_array);
152
153		for (i = 0; i < entries; i++) {
154			len = list[i].len;
155
156			memcpy((u8 *) __get_dynamic_array(data) + offset,
157			       list[i].buf, len);
158
159			len_array[i] = len;
160			offset += len;
161		}
162	),
163
164	TP_printk(
165		"%s addr 0x%x flags 0x%x entries %d total_len %zd\n",
166		__entry->tx ? "tx" : "rx",
167		__entry->addr,
168		__entry->flags,
169		__entry->entries,
170		__entry->total_len
171	)
172);
173
174TRACE_EVENT(ath6kl_sdio_irq,
175	TP_PROTO(void *buf, size_t buf_len),
176
177	TP_ARGS(buf, buf_len),
178
179	TP_STRUCT__entry(
180		__field(size_t, buf_len)
181		__dynamic_array(u8, buf, buf_len)
182	),
183
184	TP_fast_assign(
185		__entry->buf_len = buf_len;
186		memcpy(__get_dynamic_array(buf), buf, buf_len);
187	),
188
189	TP_printk(
190		"irq len %zd\n", __entry->buf_len
191	)
192);
193
194TRACE_EVENT(ath6kl_htc_rx,
195	TP_PROTO(int status, int endpoint, void *buf,
196		 size_t buf_len),
197
198	TP_ARGS(status, endpoint, buf, buf_len),
199
200	TP_STRUCT__entry(
201		__field(int, status)
202		__field(int, endpoint)
203		__field(size_t, buf_len)
204		__dynamic_array(u8, buf, buf_len)
205	),
206
207	TP_fast_assign(
208		__entry->status = status;
209		__entry->endpoint = endpoint;
210		__entry->buf_len = buf_len;
211		memcpy(__get_dynamic_array(buf), buf, buf_len);
212	),
213
214	TP_printk(
215		"status %d endpoint %d len %zd\n",
216		__entry->status,
217		__entry->endpoint,
218		__entry->buf_len
219	)
220);
221
222TRACE_EVENT(ath6kl_htc_tx,
223	TP_PROTO(int status, int endpoint, void *buf,
224		 size_t buf_len),
225
226	TP_ARGS(status, endpoint, buf, buf_len),
227
228	TP_STRUCT__entry(
229		__field(int, status)
230		__field(int, endpoint)
231		__field(size_t, buf_len)
232		__dynamic_array(u8, buf, buf_len)
233	),
234
235	TP_fast_assign(
236		__entry->status = status;
237		__entry->endpoint = endpoint;
238		__entry->buf_len = buf_len;
239		memcpy(__get_dynamic_array(buf), buf, buf_len);
240	),
241
242	TP_printk(
243		"status %d endpoint %d len %zd\n",
244		__entry->status,
245		__entry->endpoint,
246		__entry->buf_len
247	)
248);
249
250#define ATH6KL_MSG_MAX 200
251
252DECLARE_EVENT_CLASS(ath6kl_log_event,
253	TP_PROTO(struct va_format *vaf),
254	TP_ARGS(vaf),
255	TP_STRUCT__entry(
256		__dynamic_array(char, msg, ATH6KL_MSG_MAX)
257	),
258	TP_fast_assign(
259		WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg),
260				       ATH6KL_MSG_MAX,
261				       vaf->fmt,
262				       *vaf->va) >= ATH6KL_MSG_MAX);
263	),
264	TP_printk("%s", __get_str(msg))
265);
266
267DEFINE_EVENT(ath6kl_log_event, ath6kl_log_err,
268	     TP_PROTO(struct va_format *vaf),
269	     TP_ARGS(vaf)
270);
271
272DEFINE_EVENT(ath6kl_log_event, ath6kl_log_warn,
273	     TP_PROTO(struct va_format *vaf),
274	     TP_ARGS(vaf)
275);
276
277DEFINE_EVENT(ath6kl_log_event, ath6kl_log_info,
278	     TP_PROTO(struct va_format *vaf),
279	     TP_ARGS(vaf)
280);
281
282TRACE_EVENT(ath6kl_log_dbg,
283	TP_PROTO(unsigned int level, struct va_format *vaf),
284	TP_ARGS(level, vaf),
285	TP_STRUCT__entry(
286		__field(unsigned int, level)
287		__dynamic_array(char, msg, ATH6KL_MSG_MAX)
288	),
289	TP_fast_assign(
290		__entry->level = level;
291		WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg),
292				       ATH6KL_MSG_MAX,
293				       vaf->fmt,
294				       *vaf->va) >= ATH6KL_MSG_MAX);
295	),
296	TP_printk("%s", __get_str(msg))
297);
298
299TRACE_EVENT(ath6kl_log_dbg_dump,
300	TP_PROTO(const char *msg, const char *prefix,
301		 const void *buf, size_t buf_len),
302
303	TP_ARGS(msg, prefix, buf, buf_len),
304
305	TP_STRUCT__entry(
306		__string(msg, msg)
307		__string(prefix, prefix)
308		__field(size_t, buf_len)
309		__dynamic_array(u8, buf, buf_len)
310	),
311
312	TP_fast_assign(
313		__assign_str(msg, msg);
314		__assign_str(prefix, prefix);
315		__entry->buf_len = buf_len;
316		memcpy(__get_dynamic_array(buf), buf, buf_len);
317	),
318
319	TP_printk(
320		"%s/%s\n", __get_str(prefix), __get_str(msg)
321	)
322);
323
324#endif /* _ ATH6KL_TRACE_H || TRACE_HEADER_MULTI_READ*/
325
326/* we don't want to use include/trace/events */
327#undef TRACE_INCLUDE_PATH
328#define TRACE_INCLUDE_PATH .
329#undef TRACE_INCLUDE_FILE
330#define TRACE_INCLUDE_FILE trace
331
332/* This part must be outside protection */
333#include <trace/define_trace.h>
v6.9.4
  1/* SPDX-License-Identifier: ISC */
  2#if !defined(_ATH6KL_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
  3
  4#include <net/cfg80211.h>
  5#include <linux/skbuff.h>
  6#include <linux/tracepoint.h>
  7#include "wmi.h"
  8#include "hif.h"
  9
 10#if !defined(_ATH6KL_TRACE_H)
 11static inline unsigned int ath6kl_get_wmi_id(void *buf, size_t buf_len)
 12{
 13	struct wmi_cmd_hdr *hdr = buf;
 14
 15	if (buf_len < sizeof(*hdr))
 16		return 0;
 17
 18	return le16_to_cpu(hdr->cmd_id);
 19}
 20#endif /* __ATH6KL_TRACE_H */
 21
 22#define _ATH6KL_TRACE_H
 23
 24/* create empty functions when tracing is disabled */
 25#if !defined(CONFIG_ATH6KL_TRACING)
 26#undef TRACE_EVENT
 27#define TRACE_EVENT(name, proto, ...) \
 28static inline void trace_ ## name(proto) {}
 29#undef DECLARE_EVENT_CLASS
 30#define DECLARE_EVENT_CLASS(...)
 31#undef DEFINE_EVENT
 32#define DEFINE_EVENT(evt_class, name, proto, ...) \
 33static inline void trace_ ## name(proto) {}
 34#endif /* !CONFIG_ATH6KL_TRACING || __CHECKER__ */
 35
 36#undef TRACE_SYSTEM
 37#define TRACE_SYSTEM ath6kl
 38
 39TRACE_EVENT(ath6kl_wmi_cmd,
 40	TP_PROTO(void *buf, size_t buf_len),
 41
 42	TP_ARGS(buf, buf_len),
 43
 44	TP_STRUCT__entry(
 45		__field(unsigned int, id)
 46		__field(size_t, buf_len)
 47		__dynamic_array(u8, buf, buf_len)
 48	),
 49
 50	TP_fast_assign(
 51		__entry->id = ath6kl_get_wmi_id(buf, buf_len);
 52		__entry->buf_len = buf_len;
 53		memcpy(__get_dynamic_array(buf), buf, buf_len);
 54	),
 55
 56	TP_printk(
 57		"id %d len %zd",
 58		__entry->id, __entry->buf_len
 59	)
 60);
 61
 62TRACE_EVENT(ath6kl_wmi_event,
 63	TP_PROTO(void *buf, size_t buf_len),
 64
 65	TP_ARGS(buf, buf_len),
 66
 67	TP_STRUCT__entry(
 68		__field(unsigned int, id)
 69		__field(size_t, buf_len)
 70		__dynamic_array(u8, buf, buf_len)
 71	),
 72
 73	TP_fast_assign(
 74		__entry->id = ath6kl_get_wmi_id(buf, buf_len);
 75		__entry->buf_len = buf_len;
 76		memcpy(__get_dynamic_array(buf), buf, buf_len);
 77	),
 78
 79	TP_printk(
 80		"id %d len %zd",
 81		__entry->id, __entry->buf_len
 82	)
 83);
 84
 85TRACE_EVENT(ath6kl_sdio,
 86	TP_PROTO(unsigned int addr, int flags,
 87		 void *buf, size_t buf_len),
 88
 89	TP_ARGS(addr, flags, buf, buf_len),
 90
 91	TP_STRUCT__entry(
 92		__field(unsigned int, tx)
 93		__field(unsigned int, addr)
 94		__field(int, flags)
 95		__field(size_t, buf_len)
 96		__dynamic_array(u8, buf, buf_len)
 97	),
 98
 99	TP_fast_assign(
100		__entry->addr = addr;
101		__entry->flags = flags;
102		__entry->buf_len = buf_len;
103		memcpy(__get_dynamic_array(buf), buf, buf_len);
104
105		if (flags & HIF_WRITE)
106			__entry->tx = 1;
107		else
108			__entry->tx = 0;
109	),
110
111	TP_printk(
112		"%s addr 0x%x flags 0x%x len %zd\n",
113		__entry->tx ? "tx" : "rx",
114		__entry->addr,
115		__entry->flags,
116		__entry->buf_len
117	)
118);
119
120TRACE_EVENT(ath6kl_sdio_scat,
121	TP_PROTO(unsigned int addr, int flags, unsigned int total_len,
122		 unsigned int entries, struct hif_scatter_item *list),
123
124	TP_ARGS(addr, flags, total_len, entries, list),
125
126	TP_STRUCT__entry(
127		__field(unsigned int, tx)
128		__field(unsigned int, addr)
129		__field(int, flags)
130		__field(unsigned int, entries)
131		__field(size_t, total_len)
132		__dynamic_array(unsigned int, len_array, entries)
133		__dynamic_array(u8, data, total_len)
134	),
135
136	TP_fast_assign(
137		unsigned int *len_array;
138		int i, offset = 0;
139		size_t len;
140
141		__entry->addr = addr;
142		__entry->flags = flags;
143		__entry->entries = entries;
144		__entry->total_len = total_len;
145
146		if (flags & HIF_WRITE)
147			__entry->tx = 1;
148		else
149			__entry->tx = 0;
150
151		len_array = __get_dynamic_array(len_array);
152
153		for (i = 0; i < entries; i++) {
154			len = list[i].len;
155
156			memcpy((u8 *) __get_dynamic_array(data) + offset,
157			       list[i].buf, len);
158
159			len_array[i] = len;
160			offset += len;
161		}
162	),
163
164	TP_printk(
165		"%s addr 0x%x flags 0x%x entries %d total_len %zd\n",
166		__entry->tx ? "tx" : "rx",
167		__entry->addr,
168		__entry->flags,
169		__entry->entries,
170		__entry->total_len
171	)
172);
173
174TRACE_EVENT(ath6kl_sdio_irq,
175	TP_PROTO(void *buf, size_t buf_len),
176
177	TP_ARGS(buf, buf_len),
178
179	TP_STRUCT__entry(
180		__field(size_t, buf_len)
181		__dynamic_array(u8, buf, buf_len)
182	),
183
184	TP_fast_assign(
185		__entry->buf_len = buf_len;
186		memcpy(__get_dynamic_array(buf), buf, buf_len);
187	),
188
189	TP_printk(
190		"irq len %zd\n", __entry->buf_len
191	)
192);
193
194TRACE_EVENT(ath6kl_htc_rx,
195	TP_PROTO(int status, int endpoint, void *buf,
196		 size_t buf_len),
197
198	TP_ARGS(status, endpoint, buf, buf_len),
199
200	TP_STRUCT__entry(
201		__field(int, status)
202		__field(int, endpoint)
203		__field(size_t, buf_len)
204		__dynamic_array(u8, buf, buf_len)
205	),
206
207	TP_fast_assign(
208		__entry->status = status;
209		__entry->endpoint = endpoint;
210		__entry->buf_len = buf_len;
211		memcpy(__get_dynamic_array(buf), buf, buf_len);
212	),
213
214	TP_printk(
215		"status %d endpoint %d len %zd\n",
216		__entry->status,
217		__entry->endpoint,
218		__entry->buf_len
219	)
220);
221
222TRACE_EVENT(ath6kl_htc_tx,
223	TP_PROTO(int status, int endpoint, void *buf,
224		 size_t buf_len),
225
226	TP_ARGS(status, endpoint, buf, buf_len),
227
228	TP_STRUCT__entry(
229		__field(int, status)
230		__field(int, endpoint)
231		__field(size_t, buf_len)
232		__dynamic_array(u8, buf, buf_len)
233	),
234
235	TP_fast_assign(
236		__entry->status = status;
237		__entry->endpoint = endpoint;
238		__entry->buf_len = buf_len;
239		memcpy(__get_dynamic_array(buf), buf, buf_len);
240	),
241
242	TP_printk(
243		"status %d endpoint %d len %zd\n",
244		__entry->status,
245		__entry->endpoint,
246		__entry->buf_len
247	)
248);
249
250#define ATH6KL_MSG_MAX 200
251
252DECLARE_EVENT_CLASS(ath6kl_log_event,
253	TP_PROTO(struct va_format *vaf),
254	TP_ARGS(vaf),
255	TP_STRUCT__entry(
256		__vstring(msg, vaf->fmt, vaf->va)
257	),
258	TP_fast_assign(
259		__assign_vstr(msg, vaf->fmt, vaf->va);
 
 
 
260	),
261	TP_printk("%s", __get_str(msg))
262);
263
264DEFINE_EVENT(ath6kl_log_event, ath6kl_log_err,
265	     TP_PROTO(struct va_format *vaf),
266	     TP_ARGS(vaf)
267);
268
269DEFINE_EVENT(ath6kl_log_event, ath6kl_log_warn,
270	     TP_PROTO(struct va_format *vaf),
271	     TP_ARGS(vaf)
272);
273
274DEFINE_EVENT(ath6kl_log_event, ath6kl_log_info,
275	     TP_PROTO(struct va_format *vaf),
276	     TP_ARGS(vaf)
277);
278
279TRACE_EVENT(ath6kl_log_dbg,
280	TP_PROTO(unsigned int level, struct va_format *vaf),
281	TP_ARGS(level, vaf),
282	TP_STRUCT__entry(
283		__field(unsigned int, level)
284		__vstring(msg, vaf->fmt, vaf->va)
285	),
286	TP_fast_assign(
287		__entry->level = level;
288		__assign_vstr(msg, vaf->fmt, vaf->va);
 
 
 
289	),
290	TP_printk("%s", __get_str(msg))
291);
292
293TRACE_EVENT(ath6kl_log_dbg_dump,
294	TP_PROTO(const char *msg, const char *prefix,
295		 const void *buf, size_t buf_len),
296
297	TP_ARGS(msg, prefix, buf, buf_len),
298
299	TP_STRUCT__entry(
300		__string(msg, msg)
301		__string(prefix, prefix)
302		__field(size_t, buf_len)
303		__dynamic_array(u8, buf, buf_len)
304	),
305
306	TP_fast_assign(
307		__assign_str(msg, msg);
308		__assign_str(prefix, prefix);
309		__entry->buf_len = buf_len;
310		memcpy(__get_dynamic_array(buf), buf, buf_len);
311	),
312
313	TP_printk(
314		"%s/%s\n", __get_str(prefix), __get_str(msg)
315	)
316);
317
318#endif /* _ ATH6KL_TRACE_H || TRACE_HEADER_MULTI_READ*/
319
320/* we don't want to use include/trace/events */
321#undef TRACE_INCLUDE_PATH
322#define TRACE_INCLUDE_PATH .
323#undef TRACE_INCLUDE_FILE
324#define TRACE_INCLUDE_FILE trace
325
326/* This part must be outside protection */
327#include <trace/define_trace.h>