blob: ceea5668f3f6a0bc213bb8695ba6d1a95a743f64 [file] [log] [blame]
Kalle Valo5e3dd152013-06-12 20:52:10 +03001/*
2 * Copyright (c) 2005-2011 Atheros Communications Inc.
3 * Copyright (c) 2011-2013 Qualcomm Atheros, Inc.
4 *
5 * Permission to use, copy, modify, and/or distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 */
17
18#if !defined(_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
19
20#include <linux/tracepoint.h>
Michal Kaziord35a6c12014-09-02 11:00:21 +030021#include "core.h"
Kalle Valo5e3dd152013-06-12 20:52:10 +030022
Rajkumar Manoharan5ce8e7f2014-11-05 19:14:31 +053023#if !defined(_TRACE_H_)
24static inline u32 ath10k_frm_hdr_len(void *buf)
25{
26 return ieee80211_hdrlen(((struct ieee80211_hdr *)buf)->frame_control);
27}
28#endif
29
Kalle Valo5e3dd152013-06-12 20:52:10 +030030#define _TRACE_H_
31
32/* create empty functions when tracing is disabled */
33#if !defined(CONFIG_ATH10K_TRACING)
34#undef TRACE_EVENT
35#define TRACE_EVENT(name, proto, ...) \
36static inline void trace_ ## name(proto) {}
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 200
48
49DECLARE_EVENT_CLASS(ath10k_log_event,
Michal Kaziord35a6c12014-09-02 11:00:21 +030050 TP_PROTO(struct ath10k *ar, struct va_format *vaf),
51 TP_ARGS(ar, vaf),
Kalle Valo5e3dd152013-06-12 20:52:10 +030052 TP_STRUCT__entry(
Michal Kaziord35a6c12014-09-02 11:00:21 +030053 __string(device, dev_name(ar->dev))
54 __string(driver, dev_driver_string(ar->dev))
Kalle Valo5e3dd152013-06-12 20:52:10 +030055 __dynamic_array(char, msg, ATH10K_MSG_MAX)
56 ),
57 TP_fast_assign(
Michal Kaziord35a6c12014-09-02 11:00:21 +030058 __assign_str(device, dev_name(ar->dev));
59 __assign_str(driver, dev_driver_string(ar->dev));
Kalle Valo5e3dd152013-06-12 20:52:10 +030060 WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg),
61 ATH10K_MSG_MAX,
62 vaf->fmt,
63 *vaf->va) >= ATH10K_MSG_MAX);
64 ),
Michal Kaziord35a6c12014-09-02 11:00:21 +030065 TP_printk(
66 "%s %s %s",
67 __get_str(driver),
68 __get_str(device),
69 __get_str(msg)
70 )
Kalle Valo5e3dd152013-06-12 20:52:10 +030071);
72
73DEFINE_EVENT(ath10k_log_event, ath10k_log_err,
Michal Kaziord35a6c12014-09-02 11:00:21 +030074 TP_PROTO(struct ath10k *ar, struct va_format *vaf),
75 TP_ARGS(ar, vaf)
Kalle Valo5e3dd152013-06-12 20:52:10 +030076);
77
78DEFINE_EVENT(ath10k_log_event, ath10k_log_warn,
Michal Kaziord35a6c12014-09-02 11:00:21 +030079 TP_PROTO(struct ath10k *ar, struct va_format *vaf),
80 TP_ARGS(ar, vaf)
Kalle Valo5e3dd152013-06-12 20:52:10 +030081);
82
83DEFINE_EVENT(ath10k_log_event, ath10k_log_info,
Michal Kaziord35a6c12014-09-02 11:00:21 +030084 TP_PROTO(struct ath10k *ar, struct va_format *vaf),
85 TP_ARGS(ar, vaf)
Kalle Valo5e3dd152013-06-12 20:52:10 +030086);
87
88TRACE_EVENT(ath10k_log_dbg,
Michal Kaziord35a6c12014-09-02 11:00:21 +030089 TP_PROTO(struct ath10k *ar, unsigned int level, struct va_format *vaf),
90 TP_ARGS(ar, level, vaf),
Kalle Valo5e3dd152013-06-12 20:52:10 +030091 TP_STRUCT__entry(
Michal Kaziord35a6c12014-09-02 11:00:21 +030092 __string(device, dev_name(ar->dev))
93 __string(driver, dev_driver_string(ar->dev))
Kalle Valo5e3dd152013-06-12 20:52:10 +030094 __field(unsigned int, level)
95 __dynamic_array(char, msg, ATH10K_MSG_MAX)
96 ),
97 TP_fast_assign(
Michal Kaziord35a6c12014-09-02 11:00:21 +030098 __assign_str(device, dev_name(ar->dev));
99 __assign_str(driver, dev_driver_string(ar->dev));
Kalle Valo5e3dd152013-06-12 20:52:10 +0300100 __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 ),
Michal Kaziord35a6c12014-09-02 11:00:21 +0300106 TP_printk(
107 "%s %s %s",
108 __get_str(driver),
109 __get_str(device),
110 __get_str(msg)
111 )
Kalle Valo5e3dd152013-06-12 20:52:10 +0300112);
113
114TRACE_EVENT(ath10k_log_dbg_dump,
Michal Kaziord35a6c12014-09-02 11:00:21 +0300115 TP_PROTO(struct ath10k *ar, const char *msg, const char *prefix,
Kalle Valo5e3dd152013-06-12 20:52:10 +0300116 const void *buf, size_t buf_len),
117
Michal Kaziord35a6c12014-09-02 11:00:21 +0300118 TP_ARGS(ar, msg, prefix, buf, buf_len),
Kalle Valo5e3dd152013-06-12 20:52:10 +0300119
120 TP_STRUCT__entry(
Michal Kaziord35a6c12014-09-02 11:00:21 +0300121 __string(device, dev_name(ar->dev))
122 __string(driver, dev_driver_string(ar->dev))
Kalle Valo5e3dd152013-06-12 20:52:10 +0300123 __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(
Michal Kaziord35a6c12014-09-02 11:00:21 +0300130 __assign_str(device, dev_name(ar->dev));
131 __assign_str(driver, dev_driver_string(ar->dev));
Kalle Valo5e3dd152013-06-12 20:52:10 +0300132 __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(
Michal Kaziord35a6c12014-09-02 11:00:21 +0300139 "%s %s %s/%s\n",
140 __get_str(driver),
141 __get_str(device),
142 __get_str(prefix),
143 __get_str(msg)
Kalle Valo5e3dd152013-06-12 20:52:10 +0300144 )
145);
146
147TRACE_EVENT(ath10k_wmi_cmd,
Michal Kaziord35a6c12014-09-02 11:00:21 +0300148 TP_PROTO(struct ath10k *ar, int id, void *buf, size_t buf_len, int ret),
Kalle Valo5e3dd152013-06-12 20:52:10 +0300149
Michal Kaziord35a6c12014-09-02 11:00:21 +0300150 TP_ARGS(ar, id, buf, buf_len, ret),
Kalle Valo5e3dd152013-06-12 20:52:10 +0300151
152 TP_STRUCT__entry(
Michal Kaziord35a6c12014-09-02 11:00:21 +0300153 __string(device, dev_name(ar->dev))
154 __string(driver, dev_driver_string(ar->dev))
Kalle Valo5e3dd152013-06-12 20:52:10 +0300155 __field(unsigned int, id)
156 __field(size_t, buf_len)
157 __dynamic_array(u8, buf, buf_len)
Michal Kazior9e84f652013-09-19 09:44:09 +0200158 __field(int, ret)
Kalle Valo5e3dd152013-06-12 20:52:10 +0300159 ),
160
161 TP_fast_assign(
Michal Kaziord35a6c12014-09-02 11:00:21 +0300162 __assign_str(device, dev_name(ar->dev));
163 __assign_str(driver, dev_driver_string(ar->dev));
Kalle Valo5e3dd152013-06-12 20:52:10 +0300164 __entry->id = id;
165 __entry->buf_len = buf_len;
Michal Kaziorbe8b3942013-09-13 14:16:54 +0200166 __entry->ret = ret;
Kalle Valo5e3dd152013-06-12 20:52:10 +0300167 memcpy(__get_dynamic_array(buf), buf, buf_len);
168 ),
169
170 TP_printk(
Michal Kaziord35a6c12014-09-02 11:00:21 +0300171 "%s %s id %d len %zu ret %d",
172 __get_str(driver),
173 __get_str(device),
Kalle Valo5e3dd152013-06-12 20:52:10 +0300174 __entry->id,
Michal Kaziorbe8b3942013-09-13 14:16:54 +0200175 __entry->buf_len,
176 __entry->ret
Kalle Valo5e3dd152013-06-12 20:52:10 +0300177 )
178);
179
180TRACE_EVENT(ath10k_wmi_event,
Michal Kaziord35a6c12014-09-02 11:00:21 +0300181 TP_PROTO(struct ath10k *ar, int id, void *buf, size_t buf_len),
Kalle Valo5e3dd152013-06-12 20:52:10 +0300182
Michal Kaziord35a6c12014-09-02 11:00:21 +0300183 TP_ARGS(ar, id, buf, buf_len),
Kalle Valo5e3dd152013-06-12 20:52:10 +0300184
185 TP_STRUCT__entry(
Michal Kaziord35a6c12014-09-02 11:00:21 +0300186 __string(device, dev_name(ar->dev))
187 __string(driver, dev_driver_string(ar->dev))
Kalle Valo5e3dd152013-06-12 20:52:10 +0300188 __field(unsigned int, id)
189 __field(size_t, buf_len)
190 __dynamic_array(u8, buf, buf_len)
191 ),
192
193 TP_fast_assign(
Michal Kaziord35a6c12014-09-02 11:00:21 +0300194 __assign_str(device, dev_name(ar->dev));
195 __assign_str(driver, dev_driver_string(ar->dev));
Kalle Valo5e3dd152013-06-12 20:52:10 +0300196 __entry->id = id;
197 __entry->buf_len = buf_len;
198 memcpy(__get_dynamic_array(buf), buf, buf_len);
199 ),
200
201 TP_printk(
Michal Kaziord35a6c12014-09-02 11:00:21 +0300202 "%s %s id %d len %zu",
203 __get_str(driver),
204 __get_str(device),
Kalle Valo5e3dd152013-06-12 20:52:10 +0300205 __entry->id,
206 __entry->buf_len
207 )
208);
209
Kalle Valoa9bf0502013-09-03 11:43:55 +0300210TRACE_EVENT(ath10k_htt_stats,
Michal Kaziord35a6c12014-09-02 11:00:21 +0300211 TP_PROTO(struct ath10k *ar, void *buf, size_t buf_len),
Kalle Valoa9bf0502013-09-03 11:43:55 +0300212
Michal Kaziord35a6c12014-09-02 11:00:21 +0300213 TP_ARGS(ar, buf, buf_len),
Kalle Valoa9bf0502013-09-03 11:43:55 +0300214
215 TP_STRUCT__entry(
Michal Kaziord35a6c12014-09-02 11:00:21 +0300216 __string(device, dev_name(ar->dev))
217 __string(driver, dev_driver_string(ar->dev))
Kalle Valoa9bf0502013-09-03 11:43:55 +0300218 __field(size_t, buf_len)
219 __dynamic_array(u8, buf, buf_len)
220 ),
221
222 TP_fast_assign(
Michal Kaziord35a6c12014-09-02 11:00:21 +0300223 __assign_str(device, dev_name(ar->dev));
224 __assign_str(driver, dev_driver_string(ar->dev));
Kalle Valoa9bf0502013-09-03 11:43:55 +0300225 __entry->buf_len = buf_len;
226 memcpy(__get_dynamic_array(buf), buf, buf_len);
227 ),
228
229 TP_printk(
Michal Kaziord35a6c12014-09-02 11:00:21 +0300230 "%s %s len %zu",
231 __get_str(driver),
232 __get_str(device),
Kalle Valoa9bf0502013-09-03 11:43:55 +0300233 __entry->buf_len
234 )
235);
236
Kalle Valo869526b2014-01-03 12:59:26 +0200237TRACE_EVENT(ath10k_wmi_dbglog,
Michal Kaziord35a6c12014-09-02 11:00:21 +0300238 TP_PROTO(struct ath10k *ar, void *buf, size_t buf_len),
Kalle Valo869526b2014-01-03 12:59:26 +0200239
Michal Kaziord35a6c12014-09-02 11:00:21 +0300240 TP_ARGS(ar, buf, buf_len),
Kalle Valo869526b2014-01-03 12:59:26 +0200241
242 TP_STRUCT__entry(
Michal Kaziord35a6c12014-09-02 11:00:21 +0300243 __string(device, dev_name(ar->dev))
244 __string(driver, dev_driver_string(ar->dev))
Kalle Valo869526b2014-01-03 12:59:26 +0200245 __field(size_t, buf_len)
246 __dynamic_array(u8, buf, buf_len)
247 ),
248
249 TP_fast_assign(
Michal Kaziord35a6c12014-09-02 11:00:21 +0300250 __assign_str(device, dev_name(ar->dev));
251 __assign_str(driver, dev_driver_string(ar->dev));
Kalle Valo869526b2014-01-03 12:59:26 +0200252 __entry->buf_len = buf_len;
253 memcpy(__get_dynamic_array(buf), buf, buf_len);
254 ),
255
256 TP_printk(
Michal Kaziord35a6c12014-09-02 11:00:21 +0300257 "%s %s len %zu",
258 __get_str(driver),
259 __get_str(device),
Kalle Valo869526b2014-01-03 12:59:26 +0200260 __entry->buf_len
261 )
262);
263
Rajkumar Manoharanbfdd7932014-10-03 08:02:40 +0300264TRACE_EVENT(ath10k_htt_pktlog,
265 TP_PROTO(struct ath10k *ar, 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(u16, buf_len)
273 __dynamic_array(u8, pktlog, buf_len)
274 ),
275
276 TP_fast_assign(
277 __assign_str(device, dev_name(ar->dev));
278 __assign_str(driver, dev_driver_string(ar->dev));
279 __entry->buf_len = buf_len;
280 memcpy(__get_dynamic_array(pktlog), buf, buf_len);
281 ),
282
283 TP_printk(
284 "%s %s size %hu",
285 __get_str(driver),
286 __get_str(device),
287 __entry->buf_len
288 )
289);
290
Rajkumar Manoharand1e50f42014-10-03 08:02:54 +0300291TRACE_EVENT(ath10k_htt_tx,
292 TP_PROTO(struct ath10k *ar, u16 msdu_id, u16 msdu_len,
293 u8 vdev_id, u8 tid),
294
295 TP_ARGS(ar, msdu_id, msdu_len, vdev_id, tid),
296
297 TP_STRUCT__entry(
298 __string(device, dev_name(ar->dev))
299 __string(driver, dev_driver_string(ar->dev))
300 __field(u16, msdu_id)
301 __field(u16, msdu_len)
302 __field(u8, vdev_id)
303 __field(u8, tid)
304 ),
305
306 TP_fast_assign(
307 __assign_str(device, dev_name(ar->dev));
308 __assign_str(driver, dev_driver_string(ar->dev));
309 __entry->msdu_id = msdu_id;
310 __entry->msdu_len = msdu_len;
311 __entry->vdev_id = vdev_id;
312 __entry->tid = tid;
313 ),
314
315 TP_printk(
316 "%s %s msdu_id %d msdu_len %d vdev_id %d tid %d",
317 __get_str(driver),
318 __get_str(device),
319 __entry->msdu_id,
320 __entry->msdu_len,
321 __entry->vdev_id,
322 __entry->tid
323 )
324);
325
326TRACE_EVENT(ath10k_txrx_tx_unref,
327 TP_PROTO(struct ath10k *ar, u16 msdu_id),
328
329 TP_ARGS(ar, msdu_id),
330
331 TP_STRUCT__entry(
332 __string(device, dev_name(ar->dev))
333 __string(driver, dev_driver_string(ar->dev))
334 __field(u16, msdu_id)
335 ),
336
337 TP_fast_assign(
338 __assign_str(device, dev_name(ar->dev));
339 __assign_str(driver, dev_driver_string(ar->dev));
340 __entry->msdu_id = msdu_id;
341 ),
342
343 TP_printk(
344 "%s %s msdu_id %d",
345 __get_str(driver),
346 __get_str(device),
347 __entry->msdu_id
348 )
349);
Rajkumar Manoharan9b57f882014-10-06 22:39:06 +0530350
Rajkumar Manoharan5ce8e7f2014-11-05 19:14:31 +0530351DECLARE_EVENT_CLASS(ath10k_hdr_event,
Rajkumar Manoharan9b57f882014-10-06 22:39:06 +0530352 TP_PROTO(struct ath10k *ar, void *data, size_t len),
353
354 TP_ARGS(ar, data, len),
355
356 TP_STRUCT__entry(
357 __string(device, dev_name(ar->dev))
358 __string(driver, dev_driver_string(ar->dev))
359 __field(size_t, len)
Rajkumar Manoharan5ce8e7f2014-11-05 19:14:31 +0530360 __dynamic_array(u8, data, ath10k_frm_hdr_len(data))
Rajkumar Manoharan9b57f882014-10-06 22:39:06 +0530361 ),
362
363 TP_fast_assign(
364 __assign_str(device, dev_name(ar->dev));
365 __assign_str(driver, dev_driver_string(ar->dev));
Rajkumar Manoharan5ce8e7f2014-11-05 19:14:31 +0530366 __entry->len = ath10k_frm_hdr_len(data);
367 memcpy(__get_dynamic_array(data), data, __entry->len);
Rajkumar Manoharan9b57f882014-10-06 22:39:06 +0530368 ),
369
370 TP_printk(
371 "%s %s len %zu\n",
372 __get_str(driver),
373 __get_str(device),
374 __entry->len
375 )
376);
377
Rajkumar Manoharan5ce8e7f2014-11-05 19:14:31 +0530378DECLARE_EVENT_CLASS(ath10k_payload_event,
379 TP_PROTO(struct ath10k *ar, void *data, size_t len),
380
381 TP_ARGS(ar, data, len),
382
383 TP_STRUCT__entry(
384 __string(device, dev_name(ar->dev))
385 __string(driver, dev_driver_string(ar->dev))
386 __field(size_t, len)
387 __dynamic_array(u8, payload, (len - ath10k_frm_hdr_len(data)))
388 ),
389
390 TP_fast_assign(
391 __assign_str(device, dev_name(ar->dev));
392 __assign_str(driver, dev_driver_string(ar->dev));
393 __entry->len = len - ath10k_frm_hdr_len(data);
394 memcpy(__get_dynamic_array(payload),
395 data + ath10k_frm_hdr_len(data), __entry->len);
396 ),
397
398 TP_printk(
399 "%s %s len %zu\n",
400 __get_str(driver),
401 __get_str(device),
402 __entry->len
403 )
404);
405
406DEFINE_EVENT(ath10k_hdr_event, ath10k_tx_hdr,
Rajkumar Manoharan9b57f882014-10-06 22:39:06 +0530407 TP_PROTO(struct ath10k *ar, void *data, size_t len),
408 TP_ARGS(ar, data, len)
409);
410
Rajkumar Manoharan5ce8e7f2014-11-05 19:14:31 +0530411DEFINE_EVENT(ath10k_payload_event, ath10k_tx_payload,
Rajkumar Manoharan9b57f882014-10-06 22:39:06 +0530412 TP_PROTO(struct ath10k *ar, void *data, size_t len),
413 TP_ARGS(ar, data, len)
414);
415
Rajkumar Manoharan5ce8e7f2014-11-05 19:14:31 +0530416DEFINE_EVENT(ath10k_hdr_event, ath10k_rx_hdr,
Rajkumar Manoharan9b57f882014-10-06 22:39:06 +0530417 TP_PROTO(struct ath10k *ar, void *data, size_t len),
418 TP_ARGS(ar, data, len)
419);
420
Rajkumar Manoharan5ce8e7f2014-11-05 19:14:31 +0530421DEFINE_EVENT(ath10k_payload_event, ath10k_rx_payload,
Rajkumar Manoharan9b57f882014-10-06 22:39:06 +0530422 TP_PROTO(struct ath10k *ar, void *data, size_t len),
423 TP_ARGS(ar, data, len)
424);
Michal Kaziora5d85f62014-10-23 17:04:28 +0300425
Rajkumar Manoharan5ce8e7f2014-11-05 19:14:31 +0530426TRACE_EVENT(ath10k_htt_rx_desc,
427 TP_PROTO(struct ath10k *ar, void *data, size_t len),
428
429 TP_ARGS(ar, data, len),
430
431 TP_STRUCT__entry(
432 __string(device, dev_name(ar->dev))
433 __string(driver, dev_driver_string(ar->dev))
434 __field(u16, len)
435 __dynamic_array(u8, rxdesc, len)
436 ),
437
438 TP_fast_assign(
439 __assign_str(device, dev_name(ar->dev));
440 __assign_str(driver, dev_driver_string(ar->dev));
441 __entry->len = len;
442 memcpy(__get_dynamic_array(rxdesc), data, len);
443 ),
444
445 TP_printk(
446 "%s %s rxdesc len %d",
447 __get_str(driver),
448 __get_str(device),
449 __entry->len
450 )
Michal Kaziora5d85f62014-10-23 17:04:28 +0300451);
Rajkumar Manoharan5ce8e7f2014-11-05 19:14:31 +0530452
Kalle Valo5e3dd152013-06-12 20:52:10 +0300453#endif /* _TRACE_H_ || TRACE_HEADER_MULTI_READ*/
454
455/* we don't want to use include/trace/events */
456#undef TRACE_INCLUDE_PATH
457#define TRACE_INCLUDE_PATH .
458#undef TRACE_INCLUDE_FILE
459#define TRACE_INCLUDE_FILE trace
460
461/* This part must be outside protection */
462#include <trace/define_trace.h>