HsaUpdateDeviceTableEntry
INT64 __fastcall HsaUpdateDeviceTableEntry(
UINT64 *a1,
UINT64 a2,
INT64 a3,
CHAR a4,
INT64 a5,
UINT8 *a6,
INT64 a7,
INT64 a8,
INT64 a9,
INT64 a10){
UINT64 v11;
__int128 v12;
CHAR v13;
unsigned __int64 v14;
UINT64 v15;
int v16;
int v17;
__int16 BlockedDomain;
__int128 v19;
__int128 v20;
unsigned __int8 v21;
INT64 v23;
char v24;
INT64 v25;
UINT64 v26;
__int64 v27;
__int128 v28;
INT64 v29[2];
INT64 v30[2];
v11 = a1[3] + 32i64 * (unsigned int)a2;
LODWORD(v25) = a2;
v24 = 0;
v27 = 0x10000i64;
v12 = *(_OWORD *)(v11 + 16);
*(_OWORD *)v29 = *(_OWORD *)v11;
*(_OWORD *)v30 = v12;
if( (v29[0] & 1) != 0 && !(_DWORD)a7 )
{
v27 = LOWORD(v29[1]);
v24 = 1;
}
v13 = 0;
v14 = 0i64;
if( a4 )
{
if( (v29[0] & 0x80000000000000i64) != 0 )
{
v13 = 1;
v14 = (v29[1] & 0xFFFF0000 | ((v29[1] & 0xFFFFF80000FFFFFFui64 | ((unsigned __int64)v29[0] >> 34) & 0x7000000) >> 11)) >> 13;
}
}
else if( a3 )
{
v13 = 1;
v14 = (unsigned __int64)MmGetPhysicalAddress(*(PVOID *)(a3 + 40)).QuadPart >> 12;
}
v15 = 0i64;
v26 = 0i64;
if( a5 )
{
v17 = *(_DWORD *)(a5 + 4);
if( v17 == 1 )
{
BlockedDomain = HsaGetBlockedDomain((INT64)a1, &v25, &v26);
v15 = v26;
LOWORD(v16) = BlockedDomain;
}
else
{
v16 = *(_DWORD *)(a5 + 24);
if( v17 == 2 )
{
v15 = *(_QWORD *)(a5 + 16) >> 12;
goto LABEL_17;
}
}
}
else
{
LOWORD(v16) = v29[1];
if( (v29[0] & 0xE00) == 2048i64 )
{
v17 = 2;
v15 = v29[0] << 12 >> 24;
LABEL_17:
v26 = v15;
goto LABEL_18;
}
v17 = 0;
}
LABEL_18:
LODWORD(v23) = v17;
HsaBuildDeviceTableEntry((INT64)a1, v14, v13, v16, v23, v15, (INT64)v30, 0i64, (INT64)v29);
*((_QWORD *)&v19 + 1) = *(_QWORD *)(v11 + 8);
*(_QWORD *)&v28 = *(_QWORD *)v11;
*(_QWORD *)&v19 = v28;
*((_QWORD *)&v28 + 1) = *((_QWORD *)&v19 + 1);
do
{
v20 = v19;
v21 = _InterlockedCompareExchange128((volatile signed __int64 *)v11, v29[1], v29[0], (signed __int64 *)&v20);
v19 = v20;
v28 = v20;
}
while( !v21 );
if( v24 )
*(_QWORD *)&v19 = HsaInvalidateDTE(a1, v25, (UINT8 *)(unsigned int)a6);
if( a10 )
{
*(_QWORD *)&v19 = v27;
*(_QWORD *)a10 = v27;
}
return v19;
}Referenced by:
HalpHsapInitializeReservedDomain
HsaAttachDeviceDomainInternal
HsaProcessDeviceExceptions
HsaSetDevicePasidTable