aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-x86/page.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-x86/page.h')
-rw-r--r--include/asm-x86/page.h26
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
54typedef struct { pgdval_t pgd; } pgd_t;
55typedef struct { pgprotval_t pgprot; } pgprot_t;
56
49extern int page_is_ram(unsigned long pagenr); 57extern int page_is_ram(unsigned long pagenr);
50extern int devmem_is_allowed(unsigned long pagenr); 58extern int devmem_is_allowed(unsigned long pagenr);
59extern void map_devmem(unsigned long pfn, unsigned long size,
60 pgprot_t vma_prot);
61extern void unmap_devmem(unsigned long pfn, unsigned long size,
62 pgprot_t vma_prot);
51 63
52extern unsigned long max_pfn_mapped; 64extern 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
72typedef struct { pgdval_t pgd; } pgd_t;
73typedef struct { pgprotval_t pgprot; } pgprot_t;
74
75static inline pgd_t native_make_pgd(pgdval_t val) 84static 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 */