root/tools/tracing/rtla/src/osnoise.h
// SPDX-License-Identifier: GPL-2.0
#pragma once

#include "common.h"

enum osnoise_mode {
        MODE_OSNOISE = 0,
        MODE_HWNOISE
};

struct osnoise_params {
        struct common_params    common;
        unsigned long long      runtime;
        unsigned long long      period;
        long long               threshold;
        enum osnoise_mode       mode;
};

#define to_osnoise_params(ptr) container_of(ptr, struct osnoise_params, common)

/*
 * *_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_runtime_period(struct osnoise_context *context,
                               unsigned long long runtime,
                               unsigned long long period);
void osnoise_restore_runtime_period(struct osnoise_context *context);

void osnoise_restore_stop_us(struct osnoise_context *context);
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);
void osnoise_report_missed_events(struct osnoise_tool *tool);
int osnoise_apply_config(struct osnoise_tool *tool, struct osnoise_params *params);

int osnoise_enable(struct osnoise_tool *tool);
int osnoise_main(int argc, char **argv);
int hwnoise_main(int argc, char **argv);

extern struct tool_ops timerlat_top_ops, timerlat_hist_ops;
extern struct tool_ops osnoise_top_ops, osnoise_hist_ops;

int run_tool(struct tool_ops *ops, int argc, char *argv[]);