diff options
Diffstat (limited to 'src/VBox/VMM/VMMR3/PDMDevHlp.cpp')
-rw-r--r-- | src/VBox/VMM/VMMR3/PDMDevHlp.cpp | 56 |
1 files changed, 23 insertions, 33 deletions
diff --git a/src/VBox/VMM/VMMR3/PDMDevHlp.cpp b/src/VBox/VMM/VMMR3/PDMDevHlp.cpp index 864688c35a3..d11f9d1ca77 100644 --- a/src/VBox/VMM/VMMR3/PDMDevHlp.cpp +++ b/src/VBox/VMM/VMMR3/PDMDevHlp.cpp @@ -89,13 +89,8 @@ static DECLCALLBACK(int) pdmR3DevHlp_IoPortCreateEx(PPDMDEVINS pDevIns, RTIOPORT VM_ASSERT_EMT0_RETURN(pVM, VERR_VM_THREAD_NOT_EMT); VM_ASSERT_STATE_RETURN(pVM, VMSTATE_CREATING, VERR_VM_INVALID_VM_STATE); -#if defined(VBOX_VMM_TARGET_ARMV8) - int rc = VERR_NOT_SUPPORTED; - AssertReleaseFailed(); -#else int rc = IOMR3IoPortCreate(pVM, pDevIns, cPorts, fFlags, pPciDev, iPciRegion, pfnOut, pfnIn, pfnOutStr, pfnInStr, pvUser, pszDesc, paExtDescs, phIoPorts); -#endif LogFlow(("pdmR3DevHlp_IoPortCreateEx: caller='%s'/%d: returns %Rrc (*phIoPorts=%#x)\n", pDevIns->pReg->szName, pDevIns->iInstance, rc, *phIoPorts)); @@ -111,12 +106,7 @@ static DECLCALLBACK(int) pdmR3DevHlp_IoPortMap(PPDMDEVINS pDevIns, IOMIOPORTHAND PVM pVM = pDevIns->Internal.s.pVMR3; VM_ASSERT_EMT_RETURN(pVM, VERR_VM_THREAD_NOT_EMT); -#if defined(VBOX_VMM_TARGET_ARMV8) - int rc = VERR_NOT_SUPPORTED; - AssertReleaseFailed(); -#else int rc = IOMR3IoPortMap(pVM, pDevIns, hIoPorts, Port); -#endif LogFlow(("pdmR3DevHlp_IoPortMap: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc)); return rc; @@ -131,12 +121,7 @@ static DECLCALLBACK(int) pdmR3DevHlp_IoPortUnmap(PPDMDEVINS pDevIns, IOMIOPORTHA PVM pVM = pDevIns->Internal.s.pVMR3; VM_ASSERT_EMT_RETURN(pVM, VERR_VM_THREAD_NOT_EMT); -#if defined(VBOX_VMM_TARGET_ARMV8) - int rc = VERR_NOT_SUPPORTED; - AssertReleaseFailed(); -#else int rc = IOMR3IoPortUnmap(pVM, pDevIns, hIoPorts); -#endif LogFlow(("pdmR3DevHlp_IoPortMap: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc)); return rc; @@ -149,18 +134,32 @@ static DECLCALLBACK(uint32_t) pdmR3DevHlp_IoPortGetMappingAddress(PPDMDEVINS pDe PDMDEV_ASSERT_DEVINS(pDevIns); LogFlow(("pdmR3DevHlp_IoPortGetMappingAddress: caller='%s'/%d: hIoPorts=%#x\n", pDevIns->pReg->szName, pDevIns->iInstance, hIoPorts)); -#if defined(VBOX_VMM_TARGET_ARMV8) - uint32_t uAddress = UINT32_MAX; - AssertReleaseFailed(); -#else uint32_t uAddress = IOMR3IoPortGetMappingAddress(pDevIns->Internal.s.pVMR3, pDevIns, hIoPorts); -#endif LogFlow(("pdmR3DevHlp_IoPortGetMappingAddress: caller='%s'/%d: returns %#RX32\n", pDevIns->pReg->szName, pDevIns->iInstance, uAddress)); return uAddress; } +/** @interface_method_impl{PDMDEVHLPR3,pfnIoPortRead} */ +static DECLCALLBACK(VBOXSTRICTRC) pdmR3DevHlp_IoPortRead(PPDMDEVINS pDevIns, RTIOPORT Port, uint32_t *pu32Value, size_t cbValue) +{ + PDMDEV_ASSERT_DEVINS(pDevIns); + LogFlow(("pdmR3DevHlp_IoPortRead: caller='%s'/%d:\n", pDevIns->pReg->szName, pDevIns->iInstance)); + PVM pVM = pDevIns->Internal.s.pVMR3; + VM_ASSERT_EMT_RETURN(pVM, VERR_VM_THREAD_NOT_EMT); + + PVMCPU pVCpu = VMMGetCpu(pVM); + AssertPtrReturn(pVCpu, VERR_ACCESS_DENIED); + + VBOXSTRICTRC rcStrict = IOMIOPortRead(pVM, pVCpu, Port, pu32Value, cbValue); + + LogFlow(("pdmR3DevHlp_IoPortRead: caller='%s'/%d: returns %Rrc\n", + pDevIns->pReg->szName, pDevIns->iInstance, VBOXSTRICTRC_VAL(rcStrict))); + return rcStrict; +} + + /** @interface_method_impl{PDMDEVHLPR3,pfnIoPortWrite} */ static DECLCALLBACK(VBOXSTRICTRC) pdmR3DevHlp_IoPortWrite(PPDMDEVINS pDevIns, RTIOPORT Port, uint32_t u32Value, size_t cbValue) { @@ -169,16 +168,10 @@ static DECLCALLBACK(VBOXSTRICTRC) pdmR3DevHlp_IoPortWrite(PPDMDEVINS pDevIns, RT PVM pVM = pDevIns->Internal.s.pVMR3; VM_ASSERT_EMT_RETURN(pVM, VERR_VM_THREAD_NOT_EMT); -#if defined(VBOX_VMM_TARGET_ARMV8) - RT_NOREF(Port, u32Value, cbValue); - VBOXSTRICTRC rcStrict = VERR_NOT_SUPPORTED; - AssertReleaseFailed(); -#else PVMCPU pVCpu = VMMGetCpu(pVM); AssertPtrReturn(pVCpu, VERR_ACCESS_DENIED); VBOXSTRICTRC rcStrict = IOMIOPortWrite(pVM, pVCpu, Port, u32Value, cbValue); -#endif LogFlow(("pdmR3DevHlp_IoPortWrite: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, VBOXSTRICTRC_VAL(rcStrict))); @@ -2119,14 +2112,8 @@ static DECLCALLBACK(int) pdmR3DevHlp_PCIIORegionRegister(PPDMDEVINS pDevIns, PPD break; case PDMPCIDEV_IORGN_F_IOPORT_HANDLE: AssertReturn(enmType == PCI_ADDRESS_SPACE_IO, VERR_INVALID_FLAGS); -#if defined(VBOX_VMM_TARGET_ARMV8) - rc = VERR_NOT_SUPPORTED; - AssertReleaseFailed(); - AssertRCReturn(rc, rc); -#else rc = IOMR3IoPortValidateHandle(pVM, pDevIns, (IOMIOPORTHANDLE)hHandle); AssertRCReturn(rc, rc); -#endif break; case PDMPCIDEV_IORGN_F_MMIO_HANDLE: AssertReturn( (enmType & ~PCI_ADDRESS_SPACE_BAR64) == PCI_ADDRESS_SPACE_MEM @@ -4872,6 +4859,7 @@ const PDMDEVHLPR3 g_pdmR3DevHlpTrusted = pdmR3DevHlp_IoPortMap, pdmR3DevHlp_IoPortUnmap, pdmR3DevHlp_IoPortGetMappingAddress, + pdmR3DevHlp_IoPortRead, pdmR3DevHlp_IoPortWrite, pdmR3DevHlp_MmioCreateEx, pdmR3DevHlp_MmioMap, @@ -5269,7 +5257,8 @@ const PDMDEVHLPR3 g_pdmR3DevHlpTracing = pdmR3DevHlpTracing_IoPortMap, pdmR3DevHlpTracing_IoPortUnmap, pdmR3DevHlp_IoPortGetMappingAddress, - pdmR3DevHlp_IoPortWrite, + pdmR3DevHlp_IoPortRead, /** @todo Needs tracing variants for ARM now. */ + pdmR3DevHlp_IoPortWrite, /** @todo Needs tracing variants for ARM now. */ pdmR3DevHlpTracing_MmioCreateEx, pdmR3DevHlpTracing_MmioMap, pdmR3DevHlpTracing_MmioUnmap, @@ -5986,6 +5975,7 @@ const PDMDEVHLPR3 g_pdmR3DevHlpUnTrusted = pdmR3DevHlp_IoPortMap, pdmR3DevHlp_IoPortUnmap, pdmR3DevHlp_IoPortGetMappingAddress, + pdmR3DevHlp_IoPortRead, pdmR3DevHlp_IoPortWrite, pdmR3DevHlp_MmioCreateEx, pdmR3DevHlp_MmioMap, |