aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/pm.h
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/linux/pm.h
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/linux/pm.h')
-rw-r--r--include/linux/pm.h98
1 files changed, 0 insertions, 98 deletions
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 */