.. | .. |
---|
60 | 60 | #define _PAGE_SPECIAL _PAGE_SW0 |
---|
61 | 61 | |
---|
62 | 62 | /* Base page size */ |
---|
63 | | -#ifdef CONFIG_PPC_64K_PAGES |
---|
64 | | -#define _PAGE_PSIZE _PAGE_PSIZE_64K |
---|
65 | | -#define PTE_RPN_SHIFT (28) |
---|
66 | | -#else |
---|
67 | 63 | #define _PAGE_PSIZE _PAGE_PSIZE_4K |
---|
68 | 64 | #define PTE_RPN_SHIFT (24) |
---|
69 | | -#endif |
---|
70 | 65 | |
---|
71 | 66 | #define PTE_WIMGE_SHIFT (19) |
---|
72 | 67 | #define PTE_BAP_SHIFT (2) |
---|
.. | .. |
---|
77 | 72 | #define _PMD_PRESENT 0 |
---|
78 | 73 | #define _PMD_PRESENT_MASK (PAGE_MASK) |
---|
79 | 74 | #define _PMD_BAD (~PAGE_MASK) |
---|
| 75 | +#define _PMD_USER 0 |
---|
| 76 | +#else |
---|
| 77 | +#define _PTE_NONE_MASK 0 |
---|
80 | 78 | #endif |
---|
81 | 79 | |
---|
| 80 | +/* |
---|
| 81 | + * We define 2 sets of base prot bits, one for basic pages (ie, |
---|
| 82 | + * cacheable kernel and user pages) and one for non cacheable |
---|
| 83 | + * pages. We always set _PAGE_COHERENT when SMP is enabled or |
---|
| 84 | + * the processor might need it for DMA coherency. |
---|
| 85 | + */ |
---|
| 86 | +#define _PAGE_BASE_NC (_PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_PSIZE) |
---|
| 87 | +#if defined(CONFIG_SMP) |
---|
| 88 | +#define _PAGE_BASE (_PAGE_BASE_NC | _PAGE_COHERENT) |
---|
| 89 | +#else |
---|
| 90 | +#define _PAGE_BASE (_PAGE_BASE_NC) |
---|
| 91 | +#endif |
---|
| 92 | + |
---|
| 93 | +/* Permission masks used to generate the __P and __S table */ |
---|
| 94 | +#define PAGE_NONE __pgprot(_PAGE_BASE) |
---|
| 95 | +#define PAGE_SHARED __pgprot(_PAGE_BASE | _PAGE_USER | _PAGE_RW) |
---|
| 96 | +#define PAGE_SHARED_X __pgprot(_PAGE_BASE | _PAGE_USER | _PAGE_RW | _PAGE_EXEC) |
---|
| 97 | +#define PAGE_COPY __pgprot(_PAGE_BASE | _PAGE_USER) |
---|
| 98 | +#define PAGE_COPY_X __pgprot(_PAGE_BASE | _PAGE_USER | _PAGE_EXEC) |
---|
| 99 | +#define PAGE_READONLY __pgprot(_PAGE_BASE | _PAGE_USER) |
---|
| 100 | +#define PAGE_READONLY_X __pgprot(_PAGE_BASE | _PAGE_USER | _PAGE_EXEC) |
---|
| 101 | + |
---|
| 102 | +#ifndef __ASSEMBLY__ |
---|
| 103 | +static inline pte_t pte_mkprivileged(pte_t pte) |
---|
| 104 | +{ |
---|
| 105 | + return __pte((pte_val(pte) & ~_PAGE_USER) | _PAGE_PRIVILEGED); |
---|
| 106 | +} |
---|
| 107 | + |
---|
| 108 | +#define pte_mkprivileged pte_mkprivileged |
---|
| 109 | + |
---|
| 110 | +static inline pte_t pte_mkuser(pte_t pte) |
---|
| 111 | +{ |
---|
| 112 | + return __pte((pte_val(pte) & ~_PAGE_PRIVILEGED) | _PAGE_USER); |
---|
| 113 | +} |
---|
| 114 | + |
---|
| 115 | +#define pte_mkuser pte_mkuser |
---|
| 116 | +#endif /* __ASSEMBLY__ */ |
---|
| 117 | + |
---|
82 | 118 | #endif /* __KERNEL__ */ |
---|
83 | 119 | #endif /* _ASM_POWERPC_NOHASH_PTE_BOOK3E_H */ |
---|