2005-04-16 16:20:36 -06:00
|
|
|
#include <linux/suspend.h>
|
|
|
|
#include <linux/utsname.h>
|
|
|
|
|
2005-09-22 22:44:11 -06:00
|
|
|
/* With SUSPEND_CONSOLE defined suspend looks *really* cool, but
|
2005-04-16 16:20:36 -06:00
|
|
|
we probably do not take enough locks for switching consoles, etc,
|
|
|
|
so bad things might happen.
|
|
|
|
*/
|
|
|
|
#if defined(CONFIG_VT) && defined(CONFIG_VT_CONSOLE)
|
|
|
|
#define SUSPEND_CONSOLE (MAX_NR_CONSOLES-1)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
struct swsusp_info {
|
|
|
|
struct new_utsname uts;
|
|
|
|
u32 version_code;
|
|
|
|
unsigned long num_physpages;
|
|
|
|
int cpus;
|
|
|
|
unsigned long image_pages;
|
2006-01-06 01:13:05 -07:00
|
|
|
unsigned long pages;
|
2005-04-16 16:20:36 -06:00
|
|
|
} __attribute__((aligned(PAGE_SIZE)));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef CONFIG_SOFTWARE_SUSPEND
|
|
|
|
extern int pm_suspend_disk(void);
|
|
|
|
|
|
|
|
#else
|
|
|
|
static inline int pm_suspend_disk(void)
|
|
|
|
{
|
|
|
|
return -EPERM;
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
extern struct semaphore pm_sem;
|
|
|
|
#define power_attr(_name) \
|
|
|
|
static struct subsys_attribute _name##_attr = { \
|
|
|
|
.attr = { \
|
|
|
|
.name = __stringify(_name), \
|
|
|
|
.mode = 0644, \
|
|
|
|
}, \
|
|
|
|
.show = _name##_show, \
|
|
|
|
.store = _name##_store, \
|
|
|
|
}
|
|
|
|
|
|
|
|
extern struct subsystem power_subsys;
|
|
|
|
|
2006-02-01 04:05:21 -07:00
|
|
|
#ifdef SUSPEND_CONSOLE
|
2005-04-16 16:20:36 -06:00
|
|
|
extern int pm_prepare_console(void);
|
|
|
|
extern void pm_restore_console(void);
|
2006-02-01 04:05:21 -07:00
|
|
|
#else
|
|
|
|
static int pm_prepare_console(void) { return 0; }
|
|
|
|
static void pm_restore_console(void) {}
|
|
|
|
#endif
|
2005-10-30 15:59:56 -07:00
|
|
|
|
|
|
|
/* References to section boundaries */
|
|
|
|
extern const void __nosave_begin, __nosave_end;
|
|
|
|
|
|
|
|
extern unsigned int nr_copy_pages;
|
2006-01-06 01:13:46 -07:00
|
|
|
extern struct pbe *pagedir_nosave;
|
|
|
|
|
2006-02-01 04:05:07 -07:00
|
|
|
/* Preferred image size in bytes (default 500 MB) */
|
|
|
|
extern unsigned long image_size;
|
2005-10-30 15:59:56 -07:00
|
|
|
|
|
|
|
extern asmlinkage int swsusp_arch_suspend(void);
|
|
|
|
extern asmlinkage int swsusp_arch_resume(void);
|
|
|
|
|
2006-01-06 01:13:46 -07:00
|
|
|
extern unsigned int count_data_pages(void);
|
2005-11-08 22:34:40 -07:00
|
|
|
extern void free_pagedir(struct pbe *pblist);
|
2006-01-06 01:13:46 -07:00
|
|
|
extern void release_eaten_pages(void);
|
2005-11-08 22:34:39 -07:00
|
|
|
extern struct pbe *alloc_pagedir(unsigned nr_pages, gfp_t gfp_mask, int safe_needed);
|
2005-10-30 15:59:58 -07:00
|
|
|
extern void swsusp_free(void);
|
2005-11-08 22:34:39 -07:00
|
|
|
extern int alloc_data_pages(struct pbe *pblist, gfp_t gfp_mask, int safe_needed);
|
2006-01-06 01:13:05 -07:00
|
|
|
extern unsigned int snapshot_nr_pages(void);
|
|
|
|
extern struct pbe *snapshot_pblist(void);
|
|
|
|
extern void snapshot_pblist_set(struct pbe *pblist);
|