HalpTscDiscover
INT64 __stdcall HalpTscDiscover(){
ULONG v0;
INT64 v1;
WCHAR v2;
int v3;
__int64 v5;
ULONGLONG v6;
int v7;
__int128 v8;
struct _UNICODE_STRING DestinationString;
TIMER_INITIALIZATION_BLOCK result;
int v11;
v11 = 0;
v8 = 0i64;
DestinationString = 0i64;
memset((INT64)&result, 0i64);
result.CounterFrequency = 0i64;
result.InternalData = &v11;
v0 = 7;
result.Header = (SOC_INITIALIZATION_HEADER)0x9000000001i64;
result.CounterBitWidth = 64;
result.KnownType = TimerProcessor;
result.InternalDataSize = 4;
if( (int)HalSocRequestApi(v1, 0i64, 6i64, 0x10ui64, &v8) >= 0 )
{
v5 = ((__int64(*)(void))v8)();
v6 = 0i64;
if( v5 )
v6 = v5;
result.CounterFrequency = v6;
}
HalpTscGetAttributes((INT64)&HalpTscPerformanceStateInvariant, (INT64)&HalpTscIdleStateInvariant);
if( v3 < 0 )
{
v7 = 24583;
LABEL_12:
result.Capabilities = v7;
goto LABEL_6;
}
if( !(_BYTE)HalpTscPerformanceStateInvariant )
v0 = 8199;
result.Capabilities = v0;
if( !(_BYTE)HalpTscIdleStateInvariant )
{
v7 = v0 | 0x4000;
goto LABEL_12;
}
LABEL_6:
result.FunctionTable.Initialize = (PTIMER_INITIALIZE)HalpTscInitialize;
result.FunctionTable.QueryCounter = (PTIMER_QUERY_COUNTER)HalpTscQueryCounter;
RtlInitUnicodeString(
&DestinationString,
L"VEN_vvvv&DEV_dddd&SUBVEN_ssss&SUBDEV_yyyy&REV_rrrr&INST_iiii&UID_uuuuuuuu",
v2);
HalpTimerRegister(&result, &DestinationString);
return 0i64;
}Referenced by:
HalpTimerRegisterBuiltinPlugins