// SPDX-License-Identifier: GPL-2.0 #include "trace.h" /* * osnoise_context - read, store, write, restore osnoise configs. */ struct osnoise_context { int flags; int ref; char *curr_cpus; char *orig_cpus; /* 0 as init value */ unsigned long long orig_runtime_us; unsigned long long runtime_us; /* 0 as init value */ unsigned long long orig_period_us; unsigned long long period_us; /* 0 as init value */ long long orig_timerlat_period_us; long long timerlat_period_us; /* 0 as init value */ long long orig_tracing_thresh; long long tracing_thresh; /* -1 as init value because 0 is disabled */ long long orig_stop_us; long long stop_us; /* -1 as init value because 0 is disabled */ long long orig_stop_total_us; long long stop_total_us; /* -1 as init value because 0 is disabled */ long long orig_print_stack; long long print_stack; /* -1 as init value because 0 is off */ int orig_opt_irq_disable; int opt_irq_disable; /* -1 as init value because 0 is off */ int orig_opt_workload; int opt_workload; }; /* * *_INIT_VALs are also invalid values, they are used to * communicate errors. */ #define OSNOISE_OPTION_INIT_VAL (-1) #define OSNOISE_TIME_INIT_VAL (0) struct osnoise_context *osnoise_context_alloc(void); int osnoise_get_context(struct osnoise_context *context); void osnoise_put_context(struct osnoise_context *context); int osnoise_set_cpus(struct osnoise_context *context, char *cpus); void osnoise_restore_cpus(struct osnoise_context *context); int osnoise_set_runtime_period(struct osnoise_context *context, unsigned long long runtime, unsigned long long period); void osnoise_restore_runtime_period(struct osnoise_context *context); int osnoise_set_stop_us(struct osnoise_context *context, long long stop_us); void osnoise_restore_stop_us(struct osnoise_context *context); int osnoise_set_stop_total_us(struct osnoise_context *context, long long stop_total_us); void osnoise_restore_stop_total_us(struct osnoise_context *context); int osnoise_set_timerlat_period_us(struct osnoise_context *context, long long timerlat_period_us); void osnoise_restore_timerlat_period_us(struct osnoise_context *context); int osnoise_set_tracing_thresh(struct osnoise_context *context, long long tracing_thresh); void osnoise_restore_tracing_thresh(struct osnoise_context *context); void osnoise_restore_print_stack(struct osnoise_context *context); int osnoise_set_print_stack(struct osnoise_context *context, long long print_stack); int osnoise_set_irq_disable(struct osnoise_context *context, bool onoff); int osnoise_set_workload(struct osnoise_context *context, bool onoff); /* * osnoise_tool - osnoise based tool definition. */ struct osnoise_tool { struct trace_instance trace; struct osnoise_context *context; void *data; void *params; time_t start_time; }; void osnoise_destroy_tool(struct osnoise_tool *top); struct osnoise_tool *osnoise_init_tool(char *tool_name); struct osnoise_tool *osnoise_init_trace_tool(char *tracer); int osnoise_hist_main(int argc, char *argv[]); int osnoise_top_main(int argc, char **argv); int osnoise_main(int argc, char **argv); int hwnoise_main(int argc, char **argv);