Changeset 80943 in vbox for trunk/src/VBox/VMM/VMMR0
- Timestamp:
- Sep 23, 2019 9:36:14 AM (6 years ago)
- svn:sync-xref-src-repo-rev:
- 133523
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/PDMR0Device.cpp
r80942 r80943 283 283 LogFlow(("pdmR0DevHlp_PCISetIrq: caller=%p/%d: pPciDev=%p:{%#x} iIrq=%d iLevel=%d\n", 284 284 pDevIns, pDevIns->iInstance, pPciDev, pPciDev->uDevFn, iIrq, iLevel)); 285 PGVM pGVM = pDevIns->Internal.s.pGVM;286 size_t const idxBus = pPciDev->Int.s.idxPdmBus;287 AssertReturnVoid(idxBus < RT_ELEMENTS(pGVM->pdm .s.aPciBuses));288 PPDMPCIBUS pPciBus = &pGVM->pdm.s.aPciBuses[idxBus];285 PGVM pGVM = pDevIns->Internal.s.pGVM; 286 size_t const idxBus = pPciDev->Int.s.idxPdmBus; 287 AssertReturnVoid(idxBus < RT_ELEMENTS(pGVM->pdmr0.s.aPciBuses)); 288 PPDMPCIBUSR0 pPciBusR0 = &pGVM->pdmr0.s.aPciBuses[idxBus]; 289 289 290 290 pdmLock(pGVM); 291 291 292 uint32_t uTagSrc; 292 293 if (iLevel & PDM_IRQ_LEVEL_HIGH) … … 301 302 uTagSrc = pDevIns->Internal.s.pIntR3R0->uLastIrqTag; 302 303 303 if ( pPciBus 304 && pPciBus->pDevInsR0) 305 { 306 pPciBus->pfnSetIrqR0(pPciBus->pDevInsR0, pPciDev, iIrq, iLevel, uTagSrc); 304 if (pPciBusR0->pDevInsR0) 305 { 306 pPciBusR0->pfnSetIrqR0(pPciBusR0->pDevInsR0, pPciDev, iIrq, iLevel, uTagSrc); 307 307 308 308 pdmUnlock(pGVM); … … 793 793 LogFlow(("pdmR0DevHlp_DBGFTraceBuf: caller='%p'/%d: returns %p\n", pDevIns, pDevIns->iInstance, hTraceBuf)); 794 794 return hTraceBuf; 795 } 796 797 798 /** @interface_method_impl{PDMDEVHLPR0,pfnPCIBusSetUpContext} */ 799 static DECLCALLBACK(int) pdmR0DevHlp_PCIBusSetUpContext(PPDMDEVINS pDevIns, PPDMPCIBUSREGR0 pPciBusReg, PCPDMPCIHLPR0 *ppPciHlp) 800 { 801 PDMDEV_ASSERT_DEVINS(pDevIns); 802 LogFlow(("pdmR0DevHlp_PCIBusSetUpContext: caller='%p'/%d: pPciBusReg=%p{.u32Version=%#x, .iBus=%#u, .pfnSetIrq=%p, u32EnvVersion=%#x} ppPciHlp=%p\n", 803 pDevIns, pDevIns->iInstance, pPciBusReg, pPciBusReg->u32Version, pPciBusReg->iBus, pPciBusReg->pfnSetIrq, 804 pPciBusReg->u32EndVersion, ppPciHlp)); 805 PGVM pGVM = pDevIns->Internal.s.pGVM; 806 807 /* 808 * Validate input. 809 */ 810 AssertPtrReturn(pPciBusReg, VERR_INVALID_POINTER); 811 AssertLogRelMsgReturn(pPciBusReg->u32Version == PDM_PCIBUSREGCC_VERSION, 812 ("%#x vs %#x\n", pPciBusReg->u32Version, PDM_PCIBUSREGCC_VERSION), VERR_VERSION_MISMATCH); 813 AssertPtrReturn(pPciBusReg->pfnSetIrq, VERR_INVALID_POINTER); 814 AssertLogRelMsgReturn(pPciBusReg->u32EndVersion == PDM_PCIBUSREGCC_VERSION, 815 ("%#x vs %#x\n", pPciBusReg->u32EndVersion, PDM_PCIBUSREGCC_VERSION), VERR_VERSION_MISMATCH); 816 817 AssertPtrReturn(ppPciHlp, VERR_INVALID_POINTER); 818 819 VM_ASSERT_STATE_RETURN(pGVM, VMSTATE_CREATING, VERR_WRONG_ORDER); 820 VM_ASSERT_EMT0_RETURN(pGVM, VERR_VM_THREAD_NOT_EMT); 821 822 /* Check the shared bus data (registered earlier from ring-3): */ 823 uint32_t iBus = pPciBusReg->iBus; 824 ASMCompilerBarrier(); 825 AssertLogRelMsgReturn(iBus < RT_ELEMENTS(pGVM->pdm.s.aPciBuses), ("iBus=%#x\n", iBus), VERR_OUT_OF_RANGE); 826 PPDMPCIBUS pPciBusShared = &pGVM->pdm.s.aPciBuses[iBus]; 827 AssertLogRelMsgReturn(pPciBusShared->iBus == iBus, ("%u vs %u\n", pPciBusShared->iBus, iBus), VERR_INVALID_PARAMETER); 828 AssertLogRelMsgReturn(pPciBusShared->pDevInsR3 == pDevIns->pDevInsForR3, 829 ("%p vs %p (iBus=%u)\n", pPciBusShared->pDevInsR3, pDevIns->pDevInsForR3, iBus), VERR_NOT_OWNER); 830 831 /* Check that the bus isn't already registered in ring-0: */ 832 AssertCompile(RT_ELEMENTS(pGVM->pdm.s.aPciBuses) == RT_ELEMENTS(pGVM->pdmr0.s.aPciBuses)); 833 PPDMPCIBUSR0 pPciBusR0 = &pGVM->pdmr0.s.aPciBuses[iBus]; 834 AssertLogRelMsgReturn(pPciBusR0->pDevInsR0 == NULL, 835 ("%p (caller pDevIns=%p, iBus=%u)\n", pPciBusR0->pDevInsR0, pDevIns, iBus), 836 VERR_ALREADY_EXISTS); 837 838 /* 839 * Do the registering. 840 */ 841 pPciBusR0->iBus = iBus; 842 pPciBusR0->uPadding0 = 0xbeefbeef; 843 pPciBusR0->pfnSetIrqR0 = pPciBusReg->pfnSetIrq; 844 pPciBusR0->pDevInsR0 = pDevIns; 845 846 *ppPciHlp = &g_pdmR0PciHlp; 847 848 LogFlow(("pdmR0DevHlp_PCIBusSetUpContext: caller='%p'/%d: returns VINF_SUCCESS\n", pDevIns, pDevIns->iInstance)); 849 return VINF_SUCCESS; 795 850 } 796 851 … … 853 908 pdmR0DevHlp_CritSectGetRecursion, 854 909 pdmR0DevHlp_DBGFTraceBuf, 910 pdmR0DevHlp_PCIBusSetUpContext, 855 911 NULL /*pfnReserved1*/, 856 912 NULL /*pfnReserved2*/,
Note:
See TracChangeset
for help on using the changeset viewer.