blob: e54dd8435de77e64bb554c0a470bff0b1300dec1 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001#include <linux/suspend.h>
2#include <linux/utsname.h>
3
Pavel Machek8686bcd2005-09-22 21:44:11 -07004/* With SUSPEND_CONSOLE defined suspend looks *really* cool, but
Linus Torvalds1da177e2005-04-16 15:20:36 -07005 we probably do not take enough locks for switching consoles, etc,
6 so bad things might happen.
7*/
8#if defined(CONFIG_VT) && defined(CONFIG_VT_CONSOLE)
9#define SUSPEND_CONSOLE (MAX_NR_CONSOLES-1)
10#endif
11
Rafael J. Wysocki0f7347c2005-09-27 21:45:43 -070012#define MAX_PBES ((PAGE_SIZE - sizeof(struct new_utsname) \
13 - 4 - 3*sizeof(unsigned long) - sizeof(int) \
14 - sizeof(void *)) / sizeof(swp_entry_t))
Linus Torvalds1da177e2005-04-16 15:20:36 -070015
16struct swsusp_info {
17 struct new_utsname uts;
18 u32 version_code;
19 unsigned long num_physpages;
20 int cpus;
21 unsigned long image_pages;
22 unsigned long pagedir_pages;
23 suspend_pagedir_t * suspend_pagedir;
Rafael J. Wysocki0f7347c2005-09-27 21:45:43 -070024 swp_entry_t pagedir[MAX_PBES];
Linus Torvalds1da177e2005-04-16 15:20:36 -070025} __attribute__((aligned(PAGE_SIZE)));
26
27
28
29#ifdef CONFIG_SOFTWARE_SUSPEND
30extern int pm_suspend_disk(void);
31
32#else
33static inline int pm_suspend_disk(void)
34{
35 return -EPERM;
36}
37#endif
38extern struct semaphore pm_sem;
39#define power_attr(_name) \
40static struct subsys_attribute _name##_attr = { \
41 .attr = { \
42 .name = __stringify(_name), \
43 .mode = 0644, \
44 }, \
45 .show = _name##_show, \
46 .store = _name##_store, \
47}
48
49extern struct subsystem power_subsys;
50
51extern int freeze_processes(void);
52extern void thaw_processes(void);
53
54extern int pm_prepare_console(void);
55extern void pm_restore_console(void);
Rafael J. Wysocki25761b62005-10-30 14:59:56 -080056
57
58/* References to section boundaries */
59extern const void __nosave_begin, __nosave_end;
60
61extern unsigned int nr_copy_pages;
62extern suspend_pagedir_t *pagedir_nosave;
63extern suspend_pagedir_t *pagedir_save;
64
65extern asmlinkage int swsusp_arch_suspend(void);
66extern asmlinkage int swsusp_arch_resume(void);
67
68extern int restore_highmem(void);
69extern void free_pagedir(struct pbe *pblist);
70extern struct pbe * alloc_pagedir(unsigned nr_pages);
71extern void create_pbe_list(struct pbe *pblist, unsigned nr_pages);
72extern int enough_swap(void);