From 1dd1504980fb35741650c88a42e18d04b2825fec Mon Sep 17 00:00:00 2001 From: mycroft Date: Fri, 7 Feb 1997 17:37:27 +0000 Subject: [PATCH] Move the aha ISA probe functions into a separate file. --- sys/conf/files | 6 +- sys/dev/{isa => ic}/aha.c | 92 +------------------------ sys/dev/{isa => ic}/ahareg.h | 2 +- sys/dev/{isa => ic}/ahavar.h | 2 +- sys/dev/isa/aha_isa.c | 130 +++++++++++++++++++++++++++++++++++ sys/dev/isa/files.isa | 6 +- 6 files changed, 143 insertions(+), 95 deletions(-) rename sys/dev/{isa => ic}/aha.c (93%) rename sys/dev/{isa => ic}/ahareg.h (99%) rename sys/dev/{isa => ic}/ahavar.h (97%) create mode 100644 sys/dev/isa/aha_isa.c diff --git a/sys/conf/files b/sys/conf/files index 0f9837363146..9427feaa9d9d 100644 --- a/sys/conf/files +++ b/sys/conf/files @@ -1,4 +1,4 @@ -# $NetBSD: files,v 1.112 1997/02/02 21:16:25 thorpej Exp $ +# $NetBSD: files,v 1.113 1997/02/07 17:37:27 mycroft Exp $ # @(#)files.newconf 7.5 (Berkeley) 5/10/93 @@ -49,6 +49,10 @@ file ipkdb/ipkdb_ppp.c ipkdbppp needs-flag device ahc: scsi file dev/ic/aic7xxx.c ahc +# Adaptec AHA-154x and AHA-164x controllers +device aha: scsi +file dev/ic/aha.c aha + # BusLogic MultiMaster and MultiMaster Ultra SCSI controllers device bha: scsi file dev/ic/bha.c bha diff --git a/sys/dev/isa/aha.c b/sys/dev/ic/aha.c similarity index 93% rename from sys/dev/isa/aha.c rename to sys/dev/ic/aha.c index 7b0249295659..88d6c4795ed4 100644 --- a/sys/dev/isa/aha.c +++ b/sys/dev/ic/aha.c @@ -1,4 +1,4 @@ -/* $NetBSD: aha.c,v 1.19 1996/12/10 21:27:49 thorpej Exp $ */ +/* $NetBSD: aha.c,v 1.1 1997/02/07 17:37:29 mycroft Exp $ */ #undef AHADIAG #ifdef DDB @@ -69,10 +69,8 @@ #include #include -#include -#include -#include -#include +#include +#include #ifndef DDB #define Debugger() panic("should call debugger here (aha1542.c)") @@ -118,15 +116,6 @@ struct scsi_device aha_dev = { NULL, /* Use default 'done' routine */ }; -#define AHA_ISA_IOSIZE 4 - -int aha_isa_probe __P((struct device *, void *, void *)); -void aha_isa_attach __P((struct device *, struct device *, void *)); - -struct cfattach aha_isa_ca = { - sizeof(struct aha_softc), aha_isa_probe, aha_isa_attach -}; - struct cfdriver aha_cd = { NULL, "aha", DV_DULL }; @@ -266,81 +255,6 @@ aha_cmd(iot, ioh, sc, icnt, ibuf, ocnt, obuf) return (0); } -/* - * Check if the device can be found at the port given - * and if so, set it up ready for further work - * as an argument, takes the isa_device structure from - * autoconf.c - */ -int -aha_isa_probe(parent, match, aux) - struct device *parent; - void *match, *aux; -{ - struct isa_attach_args *ia = aux; - struct aha_softc sc; - bus_space_tag_t iot = ia->ia_iot; - bus_space_handle_t ioh; - int rv; - - if (bus_space_map(iot, ia->ia_iobase, AHA_ISA_IOSIZE, 0, &ioh)) - return (0); - - rv = aha_find(iot, ioh, &sc); - - bus_space_unmap(iot, ioh, AHA_ISA_IOSIZE); - - if (rv) { - if (ia->ia_irq != -1 && ia->ia_irq != sc.sc_irq) - return (0); - if (ia->ia_drq != -1 && ia->ia_drq != sc.sc_drq) - return (0); - ia->ia_irq = sc.sc_irq; - ia->ia_drq = sc.sc_drq; - ia->ia_msize = 0; - ia->ia_iosize = AHA_ISA_IOSIZE; - } - return (rv); -} - -/* - * Attach all the sub-devices we can find - */ -void -aha_isa_attach(parent, self, aux) - struct device *parent, *self; - void *aux; -{ - struct isa_attach_args *ia = aux; - struct aha_softc *sc = (void *)self; - bus_space_tag_t iot = ia->ia_iot; - bus_space_handle_t ioh; - isa_chipset_tag_t ic = ia->ia_ic; - - printf("\n"); - - if (bus_space_map(iot, ia->ia_iobase, AHA_ISA_IOSIZE, 0, &ioh)) - panic("aha_attach: bus_space_map failed!"); - - sc->sc_iot = iot; - sc->sc_ioh = ioh; - if (!aha_find(iot, ioh, sc)) - panic("aha_attach: aha_find failed!"); - - if (sc->sc_drq != -1) - isa_dmacascade(sc->sc_drq); - - sc->sc_ih = isa_intr_establish(ic, sc->sc_irq, IST_EDGE, IPL_BIO, - aha_intr, sc); - if (sc->sc_ih == NULL) { - printf("%s: couldn't establish interrupt\n", - sc->sc_dev.dv_xname); - return; - } - - aha_attach(sc); -} - void aha_attach(sc) struct aha_softc *sc; diff --git a/sys/dev/isa/ahareg.h b/sys/dev/ic/ahareg.h similarity index 99% rename from sys/dev/isa/ahareg.h rename to sys/dev/ic/ahareg.h index 7d216b046b26..922276e53d5c 100644 --- a/sys/dev/isa/ahareg.h +++ b/sys/dev/ic/ahareg.h @@ -1,4 +1,4 @@ -/* $NetBSD: ahareg.h,v 1.4 1997/01/15 07:06:42 mikel Exp $ */ +/* $NetBSD: ahareg.h,v 1.1 1997/02/07 17:37:29 mycroft Exp $ */ /* * Copyright (c) 1994, 1996 Charles M. Hannum. All rights reserved. diff --git a/sys/dev/isa/ahavar.h b/sys/dev/ic/ahavar.h similarity index 97% rename from sys/dev/isa/ahavar.h rename to sys/dev/ic/ahavar.h index 24efc447ebd8..541201eb99eb 100644 --- a/sys/dev/isa/ahavar.h +++ b/sys/dev/ic/ahavar.h @@ -1,4 +1,4 @@ -/* $NetBSD: ahavar.h,v 1.2 1996/10/21 22:40:20 thorpej Exp $ */ +/* $NetBSD: ahavar.h,v 1.1 1997/02/07 17:37:30 mycroft Exp $ */ /* * Copyright (c) 1994, 1996 Charles M. Hannum. All rights reserved. diff --git a/sys/dev/isa/aha_isa.c b/sys/dev/isa/aha_isa.c new file mode 100644 index 000000000000..91fc935c35a0 --- /dev/null +++ b/sys/dev/isa/aha_isa.c @@ -0,0 +1,130 @@ +/* $NetBSD: aha_isa.c,v 1.1 1997/02/07 17:37:32 mycroft Exp $ */ + +/* + * Copyright (c) 1994, 1996 Charles M. Hannum. 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 Charles M. Hannum. + * 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 +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include + +#include +#include + +#define AHA_ISA_IOSIZE 4 + +int aha_isa_probe __P((struct device *, void *, void *)); +void aha_isa_attach __P((struct device *, struct device *, void *)); + +struct cfattach aha_isa_ca = { + sizeof(struct aha_softc), aha_isa_probe, aha_isa_attach +}; + +/* + * Check the slots looking for a board we recognise + * If we find one, note it's address (slot) and call + * the actual probe routine to check it out. + */ +int +aha_isa_probe(parent, match, aux) + struct device *parent; + void *match, *aux; +{ + struct isa_attach_args *ia = aux; + struct aha_softc sc; + bus_space_tag_t iot = ia->ia_iot; + bus_space_handle_t ioh; + int rv; + + if (bus_space_map(iot, ia->ia_iobase, AHA_ISA_IOSIZE, 0, &ioh)) + return (0); + + rv = aha_find(iot, ioh, &sc); + + bus_space_unmap(iot, ioh, AHA_ISA_IOSIZE); + + if (rv) { + if (ia->ia_irq != -1 && ia->ia_irq != sc.sc_irq) + return (0); + if (ia->ia_drq != -1 && ia->ia_drq != sc.sc_drq) + return (0); + ia->ia_irq = sc.sc_irq; + ia->ia_drq = sc.sc_drq; + ia->ia_msize = 0; + ia->ia_iosize = AHA_ISA_IOSIZE; + } + return (rv); +} + +/* + * Attach all the sub-devices we can find + */ +void +aha_isa_attach(parent, self, aux) + struct device *parent, *self; + void *aux; +{ + struct isa_attach_args *ia = aux; + struct aha_softc *sc = (void *)self; + bus_space_tag_t iot = ia->ia_iot; + bus_space_handle_t ioh; + isa_chipset_tag_t ic = ia->ia_ic; + + printf("\n"); + + if (bus_space_map(iot, ia->ia_iobase, AHA_ISA_IOSIZE, 0, &ioh)) + panic("aha_attach: bus_space_map failed!"); + + sc->sc_iot = iot; + sc->sc_ioh = ioh; + if (!aha_find(iot, ioh, sc)) + panic("aha_attach: aha_find failed!"); + + if (sc->sc_drq != -1) + isa_dmacascade(sc->sc_drq); + + sc->sc_ih = isa_intr_establish(ic, sc->sc_irq, IST_EDGE, IPL_BIO, + aha_intr, sc); + if (sc->sc_ih == NULL) { + printf("%s: couldn't establish interrupt\n", + sc->sc_dev.dv_xname); + return; + } + + aha_attach(sc); +} diff --git a/sys/dev/isa/files.isa b/sys/dev/isa/files.isa index 38e20e8cf70a..99fe449391bd 100644 --- a/sys/dev/isa/files.isa +++ b/sys/dev/isa/files.isa @@ -1,4 +1,4 @@ -# $NetBSD: files.isa,v 1.25 1997/01/16 21:03:30 christos Exp $ +# $NetBSD: files.isa,v 1.26 1997/02/07 17:37:34 mycroft Exp $ # # Config.new file and device description for machine-independent ISA code. # Included by ports that need it. Requires that the SCSI files be @@ -63,9 +63,9 @@ file dev/isa/lpt.c lpt needs-flag # # Adaptec AHA-154x family -device aha: scsi +# device declaration in sys/conf/files attach aha at isa with aha_isa: isadma -file dev/isa/aha.c aha +file dev/isa/aha_isa.c aha_isa # Adaptec AIC-6[32]60 ICs device aic: scsi, isadma