diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/power/power.h | 9 | ||||
-rw-r--r-- | kernel/power/user.c | 39 |
2 files changed, 32 insertions, 16 deletions
diff --git a/kernel/power/power.h b/kernel/power/power.h index 23c17031ed21..6ca85fd4975f 100644 --- a/kernel/power/power.h +++ b/kernel/power/power.h | |||
@@ -156,15 +156,12 @@ struct resume_swap_area { | |||
156 | #define SNAPSHOT_FREE_SWAP_PAGES _IO(SNAPSHOT_IOC_MAGIC, 9) | 156 | #define SNAPSHOT_FREE_SWAP_PAGES _IO(SNAPSHOT_IOC_MAGIC, 9) |
157 | #define SNAPSHOT_SET_SWAP_FILE _IOW(SNAPSHOT_IOC_MAGIC, 10, unsigned int) | 157 | #define SNAPSHOT_SET_SWAP_FILE _IOW(SNAPSHOT_IOC_MAGIC, 10, unsigned int) |
158 | #define SNAPSHOT_S2RAM _IO(SNAPSHOT_IOC_MAGIC, 11) | 158 | #define SNAPSHOT_S2RAM _IO(SNAPSHOT_IOC_MAGIC, 11) |
159 | #define SNAPSHOT_PMOPS _IOW(SNAPSHOT_IOC_MAGIC, 12, unsigned int) | ||
160 | #define SNAPSHOT_SET_SWAP_AREA _IOW(SNAPSHOT_IOC_MAGIC, 13, \ | 159 | #define SNAPSHOT_SET_SWAP_AREA _IOW(SNAPSHOT_IOC_MAGIC, 13, \ |
161 | struct resume_swap_area) | 160 | struct resume_swap_area) |
162 | #define SNAPSHOT_GET_IMAGE_SIZE _IOR(SNAPSHOT_IOC_MAGIC, 14, loff_t) | 161 | #define SNAPSHOT_GET_IMAGE_SIZE _IOR(SNAPSHOT_IOC_MAGIC, 14, loff_t) |
163 | #define SNAPSHOT_IOC_MAXNR 14 | 162 | #define SNAPSHOT_PLATFORM_SUPPORT _IO(SNAPSHOT_IOC_MAGIC, 15) |
164 | 163 | #define SNAPSHOT_POWER_OFF _IO(SNAPSHOT_IOC_MAGIC, 16) | |
165 | #define PMOPS_PREPARE 1 | 164 | #define SNAPSHOT_IOC_MAXNR 16 |
166 | #define PMOPS_ENTER 2 | ||
167 | #define PMOPS_FINISH 3 | ||
168 | 165 | ||
169 | /* If unset, the snapshot device cannot be open. */ | 166 | /* If unset, the snapshot device cannot be open. */ |
170 | extern atomic_t snapshot_device_available; | 167 | extern atomic_t snapshot_device_available; |
diff --git a/kernel/power/user.c b/kernel/power/user.c index 88aac26e598a..de3fb433ae39 100644 --- a/kernel/power/user.c +++ b/kernel/power/user.c | |||
@@ -28,6 +28,18 @@ | |||
28 | 28 | ||
29 | #include "power.h" | 29 | #include "power.h" |
30 | 30 | ||
31 | /* | ||
32 | * NOTE: The SNAPSHOT_PMOPS ioctl is obsolete and will be removed in the | ||
33 | * future. It is only preserved here for compatibility with existing userland | ||
34 | * utilities. | ||
35 | */ | ||
36 | #define SNAPSHOT_PMOPS _IOW(SNAPSHOT_IOC_MAGIC, 12, unsigned int) | ||
37 | |||
38 | #define PMOPS_PREPARE 1 | ||
39 | #define PMOPS_ENTER 2 | ||
40 | #define PMOPS_FINISH 3 | ||
41 | |||
42 | |||
31 | #define SNAPSHOT_MINOR 231 | 43 | #define SNAPSHOT_MINOR 231 |
32 | 44 | ||
33 | static struct snapshot_data { | 45 | static struct snapshot_data { |
@@ -36,7 +48,7 @@ static struct snapshot_data { | |||
36 | int mode; | 48 | int mode; |
37 | char frozen; | 49 | char frozen; |
38 | char ready; | 50 | char ready; |
39 | char platform_suspend; | 51 | char platform_support; |
40 | } snapshot_state; | 52 | } snapshot_state; |
41 | 53 | ||
42 | atomic_t snapshot_device_available = ATOMIC_INIT(1); | 54 | atomic_t snapshot_device_available = ATOMIC_INIT(1); |
@@ -70,7 +82,7 @@ static int snapshot_open(struct inode *inode, struct file *filp) | |||
70 | } | 82 | } |
71 | data->frozen = 0; | 83 | data->frozen = 0; |
72 | data->ready = 0; | 84 | data->ready = 0; |
73 | data->platform_suspend = 0; | 85 | data->platform_support = 0; |
74 | 86 | ||
75 | return 0; | 87 | return 0; |
76 | } | 88 | } |
@@ -183,7 +195,7 @@ static int snapshot_ioctl(struct inode *inode, struct file *filp, | |||
183 | error = -EPERM; | 195 | error = -EPERM; |
184 | break; | 196 | break; |
185 | } | 197 | } |
186 | error = hibernation_snapshot(data->platform_suspend); | 198 | error = hibernation_snapshot(data->platform_support); |
187 | if (!error) | 199 | if (!error) |
188 | error = put_user(in_suspend, (unsigned int __user *)arg); | 200 | error = put_user(in_suspend, (unsigned int __user *)arg); |
189 | if (!error) | 201 | if (!error) |
@@ -197,7 +209,7 @@ static int snapshot_ioctl(struct inode *inode, struct file *filp, | |||
197 | error = -EPERM; | 209 | error = -EPERM; |
198 | break; | 210 | break; |
199 | } | 211 | } |
200 | error = hibernation_restore(data->platform_suspend); | 212 | error = hibernation_restore(data->platform_support); |
201 | break; | 213 | break; |
202 | 214 | ||
203 | case SNAPSHOT_FREE: | 215 | case SNAPSHOT_FREE: |
@@ -285,26 +297,33 @@ static int snapshot_ioctl(struct inode *inode, struct file *filp, | |||
285 | mutex_unlock(&pm_mutex); | 297 | mutex_unlock(&pm_mutex); |
286 | break; | 298 | break; |
287 | 299 | ||
288 | case SNAPSHOT_PMOPS: | 300 | case SNAPSHOT_PLATFORM_SUPPORT: |
301 | data->platform_support = !!arg; | ||
302 | break; | ||
303 | |||
304 | case SNAPSHOT_POWER_OFF: | ||
305 | if (data->platform_support) | ||
306 | error = hibernation_platform_enter(); | ||
307 | break; | ||
308 | |||
309 | case SNAPSHOT_PMOPS: /* This ioctl is deprecated */ | ||
289 | error = -EINVAL; | 310 | error = -EINVAL; |
290 | 311 | ||
291 | switch (arg) { | 312 | switch (arg) { |
292 | 313 | ||
293 | case PMOPS_PREPARE: | 314 | case PMOPS_PREPARE: |
294 | data->platform_suspend = 1; | 315 | data->platform_support = 1; |
295 | error = 0; | 316 | error = 0; |
296 | break; | 317 | break; |
297 | 318 | ||
298 | case PMOPS_ENTER: | 319 | case PMOPS_ENTER: |
299 | if (data->platform_suspend) | 320 | if (data->platform_support) |
300 | error = hibernation_platform_enter(); | 321 | error = hibernation_platform_enter(); |
301 | |||
302 | break; | 322 | break; |
303 | 323 | ||
304 | case PMOPS_FINISH: | 324 | case PMOPS_FINISH: |
305 | if (data->platform_suspend) | 325 | if (data->platform_support) |
306 | error = 0; | 326 | error = 0; |
307 | |||
308 | break; | 327 | break; |
309 | 328 | ||
310 | default: | 329 | default: |