From 46d4978e3958db5b8acc10ec0b6e3da31cae3028 Mon Sep 17 00:00:00 2001 From: Warner Losh Date: Wed, 25 Nov 1998 19:12:56 +0000 Subject: [PATCH] o Patch, slightly altered, from Graham Menhennitt for older aha 1542B cards. My machine didn't tickle this problem, so I can't tell if it fixed anything or not. However, it didn't break my already working 1542-{B,C,CF,CP} probes. o Minor comment correction o Minor correction in printf --- sys/dev/aha/aha.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/sys/dev/aha/aha.c b/sys/dev/aha/aha.c index a5bfa2f427b..e892865700e 100644 --- a/sys/dev/aha/aha.c +++ b/sys/dev/aha/aha.c @@ -55,7 +55,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: aha.c,v 1.11 1998/11/10 06:44:42 gibbs Exp $ + * $Id: aha.c,v 1.12 1998/11/10 06:47:09 gibbs Exp $ */ #include @@ -351,9 +351,18 @@ aha_probe(struct aha_softc* aha) * this register, and return 0xff, while buslogic cards will return * something different. * - * XXX I'm not sure how this will impact other cloned cards. + * It appears that for reasons unknow, for the for the + * aha-1542B cards, we need to wait a little bit before trying + * to read the geometry register. I picked 10ms since we have + * reports that a for loop to 1000 did the trick, and this + * errs on the side of conservatism. Besides, no one will + * notice a 10mS delay here, even the 1542B card users :-) + * + * XXX I'm not sure how this will impact other cloned cards */ if (aha->boardid <= 0x42) { + /* Wait 10ms before reading */ + DELAY(10000); status = aha_inb(aha, GEOMETRY_REG); if (status != 0xff) { PRVERB(("%s: Geometry Register test failed\n", @@ -426,10 +435,10 @@ aha_fetch_adapter_info(struct aha_softc *aha) /*paramlen*/2, NULL, 0, DEFAULT_CMD_TIMEOUT); } if (aha->boardid < 0x41) - printf("%s: Likely aha 1542A, which might not work properly\n", + printf("%s: Warning: aha-1542A won't likely work.\n", aha_name(aha)); - aha->max_sg = 17; /* Need 17 to do 64k I/O */ + aha->max_sg = 17; /* Need >= 17 to do 64k I/O */ aha->diff_bus = 0; aha->extended_lun = 0; aha->extended_trans = 0; @@ -611,8 +620,8 @@ aha_attach(struct aha_softc *aha) struct cam_devq *devq; /* - * We reserve 1 ccb for error recovery, so don't - * tell the XPT about it. + * We don't do tagged queueing, since the aha cards don't + * support it. */ tagged_dev_openings = 0;