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 --- |