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