1 /*
2  * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for
5  * any purpose with or without fee is hereby granted, provided that the
6  * above copyright notice and this permission notice appear in all
7  * copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
14  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16  * PERFORMANCE OF THIS SOFTWARE.
17  */
18 
19 /**
20  * DOC: qdf_tracepoint_defs.h
21  * This file provides OS abstraction for function tracing.
22  */
23 
24 #if  !defined(_QDF_TRACEPOINT_DEFS_H) || defined(TRACE_HEADER_MULTI_READ)
25 #define _QDF_TRACEPOINT_DEFS_H
26 
27 #include <linux/tracepoint.h>
28 #include <linux/skbuff.h>
29 
30 #undef TRACE_SYSTEM
31 #define TRACE_SYSTEM wlan
32 
33 #ifndef WLAN_TRACEPOINTS
34 #undef TRACE_EVENT
35 #define TRACE_EVENT(name, proto, args, tstruct, assign, print) \
36 	static inline void trace_##name(proto) {}              \
37 	static inline bool trace_##name##_enabled(void)        \
38 	{                                                      \
39 		return false;                                  \
40 	}
41 
42 #undef DECLARE_EVENT_CLASS
43 #define DECLARE_EVENT_CLASS(name, proto, args, tstruct, assign, print)
44 
45 #undef DEFINE_EVENT
46 #define DEFINE_EVENT(evt_class, name, proto, args)      \
47 	static inline void trace_##name(proto) {}       \
48 	static inline bool trace_##name##_enabled(void) \
49 	{                                               \
50 		return false;                           \
51 	}
52 #endif /* WLAN_TRACEPOINTS */
53 
54 DECLARE_EVENT_CLASS(dp_trace_tcp_pkt_class,
55 		    TP_PROTO(struct sk_buff *skb, uint32_t tcp_seq_num,
56 			     uint32_t tcp_ack_num, uint16_t srcport,
57 			     uint16_t dstport, uint64_t tdelta),
58 		    TP_ARGS(skb, tcp_seq_num, tcp_ack_num, srcport,
59 			    dstport, tdelta),
60 		    TP_STRUCT__entry(
61 			__field(void *, skb)
62 			__field(uint32_t, tcp_seq_num)
63 			__field(uint32_t, tcp_ack_num)
64 			__field(uint16_t, srcport)
65 			__field(uint16_t, dstport)
66 			__field(uint64_t, tdelta)
67 		    ),
68 		    TP_fast_assign(
69 			__entry->skb = skb;
70 			__entry->tcp_seq_num = tcp_seq_num;
71 			__entry->tcp_ack_num = tcp_ack_num;
72 			__entry->srcport = srcport;
73 			__entry->dstport = dstport;
74 			__entry->tdelta = tdelta;
75 		    ),
76 		    TP_printk("skb=%pK seqnum=%u acknum=%u srcport=%u dstport=%u latency(us)=%llu",
77 			      __entry->skb, __entry->tcp_seq_num,
78 			      __entry->tcp_ack_num, __entry->srcport,
79 			      __entry->dstport, __entry->tdelta)
80 );
81 
82 DEFINE_EVENT(dp_trace_tcp_pkt_class, dp_rx_tcp_pkt,
83 	     TP_PROTO(struct sk_buff *skb, uint32_t tcp_seq_num,
84 		      uint32_t tcp_ack_num, uint16_t srcport,
85 		      uint16_t dstport, uint64_t tdelta),
86 	     TP_ARGS(skb, tcp_seq_num, tcp_ack_num, srcport, dstport, tdelta)
87 );
88 
89 DEFINE_EVENT(dp_trace_tcp_pkt_class, dp_tx_comp_tcp_pkt,
90 	     TP_PROTO(struct sk_buff *skb, uint32_t tcp_seq_num,
91 		      uint32_t tcp_ack_num, uint16_t srcport,
92 		      uint16_t dstport, uint64_t tdelta),
93 	     TP_ARGS(skb, tcp_seq_num, tcp_ack_num, srcport, dstport, tdelta)
94 );
95 
96 DECLARE_EVENT_CLASS(dp_trace_udp_pkt_class,
97 		    TP_PROTO(struct sk_buff *skb, uint16_t ip_id,
98 			     uint16_t srcport, uint16_t dstport,
99 			     uint64_t tdelta),
100 		    TP_ARGS(skb, ip_id, srcport, dstport, tdelta),
101 		    TP_STRUCT__entry(
102 			__field(void *, skb)
103 			__field(uint16_t, ip_id)
104 			__field(uint16_t, srcport)
105 			__field(uint16_t, dstport)
106 			__field(uint64_t, tdelta)
107 		    ),
108 		    TP_fast_assign(
109 			__entry->skb = skb;
110 			__entry->ip_id = ip_id;
111 			__entry->srcport = srcport;
112 			__entry->dstport = dstport;
113 			__entry->tdelta = tdelta;
114 		    ),
115 		    TP_printk("skb=%pK ip_id=%u srcport=%u dstport=%d latency(us)=%llu",
116 			      __entry->skb, __entry->ip_id,
117 			      __entry->srcport, __entry->dstport,
118 			      __entry->tdelta)
119 );
120 
121 DEFINE_EVENT(dp_trace_udp_pkt_class, dp_rx_udp_pkt,
122 	     TP_PROTO(struct sk_buff *skb, uint16_t ip_id, uint16_t srcport,
123 		      uint16_t dstport, uint64_t tdelta),
124 	     TP_ARGS(skb, ip_id, srcport, dstport, tdelta)
125 );
126 
127 DEFINE_EVENT(dp_trace_udp_pkt_class, dp_tx_comp_udp_pkt,
128 	     TP_PROTO(struct sk_buff *skb, uint16_t ip_id, uint16_t srcport,
129 		      uint16_t dstport, uint64_t tdelta),
130 	     TP_ARGS(skb, ip_id, srcport, dstport, tdelta)
131 );
132 
133 DECLARE_EVENT_CLASS(dp_trace_generic_ip_pkt_class,
134 		    TP_PROTO(struct sk_buff *skb, uint8_t ip_proto,
135 			     uint16_t ip_id, uint32_t trans_hdr_4_bytes,
136 			     uint64_t tdelta),
137 		    TP_ARGS(skb, ip_proto, ip_id,
138 			    trans_hdr_4_bytes, tdelta),
139 		    TP_STRUCT__entry(
140 			__field(void *, skb)
141 			__field(uint8_t, ip_proto)
142 			__field(uint16_t, ip_id)
143 			__field(uint32_t, trans_hdr_4_bytes)
144 			__field(uint64_t, tdelta)
145 		    ),
146 		    TP_fast_assign(
147 			__entry->skb = skb;
148 			__entry->ip_proto = ip_proto;
149 			__entry->ip_id = ip_id;
150 			__entry->trans_hdr_4_bytes = trans_hdr_4_bytes;
151 			__entry->tdelta = tdelta;
152 		    ),
153 		    TP_printk("skb=%pK ip_proto=0x%x ip_id=0x%x, transport_hdr[4]:0x%08x, latency(us)=%llu",
154 			      __entry->skb, __entry->ip_proto,
155 			      __entry->ip_id,  __entry->trans_hdr_4_bytes,
156 			      __entry->tdelta)
157 );
158 
159 DEFINE_EVENT(dp_trace_generic_ip_pkt_class, dp_rx_generic_ip_pkt,
160 	     TP_PROTO(struct sk_buff *skb, uint8_t ip_proto,
161 		      uint16_t ip_id, uint32_t trans_hdr_4_bytes,
162 		      uint64_t tdelta),
163 	     TP_ARGS(skb, ip_proto, ip_id,
164 		     trans_hdr_4_bytes,
165 		     tdelta)
166 );
167 
168 DEFINE_EVENT(dp_trace_generic_ip_pkt_class, dp_tx_comp_generic_ip_pkt,
169 	     TP_PROTO(struct sk_buff *skb, uint8_t ip_proto,
170 		      uint16_t ip_id, uint32_t trans_hdr_4_bytes,
171 		      uint64_t tdelta),
172 	     TP_ARGS(skb, ip_proto, ip_id,
173 		     trans_hdr_4_bytes,
174 		     tdelta)
175 );
176 
177 DECLARE_EVENT_CLASS(dp_trace_pkt_class,
178 		    TP_PROTO(struct sk_buff *skb, uint16_t ether_type,
179 			     uint64_t tdelta),
180 		    TP_ARGS(skb, ether_type, tdelta),
181 		    TP_STRUCT__entry(
182 			__field(void *, skb)
183 			__field(uint16_t, ether_type)
184 			__field(uint64_t, tdelta)
185 		    ),
186 		    TP_fast_assign(
187 			__entry->skb = skb;
188 			__entry->ether_type = ether_type;
189 			__entry->tdelta = tdelta;
190 		    ),
191 		    TP_printk("skb=%pK ether_type=0x%x latency(us)=%llu",
192 			      __entry->skb, __entry->ether_type,
193 			      __entry->tdelta)
194 );
195 
196 DEFINE_EVENT(dp_trace_pkt_class, dp_rx_pkt,
197 	     TP_PROTO(struct sk_buff *skb, uint16_t ether_type,
198 		      uint64_t tdelta),
199 	     TP_ARGS(skb, ether_type, tdelta)
200 );
201 
202 DEFINE_EVENT(dp_trace_pkt_class, dp_tx_comp_pkt,
203 	     TP_PROTO(struct sk_buff *skb, uint16_t ether_type,
204 		      uint64_t tdelta),
205 	     TP_ARGS(skb, ether_type, tdelta)
206 );
207 
208 TRACE_EVENT(dp_del_reg_write,
209 	    TP_PROTO(uint8_t srng_id, uint32_t enq_val, uint32_t deq_val,
210 		     uint64_t enq_time, uint64_t deq_time),
211 	    TP_ARGS(srng_id, enq_val, deq_val, enq_time, deq_time),
212 	    TP_STRUCT__entry(
213 		__field(uint8_t, srng_id)
214 		__field(uint32_t, enq_val)
215 		__field(uint32_t, deq_val)
216 		__field(uint64_t, enq_time)
217 		__field(uint64_t, deq_time)
218 	    ),
219 	    TP_fast_assign(
220 		__entry->srng_id = srng_id;
221 		__entry->enq_val = enq_val;
222 		__entry->deq_val = deq_val;
223 		__entry->enq_time = enq_time;
224 		__entry->deq_time = deq_time;
225 	    ),
226 	    TP_printk("srng_id=%u enq_val=%u deq_val=%u enq_time=0x%llx deq_time=0x%llx",
227 		      __entry->srng_id, __entry->enq_val, __entry->deq_val,
228 		      __entry->enq_time, __entry->deq_time)
229 );
230 
231 TRACE_EVENT(dp_ce_tasklet_sched_latency,
232 	    TP_PROTO(uint8_t ce_id, uint64_t sched_latency),
233 	    TP_ARGS(ce_id, sched_latency),
234 	    TP_STRUCT__entry(
235 		__field(uint8_t, ce_id)
236 		__field(uint64_t, sched_latency)
237 	    ),
238 	    TP_fast_assign(
239 		__entry->ce_id = ce_id;
240 		__entry->sched_latency = sched_latency;
241 	    ),
242 	    TP_printk("ce_id=%u latency(ns)=%llu", __entry->ce_id,
243 		      __entry->sched_latency)
244 );
245 #endif /* _QDF_TRACEPOINT_DEFS_H */
246 
247 /* Below should be outside the protection */
248 #undef TRACE_INCLUDE_PATH
249 #define TRACE_INCLUDE_PATH .
250 #undef TRACE_INCLUDE_FILE
251 #define TRACE_INCLUDE_FILE qdf_tracepoint_defs
252 #include <trace/define_trace.h>
253