interrupts.cc (6065:0ad264b74ac2) | interrupts.cc (6066:a9fe0813039f) |
---|---|
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; | 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 && !pendingStartup) { | 285 } else if (deliveryMode == DeliveryMode::SIPI && 286 !pendingStartup && !startedUp) { |
286 pendingUnmaskableInt = pendingStartup = true; 287 startupVector = vector; 288 } 289 } 290 cpu->wakeup(); 291} 292 293 --- 263 unchanged lines hidden (view full) --- 557X86ISA::Interrupts::Interrupts(Params * p) : 558 BasicPioDevice(p), IntDev(this), latency(p->pio_latency), clock(0), 559 apicTimerEvent(this), 560 pendingSmi(false), smiVector(0), 561 pendingNmi(false), nmiVector(0), 562 pendingExtInt(false), extIntVector(0), 563 pendingInit(false), initVector(0), 564 pendingStartup(false), startupVector(0), | 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), |
565 pendingUnmaskableInt(false) | 566 startedUp(false), pendingUnmaskableInt(false) |
566{ 567 pioSize = PageBytes; 568 memset(regs, 0, sizeof(regs)); 569 //Set the local apic DFR to the flat model. 570 regs[APIC_DESTINATION_FORMAT] = (uint32_t)(-1); 571 ISRV = 0; 572 IRRV = 0; 573} --- 64 unchanged lines hidden (view full) --- 638 DPRINTF(LocalApic, "SMI sent to core.\n"); 639 pendingSmi = false; 640 } else if (pendingNmi) { 641 DPRINTF(LocalApic, "NMI sent to core.\n"); 642 pendingNmi = false; 643 } else if (pendingInit) { 644 DPRINTF(LocalApic, "Init sent to core.\n"); 645 pendingInit = 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; |
|
646 } else if (pendingStartup) { 647 DPRINTF(LocalApic, "SIPI sent to core.\n"); 648 pendingStartup = false; | 648 } else if (pendingStartup) { 649 DPRINTF(LocalApic, "SIPI sent to core.\n"); 650 pendingStartup = false; |
651 startedUp = true; |
|
649 } 650 if (!(pendingSmi || pendingNmi || pendingInit || pendingStartup)) 651 pendingUnmaskableInt = false; 652 } else if (pendingExtInt) { 653 pendingExtInt = false; 654 } else { 655 DPRINTF(LocalApic, "Interrupt %d sent to core.\n", IRRV); 656 // Mark the interrupt as "in service". --- 13 unchanged lines hidden --- | 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 --- |