diff options
Diffstat (limited to 'arch/mips/include/asm/pgtable-32.h')
-rw-r--r-- | arch/mips/include/asm/pgtable-32.h | 104 |
1 files changed, 53 insertions, 51 deletions
diff --git a/arch/mips/include/asm/pgtable-32.h b/arch/mips/include/asm/pgtable-32.h index cd7d6064bcbe..68984b612f9d 100644 --- a/arch/mips/include/asm/pgtable-32.h +++ b/arch/mips/include/asm/pgtable-32.h | |||
@@ -69,7 +69,7 @@ extern int add_temporary_entry(unsigned long entrylo0, unsigned long entrylo1, | |||
69 | # define VMALLOC_END (FIXADDR_START-2*PAGE_SIZE) | 69 | # define VMALLOC_END (FIXADDR_START-2*PAGE_SIZE) |
70 | #endif | 70 | #endif |
71 | 71 | ||
72 | #ifdef CONFIG_64BIT_PHYS_ADDR | 72 | #ifdef CONFIG_PHYS_ADDR_T_64BIT |
73 | #define pte_ERROR(e) \ | 73 | #define pte_ERROR(e) \ |
74 | printk("%s:%d: bad pte %016Lx.\n", __FILE__, __LINE__, pte_val(e)) | 74 | printk("%s:%d: bad pte %016Lx.\n", __FILE__, __LINE__, pte_val(e)) |
75 | #else | 75 | #else |
@@ -103,7 +103,7 @@ static inline void pmd_clear(pmd_t *pmdp) | |||
103 | pmd_val(*pmdp) = ((unsigned long) invalid_pte_table); | 103 | pmd_val(*pmdp) = ((unsigned long) invalid_pte_table); |
104 | } | 104 | } |
105 | 105 | ||
106 | #if defined(CONFIG_64BIT_PHYS_ADDR) && defined(CONFIG_CPU_MIPS32) | 106 | #if defined(CONFIG_PHYS_ADDR_T_64BIT) && defined(CONFIG_CPU_MIPS32) |
107 | #define pte_page(x) pfn_to_page(pte_pfn(x)) | 107 | #define pte_page(x) pfn_to_page(pte_pfn(x)) |
108 | #define pte_pfn(x) ((unsigned long)((x).pte_high >> 6)) | 108 | #define pte_pfn(x) ((unsigned long)((x).pte_high >> 6)) |
109 | static inline pte_t | 109 | static inline pte_t |
@@ -126,7 +126,7 @@ pfn_pte(unsigned long pfn, pgprot_t prot) | |||
126 | #define pte_pfn(x) ((unsigned long)((x).pte >> _PFN_SHIFT)) | 126 | #define pte_pfn(x) ((unsigned long)((x).pte >> _PFN_SHIFT)) |
127 | #define pfn_pte(pfn, prot) __pte(((unsigned long long)(pfn) << _PFN_SHIFT) | pgprot_val(prot)) | 127 | #define pfn_pte(pfn, prot) __pte(((unsigned long long)(pfn) << _PFN_SHIFT) | pgprot_val(prot)) |
128 | #endif | 128 | #endif |
129 | #endif /* defined(CONFIG_64BIT_PHYS_ADDR) && defined(CONFIG_CPU_MIPS32) */ | 129 | #endif /* defined(CONFIG_PHYS_ADDR_T_64BIT) && defined(CONFIG_CPU_MIPS32) */ |
130 | 130 | ||
131 | #define __pgd_offset(address) pgd_index(address) | 131 | #define __pgd_offset(address) pgd_index(address) |
132 | #define __pud_offset(address) (((address) >> PUD_SHIFT) & (PTRS_PER_PUD-1)) | 132 | #define __pud_offset(address) (((address) >> PUD_SHIFT) & (PTRS_PER_PUD-1)) |
@@ -155,73 +155,75 @@ pfn_pte(unsigned long pfn, pgprot_t prot) | |||
155 | #if defined(CONFIG_CPU_R3000) || defined(CONFIG_CPU_TX39XX) | 155 | #if defined(CONFIG_CPU_R3000) || defined(CONFIG_CPU_TX39XX) |
156 | 156 | ||
157 | /* Swap entries must have VALID bit cleared. */ | 157 | /* Swap entries must have VALID bit cleared. */ |
158 | #define __swp_type(x) (((x).val >> 10) & 0x1f) | 158 | #define __swp_type(x) (((x).val >> 10) & 0x1f) |
159 | #define __swp_offset(x) ((x).val >> 15) | 159 | #define __swp_offset(x) ((x).val >> 15) |
160 | #define __swp_entry(type,offset) \ | 160 | #define __swp_entry(type,offset) ((swp_entry_t) { ((type) << 10) | ((offset) << 15) }) |
161 | ((swp_entry_t) { ((type) << 10) | ((offset) << 15) }) | 161 | #define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) |
162 | #define __swp_entry_to_pte(x) ((pte_t) { (x).val }) | ||
162 | 163 | ||
163 | /* | 164 | /* |
164 | * Bits 0, 4, 8, and 9 are taken, split up 28 bits of offset into this range: | 165 | * Encode and decode a nonlinear file mapping entry |
165 | */ | 166 | */ |
166 | #define PTE_FILE_MAX_BITS 28 | 167 | #define pte_to_pgoff(_pte) ((((_pte).pte >> 1 ) & 0x07) | \ |
167 | 168 | (((_pte).pte >> 2 ) & 0x38) | \ | |
168 | #define pte_to_pgoff(_pte) ((((_pte).pte >> 1 ) & 0x07) | \ | 169 | (((_pte).pte >> 10) << 6 )) |
169 | (((_pte).pte >> 2 ) & 0x38) | \ | ||
170 | (((_pte).pte >> 10) << 6 )) | ||
171 | 170 | ||
172 | #define pgoff_to_pte(off) ((pte_t) { (((off) & 0x07) << 1 ) | \ | 171 | #define pgoff_to_pte(off) ((pte_t) { (((off) & 0x07) << 1 ) | \ |
173 | (((off) & 0x38) << 2 ) | \ | 172 | (((off) & 0x38) << 2 ) | \ |
174 | (((off) >> 6 ) << 10) | \ | 173 | (((off) >> 6 ) << 10) | \ |
175 | _PAGE_FILE }) | 174 | _PAGE_FILE }) |
176 | 175 | ||
176 | /* | ||
177 | * Bits 0, 4, 8, and 9 are taken, split up 28 bits of offset into this range: | ||
178 | */ | ||
179 | #define PTE_FILE_MAX_BITS 28 | ||
177 | #else | 180 | #else |
178 | 181 | ||
182 | #if defined(CONFIG_PHYS_ADDR_T_64BIT) && defined(CONFIG_CPU_MIPS32) | ||
183 | |||
179 | /* Swap entries must have VALID and GLOBAL bits cleared. */ | 184 | /* Swap entries must have VALID and GLOBAL bits cleared. */ |
180 | #if defined(CONFIG_64BIT_PHYS_ADDR) && defined(CONFIG_CPU_MIPS32) | 185 | #define __swp_type(x) (((x).val >> 2) & 0x1f) |
181 | #define __swp_type(x) (((x).val >> 2) & 0x1f) | 186 | #define __swp_offset(x) ((x).val >> 7) |
182 | #define __swp_offset(x) ((x).val >> 7) | 187 | #define __swp_entry(type,offset) ((swp_entry_t) { ((type) << 2) | ((offset) << 7) }) |
183 | #define __swp_entry(type,offset) \ | 188 | #define __pte_to_swp_entry(pte) ((swp_entry_t) { (pte).pte_high }) |
184 | ((swp_entry_t) { ((type) << 2) | ((offset) << 7) }) | 189 | #define __swp_entry_to_pte(x) ((pte_t) { 0, (x).val }) |
185 | #else | ||
186 | #define __swp_type(x) (((x).val >> 8) & 0x1f) | ||
187 | #define __swp_offset(x) ((x).val >> 13) | ||
188 | #define __swp_entry(type,offset) \ | ||
189 | ((swp_entry_t) { ((type) << 8) | ((offset) << 13) }) | ||
190 | #endif /* defined(CONFIG_64BIT_PHYS_ADDR) && defined(CONFIG_CPU_MIPS32) */ | ||
191 | 190 | ||
192 | #if defined(CONFIG_64BIT_PHYS_ADDR) && defined(CONFIG_CPU_MIPS32) | ||
193 | /* | 191 | /* |
194 | * Bits 0 and 1 of pte_high are taken, use the rest for the page offset... | 192 | * Bits 0 and 1 of pte_high are taken, use the rest for the page offset... |
195 | */ | 193 | */ |
196 | #define PTE_FILE_MAX_BITS 30 | 194 | #define pte_to_pgoff(_pte) ((_pte).pte_high >> 2) |
197 | 195 | #define pgoff_to_pte(off) ((pte_t) { _PAGE_FILE, (off) << 2 }) | |
198 | #define pte_to_pgoff(_pte) ((_pte).pte_high >> 2) | ||
199 | #define pgoff_to_pte(off) ((pte_t) { _PAGE_FILE, (off) << 2 }) | ||
200 | 196 | ||
197 | #define PTE_FILE_MAX_BITS 30 | ||
201 | #else | 198 | #else |
202 | /* | 199 | /* |
203 | * Bits 0, 4, 6, and 7 are taken, split up 28 bits of offset into this range: | 200 | * Constraints: |
201 | * _PAGE_PRESENT at bit 0 | ||
202 | * _PAGE_MODIFIED at bit 4 | ||
203 | * _PAGE_GLOBAL at bit 6 | ||
204 | * _PAGE_VALID at bit 7 | ||
204 | */ | 205 | */ |
205 | #define PTE_FILE_MAX_BITS 28 | 206 | #define __swp_type(x) (((x).val >> 8) & 0x1f) |
207 | #define __swp_offset(x) ((x).val >> 13) | ||
208 | #define __swp_entry(type,offset) ((swp_entry_t) { ((type) << 8) | ((offset) << 13) }) | ||
209 | #define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) | ||
210 | #define __swp_entry_to_pte(x) ((pte_t) { (x).val }) | ||
206 | 211 | ||
207 | #define pte_to_pgoff(_pte) ((((_pte).pte >> 1) & 0x7) | \ | 212 | /* |
208 | (((_pte).pte >> 2) & 0x8) | \ | 213 | * Encode and decode a nonlinear file mapping entry |
209 | (((_pte).pte >> 8) << 4)) | 214 | */ |
215 | #define pte_to_pgoff(_pte) ((((_pte).pte >> 1) & 0x7) | \ | ||
216 | (((_pte).pte >> 2) & 0x8) | \ | ||
217 | (((_pte).pte >> 8) << 4)) | ||
210 | 218 | ||
211 | #define pgoff_to_pte(off) ((pte_t) { (((off) & 0x7) << 1) | \ | 219 | #define pgoff_to_pte(off) ((pte_t) { (((off) & 0x7) << 1) | \ |
212 | (((off) & 0x8) << 2) | \ | 220 | (((off) & 0x8) << 2) | \ |
213 | (((off) >> 4) << 8) | \ | 221 | (((off) >> 4) << 8) | \ |
214 | _PAGE_FILE }) | 222 | _PAGE_FILE }) |
215 | #endif | ||
216 | 223 | ||
217 | #endif | 224 | #define PTE_FILE_MAX_BITS 28 |
225 | #endif /* defined(CONFIG_PHYS_ADDR_T_64BIT) && defined(CONFIG_CPU_MIPS32) */ | ||
218 | 226 | ||
219 | #if defined(CONFIG_64BIT_PHYS_ADDR) && defined(CONFIG_CPU_MIPS32) | 227 | #endif /* defined(CONFIG_CPU_R3000) || defined(CONFIG_CPU_TX39XX) */ |
220 | #define __pte_to_swp_entry(pte) ((swp_entry_t) { (pte).pte_high }) | ||
221 | #define __swp_entry_to_pte(x) ((pte_t) { 0, (x).val }) | ||
222 | #else | ||
223 | #define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) | ||
224 | #define __swp_entry_to_pte(x) ((pte_t) { (x).val }) | ||
225 | #endif | ||
226 | 228 | ||
227 | #endif /* _ASM_PGTABLE_32_H */ | 229 | #endif /* _ASM_PGTABLE_32_H */ |