1 /*
2  * Copyright (c) 2018 Oticon A/S
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #ifndef SUBSYS_DEBUG_TRACING_CTF_TOP_H
8 #define SUBSYS_DEBUG_TRACING_CTF_TOP_H
9 
10 #include <stddef.h>
11 #include <string.h>
12 #include <ctf_map.h>
13 #include <zephyr/tracing/tracing_format.h>
14 #include <zephyr/net/net_ip.h>
15 
16 /* Limit strings to 20 bytes to optimize bandwidth */
17 #define CTF_MAX_STRING_LEN 20
18 
19 /* Increase the string length to be able to store IPv4/6 address */
20 #if defined(CONFIG_NET_IPV6)
21 #define CTF_NET_MAX_STRING_LEN INET6_ADDRSTRLEN
22 #else
23 #define CTF_NET_MAX_STRING_LEN CTF_MAX_STRING_LEN
24 #endif
25 
26 /*
27  * Obtain a field's size at compile-time.
28  */
29 #define CTF_INTERNAL_FIELD_SIZE(x) + sizeof(x)
30 
31 /*
32  * Append a field to current event-packet.
33  */
34 #define CTF_INTERNAL_FIELD_APPEND(x)                                           \
35 	{                                                                      \
36 		memcpy(epacket_cursor, &(x), sizeof(x));                       \
37 		epacket_cursor += sizeof(x);                                   \
38 	}
39 
40 /*
41  * Gather fields to a contiguous event-packet, then atomically emit.
42  */
43 #define CTF_GATHER_FIELDS(...)                                                  \
44 	{                                                                       \
45 		uint8_t epacket[0 MAP(CTF_INTERNAL_FIELD_SIZE, ##__VA_ARGS__)]; \
46 		uint8_t *epacket_cursor = &epacket[0];                          \
47 										\
48 		MAP(CTF_INTERNAL_FIELD_APPEND, ##__VA_ARGS__)                   \
49 		tracing_format_raw_data(epacket, sizeof(epacket));              \
50 	}
51 
52 #ifdef CONFIG_TRACING_CTF_TIMESTAMP
53 #define CTF_EVENT(...)                                                         \
54 	{                                                                      \
55 		const uint32_t tstamp = k_cyc_to_ns_floor64(k_cycle_get_32()); \
56 									       \
57 		CTF_GATHER_FIELDS(tstamp, __VA_ARGS__)                         \
58 	}
59 #else
60 #define CTF_EVENT(...)                                                         \
61 	{                                                                      \
62 		CTF_GATHER_FIELDS(__VA_ARGS__)                                 \
63 	}
64 #endif
65 
66 /* Anonymous compound literal with 1 member. Legal since C99.
67  * This permits us to take the address of literals, like so:
68  *  &CTF_LITERAL(int, 1234)
69  *
70  * This may be required if a ctf_bottom layer uses memcpy.
71  *
72  * NOTE string literals already support address-of and sizeof,
73  * so string literals should not be wrapped with CTF_LITERAL.
74  */
75 #define CTF_LITERAL(type, value) ((type) { (type)(value) })
76 
77 typedef enum {
78 	CTF_EVENT_THREAD_SWITCHED_OUT = 0x10,
79 	CTF_EVENT_THREAD_SWITCHED_IN = 0x11,
80 	CTF_EVENT_THREAD_PRIORITY_SET = 0x12,
81 	CTF_EVENT_THREAD_CREATE = 0x13,
82 	CTF_EVENT_THREAD_ABORT = 0x14,
83 	CTF_EVENT_THREAD_SUSPEND = 0x15,
84 	CTF_EVENT_THREAD_RESUME = 0x16,
85 	CTF_EVENT_THREAD_READY = 0x17,
86 	CTF_EVENT_THREAD_PENDING = 0x18,
87 	CTF_EVENT_THREAD_INFO = 0x19,
88 	CTF_EVENT_THREAD_NAME_SET = 0x1A,
89 	CTF_EVENT_ISR_ENTER = 0x1B,
90 	CTF_EVENT_ISR_EXIT = 0x1C,
91 	CTF_EVENT_ISR_EXIT_TO_SCHEDULER = 0x1D,
92 	CTF_EVENT_IDLE = 0x1E,
93 	CTF_EVENT_ID_START_CALL = 0x1F,
94 	CTF_EVENT_ID_END_CALL = 0x20,
95 	CTF_EVENT_SEMAPHORE_INIT = 0x21,
96 	CTF_EVENT_SEMAPHORE_GIVE_ENTER = 0x22,
97 	CTF_EVENT_SEMAPHORE_GIVE_EXIT = 0x23,
98 	CTF_EVENT_SEMAPHORE_TAKE_ENTER = 0x24,
99 	CTF_EVENT_SEMAPHORE_TAKE_BLOCKING = 0x25,
100 	CTF_EVENT_SEMAPHORE_TAKE_EXIT = 0x26,
101 	CTF_EVENT_SEMAPHORE_RESET = 0x27,
102 	CTF_EVENT_MUTEX_INIT = 0x28,
103 	CTF_EVENT_MUTEX_LOCK_ENTER = 0x29,
104 	CTF_EVENT_MUTEX_LOCK_BLOCKING = 0x2A,
105 	CTF_EVENT_MUTEX_LOCK_EXIT = 0x2B,
106 	CTF_EVENT_MUTEX_UNLOCK_ENTER = 0x2C,
107 	CTF_EVENT_MUTEX_UNLOCK_EXIT = 0x2D,
108 	CTF_EVENT_TIMER_INIT = 0x2E,
109 	CTF_EVENT_TIMER_START = 0x2F,
110 	CTF_EVENT_TIMER_STOP = 0x30,
111 	CTF_EVENT_TIMER_STATUS_SYNC_ENTER = 0x31,
112 	CTF_EVENT_TIMER_STATUS_SYNC_BLOCKING = 0x32,
113 	CTF_EVENT_TIMER_STATUS_SYNC_EXIT = 0x33,
114 	CTF_EVENT_THREAD_USER_MODE_ENTER = 0x34,
115 	CTF_EVENT_THREAD_WAKEUP = 0x35,
116 	CTF_EVENT_SOCKET_INIT = 0x36,
117 	CTF_EVENT_SOCKET_CLOSE_ENTER = 0x37,
118 	CTF_EVENT_SOCKET_CLOSE_EXIT = 0x38,
119 	CTF_EVENT_SOCKET_SHUTDOWN_ENTER = 0x39,
120 	CTF_EVENT_SOCKET_SHUTDOWN_EXIT = 0x3A,
121 	CTF_EVENT_SOCKET_BIND_ENTER = 0x3B,
122 	CTF_EVENT_SOCKET_BIND_EXIT = 0x3C,
123 	CTF_EVENT_SOCKET_CONNECT_ENTER = 0x3D,
124 	CTF_EVENT_SOCKET_CONNECT_EXIT = 0x3E,
125 	CTF_EVENT_SOCKET_LISTEN_ENTER = 0x3F,
126 	CTF_EVENT_SOCKET_LISTEN_EXIT = 0x40,
127 	CTF_EVENT_SOCKET_ACCEPT_ENTER = 0x41,
128 	CTF_EVENT_SOCKET_ACCEPT_EXIT = 0x42,
129 	CTF_EVENT_SOCKET_SENDTO_ENTER = 0x43,
130 	CTF_EVENT_SOCKET_SENDTO_EXIT = 0x44,
131 	CTF_EVENT_SOCKET_SENDMSG_ENTER = 0x45,
132 	CTF_EVENT_SOCKET_SENDMSG_EXIT = 0x46,
133 	CTF_EVENT_SOCKET_RECVFROM_ENTER = 0x47,
134 	CTF_EVENT_SOCKET_RECVFROM_EXIT = 0x48,
135 	CTF_EVENT_SOCKET_RECVMSG_ENTER = 0x49,
136 	CTF_EVENT_SOCKET_RECVMSG_EXIT = 0x4A,
137 	CTF_EVENT_SOCKET_FCNTL_ENTER = 0x4B,
138 	CTF_EVENT_SOCKET_FCNTL_EXIT = 0x4C,
139 	CTF_EVENT_SOCKET_IOCTL_ENTER = 0x4D,
140 	CTF_EVENT_SOCKET_IOCTL_EXIT = 0x4E,
141 	CTF_EVENT_SOCKET_POLL_ENTER = 0x4F,
142 	CTF_EVENT_SOCKET_POLL_VALUE = 0x50,
143 	CTF_EVENT_SOCKET_POLL_EXIT = 0x51,
144 	CTF_EVENT_SOCKET_GETSOCKOPT_ENTER = 0x52,
145 	CTF_EVENT_SOCKET_GETSOCKOPT_EXIT = 0x53,
146 	CTF_EVENT_SOCKET_SETSOCKOPT_ENTER = 0x54,
147 	CTF_EVENT_SOCKET_SETSOCKOPT_EXIT = 0x55,
148 	CTF_EVENT_SOCKET_GETPEERNAME_ENTER = 0x56,
149 	CTF_EVENT_SOCKET_GETPEERNAME_EXIT = 0x57,
150 	CTF_EVENT_SOCKET_GETSOCKNAME_ENTER = 0x58,
151 	CTF_EVENT_SOCKET_GETSOCKNAME_EXIT = 0x59,
152 	CTF_EVENT_SOCKET_SOCKETPAIR_ENTER = 0x5A,
153 	CTF_EVENT_SOCKET_SOCKETPAIR_EXIT = 0x5B,
154 	CTF_EVENT_NET_RECV_DATA_ENTER = 0x5C,
155 	CTF_EVENT_NET_RECV_DATA_EXIT = 0x5D,
156 	CTF_EVENT_NET_SEND_DATA_ENTER = 0x5E,
157 	CTF_EVENT_NET_SEND_DATA_EXIT = 0x5F,
158 	CTF_EVENT_NET_RX_TIME = 0x60,
159 	CTF_EVENT_NET_TX_TIME = 0x61,
160 	CTF_EVENT_NAMED_EVENT = 0x62,
161 	CTF_EVENT_GPIO_PIN_CONFIGURE_INTERRUPT_ENTER = 0x63,
162 	CTF_EVENT_GPIO_PIN_CONFIGURE_INTERRUPT_EXIT = 0x64,
163 	CTF_EVENT_GPIO_PIN_CONFIGURE_ENTER = 0x65,
164 	CTF_EVENT_GPIO_PIN_CONFIGURE_EXIT = 0x66,
165 	CTF_EVENT_GPIO_PORT_GET_DIRECTION_ENTER = 0x67,
166 	CTF_EVENT_GPIO_PORT_GET_DIRECTION_EXIT = 0x68,
167 	CTF_EVENT_GPIO_PIN_GET_CONFIG_ENTER = 0x69,
168 	CTF_EVENT_GPIO_PIN_GET_CONFIG_EXIT = 0x6A,
169 	CTF_EVENT_GPIO_PORT_GET_RAW_ENTER = 0x6B,
170 	CTF_EVENT_GPIO_PORT_GET_RAW_EXIT = 0x6C,
171 	CTF_EVENT_GPIO_PORT_SET_MASKED_RAW_ENTER = 0x6D,
172 	CTF_EVENT_GPIO_PORT_SET_MASKED_RAW_EXIT = 0x6E,
173 	CTF_EVENT_GPIO_PORT_SET_BITS_RAW_ENTER = 0x6F,
174 	CTF_EVENT_GPIO_PORT_SET_BITS_RAW_EXIT = 0x70,
175 	CTF_EVENT_GPIO_PORT_CLEAR_BITS_RAW_ENTER = 0x71,
176 	CTF_EVENT_GPIO_PORT_CLEAR_BITS_RAW_EXIT = 0x72,
177 	CTF_EVENT_GPIO_PORT_TOGGLE_BITS_ENTER = 0x73,
178 	CTF_EVENT_GPIO_PORT_TOGGLE_BITS_EXIT = 0x74,
179 	CTF_EVENT_GPIO_INIT_CALLBACK_ENTER = 0x75,
180 	CTF_EVENT_GPIO_INIT_CALLBACK_EXIT = 0x76,
181 	CTF_EVENT_GPIO_ADD_CALLBACK_ENTER = 0x77,
182 	CTF_EVENT_GPIO_ADD_CALLBACK_EXIT = 0x78,
183 	CTF_EVENT_GPIO_REMOVE_CALLBACK_ENTER = 0x79,
184 	CTF_EVENT_GPIO_REMOVE_CALLBACK_EXIT = 0x7A,
185 	CTF_EVENT_GPIO_GET_PENDING_INT_ENTER = 0x7B,
186 	CTF_EVENT_GPIO_GET_PENDING_INT_EXIT = 0x7C,
187 	CTF_EVENT_GPIO_FIRE_CALLBACKS_ENTER = 0x7D,
188 	CTF_EVENT_GPIO_FIRE_CALLBACK = 0x7E,
189 	CTF_EVENT_THREAD_SLEEP_ENTER = 0x7F,
190 	CTF_EVENT_THREAD_SLEEP_EXIT = 0x80,
191 } ctf_event_t;
192 
193 typedef struct {
194 	char buf[CTF_MAX_STRING_LEN];
195 } ctf_bounded_string_t;
196 
ctf_top_thread_switched_out(uint32_t thread_id,ctf_bounded_string_t name)197 static inline void ctf_top_thread_switched_out(uint32_t thread_id,
198 					       ctf_bounded_string_t name)
199 {
200 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_THREAD_SWITCHED_OUT),
201 		  thread_id, name);
202 }
203 
ctf_top_thread_switched_in(uint32_t thread_id,ctf_bounded_string_t name)204 static inline void ctf_top_thread_switched_in(uint32_t thread_id,
205 					      ctf_bounded_string_t name)
206 {
207 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_THREAD_SWITCHED_IN), thread_id,
208 		  name);
209 }
210 
ctf_top_thread_priority_set(uint32_t thread_id,int8_t prio,ctf_bounded_string_t name)211 static inline void ctf_top_thread_priority_set(uint32_t thread_id, int8_t prio,
212 					       ctf_bounded_string_t name)
213 {
214 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_THREAD_PRIORITY_SET),
215 		  thread_id, name, prio);
216 }
217 
ctf_top_thread_sleep_enter(uint32_t timeout)218 static inline void ctf_top_thread_sleep_enter(uint32_t timeout)
219 {
220 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_THREAD_SLEEP_ENTER), timeout);
221 }
222 
ctf_top_thread_sleep_exit(uint32_t timeout,int32_t ret)223 static inline void ctf_top_thread_sleep_exit(uint32_t timeout, int32_t ret)
224 {
225 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_THREAD_SLEEP_EXIT), timeout, ret);
226 }
227 
ctf_top_thread_create(uint32_t thread_id,int8_t prio,ctf_bounded_string_t name)228 static inline void ctf_top_thread_create(uint32_t thread_id, int8_t prio,
229 					 ctf_bounded_string_t name)
230 {
231 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_THREAD_CREATE), thread_id,
232 		  name);
233 }
234 
ctf_top_thread_abort(uint32_t thread_id,ctf_bounded_string_t name)235 static inline void ctf_top_thread_abort(uint32_t thread_id,
236 					ctf_bounded_string_t name)
237 {
238 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_THREAD_ABORT), thread_id,
239 		  name);
240 }
241 
ctf_top_thread_suspend(uint32_t thread_id,ctf_bounded_string_t name)242 static inline void ctf_top_thread_suspend(uint32_t thread_id,
243 					  ctf_bounded_string_t name)
244 {
245 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_THREAD_SUSPEND), thread_id,
246 		  name);
247 }
248 
ctf_top_thread_resume(uint32_t thread_id,ctf_bounded_string_t name)249 static inline void ctf_top_thread_resume(uint32_t thread_id,
250 					 ctf_bounded_string_t name)
251 {
252 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_THREAD_RESUME), thread_id,
253 		  name);
254 }
255 
ctf_top_thread_ready(uint32_t thread_id,ctf_bounded_string_t name)256 static inline void ctf_top_thread_ready(uint32_t thread_id,
257 					ctf_bounded_string_t name)
258 {
259 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_THREAD_READY), thread_id,
260 		  name);
261 }
262 
ctf_top_thread_pend(uint32_t thread_id,ctf_bounded_string_t name)263 static inline void ctf_top_thread_pend(uint32_t thread_id,
264 				       ctf_bounded_string_t name)
265 {
266 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_THREAD_PENDING), thread_id,
267 		  name);
268 }
269 
ctf_top_thread_info(uint32_t thread_id,ctf_bounded_string_t name,uint32_t stack_base,uint32_t stack_size)270 static inline void ctf_top_thread_info(uint32_t thread_id,
271 				       ctf_bounded_string_t name,
272 				       uint32_t stack_base, uint32_t stack_size)
273 {
274 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_THREAD_INFO), thread_id, name,
275 		  stack_base, stack_size);
276 }
277 
ctf_top_thread_name_set(uint32_t thread_id,ctf_bounded_string_t name)278 static inline void ctf_top_thread_name_set(uint32_t thread_id,
279 					   ctf_bounded_string_t name)
280 {
281 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_THREAD_NAME_SET), thread_id,
282 		  name);
283 }
284 
285 
ctf_top_thread_user_mode_enter(uint32_t thread_id,ctf_bounded_string_t name)286 static inline void ctf_top_thread_user_mode_enter(uint32_t thread_id, ctf_bounded_string_t name)
287 {
288 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_THREAD_USER_MODE_ENTER),
289 		  thread_id, name);
290 }
291 
ctf_top_thread_wakeup(uint32_t thread_id,ctf_bounded_string_t name)292 static inline void ctf_top_thread_wakeup(uint32_t thread_id, ctf_bounded_string_t name)
293 {
294 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_THREAD_WAKEUP),
295 		  thread_id, name);
296 }
297 
ctf_top_isr_enter(void)298 static inline void ctf_top_isr_enter(void)
299 {
300 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_ISR_ENTER));
301 }
302 
ctf_top_isr_exit(void)303 static inline void ctf_top_isr_exit(void)
304 {
305 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_ISR_EXIT));
306 }
307 
ctf_top_isr_exit_to_scheduler(void)308 static inline void ctf_top_isr_exit_to_scheduler(void)
309 {
310 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_ISR_EXIT_TO_SCHEDULER));
311 }
312 
ctf_top_idle(void)313 static inline void ctf_top_idle(void)
314 {
315 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_IDLE));
316 }
317 
ctf_top_void(uint32_t id)318 static inline void ctf_top_void(uint32_t id)
319 {
320 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_ID_START_CALL), id);
321 }
322 
ctf_top_end_call(uint32_t id)323 static inline void ctf_top_end_call(uint32_t id)
324 {
325 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_ID_END_CALL), id);
326 }
327 
328 /* Semaphore */
ctf_top_semaphore_init(uint32_t sem_id,int32_t ret)329 static inline void ctf_top_semaphore_init(uint32_t sem_id,
330 					  int32_t ret)
331 {
332 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SEMAPHORE_INIT), sem_id, ret);
333 }
334 
ctf_top_semaphore_reset(uint32_t sem_id)335 static inline void ctf_top_semaphore_reset(uint32_t sem_id)
336 {
337 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SEMAPHORE_RESET), sem_id);
338 }
339 
ctf_top_semaphore_take_enter(uint32_t sem_id,uint32_t timeout)340 static inline void ctf_top_semaphore_take_enter(uint32_t sem_id,
341 						uint32_t timeout)
342 {
343 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SEMAPHORE_TAKE_ENTER), sem_id,
344 		  timeout);
345 }
346 
ctf_top_semaphore_take_blocking(uint32_t sem_id,uint32_t timeout)347 static inline void ctf_top_semaphore_take_blocking(uint32_t sem_id,
348 						   uint32_t timeout)
349 {
350 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SEMAPHORE_TAKE_BLOCKING),
351 		  sem_id, timeout);
352 }
353 
ctf_top_semaphore_take_exit(uint32_t sem_id,uint32_t timeout,int32_t ret)354 static inline void ctf_top_semaphore_take_exit(uint32_t sem_id,
355 					       uint32_t timeout, int32_t ret)
356 {
357 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SEMAPHORE_TAKE_EXIT), sem_id,
358 		  timeout, ret);
359 }
360 
ctf_top_semaphore_give_enter(uint32_t sem_id)361 static inline void ctf_top_semaphore_give_enter(uint32_t sem_id)
362 {
363 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SEMAPHORE_GIVE_ENTER), sem_id);
364 }
365 
ctf_top_semaphore_give_exit(uint32_t sem_id)366 static inline void ctf_top_semaphore_give_exit(uint32_t sem_id)
367 {
368 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SEMAPHORE_GIVE_EXIT), sem_id);
369 }
370 
371 /* Mutex */
ctf_top_mutex_init(uint32_t mutex_id,int32_t ret)372 static inline void ctf_top_mutex_init(uint32_t mutex_id, int32_t ret)
373 {
374 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_MUTEX_INIT), mutex_id, ret);
375 }
376 
ctf_top_mutex_lock_enter(uint32_t mutex_id,uint32_t timeout)377 static inline void ctf_top_mutex_lock_enter(uint32_t mutex_id, uint32_t timeout)
378 {
379 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_MUTEX_LOCK_ENTER), mutex_id,
380 		  timeout);
381 }
382 
ctf_top_mutex_lock_blocking(uint32_t mutex_id,uint32_t timeout)383 static inline void ctf_top_mutex_lock_blocking(uint32_t mutex_id,
384 					       uint32_t timeout)
385 {
386 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_MUTEX_LOCK_BLOCKING), mutex_id,
387 		  timeout);
388 }
389 
ctf_top_mutex_lock_exit(uint32_t mutex_id,uint32_t timeout,int32_t ret)390 static inline void ctf_top_mutex_lock_exit(uint32_t mutex_id, uint32_t timeout,
391 					   int32_t ret)
392 {
393 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_MUTEX_LOCK_EXIT), mutex_id,
394 		  timeout, ret);
395 }
396 
ctf_top_mutex_unlock_enter(uint32_t mutex_id)397 static inline void ctf_top_mutex_unlock_enter(uint32_t mutex_id)
398 {
399 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_MUTEX_UNLOCK_ENTER), mutex_id);
400 }
401 
ctf_top_mutex_unlock_exit(uint32_t mutex_id,int32_t ret)402 static inline void ctf_top_mutex_unlock_exit(uint32_t mutex_id, int32_t ret)
403 {
404 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_MUTEX_UNLOCK_EXIT), mutex_id);
405 }
406 
407 /* Timer */
ctf_top_timer_init(uint32_t timer)408 static inline void ctf_top_timer_init(uint32_t timer)
409 {
410 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_TIMER_INIT), timer);
411 }
412 
ctf_top_timer_start(uint32_t timer,uint32_t duration,uint32_t period)413 static inline void ctf_top_timer_start(uint32_t timer, uint32_t duration, uint32_t period)
414 {
415 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_TIMER_START), timer, duration, period);
416 }
417 
ctf_top_timer_stop(uint32_t timer)418 static inline void ctf_top_timer_stop(uint32_t timer)
419 {
420 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_TIMER_STOP), timer);
421 }
422 
ctf_top_timer_status_sync_enter(uint32_t timer)423 static inline void ctf_top_timer_status_sync_enter(uint32_t timer)
424 {
425 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_TIMER_STATUS_SYNC_ENTER), timer);
426 }
427 
ctf_top_timer_status_sync_blocking(uint32_t timer,uint32_t timeout)428 static inline void ctf_top_timer_status_sync_blocking(uint32_t timer, uint32_t timeout)
429 {
430 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_TIMER_STATUS_SYNC_BLOCKING), timer, timeout);
431 }
432 
ctf_top_timer_status_sync_exit(uint32_t timer,uint32_t result)433 static inline void ctf_top_timer_status_sync_exit(uint32_t timer, uint32_t result)
434 {
435 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_TIMER_STATUS_SYNC_EXIT), timer, result);
436 }
437 
438 /* Network socket */
439 typedef struct {
440 	char buf[CTF_NET_MAX_STRING_LEN];
441 } ctf_net_bounded_string_t;
442 
ctf_top_socket_init(int32_t sock,uint32_t family,uint32_t type,uint32_t proto)443 static inline void ctf_top_socket_init(int32_t sock, uint32_t family,
444 				       uint32_t type, uint32_t proto)
445 {
446 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_INIT), sock, family, type, proto);
447 }
448 
ctf_top_socket_close_enter(int32_t sock)449 static inline void ctf_top_socket_close_enter(int32_t sock)
450 {
451 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_CLOSE_ENTER), sock);
452 }
453 
ctf_top_socket_close_exit(int32_t sock,int32_t ret)454 static inline void ctf_top_socket_close_exit(int32_t sock, int32_t ret)
455 {
456 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_CLOSE_EXIT), sock, ret);
457 }
458 
ctf_top_socket_shutdown_enter(int32_t sock,int32_t how)459 static inline void ctf_top_socket_shutdown_enter(int32_t sock, int32_t how)
460 {
461 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_SHUTDOWN_ENTER), sock, how);
462 }
463 
ctf_top_socket_shutdown_exit(int32_t sock,int32_t ret)464 static inline void ctf_top_socket_shutdown_exit(int32_t sock, int32_t ret)
465 {
466 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_SHUTDOWN_EXIT), sock, ret);
467 }
468 
ctf_top_socket_bind_enter(int32_t sock,ctf_net_bounded_string_t addr,uint32_t addrlen,uint16_t port)469 static inline void ctf_top_socket_bind_enter(int32_t sock, ctf_net_bounded_string_t addr,
470 					     uint32_t addrlen, uint16_t port)
471 {
472 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_BIND_ENTER), sock, addr, addrlen, port);
473 }
474 
ctf_top_socket_bind_exit(int32_t sock,int32_t ret)475 static inline void ctf_top_socket_bind_exit(int32_t sock, int32_t ret)
476 {
477 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_BIND_EXIT), sock, ret);
478 }
479 
ctf_top_socket_connect_enter(int32_t sock,ctf_net_bounded_string_t addr,uint32_t addrlen)480 static inline void ctf_top_socket_connect_enter(int32_t sock,
481 						ctf_net_bounded_string_t addr,
482 						uint32_t addrlen)
483 {
484 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_CONNECT_ENTER), sock, addr, addrlen);
485 }
486 
ctf_top_socket_connect_exit(int32_t sock,int32_t ret)487 static inline void ctf_top_socket_connect_exit(int32_t sock, int32_t ret)
488 {
489 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_CONNECT_EXIT), sock, ret);
490 }
491 
ctf_top_socket_listen_enter(int32_t sock,uint32_t backlog)492 static inline void ctf_top_socket_listen_enter(int32_t sock, uint32_t backlog)
493 {
494 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_LISTEN_ENTER), sock, backlog);
495 }
496 
ctf_top_socket_listen_exit(int32_t sock,int32_t ret)497 static inline void ctf_top_socket_listen_exit(int32_t sock, int32_t ret)
498 {
499 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_LISTEN_EXIT), sock, ret);
500 }
501 
ctf_top_socket_accept_enter(int32_t sock)502 static inline void ctf_top_socket_accept_enter(int32_t sock)
503 {
504 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_ACCEPT_ENTER), sock);
505 }
506 
ctf_top_socket_accept_exit(int32_t sock,ctf_net_bounded_string_t addr,uint32_t addrlen,uint16_t port,int32_t ret)507 static inline void ctf_top_socket_accept_exit(int32_t sock, ctf_net_bounded_string_t addr,
508 					      uint32_t addrlen, uint16_t port, int32_t ret)
509 {
510 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_ACCEPT_EXIT), sock, addr, addrlen,
511 		  port, ret);
512 }
513 
ctf_top_socket_sendto_enter(int32_t sock,uint32_t len,uint32_t flags,ctf_net_bounded_string_t addr,uint32_t addrlen)514 static inline void ctf_top_socket_sendto_enter(int32_t sock, uint32_t len, uint32_t flags,
515 					       ctf_net_bounded_string_t addr, uint32_t addrlen)
516 {
517 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_SENDTO_ENTER), sock, len, flags,
518 		  addr, addrlen);
519 }
520 
ctf_top_socket_sendto_exit(int32_t sock,int32_t ret)521 static inline void ctf_top_socket_sendto_exit(int32_t sock, int32_t ret)
522 {
523 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_SENDTO_EXIT), sock, ret);
524 }
525 
ctf_top_socket_sendmsg_enter(int32_t sock,uint32_t flags,uint32_t msg,ctf_net_bounded_string_t addr,uint32_t len)526 static inline void ctf_top_socket_sendmsg_enter(int32_t sock, uint32_t flags, uint32_t msg,
527 						ctf_net_bounded_string_t addr, uint32_t len)
528 {
529 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_SENDMSG_ENTER), sock, flags, msg,
530 		  addr, len);
531 }
532 
ctf_top_socket_sendmsg_exit(int32_t sock,int32_t ret)533 static inline void ctf_top_socket_sendmsg_exit(int32_t sock, int32_t ret)
534 {
535 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_SENDMSG_EXIT), sock, ret);
536 }
537 
ctf_top_socket_recvfrom_enter(int32_t sock,uint32_t max_len,uint32_t flags,uint32_t addr,uint32_t addrlen)538 static inline void ctf_top_socket_recvfrom_enter(int32_t sock, uint32_t max_len, uint32_t flags,
539 						 uint32_t addr, uint32_t addrlen)
540 {
541 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_RECVFROM_ENTER), sock, max_len, flags,
542 		  addr, addrlen);
543 }
544 
ctf_top_socket_recvfrom_exit(int32_t sock,ctf_net_bounded_string_t addr,uint32_t addrlen,int32_t ret)545 static inline void ctf_top_socket_recvfrom_exit(int32_t sock, ctf_net_bounded_string_t addr,
546 						uint32_t addrlen, int32_t ret)
547 {
548 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_RECVFROM_EXIT), sock, addr, addrlen, ret);
549 }
550 
ctf_top_socket_recvmsg_enter(int32_t sock,uint32_t msg,uint32_t max_len,uint32_t flags)551 static inline void ctf_top_socket_recvmsg_enter(int32_t sock, uint32_t msg, uint32_t max_len,
552 						uint32_t flags)
553 {
554 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_RECVMSG_ENTER), sock, msg, max_len, flags);
555 }
556 
ctf_top_socket_recvmsg_exit(int32_t sock,uint32_t len,ctf_net_bounded_string_t addr,int32_t ret)557 static inline void ctf_top_socket_recvmsg_exit(int32_t sock, uint32_t len,
558 					       ctf_net_bounded_string_t addr, int32_t ret)
559 {
560 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_RECVMSG_EXIT), sock, len, addr, ret);
561 }
562 
ctf_top_socket_fcntl_enter(int32_t sock,uint32_t cmd,uint32_t flags)563 static inline void ctf_top_socket_fcntl_enter(int32_t sock, uint32_t cmd, uint32_t flags)
564 {
565 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_FCNTL_ENTER), sock, cmd, flags);
566 }
567 
ctf_top_socket_fcntl_exit(int32_t sock,int32_t ret)568 static inline void ctf_top_socket_fcntl_exit(int32_t sock, int32_t ret)
569 {
570 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_FCNTL_EXIT), sock, ret);
571 }
572 
ctf_top_socket_ioctl_enter(int32_t sock,uint32_t req)573 static inline void ctf_top_socket_ioctl_enter(int32_t sock, uint32_t req)
574 {
575 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_IOCTL_ENTER), sock, req);
576 }
577 
ctf_top_socket_ioctl_exit(int32_t sock,int32_t ret)578 static inline void ctf_top_socket_ioctl_exit(int32_t sock, int32_t ret)
579 {
580 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_IOCTL_EXIT), sock, ret);
581 }
582 
ctf_top_socket_poll_enter(uint32_t fds,uint32_t nfds,int32_t timeout)583 static inline void ctf_top_socket_poll_enter(uint32_t fds, uint32_t nfds, int32_t timeout)
584 {
585 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_POLL_ENTER), fds, nfds, timeout);
586 }
587 
ctf_top_socket_poll_value(int32_t fd,uint16_t flag)588 static inline void ctf_top_socket_poll_value(int32_t fd, uint16_t flag)
589 {
590 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_POLL_VALUE), fd, flag);
591 }
592 
ctf_top_socket_poll_exit(uint32_t fds,int nfds,int ret)593 static inline void ctf_top_socket_poll_exit(uint32_t fds, int nfds, int ret)
594 {
595 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_POLL_EXIT), fds, nfds, ret);
596 }
597 
ctf_top_socket_getsockopt_enter(int32_t sock,uint32_t level,uint32_t optname)598 static inline void ctf_top_socket_getsockopt_enter(int32_t sock, uint32_t level, uint32_t optname)
599 {
600 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_GETSOCKOPT_ENTER), sock, level, optname);
601 }
602 
ctf_top_socket_getsockopt_exit(int32_t sock,uint32_t level,uint32_t optname,uint32_t optval,uint32_t optlen,int32_t ret)603 static inline void ctf_top_socket_getsockopt_exit(int32_t sock, uint32_t level, uint32_t optname,
604 						  uint32_t optval, uint32_t optlen, int32_t ret)
605 {
606 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_GETSOCKOPT_EXIT),
607 		  sock, level, optname, optval, optlen, ret);
608 }
609 
ctf_top_socket_setsockopt_enter(int32_t sock,uint32_t level,uint32_t optname,uint32_t optval,uint32_t optlen)610 static inline void ctf_top_socket_setsockopt_enter(int32_t sock, uint32_t level, uint32_t optname,
611 						   uint32_t optval, uint32_t optlen)
612 {
613 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_SETSOCKOPT_ENTER), sock, level,
614 		  optname, optval, optlen);
615 }
616 
ctf_top_socket_setsockopt_exit(int32_t sock,int32_t ret)617 static inline void ctf_top_socket_setsockopt_exit(int32_t sock, int32_t ret)
618 {
619 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_SETSOCKOPT_EXIT), sock, ret);
620 }
621 
ctf_top_socket_getpeername_enter(int32_t sock)622 static inline void ctf_top_socket_getpeername_enter(int32_t sock)
623 {
624 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_GETPEERNAME_ENTER), sock);
625 }
626 
ctf_top_socket_getpeername_exit(int32_t sock,ctf_net_bounded_string_t addr,uint32_t addrlen,int32_t ret)627 static inline void ctf_top_socket_getpeername_exit(int32_t sock, ctf_net_bounded_string_t addr,
628 						   uint32_t addrlen, int32_t ret)
629 {
630 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_GETPEERNAME_EXIT),
631 		  sock, addr, addrlen, ret);
632 }
633 
ctf_top_socket_getsockname_enter(int32_t sock)634 static inline void ctf_top_socket_getsockname_enter(int32_t sock)
635 {
636 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_GETSOCKNAME_ENTER), sock);
637 }
638 
ctf_top_socket_getsockname_exit(int32_t sock,ctf_net_bounded_string_t addr,uint32_t addrlen,int32_t ret)639 static inline void ctf_top_socket_getsockname_exit(int32_t sock, ctf_net_bounded_string_t addr,
640 						   uint32_t addrlen, int32_t ret)
641 {
642 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_GETSOCKNAME_EXIT),
643 		  sock, addr, addrlen, ret);
644 }
645 
ctf_top_socket_socketpair_enter(uint32_t family,uint32_t type,uint32_t proto,uint32_t sv)646 static inline void ctf_top_socket_socketpair_enter(uint32_t family, uint32_t type,
647 						   uint32_t proto, uint32_t sv)
648 {
649 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_SOCKETPAIR_ENTER), family, type,
650 		  proto, sv);
651 }
652 
ctf_top_socket_socketpair_exit(int32_t sock_A,int32_t sock_B,int32_t ret)653 static inline void ctf_top_socket_socketpair_exit(int32_t sock_A, int32_t sock_B, int32_t ret)
654 {
655 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_SOCKET_SOCKETPAIR_EXIT), sock_A, sock_B, ret);
656 }
657 
ctf_top_net_recv_data_enter(int32_t if_index,uint32_t iface,uint32_t pkt,uint32_t len)658 static inline void ctf_top_net_recv_data_enter(int32_t if_index, uint32_t iface, uint32_t pkt,
659 					       uint32_t len)
660 {
661 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_NET_RECV_DATA_ENTER),
662 		  if_index, iface, pkt, len);
663 }
664 
ctf_top_net_recv_data_exit(int32_t if_index,uint32_t iface,uint32_t pkt,int32_t ret)665 static inline void ctf_top_net_recv_data_exit(int32_t if_index, uint32_t iface, uint32_t pkt,
666 					      int32_t ret)
667 {
668 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_NET_RECV_DATA_EXIT),
669 		  if_index, iface, pkt, ret);
670 }
671 
ctf_top_net_send_data_enter(int32_t if_index,uint32_t iface,uint32_t pkt,uint32_t len)672 static inline void ctf_top_net_send_data_enter(int32_t if_index, uint32_t iface, uint32_t pkt,
673 					       uint32_t len)
674 {
675 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_NET_SEND_DATA_ENTER),
676 		  if_index, iface, pkt, len);
677 }
678 
ctf_top_net_send_data_exit(int32_t if_index,uint32_t iface,uint32_t pkt,int32_t ret)679 static inline void ctf_top_net_send_data_exit(int32_t if_index, uint32_t iface, uint32_t pkt,
680 					      int32_t ret)
681 {
682 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_NET_SEND_DATA_EXIT),
683 		  if_index, iface, pkt, ret);
684 }
685 
ctf_top_net_rx_time(int32_t if_index,uint32_t iface,uint32_t pkt,uint32_t priority,uint32_t tc,uint32_t duration)686 static inline void ctf_top_net_rx_time(int32_t if_index, uint32_t iface, uint32_t pkt,
687 				       uint32_t priority, uint32_t tc, uint32_t duration)
688 {
689 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_NET_RX_TIME),
690 		  if_index, iface, pkt, priority, tc, duration);
691 }
692 
ctf_top_net_tx_time(int32_t if_index,uint32_t iface,uint32_t pkt,uint32_t priority,uint32_t tc,uint32_t duration)693 static inline void ctf_top_net_tx_time(int32_t if_index, uint32_t iface, uint32_t pkt,
694 				       uint32_t priority, uint32_t tc, uint32_t duration)
695 {
696 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_NET_TX_TIME),
697 		  if_index, iface, pkt, priority, tc, duration);
698 }
699 
ctf_named_event(ctf_bounded_string_t name,uint32_t arg0,uint32_t arg1)700 static inline void ctf_named_event(ctf_bounded_string_t name, uint32_t arg0,
701 				   uint32_t arg1)
702 {
703 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_NAMED_EVENT), name,
704 		  arg0, arg1);
705 }
706 
707 /* GPIO */
ctf_top_gpio_pin_interrupt_configure_enter(uint32_t port,uint32_t pin,uint32_t flags)708 static inline void ctf_top_gpio_pin_interrupt_configure_enter(uint32_t port, uint32_t pin,
709 							      uint32_t flags)
710 {
711 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_GPIO_PIN_CONFIGURE_INTERRUPT_ENTER), port, pin,
712 		  flags);
713 }
714 
ctf_top_gpio_pin_interrupt_configure_exit(uint32_t port,uint32_t pin,int32_t ret)715 static inline void ctf_top_gpio_pin_interrupt_configure_exit(uint32_t port, uint32_t pin,
716 							     int32_t ret)
717 {
718 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_GPIO_PIN_CONFIGURE_INTERRUPT_EXIT), port, pin,
719 		  ret);
720 }
721 
ctf_top_gpio_pin_configure_enter(uint32_t port,uint32_t pin,uint32_t flags)722 static inline void ctf_top_gpio_pin_configure_enter(uint32_t port, uint32_t pin, uint32_t flags)
723 {
724 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_GPIO_PIN_CONFIGURE_ENTER), port, pin, flags);
725 }
726 
ctf_top_gpio_pin_configure_exit(uint32_t port,uint32_t pin,int32_t ret)727 static inline void ctf_top_gpio_pin_configure_exit(uint32_t port, uint32_t pin, int32_t ret)
728 {
729 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_GPIO_PIN_CONFIGURE_EXIT), port, pin, ret);
730 }
731 
ctf_top_gpio_port_get_direction_enter(uint32_t port,uint32_t map,uint32_t inputs,uint32_t outputs)732 static inline void ctf_top_gpio_port_get_direction_enter(uint32_t port, uint32_t map,
733 							 uint32_t inputs, uint32_t outputs)
734 {
735 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_GPIO_PORT_GET_DIRECTION_ENTER), port, map, inputs,
736 		  outputs);
737 }
738 
ctf_top_gpio_port_get_direction_exit(uint32_t port,int32_t ret)739 static inline void ctf_top_gpio_port_get_direction_exit(uint32_t port, int32_t ret)
740 {
741 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_GPIO_PORT_GET_DIRECTION_EXIT), port, ret);
742 }
743 
ctf_top_gpio_pin_get_config_enter(uint32_t port,uint32_t pin,uint32_t flags)744 static inline void ctf_top_gpio_pin_get_config_enter(uint32_t port, uint32_t pin, uint32_t flags)
745 {
746 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_GPIO_PIN_GET_CONFIG_ENTER), port, pin, flags);
747 }
748 
ctf_top_gpio_pin_get_config_exit(uint32_t port,uint32_t pin,int32_t ret)749 static inline void ctf_top_gpio_pin_get_config_exit(uint32_t port, uint32_t pin, int32_t ret)
750 {
751 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_GPIO_PIN_GET_CONFIG_EXIT), port, pin, ret);
752 }
753 
ctf_top_gpio_port_get_raw_enter(uint32_t port,uint32_t value)754 static inline void ctf_top_gpio_port_get_raw_enter(uint32_t port, uint32_t value)
755 {
756 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_GPIO_PORT_GET_RAW_ENTER), port, value);
757 }
758 
ctf_top_gpio_port_get_raw_exit(uint32_t port,int32_t ret)759 static inline void ctf_top_gpio_port_get_raw_exit(uint32_t port, int32_t ret)
760 {
761 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_GPIO_PORT_GET_RAW_EXIT), port, ret);
762 }
763 
ctf_top_gpio_port_set_masked_raw_enter(uint32_t port,uint32_t mask,uint32_t value)764 static inline void ctf_top_gpio_port_set_masked_raw_enter(uint32_t port, uint32_t mask,
765 							  uint32_t value)
766 {
767 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_GPIO_PORT_SET_MASKED_RAW_ENTER), port, mask,
768 		  value);
769 }
770 
ctf_top_gpio_port_set_masked_raw_exit(uint32_t port,int32_t ret)771 static inline void ctf_top_gpio_port_set_masked_raw_exit(uint32_t port, int32_t ret)
772 {
773 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_GPIO_PORT_SET_MASKED_RAW_EXIT), port, ret);
774 }
775 
ctf_top_gpio_port_set_bits_raw_enter(uint32_t port,uint32_t pins)776 static inline void ctf_top_gpio_port_set_bits_raw_enter(uint32_t port, uint32_t pins)
777 {
778 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_GPIO_PORT_SET_BITS_RAW_ENTER), port, pins);
779 }
780 
ctf_top_gpio_port_set_bits_raw_exit(uint32_t port,int32_t ret)781 static inline void ctf_top_gpio_port_set_bits_raw_exit(uint32_t port, int32_t ret)
782 {
783 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_GPIO_PORT_SET_BITS_RAW_EXIT), port, ret);
784 }
785 
ctf_top_gpio_port_clear_bits_raw_enter(uint32_t port,uint32_t pins)786 static inline void ctf_top_gpio_port_clear_bits_raw_enter(uint32_t port, uint32_t pins)
787 {
788 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_GPIO_PORT_CLEAR_BITS_RAW_ENTER), port, pins);
789 }
790 
ctf_top_gpio_port_clear_bits_raw_exit(uint32_t port,int32_t ret)791 static inline void ctf_top_gpio_port_clear_bits_raw_exit(uint32_t port, int32_t ret)
792 {
793 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_GPIO_PORT_CLEAR_BITS_RAW_EXIT), port, ret);
794 }
795 
ctf_top_gpio_port_toggle_bits_enter(uint32_t port,uint32_t pins)796 static inline void ctf_top_gpio_port_toggle_bits_enter(uint32_t port, uint32_t pins)
797 {
798 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_GPIO_PORT_TOGGLE_BITS_ENTER), port, pins);
799 }
800 
ctf_top_gpio_port_toggle_bits_exit(uint32_t port,int32_t ret)801 static inline void ctf_top_gpio_port_toggle_bits_exit(uint32_t port, int32_t ret)
802 {
803 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_GPIO_PORT_TOGGLE_BITS_EXIT), port, ret);
804 }
805 
ctf_top_gpio_init_callback_enter(uint32_t callback,uint32_t handler,uint32_t pin_mask)806 static inline void ctf_top_gpio_init_callback_enter(uint32_t callback, uint32_t handler,
807 						    uint32_t pin_mask)
808 {
809 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_GPIO_INIT_CALLBACK_ENTER), callback, handler,
810 		  pin_mask);
811 }
812 
ctf_top_gpio_init_callback_exit(uint32_t callback)813 static inline void ctf_top_gpio_init_callback_exit(uint32_t callback)
814 {
815 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_GPIO_INIT_CALLBACK_EXIT), callback);
816 }
817 
ctf_top_gpio_add_callback_enter(uint32_t port,uint32_t callback)818 static inline void ctf_top_gpio_add_callback_enter(uint32_t port, uint32_t callback)
819 {
820 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_GPIO_ADD_CALLBACK_ENTER), port, callback);
821 }
822 
ctf_top_gpio_add_callback_exit(uint32_t port,int32_t ret)823 static inline void ctf_top_gpio_add_callback_exit(uint32_t port, int32_t ret)
824 {
825 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_GPIO_ADD_CALLBACK_EXIT), port, ret);
826 }
827 
ctf_top_gpio_remove_callback_enter(uint32_t port,uint32_t callback)828 static inline void ctf_top_gpio_remove_callback_enter(uint32_t port, uint32_t callback)
829 {
830 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_GPIO_REMOVE_CALLBACK_ENTER), port, callback);
831 }
832 
ctf_top_gpio_remove_callback_exit(uint32_t port,int32_t ret)833 static inline void ctf_top_gpio_remove_callback_exit(uint32_t port, int32_t ret)
834 {
835 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_GPIO_REMOVE_CALLBACK_EXIT), port, ret);
836 }
837 
ctf_top_gpio_get_pending_int_enter(uint32_t dev)838 static inline void ctf_top_gpio_get_pending_int_enter(uint32_t dev)
839 {
840 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_GPIO_GET_PENDING_INT_ENTER), dev);
841 }
842 
ctf_top_gpio_get_pending_int_exit(uint32_t dev,int32_t ret)843 static inline void ctf_top_gpio_get_pending_int_exit(uint32_t dev, int32_t ret)
844 {
845 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_GPIO_GET_PENDING_INT_EXIT), dev, ret);
846 }
847 
ctf_top_gpio_fire_callbacks_enter(uint32_t list,uint32_t port,uint32_t pins)848 static inline void ctf_top_gpio_fire_callbacks_enter(uint32_t list, uint32_t port, uint32_t pins)
849 {
850 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_GPIO_FIRE_CALLBACKS_ENTER), list, port, pins);
851 }
852 
ctf_top_gpio_fire_callback(uint32_t port,uint32_t cb)853 static inline void ctf_top_gpio_fire_callback(uint32_t port, uint32_t cb)
854 {
855 	CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_GPIO_FIRE_CALLBACK), port, cb);
856 }
857 
858 #endif /* SUBSYS_DEBUG_TRACING_CTF_TOP_H */
859