From 652168fe3d867eec17ac7fa318c8743d524ef40f Mon Sep 17 00:00:00 2001 From: Remy Noel Date: Sat, 20 Jan 2018 11:41:39 +0100 Subject: perfmon: split pmu into amd and intel architectures. pmu_driver handling is now perfmon's responsibility. --- kern/perfmon.h | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'kern/perfmon.h') diff --git a/kern/perfmon.h b/kern/perfmon.h index 89fdd3d..1ab24be 100644 --- a/kern/perfmon.h +++ b/kern/perfmon.h @@ -51,6 +51,21 @@ #define PERFMON_EF_USER 0x2 /* Monitor events in user mode */ #define PERFMON_EF_MASK (PERFMON_EF_KERN | PERFMON_EF_USER) +/* + * Pmu operations. + * + * Set by calling perfmon_register_pmu_ops. + */ +struct perfmon_pmu_ops { + void (*info)(void); + int (*translate)(unsigned int *raw_event_idp, unsigned int event_id); + int (*alloc)(unsigned int *pmc_idp, unsigned int raw_event_id); + void (*free)(unsigned int pmc_id); + void (*start)(unsigned int pmc_id, unsigned int raw_event_id); + void (*stop)(unsigned int pmc_id); + uint64_t (*read)(unsigned int pmc_id); +}; + /* * Performance monitoring event. * @@ -200,4 +215,17 @@ INIT_OP_DECLARE(perfmon_bootstrap); */ INIT_OP_DECLARE(perfmon_setup); +/* + * Register an architecture-specific driver. + */ +int +perfmon_pmu_register(struct perfmon_pmu_ops *driver); + +/* + * PMU init moduls + * - module fully initialized + */ +INIT_OP_DECLARE(pmu_intel_setup); +INIT_OP_DECLARE(pmu_amd_setup); + #endif /* _KERN_PERFMON_H */ -- cgit v1.2.3