2 * Copyright (c) 2005-2011 Atheros Communications Inc.
3 * Copyright (c) 2011-2013 Qualcomm Atheros, Inc.
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.
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.
18 #if !defined(_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
20 #include <linux/tracepoint.h>
23 #if !defined(_TRACE_H_)
24 static inline u32 ath10k_frm_hdr_len(void *buf)
26 return ieee80211_hdrlen(((struct ieee80211_hdr *)buf)->frame_control);
32 /* create empty functions when tracing is disabled */
33 #if !defined(CONFIG_ATH10K_TRACING)
35 #define TRACE_EVENT(name, proto, ...) \
36 static inline void trace_ ## name(proto) {}
37 #undef DECLARE_EVENT_CLASS
38 #define DECLARE_EVENT_CLASS(...)
40 #define DEFINE_EVENT(evt_class, name, proto, ...) \
41 static inline void trace_ ## name(proto) {}
42 #endif /* !CONFIG_ATH10K_TRACING || __CHECKER__ */
45 #define TRACE_SYSTEM ath10k
47 #define ATH10K_MSG_MAX 200
49 DECLARE_EVENT_CLASS(ath10k_log_event,
50 TP_PROTO(struct ath10k *ar, struct va_format *vaf),
53 __string(device, dev_name(ar->dev))
54 __string(driver, dev_driver_string(ar->dev))
55 __dynamic_array(char, msg, ATH10K_MSG_MAX)
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),
63 *vaf->va) >= ATH10K_MSG_MAX);
73 DEFINE_EVENT(ath10k_log_event, ath10k_log_err,
74 TP_PROTO(struct ath10k *ar, struct va_format *vaf),
78 DEFINE_EVENT(ath10k_log_event, ath10k_log_warn,
79 TP_PROTO(struct ath10k *ar, struct va_format *vaf),
83 DEFINE_EVENT(ath10k_log_event, ath10k_log_info,
84 TP_PROTO(struct ath10k *ar, struct va_format *vaf),
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),
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)
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),
104 *vaf->va) >= ATH10K_MSG_MAX);
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),
118 TP_ARGS(ar, msg, prefix, buf, buf_len),
121 __string(device, dev_name(ar->dev))
122 __string(driver, dev_driver_string(ar->dev))
124 __string(prefix, prefix)
125 __field(size_t, buf_len)
126 __dynamic_array(u8, buf, buf_len)
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);
147 TRACE_EVENT(ath10k_wmi_cmd,
148 TP_PROTO(struct ath10k *ar, int id, void *buf, size_t buf_len, int ret),
150 TP_ARGS(ar, id, buf, buf_len, ret),
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)
162 __assign_str(device, dev_name(ar->dev));
163 __assign_str(driver, dev_driver_string(ar->dev));
165 __entry->buf_len = buf_len;
167 memcpy(__get_dynamic_array(buf), buf, buf_len);
171 "%s %s id %d len %zu ret %d",
180 TRACE_EVENT(ath10k_wmi_event,
181 TP_PROTO(struct ath10k *ar, int id, void *buf, size_t buf_len),
183 TP_ARGS(ar, id, buf, buf_len),
186 __string(device, dev_name(ar->dev))
187 __string(driver, dev_driver_string(ar->dev))
188 __field(unsigned int, id)
189 __field(size_t, buf_len)
190 __dynamic_array(u8, buf, buf_len)
194 __assign_str(device, dev_name(ar->dev));
195 __assign_str(driver, dev_driver_string(ar->dev));
197 __entry->buf_len = buf_len;
198 memcpy(__get_dynamic_array(buf), buf, buf_len);
202 "%s %s id %d len %zu",
210 TRACE_EVENT(ath10k_htt_stats,
211 TP_PROTO(struct ath10k *ar, void *buf, size_t buf_len),
213 TP_ARGS(ar, buf, buf_len),
216 __string(device, dev_name(ar->dev))
217 __string(driver, dev_driver_string(ar->dev))
218 __field(size_t, buf_len)
219 __dynamic_array(u8, buf, buf_len)
223 __assign_str(device, dev_name(ar->dev));
224 __assign_str(driver, dev_driver_string(ar->dev));
225 __entry->buf_len = buf_len;
226 memcpy(__get_dynamic_array(buf), buf, buf_len);
237 TRACE_EVENT(ath10k_wmi_dbglog,
238 TP_PROTO(struct ath10k *ar, void *buf, size_t buf_len),
240 TP_ARGS(ar, buf, buf_len),
243 __string(device, dev_name(ar->dev))
244 __string(driver, dev_driver_string(ar->dev))
245 __field(size_t, buf_len)
246 __dynamic_array(u8, buf, buf_len)
250 __assign_str(device, dev_name(ar->dev));
251 __assign_str(driver, dev_driver_string(ar->dev));
252 __entry->buf_len = buf_len;
253 memcpy(__get_dynamic_array(buf), buf, buf_len);
264 TRACE_EVENT(ath10k_htt_pktlog,
265 TP_PROTO(struct ath10k *ar, void *buf, u16 buf_len),
267 TP_ARGS(ar, buf, buf_len),
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)
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);
291 TRACE_EVENT(ath10k_htt_tx,
292 TP_PROTO(struct ath10k *ar, u16 msdu_id, u16 msdu_len,
295 TP_ARGS(ar, msdu_id, msdu_len, vdev_id, tid),
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)
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;
316 "%s %s msdu_id %d msdu_len %d vdev_id %d tid %d",
326 TRACE_EVENT(ath10k_txrx_tx_unref,
327 TP_PROTO(struct ath10k *ar, u16 msdu_id),
329 TP_ARGS(ar, msdu_id),
332 __string(device, dev_name(ar->dev))
333 __string(driver, dev_driver_string(ar->dev))
334 __field(u16, msdu_id)
338 __assign_str(device, dev_name(ar->dev));
339 __assign_str(driver, dev_driver_string(ar->dev));
340 __entry->msdu_id = msdu_id;
351 DECLARE_EVENT_CLASS(ath10k_hdr_event,
352 TP_PROTO(struct ath10k *ar, void *data, size_t len),
354 TP_ARGS(ar, data, len),
357 __string(device, dev_name(ar->dev))
358 __string(driver, dev_driver_string(ar->dev))
360 __dynamic_array(u8, data, ath10k_frm_hdr_len(data))
364 __assign_str(device, dev_name(ar->dev));
365 __assign_str(driver, dev_driver_string(ar->dev));
366 __entry->len = ath10k_frm_hdr_len(data);
367 memcpy(__get_dynamic_array(data), data, __entry->len);
378 DECLARE_EVENT_CLASS(ath10k_payload_event,
379 TP_PROTO(struct ath10k *ar, void *data, size_t len),
381 TP_ARGS(ar, data, len),
384 __string(device, dev_name(ar->dev))
385 __string(driver, dev_driver_string(ar->dev))
387 __dynamic_array(u8, payload, (len - ath10k_frm_hdr_len(data)))
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);
406 DEFINE_EVENT(ath10k_hdr_event, ath10k_tx_hdr,
407 TP_PROTO(struct ath10k *ar, void *data, size_t len),
408 TP_ARGS(ar, data, len)
411 DEFINE_EVENT(ath10k_payload_event, ath10k_tx_payload,
412 TP_PROTO(struct ath10k *ar, void *data, size_t len),
413 TP_ARGS(ar, data, len)
416 DEFINE_EVENT(ath10k_hdr_event, ath10k_rx_hdr,
417 TP_PROTO(struct ath10k *ar, void *data, size_t len),
418 TP_ARGS(ar, data, len)
421 DEFINE_EVENT(ath10k_payload_event, ath10k_rx_payload,
422 TP_PROTO(struct ath10k *ar, void *data, size_t len),
423 TP_ARGS(ar, data, len)
426 TRACE_EVENT(ath10k_htt_rx_desc,
427 TP_PROTO(struct ath10k *ar, void *data, size_t len),
429 TP_ARGS(ar, data, len),
432 __string(device, dev_name(ar->dev))
433 __string(driver, dev_driver_string(ar->dev))
435 __dynamic_array(u8, rxdesc, len)
439 __assign_str(device, dev_name(ar->dev));
440 __assign_str(driver, dev_driver_string(ar->dev));
442 memcpy(__get_dynamic_array(rxdesc), data, len);
446 "%s %s rxdesc len %d",
453 #endif /* _TRACE_H_ || TRACE_HEADER_MULTI_READ*/
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
461 /* This part must be outside protection */
462 #include <trace/define_trace.h>