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