Changeset 64655 in vbox for trunk/src/VBox/VMM/VMMRC
- Timestamp:
- Nov 14, 2016 10:46:07 AM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 111904
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMRC/PDMRCDevice.cpp
r64596 r64655 29 29 #include <VBox/vmm/vmm.h> 30 30 #include <VBox/vmm/patm.h> 31 #include <VBox/vmm/apic.h> 31 32 32 33 #include <VBox/log.h> … … 432 433 PVM pVM = pDevIns->Internal.s.pVMRC; 433 434 PVMCPU pVCpu = &pVM->aCpus[0]; /* for PIC we always deliver to CPU 0, MP use APIC */ 434 435 if (pVM->pdm.s.Apic.pfnLocalInterruptRC) 436 { 437 LogFlow(("pdmRCPicHlp_SetInterruptFF: caller='%p'/%d: Setting local interrupt on LAPIC\n", 438 pDevIns, pDevIns->iInstance)); 439 /* Raise the LAPIC's LINT0 line instead of signaling the CPU directly. */ 440 /** @todo 'rcRZ' propagation to pfnLocalInterrupt from caller. */ 441 pVM->pdm.s.Apic.pfnLocalInterruptRC(pVM->pdm.s.Apic.pDevInsRC, pVCpu, 0 /* u8Pin */, 1 /* u8Level*/, 442 VINF_SUCCESS /*rcRZ*/); 443 return; 444 } 445 446 LogFlow(("pdmRCPicHlp_SetInterruptFF: caller=%p/%d: VMMCPU_FF_INTERRUPT_PIC %d -> 1\n", 447 pDevIns, pDevIns->iInstance, VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_INTERRUPT_PIC))); 448 449 VMCPU_FF_SET(pVCpu, VMCPU_FF_INTERRUPT_PIC); 435 /** @todo r=ramshankar: Propagating rcRZ and make all callers handle it? */ 436 APICLocalInterrupt(pVCpu, 0 /* u8Pin */, 1 /* u8Level */, VINF_SUCCESS /* rcRZ */); 450 437 } 451 438 … … 457 444 PVM pVM = pDevIns->Internal.s.CTX_SUFF(pVM); 458 445 PVMCPU pVCpu = &pVM->aCpus[0]; /* for PIC we always deliver to CPU 0, MP use APIC */ 459 460 if (pVM->pdm.s.Apic.pfnLocalInterruptRC) 461 { 462 /* Raise the LAPIC's LINT0 line instead of signaling the CPU directly. */ 463 LogFlow(("pdmRCPicHlp_ClearInterruptFF: caller='%s'/%d: Clearing local interrupt on LAPIC\n", 464 pDevIns, pDevIns->iInstance)); 465 /* Lower the LAPIC's LINT0 line instead of signaling the CPU directly. */ 466 /** @todo 'rcRZ' propagation to pfnLocalInterrupt from caller. */ 467 pVM->pdm.s.Apic.pfnLocalInterruptRC(pVM->pdm.s.Apic.pDevInsRC, pVCpu, 0 /* u8Pin */, 0 /* u8Level */, 468 VINF_SUCCESS /* rcRZ */); 469 return; 470 } 471 472 LogFlow(("pdmRCPicHlp_ClearInterruptFF: caller=%p/%d: VMCPU_FF_INTERRUPT_PIC %d -> 0\n", 473 pDevIns, pDevIns->iInstance, VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_INTERRUPT_PIC))); 474 475 VMCPU_FF_CLEAR(pVCpu, VMCPU_FF_INTERRUPT_PIC); 446 /** @todo r=ramshankar: Propagating rcRZ and make all callers handle it? */ 447 APICLocalInterrupt(pVCpu, 0 /* u8Pin */, 0 /* u8Level */, VINF_SUCCESS /* rcRZ */); 476 448 } 477 449 … … 514 486 515 487 /** @interface_method_impl{PDMIOAPICHLPRC,pfnApicBusDeliver} */ 516 static DECLCALLBACK(int) pdmRCIoApicHlp_ApicBusDeliver(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode, uint8_t u8DeliveryMode, 517 uint8_t iVector, uint8_t u8Polarity, uint8_t u8TriggerMode, uint32_t uTagSrc) 488 static DECLCALLBACK(int) pdmRCIoApicHlp_ApicBusDeliver(PPDMDEVINS pDevIns, uint8_t u8Dest, uint8_t u8DestMode, 489 uint8_t u8DeliveryMode, uint8_t uVector, uint8_t u8Polarity, 490 uint8_t u8TriggerMode, uint32_t uTagSrc) 518 491 { 519 492 PDMDEV_ASSERT_DEVINS(pDevIns); 520 493 PVM pVM = pDevIns->Internal.s.pVMRC; 521 LogFlow(("pdmRCIoApicHlp_ApicBusDeliver: caller=%p/%d: u8Dest=%RX8 u8DestMode=%RX8 u8DeliveryMode=%RX8 iVector=%RX8 u8Polarity=%RX8 u8TriggerMode=%RX8 uTagSrc=%#x\n", 522 pDevIns, pDevIns->iInstance, u8Dest, u8DestMode, u8DeliveryMode, iVector, u8Polarity, u8TriggerMode, uTagSrc)); 523 Assert(pVM->pdm.s.Apic.pDevInsRC); 524 if (pVM->pdm.s.Apic.pfnBusDeliverRC) 525 return pVM->pdm.s.Apic.pfnBusDeliverRC(pVM->pdm.s.Apic.pDevInsRC, u8Dest, u8DestMode, u8DeliveryMode, iVector, 526 u8Polarity, u8TriggerMode, uTagSrc); 527 return VINF_SUCCESS; 494 LogFlow(("pdmRCIoApicHlp_ApicBusDeliver: caller=%p/%d: u8Dest=%RX8 u8DestMode=%RX8 u8DeliveryMode=%RX8 uVector=%RX8 u8Polarity=%RX8 u8TriggerMode=%RX8 uTagSrc=%#x\n", 495 pDevIns, pDevIns->iInstance, u8Dest, u8DestMode, u8DeliveryMode, uVector, u8Polarity, u8TriggerMode, uTagSrc)); 496 return APICBusDeliver(pVM, u8Dest, u8DestMode, u8DeliveryMode, uVector, u8Polarity, u8TriggerMode, uTagSrc); 528 497 } 529 498
Note:
See TracChangeset
for help on using the changeset viewer.