xref: /openbmc/linux/tools/tracing/rtla/src/osnoise.h (revision 0605bf00)
1*0605bf00SDaniel Bristot de Oliveira // SPDX-License-Identifier: GPL-2.0
2*0605bf00SDaniel Bristot de Oliveira #include "trace.h"
3*0605bf00SDaniel Bristot de Oliveira 
4*0605bf00SDaniel Bristot de Oliveira /*
5*0605bf00SDaniel Bristot de Oliveira  * osnoise_context - read, store, write, restore osnoise configs.
6*0605bf00SDaniel Bristot de Oliveira  */
7*0605bf00SDaniel Bristot de Oliveira struct osnoise_context {
8*0605bf00SDaniel Bristot de Oliveira 	int			flags;
9*0605bf00SDaniel Bristot de Oliveira 	int			ref;
10*0605bf00SDaniel Bristot de Oliveira 
11*0605bf00SDaniel Bristot de Oliveira 	char			*curr_cpus;
12*0605bf00SDaniel Bristot de Oliveira 	char			*orig_cpus;
13*0605bf00SDaniel Bristot de Oliveira 
14*0605bf00SDaniel Bristot de Oliveira 	/* 0 as init value */
15*0605bf00SDaniel Bristot de Oliveira 	unsigned long long	orig_runtime_us;
16*0605bf00SDaniel Bristot de Oliveira 	unsigned long long	runtime_us;
17*0605bf00SDaniel Bristot de Oliveira 
18*0605bf00SDaniel Bristot de Oliveira 	/* 0 as init value */
19*0605bf00SDaniel Bristot de Oliveira 	unsigned long long	orig_period_us;
20*0605bf00SDaniel Bristot de Oliveira 	unsigned long long	period_us;
21*0605bf00SDaniel Bristot de Oliveira 
22*0605bf00SDaniel Bristot de Oliveira 	/* 0 as init value */
23*0605bf00SDaniel Bristot de Oliveira 	long long		orig_timerlat_period_us;
24*0605bf00SDaniel Bristot de Oliveira 	long long		timerlat_period_us;
25*0605bf00SDaniel Bristot de Oliveira 
26*0605bf00SDaniel Bristot de Oliveira 	/* -1 as init value because 0 is disabled */
27*0605bf00SDaniel Bristot de Oliveira 	long long		orig_stop_us;
28*0605bf00SDaniel Bristot de Oliveira 	long long		stop_us;
29*0605bf00SDaniel Bristot de Oliveira 
30*0605bf00SDaniel Bristot de Oliveira 	/* -1 as init value because 0 is disabled */
31*0605bf00SDaniel Bristot de Oliveira 	long long		orig_stop_total_us;
32*0605bf00SDaniel Bristot de Oliveira 	long long		stop_total_us;
33*0605bf00SDaniel Bristot de Oliveira 
34*0605bf00SDaniel Bristot de Oliveira 	/* -1 as init value because 0 is disabled */
35*0605bf00SDaniel Bristot de Oliveira 	long long		orig_print_stack;
36*0605bf00SDaniel Bristot de Oliveira 	long long		print_stack;
37*0605bf00SDaniel Bristot de Oliveira };
38*0605bf00SDaniel Bristot de Oliveira 
39*0605bf00SDaniel Bristot de Oliveira /*
40*0605bf00SDaniel Bristot de Oliveira  * *_INIT_VALs are also invalid values, they are used to
41*0605bf00SDaniel Bristot de Oliveira  * communicate errors.
42*0605bf00SDaniel Bristot de Oliveira  */
43*0605bf00SDaniel Bristot de Oliveira #define OSNOISE_OPTION_INIT_VAL	(-1)
44*0605bf00SDaniel Bristot de Oliveira #define OSNOISE_TIME_INIT_VAL	(0)
45*0605bf00SDaniel Bristot de Oliveira 
46*0605bf00SDaniel Bristot de Oliveira struct osnoise_context *osnoise_context_alloc(void);
47*0605bf00SDaniel Bristot de Oliveira int osnoise_get_context(struct osnoise_context *context);
48*0605bf00SDaniel Bristot de Oliveira void osnoise_put_context(struct osnoise_context *context);
49*0605bf00SDaniel Bristot de Oliveira 
50*0605bf00SDaniel Bristot de Oliveira int osnoise_set_cpus(struct osnoise_context *context, char *cpus);
51*0605bf00SDaniel Bristot de Oliveira void osnoise_restore_cpus(struct osnoise_context *context);
52*0605bf00SDaniel Bristot de Oliveira 
53*0605bf00SDaniel Bristot de Oliveira int osnoise_set_runtime_period(struct osnoise_context *context,
54*0605bf00SDaniel Bristot de Oliveira 			       unsigned long long runtime,
55*0605bf00SDaniel Bristot de Oliveira 			       unsigned long long period);
56*0605bf00SDaniel Bristot de Oliveira void osnoise_restore_runtime_period(struct osnoise_context *context);
57*0605bf00SDaniel Bristot de Oliveira 
58*0605bf00SDaniel Bristot de Oliveira int osnoise_set_stop_us(struct osnoise_context *context,
59*0605bf00SDaniel Bristot de Oliveira 			long long stop_us);
60*0605bf00SDaniel Bristot de Oliveira void osnoise_restore_stop_us(struct osnoise_context *context);
61*0605bf00SDaniel Bristot de Oliveira 
62*0605bf00SDaniel Bristot de Oliveira int osnoise_set_stop_total_us(struct osnoise_context *context,
63*0605bf00SDaniel Bristot de Oliveira 			      long long stop_total_us);
64*0605bf00SDaniel Bristot de Oliveira void osnoise_restore_stop_total_us(struct osnoise_context *context);
65*0605bf00SDaniel Bristot de Oliveira 
66*0605bf00SDaniel Bristot de Oliveira int osnoise_set_timerlat_period_us(struct osnoise_context *context,
67*0605bf00SDaniel Bristot de Oliveira 				   long long timerlat_period_us);
68*0605bf00SDaniel Bristot de Oliveira void osnoise_restore_timerlat_period_us(struct osnoise_context *context);
69*0605bf00SDaniel Bristot de Oliveira 
70*0605bf00SDaniel Bristot de Oliveira void osnoise_restore_print_stack(struct osnoise_context *context);
71*0605bf00SDaniel Bristot de Oliveira int osnoise_set_print_stack(struct osnoise_context *context,
72*0605bf00SDaniel Bristot de Oliveira 			    long long print_stack);
73*0605bf00SDaniel Bristot de Oliveira 
74*0605bf00SDaniel Bristot de Oliveira /*
75*0605bf00SDaniel Bristot de Oliveira  * osnoise_tool -  osnoise based tool definition.
76*0605bf00SDaniel Bristot de Oliveira  */
77*0605bf00SDaniel Bristot de Oliveira struct osnoise_tool {
78*0605bf00SDaniel Bristot de Oliveira 	struct trace_instance		trace;
79*0605bf00SDaniel Bristot de Oliveira 	struct osnoise_context		*context;
80*0605bf00SDaniel Bristot de Oliveira 	void				*data;
81*0605bf00SDaniel Bristot de Oliveira 	void				*params;
82*0605bf00SDaniel Bristot de Oliveira 	time_t				start_time;
83*0605bf00SDaniel Bristot de Oliveira };
84*0605bf00SDaniel Bristot de Oliveira 
85*0605bf00SDaniel Bristot de Oliveira void osnoise_destroy_tool(struct osnoise_tool *top);
86*0605bf00SDaniel Bristot de Oliveira struct osnoise_tool *osnoise_init_tool(char *tool_name);
87*0605bf00SDaniel Bristot de Oliveira struct osnoise_tool *osnoise_init_trace_tool(char *tracer);
88*0605bf00SDaniel Bristot de Oliveira 
89*0605bf00SDaniel Bristot de Oliveira int osnoise_main(int argc, char **argv);
90