Changeset 81375 in vbox for trunk/src/VBox/VMM
- Timestamp:
- Oct 19, 2019 1:57:55 PM (5 years ago)
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IOMAllMmioNew.cpp
r81369 r81375 701 701 702 702 703 #ifndef IN_RING3 703 704 /** 704 705 * @callback_method_impl{FNPGMRZPHYSPFHANDLER, … … 710 711 RTGCPTR pvFault, RTGCPHYS GCPhysFault, void *pvUser) 711 712 { 712 LogFlow(("iomMmioPfHandler: GCPhys=%RGp uErr=%#x pvFault=%RGv rip=%RGv\n", 713 STAM_COUNTER_INC(&pVM->iom.s.StatMmioPfHandlerNew); 714 LogFlow(("iomMmioPfHandlerNew: GCPhys=%RGp uErr=%#x pvFault=%RGv rip=%RGv\n", 713 715 GCPhysFault, (uint32_t)uErrorCode, pvFault, (RTGCPTR)pCtxCore->rip)); 714 716 RT_NOREF(pvFault, pCtxCore); … … 716 718 /* Translate the MMIO handle to a registration entry for the current context. */ 717 719 AssertReturn((uintptr_t)pvUser < RT_MIN(pVM->iom.s.cMmioRegs, pVM->iom.s.cMmioAlloc), VERR_IOM_INVALID_MMIO_HANDLE); 718 # ifdef IN_RING0720 # ifdef IN_RING0 719 721 AssertReturn((uintptr_t)pvUser < pVM->iomr0.s.cMmioAlloc, VERR_IOM_INVALID_MMIO_HANDLE); 720 722 CTX_SUFF(PIOMMMIOENTRY) pRegEntry = &pVM->iomr0.s.paMmioRegs[(uintptr_t)pvUser]; 721 # else723 # else 722 724 CTX_SUFF(PIOMMMIOENTRY) pRegEntry = &pVM->iom.s.paMmioRegs[(uintptr_t)pvUser]; 723 # endif725 # endif 724 726 725 727 return iomMmioCommonPfHandlerNew(pVM, pVCpu, (uint32_t)uErrorCode, GCPhysFault, pRegEntry); 726 728 } 729 #endif /* !IN_RING3 */ 727 730 728 731 … … 739 742 * @param GCPhysFault The GC physical address. 740 743 */ 741 VMM_INT_DECL(VBOXSTRICTRC) IOMMmioPhysHandler(PVMCC pVM, PVMCPUCC pVCpu, uint32_t uErrorCode, RTGCPHYS GCPhysFault) 742 { 744 VMM_INT_DECL(VBOXSTRICTRC) IOMMmioPhysHandlerNew(PVMCC pVM, PVMCPUCC pVCpu, uint32_t uErrorCode, RTGCPHYS GCPhysFault) 745 { 746 STAM_COUNTER_INC(&pVM->iom.s.StatMmioPhysHandlerNew); 747 743 748 /* 744 749 * We don't have a range here, so look it up before calling the common function. … … 793 798 { 794 799 STAM_PROFILE_START(UnusedMacroArg, Prf); 795 STAM_COUNTER_INC(&pVM->iom.s.CTX_SUFF(StatMmioHandler)); 800 STAM_COUNTER_INC(&pVM->iom.s.CTX_SUFF(StatMmioHandlerNew)); 801 Log4(("iomMmioHandlerNew: GCPhysFault=%RGp cbBuf=%#x enmAccessType=%d enmOrigin=%d pvUser=%p\n", GCPhysFault, cbBuf, enmAccessType, enmOrigin, pvUser)); 796 802 797 803 Assert(enmAccessType == PGMACCESSTYPE_READ || enmAccessType == PGMACCESSTYPE_WRITE); … … 855 861 else 856 862 { 863 Log4(("iomMmioHandlerNew: to ring-3: to-big=%RTbool zero-size=%RTbool no-callback=%RTbool pDevIns=%p hRegion=%p\n", 864 !(cbBuf <= sizeof(pVCpu->iom.s.PendingMmioWrite.abValue)), !(pRegEntry->cbRegion != 0), 865 !( enmAccessType == PGMACCESSTYPE_READ 866 ? pRegEntry->pfnReadCallback != NULL || pVM->iomr0.s.paMmioRing3Regs[(uintptr_t)pvUser].pfnReadCallback == NULL 867 : pRegEntry->pfnWriteCallback != NULL || pVM->iomr0.s.paMmioRing3Regs[(uintptr_t)pvUser].pfnWriteCallback == NULL), 868 pDevIns, pvUser)); 857 869 STAM_COUNTER_INC(enmAccessType == PGMACCESSTYPE_READ ? &pStats->ReadRZToR3 : &pStats->WriteRZToR3); 858 870 STAM_COUNTER_INC(enmAccessType == PGMACCESSTYPE_READ ? &pVM->iom.s.StatRZMMIOReadsToR3 : &pVM->iom.s.StatRZMMIOWritesToR3); … … 871 883 RTGCPHYS const GCPhysMapping = pRegEntry->GCPhysMapping; 872 884 #endif 873 RTGCPHYS const offRegion = GCPhys Mapping - GCPhysFault;885 RTGCPHYS const offRegion = GCPhysFault - GCPhysMapping; 874 886 if (RT_LIKELY(offRegion < pRegEntry->cbRegion && GCPhysMapping != NIL_RTGCPHYS)) 875 887 { /* likely */ } -
trunk/src/VBox/VMM/VMMR3/IOM.cpp
r81341 r81375 196 196 NULL, "iomMmioHandlerNew", "iomMmioPfHandlerNew", 197 197 NULL, "iomMmioHandlerNew", "iomMmioPfHandlerNew", 198 "MMIO ", &pVM->iom.s.hNewMmioHandlerType);198 "MMIO New", &pVM->iom.s.hNewMmioHandlerType); 199 199 AssertRCReturn(rc, rc); 200 200 … … 210 210 STAM_REL_REG(pVM, &pVM->iom.s.StatMMIOStaleMappings, STAMTYPE_PROFILE, "/IOM/MMIOStaleMappings", STAMUNIT_TICKS_PER_CALL, "Number of times iomMmioHandlerNew got a call for a remapped range at the old mapping."); 211 211 STAM_REG(pVM, &pVM->iom.s.StatRZMMIOHandler, STAMTYPE_PROFILE, "/IOM/RZ-MMIOHandler", STAMUNIT_TICKS_PER_CALL, "Profiling of the iomMmioPfHandler() body, only success calls."); 212 #if 0213 STAM_REG(pVM, &pVM->iom.s.StatRZMMIO1Byte, STAMTYPE_COUNTER, "/IOM/RZ-MMIOHandler/Access1", STAMUNIT_OCCURENCES, "MMIO access by 1 byte counter.");214 STAM_REG(pVM, &pVM->iom.s.StatRZMMIO2Bytes, STAMTYPE_COUNTER, "/IOM/RZ-MMIOHandler/Access2", STAMUNIT_OCCURENCES, "MMIO access by 2 bytes counter.");215 STAM_REG(pVM, &pVM->iom.s.StatRZMMIO4Bytes, STAMTYPE_COUNTER, "/IOM/RZ-MMIOHandler/Access4", STAMUNIT_OCCURENCES, "MMIO access by 4 bytes counter.");216 STAM_REG(pVM, &pVM->iom.s.StatRZMMIO8Bytes, STAMTYPE_COUNTER, "/IOM/RZ-MMIOHandler/Access8", STAMUNIT_OCCURENCES, "MMIO access by 8 bytes counter.");217 #endif218 212 STAM_REG(pVM, &pVM->iom.s.StatRZMMIOReadsToR3, STAMTYPE_COUNTER, "/IOM/RZ-MMIOHandler/ReadsToR3", STAMUNIT_OCCURENCES, "Number of read deferred to ring-3."); 219 213 STAM_REG(pVM, &pVM->iom.s.StatRZMMIOWritesToR3, STAMTYPE_COUNTER, "/IOM/RZ-MMIOHandler/WritesToR3", STAMUNIT_OCCURENCES, "Number of writes deferred to ring-3."); … … 222 216 STAM_REG(pVM, &pVM->iom.s.StatR3MMIOHandler, STAMTYPE_COUNTER, "/IOM/R3-MMIOHandler", STAMUNIT_OCCURENCES, "Number of calls to iomMmioHandler."); 223 217 224 STAM_REG(pVM, &pVM->iom.s.StatMmioHandlerR3, STAMTYPE_COUNTER, "/IOM/MmioHandlerR3", STAMUNIT_OCCURENCES, "Number of calls to iomMmioHandlerNew from ring-3."); 225 STAM_REG(pVM, &pVM->iom.s.StatMmioHandlerR0, STAMTYPE_COUNTER, "/IOM/MmioHandlerR0", STAMUNIT_OCCURENCES, "Number of calls to iomMmioHandlerNew from ring-0."); 218 STAM_REG(pVM, &pVM->iom.s.StatMmioHandlerR3, STAMTYPE_COUNTER, "/IOM/OldMmioHandlerR3", STAMUNIT_OCCURENCES, "Number of calls to old iomMmioHandler from ring-3."); 219 STAM_REG(pVM, &pVM->iom.s.StatMmioHandlerR0, STAMTYPE_COUNTER, "/IOM/OldMmioHandlerR0", STAMUNIT_OCCURENCES, "Number of calls to old iomMmioHandler from ring-0."); 220 221 STAM_REG(pVM, &pVM->iom.s.StatMmioHandlerNewR3, STAMTYPE_COUNTER, "/IOM/MmioHandlerNewR3", STAMUNIT_OCCURENCES, "Number of calls to iomMmioHandlerNew from ring-3."); 222 STAM_REG(pVM, &pVM->iom.s.StatMmioHandlerNewR0, STAMTYPE_COUNTER, "/IOM/MmioHandlerNewR0", STAMUNIT_OCCURENCES, "Number of calls to iomMmioHandlerNew from ring-0."); 223 STAM_REG(pVM, &pVM->iom.s.StatMmioPfHandlerNew, STAMTYPE_COUNTER, "/IOM/MmioPfHandlerNew", STAMUNIT_OCCURENCES, "Number of calls to iomMmioPfHandlerNew from ring-3."); 224 STAM_REG(pVM, &pVM->iom.s.StatMmioPhysHandlerNew, STAMTYPE_COUNTER, "/IOM/MmioPhysHandlerNew", STAMUNIT_OCCURENCES, "Number of calls to iomMmioPhysHandler from ring-3."); 226 225 227 226 /* Redundant, but just in case we change something in the future */ -
trunk/src/VBox/VMM/VMMR3/IOMR3IoPort.cpp
r81162 r81375 125 125 size_t cchPrefix; 126 126 if (pRegEntry->cPorts > 1) 127 cchPrefix = RTStrPrintf(szPrefix, sizeof(szPrefix), "/IOM/NewPorts/%04x-%04x /", uPort, uPort + pRegEntry->cPorts - 1);127 cchPrefix = RTStrPrintf(szPrefix, sizeof(szPrefix), "/IOM/NewPorts/%04x-%04x", uPort, uPort + pRegEntry->cPorts - 1); 128 128 else 129 cchPrefix = RTStrPrintf(szPrefix, sizeof(szPrefix), "/IOM/NewPorts/%04x /", uPort);129 cchPrefix = RTStrPrintf(szPrefix, sizeof(szPrefix), "/IOM/NewPorts/%04x", uPort); 130 130 STAMR3DeregisterByPrefix(pVM->pUVM, szPrefix); 131 131 } … … 527 527 528 528 /** 529 * Validates @a hIoPorts, making sure it belongs to @a pDevIns. 530 * 531 * @returns VBox status code. 532 * @param pVM The cross context VM structure. 533 * @param pDevIns The device which allegedly owns @a hIoPorts. 534 * @param hIoPorts The handle to validate. 535 */ 536 VMMR3_INT_DECL(int) IOMR3IoPortValidateHandle(PVM pVM, PPDMDEVINS pDevIns, IOMIOPORTHANDLE hIoPorts) 537 { 538 AssertPtrReturn(pDevIns, VERR_INVALID_HANDLE); 539 AssertReturn(hIoPorts < RT_MIN(pVM->iom.s.cIoPortRegs, pVM->iom.s.cIoPortAlloc), VERR_IOM_INVALID_IOPORT_HANDLE); 540 PIOMIOPORTENTRYR3 const pRegEntry = &pVM->iom.s.paIoPortRegs[hIoPorts]; 541 AssertReturn(pRegEntry->pDevIns == pDevIns, VERR_IOM_INVALID_IOPORT_HANDLE); 542 return VINF_SUCCESS; 543 } 544 545 546 /** 529 547 * Display a single I/O port ring-3 range. 530 548 * -
trunk/src/VBox/VMM/VMMR3/IOMR3Mmio.cpp
r81337 r81375 98 98 static void iomR3MmioDeregStats(PVM pVM, PIOMMMIOENTRYR3 pRegEntry, RTGCPHYS GCPhys) 99 99 { 100 char 101 RTStrPrintf(szPrefix, sizeof(szPrefix), "/IOM/NewMmio/%RGp-%RGp /", GCPhys, GCPhys + pRegEntry->cbRegion - 1);100 char szPrefix[80]; 101 RTStrPrintf(szPrefix, sizeof(szPrefix), "/IOM/NewMmio/%RGp-%RGp", GCPhys, GCPhys + pRegEntry->cbRegion - 1); 102 102 STAMR3DeregisterByPrefix(pVM->pUVM, szPrefix); 103 103 } … … 123 123 AssertPtrReturn(pDevIns, VERR_INVALID_POINTER); 124 124 125 AssertMsgReturn(cbRegion > 0 && !(cbRegion & PAGE_OFFSET_MASK), ("cbRegion=%RGp\n", cbRegion), VERR_OUT_OF_RANGE); 125 AssertMsgReturn(cbRegion > 0 && cbRegion <= MM_MMIO_64_MAX, ("cbRegion=%#RGp (max %#RGp)\n", cbRegion, MM_MMIO_64_MAX), 126 VERR_OUT_OF_RANGE); 127 AssertMsgReturn(!(cbRegion & PAGE_OFFSET_MASK), ("cbRegion=%#RGp\n", cbRegion), VERR_UNSUPPORTED_ALIGNMENT); 128 126 129 AssertMsgReturn( !(fFlags & ~IOMMMIO_FLAGS_VALID_MASK) 127 130 && (fFlags & IOMMMIO_FLAGS_READ_MODE) <= IOMMMIO_FLAGS_READ_DWORD_QWORD … … 130 133 VERR_INVALID_FLAGS); 131 134 132 AssertReturn(pfnWrite || pfnRead || pfnFill, VERR_INVALID_PARAMETER);135 AssertReturn(pfnWrite || pfnRead, VERR_INVALID_PARAMETER); 133 136 AssertPtrNullReturn(pfnWrite, VERR_INVALID_POINTER); 134 137 AssertPtrNullReturn(pfnRead, VERR_INVALID_POINTER); 135 138 AssertPtrNullReturn(pfnFill, VERR_INVALID_POINTER); 139 136 140 AssertPtrReturn(pszDesc, VERR_INVALID_POINTER); 137 141 AssertReturn(*pszDesc != '\0', VERR_INVALID_POINTER); … … 203 207 204 208 RTGCPHYS const cbRegion = pRegEntry->cbRegion; 205 AssertMsgReturn(cbRegion > 0 && cbRegion <= _1T, ("cbRegion=%RGp\n", cbRegion), VERR_IOM_MMIO_IPE_1);209 AssertMsgReturn(cbRegion > 0 && cbRegion <= MM_MMIO_64_MAX, ("cbRegion=%RGp\n", cbRegion), VERR_IOM_MMIO_IPE_1); 206 210 RTGCPHYS const GCPhysLast = GCPhys + cbRegion - 1; 207 211 … … 288 292 } 289 293 else 294 { 295 /* First entry in the lookup table: */ 296 ASMAtomicWriteU64(&pRegEntry->GCPhysMapping, GCPhys); 297 rc = PGMR3PhysMMIORegister(pVM, GCPhys, cbRegion, pVM->iom.s.hNewMmioHandlerType, 298 (void *)(uintptr_t)hRegion, hRegion, hRegion, pRegEntry->pszDesc); 299 AssertRCReturnStmt(rc, ASMAtomicWriteU64(&pRegEntry->GCPhysMapping, NIL_RTGCPHYS); IOM_UNLOCK_EXCL(pVM), rc); 300 290 301 pEntry = paEntries; 302 } 291 303 292 304 /* … … 455 467 456 468 /** 469 * Validates @a hRegion, making sure it belongs to @a pDevIns. 470 * 471 * @returns VBox status code. 472 * @param pVM The cross context VM structure. 473 * @param pDevIns The device which allegedly owns @a hRegion. 474 * @param hRegion The handle to validate. 475 */ 476 VMMR3_INT_DECL(int) IOMR3MmioValidateHandle(PVM pVM, PPDMDEVINS pDevIns, IOMMMIOHANDLE hRegion) 477 { 478 AssertPtrReturn(pDevIns, VERR_INVALID_HANDLE); 479 AssertReturn(hRegion < RT_MIN(pVM->iom.s.cMmioRegs, pVM->iom.s.cMmioAlloc), VERR_IOM_INVALID_MMIO_HANDLE); 480 PIOMMMIOENTRYR3 const pRegEntry = &pVM->iom.s.paMmioRegs[hRegion]; 481 AssertReturn(pRegEntry->pDevIns == pDevIns, VERR_IOM_INVALID_MMIO_HANDLE); 482 return VINF_SUCCESS; 483 } 484 485 486 /** 457 487 * Display a single MMIO range. 458 488 * -
trunk/src/VBox/VMM/VMMR3/PDMDevHlp.cpp
r81169 r81375 1924 1924 /** @interface_method_impl{PDMDEVHLPR3,pfnPCIIORegionRegister} */ 1925 1925 static DECLCALLBACK(int) pdmR3DevHlp_PCIIORegionRegister(PPDMDEVINS pDevIns, PPDMPCIDEV pPciDev, uint32_t iRegion, 1926 RTGCPHYS cbRegion, PCIADDRESSSPACE enmType, PFNPCIIOREGIONMAP pfnCallback) 1926 RTGCPHYS cbRegion, PCIADDRESSSPACE enmType, uint32_t fFlags, 1927 uint64_t hHandle, PFNPCIIOREGIONMAP pfnCallback) 1927 1928 { 1928 1929 PDMDEV_ASSERT_DEVINS(pDevIns); … … 1932 1933 pPciDev = pDevIns->apPciDevs[0]; 1933 1934 AssertReturn(pPciDev, VERR_PDM_NOT_PCI_DEVICE); 1934 LogFlow(("pdmR3DevHlp_PCIIORegionRegister: caller='%s'/%d: pPciDev=%p:{%#x} iRegion=%d cbRegion=%RGp enmType=%d pfnCallback=%p\n",1935 pDevIns->pReg->szName, pDevIns->iInstance, pPciDev, pPciDev->uDevFn, iRegion, cbRegion, enmType, pfnCallback));1935 LogFlow(("pdmR3DevHlp_PCIIORegionRegister: caller='%s'/%d: pPciDev=%p:{%#x} iRegion=%d cbRegion=%RGp enmType=%d fFlags=%#x, hHandle=%#RX64 pfnCallback=%p\n", 1936 pDevIns->pReg->szName, pDevIns->iInstance, pPciDev, pPciDev->uDevFn, iRegion, cbRegion, enmType, fFlags, hHandle, pfnCallback)); 1936 1937 PDMPCIDEV_ASSERT_VALID_RET(pDevIns, pPciDev); 1937 1938 … … 1939 1940 * Validate input. 1940 1941 */ 1942 VM_ASSERT_EMT0_RETURN(pVM, VERR_VM_THREAD_NOT_EMT); 1943 AssertLogRelMsgReturn(VMR3GetState(pVM) == VMSTATE_CREATING, 1944 ("caller='%s'/%d: %s\n", pDevIns->pReg->szName, pDevIns->iInstance, VMR3GetStateName(VMR3GetState(pVM))), 1945 VERR_WRONG_ORDER); 1946 1941 1947 if (iRegion >= VBOX_PCI_NUM_REGIONS) 1942 1948 { … … 1984 1990 return VERR_INVALID_PARAMETER; 1985 1991 } 1986 if (!pfnCallback) 1987 { 1988 Assert(pfnCallback); 1989 LogFlow(("pdmR3DevHlp_PCIIORegionRegister: caller='%s'/%d: returns %Rrc (callback)\n", pDevIns->pReg->szName, pDevIns->iInstance, VERR_INVALID_PARAMETER)); 1990 return VERR_INVALID_PARAMETER; 1991 } 1992 AssertRelease(VMR3GetState(pVM) != VMSTATE_RUNNING); 1992 1993 AssertMsgReturn( pfnCallback 1994 || ( hHandle != UINT64_MAX 1995 && (fFlags & PDMPCIDEV_IORGN_F_HANDLE_MASK) != PDMPCIDEV_IORGN_F_NO_HANDLE), 1996 ("caller='%s'/%d: fFlags=%#x hHandle=%#RX64\n", pDevIns->pReg->szName, pDevIns->iInstance, fFlags, hHandle), 1997 VERR_INVALID_PARAMETER); 1998 1999 AssertMsgReturn(!(fFlags & ~PDMPCIDEV_IORGN_F_VALID_MASK), ("fFlags=%#x\n", fFlags), VERR_INVALID_FLAGS); 2000 int rc; 2001 switch (fFlags & PDMPCIDEV_IORGN_F_HANDLE_MASK) 2002 { 2003 case PDMPCIDEV_IORGN_F_NO_HANDLE: 2004 break; 2005 case PDMPCIDEV_IORGN_F_IOPORT_HANDLE: 2006 AssertReturn(enmType == PCI_ADDRESS_SPACE_IO, VERR_INVALID_FLAGS); 2007 rc = IOMR3IoPortValidateHandle(pVM, pDevIns, (IOMIOPORTHANDLE)hHandle); 2008 AssertRCReturn(rc, rc); 2009 break; 2010 case PDMPCIDEV_IORGN_F_MMIO_HANDLE: 2011 AssertReturn( (enmType & ~PCI_ADDRESS_SPACE_BAR64) == PCI_ADDRESS_SPACE_MEM 2012 || (enmType & ~PCI_ADDRESS_SPACE_BAR64) == PCI_ADDRESS_SPACE_MEM_PREFETCH, 2013 VERR_INVALID_FLAGS); 2014 rc = IOMR3MmioValidateHandle(pVM, pDevIns, (IOMMMIOHANDLE)hHandle); 2015 AssertRCReturn(rc, rc); 2016 break; 2017 case PDMPCIDEV_IORGN_F_MMIO2_HANDLE: 2018 AssertReturn( (enmType & ~PCI_ADDRESS_SPACE_BAR64) == PCI_ADDRESS_SPACE_MEM 2019 || (enmType & ~PCI_ADDRESS_SPACE_BAR64) == PCI_ADDRESS_SPACE_MEM_PREFETCH, 2020 VERR_INVALID_FLAGS); 2021 AssertFailedReturn(VERR_NOT_SUPPORTED); 2022 break; 2023 default: 2024 AssertFailedReturn(VERR_IPE_NOT_REACHED_DEFAULT_CASE); 2025 break; 2026 } 1993 2027 1994 2028 /* … … 2017 2051 2018 2052 pdmLock(pVM); 2019 int rc = pBus->pfnIORegionRegister(pBus->pDevInsR3, pPciDev, iRegion, cbRegion, enmType, pfnCallback);2053 rc = pBus->pfnIORegionRegister(pBus->pDevInsR3, pPciDev, iRegion, cbRegion, enmType, fFlags, hHandle, pfnCallback); 2020 2054 pdmUnlock(pVM); 2021 2055 -
trunk/src/VBox/VMM/include/IOMInternal.h
r81341 r81375 751 751 STAMCOUNTER StatRZMMIOCommitsToR3; 752 752 STAMCOUNTER StatRZMMIODevLockContention; 753 #if 0 754 STAMCOUNTER Stat RZMMIO1Byte;755 STAMCOUNTER Stat RZMMIO2Bytes;756 STAMCOUNTER Stat RZMMIO4Bytes;757 STAMCOUNTER Stat RZMMIO8Bytes;758 #endif 753 754 STAMCOUNTER StatMmioPfHandlerNew; 755 STAMCOUNTER StatMmioPhysHandlerNew; 756 STAMCOUNTER StatMmioHandlerNewR3; 757 STAMCOUNTER StatMmioHandlerNewR0; 758 759 759 STAMCOUNTER StatR3MMIOHandler; 760 760 -
trunk/src/VBox/VMM/include/PDMInternal.h
r81031 r81375 727 727 DECLR3CALLBACKMEMBER(int, pfnRegisterMsi,(PPDMDEVINS pDevIns, PPDMPCIDEV pPciDev, PPDMMSIREG pMsiReg)); 728 728 /** @copydoc PDMPCIBUSREGR3::pfnIORegionRegisterR3 */ 729 DECLR3CALLBACKMEMBER(int, pfnIORegionRegister,(PPDMDEVINS pDevIns, PPDMPCIDEV pPciDev, int iRegion, RTGCPHYS cbRegion, 730 PCIADDRESSSPACE enmType, PFNPCIIOREGIONMAP pfnCallback)); 729 DECLR3CALLBACKMEMBER(int, pfnIORegionRegister,(PPDMDEVINS pDevIns, PPDMPCIDEV pPciDev, uint32_t iRegion, 730 RTGCPHYS cbRegion, PCIADDRESSSPACE enmType, uint32_t fFlags, 731 uint64_t hHandle, PFNPCIIOREGIONMAP pfnCallback)); 731 732 /** @copydoc PDMPCIBUSREGR3::pfnInterceptConfigAccesses */ 732 733 DECLR3CALLBACKMEMBER(void, pfnInterceptConfigAccesses,(PPDMDEVINS pDevIns, PPDMPCIDEV pPciDev,
Note:
See TracChangeset
for help on using the changeset viewer.