Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | #include <linux/suspend.h> |
| 2 | #include <linux/utsname.h> |
| 3 | |
Pavel Machek | 8686bcd | 2005-09-22 21:44:11 -0700 | [diff] [blame] | 4 | /* With SUSPEND_CONSOLE defined suspend looks *really* cool, but |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 5 | 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. Wysocki | 0f7347c | 2005-09-27 21:45:43 -0700 | [diff] [blame] | 12 | #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 Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 15 | |
| 16 | struct 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. Wysocki | 0f7347c | 2005-09-27 21:45:43 -0700 | [diff] [blame] | 24 | swp_entry_t pagedir[MAX_PBES]; |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 25 | } __attribute__((aligned(PAGE_SIZE))); |
| 26 | |
| 27 | |
| 28 | |
| 29 | #ifdef CONFIG_SOFTWARE_SUSPEND |
| 30 | extern int pm_suspend_disk(void); |
| 31 | |
| 32 | #else |
| 33 | static inline int pm_suspend_disk(void) |
| 34 | { |
| 35 | return -EPERM; |
| 36 | } |
| 37 | #endif |
| 38 | extern struct semaphore pm_sem; |
| 39 | #define power_attr(_name) \ |
| 40 | static 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 | |
| 49 | extern struct subsystem power_subsys; |
| 50 | |
| 51 | extern int freeze_processes(void); |
| 52 | extern void thaw_processes(void); |
| 53 | |
| 54 | extern int pm_prepare_console(void); |
| 55 | extern void pm_restore_console(void); |
Rafael J. Wysocki | 25761b6 | 2005-10-30 14:59:56 -0800 | [diff] [blame^] | 56 | |
| 57 | |
| 58 | /* References to section boundaries */ |
| 59 | extern const void __nosave_begin, __nosave_end; |
| 60 | |
| 61 | extern unsigned int nr_copy_pages; |
| 62 | extern suspend_pagedir_t *pagedir_nosave; |
| 63 | extern suspend_pagedir_t *pagedir_save; |
| 64 | |
| 65 | extern asmlinkage int swsusp_arch_suspend(void); |
| 66 | extern asmlinkage int swsusp_arch_resume(void); |
| 67 | |
| 68 | extern int restore_highmem(void); |
| 69 | extern void free_pagedir(struct pbe *pblist); |
| 70 | extern struct pbe * alloc_pagedir(unsigned nr_pages); |
| 71 | extern void create_pbe_list(struct pbe *pblist, unsigned nr_pages); |
| 72 | extern int enough_swap(void); |