X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Flinux%2Fsuspend.h;h=37c1c76fd5472f7aafdbee3a7f36e6806a7e3468;hb=43bc926fffd92024b46cafaf7350d669ba9ca884;hp=932dc2ca41527fb06fdef7a7c4e4710362ae4e8b;hpb=c7b5ebbddf7bcd3651947760f423e3783bbe6573;p=linux-2.6.git diff --git a/include/linux/suspend.h b/include/linux/suspend.h index 932dc2ca4..37c1c76fd 100644 --- a/include/linux/suspend.h +++ b/include/linux/suspend.h @@ -1,7 +1,7 @@ #ifndef _LINUX_SWSUSP_H #define _LINUX_SWSUSP_H -#ifdef CONFIG_X86 +#if defined(CONFIG_X86) || defined(CONFIG_FRV) || defined(CONFIG_PPC32) #include #endif #include @@ -10,53 +10,55 @@ #include #include -#ifdef CONFIG_PM /* page backup entry */ typedef struct pbe { unsigned long address; /* address of the copy */ unsigned long orig_address; /* original address of page */ - swp_entry_t swap_address; - swp_entry_t dummy; /* we need scratch space at - * end of page (see link, diskpage) - */ + struct pbe *next; } suspend_pagedir_t; +#define for_each_pbe(pbe, pblist) \ + for (pbe = pblist ; pbe ; pbe = pbe->next) + +#define PBES_PER_PAGE (PAGE_SIZE/sizeof(struct pbe)) +#define PB_PAGE_SKIP (PBES_PER_PAGE-1) + +#define for_each_pb_page(pbe, pblist) \ + for (pbe = pblist ; pbe ; pbe = (pbe+PB_PAGE_SKIP)->next) + + #define SWAP_FILENAME_MAXLENGTH 32 -#define SUSPEND_PD_PAGES(x) (((x)*sizeof(struct pbe))/PAGE_SIZE+1) +extern dev_t swsusp_resume_device; /* mm/vmscan.c */ extern int shrink_mem(void); /* mm/page_alloc.c */ extern void drain_local_pages(void); +extern void mark_free_pages(struct zone *zone); +#ifdef CONFIG_PM /* kernel/power/swsusp.c */ extern int software_suspend(void); -#else /* CONFIG_SOFTWARE_SUSPEND */ +#if defined(CONFIG_VT) && defined(CONFIG_VT_CONSOLE) +extern int pm_prepare_console(void); +extern void pm_restore_console(void); +#else +static inline int pm_prepare_console(void) { return 0; } +static inline void pm_restore_console(void) {} +#endif /* defined(CONFIG_VT) && defined(CONFIG_VT_CONSOLE) */ +#else static inline int software_suspend(void) { printk("Warning: fake suspend called\n"); return -EPERM; } -#endif /* CONFIG_SOFTWARE_SUSPEND */ +#endif /* CONFIG_PM */ - -#ifdef CONFIG_PM -extern void refrigerator(unsigned long); -extern int freeze_processes(void); -extern void thaw_processes(void); - -extern int pm_prepare_console(void); -extern void pm_restore_console(void); - -#else -static inline void refrigerator(unsigned long flag) {} -#endif /* CONFIG_PM */ - -#ifdef CONFIG_SMP +#ifdef CONFIG_SUSPEND_SMP extern void disable_nonboot_cpus(void); extern void enable_nonboot_cpus(void); #else @@ -69,5 +71,12 @@ void restore_processor_state(void); struct saved_context; void __save_processor_state(struct saved_context *ctxt); void __restore_processor_state(struct saved_context *ctxt); +unsigned long get_safe_page(gfp_t gfp_mask); + +/* + * XXX: We try to keep some more pages free so that I/O operations succeed + * without paging. Might this be more? + */ +#define PAGES_FOR_IO 1024 #endif /* _LINUX_SWSUSP_H */