xref: /openbmc/linux/tools/tracing/rtla/src/osnoise.h (revision 1eceb2fc)
10605bf00SDaniel Bristot de Oliveira // SPDX-License-Identifier: GPL-2.0
20605bf00SDaniel Bristot de Oliveira #include "trace.h"
30605bf00SDaniel Bristot de Oliveira 
40605bf00SDaniel Bristot de Oliveira /*
50605bf00SDaniel Bristot de Oliveira  * osnoise_context - read, store, write, restore osnoise configs.
60605bf00SDaniel Bristot de Oliveira  */
70605bf00SDaniel Bristot de Oliveira struct osnoise_context {
80605bf00SDaniel Bristot de Oliveira 	int			flags;
90605bf00SDaniel Bristot de Oliveira 	int			ref;
100605bf00SDaniel Bristot de Oliveira 
110605bf00SDaniel Bristot de Oliveira 	char			*curr_cpus;
120605bf00SDaniel Bristot de Oliveira 	char			*orig_cpus;
130605bf00SDaniel Bristot de Oliveira 
140605bf00SDaniel Bristot de Oliveira 	/* 0 as init value */
150605bf00SDaniel Bristot de Oliveira 	unsigned long long	orig_runtime_us;
160605bf00SDaniel Bristot de Oliveira 	unsigned long long	runtime_us;
170605bf00SDaniel Bristot de Oliveira 
180605bf00SDaniel Bristot de Oliveira 	/* 0 as init value */
190605bf00SDaniel Bristot de Oliveira 	unsigned long long	orig_period_us;
200605bf00SDaniel Bristot de Oliveira 	unsigned long long	period_us;
210605bf00SDaniel Bristot de Oliveira 
220605bf00SDaniel Bristot de Oliveira 	/* 0 as init value */
230605bf00SDaniel Bristot de Oliveira 	long long		orig_timerlat_period_us;
240605bf00SDaniel Bristot de Oliveira 	long long		timerlat_period_us;
250605bf00SDaniel Bristot de Oliveira 
260605bf00SDaniel Bristot de Oliveira 	/* -1 as init value because 0 is disabled */
270605bf00SDaniel Bristot de Oliveira 	long long		orig_stop_us;
280605bf00SDaniel Bristot de Oliveira 	long long		stop_us;
290605bf00SDaniel Bristot de Oliveira 
300605bf00SDaniel Bristot de Oliveira 	/* -1 as init value because 0 is disabled */
310605bf00SDaniel Bristot de Oliveira 	long long		orig_stop_total_us;
320605bf00SDaniel Bristot de Oliveira 	long long		stop_total_us;
330605bf00SDaniel Bristot de Oliveira 
340605bf00SDaniel Bristot de Oliveira 	/* -1 as init value because 0 is disabled */
350605bf00SDaniel Bristot de Oliveira 	long long		orig_print_stack;
360605bf00SDaniel Bristot de Oliveira 	long long		print_stack;
370605bf00SDaniel Bristot de Oliveira };
380605bf00SDaniel Bristot de Oliveira 
390605bf00SDaniel Bristot de Oliveira /*
400605bf00SDaniel Bristot de Oliveira  * *_INIT_VALs are also invalid values, they are used to
410605bf00SDaniel Bristot de Oliveira  * communicate errors.
420605bf00SDaniel Bristot de Oliveira  */
430605bf00SDaniel Bristot de Oliveira #define OSNOISE_OPTION_INIT_VAL	(-1)
440605bf00SDaniel Bristot de Oliveira #define OSNOISE_TIME_INIT_VAL	(0)
450605bf00SDaniel Bristot de Oliveira 
460605bf00SDaniel Bristot de Oliveira struct osnoise_context *osnoise_context_alloc(void);
470605bf00SDaniel Bristot de Oliveira int osnoise_get_context(struct osnoise_context *context);
480605bf00SDaniel Bristot de Oliveira void osnoise_put_context(struct osnoise_context *context);
490605bf00SDaniel Bristot de Oliveira 
500605bf00SDaniel Bristot de Oliveira int osnoise_set_cpus(struct osnoise_context *context, char *cpus);
510605bf00SDaniel Bristot de Oliveira void osnoise_restore_cpus(struct osnoise_context *context);
520605bf00SDaniel Bristot de Oliveira 
530605bf00SDaniel Bristot de Oliveira int osnoise_set_runtime_period(struct osnoise_context *context,
540605bf00SDaniel Bristot de Oliveira 			       unsigned long long runtime,
550605bf00SDaniel Bristot de Oliveira 			       unsigned long long period);
560605bf00SDaniel Bristot de Oliveira void osnoise_restore_runtime_period(struct osnoise_context *context);
570605bf00SDaniel Bristot de Oliveira 
580605bf00SDaniel Bristot de Oliveira int osnoise_set_stop_us(struct osnoise_context *context,
590605bf00SDaniel Bristot de Oliveira 			long long stop_us);
600605bf00SDaniel Bristot de Oliveira void osnoise_restore_stop_us(struct osnoise_context *context);
610605bf00SDaniel Bristot de Oliveira 
620605bf00SDaniel Bristot de Oliveira int osnoise_set_stop_total_us(struct osnoise_context *context,
630605bf00SDaniel Bristot de Oliveira 			      long long stop_total_us);
640605bf00SDaniel Bristot de Oliveira void osnoise_restore_stop_total_us(struct osnoise_context *context);
650605bf00SDaniel Bristot de Oliveira 
660605bf00SDaniel Bristot de Oliveira int osnoise_set_timerlat_period_us(struct osnoise_context *context,
670605bf00SDaniel Bristot de Oliveira 				   long long timerlat_period_us);
680605bf00SDaniel Bristot de Oliveira void osnoise_restore_timerlat_period_us(struct osnoise_context *context);
690605bf00SDaniel Bristot de Oliveira 
700605bf00SDaniel Bristot de Oliveira void osnoise_restore_print_stack(struct osnoise_context *context);
710605bf00SDaniel Bristot de Oliveira int osnoise_set_print_stack(struct osnoise_context *context,
720605bf00SDaniel Bristot de Oliveira 			    long long print_stack);
730605bf00SDaniel Bristot de Oliveira 
740605bf00SDaniel Bristot de Oliveira /*
750605bf00SDaniel Bristot de Oliveira  * osnoise_tool -  osnoise based tool definition.
760605bf00SDaniel Bristot de Oliveira  */
770605bf00SDaniel Bristot de Oliveira struct osnoise_tool {
780605bf00SDaniel Bristot de Oliveira 	struct trace_instance		trace;
790605bf00SDaniel Bristot de Oliveira 	struct osnoise_context		*context;
800605bf00SDaniel Bristot de Oliveira 	void				*data;
810605bf00SDaniel Bristot de Oliveira 	void				*params;
820605bf00SDaniel Bristot de Oliveira 	time_t				start_time;
830605bf00SDaniel Bristot de Oliveira };
840605bf00SDaniel Bristot de Oliveira 
850605bf00SDaniel Bristot de Oliveira void osnoise_destroy_tool(struct osnoise_tool *top);
860605bf00SDaniel Bristot de Oliveira struct osnoise_tool *osnoise_init_tool(char *tool_name);
870605bf00SDaniel Bristot de Oliveira struct osnoise_tool *osnoise_init_trace_tool(char *tracer);
880605bf00SDaniel Bristot de Oliveira 
89*1eceb2fcSDaniel Bristot de Oliveira int osnoise_top_main(int argc, char **argv);
900605bf00SDaniel Bristot de Oliveira int osnoise_main(int argc, char **argv);
91