1#ifndef _LINUX_SWSUSP_H 2#define _LINUX_SWSUSP_H 3 4#ifdef CONFIG_X86 5#include <asm/suspend.h> 6#endif 7#include <linux/swap.h> 8#include <linux/notifier.h> 9#include <linux/config.h> 10#include <linux/init.h> 11 12extern unsigned char software_suspend_enabled; 13 14#define NORESUME 1 15#define RESUME_SPECIFIED 2 16 17#ifdef CONFIG_SOFTWARE_SUSPEND 18/* page backup entry */ 19typedef struct pbe { 20 unsigned long address; /* address of the copy */ 21 unsigned long orig_address; /* original address of page */ 22 swp_entry_t swap_address; 23 swp_entry_t dummy; /* we need scratch space at 24 * end of page (see link, diskpage) 25 */ 26} suspend_pagedir_t; 27 28#define SWAP_FILENAME_MAXLENGTH 32 29 30struct suspend_header { 31 __u32 version_code; 32 unsigned long num_physpages; 33 char machine[8]; 34 char version[20]; 35 int num_cpus; 36 int page_size; 37 suspend_pagedir_t *suspend_pagedir; 38 unsigned int num_pbes; 39 struct swap_location { 40 char filename[SWAP_FILENAME_MAXLENGTH]; 41 } swap_location[MAX_SWAPFILES]; 42}; 43 44#define SUSPEND_PD_PAGES(x) (((x)*sizeof(struct pbe))/PAGE_SIZE+1) 45 46extern struct tq_struct suspend_tq; 47 48/* mm/vmscan.c */ 49extern int shrink_mem(void); 50 51/* kernel/suspend.c */ 52extern void software_suspend(void); 53extern void software_resume(void); 54 55extern int register_suspend_notifier(struct notifier_block *); 56extern int unregister_suspend_notifier(struct notifier_block *); 57extern void refrigerator(unsigned long); 58 59extern int freeze_processes(void); 60extern void thaw_processes(void); 61 62extern unsigned int nr_copy_pages __nosavedata; 63extern suspend_pagedir_t *pagedir_nosave __nosavedata; 64 65/* Communication between kernel/suspend.c and arch/i386/suspend.c */ 66 67extern void do_magic_resume_1(void); 68extern void do_magic_resume_2(void); 69extern void do_magic_suspend_1(void); 70extern void do_magic_suspend_2(void); 71 72/* Communication between acpi and arch/i386/suspend.c */ 73 74extern void do_suspend_lowlevel(int resume); 75 76#else 77#define software_suspend() do { } while(0) 78#define software_resume() do { } while(0) 79#define register_suspend_notifier(a) do { } while(0) 80#define unregister_suspend_notifier(a) do { } while(0) 81#define refrigerator(a) do { BUG(); } while(0) 82#define freeze_processes() do { panic("You need CONFIG_SOFTWARE_SUSPEND to do sleeps."); } while(0) 83#define thaw_processes() do { } while(0) 84#endif 85 86#endif /* _LINUX_SWSUSP_H */ 87

