summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorfvdl <fvdl@NetBSD.org>2000-03-15 02:06:18 +0000
committerfvdl <fvdl@NetBSD.org>2000-03-15 02:06:18 +0000
commit085f68836ef6d46d42dbce40c345f1a7419a5bbf (patch)
tree9800414b614113b93e8e75bcf74633a0c14ae2f4 /sys/dev
parentbb8265c6be582a52c334387d7d4b200a9c7f4af9 (diff)
Common code for EISA and VL frontends for the ahc driver, split off
by Noriyuki Soda when updating for the new ahc driver.
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/ic/aic77xx.c138
-rw-r--r--sys/dev/ic/aic77xxreg.h38
-rw-r--r--sys/dev/ic/aic77xxvar.h34
3 files changed, 210 insertions, 0 deletions
diff --git a/sys/dev/ic/aic77xx.c b/sys/dev/ic/aic77xx.c
new file mode 100644
index 00000000000..b16cb028750
--- /dev/null
+++ b/sys/dev/ic/aic77xx.c
@@ -0,0 +1,138 @@
+/* $NetBSD: aic77xx.c,v 1.1 2000/03/15 02:06:18 fvdl Exp $ */
+
+/*
+ * Common routines for AHA-27/284X and aic7770 motherboard SCSI controllers.
+ *
+ * Copyright (c) 1994, 1995, 1996, 1997, 1998 Justin T. Gibbs.
+ * 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 immediately at the beginning of the file, without modification,
+ * this list of conditions, and the following disclaimer.
+ * 2. 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 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 AUTHOR 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.
+ *
+ * $FreeBSD: src/sys/dev/aic7xxx/ahc_eisa.c,v 1.15 2000/01/29 14:22:19 peter Exp $
+ */
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/device.h>
+
+#include <machine/bus.h>
+#include <machine/intr.h>
+
+#include <dev/scsipi/scsi_all.h>
+#include <dev/scsipi/scsipi_all.h>
+#include <dev/scsipi/scsiconf.h>
+
+#include <dev/microcode/aic7xxx/aic7xxx_reg.h>
+#include <dev/ic/aic7xxxvar.h>
+#include <dev/ic/aic77xxreg.h>
+#include <dev/ic/aic77xxvar.h>
+
+/*
+ * Return irq setting of the board, otherwise -1.
+ */
+int
+ahc_aic77xx_irq(iot, ioh)
+ bus_space_tag_t iot;
+ bus_space_handle_t ioh;
+{
+ int irq;
+ u_int8_t intdef;
+ u_int8_t hcntrl;
+
+ /* Pause the card preseving the IRQ type */
+ hcntrl = bus_space_read_1(iot, ioh, HCNTRL) & IRQMS;
+ bus_space_write_1(iot, ioh, HCNTRL, hcntrl | PAUSE);
+
+ intdef = bus_space_read_1(iot, ioh, INTDEF);
+ irq = (intdef & INTDEF_IRQ_MASK);
+ switch (irq) {
+ case 9:
+ case 10:
+ case 11:
+ case 12:
+ case 14:
+ case 15:
+ break;
+ default:
+ printf("ahc_aic77xx_irq: illegal irq setting %d\n", intdef);
+ return (-1);
+ }
+
+ return (irq);
+}
+
+int
+ahc_aic77xx_attach(ahc)
+ struct ahc_softc *ahc;
+{
+ char *id_string;
+ u_int8_t sblkctl;
+ u_int8_t sblkctl_orig;
+ u_int8_t hostconf;
+
+ /*
+ * See if we have a Rev E or higher aic7770. Anything below a
+ * Rev E will have a R/O autoflush disable configuration bit.
+ */
+ sblkctl_orig = ahc_inb(ahc, SBLKCTL);
+ sblkctl = sblkctl_orig ^ AUTOFLUSHDIS;
+ ahc_outb(ahc, SBLKCTL, sblkctl);
+ sblkctl = ahc_inb(ahc, SBLKCTL);
+ if (sblkctl != sblkctl_orig) {
+ id_string = "aic7770 >= Rev E, ";
+ /*
+ * Ensure autoflush is enabled
+ */
+ sblkctl &= ~AUTOFLUSHDIS;
+ ahc_outb(ahc, SBLKCTL, sblkctl);
+ } else
+ id_string = "aic7770 <= Rev C, ";
+
+ printf("%s: %s", ahc_name(ahc), id_string);
+
+ /* Setup the FIFO threshold and the bus off time */
+ hostconf = ahc_inb(ahc, HOSTCONF);
+ ahc_outb(ahc, BUSSPD, hostconf & DFTHRSH);
+ ahc_outb(ahc, BUSTIME, (hostconf << 2) & BOFF);
+
+ /*
+ * Generic aic7xxx initialization.
+ */
+ if (ahc_init(ahc)) {
+ /*
+ * The board's IRQ line is not yet enabled so it's safe
+ * to release the irq.
+ */
+ return (ENXIO);
+ }
+
+ /*
+ * Enable the board's BUS drivers
+ */
+ ahc_outb(ahc, BCTL, ENABLE);
+
+ /* Attach sub-devices - always succeeds */
+ ahc_attach(ahc);
+
+ return 0;
+}
+
diff --git a/sys/dev/ic/aic77xxreg.h b/sys/dev/ic/aic77xxreg.h
new file mode 100644
index 00000000000..27b7d6275c6
--- /dev/null
+++ b/sys/dev/ic/aic77xxreg.h
@@ -0,0 +1,38 @@
+/* $NetBSD: aic77xxreg.h,v 1.1 2000/03/15 02:06:18 fvdl Exp $ */
+
+/*
+ * Common routines for AHA-27/284X and aic7770 motherboard SCSI controllers.
+ *
+ * Copyright (c) 1994, 1995, 1996, 1997, 1998 Justin T. Gibbs.
+ * 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 immediately at the beginning of the file, without modification,
+ * this list of conditions, and the following disclaimer.
+ * 2. 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 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 AUTHOR 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.
+ *
+ * $FreeBSD: src/sys/dev/aic7xxx/ahc_eisa.c,v 1.15 2000/01/29 14:22:19 peter Exp $
+ */
+
+#define AHC_EISA_SLOT_OFFSET 0xc00
+#define AHC_EISA_IOSIZE 0x100
+
+#define INTDEF 0x5c /* Interrupt Definition Register */
+#define INTDEF_IST_LEVEL 0x80
+#define INTDEF_IRQ_MASK 0x0f
diff --git a/sys/dev/ic/aic77xxvar.h b/sys/dev/ic/aic77xxvar.h
new file mode 100644
index 00000000000..f41330ca4f5
--- /dev/null
+++ b/sys/dev/ic/aic77xxvar.h
@@ -0,0 +1,34 @@
+/* $NetBSD: aic77xxvar.h,v 1.1 2000/03/15 02:06:19 fvdl Exp $ */
+
+/*
+ * Common routines for AHA-27/284X and aic7770 motherboard SCSI controllers.
+ *
+ * Copyright (c) 1994, 1995, 1996, 1997, 1998 Justin T. Gibbs.
+ * 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 immediately at the beginning of the file, without modification,
+ * this list of conditions, and the following disclaimer.
+ * 2. 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 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 AUTHOR 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.
+ *
+ * $FreeBSD: src/sys/dev/aic7xxx/ahc_eisa.c,v 1.15 2000/01/29 14:22:19 peter Exp $
+ */
+
+int ahc_aic77xx_irq __P((bus_space_tag_t, bus_space_handle_t));
+int ahc_aic77xx_attach __P((struct ahc_softc *ahc));