blob: 11c4b39cada16c8f4f3929d08fc07e0ecc9f8aee [file] [log] [blame]
Jeremy Fitzhardinge11b7c7d2008-01-30 13:32:44 +01001#ifndef _ASM_X86_PAGE_32_H
2#define _ASM_X86_PAGE_32_H
Linus Torvalds1da177e2005-04-16 15:20:36 -07003
Linus Torvalds1da177e2005-04-16 15:20:36 -07004/*
Jeremy Fitzhardinge11b7c7d2008-01-30 13:32:44 +01005 * This handles the memory map.
6 *
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.
10 *
11 * If you want more physical memory than this then see the CONFIG_HIGHMEM4G
12 * and CONFIG_HIGHMEM64G options in the kernel configuration.
Linus Torvalds1da177e2005-04-16 15:20:36 -070013 */
Jeremy Fitzhardinge11b7c7d2008-01-30 13:32:44 +010014#define __PAGE_OFFSET _AC(CONFIG_PAGE_OFFSET, UL)
Jeremy Fitzhardinge3dc494e2007-05-02 19:27:13 +020015
Jeremy Fitzhardinge11b7c7d2008-01-30 13:32:44 +010016#ifdef CONFIG_X86_PAE
17#define __PHYSICAL_MASK_SHIFT 36
18#define __VIRTUAL_MASK_SHIFT 32
19#define PAGETABLE_LEVELS 3
Linus Torvalds1da177e2005-04-16 15:20:36 -070020
Linus Torvalds1da177e2005-04-16 15:20:36 -070021#ifndef __ASSEMBLY__
Jeremy Fitzhardinge11b7c7d2008-01-30 13:32:44 +010022typedef u64 pteval_t;
23typedef u64 pmdval_t;
24typedef u64 pudval_t;
25typedef u64 pgdval_t;
26typedef u64 pgprotval_t;
27typedef u64 phys_addr_t;
Linus Torvalds1da177e2005-04-16 15:20:36 -070028
Jeremy Fitzhardingec8e53932008-01-30 13:32:57 +010029typedef union {
30 struct {
31 unsigned long pte_low, pte_high;
32 };
33 pteval_t pte;
34} pte_t;
Jeremy Fitzhardinge11b7c7d2008-01-30 13:32:44 +010035#endif /* __ASSEMBLY__
36 */
37#else /* !CONFIG_X86_PAE */
38#define __PHYSICAL_MASK_SHIFT 32
39#define __VIRTUAL_MASK_SHIFT 32
40#define PAGETABLE_LEVELS 2
Linus Torvalds1da177e2005-04-16 15:20:36 -070041
Jeremy Fitzhardinge11b7c7d2008-01-30 13:32:44 +010042#ifndef __ASSEMBLY__
43typedef unsigned long pteval_t;
44typedef unsigned long pmdval_t;
45typedef unsigned long pudval_t;
46typedef unsigned long pgdval_t;
47typedef unsigned long pgprotval_t;
48typedef unsigned long phys_addr_t;
David Woodhousecd469e02006-04-27 15:48:08 +010049
Jeremy Fitzhardingec8e53932008-01-30 13:32:57 +010050typedef union { pteval_t pte, pte_low; } pte_t;
Jeremy Fitzhardinge11b7c7d2008-01-30 13:32:44 +010051typedef pte_t boot_pte_t;
52
Jeremy Fitzhardinge11b7c7d2008-01-30 13:32:44 +010053#endif /* __ASSEMBLY__ */
54#endif /* CONFIG_X86_PAE */
55
56#ifdef CONFIG_HUGETLB_PAGE
57#define HAVE_ARCH_HUGETLB_UNMAPPED_AREA
58#endif
59
60#ifndef __ASSEMBLY__
61#define __phys_addr(x) ((x)-PAGE_OFFSET)
62#define __phys_reloc_hide(x) RELOC_HIDE((x), 0)
63
64#ifdef CONFIG_FLATMEM
65#define pfn_valid(pfn) ((pfn) < max_mapnr)
66#endif /* CONFIG_FLATMEM */
67
68extern int nx_enabled;
69
70/*
71 * This much address space is reserved for vmalloc() and iomap()
72 * as well as fixmap mappings.
73 */
74extern unsigned int __VMALLOC_RESERVE;
75extern int sysctl_legacy_va_layout;
76extern int page_is_ram(unsigned long pagenr);
77
78#define VMALLOC_RESERVE ((unsigned long)__VMALLOC_RESERVE)
79#define MAXMEM (-__PAGE_OFFSET-__VMALLOC_RESERVE)
80
81#ifdef CONFIG_X86_USE_3DNOW
82#include <asm/mmx.h>
83
84static inline void clear_page(void *page)
85{
86 mmx_clear_page(page);
87}
88
89static inline void copy_page(void *to, void *from)
90{
91 mmx_copy_page(to, from);
92}
93#else /* !CONFIG_X86_USE_3DNOW */
94#include <linux/string.h>
95
96static inline void clear_page(void *page)
97{
98 memset(page, 0, PAGE_SIZE);
99}
100
101static inline void copy_page(void *to, void *from)
102{
103 memcpy(to, from, PAGE_SIZE);
104}
105#endif /* CONFIG_X86_3DNOW */
106#endif /* !__ASSEMBLY__ */
107
108#endif /* _ASM_X86_PAGE_32_H */