diff options
| author | fvdl <fvdl@NetBSD.org> | 2000-03-15 02:06:18 +0000 |
|---|---|---|
| committer | fvdl <fvdl@NetBSD.org> | 2000-03-15 02:06:18 +0000 |
| commit | 085f68836ef6d46d42dbce40c345f1a7419a5bbf (patch) | |
| tree | 9800414b614113b93e8e75bcf74633a0c14ae2f4 /sys/dev | |
| parent | bb8265c6be582a52c334387d7d4b200a9c7f4af9 (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.c | 138 | ||||
| -rw-r--r-- | sys/dev/ic/aic77xxreg.h | 38 | ||||
| -rw-r--r-- | sys/dev/ic/aic77xxvar.h | 34 |
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)); |
