HalpAcpiPreSleep

VOID __fastcall HalpAcpiPreSleep(SLEEP_STATE_CONTEXT Context){
  __int16 bf_0; 
  INT64 v2; 
  INT64 v3; 
  INT64 v4; 
  UINT64 SavedPerformanceCounter; 
  VOID *v6; 
  VOID *v7; 
  VOID *v8; 
  __int16 v9; 
  __int16 v10; 
  __int16 Input; 
  __int16 Output; 

  bf_0 = Context.bits._bf_0;
  stru_140C49D5C.bits._bf_0 = Context.bits._bf_0;
  LOBYTE(Context.bits._bf_0) = 1;
  Input = 0;
  Output = 0;
  HalpTimerSwitchStallSource(*(INT64 *)&Context.bits._bf_0);
  HalpTimerSavePerformanceCounter();
  if( (HalpPlatformFlags & 4) != 0 )
    HalpSetClockBeforeSleep(v3, v2, v4);
  SavedPerformanceCounter = HalpTimerGetSavedPerformanceCounter();
  KeSynchronizeTimeToQpc(SavedPerformanceCounter);
  byte_140C4A108 = 1;
  if( (bf_0 & 0x4000) != 0 )
    HalpSaveDmaControllerState(v7, v6, v8);
  if( HalpAcpiPmRegisterAvailable(PM1A_EVT_REGISTER) >= 0 )
  {
    HalpAcpiPmRegisterRead(PM1A_EVT_REGISTER, Fadt.pm1_evt_len >> 1, &Output, 2ui64, 0i64);
    v9 = Output;
    Input = Output;
    if( HalpAcpiPmRegisterAvailable(PM1B_EVT_REGISTER) >= 0 )
    {
      HalpAcpiPmRegisterRead(PM1B_EVT_REGISTER, Fadt.pm1_evt_len >> 1, &Output, 2ui64, 0i64);
      v9 = Output | Input;
      Input |= Output;
    }
    if( (Fadt.flags & 0x40) == 0 )
    {
      if( *(&CmpDummyThreadEvent + 5761) )
        v10 = v9 | 0x400;
      else
        v10 = v9 & 0xFBFF;
      Input = v10;
    }
    HalpAcpiPmRegisterWrite(PM1A_EVT_REGISTER, Fadt.pm1_evt_len >> 1, &Input, 2ui64, 0i64);
    if( HalpAcpiPmRegisterAvailable(PM1B_EVT_REGISTER) >= 0 )
      HalpAcpiPmRegisterWrite(PM1B_EVT_REGISTER, Fadt.pm1_evt_len >> 1, &Input, 2ui64, 0i64);
    HalpAcpiPmRegisterRead(PM1A_EVT_REGISTER, 0i64, &Output, 2ui64, 0i64);
    Input = Output;
    if( HalpAcpiPmRegisterAvailable(PM1B_EVT_REGISTER) >= 0 )
    {
      HalpAcpiPmRegisterRead(PM1B_EVT_REGISTER, 0i64, &Output, 2ui64, 0i64);
      Input |= Output;
    }
    HalpAcpiPmRegisterWrite(PM1A_EVT_REGISTER, 0i64, &Input, 2ui64, 0i64);
    if( HalpAcpiPmRegisterAvailable(PM1B_EVT_REGISTER) >= 0 )
      HalpAcpiPmRegisterWrite(PM1B_EVT_REGISTER, 0i64, &Input, 2ui64, 0i64);
  }
  if( *(&CmpDummyThreadEvent + 5760) )
    (*(void(**)(void))(qword_140C507B0 + 24))();
  else(*(void(__fastcall **)(_QWORD))(qword_140C507B0 + 8))(0i64);
  HalpPreserveNvsArea();
  dword_140C49D0C = 2;
}

Referenced by:

HaliAcpiSleep