Lines Matching defs:iMemMap

6409  * @param   iMemMap         The index of the buffer to commit.
6411 static VBOXSTRICTRC iemMemBounceBufferCommitAndUnmap(PIEMCPU pIemCpu, unsigned iMemMap)
6413 Assert(pIemCpu->aMemMappings[iMemMap].fAccess & IEM_ACCESS_BOUNCE_BUFFERED);
6414 Assert(pIemCpu->aMemMappings[iMemMap].fAccess & IEM_ACCESS_TYPE_WRITE);
6421 if ( !pIemCpu->aMemBbMappings[iMemMap].fUnassigned
6424 uint16_t const cbFirst = pIemCpu->aMemBbMappings[iMemMap].cbFirst;
6425 uint16_t const cbSecond = pIemCpu->aMemBbMappings[iMemMap].cbSecond;
6426 uint8_t const *pbBuf = &pIemCpu->aBounceBuffers[iMemMap].ab[0];
6430 pIemCpu->aMemBbMappings[iMemMap].GCPhysFirst,
6435 pIemCpu->aMemBbMappings[iMemMap].GCPhysSecond,
6442 pIemCpu->aMemBbMappings[iMemMap].GCPhysFirst,
6447 pIemCpu->aMemBbMappings[iMemMap].GCPhysSecond,
6456 pIemCpu->aMemBbMappings[iMemMap].GCPhysFirst, cbFirst,
6457 pIemCpu->aMemBbMappings[iMemMap].GCPhysSecond, cbSecond, rc));
6474 pEvtRec->u.RamWrite.GCPhys = pIemCpu->aMemBbMappings[iMemMap].GCPhysFirst;
6475 pEvtRec->u.RamWrite.cb = pIemCpu->aMemBbMappings[iMemMap].cbFirst;
6476 memcpy(pEvtRec->u.RamWrite.ab, &pIemCpu->aBounceBuffers[iMemMap].ab[0], pIemCpu->aMemBbMappings[iMemMap].cbFirst);
6481 if (pIemCpu->aMemBbMappings[iMemMap].cbSecond)
6487 pEvtRec->u.RamWrite.GCPhys = pIemCpu->aMemBbMappings[iMemMap].GCPhysSecond;
6488 pEvtRec->u.RamWrite.cb = pIemCpu->aMemBbMappings[iMemMap].cbSecond;
6490 &pIemCpu->aBounceBuffers[iMemMap].ab[pIemCpu->aMemBbMappings[iMemMap].cbFirst],
6491 pIemCpu->aMemBbMappings[iMemMap].cbSecond);
6501 Log(("IEM Wrote %RGp: %.*Rhxs\n", pIemCpu->aMemBbMappings[iMemMap].GCPhysFirst,
6502 RT_MAX(RT_MIN(pIemCpu->aMemBbMappings[iMemMap].cbFirst, 64), 1), &pIemCpu->aBounceBuffers[iMemMap].ab[0]));
6503 if (pIemCpu->aMemBbMappings[iMemMap].cbSecond)
6504 Log(("IEM Wrote %RGp: %.*Rhxs [2nd page]\n", pIemCpu->aMemBbMappings[iMemMap].GCPhysSecond,
6505 RT_MIN(pIemCpu->aMemBbMappings[iMemMap].cbSecond, 64),
6506 &pIemCpu->aBounceBuffers[iMemMap].ab[pIemCpu->aMemBbMappings[iMemMap].cbFirst]));
6508 size_t cbWrote = pIemCpu->aMemBbMappings[iMemMap].cbFirst + pIemCpu->aMemBbMappings[iMemMap].cbSecond;
6510 memcpy(g_abIemWrote, &pIemCpu->aBounceBuffers[iMemMap].ab[0], RT_MIN(cbWrote, sizeof(g_abIemWrote)));
6517 pIemCpu->aMemMappings[iMemMap].fAccess = IEM_ACCESS_INVALID;
6527 static VBOXSTRICTRC iemMemBounceBufferMapCrossPage(PIEMCPU pIemCpu, int iMemMap, void **ppvMem,
6568 uint8_t *pbBuf = &pIemCpu->aBounceBuffers[iMemMap].ab[0];
6643 if (cbMem < sizeof(pIemCpu->aBounceBuffers[iMemMap].ab))
6644 memset(pbBuf + cbMem, 0xaa, sizeof(pIemCpu->aBounceBuffers[iMemMap].ab) - cbMem);
6650 pIemCpu->aMemBbMappings[iMemMap].GCPhysFirst = GCPhysFirst;
6651 pIemCpu->aMemBbMappings[iMemMap].GCPhysSecond = GCPhysSecond;
6652 pIemCpu->aMemBbMappings[iMemMap].cbFirst = (uint16_t)cbFirstPage;
6653 pIemCpu->aMemBbMappings[iMemMap].cbSecond = (uint16_t)cbSecondPage;
6654 pIemCpu->aMemBbMappings[iMemMap].fUnassigned = false;
6655 pIemCpu->aMemMappings[iMemMap].pv = pbBuf;
6656 pIemCpu->aMemMappings[iMemMap].fAccess = fAccess | IEM_ACCESS_BOUNCE_BUFFERED;
6657 pIemCpu->iNextMapping = iMemMap + 1;
6669 static VBOXSTRICTRC iemMemBounceBufferMapPhys(PIEMCPU pIemCpu, unsigned iMemMap, void **ppvMem, size_t cbMem,
6688 uint8_t *pbBuf = &pIemCpu->aBounceBuffers[iMemMap].ab[0];
6733 if (cbMem < sizeof(pIemCpu->aBounceBuffers[iMemMap].ab))
6734 memset(pbBuf + cbMem, 0xaa, sizeof(pIemCpu->aBounceBuffers[iMemMap].ab) - cbMem);
6740 pIemCpu->aMemBbMappings[iMemMap].GCPhysFirst = GCPhysFirst;
6741 pIemCpu->aMemBbMappings[iMemMap].GCPhysSecond = NIL_RTGCPHYS;
6742 pIemCpu->aMemBbMappings[iMemMap].cbFirst = (uint16_t)cbMem;
6743 pIemCpu->aMemBbMappings[iMemMap].cbSecond = 0;
6744 pIemCpu->aMemBbMappings[iMemMap].fUnassigned = rcMap == VERR_PGM_PHYS_TLB_UNASSIGNED;
6745 pIemCpu->aMemMappings[iMemMap].pv = pbBuf;
6746 pIemCpu->aMemMappings[iMemMap].fAccess = fAccess | IEM_ACCESS_BOUNCE_BUFFERED;
6747 pIemCpu->iNextMapping = iMemMap + 1;
6794 unsigned iMemMap = pIemCpu->iNextMapping;
6795 if ( iMemMap >= RT_ELEMENTS(pIemCpu->aMemMappings)
6796 || pIemCpu->aMemMappings[iMemMap].fAccess != IEM_ACCESS_INVALID)
6798 iMemMap = iemMemMapFindFree(pIemCpu);
6799 AssertReturn(iMemMap < RT_ELEMENTS(pIemCpu->aMemMappings), VERR_INTERNAL_ERROR_3);
6811 return iemMemBounceBufferMapCrossPage(pIemCpu, iMemMap, ppvMem, cbMem, GCPtrMem, fAccess);
6819 rcStrict = iemMemPageMap(pIemCpu, GCPhysFirst, fAccess, &pvMem, &pIemCpu->aMemMappingLocks[iMemMap].Lock);
6821 return iemMemBounceBufferMapPhys(pIemCpu, iMemMap, ppvMem, cbMem, GCPhysFirst, fAccess, rcStrict);
6826 pIemCpu->aMemMappings[iMemMap].pv = pvMem;
6827 pIemCpu->aMemMappings[iMemMap].fAccess = fAccess;
6828 pIemCpu->iNextMapping = iMemMap + 1;
6847 int iMemMap = iemMapLookup(pIemCpu, pvMem, fAccess);
6848 AssertReturn(iMemMap >= 0, iMemMap);
6851 if (pIemCpu->aMemMappings[iMemMap].fAccess & IEM_ACCESS_BOUNCE_BUFFERED)
6853 if (pIemCpu->aMemMappings[iMemMap].fAccess & IEM_ACCESS_TYPE_WRITE)
6854 return iemMemBounceBufferCommitAndUnmap(pIemCpu, iMemMap);
6858 PGMPhysReleasePageMappingLock(IEMCPU_TO_VM(pIemCpu), &pIemCpu->aMemMappingLocks[iMemMap].Lock);
6861 pIemCpu->aMemMappings[iMemMap].fAccess = IEM_ACCESS_INVALID;
6880 uint32_t iMemMap = RT_ELEMENTS(pIemCpu->aMemMappings);
6881 while (iMemMap-- > 0)
6883 uint32_t fAccess = pIemCpu->aMemMappings[iMemMap].fAccess;
6886 pIemCpu->aMemMappings[iMemMap].fAccess = IEM_ACCESS_INVALID;
6888 PGMPhysReleasePageMappingLock(IEMCPU_TO_VM(pIemCpu), &pIemCpu->aMemMappingLocks[iMemMap].Lock);