xref: /linux/tools/perf/pmu-events/pmu-events.h (revision 9ed8b7dcb0e7816294b2f8d8ab907e8c5402008d)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
280eeb67fSAndi Kleen #ifndef PMU_EVENTS_H
380eeb67fSAndi Kleen #define PMU_EVENTS_H
480eeb67fSAndi Kleen 
5*9ed8b7dcSIan Rogers #include <stdbool.h>
6*9ed8b7dcSIan Rogers 
729be2fe0SIan Rogers struct perf_pmu;
829be2fe0SIan Rogers 
9560ccbc4SKajol Jain enum aggr_mode_class {
10560ccbc4SKajol Jain 	PerChip = 1,
11560ccbc4SKajol Jain 	PerCore
12560ccbc4SKajol Jain };
13560ccbc4SKajol Jain 
1480eeb67fSAndi Kleen /*
1580eeb67fSAndi Kleen  * Describe each PMU event. Each CPU has a table of PMU events.
1680eeb67fSAndi Kleen  */
1780eeb67fSAndi Kleen struct pmu_event {
1880eeb67fSAndi Kleen 	const char *name;
194689f567SJohn Garry 	const char *compat;
2080eeb67fSAndi Kleen 	const char *event;
2180eeb67fSAndi Kleen 	const char *desc;
2280eeb67fSAndi Kleen 	const char *topic;
23794ba54aSSukadev Bhattiprolu 	const char *long_desc;
24fedb2b51SAndi Kleen 	const char *pmu;
25fedb2b51SAndi Kleen 	const char *unit;
26fedb2b51SAndi Kleen 	const char *perpkg;
27*9ed8b7dcSIan Rogers 	bool deprecated;
2880eeb67fSAndi Kleen };
2980eeb67fSAndi Kleen 
30db95818eSIan Rogers struct pmu_metric {
31db95818eSIan Rogers 	const char *metric_name;
32db95818eSIan Rogers 	const char *metric_group;
33d9dc8874SIan Rogers 	const char *metric_expr;
34d9dc8874SIan Rogers 	const char *unit;
35d9dc8874SIan Rogers 	const char *compat;
36db95818eSIan Rogers 	const char *metric_constraint;
37d9dc8874SIan Rogers 	const char *desc;
38d9dc8874SIan Rogers 	const char *long_desc;
391fa0c371SIan Rogers 	enum aggr_mode_class aggr_mode;
40db95818eSIan Rogers };
41db95818eSIan Rogers 
421ba3752aSIan Rogers struct pmu_events_table;
43f8ea2c15SIan Rogers struct pmu_metrics_table;
441ba3752aSIan Rogers 
4529be2fe0SIan Rogers typedef int (*pmu_event_iter_fn)(const struct pmu_event *pe,
461ba3752aSIan Rogers 				 const struct pmu_events_table *table,
4729be2fe0SIan Rogers 				 void *data);
4880eeb67fSAndi Kleen 
49db95818eSIan Rogers typedef int (*pmu_metric_iter_fn)(const struct pmu_metric *pm,
50f8ea2c15SIan Rogers 				  const struct pmu_metrics_table *table,
51db95818eSIan Rogers 				  void *data);
52db95818eSIan Rogers 
531ba3752aSIan Rogers int pmu_events_table_for_each_event(const struct pmu_events_table *table, pmu_event_iter_fn fn,
54660842e4SIan Rogers 				    void *data);
55f8ea2c15SIan Rogers int pmu_metrics_table_for_each_metric(const struct pmu_metrics_table *table, pmu_metric_iter_fn fn,
56db95818eSIan Rogers 				     void *data);
57660842e4SIan Rogers 
5896d2a746SIan Rogers const struct pmu_events_table *perf_pmu__find_events_table(struct perf_pmu *pmu);
59f8ea2c15SIan Rogers const struct pmu_metrics_table *perf_pmu__find_metrics_table(struct perf_pmu *pmu);
601ba3752aSIan Rogers const struct pmu_events_table *find_core_events_table(const char *arch, const char *cpuid);
61f8ea2c15SIan Rogers const struct pmu_metrics_table *find_core_metrics_table(const char *arch, const char *cpuid);
6229be2fe0SIan Rogers int pmu_for_each_core_event(pmu_event_iter_fn fn, void *data);
63db95818eSIan Rogers int pmu_for_each_core_metric(pmu_metric_iter_fn fn, void *data);
642519db2aSIan Rogers 
651ba3752aSIan Rogers const struct pmu_events_table *find_sys_events_table(const char *name);
66f8ea2c15SIan Rogers const struct pmu_metrics_table *find_sys_metrics_table(const char *name);
672519db2aSIan Rogers int pmu_for_each_sys_event(pmu_event_iter_fn fn, void *data);
68db95818eSIan Rogers int pmu_for_each_sys_metric(pmu_metric_iter_fn fn, void *data);
6980eeb67fSAndi Kleen 
7080eeb67fSAndi Kleen #endif
71