This source file includes following definitions.
- remove_from_ctx_list
- add_to_ctx_list
1
2 #ifndef _SPARC_PGTABLE_H
3 #define _SPARC_PGTABLE_H
4
5
6
7
8
9
10
11 #include <linux/mm.h>
12 #include <asm/asi.h>
13 #include <asm/pgtsun4c.h>
14 #include <asm/pgtsrmmu.h>
15 #include <asm/vac-ops.h>
16 #include <asm/oplib.h>
17 #include <asm/sbus.h>
18
19 extern void load_mmu(void);
20
21 extern void (*quick_kernel_fault)(unsigned long);
22
23
24 extern void (*mmu_exit_hook)(void);
25 extern void (*mmu_flush_hook)(void);
26
27
28 extern char *(*mmu_lockarea)(char *, unsigned long);
29 extern void (*mmu_unlockarea)(char *, unsigned long);
30
31
32 extern char *(*mmu_get_scsi_buffer)(char *, unsigned long, struct linux_sbus *sbus);
33 extern void (*mmu_release_scsi_buffer)(char *, unsigned long, struct linux_sbus *sbus);
34
35 extern unsigned int pmd_shift;
36 extern unsigned int pmd_size;
37 extern unsigned int pmd_mask;
38 extern unsigned int (*pmd_align)(unsigned int);
39
40 extern unsigned int pgdir_shift;
41 extern unsigned int pgdir_size;
42 extern unsigned int pgdir_mask;
43 extern unsigned int (*pgdir_align)(unsigned int);
44
45 extern unsigned int ptrs_per_pte;
46 extern unsigned int ptrs_per_pmd;
47 extern unsigned int ptrs_per_pgd;
48
49 extern unsigned int ptrs_per_page;
50
51 extern unsigned long (*(vmalloc_start))(void);
52
53 #define VMALLOC_VMADDR(x) ((unsigned long)(x))
54 #define VMALLOC_START vmalloc_start()
55
56 extern pgprot_t page_none;
57 extern pgprot_t page_shared;
58 extern pgprot_t page_copy;
59 extern pgprot_t page_readonly;
60 extern pgprot_t page_kernel;
61
62 #define PMD_SHIFT (pmd_shift)
63 #define PMD_SIZE (pmd_size)
64 #define PMD_MASK (pmd_mask)
65 #define PMD_ALIGN (pmd_align)
66 #define PGDIR_SHIFT (pgdir_shift)
67 #define PGDIR_SIZE (pgdir_size)
68 #define PGDIR_MASK (pgdir_mask)
69 #define PGDIR_ALIGN (pgdir_align)
70 #define PTRS_PER_PTE (ptrs_per_pte)
71 #define PTRS_PER_PMD (ptrs_per_pmd)
72 #define PTRS_PER_PGD (ptrs_per_pgd)
73
74 #define PAGE_NONE (page_none)
75 #define PAGE_SHARED (page_shared)
76 #define PAGE_COPY (page_copy)
77 #define PAGE_READONLY (page_readonly)
78 #define PAGE_KERNEL (page_kernel)
79 #define PAGE_INVALID (page_invalid)
80
81
82 extern pgd_t swapper_pg_dir[1024];
83
84
85
86
87 extern pte_t pg0[1024];
88
89 extern unsigned long ptr_in_current_pgd;
90
91
92 #define PTRS_PER_PAGE (PAGE_SIZE/sizeof(void*))
93
94
95
96
97
98
99 #define __P000 __pgprot(0)
100 #define __P001 __pgprot(0)
101 #define __P010 __pgprot(0)
102 #define __P011 __pgprot(0)
103 #define __P100 __pgprot(0)
104 #define __P101 __pgprot(0)
105 #define __P110 __pgprot(0)
106 #define __P111 __pgprot(0)
107
108 #define __S000 __pgprot(0)
109 #define __S001 __pgprot(0)
110 #define __S010 __pgprot(0)
111 #define __S011 __pgprot(0)
112 #define __S100 __pgprot(0)
113 #define __S101 __pgprot(0)
114 #define __S110 __pgprot(0)
115 #define __S111 __pgprot(0)
116
117 extern int num_contexts;
118
119
120
121
122
123
124
125
126 extern pte_t __bad_page(void);
127 extern pte_t * __bad_pagetable(void);
128
129 extern unsigned long empty_zero_page;
130
131 #define BAD_PAGETABLE __bad_pagetable()
132 #define BAD_PAGE __bad_page()
133 #define ZERO_PAGE (&empty_zero_page)
134
135
136 #define BITS_PER_PTR (8*sizeof(unsigned long))
137
138
139 #define PTR_MASK (~(sizeof(void*)-1))
140
141 #define SIZEOF_PTR_LOG2 2
142
143 extern unsigned long (*pte_page)(pte_t);
144 extern unsigned long (*pmd_page)(pmd_t);
145 extern unsigned long (*pgd_page)(pgd_t);
146
147 extern void (*sparc_update_rootmmu_dir)(struct task_struct *, pgd_t *pgdir);
148
149 #define SET_PAGE_DIR(tsk,pgdir) sparc_update_rootmmu_dir(tsk, pgdir)
150
151
152 #define PAGE_PTR(address) \
153 ((unsigned long)(address)>>(PAGE_SHIFT-SIZEOF_PTR_LOG2)&PTR_MASK&~PAGE_MASK)
154
155 extern unsigned long high_memory;
156
157 extern int (*pte_none)(pte_t);
158 extern int (*pte_present)(pte_t);
159 extern int (*pte_inuse)(pte_t *);
160 extern void (*pte_clear)(pte_t *);
161 extern void (*pte_reuse)(pte_t *);
162
163 extern int (*pmd_none)(pmd_t);
164 extern int (*pmd_bad)(pmd_t);
165 extern int (*pmd_present)(pmd_t);
166 extern int (*pmd_inuse)(pmd_t *);
167 extern void (*pmd_clear)(pmd_t *);
168 extern void (*pmd_reuse)(pmd_t *);
169
170 extern int (*pgd_none)(pgd_t);
171 extern int (*pgd_bad)(pgd_t);
172 extern int (*pgd_present)(pgd_t);
173 extern int (*pgd_inuse)(pgd_t *);
174 extern void (*pgd_clear)(pgd_t *);
175 extern void (*pgd_reuse)(pgd_t *);
176
177
178
179
180
181 extern int (*pte_write)(pte_t);
182 extern int (*pte_dirty)(pte_t);
183 extern int (*pte_young)(pte_t);
184
185 extern pte_t (*pte_wrprotect)(pte_t);
186 extern pte_t (*pte_mkclean)(pte_t);
187 extern pte_t (*pte_mkold)(pte_t);
188 extern pte_t (*pte_mkwrite)(pte_t);
189 extern pte_t (*pte_mkdirty)(pte_t);
190 extern pte_t (*pte_mkyoung)(pte_t);
191
192
193
194
195
196 extern pte_t (*mk_pte)(unsigned long, pgprot_t);
197 extern pte_t (*mk_pte_io)(unsigned long, pgprot_t);
198
199 extern void (*pgd_set)(pgd_t *, pmd_t *);
200
201 extern pte_t (*pte_modify)(pte_t, pgprot_t);
202
203
204 extern pgd_t * (*pgd_offset)(struct mm_struct *, unsigned long);
205
206
207 extern pmd_t * (*pmd_offset)(pgd_t *, unsigned long);
208
209
210 extern pte_t * (*pte_offset)(pmd_t *, unsigned long);
211
212
213
214
215
216
217 extern void (*pte_free_kernel)(pte_t *);
218
219 extern pte_t * (*pte_alloc_kernel)(pmd_t *, unsigned long);
220
221
222
223
224
225 extern void (*pmd_free_kernel)(pmd_t *);
226
227 extern pmd_t * (*pmd_alloc_kernel)(pgd_t *, unsigned long);
228
229 extern void (*pte_free)(pte_t *);
230
231 extern pte_t * (*pte_alloc)(pmd_t *, unsigned long);
232
233
234
235
236
237 extern void (*pmd_free)(pmd_t *);
238
239 extern pmd_t * (*pmd_alloc)(pgd_t *, unsigned long);
240
241 extern void (*pgd_free)(pgd_t *);
242
243 extern pgd_t * (*pgd_alloc)(void);
244
245
246 extern void (*invalidate_all)(void);
247 extern void (*invalidate_mm)(struct mm_struct *);
248 extern void (*invalidate_range)(struct mm_struct *, unsigned long start, unsigned long end);
249 extern void (*invalidate_page)(struct vm_area_struct *, unsigned long address);
250
251
252 extern unsigned int pg_iobits;
253
254
255 extern void (*switch_to_context)(struct task_struct *tsk);
256
257
258
259
260
261 extern void (*set_pte)(pte_t *pteptr, pte_t pteval);
262
263 extern char *(*mmu_info)(void);
264
265
266 #define FAULT_CODE_PROT 0x1
267 #define FAULT_CODE_WRITE 0x2
268 #define FAULT_CODE_USER 0x4
269 extern void (*update_mmu_cache)(struct vm_area_struct *vma, unsigned long address, pte_t pte);
270
271 extern int invalid_segment;
272
273 #define SWP_TYPE(entry) (((entry)>>2) & 0x7f)
274 #define SWP_OFFSET(entry) ((entry) >> 9)
275 #define SWP_ENTRY(type,offset) (((type) << 2) | ((offset) << 9))
276
277 struct ctx_list {
278 struct ctx_list *next;
279 struct ctx_list *prev;
280 unsigned char ctx_number;
281 struct mm_struct *ctx_mm;
282 };
283
284 extern struct ctx_list *ctx_list_pool;
285 extern struct ctx_list ctx_free;
286 extern struct ctx_list ctx_used;
287
288 #define NO_CONTEXT -1
289
290 extern inline void remove_from_ctx_list(struct ctx_list *entry)
291 {
292 entry->next->prev = entry->prev;
293 entry->prev->next = entry->next;
294 }
295
296 extern inline void add_to_ctx_list(struct ctx_list *head, struct ctx_list *entry)
297 {
298 entry->next = head;
299 (entry->prev = head->prev)->next = entry;
300 head->prev = entry;
301 }
302 #define add_to_free_ctxlist(entry) add_to_ctx_list(&ctx_free, entry)
303 #define add_to_used_ctxlist(entry) add_to_ctx_list(&ctx_used, entry)
304
305 #endif