aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorRafael J. Wysocki <rjw@sisk.pl>2007-10-18 06:04:39 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-18 17:37:18 -0400
commit95d9ffbe01fb21d524c86bf77871255066bc6e55 (patch)
tree647355f56f85b1038ffc81fa50ff2c3878ab6597 /include
parenta065c86e1bfcdd36709025d018965afea3f3a2b6 (diff)
PM: Move definition of struct pm_ops to suspend.h
Move the definition of 'struct pm_ops' and related functions from <linux/pm.h> to <linux/suspend.h> . There are, at least, the following reasons to do that: * 'struct pm_ops' is specifically related to suspend and not to the power management in general. * As long as 'struct pm_ops' is defined in <linux/pm.h>, any modification of it causes the entire kernel to be recompiled, which is unnecessary and annoying. * Some suspend-related features are already defined in <linux/suspend.h>, so it is logical to move the definition of 'struct pm_ops' into there. * 'struct hibernation_ops', being the hibernation-related counterpart of 'struct pm_ops', is defined in <linux/suspend.h> . Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> Acked-by: Pavel Machek <pavel@ucw.cz> Cc: Len Brown <lenb@kernel.org> Cc: Greg KH <greg@kroah.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include')
-rw-r--r--include/asm-arm/arch-pxa/pm.h2
-rw-r--r--include/linux/pm.h98
-rw-r--r--include/linux/suspend.h121
3 files changed, 112 insertions, 109 deletions
diff --git a/include/asm-arm/arch-pxa/pm.h b/include/asm-arm/arch-pxa/pm.h
index 6903db7fae15..9d9f4b54b2ce 100644
--- a/include/asm-arm/arch-pxa/pm.h
+++ b/include/asm-arm/arch-pxa/pm.h
@@ -7,6 +7,8 @@
7 * 7 *
8 */ 8 */
9 9
10#include <linux/suspend.h>
11
10struct pxa_cpu_pm_fns { 12struct pxa_cpu_pm_fns {
11 int save_size; 13 int save_size;
12 void (*save)(unsigned long *); 14 void (*save)(unsigned long *);
diff --git a/include/linux/pm.h b/include/linux/pm.h
index 48b71badfb4c..09a309b7b5d2 100644
--- a/include/linux/pm.h
+++ b/include/linux/pm.h
@@ -104,104 +104,6 @@ extern void (*pm_idle)(void);
104extern void (*pm_power_off)(void); 104extern void (*pm_power_off)(void);
105extern void (*pm_power_off_prepare)(void); 105extern void (*pm_power_off_prepare)(void);
106 106
107typedef int __bitwise suspend_state_t;
108
109#define PM_SUSPEND_ON ((__force suspend_state_t) 0)
110#define PM_SUSPEND_STANDBY ((__force suspend_state_t) 1)
111#define PM_SUSPEND_MEM ((__force suspend_state_t) 3)
112#define PM_SUSPEND_MAX ((__force suspend_state_t) 4)
113
114/**
115 * struct pm_ops - Callbacks for managing platform dependent system sleep
116 * states.
117 *
118 * @valid: Callback to determine if given system sleep state is supported by
119 * the platform.
120 * Valid (ie. supported) states are advertised in /sys/power/state. Note
121 * that it still may be impossible to enter given system sleep state if the
122 * conditions aren't right.
123 * There is the %pm_valid_only_mem function available that can be assigned
124 * to this if the platform only supports mem sleep.
125 *
126 * @set_target: Tell the platform which system sleep state is going to be
127 * entered.
128 * @set_target() is executed right prior to suspending devices. The
129 * information conveyed to the platform code by @set_target() should be
130 * disregarded by the platform as soon as @finish() is executed and if
131 * @prepare() fails. If @set_target() fails (ie. returns nonzero),
132 * @prepare(), @enter() and @finish() will not be called by the PM core.
133 * This callback is optional. However, if it is implemented, the argument
134 * passed to @prepare(), @enter() and @finish() is meaningless and should
135 * be ignored.
136 *
137 * @prepare: Prepare the platform for entering the system sleep state indicated
138 * by @set_target() or represented by the argument if @set_target() is not
139 * implemented.
140 * @prepare() is called right after devices have been suspended (ie. the
141 * appropriate .suspend() method has been executed for each device) and
142 * before the nonboot CPUs are disabled (it is executed with IRQs enabled).
143 * This callback is optional. It returns 0 on success or a negative
144 * error code otherwise, in which case the system cannot enter the desired
145 * sleep state (@enter() and @finish() will not be called in that case).
146 *
147 * @enter: Enter the system sleep state indicated by @set_target() or
148 * represented by the argument if @set_target() is not implemented.
149 * This callback is mandatory. It returns 0 on success or a negative
150 * error code otherwise, in which case the system cannot enter the desired
151 * sleep state.
152 *
153 * @finish: Called when the system has just left a sleep state, right after
154 * the nonboot CPUs have been enabled and before devices are resumed (it is
155 * executed with IRQs enabled). If @set_target() is not implemented, the
156 * argument represents the sleep state being left.
157 * This callback is optional, but should be implemented by the platforms
158 * that implement @prepare(). If implemented, it is always called after
159 * @enter() (even if @enter() fails).
160 */
161struct pm_ops {
162 int (*valid)(suspend_state_t state);
163 int (*set_target)(suspend_state_t state);
164 int (*prepare)(suspend_state_t state);
165 int (*enter)(suspend_state_t state);
166 int (*finish)(suspend_state_t state);
167};
168
169#ifdef CONFIG_SUSPEND
170extern struct pm_ops *pm_ops;
171
172/**
173 * pm_set_ops - set platform dependent power management ops
174 * @pm_ops: The new power management operations to set.
175 */
176extern void pm_set_ops(struct pm_ops *pm_ops);
177extern int pm_valid_only_mem(suspend_state_t state);
178
179/**
180 * arch_suspend_disable_irqs - disable IRQs for suspend
181 *
182 * Disables IRQs (in the default case). This is a weak symbol in the common
183 * code and thus allows architectures to override it if more needs to be
184 * done. Not called for suspend to disk.
185 */
186extern void arch_suspend_disable_irqs(void);
187
188/**
189 * arch_suspend_enable_irqs - enable IRQs after suspend
190 *
191 * Enables IRQs (in the default case). This is a weak symbol in the common
192 * code and thus allows architectures to override it if more needs to be
193 * done. Not called for suspend to disk.
194 */
195extern void arch_suspend_enable_irqs(void);
196
197extern int pm_suspend(suspend_state_t state);
198#else /* !CONFIG_SUSPEND */
199#define suspend_valid_only_mem NULL
200
201static inline void pm_set_ops(struct pm_ops *pm_ops) {}
202static inline int pm_suspend(suspend_state_t state) { return -ENOSYS; }
203#endif /* !CONFIG_SUSPEND */
204
205/* 107/*
206 * Device power management 108 * Device power management
207 */ 109 */
diff --git a/include/linux/suspend.h b/include/linux/suspend.h
index 388cace9751f..c230680d5252 100644
--- a/include/linux/suspend.h
+++ b/include/linux/suspend.h
@@ -1,5 +1,5 @@
1#ifndef _LINUX_SWSUSP_H 1#ifndef _LINUX_SUSPEND_H
2#define _LINUX_SWSUSP_H 2#define _LINUX_SUSPEND_H
3 3
4#if defined(CONFIG_X86) || defined(CONFIG_FRV) || defined(CONFIG_PPC32) || defined(CONFIG_PPC64) 4#if defined(CONFIG_X86) || defined(CONFIG_FRV) || defined(CONFIG_PPC32) || defined(CONFIG_PPC64)
5#include <asm/suspend.h> 5#include <asm/suspend.h>
@@ -9,6 +9,113 @@
9#include <linux/init.h> 9#include <linux/init.h>
10#include <linux/pm.h> 10#include <linux/pm.h>
11#include <linux/mm.h> 11#include <linux/mm.h>
12#include <asm/errno.h>
13
14#if defined(CONFIG_PM_SLEEP) && defined(CONFIG_VT) && defined(CONFIG_VT_CONSOLE)
15extern int pm_prepare_console(void);
16extern void pm_restore_console(void);
17#else
18static inline int pm_prepare_console(void) { return 0; }
19static inline void pm_restore_console(void) {}
20#endif
21
22typedef int __bitwise suspend_state_t;
23
24#define PM_SUSPEND_ON ((__force suspend_state_t) 0)
25#define PM_SUSPEND_STANDBY ((__force suspend_state_t) 1)
26#define PM_SUSPEND_MEM ((__force suspend_state_t) 3)
27#define PM_SUSPEND_MAX ((__force suspend_state_t) 4)
28
29/**
30 * struct pm_ops - Callbacks for managing platform dependent system sleep
31 * states.
32 *
33 * @valid: Callback to determine if given system sleep state is supported by
34 * the platform.
35 * Valid (ie. supported) states are advertised in /sys/power/state. Note
36 * that it still may be impossible to enter given system sleep state if the
37 * conditions aren't right.
38 * There is the %pm_valid_only_mem function available that can be assigned
39 * to this if the platform only supports mem sleep.
40 *
41 * @set_target: Tell the platform which system sleep state is going to be
42 * entered.
43 * @set_target() is executed right prior to suspending devices. The
44 * information conveyed to the platform code by @set_target() should be
45 * disregarded by the platform as soon as @finish() is executed and if
46 * @prepare() fails. If @set_target() fails (ie. returns nonzero),
47 * @prepare(), @enter() and @finish() will not be called by the PM core.
48 * This callback is optional. However, if it is implemented, the argument
49 * passed to @prepare(), @enter() and @finish() is meaningless and should
50 * be ignored.
51 *
52 * @prepare: Prepare the platform for entering the system sleep state indicated
53 * by @set_target() or represented by the argument if @set_target() is not
54 * implemented.
55 * @prepare() is called right after devices have been suspended (ie. the
56 * appropriate .suspend() method has been executed for each device) and
57 * before the nonboot CPUs are disabled (it is executed with IRQs enabled).
58 * This callback is optional. It returns 0 on success or a negative
59 * error code otherwise, in which case the system cannot enter the desired
60 * sleep state (@enter() and @finish() will not be called in that case).
61 *
62 * @enter: Enter the system sleep state indicated by @set_target() or
63 * represented by the argument if @set_target() is not implemented.
64 * This callback is mandatory. It returns 0 on success or a negative
65 * error code otherwise, in which case the system cannot enter the desired
66 * sleep state.
67 *
68 * @finish: Called when the system has just left a sleep state, right after
69 * the nonboot CPUs have been enabled and before devices are resumed (it is
70 * executed with IRQs enabled). If @set_target() is not implemented, the
71 * argument represents the sleep state being left.
72 * This callback is optional, but should be implemented by the platforms
73 * that implement @prepare(). If implemented, it is always called after
74 * @enter() (even if @enter() fails).
75 */
76struct pm_ops {
77 int (*valid)(suspend_state_t state);
78 int (*set_target)(suspend_state_t state);
79 int (*prepare)(suspend_state_t state);
80 int (*enter)(suspend_state_t state);
81 int (*finish)(suspend_state_t state);
82};
83
84#ifdef CONFIG_SUSPEND
85extern struct pm_ops *pm_ops;
86
87/**
88 * pm_set_ops - set platform dependent power management ops
89 * @pm_ops: The new power management operations to set.
90 */
91extern void pm_set_ops(struct pm_ops *pm_ops);
92extern int pm_valid_only_mem(suspend_state_t state);
93
94/**
95 * arch_suspend_disable_irqs - disable IRQs for suspend
96 *
97 * Disables IRQs (in the default case). This is a weak symbol in the common
98 * code and thus allows architectures to override it if more needs to be
99 * done. Not called for suspend to disk.
100 */
101extern void arch_suspend_disable_irqs(void);
102
103/**
104 * arch_suspend_enable_irqs - enable IRQs after suspend
105 *
106 * Enables IRQs (in the default case). This is a weak symbol in the common
107 * code and thus allows architectures to override it if more needs to be
108 * done. Not called for suspend to disk.
109 */
110extern void arch_suspend_enable_irqs(void);
111
112extern int pm_suspend(suspend_state_t state);
113#else /* !CONFIG_SUSPEND */
114#define suspend_valid_only_mem NULL
115
116static inline void pm_set_ops(struct pm_ops *pm_ops) {}
117static inline int pm_suspend(suspend_state_t state) { return -ENOSYS; }
118#endif /* !CONFIG_SUSPEND */
12 119
13/* struct pbe is used for creating lists of pages that should be restored 120/* struct pbe is used for creating lists of pages that should be restored
14 * atomically during the resume from disk, because the page frames they have 121 * atomically during the resume from disk, because the page frames they have
@@ -24,14 +131,6 @@ struct pbe {
24extern void drain_local_pages(void); 131extern void drain_local_pages(void);
25extern void mark_free_pages(struct zone *zone); 132extern void mark_free_pages(struct zone *zone);
26 133
27#if defined(CONFIG_PM_SLEEP) && defined(CONFIG_VT) && defined(CONFIG_VT_CONSOLE)
28extern int pm_prepare_console(void);
29extern void pm_restore_console(void);
30#else
31static inline int pm_prepare_console(void) { return 0; }
32static inline void pm_restore_console(void) {}
33#endif
34
35/** 134/**
36 * struct hibernation_ops - hibernation platform support 135 * struct hibernation_ops - hibernation platform support
37 * 136 *
@@ -130,4 +229,4 @@ static inline void register_nosave_region_late(unsigned long b, unsigned long e)
130} 229}
131#endif 230#endif
132 231
133#endif /* _LINUX_SWSUSP_H */ 232#endif /* _LINUX_SUSPEND_H */