summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorfvdl <fvdl@NetBSD.org>2003-04-19 19:35:34 +0000
committerfvdl <fvdl@NetBSD.org>2003-04-19 19:35:34 +0000
commit0d9c871cee56ec9d12a5f4f47bdd15cd04a53165 (patch)
tree7ea15ba4d13fe007dc5b9dfd713f88fc29071709 /sys/dev
parent79bdc751aa36920dd80e39ca2d0490ea64f40100 (diff)
Adapt to newer backend. Needs testing.
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/eisa/ahc_eisa.c75
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);
}