1// SPDX-License-Identifier: GPL-2.0 2#include "trace.h" 3 4/* 5 * osnoise_context - read, store, write, restore osnoise configs. 6 */ 7struct osnoise_context { 8 int flags; 9 int ref; 10 11 char *curr_cpus; 12 char *orig_cpus; 13 14 /* 0 as init value */ 15 unsigned long long orig_runtime_us; 16 unsigned long long runtime_us; 17 18 /* 0 as init value */ 19 unsigned long long orig_period_us; 20 unsigned long long period_us; 21 22 /* 0 as init value */ 23 long long orig_timerlat_period_us; 24 long long timerlat_period_us; 25 26 /* 0 as init value */ 27 long long orig_tracing_thresh; 28 long long tracing_thresh; 29 30 /* -1 as init value because 0 is disabled */ 31 long long orig_stop_us; 32 long long stop_us; 33 34 /* -1 as init value because 0 is disabled */ 35 long long orig_stop_total_us; 36 long long stop_total_us; 37 38 /* -1 as init value because 0 is disabled */ 39 long long orig_print_stack; 40 long long print_stack; 41 42 /* -1 as init value because 0 is off */ 43 int orig_opt_irq_disable; 44 int opt_irq_disable; 45 46 /* -1 as init value because 0 is off */ 47 int orig_opt_workload; 48 int opt_workload; 49}; 50 51/* 52 * *_INIT_VALs are also invalid values, they are used to 53 * communicate errors. 54 */ 55#define OSNOISE_OPTION_INIT_VAL (-1) 56#define OSNOISE_TIME_INIT_VAL (0) 57 58struct osnoise_context *osnoise_context_alloc(void); 59int osnoise_get_context(struct osnoise_context *context); 60void osnoise_put_context(struct osnoise_context *context); 61 62int osnoise_set_cpus(struct osnoise_context *context, char *cpus); 63void osnoise_restore_cpus(struct osnoise_context *context); 64 65int osnoise_set_runtime_period(struct osnoise_context *context, 66 unsigned long long runtime, 67 unsigned long long period); 68void osnoise_restore_runtime_period(struct osnoise_context *context); 69 70int osnoise_set_stop_us(struct osnoise_context *context, 71 long long stop_us); 72void osnoise_restore_stop_us(struct osnoise_context *context); 73 74int osnoise_set_stop_total_us(struct osnoise_context *context, 75 long long stop_total_us); 76void osnoise_restore_stop_total_us(struct osnoise_context *context); 77 78int osnoise_set_timerlat_period_us(struct osnoise_context *context, 79 long long timerlat_period_us); 80void osnoise_restore_timerlat_period_us(struct osnoise_context *context); 81 82int osnoise_set_tracing_thresh(struct osnoise_context *context, 83 long long tracing_thresh); 84void osnoise_restore_tracing_thresh(struct osnoise_context *context); 85 86void osnoise_restore_print_stack(struct osnoise_context *context); 87int osnoise_set_print_stack(struct osnoise_context *context, 88 long long print_stack); 89 90int osnoise_set_irq_disable(struct osnoise_context *context, bool onoff); 91int osnoise_set_workload(struct osnoise_context *context, bool onoff); 92 93/* 94 * osnoise_tool - osnoise based tool definition. 95 */ 96struct osnoise_tool { 97 struct trace_instance trace; 98 struct osnoise_context *context; 99 void *data; 100 void *params; 101 time_t start_time; 102}; 103 104void osnoise_destroy_tool(struct osnoise_tool *top); 105struct osnoise_tool *osnoise_init_tool(char *tool_name); 106struct osnoise_tool *osnoise_init_trace_tool(char *tracer); 107 108int osnoise_hist_main(int argc, char *argv[]); 109int osnoise_top_main(int argc, char **argv); 110int osnoise_main(int argc, char **argv); 111int hwnoise_main(int argc, char **argv); 112