xref: /dpdk/lib/eal/include/rte_trace.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_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