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; |
