diff options
Diffstat (limited to 'kernel/power')
-rw-r--r-- | kernel/power/power.h | 10 | ||||
-rw-r--r-- | kernel/power/user.c | 18 |
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. */ |
166 | extern atomic_t snapshot_device_available; | 166 | extern 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 | } |