summaryrefslogtreecommitdiff
path: root/src/VBox/VMM/VMMR3/PDMDevHlp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/VBox/VMM/VMMR3/PDMDevHlp.cpp')
-rw-r--r--src/VBox/VMM/VMMR3/PDMDevHlp.cpp56
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,