GNU Linux-libre 5.19-rc6-gnu
[releases.git] / drivers / net / wireless / ath / ath10k / trace.h
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_)
13 static 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, ...) \
32 static inline void trace_ ## name(proto) {} \
33 static 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, ...) \
41 static 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
49 DECLARE_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
73 DEFINE_EVENT(ath10k_log_event, ath10k_log_err,
74              TP_PROTO(struct ath10k *ar, struct va_format *vaf),
75              TP_ARGS(ar, vaf)
76 );
77
78 DEFINE_EVENT(ath10k_log_event, ath10k_log_warn,
79              TP_PROTO(struct ath10k *ar, struct va_format *vaf),
80              TP_ARGS(ar, vaf)
81 );
82
83 DEFINE_EVENT(ath10k_log_event, ath10k_log_info,
84              TP_PROTO(struct ath10k *ar, struct va_format *vaf),
85              TP_ARGS(ar, vaf)
86 );
87
88 TRACE_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
114 TRACE_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
147 TRACE_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
177 TRACE_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
207 TRACE_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
234 TRACE_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
264 TRACE_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 %u",
287                 __get_str(driver),
288                 __get_str(device),
289                 __entry->hw_type,
290                 __entry->buf_len
291          )
292 );
293
294 TRACE_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
329 TRACE_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
354 DECLARE_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
381 DECLARE_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
410 DEFINE_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
415 DEFINE_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
420 DEFINE_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
425 DEFINE_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
430 TRACE_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
460 TRACE_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 %u 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
501 TRACE_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>