1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2020 Marvell International Ltd.
3  */
4 
5 #ifndef _RTE_EAL_TRACE_H_
6 #define _RTE_EAL_TRACE_H_
7 
8 /**
9  * @file
10  *
11  * API for EAL trace support
12  */
13 
14 #ifdef __cplusplus
15 extern "C" {
16 #endif
17 
18 #include <rte_alarm.h>
19 #include <rte_interrupts.h>
20 #include <rte_trace_point.h>
21 
22 /* Alarm */
23 RTE_TRACE_POINT(
24 	rte_eal_trace_alarm_set,
25 	RTE_TRACE_POINT_ARGS(uint64_t us, rte_eal_alarm_callback cb_fn,
26 		void *cb_arg, int rc),
27 	rte_trace_point_emit_u64(us);
28 	rte_trace_point_emit_ptr(cb_fn);
29 	rte_trace_point_emit_ptr(cb_arg);
30 	rte_trace_point_emit_int(rc);
31 )
32 
33 RTE_TRACE_POINT(
34 	rte_eal_trace_alarm_cancel,
35 	RTE_TRACE_POINT_ARGS(rte_eal_alarm_callback cb_fn, void *cb_arg,
36 		int count),
37 	rte_trace_point_emit_ptr(cb_fn);
38 	rte_trace_point_emit_ptr(cb_arg);
39 	rte_trace_point_emit_int(count);
40 )
41 
42 /* Generic */
43 RTE_TRACE_POINT(
44 	rte_eal_trace_generic_void,
45 	RTE_TRACE_POINT_ARGS(void),
46 )
47 
48 RTE_TRACE_POINT(
49 	rte_eal_trace_generic_u64,
50 	RTE_TRACE_POINT_ARGS(uint64_t in),
51 	rte_trace_point_emit_u64(in);
52 )
53 
54 RTE_TRACE_POINT(
55 	rte_eal_trace_generic_u32,
56 	RTE_TRACE_POINT_ARGS(uint32_t in),
57 	rte_trace_point_emit_u32(in);
58 )
59 
60 RTE_TRACE_POINT(
61 	rte_eal_trace_generic_u16,
62 	RTE_TRACE_POINT_ARGS(uint16_t in),
63 	rte_trace_point_emit_u16(in);
64 )
65 
66 RTE_TRACE_POINT(
67 	rte_eal_trace_generic_u8,
68 	RTE_TRACE_POINT_ARGS(uint8_t in),
69 	rte_trace_point_emit_u8(in);
70 )
71 
72 RTE_TRACE_POINT(
73 	rte_eal_trace_generic_i64,
74 	RTE_TRACE_POINT_ARGS(int64_t in),
75 	rte_trace_point_emit_i64(in);
76 )
77 
78 RTE_TRACE_POINT(
79 	rte_eal_trace_generic_i32,
80 	RTE_TRACE_POINT_ARGS(int32_t in),
81 	rte_trace_point_emit_i32(in);
82 )
83 
84 RTE_TRACE_POINT(
85 	rte_eal_trace_generic_i16,
86 	RTE_TRACE_POINT_ARGS(int16_t in),
87 	rte_trace_point_emit_i16(in);
88 )
89 
90 RTE_TRACE_POINT(
91 	rte_eal_trace_generic_i8,
92 	RTE_TRACE_POINT_ARGS(int8_t in),
93 	rte_trace_point_emit_i8(in);
94 )
95 
96 RTE_TRACE_POINT(
97 	rte_eal_trace_generic_int,
98 	RTE_TRACE_POINT_ARGS(int in),
99 	rte_trace_point_emit_int(in);
100 )
101 
102 RTE_TRACE_POINT(
103 	rte_eal_trace_generic_long,
104 	RTE_TRACE_POINT_ARGS(long in),
105 	rte_trace_point_emit_long(in);
106 )
107 
108 RTE_TRACE_POINT(
109 	rte_eal_trace_generic_float,
110 	RTE_TRACE_POINT_ARGS(float in),
111 	rte_trace_point_emit_float(in);
112 )
113 
114 RTE_TRACE_POINT(
115 	rte_eal_trace_generic_double,
116 	RTE_TRACE_POINT_ARGS(double in),
117 	rte_trace_point_emit_double(in);
118 )
119 
120 RTE_TRACE_POINT(
121 	rte_eal_trace_generic_ptr,
122 	RTE_TRACE_POINT_ARGS(const void *ptr),
123 	rte_trace_point_emit_ptr(ptr);
124 )
125 
126 RTE_TRACE_POINT(
127 	rte_eal_trace_generic_str,
128 	RTE_TRACE_POINT_ARGS(const char *str),
129 	rte_trace_point_emit_string(str);
130 )
131 
132 RTE_TRACE_POINT(
133 	rte_eal_trace_generic_size_t,
134 	RTE_TRACE_POINT_ARGS(size_t sz),
135 	rte_trace_point_emit_size_t(sz);
136 )
137 
138 RTE_TRACE_POINT(
139 	rte_eal_trace_generic_func,
140 	RTE_TRACE_POINT_ARGS(const char *func),
141 	rte_trace_point_emit_string(func);
142 )
143 
144 #define RTE_EAL_TRACE_GENERIC_FUNC rte_eal_trace_generic_func(__func__)
145 
146 /* Interrupt */
147 RTE_TRACE_POINT(
148 	rte_eal_trace_intr_callback_register,
149 	RTE_TRACE_POINT_ARGS(const struct rte_intr_handle *handle,
150 		rte_intr_callback_fn cb, void *cb_arg, int rc),
151 	rte_trace_point_emit_int(rc);
152 	rte_trace_point_emit_int(handle->vfio_dev_fd);
153 	rte_trace_point_emit_int(handle->fd);
154 	rte_trace_point_emit_int(handle->type);
155 	rte_trace_point_emit_u32(handle->max_intr);
156 	rte_trace_point_emit_u32(handle->nb_efd);
157 	rte_trace_point_emit_ptr(cb);
158 	rte_trace_point_emit_ptr(cb_arg);
159 )
160 RTE_TRACE_POINT(
161 	rte_eal_trace_intr_callback_unregister,
162 	RTE_TRACE_POINT_ARGS(const struct rte_intr_handle *handle,
163 		rte_intr_callback_fn cb, void *cb_arg, int rc),
164 	rte_trace_point_emit_int(rc);
165 	rte_trace_point_emit_int(handle->vfio_dev_fd);
166 	rte_trace_point_emit_int(handle->fd);
167 	rte_trace_point_emit_int(handle->type);
168 	rte_trace_point_emit_u32(handle->max_intr);
169 	rte_trace_point_emit_u32(handle->nb_efd);
170 	rte_trace_point_emit_ptr(cb);
171 	rte_trace_point_emit_ptr(cb_arg);
172 )
173 RTE_TRACE_POINT(
174 	rte_eal_trace_intr_enable,
175 	RTE_TRACE_POINT_ARGS(const struct rte_intr_handle *handle, int rc),
176 	rte_trace_point_emit_int(rc);
177 	rte_trace_point_emit_int(handle->vfio_dev_fd);
178 	rte_trace_point_emit_int(handle->fd);
179 	rte_trace_point_emit_int(handle->type);
180 	rte_trace_point_emit_u32(handle->max_intr);
181 	rte_trace_point_emit_u32(handle->nb_efd);
182 )
183 RTE_TRACE_POINT(
184 	rte_eal_trace_intr_disable,
185 	RTE_TRACE_POINT_ARGS(const struct rte_intr_handle *handle, int rc),
186 	rte_trace_point_emit_int(rc);
187 	rte_trace_point_emit_int(handle->vfio_dev_fd);
188 	rte_trace_point_emit_int(handle->fd);
189 	rte_trace_point_emit_int(handle->type);
190 	rte_trace_point_emit_u32(handle->max_intr);
191 	rte_trace_point_emit_u32(handle->nb_efd);
192 )
193 
194 /* Memory */
195 RTE_TRACE_POINT(
196 	rte_eal_trace_mem_zmalloc,
197 	RTE_TRACE_POINT_ARGS(const char *type, size_t size, unsigned int align,
198 		int socket, void *ptr),
199 	rte_trace_point_emit_string(type);
200 	rte_trace_point_emit_size_t(size);
201 	rte_trace_point_emit_u32(align);
202 	rte_trace_point_emit_int(socket);
203 	rte_trace_point_emit_ptr(ptr);
204 )
205 
206 RTE_TRACE_POINT(
207 	rte_eal_trace_mem_malloc,
208 	RTE_TRACE_POINT_ARGS(const char *type, size_t size, unsigned int align,
209 		int socket, void *ptr),
210 	rte_trace_point_emit_string(type);
211 	rte_trace_point_emit_size_t(size);
212 	rte_trace_point_emit_u32(align);
213 	rte_trace_point_emit_int(socket);
214 	rte_trace_point_emit_ptr(ptr);
215 )
216 
217 RTE_TRACE_POINT(
218 	rte_eal_trace_mem_realloc,
219 	RTE_TRACE_POINT_ARGS(size_t size, unsigned int align, int socket,
220 		void *ptr),
221 	rte_trace_point_emit_size_t(size);
222 	rte_trace_point_emit_u32(align);
223 	rte_trace_point_emit_int(socket);
224 	rte_trace_point_emit_ptr(ptr);
225 )
226 
227 RTE_TRACE_POINT(
228 	rte_eal_trace_mem_free,
229 	RTE_TRACE_POINT_ARGS(void *ptr),
230 	rte_trace_point_emit_ptr(ptr);
231 )
232 
233 /* Memzone */
234 RTE_TRACE_POINT(
235 	rte_eal_trace_memzone_reserve,
236 	RTE_TRACE_POINT_ARGS(const char *name, size_t len, int socket_id,
237 		unsigned int flags, unsigned int align, unsigned int bound,
238 		const void *mz),
239 	rte_trace_point_emit_string(name);
240 	rte_trace_point_emit_size_t(len);
241 	rte_trace_point_emit_int(socket_id);
242 	rte_trace_point_emit_u32(flags);
243 	rte_trace_point_emit_u32(align);
244 	rte_trace_point_emit_u32(bound);
245 	rte_trace_point_emit_ptr(mz);
246 )
247 
248 RTE_TRACE_POINT(
249 	rte_eal_trace_memzone_lookup,
250 	RTE_TRACE_POINT_ARGS(const char *name, const void *memzone),
251 	rte_trace_point_emit_string(name);
252 	rte_trace_point_emit_ptr(memzone);
253 )
254 
255 RTE_TRACE_POINT(
256 	rte_eal_trace_memzone_free,
257 	RTE_TRACE_POINT_ARGS(const char *name, void *addr, int rc),
258 	rte_trace_point_emit_string(name);
259 	rte_trace_point_emit_ptr(addr);
260 	rte_trace_point_emit_int(rc);
261 )
262 
263 /* Thread */
264 RTE_TRACE_POINT(
265 	rte_eal_trace_thread_remote_launch,
266 	RTE_TRACE_POINT_ARGS(int (*f)(void *), void *arg,
267 		unsigned int worker_id, int rc),
268 	rte_trace_point_emit_ptr(f);
269 	rte_trace_point_emit_ptr(arg);
270 	rte_trace_point_emit_u32(worker_id);
271 	rte_trace_point_emit_int(rc);
272 )
273 RTE_TRACE_POINT(
274 	rte_eal_trace_thread_lcore_ready,
275 	RTE_TRACE_POINT_ARGS(unsigned int lcore_id, const char *cpuset),
276 	rte_trace_point_emit_u32(lcore_id);
277 	rte_trace_point_emit_string(cpuset);
278 )
279 
280 #ifdef __cplusplus
281 }
282 #endif
283 
284 #endif /* _RTE_EAL_TRACE_H_ */
285