diff options
author | Gabe Black <gblack@eecs.umich.edu> | 2009-04-19 02:42:19 -0700 |
---|---|---|
committer | Gabe Black <gblack@eecs.umich.edu> | 2009-04-19 02:42:19 -0700 |
commit | 9549694ecd1cc80e2b690631ea58d14778d368af (patch) | |
tree | e64227a28dddf384d04e338d19eb80e430deec11 /src/dev/x86/i82094aa.cc | |
parent | 06d25dcd26bda01ec1377d7c9ecdc3d4d05c49ce (diff) | |
download | gem5-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.cc | 49 |
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); } } |