diff options
-rw-r--r-- | drivers/acpi/acpica/achware.h | 12 | ||||
-rw-r--r-- | drivers/acpi/acpica/hwesleep.c | 21 | ||||
-rw-r--r-- | drivers/acpi/acpica/hwsleep.c | 21 | ||||
-rw-r--r-- | drivers/acpi/acpica/hwxfsleep.c | 35 | ||||
-rw-r--r-- | drivers/acpi/sleep.c | 13 | ||||
-rw-r--r-- | include/acpi/acpixf.h | 4 | ||||
-rw-r--r-- | include/acpi/actypes.h | 9 |
7 files changed, 73 insertions, 42 deletions
diff --git a/drivers/acpi/acpica/achware.h b/drivers/acpi/acpica/achware.h index 5de4ec72766d..5ccb99ae3a6f 100644 --- a/drivers/acpi/acpica/achware.h +++ b/drivers/acpi/acpica/achware.h | |||
@@ -83,22 +83,22 @@ acpi_status acpi_hw_clear_acpi_status(void); | |||
83 | /* | 83 | /* |
84 | * hwsleep - sleep/wake support (Legacy sleep registers) | 84 | * hwsleep - sleep/wake support (Legacy sleep registers) |
85 | */ | 85 | */ |
86 | acpi_status acpi_hw_legacy_sleep(u8 sleep_state); | 86 | acpi_status acpi_hw_legacy_sleep(u8 sleep_state, u8 flags); |
87 | 87 | ||
88 | acpi_status acpi_hw_legacy_wake_prep(u8 sleep_state); | 88 | acpi_status acpi_hw_legacy_wake_prep(u8 sleep_state, u8 flags); |
89 | 89 | ||
90 | acpi_status acpi_hw_legacy_wake(u8 sleep_state); | 90 | acpi_status acpi_hw_legacy_wake(u8 sleep_state, u8 flags); |
91 | 91 | ||
92 | /* | 92 | /* |
93 | * hwesleep - sleep/wake support (Extended FADT-V5 sleep registers) | 93 | * hwesleep - sleep/wake support (Extended FADT-V5 sleep registers) |
94 | */ | 94 | */ |
95 | void acpi_hw_execute_sleep_method(char *method_name, u32 integer_argument); | 95 | void acpi_hw_execute_sleep_method(char *method_name, u32 integer_argument); |
96 | 96 | ||
97 | acpi_status acpi_hw_extended_sleep(u8 sleep_state); | 97 | acpi_status acpi_hw_extended_sleep(u8 sleep_state, u8 flags); |
98 | 98 | ||
99 | acpi_status acpi_hw_extended_wake_prep(u8 sleep_state); | 99 | acpi_status acpi_hw_extended_wake_prep(u8 sleep_state, u8 flags); |
100 | 100 | ||
101 | acpi_status acpi_hw_extended_wake(u8 sleep_state); | 101 | acpi_status acpi_hw_extended_wake(u8 sleep_state, u8 flags); |
102 | 102 | ||
103 | /* | 103 | /* |
104 | * hwvalid - Port I/O with validation | 104 | * hwvalid - Port I/O with validation |
diff --git a/drivers/acpi/acpica/hwesleep.c b/drivers/acpi/acpica/hwesleep.c index 6cbc4e10bfa8..1c409e82c461 100644 --- a/drivers/acpi/acpica/hwesleep.c +++ b/drivers/acpi/acpica/hwesleep.c | |||
@@ -103,6 +103,7 @@ void acpi_hw_execute_sleep_method(char *method_pathname, u32 integer_argument) | |||
103 | * FUNCTION: acpi_hw_extended_sleep | 103 | * FUNCTION: acpi_hw_extended_sleep |
104 | * | 104 | * |
105 | * PARAMETERS: sleep_state - Which sleep state to enter | 105 | * PARAMETERS: sleep_state - Which sleep state to enter |
106 | * Flags - ACPI_EXECUTE_GTS to run optional method | ||
106 | * | 107 | * |
107 | * RETURN: Status | 108 | * RETURN: Status |
108 | * | 109 | * |
@@ -112,7 +113,7 @@ void acpi_hw_execute_sleep_method(char *method_pathname, u32 integer_argument) | |||
112 | * | 113 | * |
113 | ******************************************************************************/ | 114 | ******************************************************************************/ |
114 | 115 | ||
115 | acpi_status acpi_hw_extended_sleep(u8 sleep_state) | 116 | acpi_status acpi_hw_extended_sleep(u8 sleep_state, u8 flags) |
116 | { | 117 | { |
117 | acpi_status status; | 118 | acpi_status status; |
118 | u8 sleep_type_value; | 119 | u8 sleep_type_value; |
@@ -136,9 +137,11 @@ acpi_status acpi_hw_extended_sleep(u8 sleep_state) | |||
136 | 137 | ||
137 | acpi_gbl_system_awake_and_running = FALSE; | 138 | acpi_gbl_system_awake_and_running = FALSE; |
138 | 139 | ||
139 | /* Execute the _GTS method (Going To Sleep) */ | 140 | /* Optionally execute _GTS (Going To Sleep) */ |
140 | 141 | ||
141 | acpi_hw_execute_sleep_method(METHOD_PATHNAME__GTS, sleep_state); | 142 | if (flags & ACPI_EXECUTE_GTS) { |
143 | acpi_hw_execute_sleep_method(METHOD_PATHNAME__GTS, sleep_state); | ||
144 | } | ||
142 | 145 | ||
143 | /* Flush caches, as per ACPI specification */ | 146 | /* Flush caches, as per ACPI specification */ |
144 | 147 | ||
@@ -181,6 +184,7 @@ acpi_status acpi_hw_extended_sleep(u8 sleep_state) | |||
181 | * FUNCTION: acpi_hw_extended_wake_prep | 184 | * FUNCTION: acpi_hw_extended_wake_prep |
182 | * | 185 | * |
183 | * PARAMETERS: sleep_state - Which sleep state we just exited | 186 | * PARAMETERS: sleep_state - Which sleep state we just exited |
187 | * Flags - ACPI_EXECUTE_BFS to run optional method | ||
184 | * | 188 | * |
185 | * RETURN: Status | 189 | * RETURN: Status |
186 | * | 190 | * |
@@ -189,7 +193,7 @@ acpi_status acpi_hw_extended_sleep(u8 sleep_state) | |||
189 | * | 193 | * |
190 | ******************************************************************************/ | 194 | ******************************************************************************/ |
191 | 195 | ||
192 | acpi_status acpi_hw_extended_wake_prep(u8 sleep_state) | 196 | acpi_status acpi_hw_extended_wake_prep(u8 sleep_state, u8 flags) |
193 | { | 197 | { |
194 | acpi_status status; | 198 | acpi_status status; |
195 | u8 sleep_type_value; | 199 | u8 sleep_type_value; |
@@ -208,7 +212,11 @@ acpi_status acpi_hw_extended_wake_prep(u8 sleep_state) | |||
208 | &acpi_gbl_FADT.sleep_control); | 212 | &acpi_gbl_FADT.sleep_control); |
209 | } | 213 | } |
210 | 214 | ||
211 | acpi_hw_execute_sleep_method(METHOD_PATHNAME__BFS, sleep_state); | 215 | /* Optionally execute _BFS (Back From Sleep) */ |
216 | |||
217 | if (flags & ACPI_EXECUTE_BFS) { | ||
218 | acpi_hw_execute_sleep_method(METHOD_PATHNAME__BFS, sleep_state); | ||
219 | } | ||
212 | return_ACPI_STATUS(AE_OK); | 220 | return_ACPI_STATUS(AE_OK); |
213 | } | 221 | } |
214 | 222 | ||
@@ -217,6 +225,7 @@ acpi_status acpi_hw_extended_wake_prep(u8 sleep_state) | |||
217 | * FUNCTION: acpi_hw_extended_wake | 225 | * FUNCTION: acpi_hw_extended_wake |
218 | * | 226 | * |
219 | * PARAMETERS: sleep_state - Which sleep state we just exited | 227 | * PARAMETERS: sleep_state - Which sleep state we just exited |
228 | * Flags - Reserved, set to zero | ||
220 | * | 229 | * |
221 | * RETURN: Status | 230 | * RETURN: Status |
222 | * | 231 | * |
@@ -225,7 +234,7 @@ acpi_status acpi_hw_extended_wake_prep(u8 sleep_state) | |||
225 | * | 234 | * |
226 | ******************************************************************************/ | 235 | ******************************************************************************/ |
227 | 236 | ||
228 | acpi_status acpi_hw_extended_wake(u8 sleep_state) | 237 | acpi_status acpi_hw_extended_wake(u8 sleep_state, u8 flags) |
229 | { | 238 | { |
230 | ACPI_FUNCTION_TRACE(hw_extended_wake); | 239 | ACPI_FUNCTION_TRACE(hw_extended_wake); |
231 | 240 | ||
diff --git a/drivers/acpi/acpica/hwsleep.c b/drivers/acpi/acpica/hwsleep.c index aba36349ba4d..8ab325cefa68 100644 --- a/drivers/acpi/acpica/hwsleep.c +++ b/drivers/acpi/acpica/hwsleep.c | |||
@@ -56,6 +56,7 @@ ACPI_MODULE_NAME("hwsleep") | |||
56 | * FUNCTION: acpi_hw_legacy_sleep | 56 | * FUNCTION: acpi_hw_legacy_sleep |
57 | * | 57 | * |
58 | * PARAMETERS: sleep_state - Which sleep state to enter | 58 | * PARAMETERS: sleep_state - Which sleep state to enter |
59 | * Flags - ACPI_EXECUTE_GTS to run optional method | ||
59 | * | 60 | * |
60 | * RETURN: Status | 61 | * RETURN: Status |
61 | * | 62 | * |
@@ -63,7 +64,7 @@ ACPI_MODULE_NAME("hwsleep") | |||
63 | * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED | 64 | * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED |
64 | * | 65 | * |
65 | ******************************************************************************/ | 66 | ******************************************************************************/ |
66 | acpi_status acpi_hw_legacy_sleep(u8 sleep_state) | 67 | acpi_status acpi_hw_legacy_sleep(u8 sleep_state, u8 flags) |
67 | { | 68 | { |
68 | struct acpi_bit_register_info *sleep_type_reg_info; | 69 | struct acpi_bit_register_info *sleep_type_reg_info; |
69 | struct acpi_bit_register_info *sleep_enable_reg_info; | 70 | struct acpi_bit_register_info *sleep_enable_reg_info; |
@@ -121,9 +122,11 @@ acpi_status acpi_hw_legacy_sleep(u8 sleep_state) | |||
121 | return_ACPI_STATUS(status); | 122 | return_ACPI_STATUS(status); |
122 | } | 123 | } |
123 | 124 | ||
124 | /* Execute the _GTS method (Going To Sleep) */ | 125 | /* Optionally execute _GTS (Going To Sleep) */ |
125 | 126 | ||
126 | acpi_hw_execute_sleep_method(METHOD_PATHNAME__GTS, sleep_state); | 127 | if (flags & ACPI_EXECUTE_GTS) { |
128 | acpi_hw_execute_sleep_method(METHOD_PATHNAME__GTS, sleep_state); | ||
129 | } | ||
127 | 130 | ||
128 | /* Get current value of PM1A control */ | 131 | /* Get current value of PM1A control */ |
129 | 132 | ||
@@ -219,6 +222,7 @@ acpi_status acpi_hw_legacy_sleep(u8 sleep_state) | |||
219 | * FUNCTION: acpi_hw_legacy_wake_prep | 222 | * FUNCTION: acpi_hw_legacy_wake_prep |
220 | * | 223 | * |
221 | * PARAMETERS: sleep_state - Which sleep state we just exited | 224 | * PARAMETERS: sleep_state - Which sleep state we just exited |
225 | * Flags - ACPI_EXECUTE_BFS to run optional method | ||
222 | * | 226 | * |
223 | * RETURN: Status | 227 | * RETURN: Status |
224 | * | 228 | * |
@@ -228,7 +232,7 @@ acpi_status acpi_hw_legacy_sleep(u8 sleep_state) | |||
228 | * | 232 | * |
229 | ******************************************************************************/ | 233 | ******************************************************************************/ |
230 | 234 | ||
231 | acpi_status acpi_hw_legacy_wake_prep(u8 sleep_state) | 235 | acpi_status acpi_hw_legacy_wake_prep(u8 sleep_state, u8 flags) |
232 | { | 236 | { |
233 | acpi_status status; | 237 | acpi_status status; |
234 | struct acpi_bit_register_info *sleep_type_reg_info; | 238 | struct acpi_bit_register_info *sleep_type_reg_info; |
@@ -279,7 +283,11 @@ acpi_status acpi_hw_legacy_wake_prep(u8 sleep_state) | |||
279 | } | 283 | } |
280 | } | 284 | } |
281 | 285 | ||
282 | acpi_hw_execute_sleep_method(METHOD_PATHNAME__BFS, sleep_state); | 286 | /* Optionally execute _BFS (Back From Sleep) */ |
287 | |||
288 | if (flags & ACPI_EXECUTE_BFS) { | ||
289 | acpi_hw_execute_sleep_method(METHOD_PATHNAME__BFS, sleep_state); | ||
290 | } | ||
283 | return_ACPI_STATUS(status); | 291 | return_ACPI_STATUS(status); |
284 | } | 292 | } |
285 | 293 | ||
@@ -288,6 +296,7 @@ acpi_status acpi_hw_legacy_wake_prep(u8 sleep_state) | |||
288 | * FUNCTION: acpi_hw_legacy_wake | 296 | * FUNCTION: acpi_hw_legacy_wake |
289 | * | 297 | * |
290 | * PARAMETERS: sleep_state - Which sleep state we just exited | 298 | * PARAMETERS: sleep_state - Which sleep state we just exited |
299 | * Flags - Reserved, set to zero | ||
291 | * | 300 | * |
292 | * RETURN: Status | 301 | * RETURN: Status |
293 | * | 302 | * |
@@ -296,7 +305,7 @@ acpi_status acpi_hw_legacy_wake_prep(u8 sleep_state) | |||
296 | * | 305 | * |
297 | ******************************************************************************/ | 306 | ******************************************************************************/ |
298 | 307 | ||
299 | acpi_status acpi_hw_legacy_wake(u8 sleep_state) | 308 | acpi_status acpi_hw_legacy_wake(u8 sleep_state, u8 flags) |
300 | { | 309 | { |
301 | acpi_status status; | 310 | acpi_status status; |
302 | 311 | ||
diff --git a/drivers/acpi/acpica/hwxfsleep.c b/drivers/acpi/acpica/hwxfsleep.c index cf0168e538d9..762d059bb508 100644 --- a/drivers/acpi/acpica/hwxfsleep.c +++ b/drivers/acpi/acpica/hwxfsleep.c | |||
@@ -49,15 +49,16 @@ | |||
49 | ACPI_MODULE_NAME("hwxfsleep") | 49 | ACPI_MODULE_NAME("hwxfsleep") |
50 | 50 | ||
51 | /* Local prototypes */ | 51 | /* Local prototypes */ |
52 | static acpi_status acpi_hw_sleep_dispatch(u8 sleep_state, u32 function_id); | 52 | static acpi_status |
53 | acpi_hw_sleep_dispatch(u8 sleep_state, u8 flags, u32 function_id); | ||
53 | 54 | ||
54 | /* | 55 | /* |
55 | * Dispatch table used to efficiently branch to the various sleep | 56 | * Dispatch table used to efficiently branch to the various sleep |
56 | * functions. | 57 | * functions. |
57 | */ | 58 | */ |
58 | #define ACPI_SLEEP_FUNCTION 0 | 59 | #define ACPI_SLEEP_FUNCTION_ID 0 |
59 | #define ACPI_WAKE_PREP_FUNCTION 1 | 60 | #define ACPI_WAKE_PREP_FUNCTION_ID 1 |
60 | #define ACPI_WAKE_FUNCTION 2 | 61 | #define ACPI_WAKE_FUNCTION_ID 2 |
61 | 62 | ||
62 | /* Legacy functions are optional, based upon ACPI_REDUCED_HARDWARE */ | 63 | /* Legacy functions are optional, based upon ACPI_REDUCED_HARDWARE */ |
63 | 64 | ||
@@ -233,7 +234,8 @@ ACPI_EXPORT_SYMBOL(acpi_enter_sleep_state_s4bios) | |||
233 | * function. | 234 | * function. |
234 | * | 235 | * |
235 | ******************************************************************************/ | 236 | ******************************************************************************/ |
236 | static acpi_status acpi_hw_sleep_dispatch(u8 sleep_state, u32 function_id) | 237 | static acpi_status |
238 | acpi_hw_sleep_dispatch(u8 sleep_state, u8 flags, u32 function_id) | ||
237 | { | 239 | { |
238 | acpi_status status; | 240 | acpi_status status; |
239 | struct acpi_sleep_functions *sleep_functions = | 241 | struct acpi_sleep_functions *sleep_functions = |
@@ -246,11 +248,11 @@ static acpi_status acpi_hw_sleep_dispatch(u8 sleep_state, u32 function_id) | |||
246 | * use the extended sleep registers | 248 | * use the extended sleep registers |
247 | */ | 249 | */ |
248 | if (acpi_gbl_reduced_hardware || acpi_gbl_FADT.sleep_control.address) { | 250 | if (acpi_gbl_reduced_hardware || acpi_gbl_FADT.sleep_control.address) { |
249 | status = sleep_functions->extended_function(sleep_state); | 251 | status = sleep_functions->extended_function(sleep_state, flags); |
250 | } else { | 252 | } else { |
251 | /* Legacy sleep */ | 253 | /* Legacy sleep */ |
252 | 254 | ||
253 | status = sleep_functions->legacy_function(sleep_state); | 255 | status = sleep_functions->legacy_function(sleep_state, flags); |
254 | } | 256 | } |
255 | 257 | ||
256 | return (status); | 258 | return (status); |
@@ -260,7 +262,7 @@ static acpi_status acpi_hw_sleep_dispatch(u8 sleep_state, u32 function_id) | |||
260 | * For the case where reduced-hardware-only code is being generated, | 262 | * For the case where reduced-hardware-only code is being generated, |
261 | * we know that only the extended sleep registers are available | 263 | * we know that only the extended sleep registers are available |
262 | */ | 264 | */ |
263 | status = sleep_functions->extended_function(sleep_state); | 265 | status = sleep_functions->extended_function(sleep_state, flags); |
264 | return (status); | 266 | return (status); |
265 | 267 | ||
266 | #endif /* !ACPI_REDUCED_HARDWARE */ | 268 | #endif /* !ACPI_REDUCED_HARDWARE */ |
@@ -290,8 +292,6 @@ acpi_status acpi_enter_sleep_state_prep(u8 sleep_state) | |||
290 | 292 | ||
291 | ACPI_FUNCTION_TRACE(acpi_enter_sleep_state_prep); | 293 | ACPI_FUNCTION_TRACE(acpi_enter_sleep_state_prep); |
292 | 294 | ||
293 | /* _PSW methods could be run here to enable wake-on keyboard, LAN, etc. */ | ||
294 | |||
295 | status = acpi_get_sleep_type_data(sleep_state, | 295 | status = acpi_get_sleep_type_data(sleep_state, |
296 | &acpi_gbl_sleep_type_a, | 296 | &acpi_gbl_sleep_type_a, |
297 | &acpi_gbl_sleep_type_b); | 297 | &acpi_gbl_sleep_type_b); |
@@ -349,6 +349,7 @@ ACPI_EXPORT_SYMBOL(acpi_enter_sleep_state_prep) | |||
349 | * FUNCTION: acpi_enter_sleep_state | 349 | * FUNCTION: acpi_enter_sleep_state |
350 | * | 350 | * |
351 | * PARAMETERS: sleep_state - Which sleep state to enter | 351 | * PARAMETERS: sleep_state - Which sleep state to enter |
352 | * Flags - ACPI_EXECUTE_GTS to run optional method | ||
352 | * | 353 | * |
353 | * RETURN: Status | 354 | * RETURN: Status |
354 | * | 355 | * |
@@ -356,7 +357,7 @@ ACPI_EXPORT_SYMBOL(acpi_enter_sleep_state_prep) | |||
356 | * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED | 357 | * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED |
357 | * | 358 | * |
358 | ******************************************************************************/ | 359 | ******************************************************************************/ |
359 | acpi_status asmlinkage acpi_enter_sleep_state(u8 sleep_state) | 360 | acpi_status asmlinkage acpi_enter_sleep_state(u8 sleep_state, u8 flags) |
360 | { | 361 | { |
361 | acpi_status status; | 362 | acpi_status status; |
362 | 363 | ||
@@ -369,7 +370,8 @@ acpi_status asmlinkage acpi_enter_sleep_state(u8 sleep_state) | |||
369 | return_ACPI_STATUS(AE_AML_OPERAND_VALUE); | 370 | return_ACPI_STATUS(AE_AML_OPERAND_VALUE); |
370 | } | 371 | } |
371 | 372 | ||
372 | status = acpi_hw_sleep_dispatch(sleep_state, ACPI_SLEEP_FUNCTION); | 373 | status = |
374 | acpi_hw_sleep_dispatch(sleep_state, flags, ACPI_SLEEP_FUNCTION_ID); | ||
373 | return_ACPI_STATUS(status); | 375 | return_ACPI_STATUS(status); |
374 | } | 376 | } |
375 | 377 | ||
@@ -380,6 +382,7 @@ ACPI_EXPORT_SYMBOL(acpi_enter_sleep_state) | |||
380 | * FUNCTION: acpi_leave_sleep_state_prep | 382 | * FUNCTION: acpi_leave_sleep_state_prep |
381 | * | 383 | * |
382 | * PARAMETERS: sleep_state - Which sleep state we are exiting | 384 | * PARAMETERS: sleep_state - Which sleep state we are exiting |
385 | * Flags - ACPI_EXECUTE_BFS to run optional method | ||
383 | * | 386 | * |
384 | * RETURN: Status | 387 | * RETURN: Status |
385 | * | 388 | * |
@@ -388,13 +391,15 @@ ACPI_EXPORT_SYMBOL(acpi_enter_sleep_state) | |||
388 | * Called with interrupts DISABLED. | 391 | * Called with interrupts DISABLED. |
389 | * | 392 | * |
390 | ******************************************************************************/ | 393 | ******************************************************************************/ |
391 | acpi_status acpi_leave_sleep_state_prep(u8 sleep_state) | 394 | acpi_status acpi_leave_sleep_state_prep(u8 sleep_state, u8 flags) |
392 | { | 395 | { |
393 | acpi_status status; | 396 | acpi_status status; |
394 | 397 | ||
395 | ACPI_FUNCTION_TRACE(acpi_leave_sleep_state_prep); | 398 | ACPI_FUNCTION_TRACE(acpi_leave_sleep_state_prep); |
396 | 399 | ||
397 | status = acpi_hw_sleep_dispatch(sleep_state, ACPI_WAKE_PREP_FUNCTION); | 400 | status = |
401 | acpi_hw_sleep_dispatch(sleep_state, flags, | ||
402 | ACPI_WAKE_PREP_FUNCTION_ID); | ||
398 | return_ACPI_STATUS(status); | 403 | return_ACPI_STATUS(status); |
399 | } | 404 | } |
400 | 405 | ||
@@ -419,7 +424,7 @@ acpi_status acpi_leave_sleep_state(u8 sleep_state) | |||
419 | ACPI_FUNCTION_TRACE(acpi_leave_sleep_state); | 424 | ACPI_FUNCTION_TRACE(acpi_leave_sleep_state); |
420 | 425 | ||
421 | 426 | ||
422 | status = acpi_hw_sleep_dispatch(sleep_state, ACPI_WAKE_FUNCTION); | 427 | status = acpi_hw_sleep_dispatch(sleep_state, 0, ACPI_WAKE_FUNCTION_ID); |
423 | return_ACPI_STATUS(status); | 428 | return_ACPI_STATUS(status); |
424 | } | 429 | } |
425 | 430 | ||
diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c index 4fda549fa599..8f1fb4520d24 100644 --- a/drivers/acpi/sleep.c +++ b/drivers/acpi/sleep.c | |||
@@ -250,7 +250,8 @@ static int acpi_suspend_enter(suspend_state_t pm_state) | |||
250 | switch (acpi_state) { | 250 | switch (acpi_state) { |
251 | case ACPI_STATE_S1: | 251 | case ACPI_STATE_S1: |
252 | barrier(); | 252 | barrier(); |
253 | status = acpi_enter_sleep_state(acpi_state); | 253 | status = acpi_enter_sleep_state(acpi_state, |
254 | ACPI_NO_OPTIONAL_METHODS); | ||
254 | break; | 255 | break; |
255 | 256 | ||
256 | case ACPI_STATE_S3: | 257 | case ACPI_STATE_S3: |
@@ -265,7 +266,7 @@ static int acpi_suspend_enter(suspend_state_t pm_state) | |||
265 | acpi_write_bit_register(ACPI_BITREG_SCI_ENABLE, 1); | 266 | acpi_write_bit_register(ACPI_BITREG_SCI_ENABLE, 1); |
266 | 267 | ||
267 | /* Reprogram control registers and execute _BFS */ | 268 | /* Reprogram control registers and execute _BFS */ |
268 | acpi_leave_sleep_state_prep(acpi_state); | 269 | acpi_leave_sleep_state_prep(acpi_state, ACPI_NO_OPTIONAL_METHODS); |
269 | 270 | ||
270 | /* ACPI 3.0 specs (P62) says that it's the responsibility | 271 | /* ACPI 3.0 specs (P62) says that it's the responsibility |
271 | * of the OSPM to clear the status bit [ implying that the | 272 | * of the OSPM to clear the status bit [ implying that the |
@@ -534,9 +535,9 @@ static int acpi_hibernation_enter(void) | |||
534 | ACPI_FLUSH_CPU_CACHE(); | 535 | ACPI_FLUSH_CPU_CACHE(); |
535 | 536 | ||
536 | /* This shouldn't return. If it returns, we have a problem */ | 537 | /* This shouldn't return. If it returns, we have a problem */ |
537 | status = acpi_enter_sleep_state(ACPI_STATE_S4); | 538 | status = acpi_enter_sleep_state(ACPI_STATE_S4, ACPI_NO_OPTIONAL_METHODS); |
538 | /* Reprogram control registers and execute _BFS */ | 539 | /* Reprogram control registers and execute _BFS */ |
539 | acpi_leave_sleep_state_prep(ACPI_STATE_S4); | 540 | acpi_leave_sleep_state_prep(ACPI_STATE_S4, ACPI_NO_OPTIONAL_METHODS); |
540 | 541 | ||
541 | return ACPI_SUCCESS(status) ? 0 : -EFAULT; | 542 | return ACPI_SUCCESS(status) ? 0 : -EFAULT; |
542 | } | 543 | } |
@@ -549,7 +550,7 @@ static void acpi_hibernation_leave(void) | |||
549 | */ | 550 | */ |
550 | acpi_enable(); | 551 | acpi_enable(); |
551 | /* Reprogram control registers and execute _BFS */ | 552 | /* Reprogram control registers and execute _BFS */ |
552 | acpi_leave_sleep_state_prep(ACPI_STATE_S4); | 553 | acpi_leave_sleep_state_prep(ACPI_STATE_S4, ACPI_NO_OPTIONAL_METHODS); |
553 | /* Check the hardware signature */ | 554 | /* Check the hardware signature */ |
554 | if (facs && s4_hardware_signature != facs->hardware_signature) { | 555 | if (facs && s4_hardware_signature != facs->hardware_signature) { |
555 | printk(KERN_EMERG "ACPI: Hardware changed while hibernated, " | 556 | printk(KERN_EMERG "ACPI: Hardware changed while hibernated, " |
@@ -773,7 +774,7 @@ static void acpi_power_off(void) | |||
773 | /* acpi_sleep_prepare(ACPI_STATE_S5) should have already been called */ | 774 | /* acpi_sleep_prepare(ACPI_STATE_S5) should have already been called */ |
774 | printk(KERN_DEBUG "%s called\n", __func__); | 775 | printk(KERN_DEBUG "%s called\n", __func__); |
775 | local_irq_disable(); | 776 | local_irq_disable(); |
776 | acpi_enter_sleep_state(ACPI_STATE_S5); | 777 | acpi_enter_sleep_state(ACPI_STATE_S5, ACPI_NO_OPTIONAL_METHODS); |
777 | } | 778 | } |
778 | 779 | ||
779 | /* | 780 | /* |
diff --git a/include/acpi/acpixf.h b/include/acpi/acpixf.h index fb8a238115d6..488c986ebe44 100644 --- a/include/acpi/acpixf.h +++ b/include/acpi/acpixf.h | |||
@@ -486,11 +486,11 @@ acpi_get_sleep_type_data(u8 sleep_state, u8 * slp_typ_a, u8 * slp_typ_b); | |||
486 | 486 | ||
487 | acpi_status acpi_enter_sleep_state_prep(u8 sleep_state); | 487 | acpi_status acpi_enter_sleep_state_prep(u8 sleep_state); |
488 | 488 | ||
489 | acpi_status asmlinkage acpi_enter_sleep_state(u8 sleep_state); | 489 | acpi_status asmlinkage acpi_enter_sleep_state(u8 sleep_state, u8 flags); |
490 | 490 | ||
491 | ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status asmlinkage acpi_enter_sleep_state_s4bios(void)) | 491 | ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status asmlinkage acpi_enter_sleep_state_s4bios(void)) |
492 | 492 | ||
493 | acpi_status acpi_leave_sleep_state_prep(u8 sleep_state); | 493 | acpi_status acpi_leave_sleep_state_prep(u8 sleep_state, u8 flags); |
494 | 494 | ||
495 | acpi_status acpi_leave_sleep_state(u8 sleep_state); | 495 | acpi_status acpi_leave_sleep_state(u8 sleep_state); |
496 | 496 | ||
diff --git a/include/acpi/actypes.h b/include/acpi/actypes.h index 349615833a4a..eba66043cf1b 100644 --- a/include/acpi/actypes.h +++ b/include/acpi/actypes.h | |||
@@ -518,6 +518,13 @@ typedef u64 acpi_integer; | |||
518 | #define ACPI_SLEEP_TYPE_INVALID 0xFF | 518 | #define ACPI_SLEEP_TYPE_INVALID 0xFF |
519 | 519 | ||
520 | /* | 520 | /* |
521 | * Sleep/Wake flags | ||
522 | */ | ||
523 | #define ACPI_NO_OPTIONAL_METHODS 0x00 /* Do not execute any optional methods */ | ||
524 | #define ACPI_EXECUTE_GTS 0x01 /* For enter sleep interface */ | ||
525 | #define ACPI_EXECUTE_BFS 0x02 /* For leave sleep prep interface */ | ||
526 | |||
527 | /* | ||
521 | * Standard notify values | 528 | * Standard notify values |
522 | */ | 529 | */ |
523 | #define ACPI_NOTIFY_BUS_CHECK (u8) 0x00 | 530 | #define ACPI_NOTIFY_BUS_CHECK (u8) 0x00 |
@@ -790,7 +797,7 @@ typedef u8 acpi_adr_space_type; | |||
790 | 797 | ||
791 | /* Sleep function dispatch */ | 798 | /* Sleep function dispatch */ |
792 | 799 | ||
793 | typedef acpi_status(*ACPI_SLEEP_FUNCTION) (u8 sleep_state); | 800 | typedef acpi_status(*ACPI_SLEEP_FUNCTION) (u8 sleep_state, u8 flags); |
794 | 801 | ||
795 | struct acpi_sleep_functions { | 802 | struct acpi_sleep_functions { |
796 | ACPI_SLEEP_FUNCTION legacy_function; | 803 | ACPI_SLEEP_FUNCTION legacy_function; |