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