summaryrefslogtreecommitdiff
path: root/sys/arch
diff options
context:
space:
mode:
Diffstat (limited to 'sys/arch')
-rw-r--r--sys/arch/hppa/conf/GENERIC10
-rw-r--r--sys/arch/hppa/conf/files.hppa5
-rw-r--r--sys/arch/hppa/gsc/osiop_gsc.c213
3 files changed, 222 insertions, 6 deletions
diff --git a/sys/arch/hppa/conf/GENERIC b/sys/arch/hppa/conf/GENERIC
index 787bb7d6671..01c20f3bf71 100644
--- a/sys/arch/hppa/conf/GENERIC
+++ b/sys/arch/hppa/conf/GENERIC
@@ -1,4 +1,4 @@
-# $OpenBSD: GENERIC,v 1.14 2002/12/19 00:24:40 mickey Exp $
+# $OpenBSD: GENERIC,v 1.15 2003/01/08 02:11:38 krw Exp $
#
# Diskless kernel config
#
@@ -92,9 +92,9 @@ lpt0 at gsc? irq 7 # both com and lpt are on WD16C552
ie0 at gsc0 irq 8 # 82C5[89]6 ether
ie1 at gsc1 irq 8
#tms* at gsc? irq 10 # TMS380C26 Network Controller (either 802.3 or 802.5)
-#siop0 at gsc? irq 9 # NCR 53C700/710
-#siop1 at gsc? irq 3 # NCR 53C720 (Fast/Wide)
-#scsibus* at siop?
+osiop0 at gsc? irq 9 # NCR 53C700/710
+#osiop1 at gsc? irq 3 # NCR 53C720 (Fast/Wide)
+scsibus* at osiop?
#aone* at gsc? irq 13 # Audio Type 1 (PSB 2160-N)
#audio* at aone?
#harmony* at gsc? irq 13 # Audio Type 2 (CS4215/AD1849)
@@ -131,7 +131,7 @@ ie1 at gsc1 irq 8
#fd* at fdc? drive ? # floppy drives
-#sd* at scsibus? target ? lun ?
+sd* at scsibus? target ? lun ?
#st* at scsibus? target ? lun ?
#cd* at scsibus? target ? lun ?
#ch* at scsibus? target ? lun ?
diff --git a/sys/arch/hppa/conf/files.hppa b/sys/arch/hppa/conf/files.hppa
index 8d328d1de17..0909280c59e 100644
--- a/sys/arch/hppa/conf/files.hppa
+++ b/sys/arch/hppa/conf/files.hppa
@@ -1,4 +1,4 @@
-# $OpenBSD: files.hppa,v 1.36 2002/12/18 23:52:41 mickey Exp $
+# $OpenBSD: files.hppa,v 1.37 2003/01/08 02:11:38 krw Exp $
#
# hppa-specific configuration info
@@ -149,6 +149,9 @@ file arch/hppa/gsc/if_ie_gsc.c ie_gsc
attach siop at gsc
file arch/hppa/gsc/siop_gsc.c siop
+attach osiop at gsc
+file arch/hppa/gsc/osiop_gsc.c osiop
+
device hil: tty
attach hil at gsc
file arch/hppa/gsc/hil.c hil
diff --git a/sys/arch/hppa/gsc/osiop_gsc.c b/sys/arch/hppa/gsc/osiop_gsc.c
new file mode 100644
index 00000000000..1ad2728258d
--- /dev/null
+++ b/sys/arch/hppa/gsc/osiop_gsc.c
@@ -0,0 +1,213 @@
+/* $OpenBSD: osiop_gsc.c,v 1.1 2003/01/08 02:11:38 krw Exp $ */
+/* $NetBSD: osiop_gsc.c,v 1.6 2002/10/02 05:17:50 thorpej Exp $ */
+
+/*
+ * Copyright (c) 2001 Matt Fredette. All rights reserved.
+ * Copyright (c) 2001 Izumi Tsutsui. All rights reserved.
+ *
+ * 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. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``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 AUTHORS 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.
+ */
+
+/* $OpenBSD: osiop_gsc.c,v 1.1 2003/01/08 02:11:38 krw Exp $ */
+
+/*
+ * Copyright (c) 1998 Michael Shalayeff
+ * All rights reserved.
+ *
+ * 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 Michael Shalayeff.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+ */
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/device.h>
+#include <sys/buf.h>
+#include <sys/malloc.h>
+
+#include <scsi/scsi_all.h>
+#include <scsi/scsiconf.h>
+
+#include <machine/cpu.h>
+#include <machine/intr.h>
+#include <machine/iomod.h>
+#include <machine/autoconf.h>
+#include <machine/bus.h>
+
+#include <dev/ic/osiopreg.h>
+#include <dev/ic/osiopvar.h>
+
+#include <hppa/dev/cpudevs.h>
+#include <hppa/gsc/gscbusvar.h>
+/* #include <hppa/hppa/machdep.h> */
+
+#define OSIOP_GSC_RESET 0x0000
+#define OSIOP_GSC_OFFSET 0x0100
+
+int osiop_gsc_match(struct device *, void *, void *);
+void osiop_gsc_attach(struct device *, struct device *, void *);
+int osiop_gsc_intr(void *);
+
+struct cfattach osiop_ca = {
+ sizeof(struct osiop_softc),
+ osiop_gsc_match,
+ osiop_gsc_attach
+};
+
+int
+osiop_gsc_match(parent, match, aux)
+ struct device *parent;
+ void *match, *aux;
+{
+ struct gsc_attach_args *ga = aux;
+ bus_space_handle_t ioh;
+ int rv = 1;
+
+ if (ga->ga_type.iodc_type != HPPA_TYPE_FIO ||
+ (ga->ga_type.iodc_sv_model != HPPA_FIO_GSCSI &&
+ ga->ga_type.iodc_sv_model != HPPA_FIO_SCSI))
+ return 0;
+
+ if (bus_space_map(ga->ga_iot, ga->ga_hpa,
+ OSIOP_GSC_OFFSET + OSIOP_NREGS, 0, &ioh))
+ return 0;
+
+
+ bus_space_unmap(ga->ga_iot, ioh, OSIOP_GSC_OFFSET + OSIOP_NREGS);
+ return rv;
+}
+
+void
+osiop_gsc_attach(parent, self, aux)
+ struct device *parent, *self;
+ void *aux;
+{
+ register struct osiop_softc *sc = (void *)self;
+ register struct gsc_attach_args *ga = aux;
+ bus_space_handle_t ioh;
+
+ sc->sc_bst = ga->ga_iot;
+ sc->sc_dmat = ga->ga_dmatag;
+ if (bus_space_map(sc->sc_bst, ga->ga_hpa,
+ OSIOP_GSC_OFFSET + OSIOP_NREGS, 0, &ioh))
+ panic("osiop_gsc_attach: couldn't map I/O ports");
+ if (bus_space_subregion(sc->sc_bst, ioh,
+ OSIOP_GSC_OFFSET, OSIOP_NREGS, &sc->sc_reg))
+ panic("osiop_gsc_attach: couldn't get chip ports");
+
+ sc->sc_clock_freq = ga->ga_ca.ca_pdc_iodc_read->filler2[14] / 1000000;
+ if (!sc->sc_clock_freq)
+ sc->sc_clock_freq = 50;
+
+ if (ga->ga_ca.ca_type.iodc_sv_model == HPPA_FIO_GSCSI) {
+ sc->sc_ctest7 = 0; /* | OSIOP_CTEST7_TT1 */
+ sc->sc_dcntl = OSIOP_DCNTL_EA;
+ } else {
+ sc->sc_ctest7 = 0;
+ sc->sc_dcntl = 0;
+ }
+
+ sc->sc_flags = 0;
+ sc->sc_id = 7;
+
+ /*
+ * Reset the SCSI subsystem.
+ */
+ bus_space_write_1(sc->sc_bst, ioh, OSIOP_GSC_RESET, 0);
+ DELAY(1000);
+
+ /*
+ * Call common attachment
+ */
+#ifdef OSIOP_DEBUG
+ {
+ extern int osiop_debug;
+ osiop_debug = -1;
+ }
+#endif /* OSIOP_DEBUG */
+ osiop_attach(sc);
+
+ (void)gsc_intr_establish((struct gsc_softc *)parent, IPL_BIO,
+ ga->ga_irq, osiop_gsc_intr, sc, &sc->sc_dev);
+}
+
+/*
+ * interrupt handler
+ */
+int
+osiop_gsc_intr(arg)
+ void *arg;
+{
+ struct osiop_softc *sc = arg;
+ u_int8_t istat;
+
+ /* This is potentially nasty, since the IRQ is level triggered... */
+ if (sc->sc_flags & OSIOP_INTSOFF)
+ return (0);
+
+ istat = osiop_read_1(sc, OSIOP_ISTAT);
+
+ if ((istat & (OSIOP_ISTAT_SIP | OSIOP_ISTAT_DIP)) == 0)
+ return (0);
+
+ /* Save interrupt details for the back-end interrupt handler */
+ sc->sc_sstat0 = osiop_read_1(sc, OSIOP_SSTAT0);
+ sc->sc_istat = istat;
+ /*
+ * Per page 4-18 of the LSI 53C710 Technical Manual,
+ * "insert a delay equivalent to 12 BCLK periods between
+ * the reads [of DSTAT and SSTAT0] to ensure that the
+ * interrupts clear properly."
+ */
+ DELAY(100);
+ sc->sc_dstat = osiop_read_1(sc, OSIOP_DSTAT);
+
+ /* Deal with the interrupt */
+ osiop_intr(sc);
+
+ /* Blink the LED. */
+ /* hp700_led_blink(HP700_LED_DISK); */
+
+ return (1);
+}