summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/arch/amd64/cpu/lapic.c7
-rw-r--r--sys/inc/arch/amd64/lapic.h5
2 files changed, 12 insertions, 0 deletions
diff --git a/sys/arch/amd64/cpu/lapic.c b/sys/arch/amd64/cpu/lapic.c
index 076ddd3..2ff8802 100644
--- a/sys/arch/amd64/cpu/lapic.c
+++ b/sys/arch/amd64/cpu/lapic.c
@@ -62,6 +62,7 @@
#define LAPIC_REG_TCCR 0x0390 /* Timer current counter register */
#define LAPIC_REG_TDCR 0x03E0 /* Timer divide configuration register */
#define LAPIC_REG_LVTTMR 0x0320 /* LVT timer entry */
+#define LAPIC_REG_EOI 0x00B0
#define LAPIC_REG_ICRLO 0x0300U /* Interrupt Command Low Register */
#define LAPIC_REG_ICRHI 0x0310U /* Interrupt Command High Register */
@@ -373,6 +374,12 @@ lapic_oneshot_usec(struct mcb *mcb, size_t usec)
}
void
+lapic_eoi(struct mcb *mcb)
+{
+ lapic_write(mcb, LAPIC_REG_EOI, 0);
+}
+
+void
lapic_init(void)
{
struct cpu_info *ci;
diff --git a/sys/inc/arch/amd64/lapic.h b/sys/inc/arch/amd64/lapic.h
index d22a560..bc72717 100644
--- a/sys/inc/arch/amd64/lapic.h
+++ b/sys/inc/arch/amd64/lapic.h
@@ -98,6 +98,11 @@ struct lapic_ipi {
void lapic_oneshot_usec(struct mcb *mcb, size_t usec);
/*
+ * Send an end-of-interrupt
+ */
+void lapic_eoi(struct mcb *mcb);
+
+/*
* Read the current local APIC id
*/
uint32_t lapic_read_id(struct mcb *mcb);