diff options
author | Kenneth R Westerback <krw@cvs.openbsd.org> | 2003-12-24 23:39:41 +0000 |
---|---|---|
committer | Kenneth R Westerback <krw@cvs.openbsd.org> | 2003-12-24 23:39:41 +0000 |
commit | 8729270c341340bfec8520bf54e99740fab975e0 (patch) | |
tree | 0e997ee619c40c17c022e18340053d903880382a /sys/arch/i386/isa/ahc_isa.c | |
parent | 4f844a2461025f3d1f55c557d2d2fbbe12ce5f5d (diff) |
Sync ahc with NetBSD, which was in turn updated from FreeBSD by Pascal
Renauld of Network Storage Solutions, Inc. Many fixes, wider device
support. In particular, the notorious 'Target 0' problem seems to be
fixed.
Does *not* include any updates to isa or eisa code beyond what was
necessary to compile.
Known issues:
1) Tagged Queuing is probably not optimal.
2) PPR negotiation may not be fully functional.
3) No support yet for freezing devices or channels.
4) The mechanism for preventing 'A' and 'B' channel confusion during probe
can fail if scsibus > 254 found.
5) Requeuing I/O's not working. A workaround will be committed almost
immediately. At the moment timeouts, SCSI message rejects, aborting
SCB's and trying to freeze a device may cause incomplete i/o's to be
reported as complete.
6) Verbosity and probe messages need work.
7) Last disk on bus seems to go through an extra re-negotiation.
8) >16 devices on an adapter will trigger the usual problems of total
openings exceeding available SCB's under heavy load.
Tested by deraadt@, beck@, miod@, naddy@, drahn@, marc@ amoung
others.
ok deraadt@.
Diffstat (limited to 'sys/arch/i386/isa/ahc_isa.c')
-rw-r--r-- | sys/arch/i386/isa/ahc_isa.c | 19 |
1 files changed, 3 insertions, 16 deletions
diff --git a/sys/arch/i386/isa/ahc_isa.c b/sys/arch/i386/isa/ahc_isa.c index c4fb4454299..da74e31f27c 100644 --- a/sys/arch/i386/isa/ahc_isa.c +++ b/sys/arch/i386/isa/ahc_isa.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ahc_isa.c,v 1.11 2003/08/15 23:01:00 fgsch Exp $ */ +/* $OpenBSD: ahc_isa.c,v 1.12 2003/12/24 23:39:40 krw Exp $ */ /* $NetBSD: ahc_isa.c,v 1.5 1996/10/21 22:27:39 thorpej Exp $ */ /* @@ -82,7 +82,6 @@ #include <dev/eisa/eisavar.h> #include <dev/eisa/eisadevs.h> -#include <dev/ic/aic7xxxreg.h> #include <dev/ic/aic7xxx_openbsd.h> #include <dev/ic/aic7xxx_inline.h> #include <dev/ic/smc93cx6var.h> @@ -354,20 +353,12 @@ ahc_isa_attach(parent, self, aux) char idstring[EISA_IDSTRINGLEN]; const char *model; u_int intdef; - /* - * We really don't allocate our softc, but - * we need to do the initialization. And this - * also allocates the platform_data structure. - */ - ahc_alloc(ahc, ahc->sc_dev.dv_xname); ahc_set_name(ahc, ahc->sc_dev.dv_xname); ahc_set_unit(ahc, ahc->sc_dev.dv_unit); /* set dma tags */ ahc->parent_dmat = ia->ia_dmat; - ahc->buffer_dmat = ia->ia_dmat; - ahc->shared_data_dmat = ia->ia_dmat; ahc->chip = AHC_VL; /* We are a VL Bus Controller */ @@ -388,7 +379,6 @@ ahc_isa_attach(parent, self, aux) printf(": %s\n", model); ahc->channel = 'A'; - ahc->channel_b = 'B'; ahc->chip = AHC_AIC7770; ahc->features = AHC_AIC7770_FE; ahc->bugs |= AHC_TMODE_WIDEODD_BUG; @@ -471,9 +461,6 @@ ahc_isa_attach(parent, self, aux) return; } - /* Special func to force negotiation */ - ahc_force_neg(ahc); - /* * Link this softc in with all other ahc instances. */ @@ -488,10 +475,10 @@ ahc_isa_attach(parent, self, aux) * The IRQMS bit enables level sensitive interrupts only allow * IRQ sharing if its set. */ - ahc->platform_data->ih = isa_intr_establish(ia->ia_ic, irq, + ahc->ih = isa_intr_establish(ia->ia_ic, irq, ahc->pause & IRQMS ? IST_LEVEL : IST_EDGE, IPL_BIO, ahc_platform_intr, ahc, ahc->sc_dev.dv_xname); - if (ahc->platform_data->ih == NULL) { + if (ahc->ih == NULL) { printf("%s: couldn't establish interrupt\n", ahc->sc_dev.dv_xname); ahc_free(ahc); |