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