1 #ifndef ASM_X86__PAGE_32_H
2 #define ASM_X86__PAGE_32_H
5 * This handles the memory map.
7 * A __PAGE_OFFSET of 0xC0000000 means that the kernel has
8 * a virtual address space of one gigabyte, which limits the
9 * amount of physical memory you can use to about 950MB.
11 * If you want more physical memory than this then see the CONFIG_HIGHMEM4G
12 * and CONFIG_HIGHMEM64G options in the kernel configuration.
14 #define __PAGE_OFFSET _AC(CONFIG_PAGE_OFFSET, UL)
16 #ifdef CONFIG_4KSTACKS
17 #define THREAD_ORDER 0
19 #define THREAD_ORDER 1
21 #define THREAD_SIZE (PAGE_SIZE << THREAD_ORDER)
23 #define STACKFAULT_STACK 0
24 #define DOUBLEFAULT_STACK 1
28 #define N_EXCEPTION_STACKS 1
31 /* 44=32+12, the limit we can fit into an unsigned long pfn */
32 #define __PHYSICAL_MASK_SHIFT 44
33 #define __VIRTUAL_MASK_SHIFT 32
34 #define PAGETABLE_LEVELS 3
41 typedef u64 pgprotval_t;
42 typedef u64 phys_addr_t;
46 unsigned long pte_low, pte_high;
50 #endif /* __ASSEMBLY__
52 #else /* !CONFIG_X86_PAE */
53 #define __PHYSICAL_MASK_SHIFT 32
54 #define __VIRTUAL_MASK_SHIFT 32
55 #define PAGETABLE_LEVELS 2
58 typedef unsigned long pteval_t;
59 typedef unsigned long pmdval_t;
60 typedef unsigned long pudval_t;
61 typedef unsigned long pgdval_t;
62 typedef unsigned long pgprotval_t;
63 typedef unsigned long phys_addr_t;
70 #endif /* __ASSEMBLY__ */
71 #endif /* CONFIG_X86_PAE */
74 typedef struct page *pgtable_t;
77 #ifdef CONFIG_HUGETLB_PAGE
78 #define HAVE_ARCH_HUGETLB_UNMAPPED_AREA
82 #define __phys_addr_nodebug(x) ((x) - PAGE_OFFSET)
83 #ifdef CONFIG_DEBUG_VIRTUAL
84 extern unsigned long __phys_addr(unsigned long);
86 #define __phys_addr(x) __phys_addr_nodebug(x)
88 #define __phys_reloc_hide(x) RELOC_HIDE((x), 0)
91 #define pfn_valid(pfn) ((pfn) < max_mapnr)
92 #endif /* CONFIG_FLATMEM */
94 extern int nx_enabled;
97 * This much address space is reserved for vmalloc() and iomap()
98 * as well as fixmap mappings.
100 extern unsigned int __VMALLOC_RESERVE;
101 extern int sysctl_legacy_va_layout;
103 extern void find_low_pfn_range(void);
104 extern unsigned long init_memory_mapping(unsigned long start,
106 extern void initmem_init(unsigned long, unsigned long);
107 extern void free_initmem(void);
108 extern void setup_bootmem_allocator(void);
111 #ifdef CONFIG_X86_USE_3DNOW
114 static inline void clear_page(void *page)
116 mmx_clear_page(page);
119 static inline void copy_page(void *to, void *from)
121 mmx_copy_page(to, from);
123 #else /* !CONFIG_X86_USE_3DNOW */
124 #include <linux/string.h>
126 static inline void clear_page(void *page)
128 memset(page, 0, PAGE_SIZE);
131 static inline void copy_page(void *to, void *from)
133 memcpy(to, from, PAGE_SIZE);
135 #endif /* CONFIG_X86_3DNOW */
136 #endif /* !__ASSEMBLY__ */
138 #endif /* ASM_X86__PAGE_32_H */