Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 82364
b: refs/heads/master
c: eb57c1c
h: refs/heads/master
v: v3
  • Loading branch information
Rafael J. Wysocki authored and Len Brown committed Feb 1, 2008
1 parent 7fd80a1 commit 6faa7ae
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 35 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: af508b34d27e3341287d89e0eae6752fdb1b873f
refs/heads/master: eb57c1cf059630454b40fb8bb124e3f318d241f8
24 changes: 6 additions & 18 deletions trunk/Documentation/power/userland-swsusp.txt
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,12 @@ SNAPSHOT_SET_SWAP_AREA - set the resume partition and the offset (in <PAGE_SIZE>
recommended to always use this call, because the code to set the resume
partition may be removed from future kernels

SNAPSHOT_PLATFORM_SUPPORT - enable/disable the hibernation platform support,
depending on the argument value (enable, if the argument is nonzero)

SNAPSHOT_POWER_OFF - make the kernel transition the system to the hibernation
state (eg. ACPI S4) using the platform (eg. ACPI) driver

SNAPSHOT_S2RAM - suspend to RAM; using this call causes the kernel to
immediately enter the suspend-to-RAM state, so this call must always
be preceded by the SNAPSHOT_FREEZE call and it is also necessary
Expand All @@ -95,24 +101,6 @@ SNAPSHOT_S2RAM - suspend to RAM; using this call causes the kernel to
to resume the system from RAM if there's enough battery power or restore
its state on the basis of the saved suspend image otherwise)

SNAPSHOT_PMOPS - enable the usage of the hibernation_ops->prepare,
hibernate_ops->enter and hibernation_ops->finish methods (the in-kernel
swsusp knows these as the "platform method") which are needed on many
machines to (among others) speed up the resume by letting the BIOS skip
some steps or to let the system recognise the correct state of the
hardware after the resume (in particular on many machines this ensures
that unplugged AC adapters get correctly detected and that kacpid does
not run wild after the resume). The last ioctl() argument can take one
of the three values, defined in kernel/power/power.h:
PMOPS_PREPARE - make the kernel carry out the
hibernation_ops->prepare() operation
PMOPS_ENTER - make the kernel power off the system by calling
hibernation_ops->enter()
PMOPS_FINISH - make the kernel carry out the
hibernation_ops->finish() operation
Note that the actual constants are misnamed because they surface
internal kernel implementation details that have changed.

The device's read() operation can be used to transfer the snapshot image from
the kernel. It has the following limitations:
- you cannot read() more than one virtual memory page at a time
Expand Down
9 changes: 3 additions & 6 deletions trunk/kernel/power/power.h
Original file line number Diff line number Diff line change
Expand Up @@ -156,15 +156,12 @@ struct resume_swap_area {
#define SNAPSHOT_FREE_SWAP_PAGES _IO(SNAPSHOT_IOC_MAGIC, 9)
#define SNAPSHOT_SET_SWAP_FILE _IOW(SNAPSHOT_IOC_MAGIC, 10, unsigned int)
#define SNAPSHOT_S2RAM _IO(SNAPSHOT_IOC_MAGIC, 11)
#define SNAPSHOT_PMOPS _IOW(SNAPSHOT_IOC_MAGIC, 12, unsigned int)
#define SNAPSHOT_SET_SWAP_AREA _IOW(SNAPSHOT_IOC_MAGIC, 13, \
struct resume_swap_area)
#define SNAPSHOT_GET_IMAGE_SIZE _IOR(SNAPSHOT_IOC_MAGIC, 14, loff_t)
#define SNAPSHOT_IOC_MAXNR 14

#define PMOPS_PREPARE 1
#define PMOPS_ENTER 2
#define PMOPS_FINISH 3
#define SNAPSHOT_PLATFORM_SUPPORT _IO(SNAPSHOT_IOC_MAGIC, 15)
#define SNAPSHOT_POWER_OFF _IO(SNAPSHOT_IOC_MAGIC, 16)
#define SNAPSHOT_IOC_MAXNR 16

/* If unset, the snapshot device cannot be open. */
extern atomic_t snapshot_device_available;
Expand Down
39 changes: 29 additions & 10 deletions trunk/kernel/power/user.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,18 @@

#include "power.h"

/*
* NOTE: The SNAPSHOT_PMOPS ioctl is obsolete and will be removed in the
* future. It is only preserved here for compatibility with existing userland
* utilities.
*/
#define SNAPSHOT_PMOPS _IOW(SNAPSHOT_IOC_MAGIC, 12, unsigned int)

#define PMOPS_PREPARE 1
#define PMOPS_ENTER 2
#define PMOPS_FINISH 3


#define SNAPSHOT_MINOR 231

static struct snapshot_data {
Expand All @@ -36,7 +48,7 @@ static struct snapshot_data {
int mode;
char frozen;
char ready;
char platform_suspend;
char platform_support;
} snapshot_state;

atomic_t snapshot_device_available = ATOMIC_INIT(1);
Expand Down Expand Up @@ -70,7 +82,7 @@ static int snapshot_open(struct inode *inode, struct file *filp)
}
data->frozen = 0;
data->ready = 0;
data->platform_suspend = 0;
data->platform_support = 0;

return 0;
}
Expand Down Expand Up @@ -183,7 +195,7 @@ static int snapshot_ioctl(struct inode *inode, struct file *filp,
error = -EPERM;
break;
}
error = hibernation_snapshot(data->platform_suspend);
error = hibernation_snapshot(data->platform_support);
if (!error)
error = put_user(in_suspend, (unsigned int __user *)arg);
if (!error)
Expand All @@ -197,7 +209,7 @@ static int snapshot_ioctl(struct inode *inode, struct file *filp,
error = -EPERM;
break;
}
error = hibernation_restore(data->platform_suspend);
error = hibernation_restore(data->platform_support);
break;

case SNAPSHOT_FREE:
Expand Down Expand Up @@ -285,26 +297,33 @@ static int snapshot_ioctl(struct inode *inode, struct file *filp,
mutex_unlock(&pm_mutex);
break;

case SNAPSHOT_PMOPS:
case SNAPSHOT_PLATFORM_SUPPORT:
data->platform_support = !!arg;
break;

case SNAPSHOT_POWER_OFF:
if (data->platform_support)
error = hibernation_platform_enter();
break;

case SNAPSHOT_PMOPS: /* This ioctl is deprecated */
error = -EINVAL;

switch (arg) {

case PMOPS_PREPARE:
data->platform_suspend = 1;
data->platform_support = 1;
error = 0;
break;

case PMOPS_ENTER:
if (data->platform_suspend)
if (data->platform_support)
error = hibernation_platform_enter();

break;

case PMOPS_FINISH:
if (data->platform_suspend)
if (data->platform_support)
error = 0;

break;

default:
Expand Down

0 comments on commit 6faa7ae

Please sign in to comment.