aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/power
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/power')
-rw-r--r--kernel/power/power.h10
-rw-r--r--kernel/power/user.c18
2 files changed, 21 insertions, 7 deletions
diff --git a/kernel/power/power.h b/kernel/power/power.h
index 8837ea334e33..0dd66fabd393 100644
--- a/kernel/power/power.h
+++ b/kernel/power/power.h
@@ -147,12 +147,8 @@ struct resume_swap_area {
147#define SNAPSHOT_IOC_MAGIC '3' 147#define SNAPSHOT_IOC_MAGIC '3'
148#define SNAPSHOT_FREEZE _IO(SNAPSHOT_IOC_MAGIC, 1) 148#define SNAPSHOT_FREEZE _IO(SNAPSHOT_IOC_MAGIC, 1)
149#define SNAPSHOT_UNFREEZE _IO(SNAPSHOT_IOC_MAGIC, 2) 149#define SNAPSHOT_UNFREEZE _IO(SNAPSHOT_IOC_MAGIC, 2)
150#define SNAPSHOT_ATOMIC_SNAPSHOT _IOW(SNAPSHOT_IOC_MAGIC, 3, void *)
151#define SNAPSHOT_ATOMIC_RESTORE _IO(SNAPSHOT_IOC_MAGIC, 4) 150#define SNAPSHOT_ATOMIC_RESTORE _IO(SNAPSHOT_IOC_MAGIC, 4)
152#define SNAPSHOT_FREE _IO(SNAPSHOT_IOC_MAGIC, 5) 151#define SNAPSHOT_FREE _IO(SNAPSHOT_IOC_MAGIC, 5)
153#define SNAPSHOT_SET_IMAGE_SIZE _IOW(SNAPSHOT_IOC_MAGIC, 6, unsigned long)
154#define SNAPSHOT_AVAIL_SWAP _IOR(SNAPSHOT_IOC_MAGIC, 7, void *)
155#define SNAPSHOT_GET_SWAP_PAGE _IOR(SNAPSHOT_IOC_MAGIC, 8, void *)
156#define SNAPSHOT_FREE_SWAP_PAGES _IO(SNAPSHOT_IOC_MAGIC, 9) 152#define SNAPSHOT_FREE_SWAP_PAGES _IO(SNAPSHOT_IOC_MAGIC, 9)
157#define SNAPSHOT_S2RAM _IO(SNAPSHOT_IOC_MAGIC, 11) 153#define SNAPSHOT_S2RAM _IO(SNAPSHOT_IOC_MAGIC, 11)
158#define SNAPSHOT_SET_SWAP_AREA _IOW(SNAPSHOT_IOC_MAGIC, 13, \ 154#define SNAPSHOT_SET_SWAP_AREA _IOW(SNAPSHOT_IOC_MAGIC, 13, \
@@ -160,7 +156,11 @@ struct resume_swap_area {
160#define SNAPSHOT_GET_IMAGE_SIZE _IOR(SNAPSHOT_IOC_MAGIC, 14, loff_t) 156#define SNAPSHOT_GET_IMAGE_SIZE _IOR(SNAPSHOT_IOC_MAGIC, 14, loff_t)
161#define SNAPSHOT_PLATFORM_SUPPORT _IO(SNAPSHOT_IOC_MAGIC, 15) 157#define SNAPSHOT_PLATFORM_SUPPORT _IO(SNAPSHOT_IOC_MAGIC, 15)
162#define SNAPSHOT_POWER_OFF _IO(SNAPSHOT_IOC_MAGIC, 16) 158#define SNAPSHOT_POWER_OFF _IO(SNAPSHOT_IOC_MAGIC, 16)
163#define SNAPSHOT_IOC_MAXNR 16 159#define SNAPSHOT_CREATE_IMAGE _IOW(SNAPSHOT_IOC_MAGIC, 17, int)
160#define SNAPSHOT_PREF_IMAGE_SIZE _IO(SNAPSHOT_IOC_MAGIC, 18)
161#define SNAPSHOT_AVAIL_SWAP_SIZE _IOR(SNAPSHOT_IOC_MAGIC, 19, loff_t)
162#define SNAPSHOT_ALLOC_SWAP_PAGE _IOR(SNAPSHOT_IOC_MAGIC, 20, loff_t)
163#define SNAPSHOT_IOC_MAXNR 20
164 164
165/* If unset, the snapshot device cannot be open. */ 165/* If unset, the snapshot device cannot be open. */
166extern atomic_t snapshot_device_available; 166extern atomic_t snapshot_device_available;
diff --git a/kernel/power/user.c b/kernel/power/user.c
index 5e866e078550..b902a7e3bd12 100644
--- a/kernel/power/user.c
+++ b/kernel/power/user.c
@@ -40,6 +40,16 @@
40#define PMOPS_ENTER 2 40#define PMOPS_ENTER 2
41#define PMOPS_FINISH 3 41#define PMOPS_FINISH 3
42 42
43/*
44 * NOTE: The following ioctl definitions are wrong and have been replaced with
45 * correct ones. They are only preserved here for compatibility with existing
46 * userland utilities and will be removed in the future.
47 */
48#define SNAPSHOT_ATOMIC_SNAPSHOT _IOW(SNAPSHOT_IOC_MAGIC, 3, void *)
49#define SNAPSHOT_SET_IMAGE_SIZE _IOW(SNAPSHOT_IOC_MAGIC, 6, unsigned long)
50#define SNAPSHOT_AVAIL_SWAP _IOR(SNAPSHOT_IOC_MAGIC, 7, void *)
51#define SNAPSHOT_GET_SWAP_PAGE _IOR(SNAPSHOT_IOC_MAGIC, 8, void *)
52
43 53
44#define SNAPSHOT_MINOR 231 54#define SNAPSHOT_MINOR 231
45 55
@@ -191,6 +201,7 @@ static int snapshot_ioctl(struct inode *inode, struct file *filp,
191 data->frozen = 0; 201 data->frozen = 0;
192 break; 202 break;
193 203
204 case SNAPSHOT_CREATE_IMAGE:
194 case SNAPSHOT_ATOMIC_SNAPSHOT: 205 case SNAPSHOT_ATOMIC_SNAPSHOT:
195 if (data->mode != O_RDONLY || !data->frozen || data->ready) { 206 if (data->mode != O_RDONLY || !data->frozen || data->ready) {
196 error = -EPERM; 207 error = -EPERM;
@@ -198,7 +209,7 @@ static int snapshot_ioctl(struct inode *inode, struct file *filp,
198 } 209 }
199 error = hibernation_snapshot(data->platform_support); 210 error = hibernation_snapshot(data->platform_support);
200 if (!error) 211 if (!error)
201 error = put_user(in_suspend, (unsigned int __user *)arg); 212 error = put_user(in_suspend, (int __user *)arg);
202 if (!error) 213 if (!error)
203 data->ready = 1; 214 data->ready = 1;
204 break; 215 break;
@@ -219,6 +230,7 @@ static int snapshot_ioctl(struct inode *inode, struct file *filp,
219 data->ready = 0; 230 data->ready = 0;
220 break; 231 break;
221 232
233 case SNAPSHOT_PREF_IMAGE_SIZE:
222 case SNAPSHOT_SET_IMAGE_SIZE: 234 case SNAPSHOT_SET_IMAGE_SIZE:
223 image_size = arg; 235 image_size = arg;
224 break; 236 break;
@@ -233,12 +245,14 @@ static int snapshot_ioctl(struct inode *inode, struct file *filp,
233 error = put_user(size, (loff_t __user *)arg); 245 error = put_user(size, (loff_t __user *)arg);
234 break; 246 break;
235 247
248 case SNAPSHOT_AVAIL_SWAP_SIZE:
236 case SNAPSHOT_AVAIL_SWAP: 249 case SNAPSHOT_AVAIL_SWAP:
237 size = count_swap_pages(data->swap, 1); 250 size = count_swap_pages(data->swap, 1);
238 size <<= PAGE_SHIFT; 251 size <<= PAGE_SHIFT;
239 error = put_user(size, (loff_t __user *)arg); 252 error = put_user(size, (loff_t __user *)arg);
240 break; 253 break;
241 254
255 case SNAPSHOT_ALLOC_SWAP_PAGE:
242 case SNAPSHOT_GET_SWAP_PAGE: 256 case SNAPSHOT_GET_SWAP_PAGE:
243 if (data->swap < 0 || data->swap >= MAX_SWAPFILES) { 257 if (data->swap < 0 || data->swap >= MAX_SWAPFILES) {
244 error = -ENODEV; 258 error = -ENODEV;
@@ -247,7 +261,7 @@ static int snapshot_ioctl(struct inode *inode, struct file *filp,
247 offset = alloc_swapdev_block(data->swap); 261 offset = alloc_swapdev_block(data->swap);
248 if (offset) { 262 if (offset) {
249 offset <<= PAGE_SHIFT; 263 offset <<= PAGE_SHIFT;
250 error = put_user(offset, (sector_t __user *)arg); 264 error = put_user(offset, (loff_t __user *)arg);
251 } else { 265 } else {
252 error = -ENOSPC; 266 error = -ENOSPC;
253 } 267 }