162306a36Sopenharmony_ci/* SPDX-License-Identifier: ISC */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright (c) 2005-2011 Atheros Communications Inc.
462306a36Sopenharmony_ci * Copyright (c) 2011-2016 Qualcomm Atheros, Inc.
562306a36Sopenharmony_ci */
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#if !defined(_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <linux/tracepoint.h>
1062306a36Sopenharmony_ci#include "core.h"
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#if !defined(_TRACE_H_)
1362306a36Sopenharmony_cistatic inline u32 ath10k_frm_hdr_len(const void *buf, size_t len)
1462306a36Sopenharmony_ci{
1562306a36Sopenharmony_ci	const struct ieee80211_hdr *hdr = buf;
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci	/* In some rare cases (e.g. fcs error) device reports frame buffer
1862306a36Sopenharmony_ci	 * shorter than what frame header implies (e.g. len = 0). The buffer
1962306a36Sopenharmony_ci	 * can still be accessed so do a simple min() to guarantee caller
2062306a36Sopenharmony_ci	 * doesn't get value greater than len.
2162306a36Sopenharmony_ci	 */
2262306a36Sopenharmony_ci	return min_t(u32, len, ieee80211_hdrlen(hdr->frame_control));
2362306a36Sopenharmony_ci}
2462306a36Sopenharmony_ci#endif
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci#define _TRACE_H_
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci/* create empty functions when tracing is disabled */
2962306a36Sopenharmony_ci#if !defined(CONFIG_ATH10K_TRACING)
3062306a36Sopenharmony_ci#undef TRACE_EVENT
3162306a36Sopenharmony_ci#define TRACE_EVENT(name, proto, ...) \
3262306a36Sopenharmony_cistatic inline void trace_ ## name(proto) {} \
3362306a36Sopenharmony_cistatic inline bool trace_##name##_enabled(void) \
3462306a36Sopenharmony_ci{						\
3562306a36Sopenharmony_ci	return false;				\
3662306a36Sopenharmony_ci}
3762306a36Sopenharmony_ci#undef DECLARE_EVENT_CLASS
3862306a36Sopenharmony_ci#define DECLARE_EVENT_CLASS(...)
3962306a36Sopenharmony_ci#undef DEFINE_EVENT
4062306a36Sopenharmony_ci#define DEFINE_EVENT(evt_class, name, proto, ...) \
4162306a36Sopenharmony_cistatic inline void trace_ ## name(proto) {}
4262306a36Sopenharmony_ci#endif /* !CONFIG_ATH10K_TRACING || __CHECKER__ */
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci#undef TRACE_SYSTEM
4562306a36Sopenharmony_ci#define TRACE_SYSTEM ath10k
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci#define ATH10K_MSG_MAX 400
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ciDECLARE_EVENT_CLASS(ath10k_log_event,
5062306a36Sopenharmony_ci	TP_PROTO(struct ath10k *ar, struct va_format *vaf),
5162306a36Sopenharmony_ci	TP_ARGS(ar, vaf),
5262306a36Sopenharmony_ci	TP_STRUCT__entry(
5362306a36Sopenharmony_ci		__string(device, dev_name(ar->dev))
5462306a36Sopenharmony_ci		__string(driver, dev_driver_string(ar->dev))
5562306a36Sopenharmony_ci		__vstring(msg, vaf->fmt, vaf->va)
5662306a36Sopenharmony_ci	),
5762306a36Sopenharmony_ci	TP_fast_assign(
5862306a36Sopenharmony_ci		__assign_str(device, dev_name(ar->dev));
5962306a36Sopenharmony_ci		__assign_str(driver, dev_driver_string(ar->dev));
6062306a36Sopenharmony_ci		__assign_vstr(msg, vaf->fmt, vaf->va);
6162306a36Sopenharmony_ci	),
6262306a36Sopenharmony_ci	TP_printk(
6362306a36Sopenharmony_ci		"%s %s %s",
6462306a36Sopenharmony_ci		__get_str(driver),
6562306a36Sopenharmony_ci		__get_str(device),
6662306a36Sopenharmony_ci		__get_str(msg)
6762306a36Sopenharmony_ci	)
6862306a36Sopenharmony_ci);
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ciDEFINE_EVENT(ath10k_log_event, ath10k_log_err,
7162306a36Sopenharmony_ci	     TP_PROTO(struct ath10k *ar, struct va_format *vaf),
7262306a36Sopenharmony_ci	     TP_ARGS(ar, vaf)
7362306a36Sopenharmony_ci);
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_ciDEFINE_EVENT(ath10k_log_event, ath10k_log_warn,
7662306a36Sopenharmony_ci	     TP_PROTO(struct ath10k *ar, struct va_format *vaf),
7762306a36Sopenharmony_ci	     TP_ARGS(ar, vaf)
7862306a36Sopenharmony_ci);
7962306a36Sopenharmony_ci
8062306a36Sopenharmony_ciDEFINE_EVENT(ath10k_log_event, ath10k_log_info,
8162306a36Sopenharmony_ci	     TP_PROTO(struct ath10k *ar, struct va_format *vaf),
8262306a36Sopenharmony_ci	     TP_ARGS(ar, vaf)
8362306a36Sopenharmony_ci);
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ciTRACE_EVENT(ath10k_log_dbg,
8662306a36Sopenharmony_ci	TP_PROTO(struct ath10k *ar, unsigned int level, struct va_format *vaf),
8762306a36Sopenharmony_ci	TP_ARGS(ar, level, vaf),
8862306a36Sopenharmony_ci	TP_STRUCT__entry(
8962306a36Sopenharmony_ci		__string(device, dev_name(ar->dev))
9062306a36Sopenharmony_ci		__string(driver, dev_driver_string(ar->dev))
9162306a36Sopenharmony_ci		__field(unsigned int, level)
9262306a36Sopenharmony_ci		__vstring(msg, vaf->fmt, vaf->va)
9362306a36Sopenharmony_ci	),
9462306a36Sopenharmony_ci	TP_fast_assign(
9562306a36Sopenharmony_ci		__assign_str(device, dev_name(ar->dev));
9662306a36Sopenharmony_ci		__assign_str(driver, dev_driver_string(ar->dev));
9762306a36Sopenharmony_ci		__entry->level = level;
9862306a36Sopenharmony_ci		__assign_vstr(msg, vaf->fmt, vaf->va);
9962306a36Sopenharmony_ci	),
10062306a36Sopenharmony_ci	TP_printk(
10162306a36Sopenharmony_ci		"%s %s %s",
10262306a36Sopenharmony_ci		__get_str(driver),
10362306a36Sopenharmony_ci		__get_str(device),
10462306a36Sopenharmony_ci		__get_str(msg)
10562306a36Sopenharmony_ci	)
10662306a36Sopenharmony_ci);
10762306a36Sopenharmony_ci
10862306a36Sopenharmony_ciTRACE_EVENT(ath10k_log_dbg_dump,
10962306a36Sopenharmony_ci	TP_PROTO(struct ath10k *ar, const char *msg, const char *prefix,
11062306a36Sopenharmony_ci		 const void *buf, size_t buf_len),
11162306a36Sopenharmony_ci
11262306a36Sopenharmony_ci	TP_ARGS(ar, msg, prefix, buf, buf_len),
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_ci	TP_STRUCT__entry(
11562306a36Sopenharmony_ci		__string(device, dev_name(ar->dev))
11662306a36Sopenharmony_ci		__string(driver, dev_driver_string(ar->dev))
11762306a36Sopenharmony_ci		__string(msg, msg)
11862306a36Sopenharmony_ci		__string(prefix, prefix)
11962306a36Sopenharmony_ci		__field(size_t, buf_len)
12062306a36Sopenharmony_ci		__dynamic_array(u8, buf, buf_len)
12162306a36Sopenharmony_ci	),
12262306a36Sopenharmony_ci
12362306a36Sopenharmony_ci	TP_fast_assign(
12462306a36Sopenharmony_ci		__assign_str(device, dev_name(ar->dev));
12562306a36Sopenharmony_ci		__assign_str(driver, dev_driver_string(ar->dev));
12662306a36Sopenharmony_ci		__assign_str(msg, msg);
12762306a36Sopenharmony_ci		__assign_str(prefix, prefix);
12862306a36Sopenharmony_ci		__entry->buf_len = buf_len;
12962306a36Sopenharmony_ci		memcpy(__get_dynamic_array(buf), buf, buf_len);
13062306a36Sopenharmony_ci	),
13162306a36Sopenharmony_ci
13262306a36Sopenharmony_ci	TP_printk(
13362306a36Sopenharmony_ci		"%s %s %s/%s\n",
13462306a36Sopenharmony_ci		__get_str(driver),
13562306a36Sopenharmony_ci		__get_str(device),
13662306a36Sopenharmony_ci		__get_str(prefix),
13762306a36Sopenharmony_ci		__get_str(msg)
13862306a36Sopenharmony_ci	)
13962306a36Sopenharmony_ci);
14062306a36Sopenharmony_ci
14162306a36Sopenharmony_ciTRACE_EVENT(ath10k_wmi_cmd,
14262306a36Sopenharmony_ci	TP_PROTO(struct ath10k *ar, int id, const void *buf, size_t buf_len),
14362306a36Sopenharmony_ci
14462306a36Sopenharmony_ci	TP_ARGS(ar, id, buf, buf_len),
14562306a36Sopenharmony_ci
14662306a36Sopenharmony_ci	TP_STRUCT__entry(
14762306a36Sopenharmony_ci		__string(device, dev_name(ar->dev))
14862306a36Sopenharmony_ci		__string(driver, dev_driver_string(ar->dev))
14962306a36Sopenharmony_ci		__field(unsigned int, id)
15062306a36Sopenharmony_ci		__field(size_t, buf_len)
15162306a36Sopenharmony_ci		__dynamic_array(u8, buf, buf_len)
15262306a36Sopenharmony_ci	),
15362306a36Sopenharmony_ci
15462306a36Sopenharmony_ci	TP_fast_assign(
15562306a36Sopenharmony_ci		__assign_str(device, dev_name(ar->dev));
15662306a36Sopenharmony_ci		__assign_str(driver, dev_driver_string(ar->dev));
15762306a36Sopenharmony_ci		__entry->id = id;
15862306a36Sopenharmony_ci		__entry->buf_len = buf_len;
15962306a36Sopenharmony_ci		memcpy(__get_dynamic_array(buf), buf, buf_len);
16062306a36Sopenharmony_ci	),
16162306a36Sopenharmony_ci
16262306a36Sopenharmony_ci	TP_printk(
16362306a36Sopenharmony_ci		"%s %s id %d len %zu",
16462306a36Sopenharmony_ci		__get_str(driver),
16562306a36Sopenharmony_ci		__get_str(device),
16662306a36Sopenharmony_ci		__entry->id,
16762306a36Sopenharmony_ci		__entry->buf_len
16862306a36Sopenharmony_ci	)
16962306a36Sopenharmony_ci);
17062306a36Sopenharmony_ci
17162306a36Sopenharmony_ciTRACE_EVENT(ath10k_wmi_event,
17262306a36Sopenharmony_ci	TP_PROTO(struct ath10k *ar, int id, const void *buf, size_t buf_len),
17362306a36Sopenharmony_ci
17462306a36Sopenharmony_ci	TP_ARGS(ar, id, buf, buf_len),
17562306a36Sopenharmony_ci
17662306a36Sopenharmony_ci	TP_STRUCT__entry(
17762306a36Sopenharmony_ci		__string(device, dev_name(ar->dev))
17862306a36Sopenharmony_ci		__string(driver, dev_driver_string(ar->dev))
17962306a36Sopenharmony_ci		__field(unsigned int, id)
18062306a36Sopenharmony_ci		__field(size_t, buf_len)
18162306a36Sopenharmony_ci		__dynamic_array(u8, buf, buf_len)
18262306a36Sopenharmony_ci	),
18362306a36Sopenharmony_ci
18462306a36Sopenharmony_ci	TP_fast_assign(
18562306a36Sopenharmony_ci		__assign_str(device, dev_name(ar->dev));
18662306a36Sopenharmony_ci		__assign_str(driver, dev_driver_string(ar->dev));
18762306a36Sopenharmony_ci		__entry->id = id;
18862306a36Sopenharmony_ci		__entry->buf_len = buf_len;
18962306a36Sopenharmony_ci		memcpy(__get_dynamic_array(buf), buf, buf_len);
19062306a36Sopenharmony_ci	),
19162306a36Sopenharmony_ci
19262306a36Sopenharmony_ci	TP_printk(
19362306a36Sopenharmony_ci		"%s %s id %d len %zu",
19462306a36Sopenharmony_ci		__get_str(driver),
19562306a36Sopenharmony_ci		__get_str(device),
19662306a36Sopenharmony_ci		__entry->id,
19762306a36Sopenharmony_ci		__entry->buf_len
19862306a36Sopenharmony_ci	)
19962306a36Sopenharmony_ci);
20062306a36Sopenharmony_ci
20162306a36Sopenharmony_ciTRACE_EVENT(ath10k_htt_stats,
20262306a36Sopenharmony_ci	TP_PROTO(struct ath10k *ar, const void *buf, size_t buf_len),
20362306a36Sopenharmony_ci
20462306a36Sopenharmony_ci	TP_ARGS(ar, buf, buf_len),
20562306a36Sopenharmony_ci
20662306a36Sopenharmony_ci	TP_STRUCT__entry(
20762306a36Sopenharmony_ci		__string(device, dev_name(ar->dev))
20862306a36Sopenharmony_ci		__string(driver, dev_driver_string(ar->dev))
20962306a36Sopenharmony_ci		__field(size_t, buf_len)
21062306a36Sopenharmony_ci		__dynamic_array(u8, buf, buf_len)
21162306a36Sopenharmony_ci	),
21262306a36Sopenharmony_ci
21362306a36Sopenharmony_ci	TP_fast_assign(
21462306a36Sopenharmony_ci		__assign_str(device, dev_name(ar->dev));
21562306a36Sopenharmony_ci		__assign_str(driver, dev_driver_string(ar->dev));
21662306a36Sopenharmony_ci		__entry->buf_len = buf_len;
21762306a36Sopenharmony_ci		memcpy(__get_dynamic_array(buf), buf, buf_len);
21862306a36Sopenharmony_ci	),
21962306a36Sopenharmony_ci
22062306a36Sopenharmony_ci	TP_printk(
22162306a36Sopenharmony_ci		"%s %s len %zu",
22262306a36Sopenharmony_ci		__get_str(driver),
22362306a36Sopenharmony_ci		__get_str(device),
22462306a36Sopenharmony_ci		__entry->buf_len
22562306a36Sopenharmony_ci	)
22662306a36Sopenharmony_ci);
22762306a36Sopenharmony_ci
22862306a36Sopenharmony_ciTRACE_EVENT(ath10k_wmi_dbglog,
22962306a36Sopenharmony_ci	TP_PROTO(struct ath10k *ar, const void *buf, size_t buf_len),
23062306a36Sopenharmony_ci
23162306a36Sopenharmony_ci	TP_ARGS(ar, buf, buf_len),
23262306a36Sopenharmony_ci
23362306a36Sopenharmony_ci	TP_STRUCT__entry(
23462306a36Sopenharmony_ci		__string(device, dev_name(ar->dev))
23562306a36Sopenharmony_ci		__string(driver, dev_driver_string(ar->dev))
23662306a36Sopenharmony_ci		__field(u8, hw_type)
23762306a36Sopenharmony_ci		__field(size_t, buf_len)
23862306a36Sopenharmony_ci		__dynamic_array(u8, buf, buf_len)
23962306a36Sopenharmony_ci	),
24062306a36Sopenharmony_ci
24162306a36Sopenharmony_ci	TP_fast_assign(
24262306a36Sopenharmony_ci		__assign_str(device, dev_name(ar->dev));
24362306a36Sopenharmony_ci		__assign_str(driver, dev_driver_string(ar->dev));
24462306a36Sopenharmony_ci		__entry->hw_type = ar->hw_rev;
24562306a36Sopenharmony_ci		__entry->buf_len = buf_len;
24662306a36Sopenharmony_ci		memcpy(__get_dynamic_array(buf), buf, buf_len);
24762306a36Sopenharmony_ci	),
24862306a36Sopenharmony_ci
24962306a36Sopenharmony_ci	TP_printk(
25062306a36Sopenharmony_ci		"%s %s %d len %zu",
25162306a36Sopenharmony_ci		__get_str(driver),
25262306a36Sopenharmony_ci		__get_str(device),
25362306a36Sopenharmony_ci		__entry->hw_type,
25462306a36Sopenharmony_ci		__entry->buf_len
25562306a36Sopenharmony_ci	)
25662306a36Sopenharmony_ci);
25762306a36Sopenharmony_ci
25862306a36Sopenharmony_ciTRACE_EVENT(ath10k_htt_pktlog,
25962306a36Sopenharmony_ci	    TP_PROTO(struct ath10k *ar, const void *buf, u16 buf_len),
26062306a36Sopenharmony_ci
26162306a36Sopenharmony_ci	TP_ARGS(ar, buf, buf_len),
26262306a36Sopenharmony_ci
26362306a36Sopenharmony_ci	TP_STRUCT__entry(
26462306a36Sopenharmony_ci		__string(device, dev_name(ar->dev))
26562306a36Sopenharmony_ci		__string(driver, dev_driver_string(ar->dev))
26662306a36Sopenharmony_ci		__field(u8, hw_type)
26762306a36Sopenharmony_ci		__field(u16, buf_len)
26862306a36Sopenharmony_ci		__dynamic_array(u8, pktlog, buf_len)
26962306a36Sopenharmony_ci	),
27062306a36Sopenharmony_ci
27162306a36Sopenharmony_ci	TP_fast_assign(
27262306a36Sopenharmony_ci		__assign_str(device, dev_name(ar->dev));
27362306a36Sopenharmony_ci		__assign_str(driver, dev_driver_string(ar->dev));
27462306a36Sopenharmony_ci		__entry->hw_type = ar->hw_rev;
27562306a36Sopenharmony_ci		__entry->buf_len = buf_len;
27662306a36Sopenharmony_ci		memcpy(__get_dynamic_array(pktlog), buf, buf_len);
27762306a36Sopenharmony_ci	),
27862306a36Sopenharmony_ci
27962306a36Sopenharmony_ci	TP_printk(
28062306a36Sopenharmony_ci		"%s %s %d size %u",
28162306a36Sopenharmony_ci		__get_str(driver),
28262306a36Sopenharmony_ci		__get_str(device),
28362306a36Sopenharmony_ci		__entry->hw_type,
28462306a36Sopenharmony_ci		__entry->buf_len
28562306a36Sopenharmony_ci	 )
28662306a36Sopenharmony_ci);
28762306a36Sopenharmony_ci
28862306a36Sopenharmony_ciTRACE_EVENT(ath10k_htt_tx,
28962306a36Sopenharmony_ci	    TP_PROTO(struct ath10k *ar, u16 msdu_id, u16 msdu_len,
29062306a36Sopenharmony_ci		     u8 vdev_id, u8 tid),
29162306a36Sopenharmony_ci
29262306a36Sopenharmony_ci	TP_ARGS(ar, msdu_id, msdu_len, vdev_id, tid),
29362306a36Sopenharmony_ci
29462306a36Sopenharmony_ci	TP_STRUCT__entry(
29562306a36Sopenharmony_ci		__string(device, dev_name(ar->dev))
29662306a36Sopenharmony_ci		__string(driver, dev_driver_string(ar->dev))
29762306a36Sopenharmony_ci		__field(u16, msdu_id)
29862306a36Sopenharmony_ci		__field(u16, msdu_len)
29962306a36Sopenharmony_ci		__field(u8, vdev_id)
30062306a36Sopenharmony_ci		__field(u8, tid)
30162306a36Sopenharmony_ci	),
30262306a36Sopenharmony_ci
30362306a36Sopenharmony_ci	TP_fast_assign(
30462306a36Sopenharmony_ci		__assign_str(device, dev_name(ar->dev));
30562306a36Sopenharmony_ci		__assign_str(driver, dev_driver_string(ar->dev));
30662306a36Sopenharmony_ci		__entry->msdu_id = msdu_id;
30762306a36Sopenharmony_ci		__entry->msdu_len = msdu_len;
30862306a36Sopenharmony_ci		__entry->vdev_id = vdev_id;
30962306a36Sopenharmony_ci		__entry->tid = tid;
31062306a36Sopenharmony_ci	),
31162306a36Sopenharmony_ci
31262306a36Sopenharmony_ci	TP_printk(
31362306a36Sopenharmony_ci		"%s %s msdu_id %d msdu_len %d vdev_id %d tid %d",
31462306a36Sopenharmony_ci		__get_str(driver),
31562306a36Sopenharmony_ci		__get_str(device),
31662306a36Sopenharmony_ci		__entry->msdu_id,
31762306a36Sopenharmony_ci		__entry->msdu_len,
31862306a36Sopenharmony_ci		__entry->vdev_id,
31962306a36Sopenharmony_ci		__entry->tid
32062306a36Sopenharmony_ci	 )
32162306a36Sopenharmony_ci);
32262306a36Sopenharmony_ci
32362306a36Sopenharmony_ciTRACE_EVENT(ath10k_txrx_tx_unref,
32462306a36Sopenharmony_ci	    TP_PROTO(struct ath10k *ar, u16 msdu_id),
32562306a36Sopenharmony_ci
32662306a36Sopenharmony_ci	TP_ARGS(ar, msdu_id),
32762306a36Sopenharmony_ci
32862306a36Sopenharmony_ci	TP_STRUCT__entry(
32962306a36Sopenharmony_ci		__string(device, dev_name(ar->dev))
33062306a36Sopenharmony_ci		__string(driver, dev_driver_string(ar->dev))
33162306a36Sopenharmony_ci		__field(u16, msdu_id)
33262306a36Sopenharmony_ci	),
33362306a36Sopenharmony_ci
33462306a36Sopenharmony_ci	TP_fast_assign(
33562306a36Sopenharmony_ci		__assign_str(device, dev_name(ar->dev));
33662306a36Sopenharmony_ci		__assign_str(driver, dev_driver_string(ar->dev));
33762306a36Sopenharmony_ci		__entry->msdu_id = msdu_id;
33862306a36Sopenharmony_ci	),
33962306a36Sopenharmony_ci
34062306a36Sopenharmony_ci	TP_printk(
34162306a36Sopenharmony_ci		"%s %s msdu_id %d",
34262306a36Sopenharmony_ci		__get_str(driver),
34362306a36Sopenharmony_ci		__get_str(device),
34462306a36Sopenharmony_ci		__entry->msdu_id
34562306a36Sopenharmony_ci	 )
34662306a36Sopenharmony_ci);
34762306a36Sopenharmony_ci
34862306a36Sopenharmony_ciDECLARE_EVENT_CLASS(ath10k_hdr_event,
34962306a36Sopenharmony_ci		    TP_PROTO(struct ath10k *ar, const void *data, size_t len),
35062306a36Sopenharmony_ci
35162306a36Sopenharmony_ci	TP_ARGS(ar, data, len),
35262306a36Sopenharmony_ci
35362306a36Sopenharmony_ci	TP_STRUCT__entry(
35462306a36Sopenharmony_ci		__string(device, dev_name(ar->dev))
35562306a36Sopenharmony_ci		__string(driver, dev_driver_string(ar->dev))
35662306a36Sopenharmony_ci		__field(size_t, len)
35762306a36Sopenharmony_ci		__dynamic_array(u8, data, ath10k_frm_hdr_len(data, len))
35862306a36Sopenharmony_ci	),
35962306a36Sopenharmony_ci
36062306a36Sopenharmony_ci	TP_fast_assign(
36162306a36Sopenharmony_ci		__assign_str(device, dev_name(ar->dev));
36262306a36Sopenharmony_ci		__assign_str(driver, dev_driver_string(ar->dev));
36362306a36Sopenharmony_ci		__entry->len = ath10k_frm_hdr_len(data, len);
36462306a36Sopenharmony_ci		memcpy(__get_dynamic_array(data), data, __entry->len);
36562306a36Sopenharmony_ci	),
36662306a36Sopenharmony_ci
36762306a36Sopenharmony_ci	TP_printk(
36862306a36Sopenharmony_ci		"%s %s len %zu\n",
36962306a36Sopenharmony_ci		__get_str(driver),
37062306a36Sopenharmony_ci		__get_str(device),
37162306a36Sopenharmony_ci		__entry->len
37262306a36Sopenharmony_ci	)
37362306a36Sopenharmony_ci);
37462306a36Sopenharmony_ci
37562306a36Sopenharmony_ciDECLARE_EVENT_CLASS(ath10k_payload_event,
37662306a36Sopenharmony_ci		    TP_PROTO(struct ath10k *ar, const void *data, size_t len),
37762306a36Sopenharmony_ci
37862306a36Sopenharmony_ci	TP_ARGS(ar, data, len),
37962306a36Sopenharmony_ci
38062306a36Sopenharmony_ci	TP_STRUCT__entry(
38162306a36Sopenharmony_ci		__string(device, dev_name(ar->dev))
38262306a36Sopenharmony_ci		__string(driver, dev_driver_string(ar->dev))
38362306a36Sopenharmony_ci		__field(size_t, len)
38462306a36Sopenharmony_ci		__dynamic_array(u8, payload, (len -
38562306a36Sopenharmony_ci					      ath10k_frm_hdr_len(data, len)))
38662306a36Sopenharmony_ci	),
38762306a36Sopenharmony_ci
38862306a36Sopenharmony_ci	TP_fast_assign(
38962306a36Sopenharmony_ci		__assign_str(device, dev_name(ar->dev));
39062306a36Sopenharmony_ci		__assign_str(driver, dev_driver_string(ar->dev));
39162306a36Sopenharmony_ci		__entry->len = len - ath10k_frm_hdr_len(data, len);
39262306a36Sopenharmony_ci		memcpy(__get_dynamic_array(payload),
39362306a36Sopenharmony_ci		       data + ath10k_frm_hdr_len(data, len), __entry->len);
39462306a36Sopenharmony_ci	),
39562306a36Sopenharmony_ci
39662306a36Sopenharmony_ci	TP_printk(
39762306a36Sopenharmony_ci		"%s %s len %zu\n",
39862306a36Sopenharmony_ci		__get_str(driver),
39962306a36Sopenharmony_ci		__get_str(device),
40062306a36Sopenharmony_ci		__entry->len
40162306a36Sopenharmony_ci	)
40262306a36Sopenharmony_ci);
40362306a36Sopenharmony_ci
40462306a36Sopenharmony_ciDEFINE_EVENT(ath10k_hdr_event, ath10k_tx_hdr,
40562306a36Sopenharmony_ci	     TP_PROTO(struct ath10k *ar, const void *data, size_t len),
40662306a36Sopenharmony_ci	     TP_ARGS(ar, data, len)
40762306a36Sopenharmony_ci);
40862306a36Sopenharmony_ci
40962306a36Sopenharmony_ciDEFINE_EVENT(ath10k_payload_event, ath10k_tx_payload,
41062306a36Sopenharmony_ci	     TP_PROTO(struct ath10k *ar, const void *data, size_t len),
41162306a36Sopenharmony_ci	     TP_ARGS(ar, data, len)
41262306a36Sopenharmony_ci);
41362306a36Sopenharmony_ci
41462306a36Sopenharmony_ciDEFINE_EVENT(ath10k_hdr_event, ath10k_rx_hdr,
41562306a36Sopenharmony_ci	     TP_PROTO(struct ath10k *ar, const void *data, size_t len),
41662306a36Sopenharmony_ci	     TP_ARGS(ar, data, len)
41762306a36Sopenharmony_ci);
41862306a36Sopenharmony_ci
41962306a36Sopenharmony_ciDEFINE_EVENT(ath10k_payload_event, ath10k_rx_payload,
42062306a36Sopenharmony_ci	     TP_PROTO(struct ath10k *ar, const void *data, size_t len),
42162306a36Sopenharmony_ci	     TP_ARGS(ar, data, len)
42262306a36Sopenharmony_ci);
42362306a36Sopenharmony_ci
42462306a36Sopenharmony_ciTRACE_EVENT(ath10k_htt_rx_desc,
42562306a36Sopenharmony_ci	    TP_PROTO(struct ath10k *ar, const void *data, size_t len),
42662306a36Sopenharmony_ci
42762306a36Sopenharmony_ci	TP_ARGS(ar, data, len),
42862306a36Sopenharmony_ci
42962306a36Sopenharmony_ci	TP_STRUCT__entry(
43062306a36Sopenharmony_ci		__string(device, dev_name(ar->dev))
43162306a36Sopenharmony_ci		__string(driver, dev_driver_string(ar->dev))
43262306a36Sopenharmony_ci		__field(u8, hw_type)
43362306a36Sopenharmony_ci		__field(u16, len)
43462306a36Sopenharmony_ci		__dynamic_array(u8, rxdesc, len)
43562306a36Sopenharmony_ci	),
43662306a36Sopenharmony_ci
43762306a36Sopenharmony_ci	TP_fast_assign(
43862306a36Sopenharmony_ci		__assign_str(device, dev_name(ar->dev));
43962306a36Sopenharmony_ci		__assign_str(driver, dev_driver_string(ar->dev));
44062306a36Sopenharmony_ci		__entry->hw_type = ar->hw_rev;
44162306a36Sopenharmony_ci		__entry->len = len;
44262306a36Sopenharmony_ci		memcpy(__get_dynamic_array(rxdesc), data, len);
44362306a36Sopenharmony_ci	),
44462306a36Sopenharmony_ci
44562306a36Sopenharmony_ci	TP_printk(
44662306a36Sopenharmony_ci		"%s %s %d rxdesc len %d",
44762306a36Sopenharmony_ci		__get_str(driver),
44862306a36Sopenharmony_ci		__get_str(device),
44962306a36Sopenharmony_ci		__entry->hw_type,
45062306a36Sopenharmony_ci		__entry->len
45162306a36Sopenharmony_ci	 )
45262306a36Sopenharmony_ci);
45362306a36Sopenharmony_ci
45462306a36Sopenharmony_ciTRACE_EVENT(ath10k_wmi_diag_container,
45562306a36Sopenharmony_ci	    TP_PROTO(struct ath10k *ar,
45662306a36Sopenharmony_ci		     u8 type,
45762306a36Sopenharmony_ci		     u32 timestamp,
45862306a36Sopenharmony_ci		     u32 code,
45962306a36Sopenharmony_ci		     u16 len,
46062306a36Sopenharmony_ci		     const void *data),
46162306a36Sopenharmony_ci
46262306a36Sopenharmony_ci	TP_ARGS(ar, type, timestamp, code, len, data),
46362306a36Sopenharmony_ci
46462306a36Sopenharmony_ci	TP_STRUCT__entry(
46562306a36Sopenharmony_ci		__string(device, dev_name(ar->dev))
46662306a36Sopenharmony_ci		__string(driver, dev_driver_string(ar->dev))
46762306a36Sopenharmony_ci		__field(u8, type)
46862306a36Sopenharmony_ci		__field(u32, timestamp)
46962306a36Sopenharmony_ci		__field(u32, code)
47062306a36Sopenharmony_ci		__field(u16, len)
47162306a36Sopenharmony_ci		__dynamic_array(u8, data, len)
47262306a36Sopenharmony_ci	),
47362306a36Sopenharmony_ci
47462306a36Sopenharmony_ci	TP_fast_assign(
47562306a36Sopenharmony_ci		__assign_str(device, dev_name(ar->dev));
47662306a36Sopenharmony_ci		__assign_str(driver, dev_driver_string(ar->dev));
47762306a36Sopenharmony_ci		__entry->type = type;
47862306a36Sopenharmony_ci		__entry->timestamp = timestamp;
47962306a36Sopenharmony_ci		__entry->code = code;
48062306a36Sopenharmony_ci		__entry->len = len;
48162306a36Sopenharmony_ci		memcpy(__get_dynamic_array(data), data, len);
48262306a36Sopenharmony_ci	),
48362306a36Sopenharmony_ci
48462306a36Sopenharmony_ci	TP_printk(
48562306a36Sopenharmony_ci		"%s %s diag container type %u timestamp %u code %u len %d",
48662306a36Sopenharmony_ci		__get_str(driver),
48762306a36Sopenharmony_ci		__get_str(device),
48862306a36Sopenharmony_ci		__entry->type,
48962306a36Sopenharmony_ci		__entry->timestamp,
49062306a36Sopenharmony_ci		__entry->code,
49162306a36Sopenharmony_ci		__entry->len
49262306a36Sopenharmony_ci	)
49362306a36Sopenharmony_ci);
49462306a36Sopenharmony_ci
49562306a36Sopenharmony_ciTRACE_EVENT(ath10k_wmi_diag,
49662306a36Sopenharmony_ci	    TP_PROTO(struct ath10k *ar, const void *data, size_t len),
49762306a36Sopenharmony_ci
49862306a36Sopenharmony_ci	TP_ARGS(ar, data, len),
49962306a36Sopenharmony_ci
50062306a36Sopenharmony_ci	TP_STRUCT__entry(
50162306a36Sopenharmony_ci		__string(device, dev_name(ar->dev))
50262306a36Sopenharmony_ci		__string(driver, dev_driver_string(ar->dev))
50362306a36Sopenharmony_ci		__field(u16, len)
50462306a36Sopenharmony_ci		__dynamic_array(u8, data, len)
50562306a36Sopenharmony_ci	),
50662306a36Sopenharmony_ci
50762306a36Sopenharmony_ci	TP_fast_assign(
50862306a36Sopenharmony_ci		__assign_str(device, dev_name(ar->dev));
50962306a36Sopenharmony_ci		__assign_str(driver, dev_driver_string(ar->dev));
51062306a36Sopenharmony_ci		__entry->len = len;
51162306a36Sopenharmony_ci		memcpy(__get_dynamic_array(data), data, len);
51262306a36Sopenharmony_ci	),
51362306a36Sopenharmony_ci
51462306a36Sopenharmony_ci	TP_printk(
51562306a36Sopenharmony_ci		"%s %s tlv diag len %d",
51662306a36Sopenharmony_ci		__get_str(driver),
51762306a36Sopenharmony_ci		__get_str(device),
51862306a36Sopenharmony_ci		__entry->len
51962306a36Sopenharmony_ci	)
52062306a36Sopenharmony_ci);
52162306a36Sopenharmony_ci
52262306a36Sopenharmony_ci#endif /* _TRACE_H_ || TRACE_HEADER_MULTI_READ*/
52362306a36Sopenharmony_ci
52462306a36Sopenharmony_ci/* we don't want to use include/trace/events */
52562306a36Sopenharmony_ci#undef TRACE_INCLUDE_PATH
52662306a36Sopenharmony_ci#define TRACE_INCLUDE_PATH .
52762306a36Sopenharmony_ci#undef TRACE_INCLUDE_FILE
52862306a36Sopenharmony_ci#define TRACE_INCLUDE_FILE trace
52962306a36Sopenharmony_ci
53062306a36Sopenharmony_ci/* This part must be outside protection */
53162306a36Sopenharmony_ci#include <trace/define_trace.h>
532