Locore changes for VS and VAX8200.

This commit is contained in:
ragge 1996-07-20 18:20:42 +00:00
parent 1abb214901
commit 7707223bc4
2 changed files with 231 additions and 144 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: intvec.s,v 1.19 1996/03/09 23:36:40 ragge Exp $ */
/* $NetBSD: intvec.s,v 1.20 1996/07/20 18:20:44 ragge Exp $ */
/*
* Copyright (c) 1994 Ludd, University of Lule}, Sweden.
@ -38,31 +38,31 @@
#include <machine/pte.h>
#include <machine/trap.h>
#define ENTRY(name) \
#define ENTRY(name) \
.text ; \
.align 2 ; \
.globl name ; \
name /**/:
#define TRAPCALL(namn, typ) \
#define TRAPCALL(namn, typ) \
ENTRY(namn) ; \
pushl $0 ; \
pushl $typ ; \
jbr trap
#define TRAPARGC(namn, typ) \
#define TRAPARGC(namn, typ) \
ENTRY(namn) ; \
pushl $typ ; \
jbr trap
#define FASTINTR(namn, rutin) \
#define FASTINTR(namn, rutin) \
ENTRY(namn) ; \
pushr $0x3f ; \
calls $0,_/**/rutin ; \
popr $0x3f ; \
rei
#define STRAY(scbnr, vecnr) \
#define STRAY(scbnr, vecnr) \
ENTRY(stray/**/vecnr) ; \
pushr $0x3f ; \
pushl $/**/0x/**/vecnr ; \
@ -71,7 +71,7 @@ ENTRY(stray/**/vecnr) ; \
popr $0x3f ; \
rei
#define KSTACK 0
#define KSTACK 0
#define ISTACK 1
#define INTVEC(label,stack) \
.long label+stack;
@ -87,66 +87,66 @@ _rpb:
* and move the SCB later to somewhere else.
*/
INTVEC(stray00, ISTACK) # Unused., 0
INTVEC(stray00, ISTACK) # Unused., 0
INTVEC(mcheck, ISTACK) # Machine Check., 4
INTVEC(invkstk, ISTACK) # Kernel Stack Invalid., 8
INTVEC(stray0C, ISTACK) # Power Failed., C
INTVEC(invkstk, ISTACK) # Kernel Stack Invalid., 8
INTVEC(stray0C, ISTACK) # Power Failed., C
INTVEC(privinflt, KSTACK) # Privileged/Reserved Instruction.
INTVEC(stray14, ISTACK) # Customer Reserved Instruction, 14
INTVEC(stray14, ISTACK) # Customer Reserved Instruction, 14
INTVEC(resopflt, KSTACK) # Reserved Operand/Boot Vector(?), 18
INTVEC(resadflt, KSTACK) # # Reserved Address Mode., 1C
INTVEC(access_v, KSTACK) # Access Control Violation, 20
INTVEC(transl_v, KSTACK) # Translation Invalid, 24
INTVEC(tracep, KSTACK) # Trace Pending, 28
INTVEC(breakp, KSTACK) # Breakpoint Instruction, 2C
INTVEC(stray30, ISTACK) # Compatibility Exception, 30
INTVEC(stray30, ISTACK) # Compatibility Exception, 30
INTVEC(arithflt, KSTACK) # Arithmetic Fault, 34
INTVEC(stray38, ISTACK) # Unused, 38
INTVEC(stray3C, ISTACK) # Unused, 3C
INTVEC(stray38, ISTACK) # Unused, 38
INTVEC(stray3C, ISTACK) # Unused, 3C
INTVEC(syscall, KSTACK) # main syscall trap, chmk, 40
INTVEC(resopflt, KSTACK) # chme, 44
INTVEC(resopflt, KSTACK) # chms, 48
INTVEC(resopflt, KSTACK) # chmu, 4C
INTVEC(stray50, ISTACK) # System Backplane Exception, 50
INTVEC(sbiexc, ISTACK) # System Backplane Exception/BIerror, 50
INTVEC(cmrerr, ISTACK) # Corrected Memory Read, 54
INTVEC(stray58, ISTACK) # System Backplane Alert, 58
INTVEC(rxcs, ISTACK) # System Backplane Alert/RXCD, 58
INTVEC(sbiflt, ISTACK) # System Backplane Fault, 5C
INTVEC(stray60, ISTACK) # Memory Write Timeout, 60
INTVEC(stray64, ISTACK) # Unused, 64
INTVEC(stray68, ISTACK) # Unused, 68
INTVEC(stray6C, ISTACK) # Unused, 6C
INTVEC(stray70, ISTACK) # Unused, 70
INTVEC(stray74, ISTACK) # Unused, 74
INTVEC(stray78, ISTACK) # Unused, 78
INTVEC(stray7C, ISTACK) # Unused, 7C
INTVEC(stray80, ISTACK) # Unused, 80
INTVEC(stray84, ISTACK) # Unused, 84
INTVEC(stray60, ISTACK) # Memory Write Timeout, 60
INTVEC(stray64, ISTACK) # Unused, 64
INTVEC(stray68, ISTACK) # Unused, 68
INTVEC(stray6C, ISTACK) # Unused, 6C
INTVEC(stray70, ISTACK) # Unused, 70
INTVEC(stray74, ISTACK) # Unused, 74
INTVEC(stray78, ISTACK) # Unused, 78
INTVEC(stray7C, ISTACK) # Unused, 7C
INTVEC(stray80, ISTACK) # Unused, 80
INTVEC(stray84, ISTACK) # Unused, 84
INTVEC(astintr, KSTACK) # Asynchronous Sustem Trap, AST
INTVEC(stray8C, ISTACK) # Unused, 8C
INTVEC(stray90, ISTACK) # Unused, 90
INTVEC(stray94, ISTACK) # Unused, 94
INTVEC(stray98, ISTACK) # Unused, 98
INTVEC(stray9C, ISTACK) # Unused, 9C
INTVEC(stray8C, ISTACK) # Unused, 8C
INTVEC(stray90, ISTACK) # Unused, 90
INTVEC(stray94, ISTACK) # Unused, 94
INTVEC(stray98, ISTACK) # Unused, 98
INTVEC(stray9C, ISTACK) # Unused, 9C
INTVEC(softclock,ISTACK) # Software clock interrupt
INTVEC(strayA4, ISTACK) # Unused, A4
INTVEC(strayA8, ISTACK) # Unused, A8
INTVEC(strayAC, ISTACK) # Unused, AC
INTVEC(netint, ISTACK) # Network interrupt
INTVEC(strayB4, ISTACK) # Unused, B4
INTVEC(strayB8, ISTACK) # Unused, B8
INTVEC(ddbtrap, ISTACK) # Kernel debugger trap, BC
INTVEC(strayA4, ISTACK) # Unused, A4
INTVEC(strayA8, ISTACK) # Unused, A8
INTVEC(strayAC, ISTACK) # Unused, AC
INTVEC(netint, ISTACK) # Network interrupt
INTVEC(strayB4, ISTACK) # Unused, B4
INTVEC(strayB8, ISTACK) # Unused, B8
INTVEC(ddbtrap, ISTACK) # Kernel debugger trap, BC
INTVEC(hardclock,ISTACK) # Interval Timer
INTVEC(strayC4, ISTACK) # Unused, C4
INTVEC(strayC4, ISTACK) # Unused, C4
INTVEC(emulate, KSTACK) # Subset instruction emulation
INTVEC(strayCC, ISTACK) # Unused, CC
INTVEC(strayD0, ISTACK) # Unused, D0
INTVEC(strayD4, ISTACK) # Unused, D4
INTVEC(strayD8, ISTACK) # Unused, D8
INTVEC(strayDC, ISTACK) # Unused, DC
INTVEC(strayE0, ISTACK) # Unused, E0
INTVEC(strayE4, ISTACK) # Unused, E4
INTVEC(strayE8, ISTACK) # Unused, E8
INTVEC(strayEC, ISTACK) # Unused, EC
INTVEC(strayCC, ISTACK) # Unused, CC
INTVEC(strayD0, ISTACK) # Unused, D0
INTVEC(strayD4, ISTACK) # Unused, D4
INTVEC(strayD8, ISTACK) # Unused, D8
INTVEC(strayDC, ISTACK) # Unused, DC
INTVEC(strayE0, ISTACK) # Unused, E0
INTVEC(strayE4, ISTACK) # Unused, E4
INTVEC(strayE8, ISTACK) # Unused, E8
INTVEC(strayEC, ISTACK) # Unused, EC
INTVEC(strayF0, ISTACK)
INTVEC(strayF4, ISTACK)
INTVEC(consrint, ISTACK) # Console Terminal Recieve Interrupt
@ -164,7 +164,7 @@ _rpb:
# _memtest (memtest in C) holds the address to continue execution
# at when returning from a intentional test.
#
mcheck: .globl mcheck
mcheck: .globl mcheck
tstl _cold # Ar we still in coldstart?
bneq L4 # Yes.
@ -174,16 +174,16 @@ mcheck: .globl mcheck
popr $0x3f
addl2 (sp)+,sp
rei
rei
L4: addl2 (sp)+,sp # remove info pushed on stack
cmpl _cpunumber, $1 # Is it a 11/780?
cmpl _vax_cputype,$1 # Is it a 11/780?
bneq 1f # No...
mtpr $0, $PR_SBIFS # Clear SBI fault register
brb 2f
1: cmpl _cpunumber, $4 # Is it a 8600?
1: cmpl _vax_cputype,$4 # Is it a 8600?
bneq 3f
mtpr $0, $PR_EHSR # Clear Error status register
@ -213,13 +213,13 @@ L2: movl (sp), 4(sp)
jbr trap
.align 2
access_v:.globl access_v # Access cntrl viol fault, 24
.align 2
access_v:.globl access_v # Access cntrl viol fault, 24
blbs (sp), ptelen
pushl $T_ACCFLT
jbr L3
ptelen: movl $T_PTELEN, (sp) # PTE must expand (or send segv)
ptelen: movl $T_PTELEN, (sp) # PTE must expand (or send segv)
jbr trap;
TRAPCALL(tracep, T_TRCTRAP)
@ -256,9 +256,33 @@ syscall:
STRAY(0,44)
STRAY(0,48)
STRAY(0,4C)
STRAY(0,50)
ENTRY(sbiexc)
tstl _cold /* Is it ok to get errs during boot??? */
bneq 1f
pushr $0x3f
pushl $0x50
pushl $0
calls $2,_stray
popr $0x3f
1: rei
FASTINTR(cmrerr,cmrerr)
STRAY(0,58)
ENTRY(rxcs); /* console interrupt from some other processor */
pushr $0x3f
#if VAX8200
cmpl $5,_vax_cputype
bneq 1f
calls $0,_rxcdintr
brb 2f
#endif
1: pushl $0x58
pushl $0
calls $2,_stray
2: popr $0x3f
rei
ENTRY(sbiflt);
moval sbifltmsg, -(sp)
calls $1, _panic
@ -373,35 +397,35 @@ _emtable:
/*
* The following is called with the stack set up as follows:
*
* (sp): Opcode
* 4(sp): Instruction PC
* 8(sp): Operand 1
* 12(sp): Operand 2
* 16(sp): Operand 3
* 20(sp): Operand 4
* 24(sp): Operand 5
* 28(sp): Operand 6
* 32(sp): Operand 7 (unused)
* 36(sp): Operand 8 (unused)
* 40(sp): Return PC
* 44(sp): Return PSL
* (sp): Opcode
* 4(sp): Instruction PC
* 8(sp): Operand 1
* 12(sp): Operand 2
* 16(sp): Operand 3
* 20(sp): Operand 4
* 24(sp): Operand 5
* 28(sp): Operand 6
* 32(sp): Operand 7 (unused)
* 36(sp): Operand 8 (unused)
* 40(sp): Return PC
* 44(sp): Return PSL
* 48(sp): TOS before instruction
*
* Each individual routine is called with the stack set up as follows:
*
* (sp): Return address of trap handler
* 4(sp): Opcode (will get return PSL)
* 8(sp): Instruction PC
* 12(sp): Operand 1
* 16(sp): Operand 2
* 20(sp): Operand 3
* 24(sp): Operand 4
* 28(sp): Operand 5
* 32(sp): Operand 6
* 36(sp): saved register 11
* 40(sp): saved register 10
* 44(sp): Return PC
* 48(sp): Return PSL
* (sp): Return address of trap handler
* 4(sp): Opcode (will get return PSL)
* 8(sp): Instruction PC
* 12(sp): Operand 1
* 16(sp): Operand 2
* 20(sp): Operand 3
* 24(sp): Operand 4
* 28(sp): Operand 5
* 32(sp): Operand 6
* 36(sp): saved register 11
* 40(sp): saved register 10
* 44(sp): Return PC
* 48(sp): Return PSL
* 52(sp): TOS before instruction
* See the VAX Architecture Reference Manual, Section B-5 for more
* information.
@ -429,12 +453,12 @@ noemulate:
#endif
.word 0xffff # "reserved instruction fault"
.globl _intrnames, _eintrnames, _intrcnt, _eintrcnt
.globl _intrnames, _eintrnames, _intrcnt, _eintrcnt
_intrnames:
.long 0
.long 0
_eintrnames:
_intrcnt:
.long 0
.long 0
_eintrcnt:
.data

View File

@ -1,4 +1,4 @@
/* $NetBSD: pmap.c,v 1.27 1996/05/19 16:44:20 ragge Exp $ */
/* $NetBSD: pmap.c,v 1.28 1996/07/20 18:20:42 ragge Exp $ */
/*
* Copyright (c) 1994 Ludd, University of Lule}, Sweden.
* All rights reserved.
@ -58,8 +58,8 @@ static void free_pv_entry __P((pv_entry_t));
static int remove_pmap_from_mapping __P((pv_entry_t, pmap_t));
#define ISTACK_SIZE (4 * NBPG)
#define PTE_TO_PV(pte) (PHYS_TO_PV((pte&PG_FRAME)<<PGSHIFT))
#define ISTACK_SIZE (4 * NBPG)
#define PTE_TO_PV(pte) (PHYS_TO_PV((pte&PG_FRAME)<<PGSHIFT))
struct pmap kernel_pmap_store;
@ -71,21 +71,55 @@ static int kernel_prot[]={ PG_NONE, PG_KR, PG_KW, PG_KW,
static pv_entry_t pv_head = NULL;
static unsigned int pv_count = 0;
pv_entry_t pv_table; /* array of entries,
one per LOGICAL page */
pv_entry_t pv_table; /* array of entries,
one per LOGICAL page */
unsigned *pte_cmap;
void *scratch;
void *scratch;
#ifdef PMAPDEBUG
int startpmapdebug = 0;
extern int startsysc, faultdebug;
/* extern int startsysc, faultdebug; */
#endif
unsigned int vmmap;
vm_map_t pte_map;
vm_offset_t avail_start, avail_end;
vm_offset_t virtual_avail, virtual_end; /* Available virtual memory */
vm_offset_t virtual_avail, virtual_end; /* Available virtual memory */
/*
* badaddr() doesn't work on some VAXstations
* (I've checked KA410 and KA43, don't know about others yet).
*
* Checking all pages of physical memory starting from address 0x0 and
* waiting for being trapped by badaddr() is not enough on these machines:
*
* on VS2000/KA410 physical memory appears more than once.
* eg. on a machine with 10MB memory (2MB base + 8MB extension)
* the extension memory is mapped to 0x200000, 0xA00000, and so on.
*
* On VS3100/KA43 writing to addresses above the available memory
* is implemented as a nop.
*
* On both of these machines the old check/count routine resulted in an
* endless loop. Thus while checking/counting the memory, we write a
* pattern to all the pages we are visiting. (leaving a hole for kernel).
* If we access a page which already holds a valid pattern, then we've
* seen this page already and thus reached the highest memory-address.
* If the page doesn't hold the pattern directly after having written
* it, then the page is bad or not available and we've reached the end.
*
* VAXen can't have more than 512(?) MB of physical memory, so we also
* have an upper limit for how much pages to check. If we're not trapped
* within this address-range, something went wrong and we're assuming
* some save amount of physical memory. This might be paranoid, but...
*/
#ifndef MAX_PHYSMEM_AVAIL
#define MAX_PHYSMEM_AVAIL 512*1024*1024
#endif
#ifndef MIN_PHYSMEM_AVAIL
#define MIN_PHYSMEM_AVAIL 8*1024*1024
#endif
/*
* pmap_bootstrap().
@ -104,6 +138,31 @@ pmap_bootstrap()
p0pmap = &vmspace0.vm_pmap;
sysptsize = SYSPTSIZE;
/*
* Because of the badaddr() problem with some VAXstations we
* compare the first page of memory (the SCB) with the new
* counted up pages for equality. It's very unlikely that
* another page will hold the same info as the SCB.
* This is neccessary only if badaddr() doesn't work, but on other
* machines checking the pattern doesn't hurt anyway...
*/
/* Kickoff for memory checking */
avail_end = 0x200000; /* 2 MB */
while (badaddr((caddr_t)avail_end, 4) == 0) {
#if VAX410 || VAX420 || VAX43 || VAX46 || VAX49 || VAX50
if (bcmp(0, (caddr_t)avail_end, NBPG) == 0)
break;
#endif
avail_end += NBPG * 128;/* Memory is checked in 64K hunks */
}
#if VAX410 || VAX420 || VAX43 || VAX46 || VAX49 || VAX50
sysptsize += (16 * 1024) >> PGSHIFT; /* guc->uc_sysptSpace ?? */
#endif
/*
* Virtual_* and avail_* is used for mapping of system page table.
* First set them to their max values and then decrement them.
@ -112,8 +171,6 @@ pmap_bootstrap()
* a variable here that is changed dependent of the physical
* memory size.
*/
while (!badaddr((caddr_t)avail_end, 4)) /* Memory is in 64K hunks */
avail_end += NBPG * 128;
sysptsize += avail_end >> PGSHIFT;
virtual_avail = KERNBASE;
virtual_end = KERNBASE + sysptsize * NBPG;
@ -137,7 +194,7 @@ pmap_bootstrap()
VM_PROT_READ|VM_PROT_WRITE);
/* Map System Page Table and zero it, Sysmap already set. */
mtpr(avail_start, PR_SBR);
mtpr(avail_start, PR_SBR);
MAPPHYS(junk, (ROUND_PAGE(sysptsize * 4) >> PGSHIFT),
VM_PROT_READ|VM_PROT_WRITE);
@ -176,40 +233,42 @@ pmap_bootstrap()
bcopy(0, (void *)avail_start, NBPG >> 1);
mtpr(avail_start, PR_SCBB);
bzero(0, NBPG >> 1);
(cpu_calls[cpunumber].cpu_steal_pages)();
(cpu_calls[vax_cputype].cpu_steal_pages)();
avail_start = ROUND_PAGE(avail_start);
virtual_avail = ROUND_PAGE(virtual_avail);
#ifdef PMAPDEBUG
printf("Sysmap %x, istack %x, scratch %x\n",Sysmap,istack,scratch);
printf("etext %x\n", &etext);
printf("SYSPTSIZE %x, USRPTSIZE %x\n",sysptsize,USRPTSIZE);
printf("pv_table %x, vmmap %x, pte_cmap %x\n",
pv_table,vmmap,pte_cmap);
printf("avail_start %x, avail_end %x\n",avail_start,avail_end);
printf("virtual_avail %x,virtual_end %x\n",virtual_avail,virtual_end);
printf("clearomr: %x \n",(uint)vmmap-(uint)Sysmap);
printf("faultdebug %x, startsysc %x\n",&faultdebug, &startsysc);
printf("startpmapdebug %x\n",&startpmapdebug);
printf("Sysmap %x, istack %x, scratch %x\n",Sysmap,istack,scratch);
printf("etext %x\n", &etext);
printf("SYSPTSIZE %x, USRPTSIZE %x\n",sysptsize,USRPTSIZE);
printf("pv_table %x, vmmap %x, pte_cmap %x\n",
pv_table,vmmap,pte_cmap);
printf("avail_start %x, avail_end %x\n",avail_start,avail_end);
printf("virtual_avail %x,virtual_end %x\n",virtual_avail,virtual_end);
printf("clearomr: %x \n",(uint)vmmap-(uint)Sysmap);
/* printf("faultdebug %x, startsysc %x\n",&faultdebug, &startsysc);*/
printf("startpmapdebug %x\n",&startpmapdebug);
#endif
/* Init kernel pmap */
pmap_kernel()->ref_count = 1;
simple_lock_init(&pmap_kernel()->pm_lock);
p0pmap->pm_pcb = (struct pcb *)proc0paddr;
/* Init kernel pmap */
pmap_kernel()->ref_count = 1;
simple_lock_init(&pmap_kernel()->pm_lock);
p0pmap->pm_pcb = (struct pcb *)proc0paddr;
p0pmap->pm_pcb->P1BR = (void *)0x80000000;
p0pmap->pm_pcb->P0BR = (void *)0x80000000;
p0pmap->pm_pcb->P1LR = 0x200000;
p0pmap->pm_pcb->P0LR = AST_PCB;
mtpr(0x80000000, PR_P1BR);
mtpr(0x80000000, PR_P0BR);
mtpr(0x200000, PR_P1LR);
mtpr(AST_PCB, PR_P0LR);
p0pmap->pm_pcb->P1BR = (void *)0x80000000;
p0pmap->pm_pcb->P0BR = (void *)0x80000000;
p0pmap->pm_pcb->P1LR = 0x200000;
p0pmap->pm_pcb->P0LR = AST_PCB;
mtpr(0x80000000, PR_P1BR);
mtpr(0x80000000, PR_P0BR);
mtpr(0x200000, PR_P1LR);
mtpr(AST_PCB, PR_P0LR);
/*
* Now everything should be complete, start virtual memory.
*/
mtpr(sysptsize, PR_SLR);
mtpr(1, PR_MAPEN);
mtpr(sysptsize, PR_SLR);
mtpr(1, PR_MAPEN);
}
@ -238,7 +297,7 @@ pmap_t
pmap_create(phys_size)
vm_size_t phys_size;
{
pmap_t pmap;
pmap_t pmap;
#ifdef PMAPDEBUG
if(startpmapdebug)printf("pmap_create: phys_size %x\n",phys_size);
@ -310,10 +369,10 @@ if(startpmapdebug)printf("pmap_destroy: pmap %x\n",pmap);
void
pmap_enter(pmap, v, p, prot, wired)
register pmap_t pmap;
vm_offset_t v;
vm_offset_t p;
vm_prot_t prot;
boolean_t wired;
vm_offset_t v;
vm_offset_t p;
vm_prot_t prot;
boolean_t wired;
{
u_int i, pte, s, *patch;
pv_entry_t pv, tmp;
@ -398,6 +457,10 @@ pmap_bootstrap_alloc(size)
{
void *mem;
#ifdef PMAPDEBUG
if(startpmapdebug)
printf("pmap_bootstrap_alloc: size 0x %x\n",size);
#endif
size = round_page(size);
mem = (void *)virtual_avail;
virtual_avail = pmap_map(virtual_avail, avail_start,
@ -455,8 +518,8 @@ void
pmap_protect(pmap, start, end, prot)
pmap_t pmap;
vm_offset_t start;
vm_offset_t end;
vm_prot_t prot;
vm_offset_t end;
vm_prot_t prot;
{
int pte, *patch, s;
@ -690,7 +753,7 @@ free_pv_entry(entry)
boolean_t
pmap_is_referenced(pa)
vm_offset_t pa;
vm_offset_t pa;
{
struct pv_entry *pv;
u_int *pte,spte=0;
@ -717,9 +780,9 @@ pmap_is_modified(pa)
pv=PHYS_TO_PV(pa);
if(!pv->pv_pmap) return 0;
do {
pte=(u_int *)pmap_virt2pte(pv->pv_pmap,pv->pv_va);
spte|=*pte++;
spte|=*pte;
pte=(u_int *)pmap_virt2pte(pv->pv_pmap,pv->pv_va);
spte|=*pte++;
spte|=*pte;
} while((pv=pv->pv_next));
return((spte&PG_M)?1:0);
}
@ -731,7 +794,7 @@ pmap_is_modified(pa)
void
pmap_clear_reference(pa)
vm_offset_t pa;
vm_offset_t pa;
{
struct pv_entry *pv;
int *pte;
@ -758,7 +821,7 @@ if(startpmapdebug) printf("pmap_clear_reference: pa %x, pv %x\n",pa,pv);
void
pmap_clear_modify(pa)
vm_offset_t pa;
vm_offset_t pa;
{
struct pv_entry *pv;
u_int *pte;
@ -775,8 +838,8 @@ pmap_clear_modify(pa)
void
pmap_change_wiring(pmap, va, wired)
register pmap_t pmap;
vm_offset_t va;
boolean_t wired;
vm_offset_t va;
boolean_t wired;
{
int *pte;
#ifdef PMAPDEBUG
@ -791,14 +854,14 @@ if(startpmapdebug) printf("pmap_change_wiring: pmap %x, va %x, wired %x\n",
}
/*
* pmap_page_protect:
* pmap_page_protect:
*
* Lower the permission for all mappings to a given page.
* Lower the permission for all mappings to a given page.
*/
void
pmap_page_protect(pa, prot)
vm_offset_t pa;
vm_prot_t prot;
vm_offset_t pa;
vm_prot_t prot;
{
pv_entry_t pv,opv;
u_int s,*pte,*pte1,nyprot,kprot;
@ -859,10 +922,10 @@ if(startpmapdebug) printf("pmap_page_protect: pa %x, prot %x\n",pa, prot);
}
/*
* pmap_zero_page zeros the specified (machine independent)
* page by mapping the page into virtual memory and using
* bzero to clear its contents, one machine dependent page
* at a time.
* pmap_zero_page zeros the specified (machine independent)
* page by mapping the page into virtual memory and using
* bzero to clear its contents, one machine dependent page
* at a time.
*/
void
pmap_zero_page(phys)