root/tools/perf/util/evsel_config.h
// SPDX-License-Identifier: GPL-2.0
#ifndef __PERF_EVSEL_CONFIG_H
#define __PERF_EVSEL_CONFIG_H 1

#include <linux/types.h>
#include <stdbool.h>

/*
 * The 'struct evsel_config_term' is used to pass event
 * specific configuration data to evsel__config routine.
 * It is allocated within event parsing and attached to
 * evsel::config_terms list head.
*/
enum evsel_term_type {
        EVSEL__CONFIG_TERM_PERIOD,
        EVSEL__CONFIG_TERM_FREQ,
        EVSEL__CONFIG_TERM_TIME,
        EVSEL__CONFIG_TERM_CALLGRAPH,
        EVSEL__CONFIG_TERM_STACK_USER,
        EVSEL__CONFIG_TERM_INHERIT,
        EVSEL__CONFIG_TERM_MAX_STACK,
        EVSEL__CONFIG_TERM_MAX_EVENTS,
        EVSEL__CONFIG_TERM_OVERWRITE,
        EVSEL__CONFIG_TERM_DRV_CFG,
        EVSEL__CONFIG_TERM_BRANCH,
        EVSEL__CONFIG_TERM_PERCORE,
        EVSEL__CONFIG_TERM_AUX_OUTPUT,
        EVSEL__CONFIG_TERM_AUX_ACTION,
        EVSEL__CONFIG_TERM_AUX_SAMPLE_SIZE,
        EVSEL__CONFIG_TERM_USR_CHG_CONFIG,
        EVSEL__CONFIG_TERM_USR_CHG_CONFIG1,
        EVSEL__CONFIG_TERM_USR_CHG_CONFIG2,
        EVSEL__CONFIG_TERM_USR_CHG_CONFIG3,
        EVSEL__CONFIG_TERM_USR_CHG_CONFIG4,
        EVSEL__CONFIG_TERM_RATIO_TO_PREV,
};

struct evsel_config_term {
        struct list_head      list;
        enum evsel_term_type  type;
        bool                  free_str;
        union {
                u64           period;
                u64           freq;
                bool          time;
                u64           stack_user;
                int           max_stack;
                bool          inherit;
                bool          overwrite;
                unsigned long max_events;
                bool          percore;
                bool          aux_output;
                u32           aux_sample_size;
                u64           cfg_chg;
                char          *str;
                int           cpu;
                u64           val;
        } val;
        bool weak;
};

struct evsel;

struct evsel_config_term *__evsel__get_config_term(struct evsel *evsel, enum evsel_term_type type);

#define evsel__get_config_term(evsel, type) \
        __evsel__get_config_term(evsel, EVSEL__CONFIG_TERM_ ## type)

#endif // __PERF_EVSEL_CONFIG_H