xref: /dpdk/lib/eal/include/rte_trace_point_register.h (revision 719834a6849e1daf4a70ff7742bbcc3ae7e25607)
199a2dd95SBruce Richardson /* SPDX-License-Identifier: BSD-3-Clause
299a2dd95SBruce Richardson  * Copyright(C) 2020 Marvell International Ltd.
399a2dd95SBruce Richardson  */
499a2dd95SBruce Richardson 
599a2dd95SBruce Richardson #ifndef _RTE_TRACE_POINT_REGISTER_H_
699a2dd95SBruce Richardson #define _RTE_TRACE_POINT_REGISTER_H_
799a2dd95SBruce Richardson 
899a2dd95SBruce Richardson #ifdef _RTE_TRACE_POINT_H_
999a2dd95SBruce Richardson #error for registration, include this file first before <rte_trace_point.h>
1099a2dd95SBruce Richardson #endif
1199a2dd95SBruce Richardson 
1299a2dd95SBruce Richardson #include <rte_per_lcore.h>
1399a2dd95SBruce Richardson #include <rte_trace_point.h>
1499a2dd95SBruce Richardson 
15*719834a6SMattias Rönnblom #ifdef __cplusplus
16*719834a6SMattias Rönnblom extern "C" {
17*719834a6SMattias Rönnblom #endif
18*719834a6SMattias Rönnblom 
1999a2dd95SBruce Richardson RTE_DECLARE_PER_LCORE(volatile int, trace_point_sz);
2099a2dd95SBruce Richardson 
2199a2dd95SBruce Richardson #define RTE_TRACE_POINT_REGISTER(trace, name) \
2274fff67aSTyler Retzlaff rte_trace_point_t __rte_section("__rte_trace_point") __##trace; \
23477cc313SDavid Marchand static const char __##trace##_name[] = RTE_STR(name); \
2499a2dd95SBruce Richardson RTE_INIT(trace##_init) \
2599a2dd95SBruce Richardson { \
26e7bc451cSMorten Brørup 	if (!rte_trace_feature_is_enabled()) \
27e7bc451cSMorten Brørup 		return; \
28477cc313SDavid Marchand 	__rte_trace_point_register(&__##trace, __##trace##_name, \
2999a2dd95SBruce Richardson 		(void (*)(void)) trace); \
3099a2dd95SBruce Richardson }
3199a2dd95SBruce Richardson 
3299a2dd95SBruce Richardson #define __rte_trace_point_emit_header_generic(t) \
3399a2dd95SBruce Richardson 	RTE_PER_LCORE(trace_point_sz) = __RTE_TRACE_EVENT_HEADER_SZ
3499a2dd95SBruce Richardson 
3599a2dd95SBruce Richardson #define __rte_trace_point_emit_header_fp(t) \
3699a2dd95SBruce Richardson 	__rte_trace_point_emit_header_generic(t)
3799a2dd95SBruce Richardson 
3899a2dd95SBruce Richardson #define __rte_trace_point_emit(in, type) \
3999a2dd95SBruce Richardson do { \
4099a2dd95SBruce Richardson 	RTE_BUILD_BUG_ON(sizeof(type) != sizeof(typeof(in))); \
4199a2dd95SBruce Richardson 	__rte_trace_point_emit_field(sizeof(type), RTE_STR(in), \
4299a2dd95SBruce Richardson 		RTE_STR(type)); \
4399a2dd95SBruce Richardson } while (0)
4499a2dd95SBruce Richardson 
4599a2dd95SBruce Richardson #define rte_trace_point_emit_string(in) \
4699a2dd95SBruce Richardson do { \
4799a2dd95SBruce Richardson 	RTE_SET_USED(in); \
4899a2dd95SBruce Richardson 	__rte_trace_point_emit_field(__RTE_TRACE_EMIT_STRING_LEN_MAX, \
4999a2dd95SBruce Richardson 		RTE_STR(in)"[32]", "string_bounded_t"); \
5099a2dd95SBruce Richardson } while (0)
5199a2dd95SBruce Richardson 
524925e15aSAnkur Dwivedi #define rte_trace_point_emit_blob(in, len) \
534925e15aSAnkur Dwivedi do { \
544925e15aSAnkur Dwivedi 	RTE_SET_USED(in); \
554925e15aSAnkur Dwivedi 	__rte_trace_point_emit(len, uint8_t); \
564925e15aSAnkur Dwivedi 	__rte_trace_point_emit_field(RTE_TRACE_BLOB_LEN_MAX, \
574925e15aSAnkur Dwivedi 		RTE_STR(in)"[" RTE_STR(RTE_TRACE_BLOB_LEN_MAX)"]", \
584925e15aSAnkur Dwivedi 		RTE_STR(uint8_t)); \
594925e15aSAnkur Dwivedi } while (0)
604925e15aSAnkur Dwivedi 
61d7e9c02cSBrian Dooley #ifdef __cplusplus
62d7e9c02cSBrian Dooley }
63d7e9c02cSBrian Dooley #endif
64d7e9c02cSBrian Dooley 
6599a2dd95SBruce Richardson #endif /* _RTE_TRACE_POINT_REGISTER_H_ */
66