aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/power/interface.txt21
-rw-r--r--Documentation/power/states.txt13
-rw-r--r--Documentation/power/swsusp.txt14
-rw-r--r--include/linux/pm.h13
-rw-r--r--kernel/power/disk.c27
5 files changed, 34 insertions, 54 deletions
diff --git a/Documentation/power/interface.txt b/Documentation/power/interface.txt
index 74311d7e0f3c..8c5b41bf3f36 100644
--- a/Documentation/power/interface.txt
+++ b/Documentation/power/interface.txt
@@ -18,17 +18,10 @@ states.
18 18
19 19
20/sys/power/disk controls the operating mode of the suspend-to-disk 20/sys/power/disk controls the operating mode of the suspend-to-disk
21mechanism. Suspend-to-disk can be handled in several ways. The 21mechanism. Suspend-to-disk can be handled in several ways. We have a
22greatest distinction is who writes memory to disk - the firmware or 22few options for putting the system to sleep - using the platform driver
23the kernel. If the firmware does it, we assume that it also handles 23(e.g. ACPI or other pm_ops), powering off the system or rebooting the
24suspending the system. 24system (for testing).
25
26If the kernel does it, then we have three options for putting the system
27to sleep - using the platform driver (e.g. ACPI or other PM
28registers), powering off the system or rebooting the system (for
29testing). The system will support either 'firmware' or 'platform', and
30that is known a priori. But, the user may choose 'shutdown' or
31'reboot' as alternatives.
32 25
33Additionally, /sys/power/disk can be used to turn on one of the two testing 26Additionally, /sys/power/disk can be used to turn on one of the two testing
34modes of the suspend-to-disk mechanism: 'testproc' or 'test'. If the 27modes of the suspend-to-disk mechanism: 'testproc' or 'test'. If the
@@ -44,16 +37,12 @@ is being slow and which device drivers are misbehaving.
44Reading from this file will display what the mode is currently set 37Reading from this file will display what the mode is currently set
45to. Writing to this file will accept one of 38to. Writing to this file will accept one of
46 39
47 'firmware' 40 'platform' (only if the platform supports it)
48 'platform'
49 'shutdown' 41 'shutdown'
50 'reboot' 42 'reboot'
51 'testproc' 43 'testproc'
52 'test' 44 'test'
53 45
54It will only change to 'firmware' or 'platform' if the system supports
55it.
56
57/sys/power/image_size controls the size of the image created by 46/sys/power/image_size controls the size of the image created by
58the suspend-to-disk mechanism. It can be written a string 47the suspend-to-disk mechanism. It can be written a string
59representing a non-negative integer that will be used as an upper 48representing a non-negative integer that will be used as an upper
diff --git a/Documentation/power/states.txt b/Documentation/power/states.txt
index 0931a330d362..34800cc521bf 100644
--- a/Documentation/power/states.txt
+++ b/Documentation/power/states.txt
@@ -62,17 +62,18 @@ setup via another operating system for it to use. Despite the
62inconvenience, this method requires minimal work by the kernel, since 62inconvenience, this method requires minimal work by the kernel, since
63the firmware will also handle restoring memory contents on resume. 63the firmware will also handle restoring memory contents on resume.
64 64
65If the kernel is responsible for persistently saving state, a mechanism 65For suspend-to-disk, a mechanism called swsusp called 'swsusp' (Swap
66called 'swsusp' (Swap Suspend) is used to write memory contents to 66Suspend) is used to write memory contents to free swap space.
67free swap space. swsusp has some restrictive requirements, but should 67swsusp has some restrictive requirements, but should work in most
68work in most cases. Some, albeit outdated, documentation can be found 68cases. Some, albeit outdated, documentation can be found in
69in Documentation/power/swsusp.txt. 69Documentation/power/swsusp.txt. Alternatively, userspace can do most
70of the actual suspend to disk work, see userland-swsusp.txt.
70 71
71Once memory state is written to disk, the system may either enter a 72Once memory state is written to disk, the system may either enter a
72low-power state (like ACPI S4), or it may simply power down. Powering 73low-power state (like ACPI S4), or it may simply power down. Powering
73down offers greater savings, and allows this mechanism to work on any 74down offers greater savings, and allows this mechanism to work on any
74system. However, entering a real low-power state allows the user to 75system. However, entering a real low-power state allows the user to
75trigger wake up events (e.g. pressing a key or opening a laptop lid). 76trigger wake up events (e.g. pressing a key or opening a laptop lid).
76 77
77A transition from Suspend-to-Disk to the On state should take about 30 78A transition from Suspend-to-Disk to the On state should take about 30
78seconds, though it's typically a bit more with the current 79seconds, though it's typically a bit more with the current
diff --git a/Documentation/power/swsusp.txt b/Documentation/power/swsusp.txt
index 0761ff6c57ed..c55bd5079b90 100644
--- a/Documentation/power/swsusp.txt
+++ b/Documentation/power/swsusp.txt
@@ -156,8 +156,7 @@ instead set the PF_NOFREEZE process flag when creating the thread (and
156be very careful). 156be very careful).
157 157
158 158
159Q: What is the difference between "platform", "shutdown" and 159Q: What is the difference between "platform" and "shutdown"?
160"firmware" in /sys/power/disk?
161 160
162A: 161A:
163 162
@@ -166,11 +165,8 @@ shutdown: save state in linux, then tell bios to powerdown
166platform: save state in linux, then tell bios to powerdown and blink 165platform: save state in linux, then tell bios to powerdown and blink
167 "suspended led" 166 "suspended led"
168 167
169firmware: tell bios to save state itself [needs BIOS-specific suspend 168"platform" is actually right thing to do where supported, but
170 partition, and has very little to do with swsusp] 169"shutdown" is most reliable (except on ACPI systems).
171
172"platform" is actually right thing to do, but "shutdown" is most
173reliable.
174 170
175Q: I do not understand why you have such strong objections to idea of 171Q: I do not understand why you have such strong objections to idea of
176selective suspend. 172selective suspend.
@@ -388,8 +384,8 @@ while the system is asleep, maintaining the connection, using true sleep
388modes like "suspend-to-RAM" or "standby". (Don't write "disk" to the 384modes like "suspend-to-RAM" or "standby". (Don't write "disk" to the
389/sys/power/state file; write "standby" or "mem".) We've not seen any 385/sys/power/state file; write "standby" or "mem".) We've not seen any
390hardware that can use these modes through software suspend, although in 386hardware that can use these modes through software suspend, although in
391theory some systems might support "platform" or "firmware" modes that 387theory some systems might support "platform" modes that won't break the
392won't break the USB connections. 388USB connections.
393 389
394Remember that it's always a bad idea to unplug a disk drive containing a 390Remember that it's always a bad idea to unplug a disk drive containing a
395mounted filesystem. That's true even when your system is asleep! The 391mounted filesystem. That's true even when your system is asleep! The
diff --git a/include/linux/pm.h b/include/linux/pm.h
index dfced9188bdc..c2a55f94c29a 100644
--- a/include/linux/pm.h
+++ b/include/linux/pm.h
@@ -114,13 +114,12 @@ typedef int __bitwise suspend_disk_method_t;
114 114
115/* invalid must be 0 so struct pm_ops initialisers can leave it out */ 115/* invalid must be 0 so struct pm_ops initialisers can leave it out */
116#define PM_DISK_INVALID ((__force suspend_disk_method_t) 0) 116#define PM_DISK_INVALID ((__force suspend_disk_method_t) 0)
117#define PM_DISK_FIRMWARE ((__force suspend_disk_method_t) 1) 117#define PM_DISK_PLATFORM ((__force suspend_disk_method_t) 1)
118#define PM_DISK_PLATFORM ((__force suspend_disk_method_t) 2) 118#define PM_DISK_SHUTDOWN ((__force suspend_disk_method_t) 2)
119#define PM_DISK_SHUTDOWN ((__force suspend_disk_method_t) 3) 119#define PM_DISK_REBOOT ((__force suspend_disk_method_t) 3)
120#define PM_DISK_REBOOT ((__force suspend_disk_method_t) 4) 120#define PM_DISK_TEST ((__force suspend_disk_method_t) 4)
121#define PM_DISK_TEST ((__force suspend_disk_method_t) 5) 121#define PM_DISK_TESTPROC ((__force suspend_disk_method_t) 5)
122#define PM_DISK_TESTPROC ((__force suspend_disk_method_t) 6) 122#define PM_DISK_MAX ((__force suspend_disk_method_t) 6)
123#define PM_DISK_MAX ((__force suspend_disk_method_t) 7)
124 123
125/** 124/**
126 * struct pm_ops - Callbacks for managing platform dependent suspend states. 125 * struct pm_ops - Callbacks for managing platform dependent suspend states.
diff --git a/kernel/power/disk.c b/kernel/power/disk.c
index 4de2f69fe095..02e4fb69111a 100644
--- a/kernel/power/disk.c
+++ b/kernel/power/disk.c
@@ -122,8 +122,6 @@ static int prepare_processes(void)
122/** 122/**
123 * pm_suspend_disk - The granpappy of hibernation power management. 123 * pm_suspend_disk - The granpappy of hibernation power management.
124 * 124 *
125 * If we're going through the firmware, then get it over with quickly.
126 *
127 * If not, then call swsusp to do its thing, then figure out how 125 * If not, then call swsusp to do its thing, then figure out how
128 * to power down the system. 126 * to power down the system.
129 */ 127 */
@@ -292,7 +290,6 @@ late_initcall(software_resume);
292 290
293 291
294static const char * const pm_disk_modes[] = { 292static const char * const pm_disk_modes[] = {
295 [PM_DISK_FIRMWARE] = "firmware",
296 [PM_DISK_PLATFORM] = "platform", 293 [PM_DISK_PLATFORM] = "platform",
297 [PM_DISK_SHUTDOWN] = "shutdown", 294 [PM_DISK_SHUTDOWN] = "shutdown",
298 [PM_DISK_REBOOT] = "reboot", 295 [PM_DISK_REBOOT] = "reboot",
@@ -303,27 +300,25 @@ static const char * const pm_disk_modes[] = {
303/** 300/**
304 * disk - Control suspend-to-disk mode 301 * disk - Control suspend-to-disk mode
305 * 302 *
306 * Suspend-to-disk can be handled in several ways. The greatest 303 * Suspend-to-disk can be handled in several ways. We have a few options
307 * distinction is who writes memory to disk - the firmware or the OS. 304 * for putting the system to sleep - using the platform driver (e.g. ACPI
308 * If the firmware does it, we assume that it also handles suspending 305 * or other pm_ops), powering off the system or rebooting the system
309 * the system. 306 * (for testing) as well as the two test modes.
310 * If the OS does it, then we have three options for putting the system
311 * to sleep - using the platform driver (e.g. ACPI or other PM registers),
312 * powering off the system or rebooting the system (for testing).
313 * 307 *
314 * The system will support either 'firmware' or 'platform', and that is 308 * The system can support 'platform', and that is known a priori (and
315 * known a priori (and encoded in pm_ops). But, the user may choose 309 * encoded in pm_ops). However, the user may choose 'shutdown' or 'reboot'
316 * 'shutdown' or 'reboot' as alternatives. 310 * as alternatives, as well as the test modes 'test' and 'testproc'.
317 * 311 *
318 * show() will display what the mode is currently set to. 312 * show() will display what the mode is currently set to.
319 * store() will accept one of 313 * store() will accept one of
320 * 314 *
321 * 'firmware'
322 * 'platform' 315 * 'platform'
323 * 'shutdown' 316 * 'shutdown'
324 * 'reboot' 317 * 'reboot'
318 * 'test'
319 * 'testproc'
325 * 320 *
326 * It will only change to 'firmware' or 'platform' if the system 321 * It will only change to 'platform' if the system
327 * supports it (as determined from pm_ops->pm_disk_mode). 322 * supports it (as determined from pm_ops->pm_disk_mode).
328 */ 323 */
329 324
@@ -345,7 +340,7 @@ static ssize_t disk_store(struct subsystem * s, const char * buf, size_t n)
345 len = p ? p - buf : n; 340 len = p ? p - buf : n;
346 341
347 mutex_lock(&pm_mutex); 342 mutex_lock(&pm_mutex);
348 for (i = PM_DISK_FIRMWARE; i < PM_DISK_MAX; i++) { 343 for (i = PM_DISK_PLATFORM; i < PM_DISK_MAX; i++) {
349 if (!strncmp(buf, pm_disk_modes[i], len)) { 344 if (!strncmp(buf, pm_disk_modes[i], len)) {
350 mode = i; 345 mode = i;
351 break; 346 break;