HalpTimerEnableHypervisorTimer
VOID __stdcall HalpTimerEnableHypervisorTimer(){
unsigned int *v0;
__int64 v1;
bool v2;
unsigned int v3;
unsigned int v4;
unsigned __int64 v5;
int v6;
unsigned int v7;
__int64 v8;
int v9[2];
int v10;
__int64 v11;
int v12;
__int128 *v13;
__int128 v14;
v11 = 0i64;
v12 = 0;
v8 = 0i64;
v0 = (unsigned int *)HalpHypervisorHpet;
v14 = 0i64;
if( HalpHypervisorHpet
&& (*((int(__fastcall **)(_QWORD))HalpHypervisorHpet + 13))(*((_QWORD *)HalpHypervisorHpet + 9)) >= 0 )
{
if( (v0[46] & 0x10) != 0 )
{
LOBYTE(v1) = 1;
v2 = (*((int(__fastcall **)(_QWORD, __int64, _QWORD, _QWORD))v0 + 19))(
*((_QWORD *)v0 + 9),
v1,
*((_QWORD *)v0 + 29),
v0[60]) < 0;
}
else
{
v3 = v0[56];
if( (v3 & 0x200) != 0 )
{
if( (int)HalpInterruptGsiToLine(v0[22], &v8) < 0 )
return;
}
else if( (v3 & 0x100) != 0 )
{
v4 = v0[21];
if( v4 >= 8 )
{
LODWORD(v8) = 45057;
v4 -= 8;
}
else
{
LODWORD(v8) = 45056;
}
HIDWORD(v8) = v4;
}
v9[0] = -1;
v13 = &v14;
v10 = 3;
v9[1] = 1;
v5 = (unsigned __int8)HalpAcquireHighLevelLock(&HalpInterruptLock);
v6 = HalpInterruptSetLineState(&v8, 0xFBu, 15, v0[24], v0[23], (__int64)&v10, (__int64)v9, v7);
KxReleaseSpinLock(&HalpInterruptLock);
__writecr8(v5);
v2 = v6 < 0;
}
if( !v2 )
((void(*)(void))qword_140C4A188)();
}
}Referenced by:
HalpAcpiPostSleep
HalpTimerInitializeHypervisorTimer