aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation/power/userland-swsusp.txt
diff options
context:
space:
mode:
Diffstat (limited to 'Documentation/power/userland-swsusp.txt')
-rw-r--r--Documentation/power/userland-swsusp.txt82
1 files changed, 29 insertions, 53 deletions
diff --git a/Documentation/power/userland-swsusp.txt b/Documentation/power/userland-swsusp.txt
index e00c6cf09e85..7b99636564c8 100644
--- a/Documentation/power/userland-swsusp.txt
+++ b/Documentation/power/userland-swsusp.txt
@@ -14,7 +14,7 @@ are going to develop your own suspend/resume utilities.
14 14
15The interface consists of a character device providing the open(), 15The interface consists of a character device providing the open(),
16release(), read(), and write() operations as well as several ioctl() 16release(), read(), and write() operations as well as several ioctl()
17commands defined in kernel/power/power.h. The major and minor 17commands defined in include/linux/suspend_ioctls.h . The major and minor
18numbers of the device are, respectively, 10 and 231, and they can 18numbers of the device are, respectively, 10 and 231, and they can
19be read from /sys/class/misc/snapshot/dev. 19be read from /sys/class/misc/snapshot/dev.
20 20
@@ -27,17 +27,17 @@ once at a time.
27The ioctl() commands recognized by the device are: 27The ioctl() commands recognized by the device are:
28 28
29SNAPSHOT_FREEZE - freeze user space processes (the current process is 29SNAPSHOT_FREEZE - freeze user space processes (the current process is
30 not frozen); this is required for SNAPSHOT_ATOMIC_SNAPSHOT 30 not frozen); this is required for SNAPSHOT_CREATE_IMAGE
31 and SNAPSHOT_ATOMIC_RESTORE to succeed 31 and SNAPSHOT_ATOMIC_RESTORE to succeed
32 32
33SNAPSHOT_UNFREEZE - thaw user space processes frozen by SNAPSHOT_FREEZE 33SNAPSHOT_UNFREEZE - thaw user space processes frozen by SNAPSHOT_FREEZE
34 34
35SNAPSHOT_ATOMIC_SNAPSHOT - create a snapshot of the system memory; the 35SNAPSHOT_CREATE_IMAGE - create a snapshot of the system memory; the
36 last argument of ioctl() should be a pointer to an int variable, 36 last argument of ioctl() should be a pointer to an int variable,
37 the value of which will indicate whether the call returned after 37 the value of which will indicate whether the call returned after
38 creating the snapshot (1) or after restoring the system memory state 38 creating the snapshot (1) or after restoring the system memory state
39 from it (0) (after resume the system finds itself finishing the 39 from it (0) (after resume the system finds itself finishing the
40 SNAPSHOT_ATOMIC_SNAPSHOT ioctl() again); after the snapshot 40 SNAPSHOT_CREATE_IMAGE ioctl() again); after the snapshot
41 has been created the read() operation can be used to transfer 41 has been created the read() operation can be used to transfer
42 it out of the kernel 42 it out of the kernel
43 43
@@ -49,39 +49,37 @@ SNAPSHOT_ATOMIC_RESTORE - restore the system memory state from the
49 49
50SNAPSHOT_FREE - free memory allocated for the snapshot image 50SNAPSHOT_FREE - free memory allocated for the snapshot image
51 51
52SNAPSHOT_SET_IMAGE_SIZE - set the preferred maximum size of the image 52SNAPSHOT_PREF_IMAGE_SIZE - set the preferred maximum size of the image
53 (the kernel will do its best to ensure the image size will not exceed 53 (the kernel will do its best to ensure the image size will not exceed
54 this number, but if it turns out to be impossible, the kernel will 54 this number, but if it turns out to be impossible, the kernel will
55 create the smallest image possible) 55 create the smallest image possible)
56 56
57SNAPSHOT_AVAIL_SWAP - return the amount of available swap in bytes (the last 57SNAPSHOT_GET_IMAGE_SIZE - return the actual size of the hibernation image
58 argument should be a pointer to an unsigned int variable that will 58
59SNAPSHOT_AVAIL_SWAP_SIZE - return the amount of available swap in bytes (the
60 last argument should be a pointer to an unsigned int variable that will
59 contain the result if the call is successful). 61 contain the result if the call is successful).
60 62
61SNAPSHOT_GET_SWAP_PAGE - allocate a swap page from the resume partition 63SNAPSHOT_ALLOC_SWAP_PAGE - allocate a swap page from the resume partition
62 (the last argument should be a pointer to a loff_t variable that 64 (the last argument should be a pointer to a loff_t variable that
63 will contain the swap page offset if the call is successful) 65 will contain the swap page offset if the call is successful)
64 66
65SNAPSHOT_FREE_SWAP_PAGES - free all swap pages allocated with 67SNAPSHOT_FREE_SWAP_PAGES - free all swap pages allocated by
66 SNAPSHOT_GET_SWAP_PAGE 68 SNAPSHOT_ALLOC_SWAP_PAGE
67
68SNAPSHOT_SET_SWAP_FILE - set the resume partition (the last ioctl() argument
69 should specify the device's major and minor numbers in the old
70 two-byte format, as returned by the stat() function in the .st_rdev
71 member of the stat structure)
72 69
73SNAPSHOT_SET_SWAP_AREA - set the resume partition and the offset (in <PAGE_SIZE> 70SNAPSHOT_SET_SWAP_AREA - set the resume partition and the offset (in <PAGE_SIZE>
74 units) from the beginning of the partition at which the swap header is 71 units) from the beginning of the partition at which the swap header is
75 located (the last ioctl() argument should point to a struct 72 located (the last ioctl() argument should point to a struct
76 resume_swap_area, as defined in kernel/power/power.h, containing the 73 resume_swap_area, as defined in kernel/power/suspend_ioctls.h,
77 resume device specification, as for the SNAPSHOT_SET_SWAP_FILE ioctl(), 74 containing the resume device specification and the offset); for swap
78 and the offset); for swap partitions the offset is always 0, but it is 75 partitions the offset is always 0, but it is different from zero for
79 different to zero for swap files (please see 76 swap files (see Documentation/swsusp-and-swap-files.txt for details).
80 Documentation/swsusp-and-swap-files.txt for details). 77
81 The SNAPSHOT_SET_SWAP_AREA ioctl() is considered as a replacement for 78SNAPSHOT_PLATFORM_SUPPORT - enable/disable the hibernation platform support,
82 SNAPSHOT_SET_SWAP_FILE which is regarded as obsolete. It is 79 depending on the argument value (enable, if the argument is nonzero)
83 recommended to always use this call, because the code to set the resume 80
84 partition may be removed from future kernels 81SNAPSHOT_POWER_OFF - make the kernel transition the system to the hibernation
82 state (eg. ACPI S4) using the platform (eg. ACPI) driver
85 83
86SNAPSHOT_S2RAM - suspend to RAM; using this call causes the kernel to 84SNAPSHOT_S2RAM - suspend to RAM; using this call causes the kernel to
87 immediately enter the suspend-to-RAM state, so this call must always 85 immediately enter the suspend-to-RAM state, so this call must always
@@ -93,24 +91,6 @@ SNAPSHOT_S2RAM - suspend to RAM; using this call causes the kernel to
93 to resume the system from RAM if there's enough battery power or restore 91 to resume the system from RAM if there's enough battery power or restore
94 its state on the basis of the saved suspend image otherwise) 92 its state on the basis of the saved suspend image otherwise)
95 93
96SNAPSHOT_PMOPS - enable the usage of the hibernation_ops->prepare,
97 hibernate_ops->enter and hibernation_ops->finish methods (the in-kernel
98 swsusp knows these as the "platform method") which are needed on many
99 machines to (among others) speed up the resume by letting the BIOS skip
100 some steps or to let the system recognise the correct state of the
101 hardware after the resume (in particular on many machines this ensures
102 that unplugged AC adapters get correctly detected and that kacpid does
103 not run wild after the resume). The last ioctl() argument can take one
104 of the three values, defined in kernel/power/power.h:
105 PMOPS_PREPARE - make the kernel carry out the
106 hibernation_ops->prepare() operation
107 PMOPS_ENTER - make the kernel power off the system by calling
108 hibernation_ops->enter()
109 PMOPS_FINISH - make the kernel carry out the
110 hibernation_ops->finish() operation
111 Note that the actual constants are misnamed because they surface
112 internal kernel implementation details that have changed.
113
114The device's read() operation can be used to transfer the snapshot image from 94The device's read() operation can be used to transfer the snapshot image from
115the kernel. It has the following limitations: 95the kernel. It has the following limitations:
116- you cannot read() more than one virtual memory page at a time 96- you cannot read() more than one virtual memory page at a time
@@ -122,7 +102,7 @@ The device's write() operation is used for uploading the system memory snapshot
122into the kernel. It has the same limitations as the read() operation. 102into the kernel. It has the same limitations as the read() operation.
123 103
124The release() operation frees all memory allocated for the snapshot image 104The release() operation frees all memory allocated for the snapshot image
125and all swap pages allocated with SNAPSHOT_GET_SWAP_PAGE (if any). 105and all swap pages allocated with SNAPSHOT_ALLOC_SWAP_PAGE (if any).
126Thus it is not necessary to use either SNAPSHOT_FREE or 106Thus it is not necessary to use either SNAPSHOT_FREE or
127SNAPSHOT_FREE_SWAP_PAGES before closing the device (in fact it will also 107SNAPSHOT_FREE_SWAP_PAGES before closing the device (in fact it will also
128unfreeze user space processes frozen by SNAPSHOT_UNFREEZE if they are 108unfreeze user space processes frozen by SNAPSHOT_UNFREEZE if they are
@@ -133,16 +113,12 @@ snapshot image from/to the kernel will use a swap parition, called the resume
133partition, or a swap file as storage space (if a swap file is used, the resume 113partition, or a swap file as storage space (if a swap file is used, the resume
134partition is the partition that holds this file). However, this is not really 114partition is the partition that holds this file). However, this is not really
135required, as they can use, for example, a special (blank) suspend partition or 115required, as they can use, for example, a special (blank) suspend partition or
136a file on a partition that is unmounted before SNAPSHOT_ATOMIC_SNAPSHOT and 116a file on a partition that is unmounted before SNAPSHOT_CREATE_IMAGE and
137mounted afterwards. 117mounted afterwards.
138 118
139These utilities SHOULD NOT make any assumptions regarding the ordering of 119These utilities MUST NOT make any assumptions regarding the ordering of
140data within the snapshot image, except for the image header that MAY be 120data within the snapshot image. The contents of the image are entirely owned
141assumed to start with an swsusp_info structure, as specified in 121by the kernel and its structure may be changed in future kernel releases.
142kernel/power/power.h. This structure MAY be used by the userland utilities
143to obtain some information about the snapshot image, such as the size
144of the snapshot image, including the metadata and the header itself,
145contained in the .size member of swsusp_info.
146 122
147The snapshot image MUST be written to the kernel unaltered (ie. all of the image 123The snapshot image MUST be written to the kernel unaltered (ie. all of the image
148data, metadata and header MUST be written in _exactly_ the same amount, form 124data, metadata and header MUST be written in _exactly_ the same amount, form
@@ -159,7 +135,7 @@ means, such as checksums, to ensure the integrity of the snapshot image.
159The suspending and resuming utilities MUST lock themselves in memory, 135The suspending and resuming utilities MUST lock themselves in memory,
160preferrably using mlockall(), before calling SNAPSHOT_FREEZE. 136preferrably using mlockall(), before calling SNAPSHOT_FREEZE.
161 137
162The suspending utility MUST check the value stored by SNAPSHOT_ATOMIC_SNAPSHOT 138The suspending utility MUST check the value stored by SNAPSHOT_CREATE_IMAGE
163in the memory location pointed to by the last argument of ioctl() and proceed 139in the memory location pointed to by the last argument of ioctl() and proceed
164in accordance with it: 140in accordance with it:
1651. If the value is 1 (ie. the system memory snapshot has just been 1411. If the value is 1 (ie. the system memory snapshot has just been
@@ -173,7 +149,7 @@ in accordance with it:
173 image has been saved. 149 image has been saved.
174 (b) The suspending utility SHOULD NOT attempt to perform any 150 (b) The suspending utility SHOULD NOT attempt to perform any
175 file system operations (including reads) on the file systems 151 file system operations (including reads) on the file systems
176 that were mounted before SNAPSHOT_ATOMIC_SNAPSHOT has been 152 that were mounted before SNAPSHOT_CREATE_IMAGE has been
177 called. However, it MAY mount a file system that was not 153 called. However, it MAY mount a file system that was not
178 mounted at that time and perform some operations on it (eg. 154 mounted at that time and perform some operations on it (eg.
179 use it for saving the image). 155 use it for saving the image).