diff options
| author | fvdl <fvdl@NetBSD.org> | 2003-04-19 19:35:34 +0000 |
|---|---|---|
| committer | fvdl <fvdl@NetBSD.org> | 2003-04-19 19:35:34 +0000 |
| commit | 0d9c871cee56ec9d12a5f4f47bdd15cd04a53165 (patch) | |
| tree | 7ea15ba4d13fe007dc5b9dfd713f88fc29071709 /sys/dev | |
| parent | 79bdc751aa36920dd80e39ca2d0490ea64f40100 (diff) | |
Adapt to newer backend. Needs testing.
Diffstat (limited to 'sys/dev')
| -rw-r--r-- | sys/dev/eisa/ahc_eisa.c | 75 |
1 files changed, 37 insertions, 38 deletions
diff --git a/sys/dev/eisa/ahc_eisa.c b/sys/dev/eisa/ahc_eisa.c index d4f10c46db9..a79eda2f336 100644 --- a/sys/dev/eisa/ahc_eisa.c +++ b/sys/dev/eisa/ahc_eisa.c @@ -1,4 +1,4 @@ -/* $NetBSD: ahc_eisa.c,v 1.24 2002/10/02 16:33:45 thorpej Exp $ */ +/* $NetBSD: ahc_eisa.c,v 1.25 2003/04/19 19:35:34 fvdl Exp $ */ /* * Product specific probe and attach routines for: @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ahc_eisa.c,v 1.24 2002/10/02 16:33:45 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ahc_eisa.c,v 1.25 2003/04/19 19:35:34 fvdl Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -51,8 +51,8 @@ __KERNEL_RCSID(0, "$NetBSD: ahc_eisa.c,v 1.24 2002/10/02 16:33:45 thorpej Exp $" #include <dev/eisa/eisavar.h> #include <dev/eisa/eisadevs.h> -#include <dev/microcode/aic7xxx/aic7xxx_reg.h> -#include <dev/ic/aic7xxxvar.h> +#include <dev/ic/aic7xxx_osm.h> +#include <dev/ic/aic7xxx_inline.h> #include <dev/ic/aic77xxreg.h> #include <dev/ic/aic77xxvar.h> @@ -111,53 +111,57 @@ ahc_eisa_attach(parent, self, aux) u_int biosctrl; u_int scsiconf; u_int scsiconf1; -#if DEBUG + u_char intdef; +#ifdef DEBUG int i; #endif if (bus_space_map(iot, EISA_SLOT_ADDR(ea->ea_slot) + - AHC_EISA_SLOT_OFFSET, AHC_EISA_IOSIZE, 0, &ioh)) - panic("%s: could not map I/O addresses", ahc->sc_dev.dv_xname); - if ((irq = ahc_aic77xx_irq(iot, ioh)) < 0) - panic("%s: ahc_aic77xx_irq failed!", ahc->sc_dev.dv_xname); + AHC_EISA_SLOT_OFFSET, AHC_EISA_IOSIZE, 0, &ioh)) { + printf("%s: could not map I/O addresses", ahc->sc_dev.dv_xname); + return; + } + if ((irq = ahc_aic77xx_irq(iot, ioh)) < 0) { + printf("%s: ahc_aic77xx_irq failed!", ahc->sc_dev.dv_xname); + goto free_io; + } if (strcmp(ea->ea_idstring, "ADP7770") == 0) { printf(": %s\n", EISA_PRODUCT_ADP7770); } else if (strcmp(ea->ea_idstring, "ADP7771") == 0) { printf(": %s\n", EISA_PRODUCT_ADP7771); } else { - panic(": Unknown device type %s", ea->ea_idstring); - } - - if (ahc_alloc(ahc, ioh, iot, ea->ea_dmat, - AHC_AIC7770|AHC_EISA, AHC_AIC7770_FE, AHC_FNONE) < 0) + printf(": Unknown device type %s", ea->ea_idstring); goto free_io; + } + ahc->chip = AHC_AIC7770|AHC_EISA; + ahc->features = AHC_AIC7770_FE; + ahc->flags = AHC_PAGESCBS; + ahc->bugs = AHC_TMODE_WIDEODD_BUG; + ahc->tag = iot; + ahc->bsh = ioh; ahc->channel = 'A'; - ahc->channel_b = 'B'; + + ahc_intr_enable(ahc, FALSE); + if (ahc_reset(ahc) != 0) - goto free_ahc; + goto free_io; if (eisa_intr_map(ec, irq, &ih)) { printf("%s: couldn't map interrupt (%d)\n", ahc->sc_dev.dv_xname, irq); - goto free_ahc; + goto free_io; } - /* - * The IRQMS bit enables level sensitive interrupts. Only allow - * IRQ sharing if it's set. - * NOTE: ahc->pause is initialized in ahc_alloc(). - * - * Tell the user what type of interrupts we're using. - * usefull for debugging irq problems - */ - if (ahc->pause & IRQMS) { - intrtype = IST_LEVEL; - intrtypestr = "level sensitive"; - } else { + intdef = bus_space_read_1(iot, ioh, INTDEF); + + if (intdef & EDGE_TRIG) { intrtype = IST_EDGE; intrtypestr = "edge triggered"; + } else { + intrtype = IST_LEVEL; + intrtypestr = "level sensitive"; } intrstr = eisa_intr_string(ec, ih); ahc->ih = eisa_intr_establish(ec, ih, @@ -168,7 +172,7 @@ ahc_eisa_attach(parent, self, aux) if (intrstr != NULL) printf(" at %s", intrstr); printf("\n"); - goto free_ahc; + goto free_io; } if (intrstr != NULL) printf("%s: %s interrupting at %s\n", ahc->sc_dev.dv_xname, @@ -201,7 +205,7 @@ ahc_eisa_attach(parent, self, aux) /* Get the primary channel information */ if ((biosctrl & CHANNEL_B_PRIMARY) != 0) - ahc->flags |= AHC_CHANNEL_B_PRIMARY; + ahc->flags |= AHC_PRIMARY_CHANNEL; if ((biosctrl & BIOSMODE) == BIOSDISABLED) { ahc->flags |= AHC_USEDEFAULTS; @@ -217,11 +221,8 @@ ahc_eisa_attach(parent, self, aux) if (scsiconf1 & TERM_ENB) ahc->flags |= AHC_TERM_ENB_B; } - /* - * We have no way to tell, so assume extended - * translation is enabled. - */ - ahc->flags |= AHC_EXTENDED_TRANS_A|AHC_EXTENDED_TRANS_B; + if ((ahc_inb(ahc, HA_274_BIOSGLOBAL) & HA_274_EXTENDED_TRANS)) + ahc->flags |= AHC_EXTENDED_TRANS_A|AHC_EXTENDED_TRANS_B; /* Attach sub-devices */ if (ahc_aic77xx_attach(ahc) == 0) @@ -229,8 +230,6 @@ ahc_eisa_attach(parent, self, aux) /* failed */ eisa_intr_disestablish(ec, ahc->ih); -free_ahc: - ahc_free(ahc); free_io: bus_space_unmap(iot, ioh, AHC_EISA_IOSIZE); } |
