Blame view
include/linux/suspend.h
16 KB
95d9ffbe0 PM: Move definiti... |
1 2 |
#ifndef _LINUX_SUSPEND_H #define _LINUX_SUSPEND_H |
1da177e4c Linux-2.6.12-rc2 |
3 |
|
1da177e4c Linux-2.6.12-rc2 |
4 5 |
#include <linux/swap.h> #include <linux/notifier.h> |
1da177e4c Linux-2.6.12-rc2 |
6 7 |
#include <linux/init.h> #include <linux/pm.h> |
7be982349 swsusp: use inlin... |
8 |
#include <linux/mm.h> |
33e638b90 PM / Sleep: Use t... |
9 |
#include <linux/freezer.h> |
95d9ffbe0 PM: Move definiti... |
10 |
#include <asm/errno.h> |
37cce26b3 PM / VT: Cleanup ... |
11 |
#ifdef CONFIG_VT |
b6f448e99 PM/gxfb: add hook... |
12 |
extern void pm_set_vt_switch(int); |
95d9ffbe0 PM: Move definiti... |
13 |
#else |
b6f448e99 PM/gxfb: add hook... |
14 15 16 |
static inline void pm_set_vt_switch(int do_switch) { } |
37cce26b3 PM / VT: Cleanup ... |
17 |
#endif |
b6f448e99 PM/gxfb: add hook... |
18 |
|
37cce26b3 PM / VT: Cleanup ... |
19 20 21 22 |
#ifdef CONFIG_VT_CONSOLE_SLEEP extern int pm_prepare_console(void); extern void pm_restore_console(void); #else |
b6f448e99 PM/gxfb: add hook... |
23 24 25 26 27 28 29 30 |
static inline int pm_prepare_console(void) { return 0; } static inline void pm_restore_console(void) { } |
95d9ffbe0 PM: Move definiti... |
31 32 33 34 35 |
#endif typedef int __bitwise suspend_state_t; #define PM_SUSPEND_ON ((__force suspend_state_t) 0) |
7e73c5ae6 PM: Introduce sus... |
36 37 |
#define PM_SUSPEND_FREEZE ((__force suspend_state_t) 1) #define PM_SUSPEND_STANDBY ((__force suspend_state_t) 2) |
95d9ffbe0 PM: Move definiti... |
38 |
#define PM_SUSPEND_MEM ((__force suspend_state_t) 3) |
7e73c5ae6 PM: Introduce sus... |
39 |
#define PM_SUSPEND_MIN PM_SUSPEND_FREEZE |
95d9ffbe0 PM: Move definiti... |
40 |
#define PM_SUSPEND_MAX ((__force suspend_state_t) 4) |
2a77c46de PM / Suspend: Add... |
41 42 43 44 |
enum suspend_stat_step { SUSPEND_FREEZE = 1, SUSPEND_PREPARE, SUSPEND_SUSPEND, |
cf579dfb8 PM / Sleep: Intro... |
45 |
SUSPEND_SUSPEND_LATE, |
2a77c46de PM / Suspend: Add... |
46 47 |
SUSPEND_SUSPEND_NOIRQ, SUSPEND_RESUME_NOIRQ, |
cf579dfb8 PM / Sleep: Intro... |
48 |
SUSPEND_RESUME_EARLY, |
2a77c46de PM / Suspend: Add... |
49 50 51 52 53 54 55 56 57 |
SUSPEND_RESUME }; struct suspend_stats { int success; int fail; int failed_freeze; int failed_prepare; int failed_suspend; |
cf579dfb8 PM / Sleep: Intro... |
58 |
int failed_suspend_late; |
2a77c46de PM / Suspend: Add... |
59 60 |
int failed_suspend_noirq; int failed_resume; |
cf579dfb8 PM / Sleep: Intro... |
61 |
int failed_resume_early; |
2a77c46de PM / Suspend: Add... |
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
int failed_resume_noirq; #define REC_FAILED_NUM 2 int last_failed_dev; char failed_devs[REC_FAILED_NUM][40]; int last_failed_errno; int errno[REC_FAILED_NUM]; int last_failed_step; enum suspend_stat_step failed_steps[REC_FAILED_NUM]; }; extern struct suspend_stats suspend_stats; static inline void dpm_save_failed_dev(const char *name) { strlcpy(suspend_stats.failed_devs[suspend_stats.last_failed_dev], name, sizeof(suspend_stats.failed_devs[0])); suspend_stats.last_failed_dev++; suspend_stats.last_failed_dev %= REC_FAILED_NUM; } static inline void dpm_save_failed_errno(int err) { suspend_stats.errno[suspend_stats.last_failed_errno] = err; suspend_stats.last_failed_errno++; suspend_stats.last_failed_errno %= REC_FAILED_NUM; } static inline void dpm_save_failed_step(enum suspend_stat_step step) { suspend_stats.failed_steps[suspend_stats.last_failed_step] = step; suspend_stats.last_failed_step++; suspend_stats.last_failed_step %= REC_FAILED_NUM; } |
95d9ffbe0 PM: Move definiti... |
96 |
/** |
26398a70e PM: Rename struct... |
97 98 |
* struct platform_suspend_ops - Callbacks for managing platform dependent * system sleep states. |
95d9ffbe0 PM: Move definiti... |
99 100 101 102 103 104 |
* * @valid: Callback to determine if given system sleep state is supported by * the platform. * Valid (ie. supported) states are advertised in /sys/power/state. Note * that it still may be impossible to enter given system sleep state if the * conditions aren't right. |
26398a70e PM: Rename struct... |
105 106 |
* There is the %suspend_valid_only_mem function available that can be * assigned to this if the platform only supports mem sleep. |
95d9ffbe0 PM: Move definiti... |
107 |
* |
c697eeceb Suspend: Introduc... |
108 109 110 111 |
* @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), |
95d9ffbe0 PM: Move definiti... |
112 113 |
* @prepare(), @enter() and @finish() will not be called by the PM core. * This callback is optional. However, if it is implemented, the argument |
c697eeceb Suspend: Introduc... |
114 |
* passed to @enter() is redundant and should be ignored. |
95d9ffbe0 PM: Move definiti... |
115 116 |
* * @prepare: Prepare the platform for entering the system sleep state indicated |
c697eeceb Suspend: Introduc... |
117 |
* by @begin(). |
95d9ffbe0 PM: Move definiti... |
118 119 |
* @prepare() is called right after devices have been suspended (ie. the * appropriate .suspend() method has been executed for each device) and |
6a7c7eaf7 PM/Suspend: Intro... |
120 121 122 |
* before device drivers' late suspend callbacks are executed. It returns * 0 on success or a negative error code otherwise, in which case the * system cannot enter the desired sleep state (@prepare_late(), @enter(), |
ce4410116 PM / Suspend: Fix... |
123 |
* and @wake() will not be called in that case). |
6a7c7eaf7 PM/Suspend: Intro... |
124 125 126 127 128 129 |
* * @prepare_late: Finish preparing the platform for entering the system sleep * state indicated by @begin(). * @prepare_late is called before disabling nonboot CPUs and after * device drivers' late suspend callbacks have been executed. It returns * 0 on success or a negative error code otherwise, in which case the |
ce4410116 PM / Suspend: Fix... |
130 131 |
* system cannot enter the desired sleep state (@enter() will not be * executed). |
95d9ffbe0 PM: Move definiti... |
132 |
* |
c697eeceb Suspend: Introduc... |
133 134 |
* @enter: Enter the system sleep state indicated by @begin() or represented by * the argument if @begin() is not implemented. |
95d9ffbe0 PM: Move definiti... |
135 136 137 138 |
* 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. * |
6a7c7eaf7 PM/Suspend: Intro... |
139 140 141 142 143 |
* @wake: Called when the system has just left a sleep state, right after * the nonboot CPUs have been enabled and before device drivers' early * resume callbacks are executed. * This callback is optional, but should be implemented by the platforms * that implement @prepare_late(). If implemented, it is always called |
ce4410116 PM / Suspend: Fix... |
144 |
* after @prepare_late and @enter(), even if one of them fails. |
6a7c7eaf7 PM/Suspend: Intro... |
145 146 147 148 |
* * @finish: Finish wake-up of the platform. * @finish is called right prior to calling device drivers' regular suspend * callbacks. |
95d9ffbe0 PM: Move definiti... |
149 150 |
* This callback is optional, but should be implemented by the platforms * that implement @prepare(). If implemented, it is always called after |
ce4410116 PM / Suspend: Fix... |
151 152 |
* @enter() and @wake(), even if any of them fails. It is executed after * a failing @prepare. |
c697eeceb Suspend: Introduc... |
153 |
* |
3b5fe8525 PM / Suspend: Add... |
154 155 156 157 158 159 160 |
* @suspend_again: Returns whether the system should suspend again (true) or * not (false). If the platform wants to poll sensors or execute some * code during suspended without invoking userspace and most of devices, * suspend_again callback is the place assuming that periodic-wakeup or * alarm-wakeup is already setup. This allows to execute some codes while * being kept suspended in the view of userland and devices. * |
c697eeceb Suspend: Introduc... |
161 162 163 164 |
* @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 |
6a7c7eaf7 PM/Suspend: Intro... |
165 166 |
* that implement @begin(). Accordingly, platforms implementing @begin() * should also provide a @end() which cleans up transitions aborted before |
c697eeceb Suspend: Introduc... |
167 |
* @enter(). |
d8f3de0d2 Suspend-related p... |
168 169 170 171 172 |
* * @recover: Recover the platform from a suspend failure. * Called by the PM core if the suspending of devices fails. * This callback is optional and should only be implemented by platforms * which require special recovery actions in that situation. |
95d9ffbe0 PM: Move definiti... |
173 |
*/ |
26398a70e PM: Rename struct... |
174 |
struct platform_suspend_ops { |
95d9ffbe0 PM: Move definiti... |
175 |
int (*valid)(suspend_state_t state); |
c697eeceb Suspend: Introduc... |
176 |
int (*begin)(suspend_state_t state); |
e6c5eb954 PM: Rework struct... |
177 |
int (*prepare)(void); |
6a7c7eaf7 PM/Suspend: Intro... |
178 |
int (*prepare_late)(void); |
95d9ffbe0 PM: Move definiti... |
179 |
int (*enter)(suspend_state_t state); |
6a7c7eaf7 PM/Suspend: Intro... |
180 |
void (*wake)(void); |
e6c5eb954 PM: Rework struct... |
181 |
void (*finish)(void); |
3b5fe8525 PM / Suspend: Add... |
182 |
bool (*suspend_again)(void); |
c697eeceb Suspend: Introduc... |
183 |
void (*end)(void); |
d8f3de0d2 Suspend-related p... |
184 |
void (*recover)(void); |
95d9ffbe0 PM: Move definiti... |
185 186 187 |
}; #ifdef CONFIG_SUSPEND |
95d9ffbe0 PM: Move definiti... |
188 |
/** |
26398a70e PM: Rename struct... |
189 190 |
* suspend_set_ops - set platform dependent suspend operations * @ops: The new suspend operations to set. |
95d9ffbe0 PM: Move definiti... |
191 |
*/ |
2f55ac072 suspend: constify... |
192 |
extern void suspend_set_ops(const struct platform_suspend_ops *ops); |
26398a70e PM: Rename struct... |
193 |
extern int suspend_valid_only_mem(suspend_state_t state); |
7e73c5ae6 PM: Introduce sus... |
194 |
extern void freeze_wake(void); |
95d9ffbe0 PM: Move definiti... |
195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 |
/** * arch_suspend_disable_irqs - disable IRQs for suspend * * Disables IRQs (in the default case). This is a weak symbol in the common * code and thus allows architectures to override it if more needs to be * done. Not called for suspend to disk. */ extern void arch_suspend_disable_irqs(void); /** * arch_suspend_enable_irqs - enable IRQs after suspend * * Enables IRQs (in the default case). This is a weak symbol in the common * code and thus allows architectures to override it if more needs to be * done. Not called for suspend to disk. */ extern void arch_suspend_enable_irqs(void); extern int pm_suspend(suspend_state_t state); #else /* !CONFIG_SUSPEND */ #define suspend_valid_only_mem NULL |
2f55ac072 suspend: constify... |
217 |
static inline void suspend_set_ops(const struct platform_suspend_ops *ops) {} |
95d9ffbe0 PM: Move definiti... |
218 |
static inline int pm_suspend(suspend_state_t state) { return -ENOSYS; } |
7e73c5ae6 PM: Introduce sus... |
219 |
static inline void freeze_wake(void) {} |
95d9ffbe0 PM: Move definiti... |
220 |
#endif /* !CONFIG_SUSPEND */ |
1da177e4c Linux-2.6.12-rc2 |
221 |
|
8357376d3 [PATCH] swsusp: I... |
222 223 224 225 |
/* struct pbe is used for creating lists of pages that should be restored * atomically during the resume from disk, because the page frames they have * occupied before the suspend are in use. */ |
dcbb5a54f [PATCH] swsusp: c... |
226 |
struct pbe { |
8357376d3 [PATCH] swsusp: I... |
227 228 |
void *address; /* address of the copy */ void *orig_address; /* original address of a page */ |
7088a5c00 [PATCH] swsusp: i... |
229 |
struct pbe *next; |
dcbb5a54f [PATCH] swsusp: c... |
230 |
}; |
1da177e4c Linux-2.6.12-rc2 |
231 |
|
1da177e4c Linux-2.6.12-rc2 |
232 |
/* mm/page_alloc.c */ |
1da177e4c Linux-2.6.12-rc2 |
233 |
extern void mark_free_pages(struct zone *zone); |
a3d25c275 PM: Separate hibe... |
234 |
/** |
b3dac3b30 PM: Rename hibern... |
235 |
* struct platform_hibernation_ops - hibernation platform support |
a3d25c275 PM: Separate hibe... |
236 |
* |
caea99ef3 Hibernation: Intr... |
237 238 |
* The methods in this structure allow a platform to carry out special * operations required by it during a hibernation transition. |
a3d25c275 PM: Separate hibe... |
239 |
* |
d8f3de0d2 Suspend-related p... |
240 |
* All the methods below, except for @recover(), must be implemented. |
a3d25c275 PM: Separate hibe... |
241 |
* |
caea99ef3 Hibernation: Intr... |
242 |
* @begin: Tell the platform driver that we're starting hibernation. |
74f270af0 PM: Rework struct... |
243 244 |
* Called right after shrinking memory and before freezing devices. * |
caea99ef3 Hibernation: Intr... |
245 246 247 |
* @end: Called by the PM core right after resuming devices, to indicate to * the platform that the system has returned to the working state. * |
74f270af0 PM: Rework struct... |
248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 |
* @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). * * @finish: Restore the previous state of the platform after the hibernation * image has been created *or* put the platform into the normal operation * mode after the hibernation (the same method is executed in both cases). * Called right after the nonboot CPUs have been enabled and before * thawing devices (runs with IRQs on). * * @prepare: Prepare the platform for entering the low power state. * Called right after the hibernation image has been saved and before * devices are prepared for entering the low power state. * * @enter: Put the system into the low power state after the hibernation image * has been saved to disk. * Called after the nonboot CPUs have been disabled and all of the low * level devices have been shut down (runs with IRQs off). * |
c7e0831d3 Hibernation: Chec... |
267 268 269 270 271 272 |
* @leave: Perform the first stage of the cleanup after the system sleep state * indicated by @set_target() has been left. * Called right after the control has been passed from the boot kernel to * the image kernel, before the nonboot CPUs are enabled and before devices * are resumed. Executed with interrupts disabled. * |
74f270af0 PM: Rework struct... |
273 274 275 276 277 278 279 |
* @pre_restore: Prepare system for the restoration from a hibernation image. * Called right after devices have been frozen and before the nonboot * CPUs are disabled (runs with IRQs on). * * @restore_cleanup: Clean up after a failing image restoration. * Called right after the nonboot CPUs have been enabled and before * thawing devices (runs with IRQs on). |
d8f3de0d2 Suspend-related p... |
280 281 282 283 284 |
* * @recover: Recover the platform from a failure to suspend devices. * Called by the PM core if the suspending of devices during hibernation * fails. This callback is optional and should only be implemented by * platforms which require special recovery actions in that situation. |
a3d25c275 PM: Separate hibe... |
285 |
*/ |
b3dac3b30 PM: Rename hibern... |
286 |
struct platform_hibernation_ops { |
caea99ef3 Hibernation: Intr... |
287 288 |
int (*begin)(void); void (*end)(void); |
74f270af0 PM: Rework struct... |
289 290 |
int (*pre_snapshot)(void); void (*finish)(void); |
a3d25c275 PM: Separate hibe... |
291 292 |
int (*prepare)(void); int (*enter)(void); |
c7e0831d3 Hibernation: Chec... |
293 |
void (*leave)(void); |
a634cc101 swsusp: introduce... |
294 295 |
int (*pre_restore)(void); void (*restore_cleanup)(void); |
d8f3de0d2 Suspend-related p... |
296 |
void (*recover)(void); |
a3d25c275 PM: Separate hibe... |
297 |
}; |
b0cb1a19d Replace CONFIG_SO... |
298 |
#ifdef CONFIG_HIBERNATION |
74dfd666d swsusp: do not us... |
299 |
/* kernel/power/snapshot.c */ |
940d67f6b [POWERPC] swsusp:... |
300 |
extern void __register_nosave_region(unsigned long b, unsigned long e, int km); |
ce289e897 suspend: fix sect... |
301 |
static inline void __init register_nosave_region(unsigned long b, unsigned long e) |
940d67f6b [POWERPC] swsusp:... |
302 303 304 |
{ __register_nosave_region(b, e, 0); } |
ce289e897 suspend: fix sect... |
305 |
static inline void __init register_nosave_region_late(unsigned long b, unsigned long e) |
940d67f6b [POWERPC] swsusp:... |
306 307 308 |
{ __register_nosave_region(b, e, 1); } |
74dfd666d swsusp: do not us... |
309 310 311 312 |
extern int swsusp_page_is_forbidden(struct page *); extern void swsusp_set_page_free(struct page *); extern void swsusp_unset_page_free(struct page *); extern unsigned long get_safe_page(gfp_t gfp_mask); |
a3d25c275 PM: Separate hibe... |
313 |
|
073ef1f6e hibernation: cons... |
314 |
extern void hibernation_set_ops(const struct platform_hibernation_ops *ops); |
a3d25c275 PM: Separate hibe... |
315 |
extern int hibernate(void); |
abfe2d7b9 Hibernation: Intr... |
316 |
extern bool system_entering_hibernation(void); |
b0cb1a19d Replace CONFIG_SO... |
317 |
#else /* CONFIG_HIBERNATION */ |
1f112cee0 PM / Hibernate: I... |
318 319 |
static inline void register_nosave_region(unsigned long b, unsigned long e) {} static inline void register_nosave_region_late(unsigned long b, unsigned long e) {} |
74dfd666d swsusp: do not us... |
320 321 322 |
static inline int swsusp_page_is_forbidden(struct page *p) { return 0; } static inline void swsusp_set_page_free(struct page *p) {} static inline void swsusp_unset_page_free(struct page *p) {} |
a3d25c275 PM: Separate hibe... |
323 |
|
073ef1f6e hibernation: cons... |
324 |
static inline void hibernation_set_ops(const struct platform_hibernation_ops *ops) {} |
a3d25c275 PM: Separate hibe... |
325 |
static inline int hibernate(void) { return -ENOSYS; } |
fce2b111f PM/Hibernate: Mov... |
326 327 |
static inline bool system_entering_hibernation(void) { return false; } #endif /* CONFIG_HIBERNATION */ |
35eb6db11 notifiers: pm: mo... |
328 329 330 331 332 333 334 |
/* Hibernation and suspend events */ #define PM_HIBERNATION_PREPARE 0x0001 /* Going to hibernate */ #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 */ |
9b6fc5dc8 PM / Sleep: Make ... |
335 |
extern struct mutex pm_mutex; |
296699de6 Introduce CONFIG_... |
336 |
#ifdef CONFIG_PM_SLEEP |
1da177e4c Linux-2.6.12-rc2 |
337 338 |
void save_processor_state(void); void restore_processor_state(void); |
25761b6eb [PATCH] swsusp: m... |
339 |
|
b10d91174 PM: introduce hib... |
340 |
/* kernel/power/main.c */ |
825257569 PM: Convert PM no... |
341 342 |
extern int register_pm_notifier(struct notifier_block *nb); extern int unregister_pm_notifier(struct notifier_block *nb); |
b10d91174 PM: introduce hib... |
343 344 345 346 347 348 |
#define pm_notifier(fn, pri) { \ static struct notifier_block fn##_nb = \ { .notifier_call = fn, .priority = pri }; \ register_pm_notifier(&fn##_nb); \ } |
c125e96f0 PM: Make it possi... |
349 350 351 |
/* drivers/base/power/wakeup.c */ extern bool events_check_enabled; |
a2867e08c PM / Wakeup: Repl... |
352 |
extern bool pm_wakeup_pending(void); |
7483b4a4d PM / Sleep: Imple... |
353 |
extern bool pm_get_wakeup_count(unsigned int *count, bool block); |
074037ec7 PM / Wakeup: Intr... |
354 |
extern bool pm_save_wakeup_count(unsigned int count); |
55850945e PM / Sleep: Add "... |
355 |
extern void pm_wakep_autosleep_enabled(bool set); |
bb177fedd PM / Sleep: Print... |
356 |
extern void pm_print_active_wakeup_sources(void); |
9b6fc5dc8 PM / Sleep: Make ... |
357 358 359 |
static inline void lock_system_sleep(void) { |
72081624d PM / Hibernate: R... |
360 |
current->flags |= PF_FREEZER_SKIP; |
9b6fc5dc8 PM / Sleep: Make ... |
361 362 363 364 365 |
mutex_lock(&pm_mutex); } static inline void unlock_system_sleep(void) { |
72081624d PM / Hibernate: R... |
366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 |
/* * Don't use freezer_count() because we don't want the call to * try_to_freeze() here. * * Reason: * Fundamentally, we just don't need it, because freezing condition * doesn't come into effect until we release the pm_mutex lock, * since the freezer always works with pm_mutex held. * * More importantly, in the case of hibernation, * unlock_system_sleep() gets called in snapshot_read() and * snapshot_write() when the freezing condition is still in effect. * Which means, if we use try_to_freeze() here, it would make them * enter the refrigerator, thus causing hibernation to lockup. */ current->flags &= ~PF_FREEZER_SKIP; |
9b6fc5dc8 PM / Sleep: Make ... |
382 |
mutex_unlock(&pm_mutex); |
9b6fc5dc8 PM / Sleep: Make ... |
383 |
} |
296699de6 Introduce CONFIG_... |
384 |
#else /* !CONFIG_PM_SLEEP */ |
b10d91174 PM: introduce hib... |
385 386 387 388 389 390 391 392 393 394 395 396 |
static inline int register_pm_notifier(struct notifier_block *nb) { return 0; } static inline int unregister_pm_notifier(struct notifier_block *nb) { return 0; } #define pm_notifier(fn, pri) do { (void)(fn); } while (0) |
dbeeec5fe PM: Allow wakeup ... |
397 |
|
a2867e08c PM / Wakeup: Repl... |
398 |
static inline bool pm_wakeup_pending(void) { return false; } |
6ad696d2c mm: allow memory ... |
399 |
|
6ad696d2c mm: allow memory ... |
400 401 |
static inline void lock_system_sleep(void) {} static inline void unlock_system_sleep(void) {} |
9b6fc5dc8 PM / Sleep: Make ... |
402 |
#endif /* !CONFIG_PM_SLEEP */ |
89081d17f kexec jump: save/... |
403 |
|
b2df1d4f8 PM / Sleep: Separ... |
404 405 406 407 408 |
#ifdef CONFIG_PM_SLEEP_DEBUG extern bool pm_print_times_enabled; #else #define pm_print_times_enabled (false) #endif |
7483b4a4d PM / Sleep: Imple... |
409 410 411 412 413 414 415 416 417 418 |
#ifdef CONFIG_PM_AUTOSLEEP /* kernel/power/autosleep.c */ void queue_up_suspend_work(void); #else /* !CONFIG_PM_AUTOSLEEP */ static inline void queue_up_suspend_work(void) {} #endif /* !CONFIG_PM_AUTOSLEEP */ |
85055dd80 PM / Hibernate: I... |
419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 |
#ifdef CONFIG_ARCH_SAVE_PAGE_KEYS /* * The ARCH_SAVE_PAGE_KEYS functions can be used by an architecture * to save/restore additional information to/from the array of page * frame numbers in the hibernation image. For s390 this is used to * save and restore the storage key for each page that is included * in the hibernation image. */ unsigned long page_key_additional_pages(unsigned long pages); int page_key_alloc(unsigned long pages); void page_key_free(void); void page_key_read(unsigned long *pfn); void page_key_memorize(unsigned long *pfn); void page_key_write(void *address); #else /* !CONFIG_ARCH_SAVE_PAGE_KEYS */ static inline unsigned long page_key_additional_pages(unsigned long pages) { return 0; } static inline int page_key_alloc(unsigned long pages) { return 0; } static inline void page_key_free(void) {} static inline void page_key_read(unsigned long *pfn) {} static inline void page_key_memorize(unsigned long *pfn) {} static inline void page_key_write(void *address) {} #endif /* !CONFIG_ARCH_SAVE_PAGE_KEYS */ |
95d9ffbe0 PM: Move definiti... |
452 |
#endif /* _LINUX_SUSPEND_H */ |