xref: /dpdk/lib/eal/include/rte_trace_point_register.h (revision 719834a6849e1daf4a70ff7742bbcc3ae7e25607)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2020 Marvell International Ltd.
3  */
4 
5 #ifndef _RTE_TRACE_POINT_REGISTER_H_
6 #define _RTE_TRACE_POINT_REGISTER_H_
7 
8 #ifdef _RTE_TRACE_POINT_H_
9 #error for registration, include this file first before <rte_trace_point.h>
10 #endif
11 
12 #include <rte_per_lcore.h>
13 #include <rte_trace_point.h>
14 
15 #ifdef __cplusplus
16 extern "C" {
17 #endif
18 
19 RTE_DECLARE_PER_LCORE(volatile int, trace_point_sz);
20 
21 #define RTE_TRACE_POINT_REGISTER(trace, name) \
22 rte_trace_point_t __rte_section("__rte_trace_point") __##trace; \
23 static const char __##trace##_name[] = RTE_STR(name); \
24 RTE_INIT(trace##_init) \
25 { \
26 	if (!rte_trace_feature_is_enabled()) \
27 		return; \
28 	__rte_trace_point_register(&__##trace, __##trace##_name, \
29 		(void (*)(void)) trace); \
30 }
31 
32 #define __rte_trace_point_emit_header_generic(t) \
33 	RTE_PER_LCORE(trace_point_sz) = __RTE_TRACE_EVENT_HEADER_SZ
34 
35 #define __rte_trace_point_emit_header_fp(t) \
36 	__rte_trace_point_emit_header_generic(t)
37 
38 #define __rte_trace_point_emit(in, type) \
39 do { \
40 	RTE_BUILD_BUG_ON(sizeof(type) != sizeof(typeof(in))); \
41 	__rte_trace_point_emit_field(sizeof(type), RTE_STR(in), \
42 		RTE_STR(type)); \
43 } while (0)
44 
45 #define rte_trace_point_emit_string(in) \
46 do { \
47 	RTE_SET_USED(in); \
48 	__rte_trace_point_emit_field(__RTE_TRACE_EMIT_STRING_LEN_MAX, \
49 		RTE_STR(in)"[32]", "string_bounded_t"); \
50 } while (0)
51 
52 #define rte_trace_point_emit_blob(in, len) \
53 do { \
54 	RTE_SET_USED(in); \
55 	__rte_trace_point_emit(len, uint8_t); \
56 	__rte_trace_point_emit_field(RTE_TRACE_BLOB_LEN_MAX, \
57 		RTE_STR(in)"[" RTE_STR(RTE_TRACE_BLOB_LEN_MAX)"]", \
58 		RTE_STR(uint8_t)); \
59 } while (0)
60 
61 #ifdef __cplusplus
62 }
63 #endif
64 
65 #endif /* _RTE_TRACE_POINT_REGISTER_H_ */
66