summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/arch/hp300/conf/DUALITY5
-rw-r--r--sys/arch/hp300/conf/GENERIC1
-rw-r--r--sys/arch/hp300/conf/Makefile.hp3009
-rw-r--r--sys/arch/hp300/conf/files.hp300.oldconf5
-rw-r--r--sys/arch/hp300/dev/dca.c8
-rw-r--r--sys/arch/hp300/dev/dcm.c12
-rw-r--r--sys/arch/hp300/dev/fhpib.c2
-rw-r--r--sys/arch/hp300/dev/hil.c4
-rw-r--r--sys/arch/hp300/dev/hpib.c4
-rw-r--r--sys/arch/hp300/dev/if_le.c68
-rw-r--r--sys/arch/hp300/dev/if_levar.h33
-rw-r--r--sys/arch/hp300/dev/ite.c10
-rw-r--r--sys/arch/hp300/dev/nhpib.c2
-rw-r--r--sys/arch/hp300/dev/rd.c36
-rw-r--r--sys/arch/hp300/dev/rdvar.h3
-rw-r--r--sys/arch/hp300/dev/scsi.c33
-rw-r--r--sys/arch/hp300/dev/sd.c20
-rw-r--r--sys/arch/hp300/dev/sdvar.h3
-rw-r--r--sys/arch/hp300/dev/st.c5
-rw-r--r--sys/arch/hp300/hp300/autoconf.c13
-rw-r--r--sys/arch/hp300/hp300/clock.c82
-rw-r--r--sys/arch/hp300/hp300/conf.c15
-rw-r--r--sys/arch/hp300/hp300/genassym.c18
-rw-r--r--sys/arch/hp300/hp300/locore.s102
-rw-r--r--sys/arch/hp300/hp300/machdep.c109
-rw-r--r--sys/arch/hp300/hp300/vectors.s5
-rw-r--r--sys/arch/hp300/hp300/vm_machdep.c6
-rw-r--r--sys/arch/hp300/include/cpu.h19
-rw-r--r--sys/arch/hp300/include/exec.h7
-rw-r--r--sys/arch/hp300/include/param.h13
-rw-r--r--sys/arch/hp300/stand/itevar.h2
-rw-r--r--sys/arch/hp300/stand/libsa/Makefile8
32 files changed, 296 insertions, 366 deletions
diff --git a/sys/arch/hp300/conf/DUALITY b/sys/arch/hp300/conf/DUALITY
index 7cf20a396a5..ae12322cb3a 100644
--- a/sys/arch/hp300/conf/DUALITY
+++ b/sys/arch/hp300/conf/DUALITY
@@ -1,4 +1,4 @@
-# $NetBSD: DUALITY,v 1.18 1995/05/12 12:49:54 mycroft Exp $
+# $NetBSD: DUALITY,v 1.19 1996/05/20 18:16:42 mrg Exp $
#
# DUALITY (mycroft's hp370 test machine)
#
@@ -45,12 +45,13 @@ options FDESC
options FIFO
options KERNFS
#options NULLFS
-#options PORTAL
+#options PORTAL # portal filesystem (still experimental)
options PROCFS
#options UMAPFS
options UNION
# GNU uses setuid scripts
+options SETUIDSCRIPTS
options GATEWAY
options INET
diff --git a/sys/arch/hp300/conf/GENERIC b/sys/arch/hp300/conf/GENERIC
index b0c61cc733d..47138c043a0 100644
--- a/sys/arch/hp300/conf/GENERIC
+++ b/sys/arch/hp300/conf/GENERIC
@@ -26,6 +26,7 @@ options "COMPAT_43" # compatibility with 4.3BSD interfaces
options "COMPAT_44" # compatibility with 4.4BSD binaries
options "COMPAT_09" # compatibility with NetBSD 0.9
options "COMPAT_10" # compatibility with NetBSD 1.0
+options "COMPAT_M68K4K"
options SYSVSHM # System V-style shared memory
options SYSVSEM # System V-style semaphores
options SYSVMSG # System V-style message queues
diff --git a/sys/arch/hp300/conf/Makefile.hp300 b/sys/arch/hp300/conf/Makefile.hp300
index 36cfc3ce640..4456e890319 100644
--- a/sys/arch/hp300/conf/Makefile.hp300
+++ b/sys/arch/hp300/conf/Makefile.hp300
@@ -1,5 +1,4 @@
-# $OpenBSD: Makefile.hp300,v 1.6 1996/04/25 06:36:20 mickey Exp $
-# $NetBSD: Makefile.hp300,v 1.38 1996/03/01 17:03:17 scottr Exp $
+# $NetBSD: Makefile.hp300,v 1.39 1996/05/11 16:12:02 mycroft Exp $
# Makefile for NetBSD
#
@@ -150,7 +149,7 @@ links:
SRCS= ${HP300}/hp300/locore.s \
param.c ioconf.c ${CFILES} ${SFILES}
-depend: .depend
+depend:: .depend
.depend: ${SRCS} assym.h param.c
mkdep ${AFLAGS} ${CPPFLAGS} ${HP300}/hp300/locore.s
mkdep -a ${CFLAGS} ${CPPFLAGS} param.c ioconf.c ${CFILES}
@@ -164,9 +163,7 @@ depend: .depend
autoconf.o conf.o: Makefile
# depend on network or filesystem configuration
-uipc_domain.o uipc_proto.o vfs_conf.o: Makefile
-if_tun.o if_loop.o if_ethersubr.o: Makefile
-in_proto.o: Makefile
+uipc_proto.o vfs_conf.o: Makefile
# depend on maxusers
genassym.o machdep.o: Makefile
diff --git a/sys/arch/hp300/conf/files.hp300.oldconf b/sys/arch/hp300/conf/files.hp300.oldconf
index a393f505edd..e2d1f5f1a27 100644
--- a/sys/arch/hp300/conf/files.hp300.oldconf
+++ b/sys/arch/hp300/conf/files.hp300.oldconf
@@ -1,4 +1,4 @@
-# $NetBSD: files.hp300.oldconf,v 1.25 1996/02/24 00:54:55 thorpej Exp $
+# $NetBSD: files.hp300.oldconf,v 1.26.4.1 1996/06/10 06:51:58 thorpej Exp $
#
arch/hp300/hp300/autoconf.c standard
arch/hp300/hp300/clock.c standard
@@ -24,6 +24,7 @@ arch/hp300/dev/grf_rb.c optional grf needs-count # XXX? d-d?
arch/hp300/dev/grf_tc.c optional grf needs-count # XXX? d-d?
arch/hp300/dev/dcm.c optional dcm device-driver
arch/hp300/dev/if_le.c optional le device-driver
+dev/ic/am7990.c optional le device-driver
arch/hp300/dev/dma.c standard
arch/hp300/dev/hpib.c optional hpib
arch/hp300/dev/fhpib.c optional hpib device-driver
@@ -34,7 +35,7 @@ arch/hp300/dev/ppi.c optional ppi device-driver
arch/hp300/dev/rd.c optional rd needs-count # XXX? d-d?
arch/hp300/dev/rd_compat.c optional rd compat_nolabel
arch/hp300/dev/scsi.c optional scsi device-driver
-arch/hp300/dev/ac.c optional ac
+arch/hp300/dev/ac.c optional ac needs-count # XXX? d-d?
arch/hp300/dev/sd.c optional sd needs-count # XXX? d-d?
arch/hp300/dev/sd_compat.c optional sd compat_nolabel
arch/hp300/dev/st.c optional st needs-count # XXX? d-d?
diff --git a/sys/arch/hp300/dev/dca.c b/sys/arch/hp300/dev/dca.c
index 1eeaf465165..f81f6a60d58 100644
--- a/sys/arch/hp300/dev/dca.c
+++ b/sys/arch/hp300/dev/dca.c
@@ -1,4 +1,4 @@
-/* $NetBSD: dca.c,v 1.23 1996/03/03 16:48:52 thorpej Exp $ */
+/* $NetBSD: dca.c,v 1.23.4.1 1996/06/06 15:39:09 thorpej Exp $ */
/*
* Copyright (c) 1995, 1996 Jason R. Thorpe. All rights reserved.
@@ -267,9 +267,10 @@ dcaopen(dev, flag, mode, p)
dca = sc->sc_dca;
- if (sc->sc_tty == NULL)
+ if (sc->sc_tty == NULL) {
tp = sc->sc_tty = ttymalloc();
- else
+ tty_attach(tp);
+ } else
tp = sc->sc_tty;
tp->t_oproc = dcastart;
tp->t_param = dcaparam;
@@ -375,6 +376,7 @@ dcaclose(dev, flag, mode, p)
splx(s);
ttyclose(tp);
#if 0
+ tty_detach(tp);
ttyfree(tp);
sc->sc_tty = NULL;
#endif
diff --git a/sys/arch/hp300/dev/dcm.c b/sys/arch/hp300/dev/dcm.c
index b435a80ccb5..a124effeb8f 100644
--- a/sys/arch/hp300/dev/dcm.c
+++ b/sys/arch/hp300/dev/dcm.c
@@ -1,4 +1,4 @@
-/* $NetBSD: dcm.c,v 1.26 1996/03/03 16:48:54 thorpej Exp $ */
+/* $NetBSD: dcm.c,v 1.27.4.1 1996/06/06 15:39:11 thorpej Exp $ */
/*
* Copyright (c) 1995, 1996 Jason R. Thorpe. All rights reserved.
@@ -284,11 +284,11 @@ dcmmatch(hd)
while ((dcm->dcm_ic & IC_IR) == 0)
if (++timo == 20000)
return (0);
- DELAY(50000) /* XXX why is this needed ???? */
+ DELAY(50000); /* XXX why is this needed ???? */
while ((dcm->dcm_iir & IIR_SELFT) == 0)
if (++timo == 400000)
return (0);
- DELAY(50000) /* XXX why is this needed ???? */
+ DELAY(50000); /* XXX why is this needed ???? */
if (dcm->dcm_stcon != ST_OK) {
if (hd->hp_args->hw_sc != conscode)
printf("dcm%d: self test failed: %x\n",
@@ -418,9 +418,10 @@ dcmopen(dev, flag, mode, p)
if ((sc->sc_flags & DCM_ACTIVE) == 0)
return (ENXIO);
- if (sc->sc_tty[port] == NULL)
+ if (sc->sc_tty[port] == NULL) {
tp = sc->sc_tty[port] = ttymalloc();
- else
+ tty_attach(tp);
+ } else
tp = sc->sc_tty[port];
tp->t_oproc = dcmstart;
@@ -530,6 +531,7 @@ dcmclose(dev, flag, mode, p)
splx(s);
ttyclose(tp);
#if 0
+ tty_detach(tp);
ttyfree(tp);
sc->sc_tty[port] == NULL;
#endif
diff --git a/sys/arch/hp300/dev/fhpib.c b/sys/arch/hp300/dev/fhpib.c
index a4a08f84984..1a73c0462a5 100644
--- a/sys/arch/hp300/dev/fhpib.c
+++ b/sys/arch/hp300/dev/fhpib.c
@@ -1,4 +1,4 @@
-/* $NetBSD: fhpib.c,v 1.9 1996/02/14 02:44:20 thorpej Exp $ */
+/* $NetBSD: fhpib.c,v 1.11 1996/05/18 23:56:59 thorpej Exp $ */
/*
* Copyright (c) 1982, 1990, 1993
diff --git a/sys/arch/hp300/dev/hil.c b/sys/arch/hp300/dev/hil.c
index bf93d1eec0a..3b41473254b 100644
--- a/sys/arch/hp300/dev/hil.c
+++ b/sys/arch/hp300/dev/hil.c
@@ -246,7 +246,7 @@ hilclose(dev, flags, mode, p)
u_char device = HILUNIT(dev);
char mask, lpctrl;
int s;
- extern struct emul emul_native;
+ extern struct emul emul_netbsd;
#ifdef DEBUG
if (hildebug & HDB_FOLLOW)
@@ -257,7 +257,7 @@ hilclose(dev, flags, mode, p)
if (device && (dptr->hd_flags & HIL_PSEUDO))
return (0);
- if (p && p->p_emul == &emul_native) {
+ if (p && p->p_emul == &emul_netbsd) {
/*
* If this is the loop device,
* free up all queues belonging to this process.
diff --git a/sys/arch/hp300/dev/hpib.c b/sys/arch/hp300/dev/hpib.c
index d6da6ed7293..4d39539f24f 100644
--- a/sys/arch/hp300/dev/hpib.c
+++ b/sys/arch/hp300/dev/hpib.c
@@ -1,4 +1,4 @@
-/* $NetBSD: hpib.c,v 1.8 1996/02/14 02:44:28 thorpej Exp $ */
+/* $NetBSD: hpib.c,v 1.9 1996/05/17 15:09:39 thorpej Exp $ */
/*
* Copyright (c) 1982, 1990, 1993
@@ -187,7 +187,7 @@ hpibid(unit, slave)
* take forever on slow CPUs.
*/
ohpibtimeout = hpibtimeout;
- hpibtimeout = hpibidtimeout * cpuspeed;
+ hpibtimeout = hpibidtimeout * (cpuspeed / 8);
if (hpibrecv(unit, 31, slave, &id, 2) != 2)
id = 0;
hpibtimeout = ohpibtimeout;
diff --git a/sys/arch/hp300/dev/if_le.c b/sys/arch/hp300/dev/if_le.c
index a4978ec7d8e..7c17d759f20 100644
--- a/sys/arch/hp300/dev/if_le.c
+++ b/sys/arch/hp300/dev/if_le.c
@@ -1,4 +1,4 @@
-/* $NetBSD: if_le.c,v 1.29 1996/04/22 02:30:45 christos Exp $ */
+/* $NetBSD: if_le.c,v 1.31 1996/05/09 21:11:47 thorpej Exp $ */
/*-
* Copyright (c) 1995 Charles M. Hannum. All rights reserved.
@@ -65,22 +65,19 @@
#endif
#include <hp300/dev/device.h>
-#include <hp300/dev/if_lereg.h>
-#include <hp300/dev/if_levar.h>
+
#include <dev/ic/am7990reg.h>
-#define LE_NEED_BUF_CONTIG
#include <dev/ic/am7990var.h>
+#include <hp300/dev/if_lereg.h>
+#include <hp300/dev/if_levar.h>
+
#include "le.h"
struct le_softc le_softc[NLE];
-#define LE_SOFTC(unit) &le_softc[unit]
-#define LE_DELAY(x) DELAY(x)
-
int lematch __P((struct hp_device *));
void leattach __P((struct hp_device *));
int leintr __P((void *));
-static int hp300_leintr __P((void *)); /* machine-dependent wrapper */
struct driver ledriver = {
lematch, leattach, "le",
@@ -89,19 +86,16 @@ struct driver ledriver = {
/* offsets for: ID, REGS, MEM, NVRAM */
int lestd[] = { 0, 0x4000, 0x8000, 0xC008 };
-integrate void
-lehwinit(sc)
- struct le_softc *sc;
-{
-}
+hide void lewrcsr __P((struct am7990_softc *, u_int16_t, u_int16_t));
+hide u_int16_t lerdcsr __P((struct am7990_softc *, u_int16_t));
-integrate void
+hide void
lewrcsr(sc, port, val)
- struct le_softc *sc;
+ struct am7990_softc *sc;
u_int16_t port, val;
{
- register struct lereg0 *ler0 = sc->sc_r0;
- register struct lereg1 *ler1 = sc->sc_r1;
+ register struct lereg0 *ler0 = ((struct le_softc *)sc)->sc_r0;
+ register struct lereg1 *ler1 = ((struct le_softc *)sc)->sc_r1;
do {
ler1->ler1_rap = port;
@@ -111,13 +105,13 @@ lewrcsr(sc, port, val)
} while ((ler0->ler0_status & LE_ACK) == 0);
}
-integrate u_int16_t
+hide u_int16_t
lerdcsr(sc, port)
- struct le_softc *sc;
+ struct am7990_softc *sc;
u_int16_t port;
{
- register struct lereg0 *ler0 = sc->sc_r0;
- register struct lereg1 *ler1 = sc->sc_r1;
+ register struct lereg0 *ler0 = ((struct le_softc *)sc)->sc_r0;
+ register struct lereg1 *ler1 = ((struct le_softc *)sc)->sc_r1;
u_int16_t val;
do {
@@ -134,14 +128,14 @@ lematch(hd)
struct hp_device *hd;
{
register struct lereg0 *ler0;
- struct le_softc *sc = LE_SOFTC(hd->hp_unit);
+ struct le_softc *lesc = &le_softc[hd->hp_unit];
ler0 = (struct lereg0 *)(lestd[0] + (int)hd->hp_addr);
if (ler0->ler0_id != LEID)
return (0);
hd->hp_ipl = LE_IPL(ler0->ler0_status);
- sc->sc_hd = hd;
+ lesc->sc_hd = hd;
return (1);
}
@@ -156,19 +150,20 @@ leattach(hd)
struct hp_device *hd;
{
register struct lereg0 *ler0;
- struct le_softc *sc = LE_SOFTC(hd->hp_unit);
+ struct le_softc *lesc = &le_softc[hd->hp_unit];
+ struct am7990_softc *sc = &lesc->sc_am7990;
char *cp;
int i;
- ler0 = sc->sc_r0 = (struct lereg0 *)(lestd[0] + (int)hd->hp_addr);
+ ler0 = lesc->sc_r0 = (struct lereg0 *)(lestd[0] + (int)hd->hp_addr);
ler0->ler0_id = 0xFF;
DELAY(100);
/* XXXX kluge for now */
sc->sc_dev.dv_unit = hd->hp_unit;
- sprintf(sc->sc_dev.dv_xname, "%s%d", ledriver.d_name, hd->hp_unit);
+ sprintf(sc->sc_dev.dv_xname, "%s%d", le_cd.cd_name, hd->hp_unit);
- sc->sc_r1 = (struct lereg1 *)(lestd[1] + (int)hd->hp_addr);
+ lesc->sc_r1 = (struct lereg1 *)(lestd[1] + (int)hd->hp_addr);
sc->sc_mem = (void *)(lestd[2] + (int)hd->hp_addr);
sc->sc_conf3 = LE_C3_BSWP;
sc->sc_addr = 0;
@@ -191,19 +186,22 @@ leattach(hd)
sc->sc_copyfrombuf = am7990_copyfrombuf_contig;
sc->sc_zerobuf = am7990_zerobuf_contig;
- sc->sc_arpcom.ac_if.if_name = ledriver.d_name;
- leconfig(sc);
+ sc->sc_rdcsr = lerdcsr;
+ sc->sc_wrcsr = lewrcsr;
+ sc->sc_hwinit = NULL;
+
+ am7990_config(sc);
/* Establish the interrupt handler. */
- isrlink(hp300_leintr, sc, hd->hp_ipl, ISRPRI_NET);
+ isrlink(leintr, sc, hd->hp_ipl, ISRPRI_NET);
ler0->ler0_status = LE_IE;
}
-static int
-hp300_leintr(arg)
+int
+leintr(arg)
void *arg;
{
- struct le_softc *sc = arg;
+ struct am7990_softc *sc = arg;
u_int16_t isr;
#ifdef USELEDS
@@ -221,7 +219,5 @@ hp300_leintr(arg)
ledcontrol(0, 0, LED_LANXMT);
#endif /* USELEDS */
- return (leintr(sc));
+ return (am7990_intr(sc));
}
-
-#include <dev/ic/am7990.c>
diff --git a/sys/arch/hp300/dev/if_levar.h b/sys/arch/hp300/dev/if_levar.h
index fd77b37ebc3..40d64ab8e1f 100644
--- a/sys/arch/hp300/dev/if_levar.h
+++ b/sys/arch/hp300/dev/if_levar.h
@@ -1,4 +1,4 @@
-/* $NetBSD: if_levar.h,v 1.1 1995/12/10 00:49:37 mycroft Exp $ */
+/* $NetBSD: if_levar.h,v 1.4 1996/05/07 00:58:00 thorpej Exp $ */
/*-
* Copyright (c) 1995 Charles M. Hannum. All rights reserved.
@@ -47,36 +47,7 @@
* This structure contains the output queue for the interface, its address, ...
*/
struct le_softc {
- struct device sc_dev; /* base structure */
- struct arpcom sc_arpcom; /* Ethernet common part */
-
- void (*sc_copytodesc)(); /* Copy to descriptor */
- void (*sc_copyfromdesc)(); /* Copy from descriptor */
-
- void (*sc_copytobuf)(); /* Copy to buffer */
- void (*sc_copyfrombuf)(); /* Copy from buffer */
- void (*sc_zerobuf)(); /* and Zero bytes in buffer */
-
- u_int16_t sc_conf3; /* CSR3 value */
-
- void *sc_mem; /* base address of RAM -- CPU's view */
- u_long sc_addr; /* base address of RAM -- LANCE's view */
- u_long sc_memsize; /* size of RAM */
-
- int sc_nrbuf; /* number of receive buffers */
- int sc_ntbuf; /* number of transmit buffers */
- int sc_last_rd;
- int sc_first_td, sc_last_td, sc_no_td;
-
- int sc_initaddr;
- int sc_rmdaddr;
- int sc_tmdaddr;
- int sc_rbufaddr;
- int sc_tbufaddr;
-
-#ifdef LEDEBUG
- int sc_debug;
-#endif
+ struct am7990_softc sc_am7990; /* glue to MI code */
struct hp_device *sc_hd;
struct isr sc_isr;
diff --git a/sys/arch/hp300/dev/ite.c b/sys/arch/hp300/dev/ite.c
index 150ea8dccc0..a2416c6d8ca 100644
--- a/sys/arch/hp300/dev/ite.c
+++ b/sys/arch/hp300/dev/ite.c
@@ -1,4 +1,4 @@
-/* $NetBSD: ite.c,v 1.29 1996/02/24 00:55:20 thorpej Exp $ */
+/* $NetBSD: ite.c,v 1.29.4.1 1996/06/06 15:39:12 thorpej Exp $ */
/*
* Copyright (c) 1996 Jason R. Thorpe. All rights reserved.
@@ -295,9 +295,10 @@ iteopen(dev, mode, devtype, p)
int error;
int first = 0;
- if (ip->tty == NULL)
- tp = ip->tty = ttymalloc();
- else
+ if (ip->tty == NULL) {
+ tp = ip->tty = ttymalloc();
+ tty_attach(tp);
+ } else
tp = ip->tty;
if ((tp->t_state&(TS_ISOPEN|TS_XCLUDE)) == (TS_ISOPEN|TS_XCLUDE)
&& p->p_ucred->cr_uid != 0)
@@ -345,6 +346,7 @@ iteclose(dev, flag, mode, p)
ttyclose(tp);
iteoff(ip, 0);
#if 0
+ tty_detach(tp);
ttyfree(tp);
ip->tty = (struct tty *)0;
#endif
diff --git a/sys/arch/hp300/dev/nhpib.c b/sys/arch/hp300/dev/nhpib.c
index 481419347fa..e1e7f7c9c70 100644
--- a/sys/arch/hp300/dev/nhpib.c
+++ b/sys/arch/hp300/dev/nhpib.c
@@ -1,4 +1,4 @@
-/* $NetBSD: nhpib.c,v 1.9 1996/02/14 02:44:45 thorpej Exp $ */
+/* $NetBSD: nhpib.c,v 1.11 1996/05/18 23:57:01 thorpej Exp $ */
/*
* Copyright (c) 1982, 1990, 1993
diff --git a/sys/arch/hp300/dev/rd.c b/sys/arch/hp300/dev/rd.c
index 74dce8628c0..8e42519d2f5 100644
--- a/sys/arch/hp300/dev/rd.c
+++ b/sys/arch/hp300/dev/rd.c
@@ -1,4 +1,4 @@
-/* $NetBSD: rd.c,v 1.20 1996/02/14 02:44:54 thorpej Exp $ */
+/* $NetBSD: rd.c,v 1.20.4.1 1996/06/06 16:22:01 thorpej Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@@ -52,7 +52,6 @@
#include <sys/systm.h>
#include <sys/buf.h>
#include <sys/stat.h>
-#include <sys/dkstat.h> /* XXX */
#include <sys/disklabel.h>
#include <sys/disk.h>
#include <sys/ioctl.h>
@@ -333,9 +332,6 @@ rdident(rs, hd, verbose)
name[i] = (n & 0xf) + '0';
n >>= 4;
}
- /* use drive characteristics to calculate xfer rate */
- rs->sc_wpms = 1000000 * (desc->d_sectsize/2) /
- desc->d_blocktime;
}
#ifdef DEBUG
if (rddebug & RDB_IDENT) {
@@ -514,15 +510,6 @@ rdopen(dev, flags, mode, p)
if (error)
return(error);
}
- if (rs->sc_hd->hp_dk >= 0) {
- /* guess at xfer rate based on 3600 rpm (60 rps) */
- if (rs->sc_wpms == 0)
- rs->sc_wpms = 60 * rs->sc_dkdev.dk_label->d_nsectors
- * DEV_BSIZE / 2;
-
- /* XXX Support old-style instrumentation for now. */
- dk_wpms[rs->sc_hd->hp_dk] = rs->sc_wpms;
- }
mask = 1 << rdpart(dev);
if (mode == S_IFCHR)
@@ -711,12 +698,6 @@ again:
if (hpibsend(hp->hp_ctlr, hp->hp_slave, C_CMD, &rs->sc_ioc.c_unit,
sizeof(rs->sc_ioc)-2) == sizeof(rs->sc_ioc)-2) {
- /* XXX Support old-style instrumentation for now. */
- if (hp->hp_dk >= 0) {
- dk_busy |= 1 << hp->hp_dk;
- dk_seek[hp->hp_dk]++;
- }
-
/* Instrumentation. */
disk_busy(&rs->sc_dkdev);
rs->sc_dkdev.dk_seek++;
@@ -769,13 +750,6 @@ rdgo(unit)
rw = bp->b_flags & B_READ;
- /* XXX Support old-style instrumentation for now. */
- if (hp->hp_dk >= 0) {
- dk_busy |= 1 << hp->hp_dk;
- dk_xfer[hp->hp_dk]++;
- dk_wds[hp->hp_dk] += rs->sc_resid >> 6;
- }
-
/* Instrumentation. */
disk_busy(&rs->sc_dkdev);
@@ -806,10 +780,6 @@ rdintr(arg)
return;
}
#endif
- /* XXX Support old-style instrumentation for now. */
- if (hp->hp_dk >= 0)
- dk_busy &= ~(1 << hp->hp_dk);
-
disk_unbusy(&rs->sc_dkdev, (bp->b_bcount - bp->b_resid));
if (rs->sc_flags & RDF_SEEK) {
@@ -827,10 +797,6 @@ rdintr(arg)
rdstats[unit].rdpollwaits++;
#endif
- /* XXX Support old-style instrumentation for now. */
- if (hp->hp_dk >= 0)
- dk_busy |= 1 << hp->hp_dk;
-
/* Instrumentation. */
disk_busy(&rs->sc_dkdev);
rs->sc_flags |= RDF_SWAIT;
diff --git a/sys/arch/hp300/dev/rdvar.h b/sys/arch/hp300/dev/rdvar.h
index 97c21aa9b35..d7bd8637184 100644
--- a/sys/arch/hp300/dev/rdvar.h
+++ b/sys/arch/hp300/dev/rdvar.h
@@ -1,4 +1,4 @@
-/* $NetBSD: rdvar.h,v 1.4 1996/01/07 22:02:16 thorpej Exp $ */
+/* $NetBSD: rdvar.h,v 1.4.4.1 1996/06/06 16:22:03 thorpej Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@@ -61,7 +61,6 @@ struct rd_softc {
short sc_punit;
char *sc_addr;
int sc_resid;
- u_int sc_wpms;
struct rd_describe sc_rddesc;
struct devqueue sc_dq;
struct rd_iocmd sc_ioc;
diff --git a/sys/arch/hp300/dev/scsi.c b/sys/arch/hp300/dev/scsi.c
index 8f21b3b9846..942e4a51fe6 100644
--- a/sys/arch/hp300/dev/scsi.c
+++ b/sys/arch/hp300/dev/scsi.c
@@ -1,4 +1,4 @@
-/* $NetBSD: scsi.c,v 1.8 1996/02/14 02:44:59 thorpej Exp $ */
+/* $NetBSD: scsi.c,v 1.10 1996/05/18 23:57:03 thorpej Exp $ */
/*
* Copyright (c) 1990, 1993
@@ -64,8 +64,8 @@
* SCSI delays
* In u-seconds, primarily for state changes on the SPC.
*/
-#define SCSI_CMD_WAIT 1000 /* wait per step of 'immediate' cmds */
-#define SCSI_DATA_WAIT 1000 /* wait per data in/out step */
+#define SCSI_CMD_WAIT 10000 /* wait per step of 'immediate' cmds */
+#define SCSI_DATA_WAIT 10000 /* wait per data in/out step */
#define SCSI_INIT_WAIT 50000 /* wait per step (both) during init */
extern void isrlink();
@@ -112,7 +112,8 @@ u_int sgo_wait[MAXWAIT+2];
#define b_cylin b_resid
static void
-scsiabort(hs, hd, where)
+scsiabort(target, hs, hd, where)
+ int target;
register struct scsi_softc *hs;
volatile register struct scsidevice *hd;
char *where;
@@ -122,9 +123,11 @@ scsiabort(hs, hd, where)
int startlen; /* XXX - kludge till I understand whats *supposed* to happen */
u_char junk;
- printf("%s: abort from %s: phase=0x%x, ssts=0x%x, ints=0x%x\n",
- hs->sc_hc->hp_xname, where, hd->scsi_psns, hd->scsi_ssts,
- hd->scsi_ints);
+ printf("%s: ", hs->sc_hc->hp_xname);
+ if (target != -1)
+ printf("targ %d ", target);
+ printf("abort from %s: phase=0x%x, ssts=0x%x, ints=0x%x\n",
+ where, hd->scsi_psns, hd->scsi_ssts, hd->scsi_ints);
hd->scsi_ints = hd->scsi_ints;
hd->scsi_csr = 0;
@@ -183,7 +186,7 @@ out:
if (! ((junk = hd->scsi_ints) & INTS_RESEL)) {
hd->scsi_sctl |= SCTL_CTRLRST;
- DELAY(1);
+ DELAY(2);
hd->scsi_sctl &=~ SCTL_CTRLRST;
hd->scsi_hconf = 0;
hd->scsi_ints = hd->scsi_ints;
@@ -301,7 +304,7 @@ scsiattach(hc)
* XXX scale initialization wait according to CPU speed.
* Should we do this for all wait? Should we do this at all?
*/
- scsi_init_wait *= cpuspeed;
+ scsi_init_wait *= (cpuspeed / 8);
}
void
@@ -314,7 +317,7 @@ scsireset(unit)
u_int i;
if (hs->sc_flags & SCSI_ALIVE)
- scsiabort(hs, hd, "reset");
+ scsiabort(-1, hs, hd, "reset");
hd->scsi_id = 0xFF;
DELAY(100);
@@ -740,7 +743,7 @@ scsiicmd(hs, target, cbuf, clen, buf, len, xferphase)
}
}
abort:
- scsiabort(hs, hd, "icmd");
+ scsiabort(target, hs, hd, "icmd");
out:
return (hs->sc_stat[0]);
}
@@ -786,7 +789,7 @@ finishxfer(hs, hd, target)
}
hd->scsi_scmd |= SCMD_PROG_XFR;
hd->scsi_sctl |= SCTL_CTRLRST;
- DELAY(1);
+ DELAY(2);
hd->scsi_sctl &=~ SCTL_CTRLRST;
hd->scsi_hconf = 0;
/*
@@ -838,7 +841,7 @@ finishxfer(hs, hd, target)
return;
}
abort:
- scsiabort(hs, hd, "finishxfer");
+ scsiabort(target, hs, hd, "finishxfer");
hs->sc_stat[0] = 0xfe;
}
@@ -1135,7 +1138,7 @@ out:
hs->sc_flags |= SCSI_IO;
return (0);
abort:
- scsiabort(hs, hd, "go");
+ scsiabort(slave, hs, hd, "go");
hs->sc_flags &=~ SCSI_HAVEDMA;
dmafree(&hs->sc_dq);
return (1);
@@ -1194,7 +1197,7 @@ scsiintr(arg)
hd->scsi_ints = ints;
hd->scsi_csr = 0;
scsierror(hs, hd, ints);
- scsiabort(hs, hd, "intr");
+ scsiabort(dq->dq_slave, hs, hd, "intr");
if (hs->sc_flags & SCSI_IO) {
hs->sc_flags &=~ (SCSI_IO|SCSI_HAVEDMA);
dmafree(&hs->sc_dq);
diff --git a/sys/arch/hp300/dev/sd.c b/sys/arch/hp300/dev/sd.c
index 6260683c6be..75121b1b6dc 100644
--- a/sys/arch/hp300/dev/sd.c
+++ b/sys/arch/hp300/dev/sd.c
@@ -1,4 +1,4 @@
-/* $NetBSD: sd.c,v 1.22 1996/02/14 02:45:05 thorpej Exp $ */
+/* $NetBSD: sd.c,v 1.22.4.1 1996/06/06 16:22:04 thorpej Exp $ */
/*
* Copyright (c) 1990, 1993
@@ -48,7 +48,6 @@
#include <sys/systm.h>
#include <sys/buf.h>
#include <sys/stat.h>
-#include <sys/dkstat.h> /* XXX */
#include <sys/disklabel.h>
#include <sys/disk.h>
#include <sys/malloc.h>
@@ -313,7 +312,6 @@ sdident(sc, hd, verbose)
printf("drive empty\n");
}
- sc->sc_wpms = 32 * (60 * DEV_BSIZE / 2); /* XXX */
scsi_delay(0);
return(inqbuf.type);
failed:
@@ -606,10 +604,6 @@ sdopen(dev, flags, mode, p)
return(error);
}
- /* XXX Support old-style instrumentation for now. */
- if (sc->sc_hd->hp_dk >= 0)
- dk_wpms[sc->sc_hd->hp_dk] = sc->sc_wpms;
-
mask = 1 << sdpart(dev);
if (mode == S_IFCHR)
sc->sc_dkdev.dk_copenmask |= mask;
@@ -999,14 +993,6 @@ sdgo(unit)
#endif
if (scsigo(hp->hp_ctlr, hp->hp_slave, sc->sc_punit,
bp, cmd, pad) == 0) {
- /* XXX Support old-style instrumentation for now. */
- if (hp->hp_dk >= 0) {
- dk_busy |= 1 << hp->hp_dk;
- ++dk_seek[hp->hp_dk];
- ++dk_xfer[hp->hp_dk];
- dk_wds[hp->hp_dk] += bp->b_bcount >> 6;
- }
-
/* Instrumentation. */
disk_busy(&sc->sc_dkdev);
sc->sc_dkdev.dk_seek++; /* XXX */
@@ -1041,10 +1027,6 @@ sdintr(arg, stat)
return;
}
- /* XXX Support old-style instrumentation for now. */
- if (hp->hp_dk >= 0)
- dk_busy &=~ (1 << hp->hp_dk);
-
disk_unbusy(&sc->sc_dkdev, (bp->b_bcount - bp->b_resid));
if (stat) {
diff --git a/sys/arch/hp300/dev/sdvar.h b/sys/arch/hp300/dev/sdvar.h
index e5933f53a8d..fbdf0025bb7 100644
--- a/sys/arch/hp300/dev/sdvar.h
+++ b/sys/arch/hp300/dev/sdvar.h
@@ -1,4 +1,4 @@
-/* $NetBSD: sdvar.h,v 1.4 1996/01/07 22:02:21 thorpej Exp $ */
+/* $NetBSD: sdvar.h,v 1.4.4.1 1996/06/06 16:22:06 thorpej Exp $ */
/*
* Copyright (c) 1990, 1993
@@ -52,7 +52,6 @@ struct sd_softc {
int sc_blksize; /* device block size in bytes */
u_int sc_heads; /* number of heads (tracks) */
u_int sc_cyls; /* number of cylinders */
- u_int sc_wpms; /* average xfer rate in 16 bit wds/sec. */
};
/* sc_flags values */
diff --git a/sys/arch/hp300/dev/st.c b/sys/arch/hp300/dev/st.c
index cf38400ab1e..f73e4c886dc 100644
--- a/sys/arch/hp300/dev/st.c
+++ b/sys/arch/hp300/dev/st.c
@@ -1,4 +1,4 @@
-/* $NetBSD: st.c,v 1.14 1996/02/14 02:45:12 thorpej Exp $ */
+/* $NetBSD: st.c,v 1.14.4.1 1996/06/10 06:45:33 thorpej Exp $ */
/*
* Copyright (c) 1990 University of Utah.
@@ -353,7 +353,8 @@ st_inqbuf.inqbuf.qual, st_inqbuf.inqbuf.version);
sc->sc_datalen[CMD_INQUIRY] = 36;
sc->sc_datalen[CMD_MODE_SELECT] = 12;
sc->sc_datalen[CMD_MODE_SENSE] = 12;
- } else if (bcmp("Python 25501", product, 12) == 0) {
+ } else if (bcmp("Python 25501", product, 12) == 0 ||
+ bcmp("Python 28849", product, 12) == 0) {
sc->sc_tapeid = MT_ISPYTHON;
sc->sc_datalen[CMD_REQUEST_SENSE] = 14;
sc->sc_datalen[CMD_INQUIRY] = 36;
diff --git a/sys/arch/hp300/hp300/autoconf.c b/sys/arch/hp300/hp300/autoconf.c
index e63e8d14670..2c063e27e86 100644
--- a/sys/arch/hp300/hp300/autoconf.c
+++ b/sys/arch/hp300/hp300/autoconf.c
@@ -1,4 +1,4 @@
-/* $NetBSD: autoconf.c,v 1.18 1996/04/07 18:21:08 thorpej Exp $ */
+/* $NetBSD: autoconf.c,v 1.20 1996/05/18 01:39:57 thorpej Exp $ */
/*
* Copyright (c) 1996 Jason R. Thorpe. All rights reserved.
@@ -59,6 +59,7 @@
#include <sys/conf.h>
#include <sys/dmap.h>
#include <sys/reboot.h>
+#include <sys/device.h>
#include <dev/cons.h>
@@ -79,7 +80,6 @@
* the machine.
*/
int cold; /* if 1, still working on cold-start */
-int cpuspeed = 0; /* relative cpu speed -- can be patched */
struct hp_hw sc_table[MAXCTLRS];
/* XXX must be allocated statically because of early console init */
@@ -92,6 +92,11 @@ extern char *extiobase;
int acdebug = 0;
#endif
+#ifndef NEWCONFIG /* XXX */
+struct devicelist alldevs;
+struct evcntlist allevents;
+#endif
+
/*
* Determine mass storage and memory configuration for a machine.
*/
@@ -1195,6 +1200,8 @@ setroot()
void
config_init()
{
- /* Stub, so kernel will link. */
+
+ TAILQ_INIT(&alldevs);
+ TAILQ_INIT(&allevents);
}
#endif
diff --git a/sys/arch/hp300/hp300/clock.c b/sys/arch/hp300/hp300/clock.c
index 5de1834f2d1..09615a6e7a7 100644
--- a/sys/arch/hp300/hp300/clock.c
+++ b/sys/arch/hp300/hp300/clock.c
@@ -1,4 +1,4 @@
-/* $NetBSD: clock.c,v 1.13 1994/12/29 03:48:38 mycroft Exp $ */
+/* $NetBSD: clock.c,v 1.14 1996/05/18 23:30:12 thorpej Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@@ -52,12 +52,13 @@
#include <sys/param.h>
#include <sys/kernel.h>
-#include <hp300/dev/hilreg.h>
-#include <hp300/hp300/clockreg.h>
#include <machine/psl.h>
#include <machine/cpu.h>
+#include <hp300/dev/hilreg.h>
+#include <hp300/hp300/clockreg.h>
+
#ifdef GPROF
#include <sys/gmon.h>
#endif
@@ -87,6 +88,8 @@ u_char bbc_registers[13];
u_char write_bbc_reg(), read_bbc_reg();
struct hil_dev *bbcaddr = NULL;
+void hp300_calibrate_delay __P((void));
+
/*
* Machine-dependent clock routines.
*
@@ -101,9 +104,80 @@ struct hil_dev *bbcaddr = NULL;
#define COUNTS_PER_SEC (1000000 / CLK_RESOLUTION)
/*
+ * Calibrate the delay constant, based on Chuck Cranor's
+ * mvme68k delay calibration algorithm.
+ */
+void
+hp300_calibrate_delay()
+{
+ extern int delay_divisor;
+ volatile struct clkreg *clk;
+ volatile u_char csr;
+ int intvl;
+
+ clkstd[0] = IIOV(0x5F8000); /* XXX yuck */
+ clk = (volatile struct clkreg *)clkstd[0];
+
+ /*
+ * Calibrate delay() using the 4 usec counter.
+ * We adjust delay_divisor until we get the result we want.
+ * We assume we've been called at splhigh().
+ */
+ for (delay_divisor = 140; delay_divisor > 1; delay_divisor--) {
+ /* Reset clock chip */
+ clk->clk_cr2 = CLK_CR1;
+ clk->clk_cr1 = CLK_RESET;
+
+ /*
+ * Prime the timer. We're looking for
+ * 10,000 usec (10ms). See interval comment
+ * above.
+ */
+ intvl = (10000 / CLK_RESOLUTION) - 1;
+ asm volatile(" movpw %0,%1@(5)" : : "d" (intvl), "a" (clk));
+
+ /* Enable the timer */
+ clk->clk_cr2 = CLK_CR1;
+ clk->clk_cr1 = CLK_IENAB;
+
+ delay(10000);
+
+ /* Timer1 interrupt flag high? */
+ csr = clk->clk_sr;
+ if (csr & CLK_INT1) {
+ /*
+ * Got it. Clear interrupt and get outta here.
+ */
+ asm volatile(" movpw %0@(5),%1" : :
+ "a" (clk), "d" (intvl));
+ break;
+ }
+
+ /*
+ * Nope. Poll for completion of the interval,
+ * clear interrupt, and try again.
+ */
+ do {
+ csr = clk->clk_sr;
+ } while ((csr & CLK_INT1) == 0);
+
+ asm volatile(" movpw %0@(5),%1" : : "a" (clk), "d" (intvl));
+ }
+
+ /*
+ * Sanity check the delay_divisor value. If we totally lost,
+ * assume a 50MHz CPU;
+ */
+ if (delay_divisor == 0)
+ delay_divisor = 2048 / 50;
+
+ /* Calculate CPU speed. */
+ cpuspeed = 2048 / delay_divisor;
+}
+
+/*
* Set up the real-time and statistics clocks. Leave stathz 0 only if
* no alternative timer is available.
- *
*/
cpu_initclocks()
{
diff --git a/sys/arch/hp300/hp300/conf.c b/sys/arch/hp300/hp300/conf.c
index 162a4d46c84..0485a2de7a4 100644
--- a/sys/arch/hp300/hp300/conf.c
+++ b/sys/arch/hp300/hp300/conf.c
@@ -45,6 +45,12 @@
int ttselect __P((dev_t, int, struct proc *));
+#ifndef LKM
+#define lkmenodev enodev
+#else
+int lkmenodev();
+#endif
+
#include "ct.h"
bdev_decl(ct);
#include "mt.h"
@@ -146,14 +152,6 @@ cdev_decl(tun);
#endif
cdev_decl(lkm);
-/* open, close, read, ioctl */
-cdev_decl(ipl);
-#ifdef IPFILTER
-#define NIPF 1
-#else
-#define NIPF 0
-#endif
-
struct cdevsw cdevsw[] =
{
cdev_cn_init(1,cn), /* 0: virtual console */
@@ -187,7 +185,6 @@ struct cdevsw cdevsw[] =
cdev_lkm_dummy(), /* 28 */
cdev_lkm_dummy(), /* 29 */
cdev_lkm_dummy(), /* 30 */
- cdev_gen_ipf(NIPF,ipl), /* 31: IP filter log */
};
int nchrdev = sizeof(cdevsw) / sizeof(cdevsw[0]);
diff --git a/sys/arch/hp300/hp300/genassym.c b/sys/arch/hp300/hp300/genassym.c
index 5cd135a972e..123869881cf 100644
--- a/sys/arch/hp300/hp300/genassym.c
+++ b/sys/arch/hp300/hp300/genassym.c
@@ -1,4 +1,4 @@
-/* $NetBSD: genassym.c,v 1.18 1996/02/02 23:53:20 mycroft Exp $ */
+/* $NetBSD: genassym.c,v 1.19 1996/05/17 15:20:55 thorpej Exp $ */
/*
* Copyright (c) 1982, 1990, 1993
@@ -119,6 +119,22 @@ main()
def("MMU_HP", MMU_HP);
def("MMU_68851", MMU_68851);
+ /* values for machineid */
+ def("HP_320", HP_320);
+ def("HP_330", HP_330);
+ def("HP_350", HP_350);
+ def("HP_360", HP_360);
+ def("HP_370", HP_370);
+ def("HP_340", HP_340);
+ def("HP_375", HP_375);
+ def("HP_380", HP_380);
+ def("HP_433", HP_433);
+
+ /* values for ectype */
+ def("EC_PHYS", EC_PHYS);
+ def("EC_NONE", EC_NONE);
+ def("EC_VIRT", EC_VIRT);
+
/* general constants */
def("UPAGES", UPAGES);
def("USPACE", USPACE);
diff --git a/sys/arch/hp300/hp300/locore.s b/sys/arch/hp300/hp300/locore.s
index 7b936b40c06..b6017a15ba0 100644
--- a/sys/arch/hp300/hp300/locore.s
+++ b/sys/arch/hp300/hp300/locore.s
@@ -1,4 +1,4 @@
-/* $NetBSD: locore.s,v 1.50 1996/02/14 02:56:56 thorpej Exp $ */
+/* $NetBSD: locore.s,v 1.53 1996/05/17 16:32:28 thorpej Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@@ -42,13 +42,20 @@
* @(#)locore.s 8.6 (Berkeley) 5/27/94
*/
-#include "assym.s"
-#include <hp300/hp300/vectors.s>
+#include "assym.h"
#define MMUADDR(ar) movl _MMUbase,ar
#define CLKADDR(ar) movl _CLKbase,ar
/*
+ * This is for kvm_mkdb, and should be the address of the beginning
+ * of the kernel text segment (not necessarily the same as kernbase).
+ */
+ .text
+ .globl _kernel_text
+_kernel_text:
+
+/*
* Temporary stack for a variety of purposes.
* Try and make this the first thing is the data segment so it
* is page aligned. Note that if we overflow here, we run into
@@ -58,6 +65,8 @@
.space NBPG
tmpstk:
+#include <hp300/hp300/vectors.s>
+
.text
/*
* This is where we wind up if the kernel jumps to location 0.
@@ -476,42 +485,8 @@ _trace:
moveq #T_TRACE,d0
jra fault
-/*
- * The sigreturn() syscall comes here. It requires special handling
- * because we must open a hole in the stack to fill in the (possibly much
- * larger) original stack frame.
- */
-sigreturn:
- lea sp@(-84),sp | leave enough space for largest frame
- movl sp@(84),sp@ | move up current 8 byte frame
- movl sp@(88),sp@(4)
- movl #84,sp@- | default: adjust by 84 bytes
- moveml #0xFFFF,sp@- | save user registers
- movl usp,a0 | save the user SP
- movl a0,sp@(FR_SP) | in the savearea
- movl #SYS_sigreturn,sp@- | push syscall number
- jbsr _syscall | handle it
- addql #4,sp | pop syscall#
- movl sp@(FR_SP),a0 | grab and restore
- movl a0,usp | user SP
- lea sp@(FR_HW),a1 | pointer to HW frame
- movw sp@(FR_ADJ),d0 | do we need to adjust the stack?
- jeq Lsigr1 | no, just continue
- moveq #92,d1 | total size
- subw d0,d1 | - hole size = frame size
- lea a1@(92),a0 | destination
- addw d1,a1 | source
- lsrw #1,d1 | convert to word count
- subqw #1,d1 | minus 1 for dbf
-Lsigrlp:
- movw a1@-,a0@- | copy a word
- dbf d1,Lsigrlp | continue
- movl a0,a1 | new HW frame base
-Lsigr1:
- movl a1,sp@(FR_SP) | new SP value
- moveml sp@+,#0x7FFF | restore user registers
- movl sp@,sp | and our SP
- jra rei | all done
+/* Use common m68k sigreturn */
+#include <m68k/m68k/sigreturn.s>
/*
* Interrupt handlers.
@@ -767,21 +742,21 @@ start:
movl a1@(MMUCMD),d0 | read it back
btst #7,d0 | still on?
jeq Lisa370 | no, must be a 370
- movl #5,a0@ | yes, must be a 340
+ movl #HP_340,a0@ | yes, must be a 340
jra Lstart1
Lnot370:
- movl #3,a0@ | type is at least a 360
+ movl #HP_360,a0@ | type is at least a 360
movl #0,a1@(MMUCMD) | clear magic cookie2
movl a1@(MMUCMD),d0 | read it back
btst #16,d0 | still on?
jeq Lstart1 | no, must be a 360
- movl #6,a0@ | yes, must be a 345/375
+ movl #HP_375,a0@ | yes, must be a 345/375
jra Lhaspac
Lisa370:
- movl #4,a0@ | set to 370
+ movl #HP_370,a0@ | set to 370
Lhaspac:
RELOC(_ectype, a0)
- movl #-1,a0@ | also has a physical address cache
+ movl #EC_PHYS,a0@ | also has a physical address cache
jra Lstart1
Lnot68030:
bset #31,d0 | data cache enable bit
@@ -794,16 +769,16 @@ Lnot68030:
RELOC(_mmutype, a0)
movl #MMU_68040,a0@ | with a 68040 MMU
RELOC(_ectype, a0)
- movl #0,a0@ | and no cache (for now XXX)
+ movl #EC_NONE,a0@ | and no cache (for now XXX)
RELOC(_machineid, a0)
movl a1@(MMUCMD),d0 | read MMU register
lsrl #8,d0 | get apparent ID
cmpb #6,d0 | id == 6?
jeq Lis33mhz | yes, we have a 433s
- movl #7,a0@ | no, we have a 380/425t
+ movl #HP_380,a0@ | no, we have a 380/425t
jra Lstart1
Lis33mhz:
- movl #8,a0@ | 433s (XXX 425s returns same ID, ugh!)
+ movl #HP_433,a0@ | 433s (XXX 425s returns same ID, ugh!)
jra Lstart1
Lis68020:
movl #1,a1@(MMUCMD) | a 68020, write HP MMU location
@@ -813,17 +788,21 @@ Lis68020:
RELOC(_mmutype, a0)
movl #MMU_68851,a0@ | no, we have PMMU
RELOC(_machineid, a0)
- movl #1,a0@ | and 330 CPU
+ movl #HP_330,a0@ | and 330 CPU
jra Lstart1
Lishpmmu:
RELOC(_ectype, a0) | 320 or 350
- movl #1,a0@ | both have a virtual address cache
+ movl #EC_VIRT,a0@ | both have a virtual address cache
movl #0x80,a1@(MMUCMD) | set magic cookie
movl a1@(MMUCMD),d0 | read it back
btst #7,d0 | cookie still on?
- jeq Lstart1 | no, just a 320
+ jeq Lis320 | no, just a 320
RELOC(_machineid, a0)
- movl #2,a0@ | yes, a 350
+ movl #HP_350,a0@ | yes, a 350
+ jra Lstart1
+Lis320:
+ RELOC(_machineid, a0)
+ movl #HP_320,a0@
Lstart1:
movl #0,a1@(MMUCMD) | clear out MMU again
@@ -971,7 +950,10 @@ Lfinish:
orl #MMU_CEN,a0@(MMUCMD) | turn on external cache
Lnocache0:
/* final setup for C code */
+ movl #_vectab,d0 | set Vector Base Register
+ movc d0,vbr
jbsr _isrinit | be ready for stray ints
+ jbsr _hp300_calibrate_delay | calibrate delay
movw #PSL_LOWIPL,sr | lower SPL
movl d7,_boothowto | save reboot flags
movl d6,_bootdev | and boot device
@@ -1848,6 +1830,24 @@ ENTRY(_remque)
movw d0,sr
rts
+/*
+ * _delay(u_int N)
+ *
+ * Delay for at least (N/256) microsecends.
+ * This routine depends on the variable: delay_divisor
+ * which should be set based on the CPU clock rate.
+ */
+ .globl __delay
+__delay:
+ | d0 = arg = (usecs << 8)
+ movl sp@(4),d0
+ | d1 = delay_divisor
+ movl _delay_divisor,d1
+L_delay:
+ subl d1,d0
+ jgt L_delay
+ rts
+
#ifdef FPCOPROC
/*
* Save and restore 68881 state.
diff --git a/sys/arch/hp300/hp300/machdep.c b/sys/arch/hp300/hp300/machdep.c
index 216486eeafb..81ca8c003dd 100644
--- a/sys/arch/hp300/hp300/machdep.c
+++ b/sys/arch/hp300/hp300/machdep.c
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.62 1996/03/13 23:42:45 scottr Exp $ */
+/* $NetBSD: machdep.c,v 1.66 1996/05/18 23:30:09 thorpej Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@@ -134,10 +134,20 @@ int convasize; /* size of mapped console device */
int conforced; /* console has been forced */
/*
+ * Note that the value of delay_divisor is roughly
+ * 2048 / cpuspeed (where cpuspeed is in MHz) on 68020
+ * and 68030 systems. See clock.c for the delay
+ * calibration algorithm.
+ */
+int cpuspeed; /* relative cpu speed; XXX skewed on 68040 */
+int delay_divisor; /* delay constant */
+
+/*
* Console initialization: called early on from main,
* before vm init or startup. Do enough configuration
* to choose and initialize a console.
*/
+void
consinit()
{
extern struct map extiomap[];
@@ -151,38 +161,6 @@ consinit()
conscode = 1024; /* invalid */
/*
- * Set cpuspeed immediately since hp300_cninit() called routines
- * might use delay. Note that we only set it if a custom value
- * has not already been specified.
- */
- if (cpuspeed == 0) {
- switch (machineid) {
- case HP_320:
- case HP_330:
- case HP_340:
- cpuspeed = MHZ_16;
- break;
- case HP_350:
- case HP_360:
- case HP_380:
- cpuspeed = MHZ_25;
- break;
- case HP_370:
- case HP_433:
- cpuspeed = MHZ_33;
- break;
- case HP_375:
- cpuspeed = MHZ_50;
- break;
- default: /* assume the fastest */
- cpuspeed = MHZ_50;
- break;
- }
- if (mmutype == MMU_68040)
- cpuspeed *= 2; /* XXX */
- }
-
- /*
* Initialize the DIO resource map.
*/
rminit(extiomap, (long)EIOMAPSIZE, (long)1, "extio", EIOMAPSIZE/16);
@@ -593,6 +571,7 @@ identifycpu()
}
strcat(cpu_model, ")");
printf("%s\n", cpu_model);
+ printf("delay constant for this cpu: %d\n", delay_divisor);
/*
* Now that we have told the user what they have,
* let them know if that machine type isn't configured.
@@ -1141,10 +1120,6 @@ boot(howto)
boothowto = howto;
if ((howto & RB_NOSYNC) == 0 && waittime < 0) {
- extern struct proc proc0;
- /* make panic at reboot go away */
- if (curproc == NULL)
- curproc = &proc0;
waittime = 0;
vfs_shutdown();
/*
@@ -1661,12 +1636,12 @@ cpu_exec_aout_makecmds(p, epp)
switch (midmag) {
#ifdef COMPAT_NOMID
case (MID_ZERO << 16) | ZMAGIC:
- error = cpu_exec_aout_prep_oldzmagic(p, epp);
+ error = exec_aout_prep_oldzmagic(p, epp);
break;
#endif
#ifdef COMPAT_44
case (MID_HP300 << 16) | ZMAGIC:
- error = cpu_exec_aout_prep_oldzmagic(p, epp);
+ error = exec_aout_prep_oldzmagic(p, epp);
break;
#endif
default:
@@ -1678,59 +1653,3 @@ cpu_exec_aout_makecmds(p, epp)
return ENOEXEC;
#endif
}
-
-#if defined(COMPAT_NOMID) || defined(COMPAT_44)
-/*
- * cpu_exec_aout_prep_oldzmagic():
- * Prepare the vmcmds to build a vmspace for an old
- * (i.e. USRTEXT == 0) binary.
- *
- * Cloned from exec_aout_prep_zmagic() in kern/exec_aout.c; a more verbose
- * description of operation is there.
- */
-int
-cpu_exec_aout_prep_oldzmagic(p, epp)
- struct proc *p;
- struct exec_package *epp;
-{
- struct exec *execp = epp->ep_hdr;
-
- epp->ep_taddr = 0;
- epp->ep_tsize = execp->a_text;
- epp->ep_daddr = epp->ep_taddr + execp->a_text;
- epp->ep_dsize = execp->a_data + execp->a_bss;
- epp->ep_entry = execp->a_entry;
-
- /*
- * check if vnode is in open for writing, because we want to * demand-page out of it. if it is, don't do it, for various
- * reasons
- */
- if ((execp->a_text != 0 || execp->a_data != 0) &&
- epp->ep_vp->v_writecount != 0) {
-#ifdef DIAGNOSTIC
- if (epp->ep_vp->v_flag & VTEXT)
- panic("exec: a VTEXT vnode has writecount != 0\n");
-#endif
- return ETXTBSY;
- }
- epp->ep_vp->v_flag |= VTEXT;
-
- /* set up command for text segment */
- NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_pagedvn, execp->a_text,
- epp->ep_taddr, epp->ep_vp, NBPG, /* XXX - should NBPG be CLBYTES? */
- VM_PROT_READ|VM_PROT_EXECUTE);
-
- /* set up command for data segment */
- NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_pagedvn, execp->a_data,
- epp->ep_daddr, epp->ep_vp,
- execp->a_text + NBPG, /* XXX - should NBPG be CLBYTES? */
- VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE);
-
- /* set up command for bss segment */
- NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_zero, execp->a_bss,
- epp->ep_daddr + execp->a_data, NULLVP, 0,
- VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE);
-
- return exec_aout_setup_stack(p, epp);
-}
-#endif /* COMPAT_NOMID */
diff --git a/sys/arch/hp300/hp300/vectors.s b/sys/arch/hp300/hp300/vectors.s
index cc0dd5f2f3b..d3fb0afed70 100644
--- a/sys/arch/hp300/hp300/vectors.s
+++ b/sys/arch/hp300/hp300/vectors.s
@@ -1,4 +1,4 @@
-| $NetBSD: vectors.s,v 1.7 1996/02/14 02:57:07 thorpej Exp $
+| $NetBSD: vectors.s,v 1.9 1996/05/18 00:52:53 thorpej Exp $
| Copyright (c) 1988 University of Utah
| Copyright (c) 1990, 1993
@@ -45,7 +45,8 @@
.globl _fpfline, _fpunsupp
.globl _trap12
-Lvectab:
+ .globl _vectab
+_vectab:
.long 0x4ef80400 /* 0: jmp 0x400:w (unused reset SSP) */
.long 0 /* 1: NOT USED (reset PC) */
.long _buserr /* 2: bus error */
diff --git a/sys/arch/hp300/hp300/vm_machdep.c b/sys/arch/hp300/hp300/vm_machdep.c
index 25000809270..38efee9b6bf 100644
--- a/sys/arch/hp300/hp300/vm_machdep.c
+++ b/sys/arch/hp300/hp300/vm_machdep.c
@@ -1,4 +1,4 @@
-/* $NetBSD: vm_machdep.c,v 1.28 1996/02/09 16:58:40 scottr Exp $ */
+/* $NetBSD: vm_machdep.c,v 1.30 1996/05/09 21:26:08 scottr Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@@ -103,10 +103,10 @@ cpu_fork(p1, p2)
void
cpu_set_kpc(p, pc)
struct proc *p;
- void (*pc)(struct proc *);
+ void (*pc) __P((struct proc *));
{
- p->p_addr->u_pcb.pcb_regs[6] = (u_long)pc; /* A2 */
+ p->p_addr->u_pcb.pcb_regs[6] = (int) pc; /* A2 */
}
/*
diff --git a/sys/arch/hp300/include/cpu.h b/sys/arch/hp300/include/cpu.h
index d9b674e5407..0fa81ad6fdd 100644
--- a/sys/arch/hp300/include/cpu.h
+++ b/sys/arch/hp300/include/cpu.h
@@ -1,4 +1,4 @@
-/* $NetBSD: cpu.h,v 1.16 1995/12/21 05:01:57 mycroft Exp $ */
+/* $NetBSD: cpu.h,v 1.19 1996/05/17 15:37:07 thorpej Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@@ -207,16 +207,17 @@ extern unsigned char ssir;
#define EC_NONE 0 /* no external cache */
#define EC_VIRT 1 /* external virtual address cache */
-/* values for cpuspeed (not really related to clock speed due to caches) */
-#define MHZ_8 1
-#define MHZ_16 2
-#define MHZ_25 3
-#define MHZ_33 4
-#define MHZ_50 6
-
#ifdef _KERNEL
-extern int machineid, mmutype, ectype;
+extern int machineid; /* CPU model */
+extern int mmutype; /* MMU on this host */
+extern int ectype; /* External cache type */
+extern int cpuspeed; /* CPU speed, in MHz */
+
extern char *intiobase, *intiolimit;
+extern void (*vectab[]) __P((void));
+
+void doboot __P((void))
+ __attribute__((__noreturn__));
/* what is this supposed to do? i.e. how is it different than startrtclock? */
#define enablertclock()
diff --git a/sys/arch/hp300/include/exec.h b/sys/arch/hp300/include/exec.h
index a82cc42dea7..5e068296ea5 100644
--- a/sys/arch/hp300/include/exec.h
+++ b/sys/arch/hp300/include/exec.h
@@ -46,11 +46,4 @@ struct relocation_info_m68k {
};
#define relocation_info relocation_info_m68k
-#define ELF_TARG_CLASS ELFCLASS32
-#define ELF_TARG_DATA ELFDATA2MSB
-#define ELF_TARG_MACH EM_68K
-
-#define DO_AOUT /* support a.out */
-#define DO_ELF /* support ELF */
-
#endif /* _MACHINE_EXEC_H_ */
diff --git a/sys/arch/hp300/include/param.h b/sys/arch/hp300/include/param.h
index b068e77e409..11d963389d1 100644
--- a/sys/arch/hp300/include/param.h
+++ b/sys/arch/hp300/include/param.h
@@ -1,4 +1,4 @@
-/* $NetBSD: param.h,v 1.25 1996/03/04 05:04:23 cgd Exp $ */
+/* $NetBSD: param.h,v 1.26 1996/05/17 15:38:08 thorpej Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@@ -178,12 +178,11 @@
/* watch out for side effects */
#define splx(s) (s & PSL_IPL ? _spl(s) : spl0())
-#ifdef _KERNEL
-#ifndef LOCORE
-int cpuspeed;
-#define DELAY(n) { register int N = cpuspeed * (n); while (--N > 0); }
-#endif
-#endif
+#if defined(_KERNEL) && !defined(_LOCORE)
+extern void _delay __P((u_int));
+#define delay(us) _delay((us) << 8)
+#define DELAY(us) delay(us)
+#endif /* _KERNEL && !_LOCORE */
#ifdef COMPAT_HPUX
/*
diff --git a/sys/arch/hp300/stand/itevar.h b/sys/arch/hp300/stand/itevar.h
index cebbb2ec6cd..1d6fbb4c205 100644
--- a/sys/arch/hp300/stand/itevar.h
+++ b/sys/arch/hp300/stand/itevar.h
@@ -218,6 +218,7 @@ void rbox_putc __P((struct ite_data *, int, int, int, int));
void rbox_cursor __P((struct ite_data *, int));
void rbox_scroll __P((struct ite_data *, int, int, int, int));
+void dvbox_init __P((struct ite_data *));
void dvbox_clear __P((struct ite_data *, int, int, int, int));
void dvbox_putc __P((struct ite_data *, int, int, int, int));
void dvbox_cursor __P((struct ite_data *, int));
@@ -228,4 +229,3 @@ void hyper_clear __P((struct ite_data *, int, int, int, int));
void hyper_putc __P((struct ite_data *, int, int, int, int));
void hyper_cursor __P((struct ite_data *, int));
void hyper_scroll __P((struct ite_data *, int, int, int, int));
-
diff --git a/sys/arch/hp300/stand/libsa/Makefile b/sys/arch/hp300/stand/libsa/Makefile
index 749a869c1ff..8ba5d23934c 100644
--- a/sys/arch/hp300/stand/libsa/Makefile
+++ b/sys/arch/hp300/stand/libsa/Makefile
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.2 1995/09/02 05:04:25 thorpej Exp $
+# $NetBSD: Makefile,v 1.4 1996/01/30 19:47:32 thorpej Exp $
LIB= sa
@@ -12,11 +12,11 @@ CFLAGS+=-I${.CURDIR}/../../../.. -I${.CURDIR}/../../../../lib/libsa
# stand routines
SRCS= alloc.c bcopy.c exit.c exec.c getfile.c gets.c globals.c \
- printf.c strerror.c
+ memcpy.c printf.c strerror.c
# io routines
-SRCS+= close.c dev.c disklabel.c ioctl.c lseek.c open.c read.c \
- stat.c write.c
+SRCS+= close.c closeall.c dev.c disklabel.c dkcksum.c fstat.c ioctl.c lseek.c \
+ open.c read.c stat.c write.c
# network routines
SRCS+= arp.c ether.c in_cksum.c net.c netif.c rpc.c