Deleted Added
full compact
pmap.h (1045) pmap.h (1246)
1/*
2 * Copyright (c) 1991 Regents of the University of California.
3 * All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * the Systems Programming Group of the University of Utah Computer
7 * Science Department and William Jolitz of UUNET Technologies Inc.
8 *

--- 28 unchanged lines hidden (view full) ---

37 * Derived from hp300 version by Mike Hibler, this version by William
38 * Jolitz uses a recursive map [a pde points to the page directory] to
39 * map the page tables using the pagetables themselves. This is done to
40 * reduce the impact on kernel virtual memory for lots of sparse address
41 * space, and to reduce the cost of memory to each process.
42 *
43 * from: hp300: @(#)pmap.h 7.2 (Berkeley) 12/16/90
44 * from: @(#)pmap.h 7.4 (Berkeley) 5/12/91
1/*
2 * Copyright (c) 1991 Regents of the University of California.
3 * All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * the Systems Programming Group of the University of Utah Computer
7 * Science Department and William Jolitz of UUNET Technologies Inc.
8 *

--- 28 unchanged lines hidden (view full) ---

37 * Derived from hp300 version by Mike Hibler, this version by William
38 * Jolitz uses a recursive map [a pde points to the page directory] to
39 * map the page tables using the pagetables themselves. This is done to
40 * reduce the impact on kernel virtual memory for lots of sparse address
41 * space, and to reduce the cost of memory to each process.
42 *
43 * from: hp300: @(#)pmap.h 7.2 (Berkeley) 12/16/90
44 * from: @(#)pmap.h 7.4 (Berkeley) 5/12/91
45 * $Id: pmap.h,v 1.9 1994/01/27 03:36:14 davidg Exp $
45 * $Id: pmap.h,v 1.10 1994/01/31 04:19:00 davidg Exp $
46 */
47
48#ifndef _PMAP_MACHINE_
49#define _PMAP_MACHINE_ 1
50
51#include "vm/vm_prot.h"
52/*
53 * 386 page table entry and page table directory

--- 56 unchanged lines hidden (view full) ---

110
111/*
112 * Page Protection Exception bits
113 */
114#define PGEX_P 0x01 /* Protection violation vs. not present */
115#define PGEX_W 0x02 /* during a Write cycle */
116#define PGEX_U 0x04 /* access from User mode (UPL) */
117
46 */
47
48#ifndef _PMAP_MACHINE_
49#define _PMAP_MACHINE_ 1
50
51#include "vm/vm_prot.h"
52/*
53 * 386 page table entry and page table directory

--- 56 unchanged lines hidden (view full) ---

110
111/*
112 * Page Protection Exception bits
113 */
114#define PGEX_P 0x01 /* Protection violation vs. not present */
115#define PGEX_W 0x02 /* during a Write cycle */
116#define PGEX_U 0x04 /* access from User mode (UPL) */
117
118typedef struct pde pd_entry_t; /* page directory entry */
119typedef struct pte pt_entry_t; /* Mach page table entry */
118/* typedef struct pde pd_entry_t; */ /* page directory entry */
119/* typedef struct pte pt_entry_t; */ /* Mach page table entry */
120typedef unsigned int *pd_entry_t;
121typedef unsigned int *pt_entry_t;
120
121/*
122 * NKPDE controls the virtual space of the kernel, what ever is left, minus
123 * the alternate page table area is given to the user (NUPDE)
124 */
125/*
126 * NKPDE controls the virtual space of the kernel, what ever is left is
127 * given to the user (NUPDE)

--- 12 unchanged lines hidden (view full) ---

140 *
141 * XXX This works for now, but I am not real happy with it, I'll fix it
142 * right after I fix locore.s and the magic 28K hole
143 */
144#define APTDPTDI (NPTEPG-1) /* alt ptd entry that points to APTD */
145#define KPTDI (APTDPTDI-NKPDE)/* start of kernel virtual pde's */
146#define PTDPTDI (KPTDI-1) /* ptd entry that points to ptd! */
147#define KSTKPTDI (PTDPTDI-1) /* ptd entry for u./kernel&user stack */
122
123/*
124 * NKPDE controls the virtual space of the kernel, what ever is left, minus
125 * the alternate page table area is given to the user (NUPDE)
126 */
127/*
128 * NKPDE controls the virtual space of the kernel, what ever is left is
129 * given to the user (NUPDE)

--- 12 unchanged lines hidden (view full) ---

142 *
143 * XXX This works for now, but I am not real happy with it, I'll fix it
144 * right after I fix locore.s and the magic 28K hole
145 */
146#define APTDPTDI (NPTEPG-1) /* alt ptd entry that points to APTD */
147#define KPTDI (APTDPTDI-NKPDE)/* start of kernel virtual pde's */
148#define PTDPTDI (KPTDI-1) /* ptd entry that points to ptd! */
149#define KSTKPTDI (PTDPTDI-1) /* ptd entry for u./kernel&user stack */
148#define KSTKPTEOFF (NBPG/sizeof(struct pde)-UPAGES) /* pte entry for kernel stack */
150#define KSTKPTEOFF (NBPG/sizeof(pd_entry_t)-UPAGES) /* pte entry for kernel stack */
149
151
150#define PDESIZE sizeof(struct pde) /* for assembly files */
151#define PTESIZE sizeof(struct pte) /* for assembly files */
152#define PDESIZE sizeof(pd_entry_t) /* for assembly files */
153#define PTESIZE sizeof(pt_entry_t) /* for assembly files */
152
153/*
154 * Address of current and alternate address space page table maps
155 * and directories.
156 */
157#ifdef KERNEL
154
155/*
156 * Address of current and alternate address space page table maps
157 * and directories.
158 */
159#ifdef KERNEL
158extern struct pte PTmap[], APTmap[], Upte;
159extern struct pde PTD[], APTD[], PTDpde, APTDpde, Upde;
160extern pt_entry_t PTmap[], APTmap[], Upte;
161extern pd_entry_t PTD[], APTD[], PTDpde, APTDpde, Upde;
160extern pt_entry_t *Sysmap;
161
162extern int IdlePTD; /* physical address of "Idle" state directory */
163#endif
164
165/*
166 * virtual address to page table entry and
167 * to physical address. Likewise for alternate address space.
168 * Note: these work recursively, thus vtopte of a pte will give
169 * the corresponding pde that in turn maps it.
170 */
171#define vtopte(va) (PTmap + i386_btop(va))
172#define kvtopte(va) vtopte(va)
173#define ptetov(pt) (i386_ptob(pt - PTmap))
162extern pt_entry_t *Sysmap;
163
164extern int IdlePTD; /* physical address of "Idle" state directory */
165#endif
166
167/*
168 * virtual address to page table entry and
169 * to physical address. Likewise for alternate address space.
170 * Note: these work recursively, thus vtopte of a pte will give
171 * the corresponding pde that in turn maps it.
172 */
173#define vtopte(va) (PTmap + i386_btop(va))
174#define kvtopte(va) vtopte(va)
175#define ptetov(pt) (i386_ptob(pt - PTmap))
174#define vtophys(va) (i386_ptob(vtopte(va)->pg_pfnum) | ((int)(va) & PGOFSET))
176#define vtophys(va) (((int) (*vtopte(va))&PG_FRAME) | ((int)(va) & PGOFSET))
175#define ispt(va) ((va) >= UPT_MIN_ADDRESS && (va) <= KPT_MAX_ADDRESS)
176
177#define avtopte(va) (APTmap + i386_btop(va))
178#define ptetoav(pt) (i386_ptob(pt - APTmap))
177#define ispt(va) ((va) >= UPT_MIN_ADDRESS && (va) <= KPT_MAX_ADDRESS)
178
179#define avtopte(va) (APTmap + i386_btop(va))
180#define ptetoav(pt) (i386_ptob(pt - APTmap))
179#define avtophys(va) (i386_ptob(avtopte(va)->pg_pfnum) | ((int)(va) & PGOFSET))
181#define avtophys(va) (((int) (*avtopte(va))&PG_FRAME) | ((int)(va) & PGOFSET))
180
181/*
182 * macros to generate page directory/table indicies
183 */
184
185#define pdei(va) (((va)&PD_MASK)>>PD_SHIFT)
186#define ptei(va) (((va)&PT_MASK)>>PG_SHIFT)
187

