IoMapTransfer
PHYSICAL_ADDRESS __stdcall IoMapTransfer(
PDMA_ADAPTER DmaAdapter,
PMDL Mdl,
PVOID MapRegisterBase,
PVOID CurrentVa,
PULONG Length,
BOOLEAN WriteToDevice){
bool v6;
PHYSICAL_ADDRESS result;
int v10;
ULONG v11;
v6 = *(_DWORD *)&DmaAdapter[32].Version == 2;
*((_BYTE *)&DmaAdapter[32].Size + 2) = 1;
if( v6 )
{
v11 = *(_DWORD *)(&DmaAdapter[15].Size + 1);
if( *Length > v11 )
*Length = v11;
}
result.QuadPart = IoMapTransferInternal(
(__int64)DmaAdapter,
(__int64)Mdl,
(__int64)MapRegisterBase,
(__int64)CurrentVa,
Length,
WriteToDevice,
0);
v10 = result.LowPart & 0xFFF;
if( *(_DWORD *)&DmaAdapter[32].Version == 2 )
{
if( !*((_BYTE *)MapRegisterBase + 64) )
{
HalpIommuDomainMapLogicalRange(
(INT64)DmaAdapter[31].DmaOperations->FlushAdapterBuffers,
3i64,
result.QuadPart,
v10 + *Length,
*((_QWORD *)MapRegisterBase + 5));
*((_QWORD *)MapRegisterBase + 4) += v10 + *Length;
}
result = *(PHYSICAL_ADDRESS *)((char *)MapRegisterBase + 40);
*((_QWORD *)MapRegisterBase + 5) = result.QuadPart + *Length;
}
return result;
}Referenced by:
HalpAllocateAdapterCallbackV2