1#include <linux/suspend.h>
2#include <linux/suspend_ioctls.h>
3#include <linux/utsname.h>
4#include <linux/freezer.h>
5
6struct swsusp_info {
7 struct new_utsname uts;
8 u32 version_code;
9 unsigned long num_physpages;
10 int cpus;
11 unsigned long image_pages;
12 unsigned long pages;
13 unsigned long size;
14} __attribute__((aligned(PAGE_SIZE)));
15
16#ifdef CONFIG_HIBERNATION
17#ifdef CONFIG_ARCH_HIBERNATION_HEADER
18
19#define MAX_ARCH_HEADER_SIZE (sizeof(struct new_utsname) + 4)
20
21extern int arch_hibernation_header_save(void *addr, unsigned int max_size);
22extern int arch_hibernation_header_restore(void *addr);
23
24static inline int init_header_complete(struct swsusp_info *info)
25{
26 return arch_hibernation_header_save(info, MAX_ARCH_HEADER_SIZE);
27}
28
29static inline char *check_image_kernel(struct swsusp_info *info)
30{
31 return arch_hibernation_header_restore(info) ?
32 "architecture specific data" : NULL;
33}
34#endif
35
36
37
38
39
40#define PAGES_FOR_IO ((4096 * 1024) >> PAGE_SHIFT)
41
42
43
44
45
46#define SPARE_PAGES ((1024 * 1024) >> PAGE_SHIFT)
47
48
49extern int hibernation_snapshot(int platform_mode);
50extern int hibernation_restore(int platform_mode);
51extern int hibernation_platform_enter(void);
52#endif
53
54extern int pfn_is_nosave(unsigned long);
55
56extern struct mutex pm_mutex;
57
58#define power_attr(_name) \
59static struct kobj_attribute _name##_attr = { \
60 .attr = { \
61 .name = __stringify(_name), \
62 .mode = 0644, \
63 }, \
64 .show = _name##_show, \
65 .store = _name##_store, \
66}
67
68
69extern unsigned long image_size;
70extern int in_suspend;
71extern dev_t swsusp_resume_device;
72extern sector_t swsusp_resume_block;
73
74extern asmlinkage int swsusp_arch_suspend(void);
75extern asmlinkage int swsusp_arch_resume(void);
76
77extern int create_basic_memory_bitmaps(void);
78extern void free_basic_memory_bitmaps(void);
79extern unsigned int count_data_pages(void);
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101struct snapshot_handle {
102 loff_t offset;
103
104
105 unsigned int cur;
106
107
108 unsigned int cur_offset;
109
110
111 unsigned int prev;
112
113
114 void *buffer;
115
116
117 unsigned int buf_offset;
118
119
120 int sync_read;
121
122
123
124};
125
126
127
128
129
130#define data_of(handle) ((handle).buffer + (handle).buf_offset)
131
132extern unsigned int snapshot_additional_pages(struct zone *zone);
133extern unsigned long snapshot_get_image_size(void);
134extern int snapshot_read_next(struct snapshot_handle *handle, size_t count);
135extern int snapshot_write_next(struct snapshot_handle *handle, size_t count);
136extern void snapshot_write_finalize(struct snapshot_handle *handle);
137extern int snapshot_image_loaded(struct snapshot_handle *handle);
138
139
140extern atomic_t snapshot_device_available;
141
142extern sector_t alloc_swapdev_block(int swap);
143extern void free_all_swap_pages(int swap);
144extern int swsusp_swap_in_use(void);
145
146
147
148
149
150#define SF_PLATFORM_MODE 1
151
152
153extern int swsusp_check(void);
154extern int swsusp_shrink_memory(void);
155extern void swsusp_free(void);
156extern int swsusp_read(unsigned int *flags_p);
157extern int swsusp_write(unsigned int flags);
158extern void swsusp_close(void);
159
160struct timeval;
161
162extern void swsusp_show_speed(struct timeval *, struct timeval *,
163 unsigned int, char *);
164
165#ifdef CONFIG_SUSPEND
166
167extern int suspend_devices_and_enter(suspend_state_t state);
168#else
169static inline int suspend_devices_and_enter(suspend_state_t state)
170{
171 return -ENOSYS;
172}
173#endif
174
175#ifdef CONFIG_PM_SLEEP
176
177extern int pm_notifier_call_chain(unsigned long val);
178#endif
179
180#ifdef CONFIG_HIGHMEM
181unsigned int count_highmem_pages(void);
182int restore_highmem(void);
183#else
184static inline unsigned int count_highmem_pages(void) { return 0; }
185static inline int restore_highmem(void) { return 0; }
186#endif
187
188
189
190
191enum {
192
193 TEST_NONE,
194 TEST_CORE,
195 TEST_CPUS,
196 TEST_PLATFORM,
197 TEST_DEVICES,
198 TEST_FREEZER,
199
200 __TEST_AFTER_LAST
201};
202
203#define TEST_FIRST TEST_NONE
204#define TEST_MAX (__TEST_AFTER_LAST - 1)
205
206extern int pm_test_level;
207
208#ifdef CONFIG_SUSPEND_FREEZER
209static inline int suspend_freeze_processes(void)
210{
211 return freeze_processes();
212}
213
214static inline void suspend_thaw_processes(void)
215{
216 thaw_processes();
217}
218#else
219static inline int suspend_freeze_processes(void)
220{
221 return 0;
222}
223
224static inline void suspend_thaw_processes(void)
225{
226}
227#endif
228