HalUpdateTimerCapabilities

VOID __fastcall HalUpdateTimerCapabilities(VOID *TimerData, UINT64 SetNewCapabilities, UINT64 ClearNewCapabilities){
  int v3; 
  INT64 *v5; 
  INT64 *v6; 
  int v7; 
  int v8; 
  bool v9; 

  v3 = SetNewCapabilities;
  if( (((unsigned int)ClearNewCapabilities | (unsigned int)SetNewCapabilities) & 0xFFFF9FFF) == 0
    && ((unsigned int)SetNewCapabilities & (unsigned int)ClearNewCapabilities) == 0
    && TimerData )
  {
    v5 = (INT64 *)HalpRegisteredTimers;
    do
    {
      if( v5 == &HalpRegisteredTimers )
      {
        HalpTimerLastProblem = 13;
        return;
      }
      v6 = v5;
      v5 = (INT64 *)*v5;
    }
    while( (VOID *)v6[9] != TimerData );
    v7 = *((_DWORD *)v6 + 56);
    v8 = ~(_DWORD)ClearNewCapabilities & (v3 | v7);
    v9 = v6 == (INT64 *)HalpPerformanceCounter;
    *((_DWORD *)v6 + 56) = v8;
    if( v9
      && *((_DWORD *)v6 + 57) == 5
      && ((((unsigned __int16)v3 ^ (unsigned __int16)v7) & 0x2000) != 0
       || (v8 & 0x4000) != 0 && (unsigned __int8)HalpTimerDeepestIdleState > 1u) )
    {
      byte_140C4A410 = 1;
    }
  }
  else
  {
    HalpTimerLastProblem = 12;
  }
}

Referenced by:

HalpArtInitialize
HalpTscInitialize