162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#ifndef __PERF_CONFIG_H 362306a36Sopenharmony_ci#define __PERF_CONFIG_H 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#include <stdbool.h> 662306a36Sopenharmony_ci#include <linux/list.h> 762306a36Sopenharmony_ci 862306a36Sopenharmony_cistruct perf_config_item { 962306a36Sopenharmony_ci char *name; 1062306a36Sopenharmony_ci char *value; 1162306a36Sopenharmony_ci bool from_system_config; 1262306a36Sopenharmony_ci struct list_head node; 1362306a36Sopenharmony_ci}; 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_cistruct perf_config_section { 1662306a36Sopenharmony_ci char *name; 1762306a36Sopenharmony_ci struct list_head items; 1862306a36Sopenharmony_ci bool from_system_config; 1962306a36Sopenharmony_ci struct list_head node; 2062306a36Sopenharmony_ci}; 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_cistruct perf_config_set { 2362306a36Sopenharmony_ci struct list_head sections; 2462306a36Sopenharmony_ci}; 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ciextern const char *config_exclusive_filename; 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_citypedef int (*config_fn_t)(const char *, const char *, void *); 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ciint perf_default_config(const char *, const char *, void *); 3162306a36Sopenharmony_ciint perf_config(config_fn_t fn, void *); 3262306a36Sopenharmony_ciint perf_config_scan(const char *name, const char *fmt, ...) __scanf(2, 3); 3362306a36Sopenharmony_ciint perf_config_set(struct perf_config_set *set, 3462306a36Sopenharmony_ci config_fn_t fn, void *data); 3562306a36Sopenharmony_ciint perf_config_int(int *dest, const char *, const char *); 3662306a36Sopenharmony_ciint perf_config_u8(u8 *dest, const char *name, const char *value); 3762306a36Sopenharmony_ciint perf_config_u64(u64 *dest, const char *, const char *); 3862306a36Sopenharmony_ciint perf_config_bool(const char *, const char *); 3962306a36Sopenharmony_ciint config_error_nonbool(const char *); 4062306a36Sopenharmony_ciconst char *perf_etc_perfconfig(void); 4162306a36Sopenharmony_ciconst char *perf_home_perfconfig(void); 4262306a36Sopenharmony_ciint perf_config_system(void); 4362306a36Sopenharmony_ciint perf_config_global(void); 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_cistruct perf_config_set *perf_config_set__new(void); 4662306a36Sopenharmony_cistruct perf_config_set *perf_config_set__load_file(const char *file); 4762306a36Sopenharmony_civoid perf_config_set__delete(struct perf_config_set *set); 4862306a36Sopenharmony_ciint perf_config_set__collect(struct perf_config_set *set, const char *file_name, 4962306a36Sopenharmony_ci const char *var, const char *value); 5062306a36Sopenharmony_civoid perf_config__exit(void); 5162306a36Sopenharmony_civoid perf_config__refresh(void); 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci/** 5462306a36Sopenharmony_ci * perf_config_sections__for_each - iterate thru all the sections 5562306a36Sopenharmony_ci * @list: list_head instance to iterate 5662306a36Sopenharmony_ci * @section: struct perf_config_section iterator 5762306a36Sopenharmony_ci */ 5862306a36Sopenharmony_ci#define perf_config_sections__for_each_entry(list, section) \ 5962306a36Sopenharmony_ci list_for_each_entry(section, list, node) 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci/** 6262306a36Sopenharmony_ci * perf_config_items__for_each - iterate thru all the items 6362306a36Sopenharmony_ci * @list: list_head instance to iterate 6462306a36Sopenharmony_ci * @item: struct perf_config_item iterator 6562306a36Sopenharmony_ci */ 6662306a36Sopenharmony_ci#define perf_config_items__for_each_entry(list, item) \ 6762306a36Sopenharmony_ci list_for_each_entry(item, list, node) 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci/** 7062306a36Sopenharmony_ci * perf_config_set__for_each - iterate thru all the config section-item pairs 7162306a36Sopenharmony_ci * @set: evlist instance to iterate 7262306a36Sopenharmony_ci * @section: struct perf_config_section iterator 7362306a36Sopenharmony_ci * @item: struct perf_config_item iterator 7462306a36Sopenharmony_ci */ 7562306a36Sopenharmony_ci#define perf_config_set__for_each_entry(set, section, item) \ 7662306a36Sopenharmony_ci perf_config_sections__for_each_entry(&set->sections, section) \ 7762306a36Sopenharmony_ci perf_config_items__for_each_entry(§ion->items, item) 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_ci#endif /* __PERF_CONFIG_H */ 80