| .. | .. |
|---|
| 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 */ |
|---|