1
2
3
4
5
6
7
8
9
10#ifndef _ASM_PGTABLE_BITS_H
11#define _ASM_PGTABLE_BITS_H
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35#if defined(CONFIG_XPA)
36
37
38
39
40
41enum pgtable_bits {
42
43 _PAGE_NO_EXEC_SHIFT,
44 _PAGE_NO_READ_SHIFT,
45 _PAGE_GLOBAL_SHIFT,
46 _PAGE_VALID_SHIFT,
47 _PAGE_DIRTY_SHIFT,
48 _CACHE_SHIFT,
49
50
51 _PAGE_PRESENT_SHIFT = 24,
52 _PAGE_WRITE_SHIFT,
53 _PAGE_ACCESSED_SHIFT,
54 _PAGE_MODIFIED_SHIFT,
55#if defined(CONFIG_ARCH_HAS_PTE_SPECIAL)
56 _PAGE_SPECIAL_SHIFT,
57#endif
58#if defined(CONFIG_HAVE_ARCH_SOFT_DIRTY)
59 _PAGE_SOFT_DIRTY_SHIFT,
60#endif
61};
62
63
64
65
66#define _PFNX_MASK 0xffffff
67
68#elif defined(CONFIG_PHYS_ADDR_T_64BIT) && defined(CONFIG_CPU_MIPS32)
69
70
71
72
73
74enum pgtable_bits {
75
76 _PAGE_GLOBAL_SHIFT,
77 _PAGE_VALID_SHIFT,
78 _PAGE_DIRTY_SHIFT,
79 _CACHE_SHIFT,
80
81
82 _PAGE_PRESENT_SHIFT = _CACHE_SHIFT + 3,
83 _PAGE_NO_READ_SHIFT,
84 _PAGE_WRITE_SHIFT,
85 _PAGE_ACCESSED_SHIFT,
86 _PAGE_MODIFIED_SHIFT,
87#if defined(CONFIG_ARCH_HAS_PTE_SPECIAL)
88 _PAGE_SPECIAL_SHIFT,
89#endif
90#if defined(CONFIG_HAVE_ARCH_SOFT_DIRTY)
91 _PAGE_SOFT_DIRTY_SHIFT,
92#endif
93};
94
95#elif defined(CONFIG_CPU_R3K_TLB)
96
97
98enum pgtable_bits {
99
100 _PAGE_PRESENT_SHIFT,
101 _PAGE_NO_READ_SHIFT,
102 _PAGE_WRITE_SHIFT,
103 _PAGE_ACCESSED_SHIFT,
104 _PAGE_MODIFIED_SHIFT,
105#if defined(CONFIG_ARCH_HAS_PTE_SPECIAL)
106 _PAGE_SPECIAL_SHIFT,
107#endif
108#if defined(CONFIG_HAVE_ARCH_SOFT_DIRTY)
109 _PAGE_SOFT_DIRTY_SHIFT,
110#endif
111
112
113 _PAGE_GLOBAL_SHIFT = 8,
114 _PAGE_VALID_SHIFT,
115 _PAGE_DIRTY_SHIFT,
116 _CACHE_UNCACHED_SHIFT,
117};
118
119#else
120
121
122enum pgtable_bits {
123
124 _PAGE_PRESENT_SHIFT,
125#if !defined(CONFIG_CPU_HAS_RIXI)
126 _PAGE_NO_READ_SHIFT,
127#endif
128 _PAGE_WRITE_SHIFT,
129 _PAGE_ACCESSED_SHIFT,
130 _PAGE_MODIFIED_SHIFT,
131#if defined(CONFIG_MIPS_HUGE_TLB_SUPPORT)
132 _PAGE_HUGE_SHIFT,
133#endif
134#if defined(CONFIG_ARCH_HAS_PTE_SPECIAL)
135 _PAGE_SPECIAL_SHIFT,
136#endif
137#if defined(CONFIG_HAVE_ARCH_SOFT_DIRTY)
138 _PAGE_SOFT_DIRTY_SHIFT,
139#endif
140
141#if defined(CONFIG_CPU_HAS_RIXI)
142 _PAGE_NO_EXEC_SHIFT,
143 _PAGE_NO_READ_SHIFT,
144#endif
145 _PAGE_GLOBAL_SHIFT,
146 _PAGE_VALID_SHIFT,
147 _PAGE_DIRTY_SHIFT,
148 _CACHE_SHIFT,
149};
150
151#endif
152
153
154#define _PAGE_PRESENT (1 << _PAGE_PRESENT_SHIFT)
155#define _PAGE_WRITE (1 << _PAGE_WRITE_SHIFT)
156#define _PAGE_ACCESSED (1 << _PAGE_ACCESSED_SHIFT)
157#define _PAGE_MODIFIED (1 << _PAGE_MODIFIED_SHIFT)
158#if defined(CONFIG_MIPS_HUGE_TLB_SUPPORT)
159# define _PAGE_HUGE (1 << _PAGE_HUGE_SHIFT)
160#endif
161#if defined(CONFIG_ARCH_HAS_PTE_SPECIAL)
162# define _PAGE_SPECIAL (1 << _PAGE_SPECIAL_SHIFT)
163#else
164# define _PAGE_SPECIAL 0
165#endif
166#if defined(CONFIG_HAVE_ARCH_SOFT_DIRTY)
167# define _PAGE_SOFT_DIRTY (1 << _PAGE_SOFT_DIRTY_SHIFT)
168#else
169# define _PAGE_SOFT_DIRTY 0
170#endif
171
172
173#if defined(CONFIG_XPA)
174# define _PAGE_NO_EXEC (1 << _PAGE_NO_EXEC_SHIFT)
175#elif defined(CONFIG_CPU_HAS_RIXI)
176# define _PAGE_NO_EXEC (cpu_has_rixi ? (1 << _PAGE_NO_EXEC_SHIFT) : 0)
177#endif
178#define _PAGE_NO_READ (1 << _PAGE_NO_READ_SHIFT)
179#define _PAGE_GLOBAL (1 << _PAGE_GLOBAL_SHIFT)
180#define _PAGE_VALID (1 << _PAGE_VALID_SHIFT)
181#define _PAGE_DIRTY (1 << _PAGE_DIRTY_SHIFT)
182#if defined(CONFIG_CPU_R3K_TLB)
183# define _CACHE_UNCACHED (1 << _CACHE_UNCACHED_SHIFT)
184# define _CACHE_MASK _CACHE_UNCACHED
185# define _PFN_SHIFT PAGE_SHIFT
186#else
187# define _CACHE_MASK (7 << _CACHE_SHIFT)
188# define _PFN_SHIFT (PAGE_SHIFT - 12 + _CACHE_SHIFT + 3)
189#endif
190
191#ifndef _PAGE_NO_EXEC
192#define _PAGE_NO_EXEC 0
193#endif
194
195#define _PAGE_SILENT_READ _PAGE_VALID
196#define _PAGE_SILENT_WRITE _PAGE_DIRTY
197
198#define _PFN_MASK (~((1 << (_PFN_SHIFT)) - 1))
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214static inline uint64_t pte_to_entrylo(unsigned long pte_val)
215{
216#ifdef CONFIG_CPU_HAS_RIXI
217 if (cpu_has_rixi) {
218 int sa;
219#ifdef CONFIG_32BIT
220 sa = 31 - _PAGE_NO_READ_SHIFT;
221#else
222 sa = 63 - _PAGE_NO_READ_SHIFT;
223#endif
224
225
226
227
228
229 return (pte_val >> _PAGE_GLOBAL_SHIFT) |
230 ((pte_val & (_PAGE_NO_EXEC | _PAGE_NO_READ)) << sa);
231 }
232#endif
233
234 return pte_val >> _PAGE_GLOBAL_SHIFT;
235}
236
237
238
239
240#if defined(CONFIG_CPU_R3K_TLB)
241
242#define _CACHE_CACHABLE_NONCOHERENT 0
243#define _CACHE_UNCACHED_ACCELERATED _CACHE_UNCACHED
244
245#elif defined(CONFIG_CPU_SB1)
246
247
248
249
250#define _CACHE_CACHABLE_NONCOHERENT (5<<_CACHE_SHIFT)
251
252#endif
253
254#ifndef _CACHE_CACHABLE_NO_WA
255#define _CACHE_CACHABLE_NO_WA (0<<_CACHE_SHIFT)
256#endif
257#ifndef _CACHE_CACHABLE_WA
258#define _CACHE_CACHABLE_WA (1<<_CACHE_SHIFT)
259#endif
260#ifndef _CACHE_UNCACHED
261#define _CACHE_UNCACHED (2<<_CACHE_SHIFT)
262#endif
263#ifndef _CACHE_CACHABLE_NONCOHERENT
264#define _CACHE_CACHABLE_NONCOHERENT (3<<_CACHE_SHIFT)
265#endif
266#ifndef _CACHE_CACHABLE_CE
267#define _CACHE_CACHABLE_CE (4<<_CACHE_SHIFT)
268#endif
269#ifndef _CACHE_CACHABLE_COW
270#define _CACHE_CACHABLE_COW (5<<_CACHE_SHIFT)
271#endif
272#ifndef _CACHE_CACHABLE_CUW
273#define _CACHE_CACHABLE_CUW (6<<_CACHE_SHIFT)
274#endif
275#ifndef _CACHE_UNCACHED_ACCELERATED
276#define _CACHE_UNCACHED_ACCELERATED (7<<_CACHE_SHIFT)
277#endif
278
279#define __READABLE (_PAGE_SILENT_READ | _PAGE_ACCESSED)
280#define __WRITEABLE (_PAGE_SILENT_WRITE | _PAGE_WRITE | _PAGE_MODIFIED)
281
282#define _PAGE_CHG_MASK (_PAGE_ACCESSED | _PAGE_MODIFIED | \
283 _PAGE_SOFT_DIRTY | _PFN_MASK | _CACHE_MASK)
284
285#endif
286