--- 59 unchanged lines hidden (view full) ---

247extern void pmap_pinit(struct pmap *);
248extern void pmap_destroy(pmap_t);
249extern void pmap_release(struct pmap *);
250extern void pmap_reference(pmap_t);
251extern void pmap_remove(struct pmap *, vm_offset_t, vm_offset_t);
252extern void pmap_protect(struct pmap *, vm_offset_t, vm_offset_t, vm_prot_t);
253extern void pmap_enter(pmap_t, vm_offset_t, vm_offset_t, vm_prot_t, boolean_t);
254extern void pmap_change_wiring(pmap_t, vm_offset_t, boolean_t);
182
183/*
184 * macros to generate page directory/table indicies
185 */
186
187#define pdei(va) (((va)&PD_MASK)>>PD_SHIFT)
188#define ptei(va) (((va)&PT_MASK)>>PG_SHIFT)
189

--- 59 unchanged lines hidden (view full) ---

249extern void pmap_pinit(struct pmap *);
250extern void pmap_destroy(pmap_t);
251extern void pmap_release(struct pmap *);
252extern void pmap_reference(pmap_t);
253extern void pmap_remove(struct pmap *, vm_offset_t, vm_offset_t);
254extern void pmap_protect(struct pmap *, vm_offset_t, vm_offset_t, vm_prot_t);
255extern void pmap_enter(pmap_t, vm_offset_t, vm_offset_t, vm_prot_t, boolean_t);
256extern void pmap_change_wiring(pmap_t, vm_offset_t, boolean_t);
255extern inline struct pte *pmap_pte(pmap_t, vm_offset_t);
257extern inline pt_entry_t *pmap_pte(pmap_t, vm_offset_t);
256extern vm_offset_t pmap_extract(pmap_t, vm_offset_t);
257extern void pmap_copy(pmap_t, pmap_t, vm_offset_t, vm_size_t, vm_offset_t);
258extern void pmap_collect(pmap_t);
259struct pcb; extern void pmap_activate(pmap_t, struct pcb *);
260extern pmap_t pmap_kernel(void);
261extern void pmap_pageable(pmap_t, vm_offset_t, vm_offset_t, boolean_t);
262
263
264#endif /* KERNEL */
265
266#endif /* _PMAP_MACHINE_ */
258extern vm_offset_t pmap_extract(pmap_t, vm_offset_t);
259extern void pmap_copy(pmap_t, pmap_t, vm_offset_t, vm_size_t, vm_offset_t);
260extern void pmap_collect(pmap_t);
261struct pcb; extern void pmap_activate(pmap_t, struct pcb *);
262extern pmap_t pmap_kernel(void);
263extern void pmap_pageable(pmap_t, vm_offset_t, vm_offset_t, boolean_t);
264
265
266#endif /* KERNEL */
267
268#endif /* _PMAP_MACHINE_ */