xref: /openbmc/linux/tools/perf/util/evsel_config.h (revision 35ac0cad)
195be9d19SArnaldo Carvalho de Melo // SPDX-License-Identifier: GPL-2.0
295be9d19SArnaldo Carvalho de Melo #ifndef __PERF_EVSEL_CONFIG_H
395be9d19SArnaldo Carvalho de Melo #define __PERF_EVSEL_CONFIG_H 1
495be9d19SArnaldo Carvalho de Melo 
595be9d19SArnaldo Carvalho de Melo #include <linux/types.h>
695be9d19SArnaldo Carvalho de Melo #include <stdbool.h>
795be9d19SArnaldo Carvalho de Melo 
895be9d19SArnaldo Carvalho de Melo /*
935ac0cadSArnaldo Carvalho de Melo  * The 'struct evsel_config_term' is used to pass event
106ec17b4eSArnaldo Carvalho de Melo  * specific configuration data to evsel__config routine.
1195be9d19SArnaldo Carvalho de Melo  * It is allocated within event parsing and attached to
1235ac0cadSArnaldo Carvalho de Melo  * evsel::config_terms list head.
1395be9d19SArnaldo Carvalho de Melo */
1495be9d19SArnaldo Carvalho de Melo enum evsel_term_type {
1535ac0cadSArnaldo Carvalho de Melo 	EVSEL__CONFIG_TERM_PERIOD,
1635ac0cadSArnaldo Carvalho de Melo 	EVSEL__CONFIG_TERM_FREQ,
1735ac0cadSArnaldo Carvalho de Melo 	EVSEL__CONFIG_TERM_TIME,
1835ac0cadSArnaldo Carvalho de Melo 	EVSEL__CONFIG_TERM_CALLGRAPH,
1935ac0cadSArnaldo Carvalho de Melo 	EVSEL__CONFIG_TERM_STACK_USER,
2035ac0cadSArnaldo Carvalho de Melo 	EVSEL__CONFIG_TERM_INHERIT,
2135ac0cadSArnaldo Carvalho de Melo 	EVSEL__CONFIG_TERM_MAX_STACK,
2235ac0cadSArnaldo Carvalho de Melo 	EVSEL__CONFIG_TERM_MAX_EVENTS,
2335ac0cadSArnaldo Carvalho de Melo 	EVSEL__CONFIG_TERM_OVERWRITE,
2435ac0cadSArnaldo Carvalho de Melo 	EVSEL__CONFIG_TERM_DRV_CFG,
2535ac0cadSArnaldo Carvalho de Melo 	EVSEL__CONFIG_TERM_BRANCH,
2635ac0cadSArnaldo Carvalho de Melo 	EVSEL__CONFIG_TERM_PERCORE,
2735ac0cadSArnaldo Carvalho de Melo 	EVSEL__CONFIG_TERM_AUX_OUTPUT,
2835ac0cadSArnaldo Carvalho de Melo 	EVSEL__CONFIG_TERM_AUX_SAMPLE_SIZE,
2935ac0cadSArnaldo Carvalho de Melo 	EVSEL__CONFIG_TERM_CFG_CHG,
3095be9d19SArnaldo Carvalho de Melo };
3195be9d19SArnaldo Carvalho de Melo 
3235ac0cadSArnaldo Carvalho de Melo struct evsel_config_term {
3395be9d19SArnaldo Carvalho de Melo 	struct list_head      list;
3495be9d19SArnaldo Carvalho de Melo 	enum evsel_term_type  type;
353220fb8dSLeo Yan 	bool		      free_str;
3695be9d19SArnaldo Carvalho de Melo 	union {
3795be9d19SArnaldo Carvalho de Melo 		u64	      period;
3895be9d19SArnaldo Carvalho de Melo 		u64	      freq;
3995be9d19SArnaldo Carvalho de Melo 		bool	      time;
4095be9d19SArnaldo Carvalho de Melo 		u64	      stack_user;
4195be9d19SArnaldo Carvalho de Melo 		int	      max_stack;
4295be9d19SArnaldo Carvalho de Melo 		bool	      inherit;
4395be9d19SArnaldo Carvalho de Melo 		bool	      overwrite;
4495be9d19SArnaldo Carvalho de Melo 		unsigned long max_events;
4595be9d19SArnaldo Carvalho de Melo 		bool	      percore;
4695be9d19SArnaldo Carvalho de Melo 		bool	      aux_output;
47eb7a52d4SAdrian Hunter 		u32	      aux_sample_size;
48a1ac7de6SAdrian Hunter 		u64	      cfg_chg;
49e884602bSLeo Yan 		char	      *str;
5095be9d19SArnaldo Carvalho de Melo 	} val;
5195be9d19SArnaldo Carvalho de Melo 	bool weak;
5295be9d19SArnaldo Carvalho de Melo };
53eb7a52d4SAdrian Hunter 
54eb7a52d4SAdrian Hunter struct evsel;
55eb7a52d4SAdrian Hunter 
5635ac0cadSArnaldo Carvalho de Melo struct evsel_config_term *__evsel__get_config_term(struct evsel *evsel, enum evsel_term_type type);
57eb7a52d4SAdrian Hunter 
5835ac0cadSArnaldo Carvalho de Melo #define evsel__get_config_term(evsel, type) \
5935ac0cadSArnaldo Carvalho de Melo 	__evsel__get_config_term(evsel, EVSEL__CONFIG_TERM_ ## type)
60eb7a52d4SAdrian Hunter 
6195be9d19SArnaldo Carvalho de Melo #endif // __PERF_EVSEL_CONFIG_H
62