HalpDmaControllerInitializeController

NTSTATUS __stdcall HalpDmaControllerInitializeController(INT64 a1){
  NTSTATUS result; 
  unsigned int v3; 
  __int64 v4; 
  __int64 i; 
  __int64 v6; 
  __int64 v7; 
  VOID *ContiguousNodeMemory; 
  __int64 v9; 
  __int64 v10; 
  UINT64 Protect; 
  UINT64 PreferredNode; 

  result = (*(__int64(__fastcall **)(_QWORD))(a1 + 80))(*(_QWORD *)(a1 + 64));
  v3 = *(_DWORD *)(a1 + 76);
  if( v3 < 0x40 )
    v4 = (1i64 << v3) - 1;
  else
    v4 = -1i64;
  for( i = 0i64; (unsigned int)i < *(_DWORD *)(a1 + 44); i = (unsigned int)(i + 1) )
  {
    v6 = *(_QWORD *)(a1 + 56);
    v7 = 160 * i;
    result = *(_DWORD *)(v6 + 160 * i + 120);
    if( result )
    {
      LODWORD(PreferredNode) = 0x80000000;
      LODWORD(Protect) = 516;
      ContiguousNodeMemory = MmAllocateContiguousNodeMemory(
                               (unsigned int)result,
                               0i64,
                               (_LARGE_INTEGER)v4,
                               0i64,
                               Protect,
                               PreferredNode);
      *(_QWORD *)(v6 + v7 + 128) = ContiguousNodeMemory;
      LODWORD(v9) = MmGetPhysicalAddress((UINT64)ContiguousNodeMemory);
      v10 = *(_QWORD *)(v6 + v7 + 128);
      *(_QWORD *)(v6 + v7 + 136) = v9;
      result = (*(__int64(__fastcall **)(_QWORD, _QWORD, __int64, __int64))(a1 + 144))(
                 *(_QWORD *)(a1 + 64),
                 (unsigned int)i,
                 v10,
                 v9);
    }
  }
  return result;
}

Referenced by:

HalpDmaInitializeControllers