1*d8899132SKalle Valo /* SPDX-License-Identifier: BSD-3-Clause-Clear */
2*d8899132SKalle Valo /*
3*d8899132SKalle Valo  * Copyright (c) 2019-2021 The Linux Foundation. All rights reserved.
4*d8899132SKalle Valo  * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
5*d8899132SKalle Valo  */
6*d8899132SKalle Valo 
7*d8899132SKalle Valo #if !defined(_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
8*d8899132SKalle Valo 
9*d8899132SKalle Valo #include <linux/tracepoint.h>
10*d8899132SKalle Valo #include "core.h"
11*d8899132SKalle Valo 
12*d8899132SKalle Valo #define _TRACE_H_
13*d8899132SKalle Valo 
14*d8899132SKalle Valo /* create empty functions when tracing is disabled */
15*d8899132SKalle Valo #if !defined(CONFIG_ATH12K_TRACING)
16*d8899132SKalle Valo #undef TRACE_EVENT
17*d8899132SKalle Valo #define TRACE_EVENT(name, proto, ...) \
18*d8899132SKalle Valo static inline void trace_ ## name(proto) {}
19*d8899132SKalle Valo #endif /* !CONFIG_ATH12K_TRACING || __CHECKER__ */
20*d8899132SKalle Valo 
21*d8899132SKalle Valo #undef TRACE_SYSTEM
22*d8899132SKalle Valo #define TRACE_SYSTEM ath12k
23*d8899132SKalle Valo 
24*d8899132SKalle Valo TRACE_EVENT(ath12k_htt_pktlog,
25*d8899132SKalle Valo 	    TP_PROTO(struct ath12k *ar, const void *buf, u16 buf_len,
26*d8899132SKalle Valo 		     u32 pktlog_checksum),
27*d8899132SKalle Valo 
28*d8899132SKalle Valo 	TP_ARGS(ar, buf, buf_len, pktlog_checksum),
29*d8899132SKalle Valo 
30*d8899132SKalle Valo 	TP_STRUCT__entry(
31*d8899132SKalle Valo 		__string(device, dev_name(ar->ab->dev))
32*d8899132SKalle Valo 		__string(driver, dev_driver_string(ar->ab->dev))
33*d8899132SKalle Valo 		__field(u16, buf_len)
34*d8899132SKalle Valo 		__field(u32, pktlog_checksum)
35*d8899132SKalle Valo 		__dynamic_array(u8, pktlog, buf_len)
36*d8899132SKalle Valo 	),
37*d8899132SKalle Valo 
38*d8899132SKalle Valo 	TP_fast_assign(
39*d8899132SKalle Valo 		__assign_str(device, dev_name(ar->ab->dev));
40*d8899132SKalle Valo 		__assign_str(driver, dev_driver_string(ar->ab->dev));
41*d8899132SKalle Valo 		__entry->buf_len = buf_len;
42*d8899132SKalle Valo 		__entry->pktlog_checksum = pktlog_checksum;
43*d8899132SKalle Valo 		memcpy(__get_dynamic_array(pktlog), buf, buf_len);
44*d8899132SKalle Valo 	),
45*d8899132SKalle Valo 
46*d8899132SKalle Valo 	TP_printk(
47*d8899132SKalle Valo 		"%s %s size %u pktlog_checksum %d",
48*d8899132SKalle Valo 		__get_str(driver),
49*d8899132SKalle Valo 		__get_str(device),
50*d8899132SKalle Valo 		__entry->buf_len,
51*d8899132SKalle Valo 		__entry->pktlog_checksum
52*d8899132SKalle Valo 	 )
53*d8899132SKalle Valo );
54*d8899132SKalle Valo 
55*d8899132SKalle Valo TRACE_EVENT(ath12k_htt_ppdu_stats,
56*d8899132SKalle Valo 	    TP_PROTO(struct ath12k *ar, const void *data, size_t len),
57*d8899132SKalle Valo 
58*d8899132SKalle Valo 	TP_ARGS(ar, data, len),
59*d8899132SKalle Valo 
60*d8899132SKalle Valo 	TP_STRUCT__entry(
61*d8899132SKalle Valo 		__string(device, dev_name(ar->ab->dev))
62*d8899132SKalle Valo 		__string(driver, dev_driver_string(ar->ab->dev))
63*d8899132SKalle Valo 		__field(u16, len)
64*d8899132SKalle Valo 		__field(u32, info)
65*d8899132SKalle Valo 		__field(u32, sync_tstmp_lo_us)
66*d8899132SKalle Valo 		__field(u32, sync_tstmp_hi_us)
67*d8899132SKalle Valo 		__field(u32, mlo_offset_lo)
68*d8899132SKalle Valo 		__field(u32, mlo_offset_hi)
69*d8899132SKalle Valo 		__field(u32, mlo_offset_clks)
70*d8899132SKalle Valo 		__field(u32, mlo_comp_clks)
71*d8899132SKalle Valo 		__field(u32, mlo_comp_timer)
72*d8899132SKalle Valo 		__dynamic_array(u8, ppdu, len)
73*d8899132SKalle Valo 	),
74*d8899132SKalle Valo 
75*d8899132SKalle Valo 	TP_fast_assign(
76*d8899132SKalle Valo 		__assign_str(device, dev_name(ar->ab->dev));
77*d8899132SKalle Valo 		__assign_str(driver, dev_driver_string(ar->ab->dev));
78*d8899132SKalle Valo 		__entry->len = len;
79*d8899132SKalle Valo 		__entry->info = ar->pdev->timestamp.info;
80*d8899132SKalle Valo 		__entry->sync_tstmp_lo_us = ar->pdev->timestamp.sync_timestamp_hi_us;
81*d8899132SKalle Valo 		__entry->sync_tstmp_hi_us = ar->pdev->timestamp.sync_timestamp_lo_us;
82*d8899132SKalle Valo 		__entry->mlo_offset_lo = ar->pdev->timestamp.mlo_offset_lo;
83*d8899132SKalle Valo 		__entry->mlo_offset_hi = ar->pdev->timestamp.mlo_offset_hi;
84*d8899132SKalle Valo 		__entry->mlo_offset_clks = ar->pdev->timestamp.mlo_offset_clks;
85*d8899132SKalle Valo 		__entry->mlo_comp_clks = ar->pdev->timestamp.mlo_comp_clks;
86*d8899132SKalle Valo 		__entry->mlo_comp_timer = ar->pdev->timestamp.mlo_comp_timer;
87*d8899132SKalle Valo 		memcpy(__get_dynamic_array(ppdu), data, len);
88*d8899132SKalle Valo 	),
89*d8899132SKalle Valo 
90*d8899132SKalle Valo 	TP_printk(
91*d8899132SKalle Valo 		"%s %s ppdu len %d",
92*d8899132SKalle Valo 		__get_str(driver),
93*d8899132SKalle Valo 		__get_str(device),
94*d8899132SKalle Valo 		__entry->len
95*d8899132SKalle Valo 	 )
96*d8899132SKalle Valo );
97*d8899132SKalle Valo 
98*d8899132SKalle Valo TRACE_EVENT(ath12k_htt_rxdesc,
99*d8899132SKalle Valo 	    TP_PROTO(struct ath12k *ar, const void *data, size_t type, size_t len),
100*d8899132SKalle Valo 
101*d8899132SKalle Valo 	TP_ARGS(ar, data, type, len),
102*d8899132SKalle Valo 
103*d8899132SKalle Valo 	TP_STRUCT__entry(
104*d8899132SKalle Valo 		__string(device, dev_name(ar->ab->dev))
105*d8899132SKalle Valo 		__string(driver, dev_driver_string(ar->ab->dev))
106*d8899132SKalle Valo 		__field(u16, len)
107*d8899132SKalle Valo 		__field(u16, type)
108*d8899132SKalle Valo 		__field(u32, info)
109*d8899132SKalle Valo 		__field(u32, sync_tstmp_lo_us)
110*d8899132SKalle Valo 		__field(u32, sync_tstmp_hi_us)
111*d8899132SKalle Valo 		__field(u32, mlo_offset_lo)
112*d8899132SKalle Valo 		__field(u32, mlo_offset_hi)
113*d8899132SKalle Valo 		__field(u32, mlo_offset_clks)
114*d8899132SKalle Valo 		__field(u32, mlo_comp_clks)
115*d8899132SKalle Valo 		__field(u32, mlo_comp_timer)
116*d8899132SKalle Valo 		__dynamic_array(u8, rxdesc, len)
117*d8899132SKalle Valo 	),
118*d8899132SKalle Valo 
119*d8899132SKalle Valo 	TP_fast_assign(
120*d8899132SKalle Valo 		__assign_str(device, dev_name(ar->ab->dev));
121*d8899132SKalle Valo 		__assign_str(driver, dev_driver_string(ar->ab->dev));
122*d8899132SKalle Valo 		__entry->len = len;
123*d8899132SKalle Valo 		__entry->type = type;
124*d8899132SKalle Valo 		__entry->info = ar->pdev->timestamp.info;
125*d8899132SKalle Valo 		__entry->sync_tstmp_lo_us = ar->pdev->timestamp.sync_timestamp_hi_us;
126*d8899132SKalle Valo 		__entry->sync_tstmp_hi_us = ar->pdev->timestamp.sync_timestamp_lo_us;
127*d8899132SKalle Valo 		__entry->mlo_offset_lo = ar->pdev->timestamp.mlo_offset_lo;
128*d8899132SKalle Valo 		__entry->mlo_offset_hi = ar->pdev->timestamp.mlo_offset_hi;
129*d8899132SKalle Valo 		__entry->mlo_offset_clks = ar->pdev->timestamp.mlo_offset_clks;
130*d8899132SKalle Valo 		__entry->mlo_comp_clks = ar->pdev->timestamp.mlo_comp_clks;
131*d8899132SKalle Valo 		__entry->mlo_comp_timer = ar->pdev->timestamp.mlo_comp_timer;
132*d8899132SKalle Valo 		memcpy(__get_dynamic_array(rxdesc), data, len);
133*d8899132SKalle Valo 	),
134*d8899132SKalle Valo 
135*d8899132SKalle Valo 	TP_printk(
136*d8899132SKalle Valo 		"%s %s rxdesc len %d",
137*d8899132SKalle Valo 		__get_str(driver),
138*d8899132SKalle Valo 		__get_str(device),
139*d8899132SKalle Valo 		__entry->len
140*d8899132SKalle Valo 	 )
141*d8899132SKalle Valo );
142*d8899132SKalle Valo 
143*d8899132SKalle Valo #endif /* _TRACE_H_ || TRACE_HEADER_MULTI_READ*/
144*d8899132SKalle Valo 
145*d8899132SKalle Valo /* we don't want to use include/trace/events */
146*d8899132SKalle Valo #undef TRACE_INCLUDE_PATH
147*d8899132SKalle Valo #define TRACE_INCLUDE_PATH .
148*d8899132SKalle Valo #undef TRACE_INCLUDE_FILE
149*d8899132SKalle Valo #define TRACE_INCLUDE_FILE trace
150*d8899132SKalle Valo 
151*d8899132SKalle Valo /* This part must be outside protection */
152*d8899132SKalle Valo #include <trace/define_trace.h>
153