HsaCreateDevice

INT64 __fastcall HsaCreateDevice(INT64 a1, INT64 *a2, INT64 a3, INT64 *a4){
  INT64 *v5; 
  int AcpiDeviceMapping; 
  INT64 v8; 
  int v9; 
  INT64 v10; 
  INT64 v11; 
  _DWORD **v12; 
  INT64 *v13; 
  UINT64 v14; 
  INT64 v16[2]; 
  __int64 v17; 
  INT64 v18; 
  v18 = 0i64;
  *(_OWORD *)v16 = 0i64;
  v17 = 0i64;
  v5 = a2;
  if( *(_DWORD *)a2 != 1 )
  {
    if( *(_DWORD *)a2 != 2 )
      return(unsigned int)-1073741275;
    AcpiDeviceMapping = HsaQueryAcpiDeviceMapping(a1, (INT64)a2, (INT64)v16);
    if( AcpiDeviceMapping < 0 )
      return(unsigned int)AcpiDeviceMapping;
    v5 = v16;
  }
  if( *(_DWORD *)(a1 + 160) != *((unsigned __int16 *)v5 + 4) )
    return(unsigned int)-1073741275;
  v8 = *((unsigned __int16 *)v5 + 6);
  if( !_bittest(*(const signed __int32 **)(a1 + 192), v8) )
    return(unsigned int)-1073741275;
  v9 = ExtEnvAllocateMemory(v8, 0x28ui64, &v18);
  v11 = v18;
  AcpiDeviceMapping = v9;
  if( v9 < 0
    || (v12 = (_DWORD **)(v18 + 32),
        v13 = (INT64 *)(v18 + 32),
        *(_OWORD *)v18 = 0i64,
        *(_OWORD *)(v11 + 16) = 0i64,
        *(_QWORD *)(v11 + 32) = 0i64,
        AcpiDeviceMapping = ExtEnvAllocateMemory(v10, 4ui64, v13),
        AcpiDeviceMapping < 0) )
  {
    if( v11 )
    {
      v14 = *(_QWORD *)(v11 + 32);
      if( v14 )
        ExtEnvFreeMemory(v10, v14);
      ExtEnvFreeMemory(v10, v11);
    }
  }
  else
  {
    AcpiDeviceMapping = 0;
    **v12 = 0;
    **v12 = *((unsigned __int16 *)v5 + 6);
    *a4 = v11;
  }
  return(unsigned int)AcpiDeviceMapping;
}

Referenced by:

No references.