summaryrefslogtreecommitdiff
path: root/src/dev/x86/i82094aa.cc
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2009-04-19 02:42:19 -0700
committerGabe Black <gblack@eecs.umich.edu>2009-04-19 02:42:19 -0700
commit9549694ecd1cc80e2b690631ea58d14778d368af (patch)
treee64227a28dddf384d04e338d19eb80e430deec11 /src/dev/x86/i82094aa.cc
parent06d25dcd26bda01ec1377d7c9ecdc3d4d05c49ce (diff)
downloadgem5-9549694ecd1cc80e2b690631ea58d14778d368af.tar.xz
X86: Make code that sends an interrupt from the IO APIC available for IPIs.
Diffstat (limited to 'src/dev/x86/i82094aa.cc')
-rw-r--r--src/dev/x86/i82094aa.cc49
1 files changed, 1 insertions, 48 deletions
diff --git a/src/dev/x86/i82094aa.cc b/src/dev/x86/i82094aa.cc
index d160fcb24..2656a21f9 100644
--- a/src/dev/x86/i82094aa.cc
+++ b/src/dev/x86/i82094aa.cc
@@ -162,54 +162,7 @@ X86ISA::I82094AA::signalInterrupt(int line)
message.destMode = entry.destMode;
message.level = entry.polarity;
message.trigger = entry.trigger;
-
- if (DeliveryMode::isReserved(entry.deliveryMode)) {
- fatal("Tried to use reserved delivery mode "
- "for IO APIC entry %d.\n", line);
- } else if (DTRACE(I82094AA)) {
- DPRINTF(I82094AA, "Delivery mode is: %s.\n",
- DeliveryMode::names[entry.deliveryMode]);
- DPRINTF(I82094AA, "Vector is %#x.\n", message.vector);
- }
-
- if (entry.destMode == 0) {
- DPRINTF(I82094AA,
- "Sending interrupt to APIC ID %d.\n", entry.dest);
- PacketPtr pkt = buildIntRequest(entry.dest, message);
- if (sys->getMemoryMode() == Enums::timing)
- intPort->sendMessageTiming(pkt, latency);
- else if (sys->getMemoryMode() == Enums::atomic)
- intPort->sendMessageAtomic(pkt);
- else
- panic("Unrecognized memory mode.\n");
- } else {
- DPRINTF(I82094AA, "Sending interrupts to APIC IDs:"
- "%s%s%s%s%s%s%s%s\n",
- bits((int)entry.dest, 0) ? " 0": "",
- bits((int)entry.dest, 1) ? " 1": "",
- bits((int)entry.dest, 2) ? " 2": "",
- bits((int)entry.dest, 3) ? " 3": "",
- bits((int)entry.dest, 4) ? " 4": "",
- bits((int)entry.dest, 5) ? " 5": "",
- bits((int)entry.dest, 6) ? " 6": "",
- bits((int)entry.dest, 7) ? " 7": ""
- );
- uint8_t dests = entry.dest;
- uint8_t id = 0;
- while(dests) {
- if (dests & 0x1) {
- PacketPtr pkt = buildIntRequest(id, message);
- if (sys->getMemoryMode() == Enums::timing)
- intPort->sendMessageTiming(pkt, latency);
- else if (sys->getMemoryMode() == Enums::atomic)
- intPort->sendMessageAtomic(pkt);
- else
- panic("Unrecognized memory mode.\n");
- }
- dests >>= 1;
- id++;
- }
- }
+ intPort->sendMessage(message, sys->getMemoryMode() == Enums::timing);
}
}