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