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(§ion->items, item) 781590Srgrimes 791590Srgrimes#endif /* __PERF_CONFIG_H */ 801590Srgrimes