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