30a31
> #include "arch/x86/interrupts.hh"
165c166,197
< intPort->sendMessage(message, sys->getMemoryMode() == Enums::timing);
---
> ApicList apics;
> int numContexts = sys->numContexts();
> if (message.destMode == 0) {
> if (message.deliveryMode == DeliveryMode::LowestPriority) {
> panic("Lowest priority delivery mode from the "
> "IO APIC aren't supported in physical "
> "destination mode.\n");
> }
> if (message.destination == 0xFF) {
> for (int i = 0; i < numContexts; i++) {
> apics.push_back(i);
> }
> } else {
> apics.push_back(message.destination);
> }
> } else {
> for (int i = 0; i < numContexts; i++) {
> std::map<int, Interrupts *>::iterator localApicIt =
> localApics.find(i);
> assert(localApicIt != localApics.end());
> Interrupts *localApic = localApicIt->second;
> if ((localApic->readReg(APIC_LOGICAL_DESTINATION) >> 24) &
> message.destination) {
> apics.push_back(localApicIt->first);
> }
> }
> if (message.deliveryMode == DeliveryMode::LowestPriority) {
> panic("Lowest priority delivery mode is not implemented.\n");
> }
> }
> intPort->sendMessage(apics, message,
> sys->getMemoryMode() == Enums::timing);