page_32.h 2.8 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 23
#ifdef CONFIG_4KSTACKS
#define THREAD_ORDER	0
#else
#define THREAD_ORDER	1
#endif
#define THREAD_SIZE 	(PAGE_SIZE << THREAD_ORDER)


24
#ifdef CONFIG_X86_PAE
25 26
/* 44=32+12, the limit we can fit into an unsigned long pfn */
#define __PHYSICAL_MASK_SHIFT	44
27 28
#define __VIRTUAL_MASK_SHIFT	32
#define PAGETABLE_LEVELS	3
L
Linus Torvalds 已提交
29 30

#ifndef __ASSEMBLY__
31 32 33 34 35 36
typedef u64	pteval_t;
typedef u64	pmdval_t;
typedef u64	pudval_t;
typedef u64	pgdval_t;
typedef u64	pgprotval_t;
typedef u64	phys_addr_t;
L
Linus Torvalds 已提交
37

38 39 40 41 42 43
typedef union {
	struct {
		unsigned long pte_low, pte_high;
	};
	pteval_t pte;
} pte_t;
44
#endif	/* __ASSEMBLY__
L
Linus Torvalds 已提交
45
 */
46 47 48 49 50 51 52 53 54 55 56 57
#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;
typedef unsigned long	phys_addr_t;
58

59 60 61 62
typedef union {
	pteval_t pte;
	pteval_t pte_low;
} pte_t;
63 64 65 66

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

I
Ingo Molnar 已提交
67 68 69 70
#ifndef __ASSEMBLY__
typedef struct page *pgtable_t;
#endif

71 72 73
#ifdef CONFIG_HUGETLB_PAGE
#define HAVE_ARCH_HUGETLB_UNMAPPED_AREA
#endif
L
Linus Torvalds 已提交
74 75

#ifndef __ASSEMBLY__
76
#define __phys_addr(x)		((x) - PAGE_OFFSET)
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
#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;

#define VMALLOC_RESERVE		((unsigned long)__VMALLOC_RESERVE)
93
#define MAXMEM			(-__PAGE_OFFSET - __VMALLOC_RESERVE)
L
Linus Torvalds 已提交
94

95
extern void find_low_pfn_range(void);
96 97
extern unsigned long init_memory_mapping(unsigned long start,
					 unsigned long end);
98
extern void initmem_init(unsigned long, unsigned long);
99 100 101
extern void setup_bootmem_allocator(void);


102 103
#ifdef CONFIG_X86_USE_3DNOW
#include <asm/mmx.h>
104

105 106 107 108
static inline void clear_page(void *page)
{
	mmx_clear_page(page);
}
L
Linus Torvalds 已提交
109

110 111 112 113 114 115
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 已提交
116

117 118 119 120
static inline void clear_page(void *page)
{
	memset(page, 0, PAGE_SIZE);
}
121

122 123 124 125 126 127
static inline void copy_page(void *to, void *from)
{
	memcpy(to, from, PAGE_SIZE);
}
#endif	/* CONFIG_X86_3DNOW */
#endif	/* !__ASSEMBLY__ */
128

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