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