HalpVpptUpdatePhysicalTimer

INT64 __stdcall HalpVpptUpdatePhysicalTimer(){
  void *v0; 
  void *v1; 
  ULONG_PTR v2; 
  unsigned __int64 v3; 
  __int64 v4; 
  __int64 v5; 
  INT64 v6; 
  void *v7; 
  void *v8; 
  __int64 v9; 
  __int64 v10; 
  int v11; 
  INT64 v12; 
  unsigned __int64 v13; 
  __int64 v14; 
  unsigned __int64 v15; 
  unsigned __int64 v16; 
  INT64 result; 
  INT64 v18; 
  INT64 CurrentQpc; 
  v2 = *(unsigned int *)(HalpVpptQueue + 16);
  v3 = *(_QWORD *)(HalpVpptQueue + 32);
  if( (_DWORD)HalpVpptPhysicalTimerTarget != (_DWORD)v2 )
  {
    HalpTimerGetInternalData((KDPC *)HalpVpptPhysicalTimer, (PVOID)HalpVpptPhysicalTimer, v0, v1);
    (*(void(__fastcall **)(__int64))(v4 + 136))(v5);
    if( (*(_DWORD *)(HalpVpptPhysicalTimer + 224) & 0x200000) == 0 )
    {
      HalpTimerGetInternalData((KDPC *)HalpVpptPhysicalTimer, (PVOID)HalpVpptPhysicalTimer, v7, v8);
      (*(void(__fastcall **)(__int64))(v9 + 104))(v10);
    }
    if( (_DWORD)HalpVpptPhysicalTimerTarget != (_DWORD)v2 )
    {
      v11 = ExtEnvSetVpptTarget(v6, (unsigned int)v2);
      if( v11 < 0 )
        ExtEnvCriticalFailure(v12, 0x114ui64, (unsigned int)HalpVpptPhysicalTimerTarget, v2, v11);
      LODWORD(HalpVpptPhysicalTimerTarget) = v2;
    }
  }
  LODWORD(v13) = RtlGetInterruptTimePrecise(&CurrentQpc);
  if( v13 <= v3 )
    v15 = v3 - v13;
  else
    v15 = 0i64;
  v16 = 0x989680ui64 / *(_QWORD *)(HalpVpptPhysicalTimer + 192);
  if( *(_DWORD *)(HalpVpptPhysicalTimer + 228) == 2 )
  {
    if( v16 < 0x1312 )
      v16 = 4882i64;
  }
  else if( v16 < 0x1388 )
  {
    v16 = 5000i64;
  }
  if( v15 >= v16 )
    v16 = v15;
  result = HalpSetTimerAnyMode(HalpVpptPhysicalTimer, v16, v14, (unsigned __int64 *)&CurrentQpc);
  if( (int)result < 0 )
    ExtEnvCriticalFailure(v18, 0x115ui64, HalpVpptPhysicalTimer, v16, (int)result);
  return result;
}

Referenced by:

HalpVpptAcknowledgeInterrupt
HalpVpptArmTimer
HalpVpptStop