suspend.h 2.2 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5 6 7 8 9 10
#ifndef _LINUX_SWSUSP_H
#define _LINUX_SWSUSP_H

#if defined(CONFIG_X86) || defined(CONFIG_FRV) || defined(CONFIG_PPC32)
#include <asm/suspend.h>
#endif
#include <linux/swap.h>
#include <linux/notifier.h>
#include <linux/init.h>
#include <linux/pm.h>
11
#include <linux/mm.h>
L
Linus Torvalds 已提交
12

13 14 15 16
/* struct pbe is used for creating lists of pages that should be restored
 * atomically during the resume from disk, because the page frames they have
 * occupied before the suspend are in use.
 */
17
struct pbe {
18 19
	void *address;		/* address of the copy */
	void *orig_address;	/* original address of a page */
20
	struct pbe *next;
21
};
L
Linus Torvalds 已提交
22 23 24 25 26 27 28 29

/* 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);
30 31 32 33 34 35 36 37

#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) */
L
Linus Torvalds 已提交
38 39 40 41
#else
static inline int software_suspend(void)
{
	printk("Warning: fake suspend called\n");
42
	return -ENOSYS;
L
Linus Torvalds 已提交
43
}
44
#endif /* CONFIG_PM */
L
Linus Torvalds 已提交
45 46 47 48 49 50

void save_processor_state(void);
void restore_processor_state(void);
struct saved_context;
void __save_processor_state(struct saved_context *ctxt);
void __restore_processor_state(struct saved_context *ctxt);
51
unsigned long get_safe_page(gfp_t gfp_mask);
L
Linus Torvalds 已提交
52

53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
/* Page management functions for the software suspend (swsusp) */

static inline void swsusp_set_page_forbidden(struct page *page)
{
	SetPageNosave(page);
}

static inline int swsusp_page_is_forbidden(struct page *page)
{
	return PageNosave(page);
}

static inline void swsusp_unset_page_forbidden(struct page *page)
{
	ClearPageNosave(page);
}

static inline void swsusp_set_page_free(struct page *page)
{
	SetPageNosaveFree(page);
}

static inline int swsusp_page_is_free(struct page *page)
{
	return PageNosaveFree(page);
}

static inline void swsusp_unset_page_free(struct page *page)
{
	ClearPageNosaveFree(page);
}

85 86 87 88
/*
 * XXX: We try to keep some more pages free so that I/O operations succeed
 * without paging. Might this be more?
 */
89
#define PAGES_FOR_IO	1024
90

L
Linus Torvalds 已提交
91
#endif /* _LINUX_SWSUSP_H */