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.