11590Srgrimes/* SPDX-License-Identifier: GPL-2.0 */
21590Srgrimes#ifndef __PERF_CONFIG_H
31590Srgrimes#define __PERF_CONFIG_H
41590Srgrimes
51590Srgrimes#include <stdbool.h>
61590Srgrimes#include <linux/list.h>
71590Srgrimes
81590Srgrimesstruct perf_config_item {
91590Srgrimes	char *name;
101590Srgrimes	char *value;
111590Srgrimes	bool from_system_config;
121590Srgrimes	struct list_head node;
131590Srgrimes};
141590Srgrimes
151590Srgrimesstruct perf_config_section {
161590Srgrimes	char *name;
171590Srgrimes	struct list_head items;
181590Srgrimes	bool from_system_config;
191590Srgrimes	struct list_head node;
201590Srgrimes};
211590Srgrimes
221590Srgrimesstruct perf_config_set {
231590Srgrimes	struct list_head sections;
241590Srgrimes};
251590Srgrimes
261590Srgrimesextern const char *config_exclusive_filename;
271590Srgrimes
281590Srgrimestypedef int (*config_fn_t)(const char *, const char *, void *);
2950477Speter
301590Srgrimesint perf_default_config(const char *, const char *, void *);
31165154Sruint perf_config(config_fn_t fn, void *);
321590Srgrimesint perf_config_scan(const char *name, const char *fmt, ...) __scanf(2, 3);
3379535Sruint perf_config_set(struct perf_config_set *set,
341590Srgrimes		    config_fn_t fn, void *data);
351590Srgrimesint perf_config_int(int *dest, const char *, const char *);
361590Srgrimesint perf_config_u8(u8 *dest, const char *name, const char *value);
371590Srgrimesint perf_config_u64(u64 *dest, const char *, const char *);
3868963Sruint perf_config_bool(const char *, const char *);
3954157Scharnierint config_error_nonbool(const char *);
4054157Scharnierconst char *perf_etc_perfconfig(void);
4154157Scharnierconst char *perf_home_perfconfig(void);
4254157Scharnierint perf_config_system(void);
431590Srgrimesint perf_config_global(void);
4495083Scharnier
4568963Srustruct perf_config_set *perf_config_set__new(void);
4695083Scharnierstruct perf_config_set *perf_config_set__load_file(const char *file);
471590Srgrimesvoid perf_config_set__delete(struct perf_config_set *set);
481590Srgrimesint perf_config_set__collect(struct perf_config_set *set, const char *file_name,
491590Srgrimes			     const char *var, const char *value);
501590Srgrimesvoid perf_config__exit(void);
511590Srgrimesvoid perf_config__refresh(void);
521590Srgrimes
531590Srgrimes/**
541590Srgrimes * perf_config_sections__for_each - iterate thru all the sections
551590Srgrimes * @list: list_head instance to iterate
561590Srgrimes * @section: struct perf_config_section iterator
571590Srgrimes */
5843929Seivind#define perf_config_sections__for_each_entry(list, section)	\
591590Srgrimes        list_for_each_entry(section, list, node)
601590Srgrimes
611590Srgrimes/**
621590Srgrimes * perf_config_items__for_each - iterate thru all the items
631590Srgrimes * @list: list_head instance to iterate
641590Srgrimes * @item: struct perf_config_item iterator
651590Srgrimes */
661590Srgrimes#define perf_config_items__for_each_entry(list, item)	\
671590Srgrimes        list_for_each_entry(item, list, node)
6854157Scharnier
6954157Scharnier/**
701590Srgrimes * perf_config_set__for_each - iterate thru all the config section-item pairs
711590Srgrimes * @set: evlist instance to iterate
721590Srgrimes * @section: struct perf_config_section iterator
731590Srgrimes * @item: struct perf_config_item iterator
741590Srgrimes */
751590Srgrimes#define perf_config_set__for_each_entry(set, section, item)			\
761590Srgrimes	perf_config_sections__for_each_entry(&set->sections, section)		\
771590Srgrimes	perf_config_items__for_each_entry(&section->items, item)
781590Srgrimes
791590Srgrimes#endif /* __PERF_CONFIG_H */
801590Srgrimes