IoMapTransfer
PHYSICAL_ADDRESS __stdcall IoMapTransfer(
PDMA_ADAPTER DmaAdapter,
PMDL Mdl,
PVOID MapRegisterBase,
PVOID CurrentVa,
PULONG Length,
BOOL WriteToDevice){
bool v6;
PHYSICAL_ADDRESS result;
int v10;
unsigned int v11;
UINT64 v12;
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;
}
LOBYTE(v12) = WriteToDevice;
result = IoMapTransferInternal((_ADAPTER_OBJECT *)DmaAdapter, Mdl, MapRegisterBase, CurrentVa, (UINT8)Length, v12, 0);
v10 = result.anonymous_0.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