summaryrefslogtreecommitdiff
path: root/kern/perfmon.h
diff options
context:
space:
mode:
Diffstat (limited to 'kern/perfmon.h')
-rw-r--r--kern/perfmon.h16
1 files changed, 14 insertions, 2 deletions
diff --git a/kern/perfmon.h b/kern/perfmon.h
index 0e5cd19..60e40e0 100644
--- a/kern/perfmon.h
+++ b/kern/perfmon.h
@@ -65,6 +65,7 @@ struct perfmon_pmu_ops {
void (*stop)(unsigned int pmc_id);
uint64_t (*read)(unsigned int pmc_id);
uint8_t (*get_pmc_width)(void);
+ void (*handle_of_intr)(struct trap_frame *frame);
};
/*
@@ -217,10 +218,16 @@ INIT_OP_DECLARE(perfmon_bootstrap);
INIT_OP_DECLARE(perfmon_setup);
/*
+ * Handle overflow interrupt.
+ */
+void perfmon_handle_of_intr(struct trap_frame *frame);
+
+int perfmon_on_overflow(struct perfmon_pmu_ops *driver);
+
+/*
* Register an architecture-specific driver.
*/
-int
-perfmon_pmu_register(struct perfmon_pmu_ops *driver);
+int perfmon_pmu_register(struct perfmon_pmu_ops *driver);
/*
* Get the last value of given pmc.
@@ -228,6 +235,11 @@ perfmon_pmu_register(struct perfmon_pmu_ops *driver);
uint64_t perfmon_cpu_pmc_get_prev(unsigned int pmc_id);
/*
+ * Set the last value of given pmc.
+ */
+void perfmon_cpu_pmc_set_prev(unsigned int pmc_id, uint64_t prev);
+
+/*
* Increment overflow counter for given pmc.
*/
void perfmon_cpu_pmc_inc_of(unsigned int pmc_id);