diff options
author | Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> | 2016-02-29 23:15:11 -0500 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2016-03-03 00:47:01 -0500 |
commit | 2bf59916ef033edb9f8e968ee27e486ccb8ba1ce (patch) | |
tree | f048d512e21783f4b9366d5142f888d0539b8e79 | |
parent | bf6a4d5b75d1ea87897fe68d0e45d35a2996c678 (diff) |
powerpc/mm: Split pgtable types to separate header
We move the page table accessors into a separate header. We will
later add a big endian variant of the table which is needed for radix.
No functionality change only code movement.
Reviewed-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
-rw-r--r-- | arch/powerpc/include/asm/page.h | 104 | ||||
-rw-r--r-- | arch/powerpc/include/asm/pgtable-types.h | 108 |
2 files changed, 109 insertions, 103 deletions
diff --git a/arch/powerpc/include/asm/page.h b/arch/powerpc/include/asm/page.h index af7a3422a3ef..ab3d8977bacd 100644 --- a/arch/powerpc/include/asm/page.h +++ b/arch/powerpc/include/asm/page.h | |||
@@ -288,109 +288,7 @@ extern long long virt_phys_offset; | |||
288 | 288 | ||
289 | #ifndef __ASSEMBLY__ | 289 | #ifndef __ASSEMBLY__ |
290 | 290 | ||
291 | #ifdef CONFIG_STRICT_MM_TYPECHECKS | 291 | #include <asm/pgtable-types.h> |
292 | /* These are used to make use of C type-checking. */ | ||
293 | |||
294 | /* PTE level */ | ||
295 | typedef struct { pte_basic_t pte; } pte_t; | ||
296 | #define __pte(x) ((pte_t) { (x) }) | ||
297 | static inline pte_basic_t pte_val(pte_t x) | ||
298 | { | ||
299 | return x.pte; | ||
300 | } | ||
301 | |||
302 | /* 64k pages additionally define a bigger "real PTE" type that gathers | ||
303 | * the "second half" part of the PTE for pseudo 64k pages | ||
304 | */ | ||
305 | #if defined(CONFIG_PPC_64K_PAGES) && defined(CONFIG_PPC_STD_MMU_64) | ||
306 | typedef struct { pte_t pte; unsigned long hidx; } real_pte_t; | ||
307 | #else | ||
308 | typedef struct { pte_t pte; } real_pte_t; | ||
309 | #endif | ||
310 | |||
311 | /* PMD level */ | ||
312 | #ifdef CONFIG_PPC64 | ||
313 | typedef struct { unsigned long pmd; } pmd_t; | ||
314 | #define __pmd(x) ((pmd_t) { (x) }) | ||
315 | static inline unsigned long pmd_val(pmd_t x) | ||
316 | { | ||
317 | return x.pmd; | ||
318 | } | ||
319 | |||
320 | /* PUD level exusts only on 4k pages */ | ||
321 | #ifndef CONFIG_PPC_64K_PAGES | ||
322 | typedef struct { unsigned long pud; } pud_t; | ||
323 | #define __pud(x) ((pud_t) { (x) }) | ||
324 | static inline unsigned long pud_val(pud_t x) | ||
325 | { | ||
326 | return x.pud; | ||
327 | } | ||
328 | #endif /* !CONFIG_PPC_64K_PAGES */ | ||
329 | #endif /* CONFIG_PPC64 */ | ||
330 | |||
331 | /* PGD level */ | ||
332 | typedef struct { unsigned long pgd; } pgd_t; | ||
333 | #define __pgd(x) ((pgd_t) { (x) }) | ||
334 | static inline unsigned long pgd_val(pgd_t x) | ||
335 | { | ||
336 | return x.pgd; | ||
337 | } | ||
338 | |||
339 | /* Page protection bits */ | ||
340 | typedef struct { unsigned long pgprot; } pgprot_t; | ||
341 | #define pgprot_val(x) ((x).pgprot) | ||
342 | #define __pgprot(x) ((pgprot_t) { (x) }) | ||
343 | |||
344 | #else | ||
345 | |||
346 | /* | ||
347 | * .. while these make it easier on the compiler | ||
348 | */ | ||
349 | |||
350 | typedef pte_basic_t pte_t; | ||
351 | #define __pte(x) (x) | ||
352 | static inline pte_basic_t pte_val(pte_t pte) | ||
353 | { | ||
354 | return pte; | ||
355 | } | ||
356 | |||
357 | #if defined(CONFIG_PPC_64K_PAGES) && defined(CONFIG_PPC_STD_MMU_64) | ||
358 | typedef struct { pte_t pte; unsigned long hidx; } real_pte_t; | ||
359 | #else | ||
360 | typedef pte_t real_pte_t; | ||
361 | #endif | ||
362 | |||
363 | |||
364 | #ifdef CONFIG_PPC64 | ||
365 | typedef unsigned long pmd_t; | ||
366 | #define __pmd(x) (x) | ||
367 | static inline unsigned long pmd_val(pmd_t pmd) | ||
368 | { | ||
369 | return pmd; | ||
370 | } | ||
371 | |||
372 | #ifndef CONFIG_PPC_64K_PAGES | ||
373 | typedef unsigned long pud_t; | ||
374 | #define __pud(x) (x) | ||
375 | static inline unsigned long pud_val(pud_t pud) | ||
376 | { | ||
377 | return pud; | ||
378 | } | ||
379 | #endif /* !CONFIG_PPC_64K_PAGES */ | ||
380 | #endif /* CONFIG_PPC64 */ | ||
381 | |||
382 | typedef unsigned long pgd_t; | ||
383 | #define __pgd(x) (x) | ||
384 | static inline unsigned long pgd_val(pgd_t pgd) | ||
385 | { | ||
386 | return pgd; | ||
387 | } | ||
388 | |||
389 | typedef unsigned long pgprot_t; | ||
390 | #define pgprot_val(x) (x) | ||
391 | #define __pgprot(x) (x) | ||
392 | |||
393 | #endif | ||
394 | 292 | ||
395 | typedef struct { signed long pd; } hugepd_t; | 293 | typedef struct { signed long pd; } hugepd_t; |
396 | 294 | ||
diff --git a/arch/powerpc/include/asm/pgtable-types.h b/arch/powerpc/include/asm/pgtable-types.h new file mode 100644 index 000000000000..2fac0c4acfa4 --- /dev/null +++ b/arch/powerpc/include/asm/pgtable-types.h | |||
@@ -0,0 +1,108 @@ | |||
1 | #ifndef _ASM_POWERPC_PGTABLE_TYPES_H | ||
2 | #define _ASM_POWERPC_PGTABLE_TYPES_H | ||
3 | |||
4 | #ifdef CONFIG_STRICT_MM_TYPECHECKS | ||
5 | /* These are used to make use of C type-checking. */ | ||
6 | |||
7 | /* PTE level */ | ||
8 | typedef struct { pte_basic_t pte; } pte_t; | ||
9 | #define __pte(x) ((pte_t) { (x) }) | ||
10 | static inline pte_basic_t pte_val(pte_t x) | ||
11 | { | ||
12 | return x.pte; | ||
13 | } | ||
14 | |||
15 | /* 64k pages additionally define a bigger "real PTE" type that gathers | ||
16 | * the "second half" part of the PTE for pseudo 64k pages | ||
17 | */ | ||
18 | #if defined(CONFIG_PPC_64K_PAGES) && defined(CONFIG_PPC_STD_MMU_64) | ||
19 | typedef struct { pte_t pte; unsigned long hidx; } real_pte_t; | ||
20 | #else | ||
21 | typedef struct { pte_t pte; } real_pte_t; | ||
22 | #endif | ||
23 | |||
24 | /* PMD level */ | ||
25 | #ifdef CONFIG_PPC64 | ||
26 | typedef struct { unsigned long pmd; } pmd_t; | ||
27 | #define __pmd(x) ((pmd_t) { (x) }) | ||
28 | static inline unsigned long pmd_val(pmd_t x) | ||
29 | { | ||
30 | return x.pmd; | ||
31 | } | ||
32 | |||
33 | /* PUD level exusts only on 4k pages */ | ||
34 | #ifndef CONFIG_PPC_64K_PAGES | ||
35 | typedef struct { unsigned long pud; } pud_t; | ||
36 | #define __pud(x) ((pud_t) { (x) }) | ||
37 | static inline unsigned long pud_val(pud_t x) | ||
38 | { | ||
39 | return x.pud; | ||
40 | } | ||
41 | #endif /* !CONFIG_PPC_64K_PAGES */ | ||
42 | #endif /* CONFIG_PPC64 */ | ||
43 | |||
44 | /* PGD level */ | ||
45 | typedef struct { unsigned long pgd; } pgd_t; | ||
46 | #define __pgd(x) ((pgd_t) { (x) }) | ||
47 | static inline unsigned long pgd_val(pgd_t x) | ||
48 | { | ||
49 | return x.pgd; | ||
50 | } | ||
51 | |||
52 | /* Page protection bits */ | ||
53 | typedef struct { unsigned long pgprot; } pgprot_t; | ||
54 | #define pgprot_val(x) ((x).pgprot) | ||
55 | #define __pgprot(x) ((pgprot_t) { (x) }) | ||
56 | |||
57 | #else | ||
58 | |||
59 | /* | ||
60 | * .. while these make it easier on the compiler | ||
61 | */ | ||
62 | |||
63 | typedef pte_basic_t pte_t; | ||
64 | #define __pte(x) (x) | ||
65 | static inline pte_basic_t pte_val(pte_t pte) | ||
66 | { | ||
67 | return pte; | ||
68 | } | ||
69 | |||
70 | #if defined(CONFIG_PPC_64K_PAGES) && defined(CONFIG_PPC_STD_MMU_64) | ||
71 | typedef struct { pte_t pte; unsigned long hidx; } real_pte_t; | ||
72 | #else | ||
73 | typedef pte_t real_pte_t; | ||
74 | #endif | ||
75 | |||
76 | |||
77 | #ifdef CONFIG_PPC64 | ||
78 | typedef unsigned long pmd_t; | ||
79 | #define __pmd(x) (x) | ||
80 | static inline unsigned long pmd_val(pmd_t pmd) | ||
81 | { | ||
82 | return pmd; | ||
83 | } | ||
84 | |||
85 | #ifndef CONFIG_PPC_64K_PAGES | ||
86 | typedef unsigned long pud_t; | ||
87 | #define __pud(x) (x) | ||
88 | static inline unsigned long pud_val(pud_t pud) | ||
89 | { | ||
90 | return pud; | ||
91 | } | ||
92 | #endif /* !CONFIG_PPC_64K_PAGES */ | ||
93 | #endif /* CONFIG_PPC64 */ | ||
94 | |||
95 | typedef unsigned long pgd_t; | ||
96 | #define __pgd(x) (x) | ||
97 | static inline unsigned long pgd_val(pgd_t pgd) | ||
98 | { | ||
99 | return pgd; | ||
100 | } | ||
101 | |||
102 | typedef unsigned long pgprot_t; | ||
103 | #define pgprot_val(x) (x) | ||
104 | #define __pgprot(x) (x) | ||
105 | |||
106 | #endif | ||
107 | |||
108 | #endif /* _ASM_POWERPC_PGTABLE_TYPES_H */ | ||