HalpTimerUnmapInterrupt
void __fastcall HalpTimerUnmapInterrupt(__int64 a1, int a2, int a3, char a4){
int v5;
unsigned int v9;
__int64 v10;
__int64 v11;
int v12;
unsigned int v13;
int v14;
int v15;
UINT64 v16;
__int64 v17[2];
int result[3];
int v19;
int v20[6];
unsigned int v21;
int v22;
int v23;
__int16 v24;
int v25[10];
v17[0] = 0i64;
v5 = *(_DWORD *)(a1 + 184);
if( (v5 & 0x40) != 0 )
{
v9 = v5 & 0xFFFFFFBF;
*(_DWORD *)(a1 + 184) = v9;
memset((INT64)result, 0i64);
result[1] = a2;
v21 = v21 & 0xC0000000 | a3 & 0x3FFFFFFF | 0x40000000;
if( a4 || (v9 & 0x10) != 0 )
{
v15 = *(_DWORD *)(a1 + 236);
v19 = 0;
v22 = v15;
v23 = *(_DWORD *)(a1 + 232);
v24 = *(_WORD *)(a1 + 240);
result[0] = 3;
v20[0] = 1;
LABEL_15:
LODWORD(v16) = 1;
HalpInterruptUnmap(v11, v10, *(_QWORD *)(a1 + 288) + 8i64, 0i64, result, v16);
return;
}
v12 = *(_DWORD *)(a1 + 224);
if( (v12 & 0x200) != 0 )
{
if( (int)HalpInterruptGsiToLine(*(_DWORD *)(a1 + 88), v17) < 0 )
return;
}
else if( (v12 & 0x100) != 0 )
{
v13 = *(_DWORD *)(a1 + 84);
if( v13 >= 8 )
{
LODWORD(v17[0]) = 45057;
v13 -= 8;
}
else
{
LODWORD(v17[0]) = 45056;
}
HIDWORD(v17[0]) = v13;
}
v14 = *(_DWORD *)(a1 + 96);
result[0] = 0;
v20[0] = v14;
v19 = *(_DWORD *)(a1 + 92);
HalpInterruptApplyOverrides(v17, &v19, v20);
if( (int)HalpInterruptLineToGsi((int *)v17, v25) >= 0 )
goto LABEL_15;
}
}Referenced by:
HalpTimerConfigureInterrupt
HalpTimerInitializeClock
HalpTimerTestHypervisorTimer