diff options
Diffstat (limited to 'source/components/hardware/hwesleep.c')
-rw-r--r-- | source/components/hardware/hwesleep.c | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/source/components/hardware/hwesleep.c b/source/components/hardware/hwesleep.c index 51f006b20..05f5b49f1 100644 --- a/source/components/hardware/hwesleep.c +++ b/source/components/hardware/hwesleep.c @@ -185,7 +185,7 @@ AcpiHwExtendedSleep ( UINT8 SleepState) { ACPI_STATUS Status; - UINT8 SleepTypeValue; + UINT8 SleepControl; UINT64 SleepStatus; @@ -211,10 +211,6 @@ AcpiHwExtendedSleep ( AcpiGbl_SystemAwakeAndRunning = FALSE; - /* Flush caches, as per ACPI specification */ - - ACPI_FLUSH_CPU_CACHE (); - /* * Set the SLP_TYP and SLP_EN bits. * @@ -224,11 +220,24 @@ AcpiHwExtendedSleep ( ACPI_DEBUG_PRINT ((ACPI_DB_INIT, "Entering sleep state [S%u]\n", SleepState)); - SleepTypeValue = ((AcpiGbl_SleepTypeA << ACPI_X_SLEEP_TYPE_POSITION) & - ACPI_X_SLEEP_TYPE_MASK); + SleepControl = ((AcpiGbl_SleepTypeA << ACPI_X_SLEEP_TYPE_POSITION) & + ACPI_X_SLEEP_TYPE_MASK) | ACPI_X_SLEEP_ENABLE; + + /* Flush caches, as per ACPI specification */ + + ACPI_FLUSH_CPU_CACHE (); + + Status = AcpiOsEnterSleep (SleepState, SleepControl, 0); + if (Status == AE_CTRL_TERMINATE) + { + return_ACPI_STATUS (AE_OK); + } + if (ACPI_FAILURE (Status)) + { + return_ACPI_STATUS (Status); + } - Status = AcpiWrite ((UINT64) (SleepTypeValue | ACPI_X_SLEEP_ENABLE), - &AcpiGbl_FADT.SleepControl); + Status = AcpiWrite ((UINT64) SleepControl, &AcpiGbl_FADT.SleepControl); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); |