diff options
Diffstat (limited to 'include/asm-x86/page.h')
-rw-r--r-- | include/asm-x86/page.h | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/include/asm-x86/page.h b/include/asm-x86/page.h index b381f4a5a0bd..b52ed85f32f5 100644 --- a/include/asm-x86/page.h +++ b/include/asm-x86/page.h | |||
@@ -10,8 +10,16 @@ | |||
10 | 10 | ||
11 | #ifdef __KERNEL__ | 11 | #ifdef __KERNEL__ |
12 | 12 | ||
13 | #define PHYSICAL_PAGE_MASK (PAGE_MASK & __PHYSICAL_MASK) | 13 | #define __PHYSICAL_MASK ((phys_addr_t)(1ULL << __PHYSICAL_MASK_SHIFT) - 1) |
14 | #define PTE_MASK (_AT(long, PHYSICAL_PAGE_MASK)) | 14 | #define __VIRTUAL_MASK ((1UL << __VIRTUAL_MASK_SHIFT) - 1) |
15 | |||
16 | /* Cast PAGE_MASK to a signed type so that it is sign-extended if | ||
17 | virtual addresses are 32-bits but physical addresses are larger | ||
18 | (ie, 32-bit PAE). */ | ||
19 | #define PHYSICAL_PAGE_MASK (((signed long)PAGE_MASK) & __PHYSICAL_MASK) | ||
20 | |||
21 | /* PTE_MASK extracts the PFN from a (pte|pmd|pud|pgd)val_t */ | ||
22 | #define PTE_MASK ((pteval_t)PHYSICAL_PAGE_MASK) | ||
15 | 23 | ||
16 | #define PMD_PAGE_SIZE (_AC(1, UL) << PMD_SHIFT) | 24 | #define PMD_PAGE_SIZE (_AC(1, UL) << PMD_SHIFT) |
17 | #define PMD_PAGE_MASK (~(PMD_PAGE_SIZE-1)) | 25 | #define PMD_PAGE_MASK (~(PMD_PAGE_SIZE-1)) |
@@ -24,9 +32,6 @@ | |||
24 | /* to align the pointer to the (next) page boundary */ | 32 | /* to align the pointer to the (next) page boundary */ |
25 | #define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK) | 33 | #define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK) |
26 | 34 | ||
27 | #define __PHYSICAL_MASK _AT(phys_addr_t, (_AC(1,ULL) << __PHYSICAL_MASK_SHIFT) - 1) | ||
28 | #define __VIRTUAL_MASK ((_AC(1,UL) << __VIRTUAL_MASK_SHIFT) - 1) | ||
29 | |||
30 | #ifndef __ASSEMBLY__ | 35 | #ifndef __ASSEMBLY__ |
31 | #include <linux/types.h> | 36 | #include <linux/types.h> |
32 | #endif | 37 | #endif |
@@ -46,8 +51,15 @@ | |||
46 | 51 | ||
47 | #ifndef __ASSEMBLY__ | 52 | #ifndef __ASSEMBLY__ |
48 | 53 | ||
54 | typedef struct { pgdval_t pgd; } pgd_t; | ||
55 | typedef struct { pgprotval_t pgprot; } pgprot_t; | ||
56 | |||
49 | extern int page_is_ram(unsigned long pagenr); | 57 | extern int page_is_ram(unsigned long pagenr); |
50 | extern int devmem_is_allowed(unsigned long pagenr); | 58 | extern int devmem_is_allowed(unsigned long pagenr); |
59 | extern void map_devmem(unsigned long pfn, unsigned long size, | ||
60 | pgprot_t vma_prot); | ||
61 | extern void unmap_devmem(unsigned long pfn, unsigned long size, | ||
62 | pgprot_t vma_prot); | ||
51 | 63 | ||
52 | extern unsigned long max_pfn_mapped; | 64 | extern unsigned long max_pfn_mapped; |
53 | 65 | ||
@@ -69,9 +81,6 @@ static inline void copy_user_page(void *to, void *from, unsigned long vaddr, | |||
69 | alloc_page_vma(GFP_HIGHUSER | __GFP_ZERO | movableflags, vma, vaddr) | 81 | alloc_page_vma(GFP_HIGHUSER | __GFP_ZERO | movableflags, vma, vaddr) |
70 | #define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE | 82 | #define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE |
71 | 83 | ||
72 | typedef struct { pgdval_t pgd; } pgd_t; | ||
73 | typedef struct { pgprotval_t pgprot; } pgprot_t; | ||
74 | |||
75 | static inline pgd_t native_make_pgd(pgdval_t val) | 84 | static inline pgd_t native_make_pgd(pgdval_t val) |
76 | { | 85 | { |
77 | return (pgd_t) { val }; | 86 | return (pgd_t) { val }; |
@@ -155,6 +164,7 @@ static inline pteval_t native_pte_val(pte_t pte) | |||
155 | #endif | 164 | #endif |
156 | 165 | ||
157 | #define pte_val(x) native_pte_val(x) | 166 | #define pte_val(x) native_pte_val(x) |
167 | #define pte_flags(x) native_pte_val(x) | ||
158 | #define __pte(x) native_make_pte(x) | 168 | #define __pte(x) native_make_pte(x) |
159 | 169 | ||
160 | #endif /* CONFIG_PARAVIRT */ | 170 | #endif /* CONFIG_PARAVIRT */ |