root/tools/tracing/rtla/src/timerlat.h
// SPDX-License-Identifier: GPL-2.0
#include "osnoise.h"

/*
 * Define timerlat tracing mode.
 *
 * There are three tracing modes:
 * - tracefs-only, used when BPF is unavailable.
 * - BPF-only, used when BPF is available and neither trace saving nor
 * auto-analysis are enabled.
 * - mixed mode, used when BPF is available and either trace saving or
 * auto-analysis is enabled (which rely on sample collection through
 * tracefs).
 */
enum timerlat_tracing_mode {
        TRACING_MODE_BPF,
        TRACING_MODE_TRACEFS,
        TRACING_MODE_MIXED,
};

struct timerlat_params {
        struct common_params    common;
        long long               timerlat_period_us;
        long long               print_stack;
        int                     dma_latency;
        int                     no_aa;
        int                     dump_tasks;
        int                     deepest_idle_state;
        enum timerlat_tracing_mode mode;
        const char              *bpf_action_program;
};

#define to_timerlat_params(ptr) container_of(ptr, struct timerlat_params, common)

int timerlat_apply_config(struct osnoise_tool *tool, struct timerlat_params *params);
int timerlat_main(int argc, char *argv[]);
int timerlat_enable(struct osnoise_tool *tool);
void timerlat_analyze(struct osnoise_tool *tool, bool stopped);
void timerlat_free(struct osnoise_tool *tool);