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