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