summaryrefslogtreecommitdiff
path: root/src/arch
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch')
-rw-r--r--src/arch/x86/interrupts.cc13
-rw-r--r--src/arch/x86/interrupts.hh5
2 files changed, 18 insertions, 0 deletions
diff --git a/src/arch/x86/interrupts.cc b/src/arch/x86/interrupts.cc
index dc4193f36..88d200b80 100644
--- a/src/arch/x86/interrupts.cc
+++ b/src/arch/x86/interrupts.cc
@@ -59,6 +59,9 @@
#include "arch/x86/interrupts.hh"
#include "arch/x86/intmessage.hh"
#include "cpu/base.hh"
+#include "dev/x86/i82094aa.hh"
+#include "dev/x86/pc.hh"
+#include "dev/x86/south_bridge.hh"
#include "mem/packet_access.hh"
#include "sim/system.hh"
@@ -306,6 +309,16 @@ X86ISA::Interrupts::setCPU(BaseCPU * newCPU)
}
+void
+X86ISA::Interrupts::init()
+{
+ BasicPioDevice::init();
+ Pc * pc = dynamic_cast<Pc *>(platform);
+ assert(pc);
+ pc->southBridge->ioApic->registerLocalApic(initialApicId, this);
+}
+
+
Tick
X86ISA::Interrupts::recvMessage(PacketPtr pkt)
{
diff --git a/src/arch/x86/interrupts.hh b/src/arch/x86/interrupts.hh
index 33fafd941..e1bd676db 100644
--- a/src/arch/x86/interrupts.hh
+++ b/src/arch/x86/interrupts.hh
@@ -214,6 +214,11 @@ class Interrupts : public BasicPioDevice, IntDev
}
/*
+ * Initialize this object by registering it with the IO APIC.
+ */
+ void init();
+
+ /*
* Functions to interact with the interrupt port from IntDev.
*/
Tick read(PacketPtr pkt);