summaryrefslogtreecommitdiff
path: root/sys/arch/sparc
diff options
context:
space:
mode:
authorMiod Vallat <miod@cvs.openbsd.org>2005-04-17 18:47:52 +0000
committerMiod Vallat <miod@cvs.openbsd.org>2005-04-17 18:47:52 +0000
commitf051bae440ec0fa5fe664e635090e32f92a54cdc (patch)
treeefabe9cf512d871648ad02ec75c903eb68d2ca9a /sys/arch/sparc
parent0f281c355a9f1d74f8996074563ab439162320c6 (diff)
Do not use KERNBASE when VM_MIN_KERNEL_ADDRESS or VM_MAXUSER_ADDRESS are
implied; this currently does not change anything (yet). Also, define the I/O space range in <machine/vmparam.h> rather than in <sparc/sparc/vaddrs.h>. ok deraadt@ mickey@
Diffstat (limited to 'sys/arch/sparc')
-rw-r--r--sys/arch/sparc/include/pmap.h6
-rw-r--r--sys/arch/sparc/include/vmparam.h11
-rw-r--r--sys/arch/sparc/sparc/auxreg.c4
-rw-r--r--sys/arch/sparc/sparc/genassym.cf5
-rw-r--r--sys/arch/sparc/sparc/locore.s18
-rw-r--r--sys/arch/sparc/sparc/pmap.c66
-rw-r--r--sys/arch/sparc/sparc/trap.c6
-rw-r--r--sys/arch/sparc/sparc/vaddrs.h6
8 files changed, 64 insertions, 58 deletions
diff --git a/sys/arch/sparc/include/pmap.h b/sys/arch/sparc/include/pmap.h
index b754e9ab4e2..b6586168a1c 100644
--- a/sys/arch/sparc/include/pmap.h
+++ b/sys/arch/sparc/include/pmap.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: pmap.h,v 1.39 2005/04/04 23:40:02 miod Exp $ */
+/* $OpenBSD: pmap.h,v 1.40 2005/04/17 18:47:48 miod Exp $ */
/* $NetBSD: pmap.h,v 1.30 1997/08/04 20:00:47 pk Exp $ */
/*
@@ -124,8 +124,8 @@
* pointers to each other. These must (unfortunately) be kept in sync.
*
*/
-#define NKREG ((int)((-(unsigned)KERNBASE) / NBPRG)) /* i.e., 8 */
-#define NUREG (256 - NKREG) /* i.e., 248 */
+#define NKREG ((int)((-(unsigned)VM_MIN_KERNEL_ADDRESS) / NBPRG)) /* 8 */
+#define NUREG (256 - NKREG) /* 248 */
TAILQ_HEAD(mmuhd,mmuentry);
diff --git a/sys/arch/sparc/include/vmparam.h b/sys/arch/sparc/include/vmparam.h
index dc35ede11e3..8557ec3fb71 100644
--- a/sys/arch/sparc/include/vmparam.h
+++ b/sys/arch/sparc/include/vmparam.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: vmparam.h,v 1.30 2005/04/11 15:13:01 deraadt Exp $ */
+/* $OpenBSD: vmparam.h,v 1.31 2005/04/17 18:47:48 miod Exp $ */
/* $NetBSD: vmparam.h,v 1.13 1997/07/12 16:20:03 perry Exp $ */
/*
@@ -53,7 +53,7 @@
* is the top (end) of the user stack.
*/
#define USRTEXT 0x2000 /* Start of user text */
-#define USRSTACK KERNBASE /* Start of user stack */
+#define USRSTACK VM_MIN_KERNEL_ADDRESS /* Start of user stack */
/*
* Virtual memory related constants, all in bytes
@@ -90,11 +90,14 @@
* tread with care.
*/
#define VM_MIN_ADDRESS ((vaddr_t)0)
-#define VM_MAX_ADDRESS ((vaddr_t)KERNBASE)
-#define VM_MAXUSER_ADDRESS ((vaddr_t)KERNBASE)
+#define VM_MAX_ADDRESS ((vaddr_t)VM_MIN_KERNEL_ADDRESS)
+#define VM_MAXUSER_ADDRESS ((vaddr_t)VM_MIN_KERNEL_ADDRESS)
#define VM_MIN_KERNEL_ADDRESS ((vaddr_t)KERNBASE)
#define VM_MAX_KERNEL_ADDRESS ((vaddr_t)0xfe000000)
+#define IOSPACE_BASE VM_MAX_KERNEL_ADDRESS
+#define IOSPACE_LEN 0x01000000 /* 16 MB of iospace */
+
#define VM_PHYSSEG_MAX 32 /* we only have one "hole" */
#define VM_PHYSSEG_STRAT VM_PSTRAT_BSEARCH
#define VM_PHYSSEG_NOADD /* can't add RAM after vm_mem_init */
diff --git a/sys/arch/sparc/sparc/auxreg.c b/sys/arch/sparc/sparc/auxreg.c
index c3d12d0a62d..b9f0cb5dafd 100644
--- a/sys/arch/sparc/sparc/auxreg.c
+++ b/sys/arch/sparc/sparc/auxreg.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: auxreg.c,v 1.11 2003/06/02 23:27:55 millert Exp $ */
+/* $OpenBSD: auxreg.c,v 1.12 2005/04/17 18:47:50 miod Exp $ */
/* $NetBSD: auxreg.c,v 1.21 1997/05/24 20:15:59 pk Exp $ */
/*
@@ -47,6 +47,8 @@
#include <sys/kernel.h>
#include <sys/timeout.h>
+#include <uvm/uvm_param.h>
+
#include <machine/autoconf.h>
#include <sparc/sparc/vaddrs.h>
diff --git a/sys/arch/sparc/sparc/genassym.cf b/sys/arch/sparc/sparc/genassym.cf
index 28cf31fb5f3..1dbf11cc5d5 100644
--- a/sys/arch/sparc/sparc/genassym.cf
+++ b/sys/arch/sparc/sparc/genassym.cf
@@ -1,4 +1,4 @@
-# $OpenBSD: genassym.cf,v 1.18 2005/04/16 15:07:29 miod Exp $
+# $OpenBSD: genassym.cf,v 1.19 2005/04/17 18:47:50 miod Exp $
# $NetBSD: genassym.cf,v 1.2 1997/06/28 19:59:04 pk Exp $
#
@@ -70,10 +70,11 @@ include <sparc/dev/fdreg.h>
include <sparc/dev/fdvar.h>
# general constants
-export BSD
export SUN4_PGSHIFT
export SUN4CM_PGSHIFT
export USRSTACK
+export IOSPACE_BASE
+export VM_MIN_KERNEL_ADDRESS
# proc fields and values
struct proc
diff --git a/sys/arch/sparc/sparc/locore.s b/sys/arch/sparc/sparc/locore.s
index 82050a5918f..5ddf51820cb 100644
--- a/sys/arch/sparc/sparc/locore.s
+++ b/sys/arch/sparc/sparc/locore.s
@@ -1,4 +1,4 @@
-/* $OpenBSD: locore.s,v 1.63 2005/04/17 18:44:19 miod Exp $ */
+/* $OpenBSD: locore.s,v 1.64 2005/04/17 18:47:50 miod Exp $ */
/* $NetBSD: locore.s,v 1.73 1997/09/13 20:36:48 pk Exp $ */
/*
@@ -4156,8 +4156,8 @@ ENTRY(copyinstr)
beq,a Lcstoolong0 ! yes, return ENAMETOOLONG
sethi %hi(_C_LABEL(cpcb)), %o4
- set KERNBASE, %o4
- cmp %o0, %o4 ! fromaddr < KERNBASE?
+ set VM_MIN_KERNEL_ADDRESS, %o4
+ cmp %o0, %o4 ! fromaddr < VM_MIN_KERNEL_ADDRESS?
blu Lcsdocopyi ! yes, go do it
sethi %hi(_C_LABEL(cpcb)), %o4 ! (first instr of copy)
@@ -4177,8 +4177,8 @@ ENTRY(copyoutstr)
beq,a Lcstoolong0 ! yes, return ENAMETOOLONG
sethi %hi(_C_LABEL(cpcb)), %o4
- set KERNBASE, %o4
- cmp %o1, %o4 ! toaddr < KERNBASE?
+ set VM_MIN_KERNEL_ADDRESS, %o4
+ cmp %o1, %o4 ! toaddr < VM_MIN_KERNEL_ADDRESS?
blu Lcsdocopyo ! yes, go do it
sethi %hi(_C_LABEL(cpcb)), %o4 ! (first instr of copy)
@@ -4287,8 +4287,8 @@ ENTRY(copystr)
* Copy specified amount of data from user space into the kernel.
*/
ENTRY(copyin)
- set KERNBASE, %o3
- cmp %o0, %o3 ! src < KERNBASE?
+ set VM_MIN_KERNEL_ADDRESS, %o3
+ cmp %o0, %o3 ! src < VM_MIN_KERNEL_ADDRESS?
blu,a Ldocopy ! yes, can try it
sethi %hi(_C_LABEL(cpcb)), %o3
@@ -4304,8 +4304,8 @@ ENTRY(copyin)
* rather than the `src' addresses.
*/
ENTRY(copyout)
- set KERNBASE, %o3
- cmp %o1, %o3 ! dst < KERNBASE?
+ set VM_MIN_KERNEL_ADDRESS, %o3
+ cmp %o1, %o3 ! dst < VM_MIN_KERNEL_ADDRESS?
blu,a Ldocopy
sethi %hi(_C_LABEL(cpcb)), %o3
diff --git a/sys/arch/sparc/sparc/pmap.c b/sys/arch/sparc/sparc/pmap.c
index 89f10c414a9..1dc00992d4c 100644
--- a/sys/arch/sparc/sparc/pmap.c
+++ b/sys/arch/sparc/sparc/pmap.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: pmap.c,v 1.142 2005/04/03 10:36:12 miod Exp $ */
+/* $OpenBSD: pmap.c,v 1.143 2005/04/17 18:47:50 miod Exp $ */
/* $NetBSD: pmap.c,v 1.118 1998/05/19 19:00:18 thorpej Exp $ */
/*
@@ -1018,17 +1018,17 @@ mmu_setup4m_L1(regtblptd, kpmap)
/*
* Here we scan the region table to copy any entries which appear.
* We are only concerned with regions in kernel space and above
- * (i.e. regions VA_VREG(KERNBASE)+1 to 0xff). We ignore the first
- * region (at VA_VREG(KERNBASE)), since that is the 16MB L1 mapping
- * that the ROM used to map the kernel in initially. Later, we will
- * rebuild a new L3 mapping for the kernel and install it before
- * switching to the new pagetables.
+ * (i.e. regions VA_VREG(VM_MIN_KERNEL_ADDRESS)+1 to 0xff). We ignore
+ * the first region (at VA_VREG(VM_MIN_KERNEL_ADDRESS)), since that
+ * is the 16MB L1 mapping that the ROM used to map the kernel in
+ * initially. Later, we will rebuild a new L3 mapping for the kernel
+ * and install it before switching to the new pagetables.
*/
regtblrover =
((regtblptd & ~SRMMU_TETYPE) << SRMMU_PPNPASHIFT) +
- (VA_VREG(KERNBASE)+1) * sizeof(long); /* kernel only */
+ (VA_VREG(VM_MIN_KERNEL_ADDRESS)+1) * sizeof(long); /* kernel only */
- for (i = VA_VREG(KERNBASE) + 1; i < SRMMU_L1SIZE;
+ for (i = VA_VREG(VM_MIN_KERNEL_ADDRESS) + 1; i < SRMMU_L1SIZE;
i++, regtblrover += sizeof(long)) {
/* The region we're dealing with */
@@ -2816,9 +2816,9 @@ pmap_bootstrap4_4c(nctx, nregion, nsegment)
*/
lastpage = NPTESG;
- p = (caddr_t)KERNBASE; /* first va */
- vs = VA_VSEG(KERNBASE); /* first virtual segment */
- vr = VA_VREG(KERNBASE); /* first virtual region */
+ p = (caddr_t)VM_MIN_KERNEL_ADDRESS; /* first va */
+ vs = VA_VSEG(VM_MIN_KERNEL_ADDRESS); /* first virtual segment */
+ vr = VA_VREG(VM_MIN_KERNEL_ADDRESS); /* first virtual region */
rp = &pmap_kernel()->pm_regmap[vr];
for (rcookie = 0, scookie = 0;;) {
@@ -3121,12 +3121,12 @@ pmap_bootstrap4m(void)
* Entering new region; install & build segtbl
*/
- rp = &pmap_kernel()->pm_regmap[reg + VA_VREG(KERNBASE)];
+ rp = &pmap_kernel()->pm_regmap[reg + VA_VREG(VM_MIN_KERNEL_ADDRESS)];
kphyssegtbl = (caddr_t)
&kernel_segtable_store[reg * SRMMU_L2SIZE];
- setpgt4m(&pmap_kernel()->pm_reg_ptps[reg + VA_VREG(KERNBASE)],
+ setpgt4m(&pmap_kernel()->pm_reg_ptps[reg + VA_VREG(VM_MIN_KERNEL_ADDRESS)],
(VA2PA(kphyssegtbl) >> SRMMU_PPNPASHIFT) | SRMMU_TEPTD);
rp->rg_seg_ptps = (int *)kphyssegtbl;
@@ -3191,17 +3191,17 @@ pmap_bootstrap4m(void)
/*
* Now map the kernel into our new set of page tables, then
* (finally) switch over to our running page tables.
- * We map from KERNBASE to p into context 0's page tables (and
- * the kernel pmap).
+ * We map from VM_MIN_KERNEL_ADDRESS to p into context 0's
+ * page tables (and the kernel pmap).
*/
#ifdef DEBUG /* Sanity checks */
if ((u_int)p % NBPG != 0)
panic("pmap_bootstrap4m: p misaligned?!?");
- if (KERNBASE % NBPRG != 0)
- panic("pmap_bootstrap4m: KERNBASE not region-aligned");
+ if (VM_MIN_KERNEL_ADDRESS % NBPRG != 0)
+ panic("pmap_bootstrap4m: VM_MIN_KERNEL_ADDRESS not region-aligned");
#endif
- for (q = (caddr_t) KERNBASE; q < p; q += NBPG) {
+ for (q = (caddr_t) VM_MIN_KERNEL_ADDRESS; q < p; q += NBPG) {
struct regmap *rp;
struct segmap *sp;
int pte;
@@ -3213,7 +3213,7 @@ pmap_bootstrap4m(void)
sp = &rp->rg_segmap[VA_VSEG(q)];
sp->sg_npte++;
- pte = ((int)q - KERNBASE) >> SRMMU_PPNPASHIFT;
+ pte = ((int)q - VM_MIN_KERNEL_ADDRESS) >> SRMMU_PPNPASHIFT;
pte |= PPROT_N_RX | SRMMU_TEPTE;
if ((cpuinfo.flags & CPUFLG_CACHEPAGETABLES) != 0 ||
@@ -3482,8 +3482,8 @@ pmap_create()
/* Copy kernel regions */
for (i = 0; i < NKREG; i++) {
- setpgt4m(&pm->pm_reg_ptps[VA_VREG(KERNBASE) + i],
- cpuinfo.L1_ptps[VA_VREG(KERNBASE) + i]);
+ setpgt4m(&pm->pm_reg_ptps[VA_VREG(VM_MIN_KERNEL_ADDRESS) + i],
+ cpuinfo.L1_ptps[VA_VREG(VM_MIN_KERNEL_ADDRESS) + i]);
}
}
#endif
@@ -5337,8 +5337,8 @@ pmap_enk4m(pm, va, prot, flags, pv, pteproto)
int wired = (flags & PMAP_WIRED) != 0;
#ifdef DIAGNOSTIC
- if (va < KERNBASE)
- panic("pmap_enk4m: can't enter va 0x%lx below KERNBASE", va);
+ if (va < VM_MIN_KERNEL_ADDRESS)
+ panic("pmap_enk4m: can't enter va 0x%lx below VM_MIN_KERNEL_ADDRESS", va);
#endif
rp = &pm->pm_regmap[VA_VREG(va)];
sp = &rp->rg_segmap[VA_VSEG(va)];
@@ -5416,8 +5416,8 @@ pmap_enu4m(pm, va, prot, flags, pv, pteproto)
int wired = (flags & PMAP_WIRED) != 0;
#ifdef DEBUG
- if (KERNBASE < va)
- panic("pmap_enu4m: can't enter va 0x%lx above KERNBASE", va);
+ if (VM_MIN_KERNEL_ADDRESS < va)
+ panic("pmap_enu4m: can't enter va 0x%lx above VM_MIN_KERNEL_ADDRESS", va);
#endif
write_user_windows(); /* XXX conservative */
@@ -6258,12 +6258,12 @@ pm_check_u(s, pm)
SRMMU_PPNPASHIFT) | SRMMU_TEPTD))
panic("%s: CHK(vr %d): SRMMU segtbl not installed",s,vr);
#endif
- if ((unsigned int)rp < KERNBASE)
+ if ((unsigned int)rp < VM_MIN_KERNEL_ADDRESS)
panic("%s: rp=%p", s, rp);
n = 0;
for (vs = 0; vs < NSEGRG; vs++) {
sp = &rp->rg_segmap[vs];
- if ((unsigned int)sp < KERNBASE)
+ if ((unsigned int)sp < VM_MIN_KERNEL_ADDRESS)
panic("%s: sp=%p", s, sp);
if (sp->sg_npte != 0) {
n++;
@@ -6572,8 +6572,8 @@ debug_pagetables()
printf("Testing region 0xff: ");
test_region(0xff,0,16*1024*1024);
#if 0 /* XXX avail_start */
- printf("Testing kernel region 0x%x: ", VA_VREG(KERNBASE));
- test_region(VA_VREG(KERNBASE), 4096, avail_start);
+ printf("Testing kernel region 0x%x: ", VA_VREG(VM_MIN_KERNEL_ADDRESS));
+ test_region(VA_VREG(VM_MIN_KERNEL_ADDRESS), 4096, avail_start);
#endif
cngetc();
@@ -6621,7 +6621,7 @@ VA2PAsw(ctx, addr, pte)
return 0;
}
/* L1 */
- curtbl = ((curpte & ~0x3) << 4) | KERNBASE; /* correct for krn*/
+ curtbl = ((curpte & ~0x3) << 4) | VM_MIN_KERNEL_ADDRESS; /* correct for krn*/
*pte = curpte = curtbl[VA_VREG(addr)];
#ifdef EXTREME_EXTREME_DEBUG
printf("L1 table at 0x%x.\nGot L1 pte 0x%x\n",curtbl,curpte);
@@ -6635,7 +6635,7 @@ VA2PAsw(ctx, addr, pte)
return 0;
}
/* L2 */
- curtbl = ((curpte & ~0x3) << 4) | KERNBASE; /* correct for krn*/
+ curtbl = ((curpte & ~0x3) << 4) | VM_MIN_KERNEL_ADDRESS; /* correct for krn*/
*pte = curpte = curtbl[VA_VSEG(addr)];
#ifdef EXTREME_EXTREME_DEBUG
printf("L2 table at 0x%x.\nGot L2 pte 0x%x\n",curtbl,curpte);
@@ -6649,7 +6649,7 @@ VA2PAsw(ctx, addr, pte)
return 0;
}
/* L3 */
- curtbl = ((curpte & ~0x3) << 4) | KERNBASE; /* correct for krn*/
+ curtbl = ((curpte & ~0x3) << 4) | VM_MIN_KERNEL_ADDRESS; /* correct for krn*/
*pte = curpte = curtbl[VA_VPG(addr)];
#ifdef EXTREME_EXTREME_DEBUG
printf("L3 table at 0x%x.\nGot L3 pte 0x%x\n",curtbl,curpte);
@@ -6690,7 +6690,7 @@ void test_region(reg, start, stop)
printf("Mismatch at address 0x%x.\n",addr);
if (cngetc()=='q') break;
}
- if (reg == VA_VREG(KERNBASE))
+ if (reg == VA_VREG(VM_MIN_KERNEL_ADDRESS))
/* kernel permissions are different */
continue;
if ((pte&SRMMU_PROT_MASK)!=(ptesw&SRMMU_PROT_MASK)) {
diff --git a/sys/arch/sparc/sparc/trap.c b/sys/arch/sparc/sparc/trap.c
index ffb05eda902..cd10493565e 100644
--- a/sys/arch/sparc/sparc/trap.c
+++ b/sys/arch/sparc/sparc/trap.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: trap.c,v 1.42 2004/12/06 20:12:25 miod Exp $ */
+/* $OpenBSD: trap.c,v 1.43 2005/04/17 18:47:51 miod Exp $ */
/* $NetBSD: trap.c,v 1.58 1997/09/12 08:55:01 pk Exp $ */
/*
@@ -704,7 +704,7 @@ mem_access_fault(type, ser, v, pc, psr, tf)
*/
if (cold)
goto kfault;
- if (va >= KERNBASE) {
+ if (va >= VM_MIN_KERNEL_ADDRESS) {
if (uvm_fault(kernel_map, va, 0, ftype) == 0)
return;
goto kfault;
@@ -950,7 +950,7 @@ mem_access_fault4m(type, sfsr, sfva, tf)
*/
if (cold)
goto kfault;
- if (va >= KERNBASE) {
+ if (va >= VM_MIN_KERNEL_ADDRESS) {
if (uvm_fault(kernel_map, va, 0, ftype) == 0)
return;
goto kfault;
diff --git a/sys/arch/sparc/sparc/vaddrs.h b/sys/arch/sparc/sparc/vaddrs.h
index 8132e8c2ca9..e833b72416e 100644
--- a/sys/arch/sparc/sparc/vaddrs.h
+++ b/sys/arch/sparc/sparc/vaddrs.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: vaddrs.h,v 1.6 2003/04/23 19:34:07 miod Exp $ */
+/* $OpenBSD: vaddrs.h,v 1.7 2005/04/17 18:47:51 miod Exp $ */
/* $NetBSD: vaddrs.h,v 1.8 1997/03/10 23:54:41 pk Exp $ */
/*
@@ -70,7 +70,7 @@
*/
#ifndef IODEV_0
-#define IODEV_0 0xfe000000 /* must match VM_MAX_KERNEL_ADDRESS */
+#define IODEV_0 IOSPACE_BASE
#define _MAXNBPG 8192 /* fixed VAs, independent of actual NBPG */
#define _MAXNCPU 4 /* fixed VA allocation allows 4 CPUs */
@@ -88,7 +88,7 @@
#define PI_INTR_VA ( MSGBUF_VA + _MAXNBPG) /* [4m] */
#define SI_INTR_VA ( PI_INTR_VA + _MAXNBPG*_MAXNCPU) /* [4m] */
#define IODEV_BASE ( SI_INTR_VA + _MAXNBPG)
-#define IODEV_END 0xff000000 /* 16 MB of iospace */
+#define IODEV_END (IOSPACE_BASE + IOSPACE_LEN)
#define DVMA_BASE 0xfff00000
#define DVMA_END 0xfffc0000