PopUpdateSystemIdleContext

VOID __fastcall PopUpdateSystemIdleContext(INT64 a1){
  unsigned int v1; 
  unsigned int v2; 
  unsigned int v3; 
  unsigned __int64 v4; 
  int a5; 
  unsigned int v6; 
  _SYSTEM_POWER_CAPABILITIES FilteredCapabilities; 
  v1 = a1;
  memset((INT64)&FilteredCapabilities, 0i64);
  if( !PopPlatformAoAc )
    KeBugCheckEx(0xA0u, 0xAui64, 0x101ui64, 0i64, 0i64);
  PopAcquireRwLockExclusive(&PopSystemIdleLock);
  v2 = PopSystemIdleContext;
  v3 = dword_140C0F194;
  v4 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart / 0x989680ui64;
  PopFilterCapabilities((_SYSTEM_POWER_CAPABILITIES *)&PopCapabilities, &FilteredCapabilities);
  if( (PopFullWake & 3) != 0 || (*(_DWORD *)PopSimulate & 0x1000000) != 0 )
  {
    a5 = *((_DWORD *)PopPolicy + 15);
    if( a5 )
    {
      v6 = 1;
      goto LABEL_9;
    }
LABEL_8:
    a5 = 0;
    v6 = 5;
    goto LABEL_9;
  }
  a5 = *(_DWORD *)dword_140C23D20;
  if( !*(_DWORD *)dword_140C23D20 )
    goto LABEL_8;
  v6 = 4;
LABEL_9:
  if( v1 == 1 || v1 == 4 )
    PopPulseSystemIdleEvent(3ui64);
  if( v1 == 3 )
  {
    PopIdleCancelAoAcDozeS4Timer(6i64);
    if( byte_140C231F1 )
      PopIdleArmAoAcDozeS4Timer();
  }
  LODWORD(PopSystemIdleContext) = v6;
  LODWORD(dword_140C0F194) = a5;
  qword_140C0F2C0 = v4;
  dword_140C0F2C8 = v1;
  dword_140C0F2CC = v2;
  dword_140C0F2D0 = v3;
  PopDiagTraceSystemIdleContextUpdate(v1, v2, (EVENT_DESCRIPTOR *)v3, v6, a5);
  PopReleaseRwLock((UINT64)&PopSystemIdleLock);
}

Referenced by:

PopInitSIdle