HalpPmTimerDiscover
VOID __stdcall HalpPmTimerDiscover(){
_LARGE_INTEGER *AcpiTable;
INT64 v1;
bool v2;
_TIMER_INITIALIZATION_BLOCK v3;
INT64 v4[2];
__int128 v5;
AcpiTable = HalSocGetAcpiTable(0x50434146ui64);
v1 = (INT64)AcpiTable;
if( AcpiTable
&& (LOBYTE(AcpiTable[1].anonymous_0.LowPart) < 5u || (AcpiTable[14].anonymous_0.LowPart & 0x100000) == 0) )
{
memset(&v3, 0i64, sizeof(v3));
v3.Header = (_SOC_INITIALIZATION_HEADER)0x9000000001i64;
*(_OWORD *)v4 = 0i64;
v5 = 0i64;
if( !HalpPmTimerConfigure(v1, (INT64)v4, (INT64)&v3) )
{
v2 = (*(_DWORD *)(v1 + 112) & 0x100) == 0;
v3.CounterBitWidth = 24;
if( !v2 )
{
LOBYTE(v4[0]) = 1;
v3.CounterBitWidth = 32;
}
v3.InternalDataSize = 32;
v3.InternalData = v4;
v3.CounterFrequency = 3579545i64;
v3.FunctionTable.Initialize = (PLONG)HalpPmTimerInitialize;
v3.Capabilities = 2;
v3.KnownType = TimerAcpi;
HalpTimerRegister(&v3, 0i64);
}
}
}Referenced by:
HalpTimerRegisterBuiltinPlugins