2.2.9.17 release.
[linux-2.6/suspend2-2.6.18.git] / kernel / power / suspend.h
blobc18911815f9a17121d3df7d9271a118cb8fa9829
1 /*
2 * kernel/power/suspend.h
4 * Copyright (C) 2004-2007 Nigel Cunningham (nigel at suspend2 net)
6 * This file is released under the GPLv2.
8 * It contains declarations used throughout swsusp.
12 #ifndef KERNEL_POWER_SUSPEND_H
13 #define KERNEL_POWER_SUSPEND_H
15 #include <linux/delay.h>
16 #include <linux/bootmem.h>
17 #include <linux/suspend.h>
18 #include <linux/dyn_pageflags.h>
19 #include <asm/setup.h>
20 #include "pageflags.h"
22 #define SUSPEND_CORE_VERSION "2.2.9.17"
24 /* == Action states == */
26 enum {
27 SUSPEND_REBOOT,
28 SUSPEND_PAUSE,
29 SUSPEND_SLOW,
30 SUSPEND_LOGALL,
31 SUSPEND_CAN_CANCEL,
32 SUSPEND_KEEP_IMAGE,
33 SUSPEND_FREEZER_TEST,
34 SUSPEND_SINGLESTEP,
35 SUSPEND_PAUSE_NEAR_PAGESET_END,
36 SUSPEND_TEST_FILTER_SPEED,
37 SUSPEND_TEST_BIO,
38 SUSPEND_NO_PAGESET2,
39 SUSPEND_PM_PREPARE_CONSOLE,
40 SUSPEND_IGNORE_ROOTFS,
41 SUSPEND_REPLACE_SWSUSP,
42 SUSPEND_RETRY_RESUME,
43 SUSPEND_PAGESET2_FULL,
44 SUSPEND_ABORT_ON_RESAVE_NEEDED,
45 SUSPEND_NO_MULTITHREADED_IO,
46 SUSPEND_NO_DIRECT_LOAD,
47 SUSPEND_LATE_CPU_HOTPLUG,
50 extern unsigned long suspend_action;
52 #define clear_action_state(bit) (test_and_clear_bit(bit, &suspend_action))
53 #define test_action_state(bit) (test_bit(bit, &suspend_action))
55 /* == Result states == */
57 enum {
58 SUSPEND_ABORTED,
59 SUSPEND_ABORT_REQUESTED,
60 SUSPEND_NOSTORAGE_AVAILABLE,
61 SUSPEND_INSUFFICIENT_STORAGE,
62 SUSPEND_FREEZING_FAILED,
63 SUSPEND_UNEXPECTED_ALLOC,
64 SUSPEND_KEPT_IMAGE,
65 SUSPEND_WOULD_EAT_MEMORY,
66 SUSPEND_UNABLE_TO_FREE_ENOUGH_MEMORY,
67 SUSPEND_ENCRYPTION_SETUP_FAILED,
68 SUSPEND_PM_SEM,
69 SUSPEND_DEVICE_REFUSED,
70 SUSPEND_EXTRA_PAGES_ALLOW_TOO_SMALL,
71 SUSPEND_UNABLE_TO_PREPARE_IMAGE,
72 SUSPEND_FAILED_MODULE_INIT,
73 SUSPEND_FAILED_MODULE_CLEANUP,
74 SUSPEND_FAILED_IO,
75 SUSPEND_OUT_OF_MEMORY,
76 SUSPEND_IMAGE_ERROR,
79 extern unsigned long suspend_result;
81 #define set_result_state(bit) (test_and_set_bit(bit, &suspend_result))
82 #define clear_result_state(bit) (test_and_clear_bit(bit, &suspend_result))
83 #define test_result_state(bit) (test_bit(bit, &suspend_result))
85 /* == Debug sections and levels == */
87 /* debugging levels. */
88 enum {
89 SUSPEND_STATUS = 0,
90 SUSPEND_ERROR = 2,
91 SUSPEND_LOW,
92 SUSPEND_MEDIUM,
93 SUSPEND_HIGH,
94 SUSPEND_VERBOSE,
97 enum {
98 SUSPEND_ANY_SECTION,
99 SUSPEND_EAT_MEMORY,
100 SUSPEND_IO,
101 SUSPEND_HEADER,
102 SUSPEND_WRITER,
103 SUSPEND_MEMORY,
106 extern unsigned long suspend_debug_state;
108 #define set_debug_state(bit) (test_and_set_bit(bit, &suspend_debug_state))
109 #define clear_debug_state(bit) (test_and_clear_bit(bit, &suspend_debug_state))
110 #define test_debug_state(bit) (test_bit(bit, &suspend_debug_state))
112 /* == Steps in suspending == */
114 enum {
115 STEP_SUSPEND_PREPARE_IMAGE,
116 STEP_SUSPEND_SAVE_IMAGE,
117 STEP_SUSPEND_POWERDOWN,
118 STEP_RESUME_CAN_RESUME,
119 STEP_RESUME_LOAD_PS1,
120 STEP_RESUME_DO_RESTORE,
121 STEP_RESUME_READ_PS2,
122 STEP_RESUME_GO,
123 STEP_RESUME_ALT_IMAGE,
126 /* == Suspend states ==
127 (see also include/linux/suspend.h) */
129 #define get_suspend_state() (suspend_state)
130 #define restore_suspend_state(saved_state) \
131 do { suspend_state = saved_state; } while(0)
133 /* == Module support == */
135 struct suspend2_core_fns {
136 int (*post_context_save)(void);
137 unsigned long (*get_nonconflicting_page)(void);
138 int (*try_suspend)(int have_pmsem);
139 void (*try_resume)(void);
142 extern struct suspend2_core_fns *s2_core_fns;
144 /* == All else == */
145 #define KB(x) ((x) << (PAGE_SHIFT - 10))
146 #define MB(x) ((x) >> (20 - PAGE_SHIFT))
148 extern int suspend_start_anything(int suspend_or_resume);
149 extern void suspend_finish_anything(int suspend_or_resume);
151 extern int save_image_part1(void);
152 extern int suspend_atomic_restore(void);
154 extern int _suspend2_try_suspend(int have_pmsem);
155 extern void __suspend2_try_resume(void);
157 extern int __suspend_post_context_save(void);
159 extern unsigned int nr_suspends;
160 extern char resume2_file[256];
161 extern char poweroff_resume2[256];
163 extern void copyback_post(void);
164 extern int suspend2_suspend(void);
165 extern int extra_pd1_pages_used;
167 extern int suspend_io_time[2][2];
169 #define SECTOR_SIZE 512
171 extern int suspend_early_boot_message
172 (int can_erase_image, int default_answer, char *warning_reason, ...);
174 static inline int load_direct(struct page *page)
176 return test_action_state(SUSPEND_NO_DIRECT_LOAD) ? 0 : PagePageset1Copy(page);
179 extern int pre_resume_freeze(void);
180 #endif