From d7ffaecd740c32cef0ebbbaea5593643078aba02 Mon Sep 17 00:00:00 2001 From: Jason Downs Date: Sun, 13 Jul 1997 07:21:56 +0000 Subject: APCI support and new CPU configuration from NetBSD. Fix all of the include refs. Bump version number to 2.1. --- sys/arch/hp300/stand/Makefile | 16 ++-- sys/arch/hp300/stand/apci.c | 166 ++++++++++++++++++++++++++++++++++++ sys/arch/hp300/stand/clock.c | 6 +- sys/arch/hp300/stand/conf.c | 13 +-- sys/arch/hp300/stand/cons.c | 24 +++--- sys/arch/hp300/stand/consdefs.h | 10 ++- sys/arch/hp300/stand/ct.c | 7 +- sys/arch/hp300/stand/devopen.c | 7 +- sys/arch/hp300/stand/dnkbd.c | 28 ++++-- sys/arch/hp300/stand/hd.c | 66 +------------- sys/arch/hp300/stand/hil.c | 6 +- sys/arch/hp300/stand/hpib.c | 13 +-- sys/arch/hp300/stand/if_le.c | 4 +- sys/arch/hp300/stand/kbd.c | 19 +++-- sys/arch/hp300/stand/kbdconf.c | 6 +- sys/arch/hp300/stand/libsa/Makefile | 3 +- sys/arch/hp300/stand/machdep.c | 47 +++++----- sys/arch/hp300/stand/mkboot.c | 6 +- sys/arch/hp300/stand/netio.c | 14 +-- sys/arch/hp300/stand/rawfs.c | 7 +- sys/arch/hp300/stand/samachdep.h | 19 ++--- sys/arch/hp300/stand/scsi.c | 7 +- sys/arch/hp300/stand/sd.c | 20 ++--- sys/arch/hp300/stand/srt0.s | 79 ++++++++++++++--- sys/arch/hp300/stand/uboot.c | 10 ++- sys/arch/hp300/stand/version.c | 6 +- 26 files changed, 402 insertions(+), 207 deletions(-) create mode 100644 sys/arch/hp300/stand/apci.c diff --git a/sys/arch/hp300/stand/Makefile b/sys/arch/hp300/stand/Makefile index e1577c7f2c2..d20ea626bf6 100644 --- a/sys/arch/hp300/stand/Makefile +++ b/sys/arch/hp300/stand/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.10 1997/04/21 07:37:36 downsj Exp $ +# $OpenBSD: Makefile,v 1.11 1997/07/13 07:21:43 downsj Exp $ # $NetBSD: Makefile,v 1.22 1996/10/18 06:03:25 thorpej Exp $ # @(#)Makefile 8.1 (Berkeley) 6/10/93 @@ -10,14 +10,14 @@ NOMAN= noman # RELOC=FFF00000 allows for boot prog up to FF000 (1044480) bytes long RELOC= FFF00000 -CONS= -DDCACONSOLE -DITECONSOLE -DDCMCONSOLE +CONS= -DDCACONSOLE -DITECONSOLE -DDCMCONSOLE -DAPCICONSOLE CONS+= -DHIL_KEYBOARD -DUK_KEYBOARD -DDOMAIN_KEYBOARD -DEFS= -DSTANDALONE -DCOMPAT_NOLABEL ${CONS} -Dhp300 # -DROMPRF +DEFS= -DSTANDALONE ${CONS} -Dhp300 #DEFS+= -DNETIF_DEBUG -DRPC_DEBUG -DNFS_DEBUG -DRARP_DEBUG -DNET_DEBUG #DEFS+= -DLE_DEBUG -CFLAGS= -O3 ${INCPATH} ${DEFS} +CFLAGS= -O3 -msoft-float ${INCPATH} ${DEFS} -SRCS= autoconf.c cons.c ct.c dca.c dcm.c devopen.c dnkbd.c fhpib.c \ +SRCS= apci.c autoconf.c cons.c ct.c dca.c dcm.c devopen.c dnkbd.c fhpib.c \ hd.c hil.c hpib.c if_le.c ite.c ite_dv.c ite_gb.c ite_rb.c \ ite_subr.c ite_tc.c ite_hy.c kbd.c kbdconf.c kbdvar.h machdep.c \ nhpib.c prf.c scsi.c sd.c version.c @@ -51,11 +51,9 @@ all: ${ALL} ${BOOTS}: ${LIBS} -# depend on DEFS +# depend on CFLAGS -devopen.o machdep.o srt0.o: Makefile -cons.o dca.o hil.o: Makefile -ite.o ite_subr.o ite_dv.o ite_gb.o ite_hy.o ite_rb.o ite_tc.o: Makefile +${OBJS}: Makefile # startups diff --git a/sys/arch/hp300/stand/apci.c b/sys/arch/hp300/stand/apci.c new file mode 100644 index 00000000000..5de5a32b831 --- /dev/null +++ b/sys/arch/hp300/stand/apci.c @@ -0,0 +1,166 @@ +/* $OpenBSD: apci.c,v 1.1 1997/07/13 07:21:44 downsj Exp $ */ +/* $NetBSD: apci.c,v 1.1 1997/05/12 07:41:55 thorpej Exp $ */ + +/* + * Copyright (c) 1997 Jason R. Thorpe. All rights reserved. + * Copyright (c) 1988 University of Utah. + * Copyright (c) 1990, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * the Systems Programming Group of the University of Utah Computer + * Science Department. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)dca.c 8.1 (Berkeley) 6/10/93 + */ + +#ifdef APCICONSOLE +#include +#include + +#include /* for APCI offsets */ +#include /* for register map */ +#include /* for register bits */ + +#include +#include + +struct apciregs *apcicnaddr = 0; + +void +apciprobe(cp) + struct consdev *cp; +{ + struct apciregs *apci = apcicnaddr = + (struct apciregs *)IIOV(FRODO_BASE + FRODO_APCI_OFFSET(1)); + struct dcadevice *dca = (struct dcadevice *)sctoaddr(9); + + cp->cn_pri = CN_DEAD; + + /* Only 400-series machines can have this. */ + switch (machineid) { + case HP_400: + case HP_425: + case HP_433: + break; + default: + return; + } + + /* Make sure there's not a DCA in the way. */ + if (badaddr((caddr_t)dca) == 0) { + switch (dca->dca_id) { + case DCAID0: + case DCAID1: + case DCAREMID0: + case DCAREMID1: + return; + } + } + +#ifdef FORCEAPCICONSOLE + cp->cn_pri = CN_REMOTE; +#else + cp->cn_pri = CN_NORMAL; +#endif + curcons_scode = -2; +} + +void +apciinit(cp) + struct consdev *cp; +{ + struct apciregs *apci = (struct apciregs *)apcicnaddr; + + /* + * The only system on which this will happen is a 425e, + * which does not currently have a framebuffer console + * driver. We use the ROM's output method to let the + * operator know we're switching to the APCI. + */ + userom = 1; + printf("Switching to APCI console.\n"); + userom = 0; + + apci->ap_cfcr = CFCR_DLAB; + apci->ap_data = APCIBRD(9600) & 0xff; + apci->ap_ier = (APCIBRD(9600) >> 8) & 0xff; + apci->ap_cfcr = CFCR_8BITS; + apci->ap_fifo = + FIFO_ENABLE | FIFO_RCV_RST | FIFO_XMT_RST | FIFO_TRIGGER_1; + apci->ap_mcr = MCR_DTR | MCR_RTS; +} + +/* ARGSUSED */ +#ifndef SMALL +int +apcigetchar(dev) + dev_t dev; +{ + register struct apciregs *apci = apcicnaddr; + short stat; + int c; + + if (((stat = apci->ap_lsr) & LSR_RXRDY) == 0) + return (0); + c = apci->ap_data; + return (c); +} +#else +int +apcigetchar(dev) + dev_t dev; +{ + return (0); +} +#endif + +/* ARGSUSED */ +void +apciputchar(dev, c) + dev_t dev; + int c; +{ + struct apciregs *apci = apcicnaddr; + int timo; + short stat; + + /* wait a reasonable time for the transmitter to come ready */ + timo = 50000; + while (((stat = apci->ap_lsr) & LSR_TXRDY) == 0 && --timo) + ; + apci->ap_data = c; + /* wait for this transmission to complete */ + timo = 1000000; + while (((stat = apci->ap_lsr) & LSR_TXRDY) == 0 && --timo) + ; +} +#endif diff --git a/sys/arch/hp300/stand/clock.c b/sys/arch/hp300/stand/clock.c index d987f920cf6..2be64952c9b 100644 --- a/sys/arch/hp300/stand/clock.c +++ b/sys/arch/hp300/stand/clock.c @@ -1,4 +1,4 @@ -/* $OpenBSD: clock.c,v 1.2 1997/01/17 08:32:39 downsj Exp $ */ +/* $OpenBSD: clock.c,v 1.3 1997/07/13 07:21:44 downsj Exp $ */ /* $NetBSD: clock.c,v 1.3 1995/02/20 00:12:09 mycroft Exp $ */ /* @@ -44,7 +44,9 @@ */ #include -#include "samachdep.h" + +#include + #include #include diff --git a/sys/arch/hp300/stand/conf.c b/sys/arch/hp300/stand/conf.c index e7d9a194787..e34b4351e51 100644 --- a/sys/arch/hp300/stand/conf.c +++ b/sys/arch/hp300/stand/conf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: conf.c,v 1.3 1997/02/03 07:19:03 downsj Exp $ */ +/* $OpenBSD: conf.c,v 1.4 1997/07/13 07:21:45 downsj Exp $ */ /* $NetBSD: conf.c,v 1.12 1996/10/14 07:29:15 thorpej Exp $ */ /* @@ -38,8 +38,9 @@ #include -#include "stand.h" -#include "samachdep.h" +#include + +#include #include #include @@ -47,9 +48,9 @@ #include #include -#include "nfs.h" -#include "rawfs.h" -#include "ufs.h" +#include +#include +#include int debug = 0; /* XXX */ diff --git a/sys/arch/hp300/stand/cons.c b/sys/arch/hp300/stand/cons.c index ba5de8b79fd..20b0d32232f 100644 --- a/sys/arch/hp300/stand/cons.c +++ b/sys/arch/hp300/stand/cons.c @@ -1,5 +1,5 @@ -/* $OpenBSD: cons.c,v 1.2 1997/01/17 08:32:40 downsj Exp $ */ -/* $NetBSD: cons.c,v 1.9 1995/10/04 06:54:42 thorpej Exp $ */ +/* $OpenBSD: cons.c,v 1.3 1997/07/13 07:21:45 downsj Exp $ */ +/* $NetBSD: cons.c,v 1.2 1997/05/12 07:44:53 thorpej Exp $ */ /* * Copyright (c) 1988 University of Utah. @@ -56,6 +56,9 @@ struct consdev constab[] = { #ifdef DCACONSOLE { dcaprobe, dcainit, dcagetchar, dcaputchar }, #endif +#ifdef APCICONSOLE + { apciprobe, apciinit, apcigetchar, apciputchar }, +#endif #ifdef DCMCONSOLE { dcmprobe, dcminit, dcmgetchar, dcmputchar }, #endif @@ -89,10 +92,16 @@ cninit() noconsole = 0; #if 0 printf("console: "); - if (cons_scode == -1) + switch (cons_scode) { + case -2: + printf("apci\n"); + break; + case -1: printf("internal grf\n"); - else + break; + default: printf("scode %d\n", cons_scode); + } #endif } } @@ -113,14 +122,9 @@ cnputc(c) { /* Note: the dev_t arguments are not used! */ -#ifdef ROMPRF - extern int userom; - if (userom) romputchar(c); - else -#endif - if (cn_tab) + else if (cn_tab) (*cn_tab->cn_putc)(0, c); return (0); diff --git a/sys/arch/hp300/stand/consdefs.h b/sys/arch/hp300/stand/consdefs.h index a1c7912afe3..1fc385cdadd 100644 --- a/sys/arch/hp300/stand/consdefs.h +++ b/sys/arch/hp300/stand/consdefs.h @@ -1,5 +1,5 @@ -/* $OpenBSD: consdefs.h,v 1.2 1997/01/17 08:32:41 downsj Exp $ */ -/* $NetBSD: consdefs.h,v 1.3 1995/10/04 06:54:43 thorpej Exp $ */ +/* $OpenBSD: consdefs.h,v 1.3 1997/07/13 07:21:46 downsj Exp $ */ +/* $NetBSD: consdefs.h,v 1.2 1997/05/12 07:45:41 thorpej Exp $ */ /* * Copyright (c) 1982, 1990, 1993 @@ -55,6 +55,12 @@ void dcainit __P((struct consdev *)); int dcagetchar __P((dev_t)); void dcaputchar __P((dev_t, int)); #endif +#ifdef APCICONSOLE +void apciprobe __P((struct consdev *)); +void apciinit __P((struct consdev *)); +int apcigetchar __P((dev_t)); +void apciputchar __P((dev_t, int)); +#endif #ifdef DCMCONSOLE void dcmprobe __P((struct consdev *)); void dcminit __P((struct consdev *)); diff --git a/sys/arch/hp300/stand/ct.c b/sys/arch/hp300/stand/ct.c index 9bf0b1ab763..b8b5acf9dd7 100644 --- a/sys/arch/hp300/stand/ct.c +++ b/sys/arch/hp300/stand/ct.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ct.c,v 1.2 1997/01/17 08:32:42 downsj Exp $ */ +/* $OpenBSD: ct.c,v 1.3 1997/07/13 07:21:46 downsj Exp $ */ /* $NetBSD: ct.c,v 1.9 1996/10/14 07:29:57 thorpej Exp $ */ /* @@ -43,8 +43,9 @@ #include -#include "stand.h" -#include "samachdep.h" +#include + +#include struct ct_iocmd ct_ioc; struct ct_rscmd ct_rsc; diff --git a/sys/arch/hp300/stand/devopen.c b/sys/arch/hp300/stand/devopen.c index 6902bf511cb..e0b406c2397 100644 --- a/sys/arch/hp300/stand/devopen.c +++ b/sys/arch/hp300/stand/devopen.c @@ -1,4 +1,4 @@ -/* $OpenBSD: devopen.c,v 1.3 1997/02/03 07:19:04 downsj Exp $ */ +/* $OpenBSD: devopen.c,v 1.4 1997/07/13 07:21:47 downsj Exp $ */ /* $NetBSD: devopen.c,v 1.7 1996/10/14 07:31:47 thorpej Exp $ */ /*- @@ -33,8 +33,9 @@ #include #include -#include "stand.h" -#include "samachdep.h" +#include + +#include u_int opendev; diff --git a/sys/arch/hp300/stand/dnkbd.c b/sys/arch/hp300/stand/dnkbd.c index ebba27d2499..054a848ebf2 100644 --- a/sys/arch/hp300/stand/dnkbd.c +++ b/sys/arch/hp300/stand/dnkbd.c @@ -1,5 +1,5 @@ -/* $OpenBSD: dnkbd.c,v 1.1 1997/04/16 11:56:37 downsj Exp $ */ -/* $NetBSD: dnkbd.c,v 1.1 1997/04/14 19:03:13 thorpej Exp $ */ +/* $OpenBSD: dnkbd.c,v 1.2 1997/07/13 07:21:47 downsj Exp $ */ +/* $NetBSD: dnkbd.c,v 1.3 1997/05/12 07:47:03 thorpej Exp $ */ /*- * Copyright (c) 1997 The NetBSD Foundation, Inc. @@ -45,11 +45,12 @@ #include +#include /* for apci offsets */ #include /* for the register bit defintions */ #include /* for the apci registers */ -#include "samachdep.h" -#include "kbdvar.h" +#include +#include #ifndef SMALL @@ -100,7 +101,8 @@ int dnkbd_ignore; /* for ignoring mouse packets */ int dnkbd_getc() { - struct apciregs *apci = (struct apciregs *)0x41c000; /* XXX */ + struct apciregs *apci = + (struct apciregs *)IIOV(FRODO_BASE + FRODO_APCI_OFFSET(0)); int c; /* default to `no key' */ @@ -157,13 +159,23 @@ int dnkbd_init() { + /* + * 400, 425, and 433 models can have a Domain keyboard. + */ + switch (machineid) { + case HP_400: + case HP_425: + case HP_433: + break; + default: + return (0); + } + /* * Look for a Frodo utility chip. If we find one, assume there * is a Domain keyboard attached. - * - * XXX This could be improved. */ - if (badaddr(0x41c000)) + if (badaddr((caddr_t)IIOV(FRODO_BASE + FRODO_APCI_OFFSET(0)))) return (0); /* diff --git a/sys/arch/hp300/stand/hd.c b/sys/arch/hp300/stand/hd.c index 25461390084..22f76c9c192 100644 --- a/sys/arch/hp300/stand/hd.c +++ b/sys/arch/hp300/stand/hd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: hd.c,v 1.1 1997/02/03 07:19:06 downsj Exp $ */ +/* $OpenBSD: hd.c,v 1.2 1997/07/13 07:21:47 downsj Exp $ */ /* $NetBSD: rd.c,v 1.11 1996/12/21 21:34:40 thorpej Exp $ */ /* @@ -48,9 +48,10 @@ */ #include #include -#include "stand.h" -#include "samachdep.h" +#include + +#include #include struct hd_iocmd hd_ioc; @@ -196,53 +197,6 @@ hdident(ctlr, unit) return(id); } -#ifdef COMPAT_NOLABEL -int hdcyloff[][8] = { - { 1, 143, 0, 143, 0, 0, 323, 503, }, /* 7945A */ - { 1, 167, 0, 0, 0, 0, 0, 0, }, /* 9134D */ - { 0, 0, 0, 0, 0, 0, 0, 0, }, /* 9122S */ - { 0, 71, 0, 221, 292, 542, 221, 0, }, /* 7912P */ - { 1, 72, 0, 72, 362, 802, 252, 362, }, /* 7914P */ - { 1, 28, 0, 140, 167, 444, 140, 721, }, /* 7933H */ - { 1, 200, 0, 200, 0, 0, 450, 600, }, /* 9134L */ - { 1, 105, 0, 105, 380, 736, 265, 380, }, /* 7957A */ - { 1, 65, 0, 65, 257, 657, 193, 257, }, /* 7958A */ - { 1, 128, 0, 128, 518, 918, 388, 518, }, /* 7957B */ - { 1, 44, 0, 44, 174, 496, 131, 174, }, /* 7958B */ - { 1, 44, 0, 44, 218, 1022,174, 218, }, /* 7959B */ - { 1, 37, 0, 37, 183, 857, 147, 183, }, /* 2200A */ - { 1, 19, 0, 94, 112, 450, 94, 788, }, /* 2203A */ - { 1, 20, 0, 98, 117, 256, 98, 397, }, /* 7936H */ - { 1, 11, 0, 53, 63, 217, 53, 371, }, /* 7937H */ -}; - -struct hdcompatinfo { - int nbpc; - int *cyloff; -} hdcompatinfo[] = { - NHD7945ABPT*NHD7945ATRK, hdcyloff[0], - NHD9134DBPT*NHD9134DTRK, hdcyloff[1], - NHD9122SBPT*NHD9122STRK, hdcyloff[2], - NHD7912PBPT*NHD7912PTRK, hdcyloff[3], - NHD7914PBPT*NHD7914PTRK, hdcyloff[4], - NHD7958ABPT*NHD7958ATRK, hdcyloff[8], - NHD7957ABPT*NHD7957ATRK, hdcyloff[7], - NHD7933HBPT*NHD7933HTRK, hdcyloff[5], - NHD9134LBPT*NHD9134LTRK, hdcyloff[6], - NHD7936HBPT*NHD7936HTRK, hdcyloff[14], - NHD7937HBPT*NHD7937HTRK, hdcyloff[15], - NHD7914PBPT*NHD7914PTRK, hdcyloff[4], - NHD7945ABPT*NHD7945ATRK, hdcyloff[0], - NHD9122SBPT*NHD9122STRK, hdcyloff[2], - NHD7957BBPT*NHD7957BTRK, hdcyloff[9], - NHD7958BBPT*NHD7958BTRK, hdcyloff[10], - NHD7959BBPT*NHD7959BTRK, hdcyloff[11], - NHD2200ABPT*NHD2200ATRK, hdcyloff[12], - NHD2203ABPT*NHD2203ATRK, hdcyloff[13], -}; -int nhdcompatinfo = sizeof(hdcompatinfo) / sizeof(hdcompatinfo[0]); -#endif - char io_buf[MAXBSIZE]; hdgetinfo(rs) @@ -273,22 +227,10 @@ hdgetinfo(rs) if (msg) { printf("hd(%d,%d,%d): WARNING: %s, ", rs->sc_ctlr, rs->sc_unit, rs->sc_part, msg); -#ifdef COMPAT_NOLABEL - { - register struct hdcompatinfo *ci; - - printf("using old default partitioning\n"); - ci = &hdcompatinfo[rs->sc_type]; - pi->npart = 8; - for (i = 0; i < pi->npart; i++) - pi->offset[i] = ci->cyloff[i] * ci->nbpc; - } -#else printf("defining `c' partition as entire disk\n"); pi->npart = 3; pi->offset[0] = pi->offset[1] = -1; pi->offset[2] = 0; -#endif } else { pi->npart = lp->d_npartitions; for (i = 0; i < pi->npart; i++) diff --git a/sys/arch/hp300/stand/hil.c b/sys/arch/hp300/stand/hil.c index fc1383f5f2b..51338ca57fa 100644 --- a/sys/arch/hp300/stand/hil.c +++ b/sys/arch/hp300/stand/hil.c @@ -1,4 +1,4 @@ -/* $OpenBSD: hil.c,v 1.4 1997/04/16 11:56:38 downsj Exp $ */ +/* $OpenBSD: hil.c,v 1.5 1997/07/13 07:21:48 downsj Exp $ */ /* $NetBSD: hil.c,v 1.2 1997/04/14 19:00:10 thorpej Exp $ */ /* @@ -56,8 +56,8 @@ #include #include -#include "samachdep.h" -#include "kbdvar.h" +#include +#include #ifndef SMALL diff --git a/sys/arch/hp300/stand/hpib.c b/sys/arch/hp300/stand/hpib.c index 3210482c5eb..bc916952226 100644 --- a/sys/arch/hp300/stand/hpib.c +++ b/sys/arch/hp300/stand/hpib.c @@ -1,5 +1,5 @@ -/* $OpenBSD: hpib.c,v 1.3 1997/02/03 04:48:04 downsj Exp $ */ -/* $NetBSD: hpib.c,v 1.5 1997/01/30 10:32:53 thorpej Exp $ */ +/* $OpenBSD: hpib.c,v 1.4 1997/07/13 07:21:48 downsj Exp $ */ +/* $NetBSD: hpib.c,v 1.2 1997/05/12 07:48:23 thorpej Exp $ */ /* * Copyright (c) 1982, 1990, 1993 @@ -42,13 +42,16 @@ #include #include +#include + #include #include -#include "stand.h" -#include "samachdep.h" +#include + +#include -int internalhpib = IIOV(0x478000); +int internalhpib = IIOV(DIO_IHPIBADDR); int fhpibppoll(), nhpibppoll(); struct hpib_softc hpib_softc[NHPIB]; diff --git a/sys/arch/hp300/stand/if_le.c b/sys/arch/hp300/stand/if_le.c index ccb5a017443..55e0e8ce427 100644 --- a/sys/arch/hp300/stand/if_le.c +++ b/sys/arch/hp300/stand/if_le.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if_le.c,v 1.6 1997/02/03 04:48:05 downsj Exp $ */ +/* $OpenBSD: if_le.c,v 1.7 1997/07/13 07:21:49 downsj Exp $ */ /* $NetBSD: if_le.c,v 1.9 1997/01/30 10:32:54 thorpej Exp $ */ /* @@ -44,7 +44,7 @@ #include #include -#include "samachdep.h" +#include #ifndef NLE #define NLE 1 diff --git a/sys/arch/hp300/stand/kbd.c b/sys/arch/hp300/stand/kbd.c index 5dd8fccf18e..7c3a1061533 100644 --- a/sys/arch/hp300/stand/kbd.c +++ b/sys/arch/hp300/stand/kbd.c @@ -1,5 +1,5 @@ -/* $OpenBSD: kbd.c,v 1.1 1997/04/16 11:56:38 downsj Exp $ */ -/* $NetBSD: kbd.c,v 1.1 1997/04/14 19:00:11 thorpej Exp $ */ +/* $OpenBSD: kbd.c,v 1.2 1997/07/13 07:21:49 downsj Exp $ */ +/* $NetBSD: kbd.c,v 1.2 1997/05/12 07:51:32 thorpej Exp $ */ /*- * Copyright (c) 1997 The NetBSD Foundation, Inc. @@ -45,8 +45,8 @@ #include -#include "samachdep.h" -#include "kbdvar.h" +#include +#include #ifndef SMALL @@ -68,7 +68,16 @@ kbdnmi() if (selected_kbd != NULL) (*selected_kbd->k_nmi)(); - printf("\nboot interrupted\n"); + + /* + * This is the only reasonable thing to do, unfortunately. + * Simply restarting the boot block by frobbing the stack and + * jumping to begin: doesn't properly reset variables that + * are in the data segment. + */ + printf("\nboot interrupted, resetting...\n"); + DELAY(1000000); + call_req_reboot(); } void diff --git a/sys/arch/hp300/stand/kbdconf.c b/sys/arch/hp300/stand/kbdconf.c index 31d0531a315..f80871eaf89 100644 --- a/sys/arch/hp300/stand/kbdconf.c +++ b/sys/arch/hp300/stand/kbdconf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kbdconf.c,v 1.1 1997/04/16 11:56:39 downsj Exp $ */ +/* $OpenBSD: kbdconf.c,v 1.2 1997/07/13 07:21:50 downsj Exp $ */ /* $NetBSD: kbdconf.c,v 1.1 1997/04/14 19:00:12 thorpej Exp $ */ /*- @@ -45,8 +45,8 @@ #include -#include "samachdep.h" -#include "kbdvar.h" +#include +#include #ifndef SMALL diff --git a/sys/arch/hp300/stand/libsa/Makefile b/sys/arch/hp300/stand/libsa/Makefile index a819b609bf2..865b582138b 100644 --- a/sys/arch/hp300/stand/libsa/Makefile +++ b/sys/arch/hp300/stand/libsa/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.8 1997/02/18 01:07:19 downsj Exp $ +# $OpenBSD: Makefile,v 1.9 1997/07/13 07:21:55 downsj Exp $ # $NetBSD: Makefile,v 1.5 1996/06/26 17:44:42 thorpej Exp $ LIB= sa @@ -13,6 +13,7 @@ LIB= sa CFLAGS+=-Dhp300 -DSTANDALONE -DCOMPAT_UFS -DNO_LSEEK CFLAGS+=-D__INTERNAL_LIBSA_CREAD -DHEAP_LIMIT="0xffffdfff" CFLAGS+=${DEBUGFLAGS} -I${.CURDIR}/.. +CFLAGS+=-I${.CURDIR}/../.. -I${.CURDIR}/../../.. CFLAGS+=-I${.CURDIR}/../../../.. -I${.CURDIR}/../../../../lib/libsa # stand routines diff --git a/sys/arch/hp300/stand/machdep.c b/sys/arch/hp300/stand/machdep.c index f232974dcfe..2dbf83e01d0 100644 --- a/sys/arch/hp300/stand/machdep.c +++ b/sys/arch/hp300/stand/machdep.c @@ -1,5 +1,5 @@ -/* $OpenBSD: machdep.c,v 1.5 1997/04/16 11:26:36 downsj Exp $ */ -/* $NetBSD: machdep.c,v 1.6 1996/10/14 07:33:46 thorpej Exp $ */ +/* $OpenBSD: machdep.c,v 1.6 1997/07/13 07:21:50 downsj Exp $ */ +/* $NetBSD: machdep.c,v 1.4 1997/06/28 07:20:25 thorpej Exp $ */ /* * Copyright (c) 1988 University of Utah. @@ -44,7 +44,7 @@ */ #include -#include "samachdep.h" +#include char * getmachineid() @@ -59,6 +59,8 @@ getmachineid() cp = "318/319/330"; break; case HP_340: cp = "340"; break; + case HP_345: + cp = "345"; break; case HP_350: cp = "350"; break; case HP_360: @@ -66,9 +68,13 @@ getmachineid() case HP_370: cp = "370"; break; case HP_375: - cp = "345/375/400"; break; + cp = "375"; break; case HP_380: - cp = "380/425"; break; + cp = "380"; break; + case HP_400: + cp = "400"; break; + case HP_425: + cp = "425"; break; case HP_433: cp = "433"; break; default: @@ -77,9 +83,7 @@ getmachineid() return(cp); } -#ifdef ROMPRF int userom; -#endif struct trapframe { int dregs[8]; @@ -98,9 +102,11 @@ trap(fp) if (intrap) return(0); intrap = 1; -#ifdef ROMPRF + +#if 0 userom = 1; #endif + printf("Got unexpected trap: format=%x vector=%x ps=%x pc=%x\n", (fp->frame>>12)&0xF, fp->frame&0xFFF, fp->sr, fp->pc); printf("dregs: %x %x %x %x %x %x %x %x\n", @@ -109,23 +115,25 @@ trap(fp) printf("aregs: %x %x %x %x %x %x %x %x\n", fp->aregs[0], fp->aregs[1], fp->aregs[2], fp->aregs[3], fp->aregs[4], fp->aregs[5], fp->aregs[6], fp->aregs[7]); -#ifdef ROMPRF + +#if 0 userom = 0; #endif + intrap = 0; return(0); } -#ifdef ROMPRF -#define ROWS 46 -#define COLS 128 +#define ROWS 24 +#define COLS 80 +void romputchar(c) - register int c; + int c; { static char buf[COLS]; static int col = 0, row = 0; - register int i; + int i; switch (c) { case '\0': @@ -155,7 +163,6 @@ romputchar(c) break; } } -#endif void machdep_start(entry, howto, loadaddr, ssym, esym) @@ -170,10 +177,10 @@ machdep_start(entry, howto, loadaddr, ssym, esym) esym = (char *)round_to_size(esym - (char *)loadaddr); #undef round_to_size - asm("movl %0,d7" : : "m" (howto)); - asm("movl %0,d6" : : "m" (opendev)); - asm("movl %0,d5" : : "m" (cons_scode)); - asm("movl %0,a5" : : "a" (loadaddr)); - asm("movl %0,a4" : : "a" (esym)); + __asm __volatile ("movl %0,d7" : : "m" (howto)); + __asm __volatile ("movl %0,d6" : : "m" (opendev)); + __asm __volatile ("movl %0,d5" : : "m" (cons_scode)); + __asm __volatile ("movl %0,a5" : : "a" (loadaddr)); + __asm __volatile ("movl %0,a4" : : "a" (esym)); (*((int (*)())entry))(); } diff --git a/sys/arch/hp300/stand/mkboot.c b/sys/arch/hp300/stand/mkboot.c index d6ce986c915..90db7714824 100644 --- a/sys/arch/hp300/stand/mkboot.c +++ b/sys/arch/hp300/stand/mkboot.c @@ -1,4 +1,4 @@ -/* $OpenBSD: mkboot.c,v 1.2 1997/01/17 08:32:53 downsj Exp $ */ +/* $OpenBSD: mkboot.c,v 1.3 1997/07/13 07:21:50 downsj Exp $ */ /* * Copyright (c) 1990, 1993 @@ -46,14 +46,14 @@ static char copyright[] = static char sccsid[] = "@(#)mkboot.c 7.2 (Berkeley) 12/16/90"; static char rcsid[] = "$NetBSD: mkboot.c,v 1.5 1994/10/26 07:27:45 cgd Exp $"; #endif -static char rcsid[] = "$OpenBSD: mkboot.c,v 1.2 1997/01/17 08:32:53 downsj Exp $"; +static char rcsid[] = "$OpenBSD: mkboot.c,v 1.3 1997/07/13 07:21:50 downsj Exp $"; #endif /* not lint */ #include #include #include -#include "volhdr.h" +#include #include #include diff --git a/sys/arch/hp300/stand/netio.c b/sys/arch/hp300/stand/netio.c index 14670bc2477..cb7639efae8 100644 --- a/sys/arch/hp300/stand/netio.c +++ b/sys/arch/hp300/stand/netio.c @@ -1,4 +1,4 @@ -/* $OpenBSD: netio.c,v 1.3 1997/02/03 04:48:06 downsj Exp $ */ +/* $OpenBSD: netio.c,v 1.4 1997/07/13 07:21:51 downsj Exp $ */ /* $NetBSD: netio.c,v 1.5 1997/01/30 10:32:56 thorpej Exp $ */ /* @@ -57,12 +57,12 @@ #include #include -#include "stand.h" -#include "samachdep.h" -#include "net.h" -#include "netif.h" -#include "bootparam.h" -#include "nfs.h" +#include +#include +#include +#include +#include +#include extern int nfs_root_node[]; /* XXX - get from nfs_mount() */ diff --git a/sys/arch/hp300/stand/rawfs.c b/sys/arch/hp300/stand/rawfs.c index 769b1fc84c2..1cde8d63d34 100644 --- a/sys/arch/hp300/stand/rawfs.c +++ b/sys/arch/hp300/stand/rawfs.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rawfs.c,v 1.1 1997/01/17 08:36:52 downsj Exp $ */ +/* $OpenBSD: rawfs.c,v 1.2 1997/07/13 07:21:51 downsj Exp $ */ /* $NetBSD: rawfs.c,v 1.2 1996/10/06 19:07:53 thorpej Exp $ */ /* @@ -40,8 +40,9 @@ */ #include -#include -#include + +#include +#include extern int debug; diff --git a/sys/arch/hp300/stand/samachdep.h b/sys/arch/hp300/stand/samachdep.h index 123278d1779..d348e0b6fc7 100644 --- a/sys/arch/hp300/stand/samachdep.h +++ b/sys/arch/hp300/stand/samachdep.h @@ -1,5 +1,5 @@ -/* $OpenBSD: samachdep.h,v 1.3 1997/02/03 07:19:09 downsj Exp $ */ -/* $NetBSD: samachdep.h,v 1.7 1996/10/14 07:34:48 thorpej Exp $ */ +/* $OpenBSD: samachdep.h,v 1.4 1997/07/13 07:21:52 downsj Exp $ */ +/* $NetBSD: samachdep.h,v 1.3 1997/05/12 07:54:45 thorpej Exp $ */ /* * Copyright (c) 1982, 1990, 1993 @@ -37,6 +37,7 @@ */ #include +#include #define NHPIB 4 #define NSCSI 2 @@ -47,22 +48,13 @@ #define NITE 4 /* from cpu.h */ +#define INTIOBASE (0x00400000) #define IIOV(x) (x) #define DIOBASE (0x600000) #define DIOCSIZE (0x10000) #define DIOIIBASE (0x01000000) #define DIOIICSIZE (0x00400000) -#define HP_320 0 /* 16Mhz 68020+HP MMU+16K external cache */ -#define HP_330 1 /* 16Mhz 68020+68851 MMU */ -#define HP_350 2 /* 25Mhz 68020+HP MMU+32K external cache */ -#define HP_360 3 /* 25Mhz 68030 */ -#define HP_370 4 /* 33Mhz 68030+64K external cache */ -#define HP_340 5 /* 16Mhz 68030 */ -#define HP_375 6 /* 50Mhz 68030+32K external cache */ -#define HP_380 7 /* 25Mhz 68040 */ -#define HP_433 8 /* 33Mhz 68040 */ - #define MHZ_8 1 #define MHZ_16 2 #define MHZ_25 3 @@ -76,6 +68,9 @@ extern u_int opendev; extern u_int bootdev; extern char *getmachineid(); +extern int userom; +extern void romputchar __P((int)); + #define DELAY(n) { register int N = cpuspeed * (n); while (--N > 0); } /* bogon grfinfo structure to keep grf_softc happy */ diff --git a/sys/arch/hp300/stand/scsi.c b/sys/arch/hp300/stand/scsi.c index 72e937cb6c9..7366e73c3ac 100644 --- a/sys/arch/hp300/stand/scsi.c +++ b/sys/arch/hp300/stand/scsi.c @@ -1,4 +1,4 @@ -/* $OpenBSD: scsi.c,v 1.3 1997/02/03 04:48:07 downsj Exp $ */ +/* $OpenBSD: scsi.c,v 1.4 1997/07/13 07:21:52 downsj Exp $ */ /* $NetBSD: scsi.c,v 1.7 1997/01/30 10:32:57 thorpej Exp $ */ /* @@ -62,8 +62,9 @@ #include #include -#include "stand.h" -#include "samachdep.h" +#include + +#include struct scsi_softc scsi_softc[NSCSI]; diff --git a/sys/arch/hp300/stand/sd.c b/sys/arch/hp300/stand/sd.c index e8edb1542a8..a6379338010 100644 --- a/sys/arch/hp300/stand/sd.c +++ b/sys/arch/hp300/stand/sd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sd.c,v 1.2 1997/01/17 08:32:59 downsj Exp $ */ +/* $OpenBSD: sd.c,v 1.3 1997/07/13 07:21:53 downsj Exp $ */ /* $NetBSD: sd.c,v 1.9 1996/12/21 21:34:41 thorpej Exp $ */ /* @@ -49,8 +49,10 @@ #include #include -#include "stand.h" -#include "samachdep.h" + +#include + +#include #define _IOCTL_ #include @@ -115,13 +117,6 @@ sdreset(ctlr, unit) { } -#ifdef COMPAT_NOLABEL -struct sdminilabel defaultpinfo = { - 8, - { 1024, 17408, 0, 17408, 115712, 218112, 82944, 115712 } -}; -#endif - char io_buf[MAXBSIZE]; sdgetinfo(ss) @@ -152,15 +147,10 @@ sdgetinfo(ss) if (msg) { printf("sd(%d,%d,%d): WARNING: %s, ", ss->sc_ctlr, ss->sc_unit, ss->sc_part, msg); -#ifdef COMPAT_NOLABEL - printf("using old default partitioning\n"); - *pi = defaultpinfo; -#else printf("defining `c' partition as entire disk\n"); pi->npart = 3; pi->offset[0] = pi->offset[1] = -1; pi->offset[2] = 0; -#endif } else { pi->npart = lp->d_npartitions; for (i = 0; i < pi->npart; i++) diff --git a/sys/arch/hp300/stand/srt0.s b/sys/arch/hp300/stand/srt0.s index 54dee11a41d..d3ca9dd3e8a 100644 --- a/sys/arch/hp300/stand/srt0.s +++ b/sys/arch/hp300/stand/srt0.s @@ -1,4 +1,4 @@ -/* $OpenBSD: srt0.s,v 1.3 1997/03/21 07:16:21 downsj Exp $ */ +/* $OpenBSD: srt0.s,v 1.4 1997/07/13 07:21:53 downsj Exp $ */ /* $NetBSD: srt0.s,v 1.2 1997/03/10 08:00:47 thorpej Exp $ */ /* @@ -90,8 +90,7 @@ vecloop: movl #NMIRESET,a0 | NMI keyboard reset addr movl #nmi,a0@ | catch in reset routine /* - * Determine our CPU type and look for internal HP-IB - * (really only care about detecting 320 (no DIO-II) right now). + * Determine our SPU type and look for internal HP-IB */ lea _machineid,a0 movl #0x808,d0 @@ -101,9 +100,14 @@ vecloop: movc cacr,d0 | read it back tstl d0 | zero? jeq not68030 | yes, we have 68020/68040 + movl #0x808,d0 movc d0,cacr | clear data freeze bit again + /* + * 68030 models + */ + movl #0x80,MMUCMD | set magic cookie movl MMUCMD,d0 | read it back btst #7,d0 | cookie still on? @@ -115,14 +119,32 @@ vecloop: jeq ihpibcheck | no, a 370 movl #5,a0@ | yes, must be a 340 jra ihpibcheck + not370: movl #3,a0@ | type is at least a 360 movl #0,MMUCMD | clear magic cookie2 movl MMUCMD,d0 | read it back btst #16,d0 | still on? jeq ihpibcheck | no, a 360 - movl #6,a0@ | yes, must be a 345/375/400 + lsrl #8,d0 | save MMU ID + andl #0xff,d0 + cmpb #1,d0 | are we a 345? + jeq isa345 + cmpb #3,d0 | how about a 375? + jeq isa375 + movl #8,a0@ | must be a 400 + jra ihpibcheck +isa345: + movl #6,a0@ + jra ihpibcheck +isa375: + movl #7,a0@ jra ihpibcheck + + /* + * End of 68030 section + */ + not68030: bset #31,d0 | data cache enable bit movc d0,cacr | only exists on 68040 @@ -131,20 +153,45 @@ not68030: beq is68020 | yes, we have 68020 moveq #0,d0 | now turn it back off movec d0,cacr | before we access any data + .long 0x4e7b0004 | movc d0,itt0 .long 0x4e7b0005 | movc d0,itt1 .long 0x4e7b0006 | movc d0,dtt0 .long 0x4e7b0007 | movc d0,dtt1 .word 0xf4d8 | cinva bc + + /* + * 68040 models + */ + movl MMUCMD,d0 | get MMU register - lsrl #8,d0 | get apparent ID - cmpb #6,d0 | id == 6? - jeq is33mhz | yes, we have a 433s - movl #7,a0@ | no, we have a 380/425t + lsrl #8,d0 + andl #0xff,d0 + cmpb #5,d0 | are we a 425t? + jeq isa425 + cmpb #7,d0 | how about 425s? + jeq isa425 + cmpb #4,d0 | or a 433t? + jeq isa433 + cmpb #6,d0 | last chance... + jeq isa433 + movl #9,a0@ | guess we're a 380 jra ihpibcheck -is33mhz: - movl #8,a0@ | 433s (XXX 425s returns same ID, ugh!) +isa425: + movl #10,a0@ jra ihpibcheck +isa433: + movl #11,a0@ + jra ihpibcheck + + /* + * End 68040 section + */ + + /* + * 68020 models + */ + is68020: movl #1,a0@ | consider a 330 for now movl #1,MMUCMD | a 68020, write HP MMU location @@ -157,6 +204,11 @@ is68020: btst #7,d0 | cookie still on? jeq ihpibcheck | no, just a 320 movl #2,a0@ | yes, a 350 + + /* + * End 68020 section + */ + ihpibcheck: movl #0,MMUCMD | make sure MMU is off btst #5,SYSFLAG | do we have an internal HP-IB? @@ -250,19 +302,18 @@ Lstop: nmi: movw #18,BOOTTYPE | mark as system switch - jsr _kbdnmi | clear the interrupt - jra begin | start over + jsr _kbdnmi | clear the interrupt, and + | reset the system + stop #0 | SCREEEECH! .globl _call_req_reboot _call_req_reboot: jmp 0x1A4 | call ROM reboot function rts | XXX: just in case? -#ifdef ROMPRF .globl _romout _romout: movl sp@(4),d0 | line number movl sp@(8),a0 | string jsr 0x150 | do it rts -#endif diff --git a/sys/arch/hp300/stand/uboot.c b/sys/arch/hp300/stand/uboot.c index def37448c71..e7c60a1be6c 100644 --- a/sys/arch/hp300/stand/uboot.c +++ b/sys/arch/hp300/stand/uboot.c @@ -1,5 +1,5 @@ -/* $OpenBSD: uboot.c,v 1.7 1997/04/16 12:38:23 downsj Exp $ */ -/* $NetBSD: uboot.c,v 1.2 1996/10/14 07:33:45 thorpej Exp $ */ +/* $OpenBSD: uboot.c,v 1.8 1997/07/13 07:21:54 downsj Exp $ */ +/* $NetBSD: uboot.c,v 1.3 1997/04/27 21:17:13 thorpej Exp $ */ /*- * Copyright (c) 1982, 1986, 1990, 1993 @@ -40,8 +40,10 @@ #include #include #include -#include "stand.h" -#include "samachdep.h" + +#include + +#include /* * Boot program... bits in `howto' determine whether boot stops to diff --git a/sys/arch/hp300/stand/version.c b/sys/arch/hp300/stand/version.c index afb4723d69b..20220cc5934 100644 --- a/sys/arch/hp300/stand/version.c +++ b/sys/arch/hp300/stand/version.c @@ -1,4 +1,4 @@ -/* $OpenBSD: version.c,v 1.1 1997/04/16 12:38:23 downsj Exp $ */ +/* $OpenBSD: version.c,v 1.2 1997/07/13 07:21:54 downsj Exp $ */ /* * Record major changes in the boot code here, and increment the version @@ -7,6 +7,8 @@ /* * 2.0 INITIAL REVISION + * + * 2.1 APCI support, config changes from NetBSD. */ -const char version[] = "2.0"; +const char version[] = "2.1"; -- cgit v1.2.3