18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: ISC */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Copyright (c) 2005-2011 Atheros Communications Inc.
48c2ecf20Sopenharmony_ci * Copyright (c) 2011-2016 Qualcomm Atheros, Inc.
58c2ecf20Sopenharmony_ci */
68c2ecf20Sopenharmony_ci
78c2ecf20Sopenharmony_ci#if !defined(_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ci#include <linux/tracepoint.h>
108c2ecf20Sopenharmony_ci#include "core.h"
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci#if !defined(_TRACE_H_)
138c2ecf20Sopenharmony_cistatic inline u32 ath10k_frm_hdr_len(const void *buf, size_t len)
148c2ecf20Sopenharmony_ci{
158c2ecf20Sopenharmony_ci	const struct ieee80211_hdr *hdr = buf;
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_ci	/* In some rare cases (e.g. fcs error) device reports frame buffer
188c2ecf20Sopenharmony_ci	 * shorter than what frame header implies (e.g. len = 0). The buffer
198c2ecf20Sopenharmony_ci	 * can still be accessed so do a simple min() to guarantee caller
208c2ecf20Sopenharmony_ci	 * doesn't get value greater than len.
218c2ecf20Sopenharmony_ci	 */
228c2ecf20Sopenharmony_ci	return min_t(u32, len, ieee80211_hdrlen(hdr->frame_control));
238c2ecf20Sopenharmony_ci}
248c2ecf20Sopenharmony_ci#endif
258c2ecf20Sopenharmony_ci
268c2ecf20Sopenharmony_ci#define _TRACE_H_
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_ci/* create empty functions when tracing is disabled */
298c2ecf20Sopenharmony_ci#if !defined(CONFIG_ATH10K_TRACING)
308c2ecf20Sopenharmony_ci#undef TRACE_EVENT
318c2ecf20Sopenharmony_ci#define TRACE_EVENT(name, proto, ...) \
328c2ecf20Sopenharmony_cistatic inline void trace_ ## name(proto) {} \
338c2ecf20Sopenharmony_cistatic inline bool trace_##name##_enabled(void) \
348c2ecf20Sopenharmony_ci{						\
358c2ecf20Sopenharmony_ci	return false;				\
368c2ecf20Sopenharmony_ci}
378c2ecf20Sopenharmony_ci#undef DECLARE_EVENT_CLASS
388c2ecf20Sopenharmony_ci#define DECLARE_EVENT_CLASS(...)
398c2ecf20Sopenharmony_ci#undef DEFINE_EVENT
408c2ecf20Sopenharmony_ci#define DEFINE_EVENT(evt_class, name, proto, ...) \
418c2ecf20Sopenharmony_cistatic inline void trace_ ## name(proto) {}
428c2ecf20Sopenharmony_ci#endif /* !CONFIG_ATH10K_TRACING || __CHECKER__ */
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_ci#undef TRACE_SYSTEM
458c2ecf20Sopenharmony_ci#define TRACE_SYSTEM ath10k
468c2ecf20Sopenharmony_ci
478c2ecf20Sopenharmony_ci#define ATH10K_MSG_MAX 400
488c2ecf20Sopenharmony_ci
498c2ecf20Sopenharmony_ciDECLARE_EVENT_CLASS(ath10k_log_event,
508c2ecf20Sopenharmony_ci	TP_PROTO(struct ath10k *ar, struct va_format *vaf),
518c2ecf20Sopenharmony_ci	TP_ARGS(ar, vaf),
528c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
538c2ecf20Sopenharmony_ci		__string(device, dev_name(ar->dev))
548c2ecf20Sopenharmony_ci		__string(driver, dev_driver_string(ar->dev))
558c2ecf20Sopenharmony_ci		__dynamic_array(char, msg, ATH10K_MSG_MAX)
568c2ecf20Sopenharmony_ci	),
578c2ecf20Sopenharmony_ci	TP_fast_assign(
588c2ecf20Sopenharmony_ci		__assign_str(device, dev_name(ar->dev));
598c2ecf20Sopenharmony_ci		__assign_str(driver, dev_driver_string(ar->dev));
608c2ecf20Sopenharmony_ci		WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg),
618c2ecf20Sopenharmony_ci				       ATH10K_MSG_MAX,
628c2ecf20Sopenharmony_ci				       vaf->fmt,
638c2ecf20Sopenharmony_ci				       *vaf->va) >= ATH10K_MSG_MAX);
648c2ecf20Sopenharmony_ci	),
658c2ecf20Sopenharmony_ci	TP_printk(
668c2ecf20Sopenharmony_ci		"%s %s %s",
678c2ecf20Sopenharmony_ci		__get_str(driver),
688c2ecf20Sopenharmony_ci		__get_str(device),
698c2ecf20Sopenharmony_ci		__get_str(msg)
708c2ecf20Sopenharmony_ci	)
718c2ecf20Sopenharmony_ci);
728c2ecf20Sopenharmony_ci
738c2ecf20Sopenharmony_ciDEFINE_EVENT(ath10k_log_event, ath10k_log_err,
748c2ecf20Sopenharmony_ci	     TP_PROTO(struct ath10k *ar, struct va_format *vaf),
758c2ecf20Sopenharmony_ci	     TP_ARGS(ar, vaf)
768c2ecf20Sopenharmony_ci);
778c2ecf20Sopenharmony_ci
788c2ecf20Sopenharmony_ciDEFINE_EVENT(ath10k_log_event, ath10k_log_warn,
798c2ecf20Sopenharmony_ci	     TP_PROTO(struct ath10k *ar, struct va_format *vaf),
808c2ecf20Sopenharmony_ci	     TP_ARGS(ar, vaf)
818c2ecf20Sopenharmony_ci);
828c2ecf20Sopenharmony_ci
838c2ecf20Sopenharmony_ciDEFINE_EVENT(ath10k_log_event, ath10k_log_info,
848c2ecf20Sopenharmony_ci	     TP_PROTO(struct ath10k *ar, struct va_format *vaf),
858c2ecf20Sopenharmony_ci	     TP_ARGS(ar, vaf)
868c2ecf20Sopenharmony_ci);
878c2ecf20Sopenharmony_ci
888c2ecf20Sopenharmony_ciTRACE_EVENT(ath10k_log_dbg,
898c2ecf20Sopenharmony_ci	TP_PROTO(struct ath10k *ar, unsigned int level, struct va_format *vaf),
908c2ecf20Sopenharmony_ci	TP_ARGS(ar, level, vaf),
918c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
928c2ecf20Sopenharmony_ci		__string(device, dev_name(ar->dev))
938c2ecf20Sopenharmony_ci		__string(driver, dev_driver_string(ar->dev))
948c2ecf20Sopenharmony_ci		__field(unsigned int, level)
958c2ecf20Sopenharmony_ci		__dynamic_array(char, msg, ATH10K_MSG_MAX)
968c2ecf20Sopenharmony_ci	),
978c2ecf20Sopenharmony_ci	TP_fast_assign(
988c2ecf20Sopenharmony_ci		__assign_str(device, dev_name(ar->dev));
998c2ecf20Sopenharmony_ci		__assign_str(driver, dev_driver_string(ar->dev));
1008c2ecf20Sopenharmony_ci		__entry->level = level;
1018c2ecf20Sopenharmony_ci		WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg),
1028c2ecf20Sopenharmony_ci				       ATH10K_MSG_MAX,
1038c2ecf20Sopenharmony_ci				       vaf->fmt,
1048c2ecf20Sopenharmony_ci				       *vaf->va) >= ATH10K_MSG_MAX);
1058c2ecf20Sopenharmony_ci	),
1068c2ecf20Sopenharmony_ci	TP_printk(
1078c2ecf20Sopenharmony_ci		"%s %s %s",
1088c2ecf20Sopenharmony_ci		__get_str(driver),
1098c2ecf20Sopenharmony_ci		__get_str(device),
1108c2ecf20Sopenharmony_ci		__get_str(msg)
1118c2ecf20Sopenharmony_ci	)
1128c2ecf20Sopenharmony_ci);
1138c2ecf20Sopenharmony_ci
1148c2ecf20Sopenharmony_ciTRACE_EVENT(ath10k_log_dbg_dump,
1158c2ecf20Sopenharmony_ci	TP_PROTO(struct ath10k *ar, const char *msg, const char *prefix,
1168c2ecf20Sopenharmony_ci		 const void *buf, size_t buf_len),
1178c2ecf20Sopenharmony_ci
1188c2ecf20Sopenharmony_ci	TP_ARGS(ar, msg, prefix, buf, buf_len),
1198c2ecf20Sopenharmony_ci
1208c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
1218c2ecf20Sopenharmony_ci		__string(device, dev_name(ar->dev))
1228c2ecf20Sopenharmony_ci		__string(driver, dev_driver_string(ar->dev))
1238c2ecf20Sopenharmony_ci		__string(msg, msg)
1248c2ecf20Sopenharmony_ci		__string(prefix, prefix)
1258c2ecf20Sopenharmony_ci		__field(size_t, buf_len)
1268c2ecf20Sopenharmony_ci		__dynamic_array(u8, buf, buf_len)
1278c2ecf20Sopenharmony_ci	),
1288c2ecf20Sopenharmony_ci
1298c2ecf20Sopenharmony_ci	TP_fast_assign(
1308c2ecf20Sopenharmony_ci		__assign_str(device, dev_name(ar->dev));
1318c2ecf20Sopenharmony_ci		__assign_str(driver, dev_driver_string(ar->dev));
1328c2ecf20Sopenharmony_ci		__assign_str(msg, msg);
1338c2ecf20Sopenharmony_ci		__assign_str(prefix, prefix);
1348c2ecf20Sopenharmony_ci		__entry->buf_len = buf_len;
1358c2ecf20Sopenharmony_ci		memcpy(__get_dynamic_array(buf), buf, buf_len);
1368c2ecf20Sopenharmony_ci	),
1378c2ecf20Sopenharmony_ci
1388c2ecf20Sopenharmony_ci	TP_printk(
1398c2ecf20Sopenharmony_ci		"%s %s %s/%s\n",
1408c2ecf20Sopenharmony_ci		__get_str(driver),
1418c2ecf20Sopenharmony_ci		__get_str(device),
1428c2ecf20Sopenharmony_ci		__get_str(prefix),
1438c2ecf20Sopenharmony_ci		__get_str(msg)
1448c2ecf20Sopenharmony_ci	)
1458c2ecf20Sopenharmony_ci);
1468c2ecf20Sopenharmony_ci
1478c2ecf20Sopenharmony_ciTRACE_EVENT(ath10k_wmi_cmd,
1488c2ecf20Sopenharmony_ci	TP_PROTO(struct ath10k *ar, int id, const void *buf, size_t buf_len),
1498c2ecf20Sopenharmony_ci
1508c2ecf20Sopenharmony_ci	TP_ARGS(ar, id, buf, buf_len),
1518c2ecf20Sopenharmony_ci
1528c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
1538c2ecf20Sopenharmony_ci		__string(device, dev_name(ar->dev))
1548c2ecf20Sopenharmony_ci		__string(driver, dev_driver_string(ar->dev))
1558c2ecf20Sopenharmony_ci		__field(unsigned int, id)
1568c2ecf20Sopenharmony_ci		__field(size_t, buf_len)
1578c2ecf20Sopenharmony_ci		__dynamic_array(u8, buf, buf_len)
1588c2ecf20Sopenharmony_ci	),
1598c2ecf20Sopenharmony_ci
1608c2ecf20Sopenharmony_ci	TP_fast_assign(
1618c2ecf20Sopenharmony_ci		__assign_str(device, dev_name(ar->dev));
1628c2ecf20Sopenharmony_ci		__assign_str(driver, dev_driver_string(ar->dev));
1638c2ecf20Sopenharmony_ci		__entry->id = id;
1648c2ecf20Sopenharmony_ci		__entry->buf_len = buf_len;
1658c2ecf20Sopenharmony_ci		memcpy(__get_dynamic_array(buf), buf, buf_len);
1668c2ecf20Sopenharmony_ci	),
1678c2ecf20Sopenharmony_ci
1688c2ecf20Sopenharmony_ci	TP_printk(
1698c2ecf20Sopenharmony_ci		"%s %s id %d len %zu",
1708c2ecf20Sopenharmony_ci		__get_str(driver),
1718c2ecf20Sopenharmony_ci		__get_str(device),
1728c2ecf20Sopenharmony_ci		__entry->id,
1738c2ecf20Sopenharmony_ci		__entry->buf_len
1748c2ecf20Sopenharmony_ci	)
1758c2ecf20Sopenharmony_ci);
1768c2ecf20Sopenharmony_ci
1778c2ecf20Sopenharmony_ciTRACE_EVENT(ath10k_wmi_event,
1788c2ecf20Sopenharmony_ci	TP_PROTO(struct ath10k *ar, int id, const void *buf, size_t buf_len),
1798c2ecf20Sopenharmony_ci
1808c2ecf20Sopenharmony_ci	TP_ARGS(ar, id, buf, buf_len),
1818c2ecf20Sopenharmony_ci
1828c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
1838c2ecf20Sopenharmony_ci		__string(device, dev_name(ar->dev))
1848c2ecf20Sopenharmony_ci		__string(driver, dev_driver_string(ar->dev))
1858c2ecf20Sopenharmony_ci		__field(unsigned int, id)
1868c2ecf20Sopenharmony_ci		__field(size_t, buf_len)
1878c2ecf20Sopenharmony_ci		__dynamic_array(u8, buf, buf_len)
1888c2ecf20Sopenharmony_ci	),
1898c2ecf20Sopenharmony_ci
1908c2ecf20Sopenharmony_ci	TP_fast_assign(
1918c2ecf20Sopenharmony_ci		__assign_str(device, dev_name(ar->dev));
1928c2ecf20Sopenharmony_ci		__assign_str(driver, dev_driver_string(ar->dev));
1938c2ecf20Sopenharmony_ci		__entry->id = id;
1948c2ecf20Sopenharmony_ci		__entry->buf_len = buf_len;
1958c2ecf20Sopenharmony_ci		memcpy(__get_dynamic_array(buf), buf, buf_len);
1968c2ecf20Sopenharmony_ci	),
1978c2ecf20Sopenharmony_ci
1988c2ecf20Sopenharmony_ci	TP_printk(
1998c2ecf20Sopenharmony_ci		"%s %s id %d len %zu",
2008c2ecf20Sopenharmony_ci		__get_str(driver),
2018c2ecf20Sopenharmony_ci		__get_str(device),
2028c2ecf20Sopenharmony_ci		__entry->id,
2038c2ecf20Sopenharmony_ci		__entry->buf_len
2048c2ecf20Sopenharmony_ci	)
2058c2ecf20Sopenharmony_ci);
2068c2ecf20Sopenharmony_ci
2078c2ecf20Sopenharmony_ciTRACE_EVENT(ath10k_htt_stats,
2088c2ecf20Sopenharmony_ci	TP_PROTO(struct ath10k *ar, const void *buf, size_t buf_len),
2098c2ecf20Sopenharmony_ci
2108c2ecf20Sopenharmony_ci	TP_ARGS(ar, buf, buf_len),
2118c2ecf20Sopenharmony_ci
2128c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
2138c2ecf20Sopenharmony_ci		__string(device, dev_name(ar->dev))
2148c2ecf20Sopenharmony_ci		__string(driver, dev_driver_string(ar->dev))
2158c2ecf20Sopenharmony_ci		__field(size_t, buf_len)
2168c2ecf20Sopenharmony_ci		__dynamic_array(u8, buf, buf_len)
2178c2ecf20Sopenharmony_ci	),
2188c2ecf20Sopenharmony_ci
2198c2ecf20Sopenharmony_ci	TP_fast_assign(
2208c2ecf20Sopenharmony_ci		__assign_str(device, dev_name(ar->dev));
2218c2ecf20Sopenharmony_ci		__assign_str(driver, dev_driver_string(ar->dev));
2228c2ecf20Sopenharmony_ci		__entry->buf_len = buf_len;
2238c2ecf20Sopenharmony_ci		memcpy(__get_dynamic_array(buf), buf, buf_len);
2248c2ecf20Sopenharmony_ci	),
2258c2ecf20Sopenharmony_ci
2268c2ecf20Sopenharmony_ci	TP_printk(
2278c2ecf20Sopenharmony_ci		"%s %s len %zu",
2288c2ecf20Sopenharmony_ci		__get_str(driver),
2298c2ecf20Sopenharmony_ci		__get_str(device),
2308c2ecf20Sopenharmony_ci		__entry->buf_len
2318c2ecf20Sopenharmony_ci	)
2328c2ecf20Sopenharmony_ci);
2338c2ecf20Sopenharmony_ci
2348c2ecf20Sopenharmony_ciTRACE_EVENT(ath10k_wmi_dbglog,
2358c2ecf20Sopenharmony_ci	TP_PROTO(struct ath10k *ar, const void *buf, size_t buf_len),
2368c2ecf20Sopenharmony_ci
2378c2ecf20Sopenharmony_ci	TP_ARGS(ar, buf, buf_len),
2388c2ecf20Sopenharmony_ci
2398c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
2408c2ecf20Sopenharmony_ci		__string(device, dev_name(ar->dev))
2418c2ecf20Sopenharmony_ci		__string(driver, dev_driver_string(ar->dev))
2428c2ecf20Sopenharmony_ci		__field(u8, hw_type)
2438c2ecf20Sopenharmony_ci		__field(size_t, buf_len)
2448c2ecf20Sopenharmony_ci		__dynamic_array(u8, buf, buf_len)
2458c2ecf20Sopenharmony_ci	),
2468c2ecf20Sopenharmony_ci
2478c2ecf20Sopenharmony_ci	TP_fast_assign(
2488c2ecf20Sopenharmony_ci		__assign_str(device, dev_name(ar->dev));
2498c2ecf20Sopenharmony_ci		__assign_str(driver, dev_driver_string(ar->dev));
2508c2ecf20Sopenharmony_ci		__entry->hw_type = ar->hw_rev;
2518c2ecf20Sopenharmony_ci		__entry->buf_len = buf_len;
2528c2ecf20Sopenharmony_ci		memcpy(__get_dynamic_array(buf), buf, buf_len);
2538c2ecf20Sopenharmony_ci	),
2548c2ecf20Sopenharmony_ci
2558c2ecf20Sopenharmony_ci	TP_printk(
2568c2ecf20Sopenharmony_ci		"%s %s %d len %zu",
2578c2ecf20Sopenharmony_ci		__get_str(driver),
2588c2ecf20Sopenharmony_ci		__get_str(device),
2598c2ecf20Sopenharmony_ci		__entry->hw_type,
2608c2ecf20Sopenharmony_ci		__entry->buf_len
2618c2ecf20Sopenharmony_ci	)
2628c2ecf20Sopenharmony_ci);
2638c2ecf20Sopenharmony_ci
2648c2ecf20Sopenharmony_ciTRACE_EVENT(ath10k_htt_pktlog,
2658c2ecf20Sopenharmony_ci	    TP_PROTO(struct ath10k *ar, const void *buf, u16 buf_len),
2668c2ecf20Sopenharmony_ci
2678c2ecf20Sopenharmony_ci	TP_ARGS(ar, buf, buf_len),
2688c2ecf20Sopenharmony_ci
2698c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
2708c2ecf20Sopenharmony_ci		__string(device, dev_name(ar->dev))
2718c2ecf20Sopenharmony_ci		__string(driver, dev_driver_string(ar->dev))
2728c2ecf20Sopenharmony_ci		__field(u8, hw_type)
2738c2ecf20Sopenharmony_ci		__field(u16, buf_len)
2748c2ecf20Sopenharmony_ci		__dynamic_array(u8, pktlog, buf_len)
2758c2ecf20Sopenharmony_ci	),
2768c2ecf20Sopenharmony_ci
2778c2ecf20Sopenharmony_ci	TP_fast_assign(
2788c2ecf20Sopenharmony_ci		__assign_str(device, dev_name(ar->dev));
2798c2ecf20Sopenharmony_ci		__assign_str(driver, dev_driver_string(ar->dev));
2808c2ecf20Sopenharmony_ci		__entry->hw_type = ar->hw_rev;
2818c2ecf20Sopenharmony_ci		__entry->buf_len = buf_len;
2828c2ecf20Sopenharmony_ci		memcpy(__get_dynamic_array(pktlog), buf, buf_len);
2838c2ecf20Sopenharmony_ci	),
2848c2ecf20Sopenharmony_ci
2858c2ecf20Sopenharmony_ci	TP_printk(
2868c2ecf20Sopenharmony_ci		"%s %s %d size %hu",
2878c2ecf20Sopenharmony_ci		__get_str(driver),
2888c2ecf20Sopenharmony_ci		__get_str(device),
2898c2ecf20Sopenharmony_ci		__entry->hw_type,
2908c2ecf20Sopenharmony_ci		__entry->buf_len
2918c2ecf20Sopenharmony_ci	 )
2928c2ecf20Sopenharmony_ci);
2938c2ecf20Sopenharmony_ci
2948c2ecf20Sopenharmony_ciTRACE_EVENT(ath10k_htt_tx,
2958c2ecf20Sopenharmony_ci	    TP_PROTO(struct ath10k *ar, u16 msdu_id, u16 msdu_len,
2968c2ecf20Sopenharmony_ci		     u8 vdev_id, u8 tid),
2978c2ecf20Sopenharmony_ci
2988c2ecf20Sopenharmony_ci	TP_ARGS(ar, msdu_id, msdu_len, vdev_id, tid),
2998c2ecf20Sopenharmony_ci
3008c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
3018c2ecf20Sopenharmony_ci		__string(device, dev_name(ar->dev))
3028c2ecf20Sopenharmony_ci		__string(driver, dev_driver_string(ar->dev))
3038c2ecf20Sopenharmony_ci		__field(u16, msdu_id)
3048c2ecf20Sopenharmony_ci		__field(u16, msdu_len)
3058c2ecf20Sopenharmony_ci		__field(u8, vdev_id)
3068c2ecf20Sopenharmony_ci		__field(u8, tid)
3078c2ecf20Sopenharmony_ci	),
3088c2ecf20Sopenharmony_ci
3098c2ecf20Sopenharmony_ci	TP_fast_assign(
3108c2ecf20Sopenharmony_ci		__assign_str(device, dev_name(ar->dev));
3118c2ecf20Sopenharmony_ci		__assign_str(driver, dev_driver_string(ar->dev));
3128c2ecf20Sopenharmony_ci		__entry->msdu_id = msdu_id;
3138c2ecf20Sopenharmony_ci		__entry->msdu_len = msdu_len;
3148c2ecf20Sopenharmony_ci		__entry->vdev_id = vdev_id;
3158c2ecf20Sopenharmony_ci		__entry->tid = tid;
3168c2ecf20Sopenharmony_ci	),
3178c2ecf20Sopenharmony_ci
3188c2ecf20Sopenharmony_ci	TP_printk(
3198c2ecf20Sopenharmony_ci		"%s %s msdu_id %d msdu_len %d vdev_id %d tid %d",
3208c2ecf20Sopenharmony_ci		__get_str(driver),
3218c2ecf20Sopenharmony_ci		__get_str(device),
3228c2ecf20Sopenharmony_ci		__entry->msdu_id,
3238c2ecf20Sopenharmony_ci		__entry->msdu_len,
3248c2ecf20Sopenharmony_ci		__entry->vdev_id,
3258c2ecf20Sopenharmony_ci		__entry->tid
3268c2ecf20Sopenharmony_ci	 )
3278c2ecf20Sopenharmony_ci);
3288c2ecf20Sopenharmony_ci
3298c2ecf20Sopenharmony_ciTRACE_EVENT(ath10k_txrx_tx_unref,
3308c2ecf20Sopenharmony_ci	    TP_PROTO(struct ath10k *ar, u16 msdu_id),
3318c2ecf20Sopenharmony_ci
3328c2ecf20Sopenharmony_ci	TP_ARGS(ar, msdu_id),
3338c2ecf20Sopenharmony_ci
3348c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
3358c2ecf20Sopenharmony_ci		__string(device, dev_name(ar->dev))
3368c2ecf20Sopenharmony_ci		__string(driver, dev_driver_string(ar->dev))
3378c2ecf20Sopenharmony_ci		__field(u16, msdu_id)
3388c2ecf20Sopenharmony_ci	),
3398c2ecf20Sopenharmony_ci
3408c2ecf20Sopenharmony_ci	TP_fast_assign(
3418c2ecf20Sopenharmony_ci		__assign_str(device, dev_name(ar->dev));
3428c2ecf20Sopenharmony_ci		__assign_str(driver, dev_driver_string(ar->dev));
3438c2ecf20Sopenharmony_ci		__entry->msdu_id = msdu_id;
3448c2ecf20Sopenharmony_ci	),
3458c2ecf20Sopenharmony_ci
3468c2ecf20Sopenharmony_ci	TP_printk(
3478c2ecf20Sopenharmony_ci		"%s %s msdu_id %d",
3488c2ecf20Sopenharmony_ci		__get_str(driver),
3498c2ecf20Sopenharmony_ci		__get_str(device),
3508c2ecf20Sopenharmony_ci		__entry->msdu_id
3518c2ecf20Sopenharmony_ci	 )
3528c2ecf20Sopenharmony_ci);
3538c2ecf20Sopenharmony_ci
3548c2ecf20Sopenharmony_ciDECLARE_EVENT_CLASS(ath10k_hdr_event,
3558c2ecf20Sopenharmony_ci		    TP_PROTO(struct ath10k *ar, const void *data, size_t len),
3568c2ecf20Sopenharmony_ci
3578c2ecf20Sopenharmony_ci	TP_ARGS(ar, data, len),
3588c2ecf20Sopenharmony_ci
3598c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
3608c2ecf20Sopenharmony_ci		__string(device, dev_name(ar->dev))
3618c2ecf20Sopenharmony_ci		__string(driver, dev_driver_string(ar->dev))
3628c2ecf20Sopenharmony_ci		__field(size_t, len)
3638c2ecf20Sopenharmony_ci		__dynamic_array(u8, data, ath10k_frm_hdr_len(data, len))
3648c2ecf20Sopenharmony_ci	),
3658c2ecf20Sopenharmony_ci
3668c2ecf20Sopenharmony_ci	TP_fast_assign(
3678c2ecf20Sopenharmony_ci		__assign_str(device, dev_name(ar->dev));
3688c2ecf20Sopenharmony_ci		__assign_str(driver, dev_driver_string(ar->dev));
3698c2ecf20Sopenharmony_ci		__entry->len = ath10k_frm_hdr_len(data, len);
3708c2ecf20Sopenharmony_ci		memcpy(__get_dynamic_array(data), data, __entry->len);
3718c2ecf20Sopenharmony_ci	),
3728c2ecf20Sopenharmony_ci
3738c2ecf20Sopenharmony_ci	TP_printk(
3748c2ecf20Sopenharmony_ci		"%s %s len %zu\n",
3758c2ecf20Sopenharmony_ci		__get_str(driver),
3768c2ecf20Sopenharmony_ci		__get_str(device),
3778c2ecf20Sopenharmony_ci		__entry->len
3788c2ecf20Sopenharmony_ci	)
3798c2ecf20Sopenharmony_ci);
3808c2ecf20Sopenharmony_ci
3818c2ecf20Sopenharmony_ciDECLARE_EVENT_CLASS(ath10k_payload_event,
3828c2ecf20Sopenharmony_ci		    TP_PROTO(struct ath10k *ar, const void *data, size_t len),
3838c2ecf20Sopenharmony_ci
3848c2ecf20Sopenharmony_ci	TP_ARGS(ar, data, len),
3858c2ecf20Sopenharmony_ci
3868c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
3878c2ecf20Sopenharmony_ci		__string(device, dev_name(ar->dev))
3888c2ecf20Sopenharmony_ci		__string(driver, dev_driver_string(ar->dev))
3898c2ecf20Sopenharmony_ci		__field(size_t, len)
3908c2ecf20Sopenharmony_ci		__dynamic_array(u8, payload, (len -
3918c2ecf20Sopenharmony_ci					      ath10k_frm_hdr_len(data, len)))
3928c2ecf20Sopenharmony_ci	),
3938c2ecf20Sopenharmony_ci
3948c2ecf20Sopenharmony_ci	TP_fast_assign(
3958c2ecf20Sopenharmony_ci		__assign_str(device, dev_name(ar->dev));
3968c2ecf20Sopenharmony_ci		__assign_str(driver, dev_driver_string(ar->dev));
3978c2ecf20Sopenharmony_ci		__entry->len = len - ath10k_frm_hdr_len(data, len);
3988c2ecf20Sopenharmony_ci		memcpy(__get_dynamic_array(payload),
3998c2ecf20Sopenharmony_ci		       data + ath10k_frm_hdr_len(data, len), __entry->len);
4008c2ecf20Sopenharmony_ci	),
4018c2ecf20Sopenharmony_ci
4028c2ecf20Sopenharmony_ci	TP_printk(
4038c2ecf20Sopenharmony_ci		"%s %s len %zu\n",
4048c2ecf20Sopenharmony_ci		__get_str(driver),
4058c2ecf20Sopenharmony_ci		__get_str(device),
4068c2ecf20Sopenharmony_ci		__entry->len
4078c2ecf20Sopenharmony_ci	)
4088c2ecf20Sopenharmony_ci);
4098c2ecf20Sopenharmony_ci
4108c2ecf20Sopenharmony_ciDEFINE_EVENT(ath10k_hdr_event, ath10k_tx_hdr,
4118c2ecf20Sopenharmony_ci	     TP_PROTO(struct ath10k *ar, const void *data, size_t len),
4128c2ecf20Sopenharmony_ci	     TP_ARGS(ar, data, len)
4138c2ecf20Sopenharmony_ci);
4148c2ecf20Sopenharmony_ci
4158c2ecf20Sopenharmony_ciDEFINE_EVENT(ath10k_payload_event, ath10k_tx_payload,
4168c2ecf20Sopenharmony_ci	     TP_PROTO(struct ath10k *ar, const void *data, size_t len),
4178c2ecf20Sopenharmony_ci	     TP_ARGS(ar, data, len)
4188c2ecf20Sopenharmony_ci);
4198c2ecf20Sopenharmony_ci
4208c2ecf20Sopenharmony_ciDEFINE_EVENT(ath10k_hdr_event, ath10k_rx_hdr,
4218c2ecf20Sopenharmony_ci	     TP_PROTO(struct ath10k *ar, const void *data, size_t len),
4228c2ecf20Sopenharmony_ci	     TP_ARGS(ar, data, len)
4238c2ecf20Sopenharmony_ci);
4248c2ecf20Sopenharmony_ci
4258c2ecf20Sopenharmony_ciDEFINE_EVENT(ath10k_payload_event, ath10k_rx_payload,
4268c2ecf20Sopenharmony_ci	     TP_PROTO(struct ath10k *ar, const void *data, size_t len),
4278c2ecf20Sopenharmony_ci	     TP_ARGS(ar, data, len)
4288c2ecf20Sopenharmony_ci);
4298c2ecf20Sopenharmony_ci
4308c2ecf20Sopenharmony_ciTRACE_EVENT(ath10k_htt_rx_desc,
4318c2ecf20Sopenharmony_ci	    TP_PROTO(struct ath10k *ar, const void *data, size_t len),
4328c2ecf20Sopenharmony_ci
4338c2ecf20Sopenharmony_ci	TP_ARGS(ar, data, len),
4348c2ecf20Sopenharmony_ci
4358c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
4368c2ecf20Sopenharmony_ci		__string(device, dev_name(ar->dev))
4378c2ecf20Sopenharmony_ci		__string(driver, dev_driver_string(ar->dev))
4388c2ecf20Sopenharmony_ci		__field(u8, hw_type)
4398c2ecf20Sopenharmony_ci		__field(u16, len)
4408c2ecf20Sopenharmony_ci		__dynamic_array(u8, rxdesc, len)
4418c2ecf20Sopenharmony_ci	),
4428c2ecf20Sopenharmony_ci
4438c2ecf20Sopenharmony_ci	TP_fast_assign(
4448c2ecf20Sopenharmony_ci		__assign_str(device, dev_name(ar->dev));
4458c2ecf20Sopenharmony_ci		__assign_str(driver, dev_driver_string(ar->dev));
4468c2ecf20Sopenharmony_ci		__entry->hw_type = ar->hw_rev;
4478c2ecf20Sopenharmony_ci		__entry->len = len;
4488c2ecf20Sopenharmony_ci		memcpy(__get_dynamic_array(rxdesc), data, len);
4498c2ecf20Sopenharmony_ci	),
4508c2ecf20Sopenharmony_ci
4518c2ecf20Sopenharmony_ci	TP_printk(
4528c2ecf20Sopenharmony_ci		"%s %s %d rxdesc len %d",
4538c2ecf20Sopenharmony_ci		__get_str(driver),
4548c2ecf20Sopenharmony_ci		__get_str(device),
4558c2ecf20Sopenharmony_ci		__entry->hw_type,
4568c2ecf20Sopenharmony_ci		__entry->len
4578c2ecf20Sopenharmony_ci	 )
4588c2ecf20Sopenharmony_ci);
4598c2ecf20Sopenharmony_ci
4608c2ecf20Sopenharmony_ciTRACE_EVENT(ath10k_wmi_diag_container,
4618c2ecf20Sopenharmony_ci	    TP_PROTO(struct ath10k *ar,
4628c2ecf20Sopenharmony_ci		     u8 type,
4638c2ecf20Sopenharmony_ci		     u32 timestamp,
4648c2ecf20Sopenharmony_ci		     u32 code,
4658c2ecf20Sopenharmony_ci		     u16 len,
4668c2ecf20Sopenharmony_ci		     const void *data),
4678c2ecf20Sopenharmony_ci
4688c2ecf20Sopenharmony_ci	TP_ARGS(ar, type, timestamp, code, len, data),
4698c2ecf20Sopenharmony_ci
4708c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
4718c2ecf20Sopenharmony_ci		__string(device, dev_name(ar->dev))
4728c2ecf20Sopenharmony_ci		__string(driver, dev_driver_string(ar->dev))
4738c2ecf20Sopenharmony_ci		__field(u8, type)
4748c2ecf20Sopenharmony_ci		__field(u32, timestamp)
4758c2ecf20Sopenharmony_ci		__field(u32, code)
4768c2ecf20Sopenharmony_ci		__field(u16, len)
4778c2ecf20Sopenharmony_ci		__dynamic_array(u8, data, len)
4788c2ecf20Sopenharmony_ci	),
4798c2ecf20Sopenharmony_ci
4808c2ecf20Sopenharmony_ci	TP_fast_assign(
4818c2ecf20Sopenharmony_ci		__assign_str(device, dev_name(ar->dev));
4828c2ecf20Sopenharmony_ci		__assign_str(driver, dev_driver_string(ar->dev));
4838c2ecf20Sopenharmony_ci		__entry->type = type;
4848c2ecf20Sopenharmony_ci		__entry->timestamp = timestamp;
4858c2ecf20Sopenharmony_ci		__entry->code = code;
4868c2ecf20Sopenharmony_ci		__entry->len = len;
4878c2ecf20Sopenharmony_ci		memcpy(__get_dynamic_array(data), data, len);
4888c2ecf20Sopenharmony_ci	),
4898c2ecf20Sopenharmony_ci
4908c2ecf20Sopenharmony_ci	TP_printk(
4918c2ecf20Sopenharmony_ci		"%s %s diag container type %hhu timestamp %u code %u len %d",
4928c2ecf20Sopenharmony_ci		__get_str(driver),
4938c2ecf20Sopenharmony_ci		__get_str(device),
4948c2ecf20Sopenharmony_ci		__entry->type,
4958c2ecf20Sopenharmony_ci		__entry->timestamp,
4968c2ecf20Sopenharmony_ci		__entry->code,
4978c2ecf20Sopenharmony_ci		__entry->len
4988c2ecf20Sopenharmony_ci	)
4998c2ecf20Sopenharmony_ci);
5008c2ecf20Sopenharmony_ci
5018c2ecf20Sopenharmony_ciTRACE_EVENT(ath10k_wmi_diag,
5028c2ecf20Sopenharmony_ci	    TP_PROTO(struct ath10k *ar, const void *data, size_t len),
5038c2ecf20Sopenharmony_ci
5048c2ecf20Sopenharmony_ci	TP_ARGS(ar, data, len),
5058c2ecf20Sopenharmony_ci
5068c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
5078c2ecf20Sopenharmony_ci		__string(device, dev_name(ar->dev))
5088c2ecf20Sopenharmony_ci		__string(driver, dev_driver_string(ar->dev))
5098c2ecf20Sopenharmony_ci		__field(u16, len)
5108c2ecf20Sopenharmony_ci		__dynamic_array(u8, data, len)
5118c2ecf20Sopenharmony_ci	),
5128c2ecf20Sopenharmony_ci
5138c2ecf20Sopenharmony_ci	TP_fast_assign(
5148c2ecf20Sopenharmony_ci		__assign_str(device, dev_name(ar->dev));
5158c2ecf20Sopenharmony_ci		__assign_str(driver, dev_driver_string(ar->dev));
5168c2ecf20Sopenharmony_ci		__entry->len = len;
5178c2ecf20Sopenharmony_ci		memcpy(__get_dynamic_array(data), data, len);
5188c2ecf20Sopenharmony_ci	),
5198c2ecf20Sopenharmony_ci
5208c2ecf20Sopenharmony_ci	TP_printk(
5218c2ecf20Sopenharmony_ci		"%s %s tlv diag len %d",
5228c2ecf20Sopenharmony_ci		__get_str(driver),
5238c2ecf20Sopenharmony_ci		__get_str(device),
5248c2ecf20Sopenharmony_ci		__entry->len
5258c2ecf20Sopenharmony_ci	)
5268c2ecf20Sopenharmony_ci);
5278c2ecf20Sopenharmony_ci
5288c2ecf20Sopenharmony_ci#endif /* _TRACE_H_ || TRACE_HEADER_MULTI_READ*/
5298c2ecf20Sopenharmony_ci
5308c2ecf20Sopenharmony_ci/* we don't want to use include/trace/events */
5318c2ecf20Sopenharmony_ci#undef TRACE_INCLUDE_PATH
5328c2ecf20Sopenharmony_ci#define TRACE_INCLUDE_PATH .
5338c2ecf20Sopenharmony_ci#undef TRACE_INCLUDE_FILE
5348c2ecf20Sopenharmony_ci#define TRACE_INCLUDE_FILE trace
5358c2ecf20Sopenharmony_ci
5368c2ecf20Sopenharmony_ci/* This part must be outside protection */
5378c2ecf20Sopenharmony_ci#include <trace/define_trace.h>
538