.. | .. |
---|
42 | 42 | |
---|
43 | 43 | /* NOTE: even on 64 bits, these entries are __u32 because we allocate |
---|
44 | 44 | * the pmd and pgd in ZONE_DMA (i.e. under 4GB) */ |
---|
45 | | -typedef struct { __u32 pmd; } pmd_t; |
---|
46 | 45 | typedef struct { __u32 pgd; } pgd_t; |
---|
47 | 46 | typedef struct { unsigned long pgprot; } pgprot_t; |
---|
48 | 47 | |
---|
49 | | -#define pte_val(x) ((x).pte) |
---|
50 | | -/* These do not work lvalues, so make sure we don't use them as such. */ |
---|
| 48 | +#if CONFIG_PGTABLE_LEVELS == 3 |
---|
| 49 | +typedef struct { __u32 pmd; } pmd_t; |
---|
| 50 | +#define __pmd(x) ((pmd_t) { (x) } ) |
---|
| 51 | +/* pXd_val() do not work as lvalues, so make sure we don't use them as such. */ |
---|
51 | 52 | #define pmd_val(x) ((x).pmd + 0) |
---|
| 53 | +#endif |
---|
| 54 | + |
---|
| 55 | +#define pte_val(x) ((x).pte) |
---|
52 | 56 | #define pgd_val(x) ((x).pgd + 0) |
---|
53 | 57 | #define pgprot_val(x) ((x).pgprot) |
---|
54 | 58 | |
---|
55 | 59 | #define __pte(x) ((pte_t) { (x) } ) |
---|
56 | | -#define __pmd(x) ((pmd_t) { (x) } ) |
---|
57 | 60 | #define __pgd(x) ((pgd_t) { (x) } ) |
---|
58 | 61 | #define __pgprot(x) ((pgprot_t) { (x) } ) |
---|
59 | | - |
---|
60 | | -#define __pmd_val_set(x,n) (x).pmd = (n) |
---|
61 | | -#define __pgd_val_set(x,n) (x).pgd = (n) |
---|
62 | 62 | |
---|
63 | 63 | #else |
---|
64 | 64 | /* |
---|
65 | 65 | * .. while these make it easier on the compiler |
---|
66 | 66 | */ |
---|
67 | 67 | typedef unsigned long pte_t; |
---|
| 68 | + |
---|
| 69 | +#if CONFIG_PGTABLE_LEVELS == 3 |
---|
68 | 70 | typedef __u32 pmd_t; |
---|
| 71 | +#define pmd_val(x) (x) |
---|
| 72 | +#define __pmd(x) (x) |
---|
| 73 | +#endif |
---|
| 74 | + |
---|
69 | 75 | typedef __u32 pgd_t; |
---|
70 | 76 | typedef unsigned long pgprot_t; |
---|
71 | 77 | |
---|
72 | 78 | #define pte_val(x) (x) |
---|
73 | | -#define pmd_val(x) (x) |
---|
74 | 79 | #define pgd_val(x) (x) |
---|
75 | 80 | #define pgprot_val(x) (x) |
---|
76 | 81 | |
---|
77 | 82 | #define __pte(x) (x) |
---|
78 | | -#define __pmd(x) (x) |
---|
79 | 83 | #define __pgd(x) (x) |
---|
80 | 84 | #define __pgprot(x) (x) |
---|
81 | 85 | |
---|
82 | | -#define __pmd_val_set(x,n) (x) = (n) |
---|
83 | | -#define __pgd_val_set(x,n) (x) = (n) |
---|
84 | | - |
---|
85 | 86 | #endif /* STRICT_MM_TYPECHECKS */ |
---|
| 87 | + |
---|
| 88 | +#define set_pmd(pmdptr, pmdval) (*(pmdptr) = (pmdval)) |
---|
| 89 | +#if CONFIG_PGTABLE_LEVELS == 3 |
---|
| 90 | +#define set_pud(pudptr, pudval) (*(pudptr) = (pudval)) |
---|
| 91 | +#endif |
---|
86 | 92 | |
---|
87 | 93 | typedef struct page *pgtable_t; |
---|
88 | 94 | |
---|
.. | .. |
---|
106 | 112 | #else |
---|
107 | 113 | #define BITS_PER_PTE_ENTRY 2 |
---|
108 | 114 | #define BITS_PER_PMD_ENTRY 2 |
---|
109 | | -#define BITS_PER_PGD_ENTRY BITS_PER_PMD_ENTRY |
---|
| 115 | +#define BITS_PER_PGD_ENTRY 2 |
---|
110 | 116 | #endif |
---|
111 | 117 | #define PGD_ENTRY_SIZE (1UL << BITS_PER_PGD_ENTRY) |
---|
112 | 118 | #define PMD_ENTRY_SIZE (1UL << BITS_PER_PMD_ENTRY) |
---|
.. | .. |
---|
117 | 123 | /* This governs the relationship between virtual and physical addresses. |
---|
118 | 124 | * If you alter it, make sure to take care of our various fixed mapping |
---|
119 | 125 | * segments in fixmap.h */ |
---|
120 | | -#if defined(BOOTLOADER) |
---|
121 | | -#define __PAGE_OFFSET (0) /* bootloader uses physical addresses */ |
---|
122 | | -#else |
---|
123 | 126 | #ifdef CONFIG_64BIT |
---|
124 | | -#define __PAGE_OFFSET (0x40000000) /* 1GB */ |
---|
| 127 | +#define __PAGE_OFFSET_DEFAULT (0x40000000) /* 1GB */ |
---|
125 | 128 | #else |
---|
126 | | -#define __PAGE_OFFSET (0x10000000) /* 256MB */ |
---|
| 129 | +#define __PAGE_OFFSET_DEFAULT (0x10000000) /* 256MB */ |
---|
127 | 130 | #endif |
---|
| 131 | + |
---|
| 132 | +#if defined(BOOTLOADER) |
---|
| 133 | +#define __PAGE_OFFSET (0) /* bootloader uses physical addresses */ |
---|
| 134 | +#else |
---|
| 135 | +#define __PAGE_OFFSET __PAGE_OFFSET_DEFAULT |
---|
128 | 136 | #endif /* BOOTLOADER */ |
---|
129 | 137 | |
---|
130 | 138 | #define PAGE_OFFSET ((unsigned long)__PAGE_OFFSET) |
---|
.. | .. |
---|
171 | 179 | |
---|
172 | 180 | #define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT) |
---|
173 | 181 | #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) |
---|
174 | | - |
---|
175 | | -#define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ |
---|
176 | | - VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) |
---|
177 | 182 | |
---|
178 | 183 | #include <asm-generic/memory_model.h> |
---|
179 | 184 | #include <asm-generic/getorder.h> |
---|