114 |
|
UINT8 SleepState) |
115 |
|
{ |
116 |
|
ACPI_STATUS Status; |
117 |
< |
UINT8 SleepTypeValue; |
117 |
> |
UINT8 SleepControl; |
118 |
|
UINT64 SleepStatus; |
119 |
|
|
120 |
|
|
140 |
|
|
141 |
|
AcpiGbl_SystemAwakeAndRunning = FALSE; |
142 |
|
|
143 |
– |
/* Flush caches, as per ACPI specification */ |
144 |
– |
|
145 |
– |
ACPI_FLUSH_CPU_CACHE (); |
146 |
– |
|
143 |
|
/* |
144 |
|
* Set the SLP_TYP and SLP_EN bits. |
145 |
|
* |
149 |
|
ACPI_DEBUG_PRINT ((ACPI_DB_INIT, |
150 |
|
"Entering sleep state [S%u]\n", SleepState)); |
151 |
|
|
152 |
< |
SleepTypeValue = ((AcpiGbl_SleepTypeA << ACPI_X_SLEEP_TYPE_POSITION) & |
153 |
< |
ACPI_X_SLEEP_TYPE_MASK); |
152 |
> |
SleepControl = ((AcpiGbl_SleepTypeA << ACPI_X_SLEEP_TYPE_POSITION) & |
153 |
> |
ACPI_X_SLEEP_TYPE_MASK) | ACPI_X_SLEEP_ENABLE; |
154 |
|
|
155 |
< |
Status = AcpiWrite ((UINT64) (SleepTypeValue | ACPI_X_SLEEP_ENABLE), |
156 |
< |
&AcpiGbl_FADT.SleepControl); |
155 |
> |
/* Flush caches, as per ACPI specification */ |
156 |
> |
|
157 |
> |
ACPI_FLUSH_CPU_CACHE (); |
158 |
> |
|
159 |
> |
Status = AcpiOsEnterSleep (SleepState, SleepControl, 0); |
160 |
> |
if (Status == AE_CTRL_TERMINATE) |
161 |
> |
{ |
162 |
> |
return_ACPI_STATUS (AE_OK); |
163 |
> |
} |
164 |
> |
if (ACPI_FAILURE (Status)) |
165 |
> |
{ |
166 |
> |
return_ACPI_STATUS (Status); |
167 |
> |
} |
168 |
> |
|
169 |
> |
Status = AcpiWrite ((UINT64) SleepControl, &AcpiGbl_FADT.SleepControl); |
170 |
|
if (ACPI_FAILURE (Status)) |
171 |
|
{ |
172 |
|
return_ACPI_STATUS (Status); |