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