Merge branch 'suspend' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6
* 'suspend' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6: (38 commits) suspend: cleanup reference to swsusp_pg_dir[] PM: Remove obsolete /sys/devices/.../power/state docs Hibernation: Invoke suspend notifications after console switch Suspend: Invoke suspend notifications after console switch Suspend: Clean up suspend_64.c Suspend: Add config option to disable the freezer if architecture wants that ACPI: Print message before calling _PTS ACPI hibernation: Call _PTS before suspending devices Hibernation: Introduce begin() and end() callbacks ACPI suspend: Call _PTS before suspending devices ACPI: Separate disabling of GPEs from _PTS ACPI: Separate invocations of _GTS and _BFS from _PTS and _WAK Suspend: Introduce begin() and end() callbacks suspend: fix ia64 allmodconfig build ACPI: clear GPE earily in resume to avoid warning Suspend: Clean up Kconfig (V2) Hibernation: Clean up Kconfig (V2) Hibernation: Update messages Suspend: Use common prefix in messages Hibernation: Remove unnecessary variable declaration ...
This commit is contained in:
@@ -143,6 +143,7 @@ header-y += snmp.h
|
||||
header-y += sockios.h
|
||||
header-y += som.h
|
||||
header-y += sound.h
|
||||
header-y += suspend_ioctls.h
|
||||
header-y += taskstats.h
|
||||
header-y += telephony.h
|
||||
header-y += termios.h
|
||||
|
||||
@@ -228,6 +228,8 @@ static inline int notifier_to_errno(int ret)
|
||||
#define PM_POST_HIBERNATION 0x0002 /* Hibernation finished */
|
||||
#define PM_SUSPEND_PREPARE 0x0003 /* Going to suspend the system */
|
||||
#define PM_POST_SUSPEND 0x0004 /* Suspend finished */
|
||||
#define PM_RESTORE_PREPARE 0x0005 /* Going to restore a saved image */
|
||||
#define PM_POST_RESTORE 0x0006 /* Restore failed */
|
||||
|
||||
/* Console keyboard events.
|
||||
* Note: KBD_KEYCODE is always sent before KBD_UNBOUND_KEYCODE, KBD_UNICODE and
|
||||
|
||||
+29
-27
@@ -38,18 +38,16 @@ typedef int __bitwise suspend_state_t;
|
||||
* There is the %suspend_valid_only_mem function available that can be
|
||||
* assigned to this if the platform only supports mem sleep.
|
||||
*
|
||||
* @set_target: Tell the platform which system sleep state is going to be
|
||||
* entered.
|
||||
* @set_target() is executed right prior to suspending devices. The
|
||||
* information conveyed to the platform code by @set_target() should be
|
||||
* disregarded by the platform as soon as @finish() is executed and if
|
||||
* @prepare() fails. If @set_target() fails (ie. returns nonzero),
|
||||
* @begin: Initialise a transition to given system sleep state.
|
||||
* @begin() is executed right prior to suspending devices. The information
|
||||
* conveyed to the platform code by @begin() should be disregarded by it as
|
||||
* soon as @end() is executed. If @begin() fails (ie. returns nonzero),
|
||||
* @prepare(), @enter() and @finish() will not be called by the PM core.
|
||||
* This callback is optional. However, if it is implemented, the argument
|
||||
* passed to @enter() is meaningless and should be ignored.
|
||||
* passed to @enter() is redundant and should be ignored.
|
||||
*
|
||||
* @prepare: Prepare the platform for entering the system sleep state indicated
|
||||
* by @set_target().
|
||||
* by @begin().
|
||||
* @prepare() is called right after devices have been suspended (ie. the
|
||||
* appropriate .suspend() method has been executed for each device) and
|
||||
* before the nonboot CPUs are disabled (it is executed with IRQs enabled).
|
||||
@@ -57,8 +55,8 @@ typedef int __bitwise suspend_state_t;
|
||||
* error code otherwise, in which case the system cannot enter the desired
|
||||
* sleep state (@enter() and @finish() will not be called in that case).
|
||||
*
|
||||
* @enter: Enter the system sleep state indicated by @set_target() or
|
||||
* represented by the argument if @set_target() is not implemented.
|
||||
* @enter: Enter the system sleep state indicated by @begin() or represented by
|
||||
* the argument if @begin() is not implemented.
|
||||
* This callback is mandatory. It returns 0 on success or a negative
|
||||
* error code otherwise, in which case the system cannot enter the desired
|
||||
* sleep state.
|
||||
@@ -69,13 +67,22 @@ typedef int __bitwise suspend_state_t;
|
||||
* This callback is optional, but should be implemented by the platforms
|
||||
* that implement @prepare(). If implemented, it is always called after
|
||||
* @enter() (even if @enter() fails).
|
||||
*
|
||||
* @end: Called by the PM core right after resuming devices, to indicate to
|
||||
* the platform that the system has returned to the working state or
|
||||
* the transition to the sleep state has been aborted.
|
||||
* This callback is optional, but should be implemented by the platforms
|
||||
* that implement @begin(), but platforms implementing @begin() should
|
||||
* also provide a @end() which cleans up transitions aborted before
|
||||
* @enter().
|
||||
*/
|
||||
struct platform_suspend_ops {
|
||||
int (*valid)(suspend_state_t state);
|
||||
int (*set_target)(suspend_state_t state);
|
||||
int (*begin)(suspend_state_t state);
|
||||
int (*prepare)(void);
|
||||
int (*enter)(suspend_state_t state);
|
||||
void (*finish)(void);
|
||||
void (*end)(void);
|
||||
};
|
||||
|
||||
#ifdef CONFIG_SUSPEND
|
||||
@@ -129,14 +136,17 @@ extern void mark_free_pages(struct zone *zone);
|
||||
/**
|
||||
* struct platform_hibernation_ops - hibernation platform support
|
||||
*
|
||||
* The methods in this structure allow a platform to override the default
|
||||
* mechanism of shutting down the machine during a hibernation transition.
|
||||
* The methods in this structure allow a platform to carry out special
|
||||
* operations required by it during a hibernation transition.
|
||||
*
|
||||
* All three methods must be assigned.
|
||||
* All the methods below must be implemented.
|
||||
*
|
||||
* @start: Tell the platform driver that we're starting hibernation.
|
||||
* @begin: Tell the platform driver that we're starting hibernation.
|
||||
* Called right after shrinking memory and before freezing devices.
|
||||
*
|
||||
* @end: Called by the PM core right after resuming devices, to indicate to
|
||||
* the platform that the system has returned to the working state.
|
||||
*
|
||||
* @pre_snapshot: Prepare the platform for creating the hibernation image.
|
||||
* Called right after devices have been frozen and before the nonboot
|
||||
* CPUs are disabled (runs with IRQs on).
|
||||
@@ -171,7 +181,8 @@ extern void mark_free_pages(struct zone *zone);
|
||||
* thawing devices (runs with IRQs on).
|
||||
*/
|
||||
struct platform_hibernation_ops {
|
||||
int (*start)(void);
|
||||
int (*begin)(void);
|
||||
void (*end)(void);
|
||||
int (*pre_snapshot)(void);
|
||||
void (*finish)(void);
|
||||
int (*prepare)(void);
|
||||
@@ -213,17 +224,8 @@ void save_processor_state(void);
|
||||
void restore_processor_state(void);
|
||||
|
||||
/* kernel/power/main.c */
|
||||
extern struct blocking_notifier_head pm_chain_head;
|
||||
|
||||
static inline int register_pm_notifier(struct notifier_block *nb)
|
||||
{
|
||||
return blocking_notifier_chain_register(&pm_chain_head, nb);
|
||||
}
|
||||
|
||||
static inline int unregister_pm_notifier(struct notifier_block *nb)
|
||||
{
|
||||
return blocking_notifier_chain_unregister(&pm_chain_head, nb);
|
||||
}
|
||||
extern int register_pm_notifier(struct notifier_block *nb);
|
||||
extern int unregister_pm_notifier(struct notifier_block *nb);
|
||||
|
||||
#define pm_notifier(fn, pri) { \
|
||||
static struct notifier_block fn##_nb = \
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
#ifndef _LINUX_SUSPEND_IOCTLS_H
|
||||
#define _LINUX_SUSPEND_IOCTLS_H
|
||||
|
||||
/*
|
||||
* This structure is used to pass the values needed for the identification
|
||||
* of the resume swap area from a user space to the kernel via the
|
||||
* SNAPSHOT_SET_SWAP_AREA ioctl
|
||||
*/
|
||||
struct resume_swap_area {
|
||||
loff_t offset;
|
||||
u_int32_t dev;
|
||||
} __attribute__((packed));
|
||||
|
||||
#define SNAPSHOT_IOC_MAGIC '3'
|
||||
#define SNAPSHOT_FREEZE _IO(SNAPSHOT_IOC_MAGIC, 1)
|
||||
#define SNAPSHOT_UNFREEZE _IO(SNAPSHOT_IOC_MAGIC, 2)
|
||||
#define SNAPSHOT_ATOMIC_RESTORE _IO(SNAPSHOT_IOC_MAGIC, 4)
|
||||
#define SNAPSHOT_FREE _IO(SNAPSHOT_IOC_MAGIC, 5)
|
||||
#define SNAPSHOT_FREE_SWAP_PAGES _IO(SNAPSHOT_IOC_MAGIC, 9)
|
||||
#define SNAPSHOT_S2RAM _IO(SNAPSHOT_IOC_MAGIC, 11)
|
||||
#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_PLATFORM_SUPPORT _IO(SNAPSHOT_IOC_MAGIC, 15)
|
||||
#define SNAPSHOT_POWER_OFF _IO(SNAPSHOT_IOC_MAGIC, 16)
|
||||
#define SNAPSHOT_CREATE_IMAGE _IOW(SNAPSHOT_IOC_MAGIC, 17, int)
|
||||
#define SNAPSHOT_PREF_IMAGE_SIZE _IO(SNAPSHOT_IOC_MAGIC, 18)
|
||||
#define SNAPSHOT_AVAIL_SWAP_SIZE _IOR(SNAPSHOT_IOC_MAGIC, 19, loff_t)
|
||||
#define SNAPSHOT_ALLOC_SWAP_PAGE _IOR(SNAPSHOT_IOC_MAGIC, 20, loff_t)
|
||||
#define SNAPSHOT_IOC_MAXNR 20
|
||||
|
||||
#endif /* _LINUX_SUSPEND_IOCTLS_H */
|
||||
Reference in New Issue
Block a user