PpmIdleCheckCoordinatedStateEligibility

INT64 __fastcall PpmIdleCheckCoordinatedStateEligibility(
        _KPRCB *Prcb,
        UINT64 PreselectState,
        UINT64 RemainingLatency,
        UINT64 ExpectedIdle,
        UINT64 StateIndex,
        UINT64 EntryPriority,
        UINT *ProcessorState,
        _PPM_COORDINATED_SELECTION *CoordinatedSelection){
  unsigned int v8; 
  UINT64 v9; 
  unsigned int v10; 
  __int64 v12; 
  __int64 v13; 
  _KAFFINITY_EX *SecondaryMask; 
  __int64 v15; 
  unsigned int v16; 
  UINT64 v17; 
  UINT64 v18; 
  unsigned int v19; 
  UINT64 Dependencies; 
  unsigned int StateIndexa; 
  v8 = StateIndex;
  v9 = PpmPlatformStates;
  v10 = RemainingLatency;
  v12 = *((_QWORD *)Prcb + 4096);
  v13 = 384i64 * (unsigned int)StateIndex;
  SecondaryMask = (_KAFFINITY_EX *)(v12 + 240);
  StateIndexa = CoordinatedSelection->SelectedStates;
  if( *(_BYTE *)(v13 + PpmPlatformStates + 121) )
  {
    if( !*(_BYTE *)(v12 + 540) )
    {
      v15 = *((_BYTE *)Prcb + 33) != 0 ? 0xFFFFFFFFi64 : 2147483660i64;
LABEL_21:
      PpmIdleRollbackCoordinatedSelection((INT64)CoordinatedSelection, StateIndexa);
      return v15;
    }
  }
  else if( !(unsigned int)KeIsSubsetAffinityEx(
                             (_KAFFINITY_EX *)(v13 + PpmPlatformStates + 128),
                             (_KAFFINITY_EX *)(v12 + 576)) )
  {
LABEL_5:
    v15 = 0xFFFFFFFFi64;
    goto LABEL_21;
  }
  if( _InterlockedCompareExchange(
         (volatile signed __int32 *)(v13 + v9 + 320),
         ((_DWORD)EntryPriority << 27) | *((_DWORD *)KeGetPcr() + 105) & 0xFFF | 0x1000000,
         0) )
  {
    goto LABEL_5;
  }
  CoordinatedSelection->Selection[CoordinatedSelection->SelectedStates++] = v8;
  v16 = PpmCheckIdleVeto(v13 + v9 + 80);
  if( v16 )
  {
    v15 = v16 | 0x100000000i64;
    goto LABEL_21;
  }
  if( *(_DWORD *)(v13 + v9 + 72) > v10 )
  {
    v15 = 2147483650i64;
    goto LABEL_21;
  }
  if( *(_DWORD *)(v13 + v9 + 384) )
    goto LABEL_20;
  if( *(unsigned int *)(v13 + v9 + 76) > v18 )
  {
    v15 = 2147483651i64;
    goto LABEL_21;
  }
  LODWORD(Dependencies) = *(_DWORD *)(v13 + v9 + 124);
  v15 = PpmIdleCheckCoordinatedDependencies(
          Prcb,
          v19,
          v17,
          v10 - *(_DWORD *)(v13 + v9 + 72),
          v18,
          Dependencies,
          *(_PPM_SELECTION_DEPENDENCY **)(v13 + v9 + 312),
          ProcessorState,
          CoordinatedSelection,
          SecondaryMask);
  if( v15 )
    goto LABEL_21;
  if( *ProcessorState == -1 )
  {
    v15 = 2147483649i64;
    goto LABEL_21;
  }
  if( (int)PpmIdleWaitForDependentTransitions((__int64)SecondaryMask) < 0 )
  {
    v15 = 2147483653i64;
    goto LABEL_21;
  }
  if( *(_DWORD *)(v13 + v9 + 384) )
  {
LABEL_20:
    v15 = 2147483652i64;
    goto LABEL_21;
  }
  return v15;
}

Referenced by:

PpmIdleCheckCoordinatedDependency
PpmIdleSelectStates