page_32.h 3.0 KB
Newer Older
V
Vegard Nossum 已提交
1 2
#ifndef ASM_X86__PAGE_32_H
#define ASM_X86__PAGE_32_H
3 4 5 6 7 8 9 10 11 12 13 14 15

/*
 * This handles the memory map.
 *
 * A __PAGE_OFFSET of 0xC0000000 means that the kernel has
 * a virtual address space of one gigabyte, which limits the
 * amount of physical memory you can use to about 950MB.
 *
 * If you want more physical memory than this then see the CONFIG_HIGHMEM4G
 * and CONFIG_HIGHMEM64G options in the kernel configuration.
 */
#define __PAGE_OFFSET		_AC(CONFIG_PAGE_OFFSET, UL)

16 17 18 19 20 21 22
#ifdef CONFIG_4KSTACKS
#define THREAD_ORDER	0
#else
#define THREAD_ORDER	1
#endif
#define THREAD_SIZE 	(PAGE_SIZE << THREAD_ORDER)

23 24 25 26 27 28
#define STACKFAULT_STACK 0
#define DOUBLEFAULT_STACK 1
#define NMI_STACK 0
#define DEBUG_STACK 0
#define MCE_STACK 0
#define N_EXCEPTION_STACKS 1
29

30
#ifdef CONFIG_X86_PAE
31 32
/* 44=32+12, the limit we can fit into an unsigned long pfn */
#define __PHYSICAL_MASK_SHIFT	44
33 34
#define __VIRTUAL_MASK_SHIFT	32
#define PAGETABLE_LEVELS	3
L
Linus Torvalds 已提交
35 36

#ifndef __ASSEMBLY__
37 38 39 40 41
typedef u64	pteval_t;
typedef u64	pmdval_t;
typedef u64	pudval_t;
typedef u64	pgdval_t;
typedef u64	pgprotval_t;
L
Linus Torvalds 已提交
42

43 44 45 46 47 48
typedef union {
	struct {
		unsigned long pte_low, pte_high;
	};
	pteval_t pte;
} pte_t;
49
#endif	/* __ASSEMBLY__
L
Linus Torvalds 已提交
50
 */
51 52 53 54 55 56 57 58 59 60 61
#else  /* !CONFIG_X86_PAE */
#define __PHYSICAL_MASK_SHIFT	32
#define __VIRTUAL_MASK_SHIFT	32
#define PAGETABLE_LEVELS	2

#ifndef __ASSEMBLY__
typedef unsigned long	pteval_t;
typedef unsigned long	pmdval_t;
typedef unsigned long	pudval_t;
typedef unsigned long	pgdval_t;
typedef unsigned long	pgprotval_t;
62

63 64 65 66
typedef union {
	pteval_t pte;
	pteval_t pte_low;
} pte_t;
67 68 69 70

#endif	/* __ASSEMBLY__ */
#endif	/* CONFIG_X86_PAE */

I
Ingo Molnar 已提交
71 72 73 74
#ifndef __ASSEMBLY__
typedef struct page *pgtable_t;
#endif

75 76 77
#ifdef CONFIG_HUGETLB_PAGE
#define HAVE_ARCH_HUGETLB_UNMAPPED_AREA
#endif
L
Linus Torvalds 已提交
78 79

#ifndef __ASSEMBLY__
80
#define __phys_addr_nodebug(x)	((x) - PAGE_OFFSET)
J
Jiri Slaby 已提交
81
#ifdef CONFIG_DEBUG_VIRTUAL
J
Jiri Slaby 已提交
82
extern unsigned long __phys_addr(unsigned long);
J
Jiri Slaby 已提交
83
#else
84
#define __phys_addr(x)		__phys_addr_nodebug(x)
J
Jiri Slaby 已提交
85
#endif
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
#define __phys_reloc_hide(x)	RELOC_HIDE((x), 0)

#ifdef CONFIG_FLATMEM
#define pfn_valid(pfn)		((pfn) < max_mapnr)
#endif /* CONFIG_FLATMEM */

extern int nx_enabled;

/*
 * This much address space is reserved for vmalloc() and iomap()
 * as well as fixmap mappings.
 */
extern unsigned int __VMALLOC_RESERVE;
extern int sysctl_legacy_va_layout;

101
extern void find_low_pfn_range(void);
102 103
extern unsigned long init_memory_mapping(unsigned long start,
					 unsigned long end);
104
extern void initmem_init(unsigned long, unsigned long);
105
extern void free_initmem(void);
106 107 108
extern void setup_bootmem_allocator(void);


109 110
#ifdef CONFIG_X86_USE_3DNOW
#include <asm/mmx.h>
111

112 113 114 115
static inline void clear_page(void *page)
{
	mmx_clear_page(page);
}
L
Linus Torvalds 已提交
116

117 118 119 120 121 122
static inline void copy_page(void *to, void *from)
{
	mmx_copy_page(to, from);
}
#else  /* !CONFIG_X86_USE_3DNOW */
#include <linux/string.h>
L
Linus Torvalds 已提交
123

124 125 126 127
static inline void clear_page(void *page)
{
	memset(page, 0, PAGE_SIZE);
}
128

129 130 131 132 133 134
static inline void copy_page(void *to, void *from)
{
	memcpy(to, from, PAGE_SIZE);
}
#endif	/* CONFIG_X86_3DNOW */
#endif	/* !__ASSEMBLY__ */
135

V
Vegard Nossum 已提交
136
#endif /* ASM_X86__PAGE_32_H */