HalpHsaCreateReservedDevice

INT64 __fastcall HalpHsaCreateReservedDevice(INT64 a1, INT64 a2){
  int v2; 
  __int16 v4; 
  INT64 v5; 
  INT64 v6; 
  unsigned int v7; 
  _QWORD *i; 
  __int64 v9; 
  INT64 v10; 
  INT64 v11; 
  INT64 result; 
  v2 = *(_DWORD *)(a2 + 20);
  v4 = a1;
  result = 0i64;
  if( (int)ExtEnvAllocateMemory(a1, (unsigned int)(24 * v2 + 32), &result) < 0 )
    return 0i64;
  v5 = result;
  memset(result, 0i64);
  *(_DWORD *)(v5 + 24) = *(_DWORD *)(a2 + 20);
  v7 = 0;
  for( i = *(_QWORD **)(a2 + 24); i != (_QWORD *)(a2 + 24); i = (_QWORD *)*i )
  {
    v9 = v7++;
    v6 = 3 * v9;
    *(_QWORD *)(v5 + 8 * v6 + 32) = i[2];
    *(_QWORD *)(v5 + 8 * v6 + 40) = i[3];
  }
  if( (int)ExtEnvAllocateMemory(v6, 0x18ui64, (INT64 *)v5) < 0 )
    return 0i64;
  v10 = *(_QWORD *)v5;
  *(_OWORD *)v10 = 0i64;
  *(_QWORD *)(v10 + 16) = 0i64;
  v11 = v5;
  **(_DWORD **)v5 = 1;
  *(_WORD *)(*(_QWORD *)v5 + 8i64) = v4;
  *(_WORD *)(*(_QWORD *)v5 + 14i64) = 0;
  *(_WORD *)(*(_QWORD *)v5 + 12i64) = *(_WORD *)(a2 + 16);
  return v11;
}

Referenced by:

HsaEnumerateIvmdDevices