HalpHsaCreateReservedDevice

INT64 *__fastcall HalpHsaCreateReservedDevice(INT64 a1, __int64 a2){
  int v2; 
  __int16 v4; 
  unsigned int v5; 
  size_t v6; 
  INT64 *v7; 
  INT64 v8; 
  unsigned int v9; 
  _QWORD *i; 
  __int64 v11; 
  INT64 v12; 
  INT64 *result; 
  VOID *v14; 

  v2 = *(_DWORD *)(a2 + 20);
  v4 = a1;
  v14 = 0i64;
  v5 = 24 * v2 + 32;
  if( ExtEnvAllocateMemory(a1, v5, (INT64 *)&v14) < 0 )
    return 0i64;
  v6 = v5;
  v7 = (INT64 *)v14;
  memset(v14, 0i64, v6);
  *((_DWORD *)v7 + 6) = *(_DWORD *)(a2 + 20);
  v9 = 0;
  for( i = *(_QWORD **)(a2 + 24); i != (_QWORD *)(a2 + 24); i = (_QWORD *)*i )
  {
    v11 = v9++;
    v8 = 3 * v11;
    v7[v8 + 4] = i[2];
    v7[v8 + 5] = i[3];
  }
  if( ExtEnvAllocateMemory(v8, 0x18ui64, v7) < 0 )
    return 0i64;
  v12 = *v7;
  *(_OWORD *)v12 = 0i64;
  *(_QWORD *)(v12 + 16) = 0i64;
  result = v7;
  *(_DWORD *)*v7 = 1;
  *(_WORD *)(*v7 + 8) = v4;
  *(_WORD *)(*v7 + 14) = 0;
  *(_WORD *)(*v7 + 12) = *(_WORD *)(a2 + 16);
  return result;
}

Referenced by:

HsaEnumerateIvmdDevices