These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / net / wireless / ath / ath10k / trace.h
1 /*
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>
21 #include "core.h"
22
23 #if !defined(_TRACE_H_)
24 static inline u32 ath10k_frm_hdr_len(const void *buf, size_t len)
25 {
26         const struct ieee80211_hdr *hdr = buf;
27
28         /* In some rare cases (e.g. fcs error) device reports frame buffer
29          * shorter than what frame header implies (e.g. len = 0). The buffer
30          * can still be accessed so do a simple min() to guarantee caller
31          * doesn't get value greater than len.
32          */
33         return min_t(u32, len, ieee80211_hdrlen(hdr->frame_control));
34 }
35 #endif
36
37 #define _TRACE_H_
38
39 /* create empty functions when tracing is disabled */
40 #if !defined(CONFIG_ATH10K_TRACING)
41 #undef TRACE_EVENT
42 #define TRACE_EVENT(name, proto, ...) \
43 static inline void trace_ ## name(proto) {}
44 #undef DECLARE_EVENT_CLASS
45 #define DECLARE_EVENT_CLASS(...)
46 #undef DEFINE_EVENT
47 #define DEFINE_EVENT(evt_class, name, proto, ...) \
48 static inline void trace_ ## name(proto) {}
49 #endif /* !CONFIG_ATH10K_TRACING || __CHECKER__ */
50
51 #undef TRACE_SYSTEM
52 #define TRACE_SYSTEM ath10k
53
54 #define ATH10K_MSG_MAX 400
55
56 DECLARE_EVENT_CLASS(ath10k_log_event,
57         TP_PROTO(struct ath10k *ar, struct va_format *vaf),
58         TP_ARGS(ar, vaf),
59         TP_STRUCT__entry(
60                 __string(device, dev_name(ar->dev))
61                 __string(driver, dev_driver_string(ar->dev))
62                 __dynamic_array(char, msg, ATH10K_MSG_MAX)
63         ),
64         TP_fast_assign(
65                 __assign_str(device, dev_name(ar->dev));
66                 __assign_str(driver, dev_driver_string(ar->dev));
67                 WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg),
68                                        ATH10K_MSG_MAX,
69                                        vaf->fmt,
70                                        *vaf->va) >= ATH10K_MSG_MAX);
71         ),
72         TP_printk(
73                 "%s %s %s",
74                 __get_str(driver),
75                 __get_str(device),
76                 __get_str(msg)
77         )
78 );
79
80 DEFINE_EVENT(ath10k_log_event, ath10k_log_err,
81              TP_PROTO(struct ath10k *ar, struct va_format *vaf),
82              TP_ARGS(ar, vaf)
83 );
84
85 DEFINE_EVENT(ath10k_log_event, ath10k_log_warn,
86              TP_PROTO(struct ath10k *ar, struct va_format *vaf),
87              TP_ARGS(ar, vaf)
88 );
89
90 DEFINE_EVENT(ath10k_log_event, ath10k_log_info,
91              TP_PROTO(struct ath10k *ar, struct va_format *vaf),
92              TP_ARGS(ar, vaf)
93 );
94
95 TRACE_EVENT(ath10k_log_dbg,
96         TP_PROTO(struct ath10k *ar, unsigned int level, struct va_format *vaf),
97         TP_ARGS(ar, level, vaf),
98         TP_STRUCT__entry(
99                 __string(device, dev_name(ar->dev))
100                 __string(driver, dev_driver_string(ar->dev))
101                 __field(unsigned int, level)
102                 __dynamic_array(char, msg, ATH10K_MSG_MAX)
103         ),
104         TP_fast_assign(
105                 __assign_str(device, dev_name(ar->dev));
106                 __assign_str(driver, dev_driver_string(ar->dev));
107                 __entry->level = level;
108                 WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg),
109                                        ATH10K_MSG_MAX,
110                                        vaf->fmt,
111                                        *vaf->va) >= ATH10K_MSG_MAX);
112         ),
113         TP_printk(
114                 "%s %s %s",
115                 __get_str(driver),
116                 __get_str(device),
117                 __get_str(msg)
118         )
119 );
120
121 TRACE_EVENT(ath10k_log_dbg_dump,
122         TP_PROTO(struct ath10k *ar, const char *msg, const char *prefix,
123                  const void *buf, size_t buf_len),
124
125         TP_ARGS(ar, msg, prefix, buf, buf_len),
126
127         TP_STRUCT__entry(
128                 __string(device, dev_name(ar->dev))
129                 __string(driver, dev_driver_string(ar->dev))
130                 __string(msg, msg)
131                 __string(prefix, prefix)
132                 __field(size_t, buf_len)
133                 __dynamic_array(u8, buf, buf_len)
134         ),
135
136         TP_fast_assign(
137                 __assign_str(device, dev_name(ar->dev));
138                 __assign_str(driver, dev_driver_string(ar->dev));
139                 __assign_str(msg, msg);
140                 __assign_str(prefix, prefix);
141                 __entry->buf_len = buf_len;
142                 memcpy(__get_dynamic_array(buf), buf, buf_len);
143         ),
144
145         TP_printk(
146                 "%s %s %s/%s\n",
147                 __get_str(driver),
148                 __get_str(device),
149                 __get_str(prefix),
150                 __get_str(msg)
151         )
152 );
153
154 TRACE_EVENT(ath10k_wmi_cmd,
155         TP_PROTO(struct ath10k *ar, int id, const void *buf, size_t buf_len,
156                  int ret),
157
158         TP_ARGS(ar, id, buf, buf_len, ret),
159
160         TP_STRUCT__entry(
161                 __string(device, dev_name(ar->dev))
162                 __string(driver, dev_driver_string(ar->dev))
163                 __field(unsigned int, id)
164                 __field(size_t, buf_len)
165                 __dynamic_array(u8, buf, buf_len)
166                 __field(int, ret)
167         ),
168
169         TP_fast_assign(
170                 __assign_str(device, dev_name(ar->dev));
171                 __assign_str(driver, dev_driver_string(ar->dev));
172                 __entry->id = id;
173                 __entry->buf_len = buf_len;
174                 __entry->ret = ret;
175                 memcpy(__get_dynamic_array(buf), buf, buf_len);
176         ),
177
178         TP_printk(
179                 "%s %s id %d len %zu ret %d",
180                 __get_str(driver),
181                 __get_str(device),
182                 __entry->id,
183                 __entry->buf_len,
184                 __entry->ret
185         )
186 );
187
188 TRACE_EVENT(ath10k_wmi_event,
189         TP_PROTO(struct ath10k *ar, int id, const void *buf, size_t buf_len),
190
191         TP_ARGS(ar, id, buf, buf_len),
192
193         TP_STRUCT__entry(
194                 __string(device, dev_name(ar->dev))
195                 __string(driver, dev_driver_string(ar->dev))
196                 __field(unsigned int, id)
197                 __field(size_t, buf_len)
198                 __dynamic_array(u8, buf, buf_len)
199         ),
200
201         TP_fast_assign(
202                 __assign_str(device, dev_name(ar->dev));
203                 __assign_str(driver, dev_driver_string(ar->dev));
204                 __entry->id = id;
205                 __entry->buf_len = buf_len;
206                 memcpy(__get_dynamic_array(buf), buf, buf_len);
207         ),
208
209         TP_printk(
210                 "%s %s id %d len %zu",
211                 __get_str(driver),
212                 __get_str(device),
213                 __entry->id,
214                 __entry->buf_len
215         )
216 );
217
218 TRACE_EVENT(ath10k_htt_stats,
219         TP_PROTO(struct ath10k *ar, const void *buf, size_t buf_len),
220
221         TP_ARGS(ar, buf, buf_len),
222
223         TP_STRUCT__entry(
224                 __string(device, dev_name(ar->dev))
225                 __string(driver, dev_driver_string(ar->dev))
226                 __field(size_t, buf_len)
227                 __dynamic_array(u8, buf, buf_len)
228         ),
229
230         TP_fast_assign(
231                 __assign_str(device, dev_name(ar->dev));
232                 __assign_str(driver, dev_driver_string(ar->dev));
233                 __entry->buf_len = buf_len;
234                 memcpy(__get_dynamic_array(buf), buf, buf_len);
235         ),
236
237         TP_printk(
238                 "%s %s len %zu",
239                 __get_str(driver),
240                 __get_str(device),
241                 __entry->buf_len
242         )
243 );
244
245 TRACE_EVENT(ath10k_wmi_dbglog,
246         TP_PROTO(struct ath10k *ar, const void *buf, size_t buf_len),
247
248         TP_ARGS(ar, buf, buf_len),
249
250         TP_STRUCT__entry(
251                 __string(device, dev_name(ar->dev))
252                 __string(driver, dev_driver_string(ar->dev))
253                 __field(size_t, buf_len)
254                 __dynamic_array(u8, buf, buf_len)
255         ),
256
257         TP_fast_assign(
258                 __assign_str(device, dev_name(ar->dev));
259                 __assign_str(driver, dev_driver_string(ar->dev));
260                 __entry->buf_len = buf_len;
261                 memcpy(__get_dynamic_array(buf), buf, buf_len);
262         ),
263
264         TP_printk(
265                 "%s %s len %zu",
266                 __get_str(driver),
267                 __get_str(device),
268                 __entry->buf_len
269         )
270 );
271
272 TRACE_EVENT(ath10k_htt_pktlog,
273             TP_PROTO(struct ath10k *ar, const void *buf, u16 buf_len),
274
275         TP_ARGS(ar, buf, buf_len),
276
277         TP_STRUCT__entry(
278                 __string(device, dev_name(ar->dev))
279                 __string(driver, dev_driver_string(ar->dev))
280                 __field(u16, buf_len)
281                 __dynamic_array(u8, pktlog, buf_len)
282         ),
283
284         TP_fast_assign(
285                 __assign_str(device, dev_name(ar->dev));
286                 __assign_str(driver, dev_driver_string(ar->dev));
287                 __entry->buf_len = buf_len;
288                 memcpy(__get_dynamic_array(pktlog), buf, buf_len);
289         ),
290
291         TP_printk(
292                 "%s %s size %hu",
293                 __get_str(driver),
294                 __get_str(device),
295                 __entry->buf_len
296          )
297 );
298
299 TRACE_EVENT(ath10k_htt_tx,
300             TP_PROTO(struct ath10k *ar, u16 msdu_id, u16 msdu_len,
301                      u8 vdev_id, u8 tid),
302
303         TP_ARGS(ar, msdu_id, msdu_len, vdev_id, tid),
304
305         TP_STRUCT__entry(
306                 __string(device, dev_name(ar->dev))
307                 __string(driver, dev_driver_string(ar->dev))
308                 __field(u16, msdu_id)
309                 __field(u16, msdu_len)
310                 __field(u8, vdev_id)
311                 __field(u8, tid)
312         ),
313
314         TP_fast_assign(
315                 __assign_str(device, dev_name(ar->dev));
316                 __assign_str(driver, dev_driver_string(ar->dev));
317                 __entry->msdu_id = msdu_id;
318                 __entry->msdu_len = msdu_len;
319                 __entry->vdev_id = vdev_id;
320                 __entry->tid = tid;
321         ),
322
323         TP_printk(
324                 "%s %s msdu_id %d msdu_len %d vdev_id %d tid %d",
325                 __get_str(driver),
326                 __get_str(device),
327                 __entry->msdu_id,
328                 __entry->msdu_len,
329                 __entry->vdev_id,
330                 __entry->tid
331          )
332 );
333
334 TRACE_EVENT(ath10k_txrx_tx_unref,
335             TP_PROTO(struct ath10k *ar, u16 msdu_id),
336
337         TP_ARGS(ar, msdu_id),
338
339         TP_STRUCT__entry(
340                 __string(device, dev_name(ar->dev))
341                 __string(driver, dev_driver_string(ar->dev))
342                 __field(u16, msdu_id)
343         ),
344
345         TP_fast_assign(
346                 __assign_str(device, dev_name(ar->dev));
347                 __assign_str(driver, dev_driver_string(ar->dev));
348                 __entry->msdu_id = msdu_id;
349         ),
350
351         TP_printk(
352                 "%s %s msdu_id %d",
353                 __get_str(driver),
354                 __get_str(device),
355                 __entry->msdu_id
356          )
357 );
358
359 DECLARE_EVENT_CLASS(ath10k_hdr_event,
360                     TP_PROTO(struct ath10k *ar, const void *data, size_t len),
361
362         TP_ARGS(ar, data, len),
363
364         TP_STRUCT__entry(
365                 __string(device, dev_name(ar->dev))
366                 __string(driver, dev_driver_string(ar->dev))
367                 __field(size_t, len)
368                 __dynamic_array(u8, data, ath10k_frm_hdr_len(data, len))
369         ),
370
371         TP_fast_assign(
372                 __assign_str(device, dev_name(ar->dev));
373                 __assign_str(driver, dev_driver_string(ar->dev));
374                 __entry->len = ath10k_frm_hdr_len(data, len);
375                 memcpy(__get_dynamic_array(data), data, __entry->len);
376         ),
377
378         TP_printk(
379                 "%s %s len %zu\n",
380                 __get_str(driver),
381                 __get_str(device),
382                 __entry->len
383         )
384 );
385
386 DECLARE_EVENT_CLASS(ath10k_payload_event,
387                     TP_PROTO(struct ath10k *ar, const void *data, size_t len),
388
389         TP_ARGS(ar, data, len),
390
391         TP_STRUCT__entry(
392                 __string(device, dev_name(ar->dev))
393                 __string(driver, dev_driver_string(ar->dev))
394                 __field(size_t, len)
395                 __dynamic_array(u8, payload, (len -
396                                               ath10k_frm_hdr_len(data, len)))
397         ),
398
399         TP_fast_assign(
400                 __assign_str(device, dev_name(ar->dev));
401                 __assign_str(driver, dev_driver_string(ar->dev));
402                 __entry->len = len - ath10k_frm_hdr_len(data, len);
403                 memcpy(__get_dynamic_array(payload),
404                        data + ath10k_frm_hdr_len(data, len), __entry->len);
405         ),
406
407         TP_printk(
408                 "%s %s len %zu\n",
409                 __get_str(driver),
410                 __get_str(device),
411                 __entry->len
412         )
413 );
414
415 DEFINE_EVENT(ath10k_hdr_event, ath10k_tx_hdr,
416              TP_PROTO(struct ath10k *ar, const void *data, size_t len),
417              TP_ARGS(ar, data, len)
418 );
419
420 DEFINE_EVENT(ath10k_payload_event, ath10k_tx_payload,
421              TP_PROTO(struct ath10k *ar, const void *data, size_t len),
422              TP_ARGS(ar, data, len)
423 );
424
425 DEFINE_EVENT(ath10k_hdr_event, ath10k_rx_hdr,
426              TP_PROTO(struct ath10k *ar, const void *data, size_t len),
427              TP_ARGS(ar, data, len)
428 );
429
430 DEFINE_EVENT(ath10k_payload_event, ath10k_rx_payload,
431              TP_PROTO(struct ath10k *ar, const void *data, size_t len),
432              TP_ARGS(ar, data, len)
433 );
434
435 TRACE_EVENT(ath10k_htt_rx_desc,
436             TP_PROTO(struct ath10k *ar, const void *data, size_t len),
437
438         TP_ARGS(ar, data, len),
439
440         TP_STRUCT__entry(
441                 __string(device, dev_name(ar->dev))
442                 __string(driver, dev_driver_string(ar->dev))
443                 __field(u16, len)
444                 __dynamic_array(u8, rxdesc, len)
445         ),
446
447         TP_fast_assign(
448                 __assign_str(device, dev_name(ar->dev));
449                 __assign_str(driver, dev_driver_string(ar->dev));
450                 __entry->len = len;
451                 memcpy(__get_dynamic_array(rxdesc), data, len);
452         ),
453
454         TP_printk(
455                 "%s %s rxdesc len %d",
456                 __get_str(driver),
457                 __get_str(device),
458                 __entry->len
459          )
460 );
461
462 TRACE_EVENT(ath10k_wmi_diag_container,
463             TP_PROTO(struct ath10k *ar,
464                      u8 type,
465                      u32 timestamp,
466                      u32 code,
467                      u16 len,
468                      const void *data),
469
470         TP_ARGS(ar, type, timestamp, code, len, data),
471
472         TP_STRUCT__entry(
473                 __string(device, dev_name(ar->dev))
474                 __string(driver, dev_driver_string(ar->dev))
475                 __field(u8, type)
476                 __field(u32, timestamp)
477                 __field(u32, code)
478                 __field(u16, len)
479                 __dynamic_array(u8, data, len)
480         ),
481
482         TP_fast_assign(
483                 __assign_str(device, dev_name(ar->dev));
484                 __assign_str(driver, dev_driver_string(ar->dev));
485                 __entry->type = type;
486                 __entry->timestamp = timestamp;
487                 __entry->code = code;
488                 __entry->len = len;
489                 memcpy(__get_dynamic_array(data), data, len);
490         ),
491
492         TP_printk(
493                 "%s %s diag container type %hhu timestamp %u code %u len %d",
494                 __get_str(driver),
495                 __get_str(device),
496                 __entry->type,
497                 __entry->timestamp,
498                 __entry->code,
499                 __entry->len
500         )
501 );
502
503 TRACE_EVENT(ath10k_wmi_diag,
504             TP_PROTO(struct ath10k *ar, const void *data, size_t len),
505
506         TP_ARGS(ar, data, len),
507
508         TP_STRUCT__entry(
509                 __string(device, dev_name(ar->dev))
510                 __string(driver, dev_driver_string(ar->dev))
511                 __field(u16, len)
512                 __dynamic_array(u8, data, len)
513         ),
514
515         TP_fast_assign(
516                 __assign_str(device, dev_name(ar->dev));
517                 __assign_str(driver, dev_driver_string(ar->dev));
518                 __entry->len = len;
519                 memcpy(__get_dynamic_array(data), data, len);
520         ),
521
522         TP_printk(
523                 "%s %s tlv diag len %d",
524                 __get_str(driver),
525                 __get_str(device),
526                 __entry->len
527         )
528 );
529
530 #endif /* _TRACE_H_ || TRACE_HEADER_MULTI_READ*/
531
532 /* we don't want to use include/trace/events */
533 #undef TRACE_INCLUDE_PATH
534 #define TRACE_INCLUDE_PATH .
535 #undef TRACE_INCLUDE_FILE
536 #define TRACE_INCLUDE_FILE trace
537
538 /* This part must be outside protection */
539 #include <trace/define_trace.h>