HalpDmaAllocateAndPremapLa

NTSTATUS __stdcall HalpDmaAllocateAndPremapLa(INT64 a1, UINT64 a2, INT64 a3, UINT64 *a4){
  INT64 v5; 
  unsigned int v7; 
  char v8; 
  int v9; 
  NTSTATUS result; 

  *a4 = -1i64;
  v5 = *(_QWORD *)(a1 + 504);
  v7 = a2;
  v8 = a3;
  v9 = HalpDomainLaAllocate(v5, (PDUMPWRITER_FILL_HEADERS *)(unsigned int)a2, a3, 0i64, 0i64, (INT64)a4);
  if( v9 >= 0 )
  {
    result = HalpIommuDomainMapLogicalRange(*(_QWORD *)(v5 + 40), 0i64, 0i64, v7, *a4);
    v9 = result;
    if( result >= 0 )
      return result;
    HalpDomainLaDelete(v5, *a4);
    *a4 = -1i64;
  }
  if( HalpDmaUseEmergencyLogicalAddressResources(a1, (_QWORD *)(a1 + 592), v8) )
    return 0;
  return v9;
}

Referenced by:

HalpAllocateDmaResourcesInternal