Lines Matching refs:pRange

88  * @param   pRange              The range to write to.
93 static VBOXSTRICTRC iomMMIODoComplicatedWrite(PVM pVM, PIOMMMIORANGE pRange, RTGCPHYS GCPhys, void const *pvValue, unsigned cbValue)
95 AssertReturn( (pRange->fFlags & IOMMMIO_FLAGS_WRITE_MODE) != IOMMMIO_FLAGS_WRITE_PASSTHRU
96 && (pRange->fFlags & IOMMMIO_FLAGS_WRITE_MODE) <= IOMMMIO_FLAGS_WRITE_DWORD_QWORD_READ_MISSING,
100 bool const fReadMissing = (pRange->fFlags & IOMMMIO_FLAGS_WRITE_MODE) == IOMMMIO_FLAGS_WRITE_DWORD_READ_MISSING
101 || (pRange->fFlags & IOMMMIO_FLAGS_WRITE_MODE) == IOMMMIO_FLAGS_WRITE_DWORD_QWORD_READ_MISSING;
108 if (pRange->fFlags & IOMMMIO_FLAGS_DBGSTOP_ON_COMPLICATED_WRITE)
112 "Complicated write %#x byte at %RGp to %s\n", cbValue, GCPhys, R3STRING(pRange->pszDesc));
124 if ((pRange->fFlags & IOMMMIO_FLAGS_WRITE_MODE) == IOMMMIO_FLAGS_WRITE_ONLY_DWORD)
129 if ((pRange->fFlags & IOMMMIO_FLAGS_WRITE_MODE) == IOMMMIO_FLAGS_WRITE_ONLY_DWORD_QWORD)
151 int rc2 = pRange->CTX_SUFF(pfnReadCallback)(pRange->CTX_SUFF(pDevIns), pRange->CTX_SUFF(pvUser),
227 int rc2 = pRange->CTX_SUFF(pfnWriteCallback)(pRange->CTX_SUFF(pDevIns), pRange->CTX_SUFF(pvUser),
276 static int iomMMIODoWrite(PVM pVM, PVMCPU pVCpu, PIOMMMIORANGE pRange, RTGCPHYS GCPhysFault, const void *pvData, unsigned cb)
282 PIOMMMIOSTATS pStats = iomMmioGetStats(pVM, pVCpu, GCPhysFault, pRange);
293 if (RT_LIKELY(pRange->CTX_SUFF(pfnWriteCallback)))
296 || (pRange->fFlags & IOMMMIO_FLAGS_WRITE_MODE) == IOMMMIO_FLAGS_WRITE_PASSTHRU
297 || (cb == 8 && !(GCPhysFault & 7) && IOMMMIO_DOES_WRITE_MODE_ALLOW_QWORD(pRange->fFlags)) )
298 rc = pRange->CTX_SUFF(pfnWriteCallback)(pRange->CTX_SUFF(pDevIns), pRange->CTX_SUFF(pvUser),
301 rc = iomMMIODoComplicatedWrite(pVM, pRange, GCPhysFault, pvData, cb);
323 * @param pRange The range to read from.
328 static VBOXSTRICTRC iomMMIODoComplicatedRead(PVM pVM, PIOMMMIORANGE pRange, RTGCPHYS GCPhys, void *pvValue, unsigned cbValue)
330 AssertReturn( (pRange->fFlags & IOMMMIO_FLAGS_READ_MODE) == IOMMMIO_FLAGS_READ_DWORD
331 || (pRange->fFlags & IOMMMIO_FLAGS_READ_MODE) == IOMMMIO_FLAGS_READ_DWORD_QWORD,
341 if (pRange->fFlags & IOMMMIO_FLAGS_DBGSTOP_ON_COMPLICATED_READ)
345 "Complicated read %#x byte at %RGp to %s\n", cbValue, GCPhys, R3STRING(pRange->pszDesc));
363 int rc2 = pRange->CTX_SUFF(pfnReadCallback)(pRange->CTX_SUFF(pDevIns), pRange->CTX_SUFF(pvUser),
492 DECLINLINE(int) iomMMIODoRead(PVM pVM, PVMCPU pVCpu, PIOMMMIORANGE pRange, RTGCPHYS GCPhys, void *pvValue, unsigned cbValue)
498 PIOMMMIOSTATS pStats = iomMmioGetStats(pVM, pVCpu, GCPhys, pRange);
509 if (RT_LIKELY(pRange->CTX_SUFF(pfnReadCallback)))
513 || (pRange->fFlags & IOMMMIO_FLAGS_READ_MODE) == IOMMMIO_FLAGS_READ_PASSTHRU
516 && (pRange->fFlags & IOMMMIO_FLAGS_READ_MODE) == IOMMMIO_FLAGS_READ_DWORD_QWORD ) )
517 rc = pRange->CTX_SUFF(pfnReadCallback)(pRange->CTX_SUFF(pDevIns), pRange->CTX_SUFF(pvUser), GCPhys, pvValue, cbValue);
519 rc = iomMMIODoComplicatedRead(pVM, pRange, GCPhys, pvValue, cbValue);
580 * @param pRange Pointer MMIO range.
584 PIOMMMIORANGE pRange, RTGCPHYS GCPhysFault)
586 Assert(pRange->CTX_SUFF(pfnReadCallback) || !pRange->pfnReadCallbackR3);
596 int rc = iomMMIODoRead(pVM, pVCpu, pRange, GCPhysFault, &u64Data, cb);
641 * @param pRange Pointer MMIO range.
645 PIOMMMIORANGE pRange, RTGCPHYS GCPhysFault)
647 Assert(pRange->CTX_SUFF(pfnWriteCallback) || !pRange->pfnWriteCallbackR3);
658 int rc = iomMMIODoWrite(pVM, pVCpu, pRange, GCPhysFault, &u64Data, cb);
717 * @param pRange Pointer MMIO range.
720 static int iomInterpretMOVS(PVM pVM, bool fWriteAccess, PCPUMCTXCORE pRegFrame, RTGCPHYS GCPhysFault, PDISCPUSTATE pCpu, PIOMMMIORANGE pRange,
779 if (!pRange->CTX_SUFF(pfnWriteCallback))
809 rc = iomMMIODoWrite(pVM, pRange, Phys, &u32Data, cb);
838 if (!pRange->CTX_SUFF(pfnReadCallback))
866 iomMmioReleaseRange(pVM, pRange);
874 rc = iomMMIODoRead(pVM, pRange, Phys, &u32Data, cb);
887 iomMmioReleaseRange(pVM, pRange);
909 rc = iomMMIODoRead(pVM, pRange, Phys, &u32Data, cb);
978 * @param pRange Pointer MMIO range.
981 PDISCPUSTATE pCpu, PIOMMMIORANGE pRange)
1024 if ( pRange->CTX_SUFF(pfnFillCallback)
1034 rc = pRange->CTX_SUFF(pfnFillCallback)(pRange->CTX_SUFF(pDevIns), pRange->CTX_SUFF(pvUser), Phys,
1048 rc = pRange->CTX_SUFF(pfnFillCallback)(pRange->CTX_SUFF(pDevIns), pRange->CTX_SUFF(pvUser),
1066 Assert(pRange->CTX_SUFF(pfnWriteCallback) || !pRange->pfnWriteCallbackR3);
1072 rc = iomMMIODoWrite(pVM, pVCpu, pRange, Phys, &u64Data, cb);
1112 * @param pRange Pointer MMIO range.
1115 PIOMMMIORANGE pRange)
1117 Assert(pRange->CTX_SUFF(pfnReadCallback) || !pRange->pfnReadCallbackR3);
1135 int rc = iomMMIODoRead(pVM, pVCpu, pRange, GCPhysFault, &pRegFrame->rax, cb);
1165 * @param pRange Pointer MMIO range.
1168 PIOMMMIORANGE pRange)
1170 Assert(pRange->CTX_SUFF(pfnReadCallback) || !pRange->pfnReadCallbackR3);
1181 rc = iomMMIODoRead(pVM, pVCpu, pRange, GCPhysFault, &uData2, cb);
1184 rc = iomMMIODoRead(pVM, pVCpu, pRange, GCPhysFault, &uData1, cb);
1225 * @param pRange Pointer MMIO range.
1229 PIOMMMIORANGE pRange, PFNEMULATEPARAM3 pfnEmulate)
1258 Assert(pRange->CTX_SUFF(pfnReadCallback) || !pRange->pfnReadCallbackR3);
1260 rc = iomMMIODoRead(pVM, pVCpu, pRange, GCPhysFault, &uData2, cb);
1271 if ( (pRange->CTX_SUFF(pfnReadCallback) || !pRange->pfnReadCallbackR3)
1272 && (pRange->CTX_SUFF(pfnWriteCallback) || !pRange->pfnWriteCallbackR3))
1273 rc = iomMMIODoRead(pVM, pVCpu, pRange, GCPhysFault, &uData1, cb);
1292 rc = iomMMIODoWrite(pVM, pVCpu, pRange, GCPhysFault, &uData1, cb);
1326 * @param pRange Pointer MMIO range.
1329 PIOMMMIORANGE pRange)
1331 Assert(pRange->CTX_SUFF(pfnReadCallback) || !pRange->pfnReadCallbackR3);
1341 rc = iomMMIODoRead(pVM, pVCpu, pRange, GCPhysFault, &uData2, cb);
1346 rc = iomMMIODoRead(pVM, pVCpu, pRange, GCPhysFault, &uData1, cb);
1386 * @param pRange Pointer MMIO range.
1389 PIOMMMIORANGE pRange)
1391 Assert(pRange->CTX_SUFF(pfnReadCallback) || !pRange->pfnReadCallbackR3);
1406 int rc = iomMMIODoRead(pVM, pVCpu, pRange, GCPhysFault, &uData, cbData);
1431 * @param pRange Pointer MMIO range.
1434 PIOMMMIORANGE pRange)
1437 if ( (!pRange->CTX_SUFF(pfnReadCallback) && pRange->pfnReadCallbackR3)
1438 || (!pRange->CTX_SUFF(pfnWriteCallback) && pRange->pfnWriteCallbackR3))
1448 rc = iomMMIODoRead(pVM, pVCpu, pRange, GCPhysFault, &uData2, cb);
1452 rc = iomMMIODoWrite(pVM, pVCpu, pRange, GCPhysFault, &uData1, cb);
1469 rc = iomMMIODoRead(pVM, pVCpu, pRange, GCPhysFault, &uData1, cb);
1473 rc = iomMMIODoWrite(pVM, pVCpu, pRange, GCPhysFault, &uData2, cb);
1519 PIOMMMIORANGE pRange = (PIOMMMIORANGE)pvUser;
1520 Assert(pRange);
1521 Assert(pRange == iomMmioGetRange(pVM, pVCpu, GCPhysFault));
1522 iomMmioRetainRange(pRange);
1530 PIOMMMIOSTATS pStats = iomMmioGetStats(pVM, pVCpu, GCPhysFault, pRange);
1533 iomMmioReleaseRange(pVM, pRange);
1549 if (RT_UNLIKELY( ( !pRange->CTX_SUFF(pfnWriteCallback)
1550 || !pRange->CTX_SUFF(pfnReadCallback))
1552 ? pRange->pfnWriteCallbackR3 || pRange->pfnReadCallbackR3
1554 ? !pRange->CTX_SUFF(pfnWriteCallback) && pRange->pfnWriteCallbackR3
1555 : !pRange->CTX_SUFF(pfnReadCallback) && pRange->pfnReadCallbackR3
1567 iomMmioReleaseRange(pVM, pRange);
1575 PPDMDEVINS pDevIns = pRange->CTX_SUFF(pDevIns);
1579 iomMmioReleaseRange(pVM, pRange);
1592 iomMmioReleaseRange(pVM, pRange);
1606 rc = iomInterpretMOVxXWrite(pVM, pVCpu, pCtxCore, pDis, pRange, GCPhysFault);
1608 rc = iomInterpretMOVxXRead(pVM, pVCpu, pCtxCore, pDis, pRange, GCPhysFault);
1624 rc = iomInterpretMOVS(pVM, !!(uErrorCode & X86_TRAP_PF_RW), pCtxCore, GCPhysFault, pDis, pRange, &pStat);
1635 rc = iomInterpretSTOS(pVM, pVCpu, pCtxCore, GCPhysFault, pDis, pRange);
1643 rc = iomInterpretLODS(pVM, pVCpu, pCtxCore, GCPhysFault, pDis, pRange);
1650 rc = iomInterpretCMP(pVM, pVCpu, pCtxCore, GCPhysFault, pDis, pRange);
1656 rc = iomInterpretOrXorAnd(pVM, pVCpu, pCtxCore, GCPhysFault, pDis, pRange, EMEmulateAnd);
1662 rc = iomInterpretOrXorAnd(pVM, pVCpu, pCtxCore, GCPhysFault, pDis, pRange, EMEmulateOr);
1668 rc = iomInterpretOrXorAnd(pVM, pVCpu, pCtxCore, GCPhysFault, pDis, pRange, EMEmulateXor);
1675 rc = iomInterpretTEST(pVM, pVCpu, pCtxCore, GCPhysFault, pDis, pRange);
1682 rc = iomInterpretBT(pVM, pVCpu, pCtxCore, GCPhysFault, pDis, pRange);
1688 rc = iomInterpretXCHG(pVM, pVCpu, pCtxCore, GCPhysFault, pDis, pRange);
1726 iomMmioReleaseRange(pVM, pRange);
1769 PIOMMMIORANGE pRange = iomMmioGetRange(pVM, pVCpu, GCPhysFault);
1770 if (RT_UNLIKELY(!pRange))
1775 iomMmioRetainRange(pRange);
1778 VBOXSTRICTRC rcStrict = iomMMIOHandler(pVM, pVCpu, (uint32_t)uErrorCode, pCtxCore, GCPhysFault, pRange);
1780 iomMmioReleaseRange(pVM, pRange);
1803 PIOMMMIORANGE pRange = (PIOMMMIORANGE)pvUser;
1807 AssertPtr(pRange);
1815 Assert(pRange == iomMmioGetRange(pVM, pVCpu, GCPhysFault));
1820 iomMmioRetainRange(pRange);
1821 PPDMDEVINS pDevIns = pRange->CTX_SUFF(pDevIns);
1826 iomMmioReleaseRange(pVM, pRange);
1834 rc = iomMMIODoRead(pVM, pVCpu, pRange, GCPhysFault, pvBuf, (unsigned)cbBuf);
1836 rc = iomMMIODoWrite(pVM, pVCpu, pRange, GCPhysFault, pvBuf, (unsigned)cbBuf);
1839 iomMmioReleaseRange(pVM, pRange);
1873 PIOMMMIORANGE pRange = iomMmioGetRange(pVM, pVCpu, GCPhys);
1874 if (!pRange)
1880 iomMmioRetainRange(pRange);
1885 PIOMMMIOSTATS pStats = iomMmioGetStats(pVM, pVCpu, GCPhys, pRange);
1888 iomMmioReleaseRange(pVM, pRange);
1898 if (pRange->CTX_SUFF(pfnReadCallback))
1903 PPDMDEVINS pDevIns = pRange->CTX_SUFF(pDevIns);
1907 iomMmioReleaseRange(pVM, pRange);
1916 || (pRange->fFlags & IOMMMIO_FLAGS_READ_MODE) == IOMMMIO_FLAGS_READ_PASSTHRU
1918 rc = pRange->CTX_SUFF(pfnReadCallback)(pRange->CTX_SUFF(pDevIns), pRange->CTX_SUFF(pvUser), GCPhys,
1921 rc = iomMMIODoComplicatedRead(pVM, pRange, GCPhys, pu32Value, (unsigned)cbValue);
1928 iomMmioReleaseRange(pVM, pRange);
1938 iomMmioReleaseRange(pVM, pRange);
1945 iomMmioReleaseRange(pVM, pRange);
1952 iomMmioReleaseRange(pVM, pRange);
1958 if (pRange->pfnReadCallbackR3)
1961 iomMmioReleaseRange(pVM, pRange);
1973 iomMmioReleaseRange(pVM, pRange);
2005 PIOMMMIORANGE pRange = iomMmioGetRange(pVM, pVCpu, GCPhys);
2006 if (!pRange)
2012 iomMmioRetainRange(pRange);
2017 PIOMMMIOSTATS pStats = iomMmioGetStats(pVM, pVCpu, GCPhys, pRange);
2020 iomMmioReleaseRange(pVM, pRange);
2030 if (pRange->CTX_SUFF(pfnWriteCallback))
2035 PPDMDEVINS pDevIns = pRange->CTX_SUFF(pDevIns);
2039 iomMmioReleaseRange(pVM, pRange);
2048 || (pRange->fFlags & IOMMMIO_FLAGS_WRITE_MODE) == IOMMMIO_FLAGS_WRITE_PASSTHRU
2050 rc = pRange->CTX_SUFF(pfnWriteCallback)(pRange->CTX_SUFF(pDevIns), pRange->CTX_SUFF(pvUser),
2053 rc = iomMMIODoComplicatedWrite(pVM, pRange, GCPhys, &u32Value, (unsigned)cbValue);
2061 iomMmioReleaseRange(pVM, pRange);
2066 if (pRange->pfnWriteCallbackR3)
2069 iomMmioReleaseRange(pVM, pRange);
2080 iomMmioReleaseRange(pVM, pRange);
2457 PIOMMMIORANGE pRange = iomMmioGetRange(pVM, pVCpu, GCPhys);
2458 AssertMsgReturn(pRange,
2461 Assert((pRange->GCPhys & PAGE_OFFSET_MASK) == 0);
2462 Assert((pRange->Core.KeyLast & PAGE_OFFSET_MASK) == PAGE_OFFSET_MASK);
2470 rc = PGMHandlerPhysicalPageAlias(pVM, pRange->GCPhys, GCPhys, GCPhysRemapped);
2524 PIOMMMIORANGE pRange = iomMMIOGetRangeUnsafe(pVM, pVCpu, GCPhys);
2525 AssertMsgReturn(pRange,
2527 Assert((pRange->GCPhys & PAGE_OFFSET_MASK) == 0);
2528 Assert((pRange->Core.KeyLast & PAGE_OFFSET_MASK) == PAGE_OFFSET_MASK);
2578 PIOMMMIORANGE pRange = iomMMIOGetRangeUnsafe(pVM, pVCpu, GCPhys);
2579 AssertMsgReturn(pRange,
2581 Assert((pRange->GCPhys & PAGE_OFFSET_MASK) == 0);
2582 Assert((pRange->Core.KeyLast & PAGE_OFFSET_MASK) == PAGE_OFFSET_MASK);
2597 uint32_t cb = pRange->cb;
2598 GCPhys = pRange->GCPhys;