interrupts.cc (10474:799c8ee4ecba) interrupts.cc (10542:7be879ff600c)
1/*
2 * Copyright (c) 2012-2013 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software

--- 477 unchanged lines hidden (view full) ---

486 InterruptCommandRegLow low = regs[APIC_INTERRUPT_COMMAND_LOW];
487 // Check if we're already sending an IPI.
488 if (low.deliveryStatus) {
489 newVal = low;
490 break;
491 }
492 low = val;
493 InterruptCommandRegHigh high = regs[APIC_INTERRUPT_COMMAND_HIGH];
1/*
2 * Copyright (c) 2012-2013 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software

--- 477 unchanged lines hidden (view full) ---

486 InterruptCommandRegLow low = regs[APIC_INTERRUPT_COMMAND_LOW];
487 // Check if we're already sending an IPI.
488 if (low.deliveryStatus) {
489 newVal = low;
490 break;
491 }
492 low = val;
493 InterruptCommandRegHigh high = regs[APIC_INTERRUPT_COMMAND_HIGH];
494 // Record that an IPI is being sent.
495 low.deliveryStatus = 1;
496 TriggerIntMessage message = 0;
497 message.destination = high.destination;
498 message.vector = low.vector;
499 message.deliveryMode = low.deliveryMode;
500 message.destMode = low.destMode;
501 message.level = low.level;
502 message.trigger = low.trigger;
494 TriggerIntMessage message = 0;
495 message.destination = high.destination;
496 message.vector = low.vector;
497 message.deliveryMode = low.deliveryMode;
498 message.destMode = low.destMode;
499 message.level = low.level;
500 message.trigger = low.trigger;
503 bool timing(sys->isTimingMode());
504 // Be careful no updates of the delivery status bit get lost.
505 regs[APIC_INTERRUPT_COMMAND_LOW] = low;
506 ApicList apics;
507 int numContexts = sys->numContexts();
508 switch (low.destShorthand) {
509 case 0:
510 if (message.deliveryMode == DeliveryMode::LowestPriority) {
511 panic("Lowest priority delivery mode "
512 "IPIs aren't implemented.\n");
513 }

--- 39 unchanged lines hidden (view full) ---

553 for (int i = 0; i < numContexts; i++) {
554 if (i != initialApicId) {
555 apics.push_back(i);
556 }
557 }
558 }
559 break;
560 }
501 ApicList apics;
502 int numContexts = sys->numContexts();
503 switch (low.destShorthand) {
504 case 0:
505 if (message.deliveryMode == DeliveryMode::LowestPriority) {
506 panic("Lowest priority delivery mode "
507 "IPIs aren't implemented.\n");
508 }

--- 39 unchanged lines hidden (view full) ---

548 for (int i = 0; i < numContexts; i++) {
549 if (i != initialApicId) {
550 apics.push_back(i);
551 }
552 }
553 }
554 break;
555 }
561 pendingIPIs += apics.size();
562 intMasterPort.sendMessage(apics, message, timing);
556 // Record that an IPI is being sent if one actually is.
557 if (apics.size()) {
558 low.deliveryStatus = 1;
559 pendingIPIs += apics.size();
560 }
561 regs[APIC_INTERRUPT_COMMAND_LOW] = low;
562 intMasterPort.sendMessage(apics, message, sys->isTimingMode());
563 newVal = regs[APIC_INTERRUPT_COMMAND_LOW];
564 }
565 break;
566 case APIC_LVT_TIMER:
567 case APIC_LVT_THERMAL_SENSOR:
568 case APIC_LVT_PERFORMANCE_MONITORING_COUNTERS:
569 case APIC_LVT_LINT0:
570 case APIC_LVT_LINT1:

--- 222 unchanged lines hidden ---
563 newVal = regs[APIC_INTERRUPT_COMMAND_LOW];
564 }
565 break;
566 case APIC_LVT_TIMER:
567 case APIC_LVT_THERMAL_SENSOR:
568 case APIC_LVT_PERFORMANCE_MONITORING_COUNTERS:
569 case APIC_LVT_LINT0:
570 case APIC_LVT_LINT1:

--- 222 unchanged lines hidden ---