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_H_ 699a2dd95SBruce Richardson #define _RTE_TRACE_H_ 799a2dd95SBruce Richardson 899a2dd95SBruce Richardson /** 999a2dd95SBruce Richardson * @file 1099a2dd95SBruce Richardson * 1199a2dd95SBruce Richardson * RTE Trace API 1299a2dd95SBruce Richardson * 1399a2dd95SBruce Richardson * This file provides the trace API to RTE applications. 1499a2dd95SBruce Richardson * 1599a2dd95SBruce Richardson * @warning 1699a2dd95SBruce Richardson * @b EXPERIMENTAL: this API may change without prior notice 1799a2dd95SBruce Richardson */ 1899a2dd95SBruce Richardson 1999a2dd95SBruce Richardson #include <stdbool.h> 2099a2dd95SBruce Richardson #include <stdio.h> 2199a2dd95SBruce Richardson 2299a2dd95SBruce Richardson #include <rte_common.h> 2399a2dd95SBruce Richardson #include <rte_compat.h> 2499a2dd95SBruce Richardson 25*719834a6SMattias Rönnblom #ifdef __cplusplus 26*719834a6SMattias Rönnblom extern "C" { 27*719834a6SMattias Rönnblom #endif 28*719834a6SMattias Rönnblom 2999a2dd95SBruce Richardson /** 3099a2dd95SBruce Richardson * Test if trace is enabled. 3199a2dd95SBruce Richardson * 3299a2dd95SBruce Richardson * @return 3399a2dd95SBruce Richardson * true if trace is enabled, false otherwise. 3499a2dd95SBruce Richardson */ 3599a2dd95SBruce Richardson __rte_experimental 3699a2dd95SBruce Richardson bool rte_trace_is_enabled(void); 3799a2dd95SBruce Richardson 3899a2dd95SBruce Richardson /** 39e7bc451cSMorten Brørup * @warning 40e7bc451cSMorten Brørup * @b EXPERIMENTAL: this API may change, or be removed, without prior notice 41e7bc451cSMorten Brørup * 42e7bc451cSMorten Brørup * Test if trace feature is enabled at compile time. 43e7bc451cSMorten Brørup * 44e7bc451cSMorten Brørup * @return 45e7bc451cSMorten Brørup * true if trace feature is enabled, false otherwise. 46e7bc451cSMorten Brørup */ 47e7bc451cSMorten Brørup __rte_experimental 48e7bc451cSMorten Brørup static __rte_always_inline bool 49e7bc451cSMorten Brørup rte_trace_feature_is_enabled(void) 50e7bc451cSMorten Brørup { 51e7bc451cSMorten Brørup #ifdef RTE_TRACE 52e7bc451cSMorten Brørup return true; 53e7bc451cSMorten Brørup #else 54e7bc451cSMorten Brørup return false; 55e7bc451cSMorten Brørup #endif 56e7bc451cSMorten Brørup } 57e7bc451cSMorten Brørup 58e7bc451cSMorten Brørup /** 5999a2dd95SBruce Richardson * Enumerate trace mode operation. 6099a2dd95SBruce Richardson */ 6199a2dd95SBruce Richardson enum rte_trace_mode { 6299a2dd95SBruce Richardson /** 6399a2dd95SBruce Richardson * In this mode, when no space is left in the trace buffer, the 6499a2dd95SBruce Richardson * subsequent events overwrite the old events. 6599a2dd95SBruce Richardson */ 6699a2dd95SBruce Richardson RTE_TRACE_MODE_OVERWRITE, 6799a2dd95SBruce Richardson /** 6899a2dd95SBruce Richardson * In this mode, when no space is left in the trace buffer, the 6999a2dd95SBruce Richardson * subsequent events shall not be recorded. 7099a2dd95SBruce Richardson */ 7199a2dd95SBruce Richardson RTE_TRACE_MODE_DISCARD, 7299a2dd95SBruce Richardson }; 7399a2dd95SBruce Richardson 7499a2dd95SBruce Richardson /** 7599a2dd95SBruce Richardson * Set the trace mode. 7699a2dd95SBruce Richardson * 7799a2dd95SBruce Richardson * @param mode 7899a2dd95SBruce Richardson * Trace mode. 7999a2dd95SBruce Richardson */ 8099a2dd95SBruce Richardson __rte_experimental 8199a2dd95SBruce Richardson void rte_trace_mode_set(enum rte_trace_mode mode); 8299a2dd95SBruce Richardson 8399a2dd95SBruce Richardson /** 8499a2dd95SBruce Richardson * Get the trace mode. 8599a2dd95SBruce Richardson * 8699a2dd95SBruce Richardson * @return 8799a2dd95SBruce Richardson * The current trace mode. 8899a2dd95SBruce Richardson */ 8999a2dd95SBruce Richardson __rte_experimental 9099a2dd95SBruce Richardson enum rte_trace_mode rte_trace_mode_get(void); 9199a2dd95SBruce Richardson 9299a2dd95SBruce Richardson /** 9399a2dd95SBruce Richardson * Enable/Disable a set of tracepoints based on globbing pattern. 9499a2dd95SBruce Richardson * 9599a2dd95SBruce Richardson * @param pattern 9699a2dd95SBruce Richardson * The globbing pattern identifying the tracepoint. 9799a2dd95SBruce Richardson * @param enable 9899a2dd95SBruce Richardson * true to enable tracepoint, false to disable the tracepoint, upon match. 9999a2dd95SBruce Richardson * @return 10099a2dd95SBruce Richardson * - 0: Success and no pattern match. 10199a2dd95SBruce Richardson * - 1: Success and found pattern match. 10299a2dd95SBruce Richardson * - (-ERANGE): Tracepoint object is not registered. 10399a2dd95SBruce Richardson */ 10499a2dd95SBruce Richardson __rte_experimental 10599a2dd95SBruce Richardson int rte_trace_pattern(const char *pattern, bool enable); 10699a2dd95SBruce Richardson 10799a2dd95SBruce Richardson /** 10899a2dd95SBruce Richardson * Enable/Disable a set of tracepoints based on regular expression. 10999a2dd95SBruce Richardson * 11099a2dd95SBruce Richardson * @param regex 11199a2dd95SBruce Richardson * A regular expression identifying the tracepoint. 11299a2dd95SBruce Richardson * @param enable 11399a2dd95SBruce Richardson * true to enable tracepoint, false to disable the tracepoint, upon match. 11499a2dd95SBruce Richardson * @return 11599a2dd95SBruce Richardson * - 0: Success and no pattern match. 11699a2dd95SBruce Richardson * - 1: Success and found pattern match. 11799a2dd95SBruce Richardson * - (-ERANGE): Tracepoint object is not registered. 11899a2dd95SBruce Richardson * - (-EINVAL): Invalid regular expression rule. 11999a2dd95SBruce Richardson */ 12099a2dd95SBruce Richardson __rte_experimental 12199a2dd95SBruce Richardson int rte_trace_regexp(const char *regex, bool enable); 12299a2dd95SBruce Richardson 12399a2dd95SBruce Richardson /** 12499a2dd95SBruce Richardson * Save the trace buffer to the trace directory. 12599a2dd95SBruce Richardson * 12699a2dd95SBruce Richardson * By default, trace directory will be created at $HOME directory and this can 12799a2dd95SBruce Richardson * be overridden by --trace-dir EAL parameter. 12899a2dd95SBruce Richardson * 12999a2dd95SBruce Richardson * @return 13099a2dd95SBruce Richardson * - 0: Success. 13199a2dd95SBruce Richardson * - <0 : Failure. 13299a2dd95SBruce Richardson */ 13399a2dd95SBruce Richardson __rte_experimental 13499a2dd95SBruce Richardson int rte_trace_save(void); 13599a2dd95SBruce Richardson 13699a2dd95SBruce Richardson /** 13799a2dd95SBruce Richardson * Dump the trace metadata to a file. 13899a2dd95SBruce Richardson * 13999a2dd95SBruce Richardson * @param f 14099a2dd95SBruce Richardson * A pointer to a file for output 14199a2dd95SBruce Richardson * @return 14299a2dd95SBruce Richardson * - 0: Success. 14399a2dd95SBruce Richardson * - <0 : Failure. 14499a2dd95SBruce Richardson */ 14599a2dd95SBruce Richardson __rte_experimental 14699a2dd95SBruce Richardson int rte_trace_metadata_dump(FILE *f); 14799a2dd95SBruce Richardson 14899a2dd95SBruce Richardson /** 14999a2dd95SBruce Richardson * Dump the trace subsystem status to a file. 15099a2dd95SBruce Richardson * 15199a2dd95SBruce Richardson * @param f 15299a2dd95SBruce Richardson * A pointer to a file for output 15399a2dd95SBruce Richardson */ 15499a2dd95SBruce Richardson __rte_experimental 15599a2dd95SBruce Richardson void rte_trace_dump(FILE *f); 15699a2dd95SBruce Richardson 15799a2dd95SBruce Richardson #ifdef __cplusplus 15899a2dd95SBruce Richardson } 15999a2dd95SBruce Richardson #endif 16099a2dd95SBruce Richardson 16199a2dd95SBruce Richardson #endif /* _RTE_TRACE_H_ */ 162