aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/power/power.h9
-rw-r--r--kernel/power/user.c39
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. */
170extern atomic_t snapshot_device_available; 167extern 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
33static struct snapshot_data { 45static 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
42atomic_t snapshot_device_available = ATOMIC_INIT(1); 54atomic_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: