1/* 2 * Copyright (c) 2008 The Hewlett-Packard Development Company 3 * All rights reserved. 4 * 5 * Redistribution and use of this software in source and binary forms, 6 * with or without modification, are permitted provided that the 7 * following conditions are met: 8 * --- 268 unchanged lines hidden (view full) --- 277 pendingUnmaskableInt = pendingNmi = true; 278 nmiVector = vector; 279 } else if (deliveryMode == DeliveryMode::ExtInt && !pendingExtInt) { 280 pendingExtInt = true; 281 extIntVector = vector; 282 } else if (deliveryMode == DeliveryMode::INIT && !pendingInit) { 283 pendingUnmaskableInt = pendingInit = true; 284 initVector = vector; |
285 } else if (deliveryMode == DeliveryMode::SIPI && 286 !pendingStartup && !startedUp) { |
287 pendingUnmaskableInt = pendingStartup = true; 288 startupVector = vector; 289 } 290 } 291 cpu->wakeup(); 292} 293 294 --- 263 unchanged lines hidden (view full) --- 558X86ISA::Interrupts::Interrupts(Params * p) : 559 BasicPioDevice(p), IntDev(this), latency(p->pio_latency), clock(0), 560 apicTimerEvent(this), 561 pendingSmi(false), smiVector(0), 562 pendingNmi(false), nmiVector(0), 563 pendingExtInt(false), extIntVector(0), 564 pendingInit(false), initVector(0), 565 pendingStartup(false), startupVector(0), |
566 startedUp(false), pendingUnmaskableInt(false) |
567{ 568 pioSize = PageBytes; 569 memset(regs, 0, sizeof(regs)); 570 //Set the local apic DFR to the flat model. 571 regs[APIC_DESTINATION_FORMAT] = (uint32_t)(-1); 572 ISRV = 0; 573 IRRV = 0; 574} --- 64 unchanged lines hidden (view full) --- 639 DPRINTF(LocalApic, "SMI sent to core.\n"); 640 pendingSmi = false; 641 } else if (pendingNmi) { 642 DPRINTF(LocalApic, "NMI sent to core.\n"); 643 pendingNmi = false; 644 } else if (pendingInit) { 645 DPRINTF(LocalApic, "Init sent to core.\n"); 646 pendingInit = false; |
647 startedUp = false; |
648 } else if (pendingStartup) { 649 DPRINTF(LocalApic, "SIPI sent to core.\n"); 650 pendingStartup = false; |
651 startedUp = true; |
652 } 653 if (!(pendingSmi || pendingNmi || pendingInit || pendingStartup)) 654 pendingUnmaskableInt = false; 655 } else if (pendingExtInt) { 656 pendingExtInt = false; 657 } else { 658 DPRINTF(LocalApic, "Interrupt %d sent to core.\n", IRRV); 659 // Mark the interrupt as "in service". --- 13 unchanged lines hidden --- |