Subject: CVS commit: src/sys/dev
To: None <source-changes@NetBSD.org>
From: Charles M. Hannum <email@example.com>
Date: 09/23/2003 09:19:26
Module Name: src
Committed By: mycroft
Date: Tue Sep 23 09:19:26 UTC 2003
src/sys/dev/ic: wdc.c wdcvar.h
Fix more probe delay and/or failure problems:
1) Don't wait for DRQ on an IDENTIFY command -- if it's not set when we see
BSY clear, abort the command and ignore the drive. (Do this by testing
for DRQ in the read/write cases in __wdccommand_intr().)
2) Don't wait for DRQ to deassert when we finish an IDENTIFY (or any other
non-block command that reads data) -- we don't do this for block I/O, and
empirically it doesn't clear on my CF cards at all, causing a pointless 1s
3) Add comments to some of the delay()s, and add missing ones in wdcreset()
and the WDCC_RECAL in the so-called "pre-ATA" probe.
4) Slightly simplify the reset sequence -- we were doing an extra I/O.
5) Modify the register writability test to make sure that registers are not
overlapped -- this can happen in some weird cases with a missing device 1.
6) Check the error register value after the reset -- if it's not 01h or 81h,
as appropriate (see ATA spec), punt.
Tested with a number of ATA-only, ATAPI-only, mixed ATA-ATAPI, CF, and IDE
Also remove the SINGLE_DRIVE nonsense again.
To generate a diff of this commit:
cvs rdiff -r1.18 -r1.19 src/sys/dev/ata/ata.c
cvs rdiff -r1.130 -r1.131 src/sys/dev/ic/wdc.c
cvs rdiff -r1.38 -r1.39 src/sys/dev/ic/wdcvar.h
cvs rdiff -r1.33 -r1.34 src/sys/dev/isa/wdc_isa.c
cvs rdiff -r1.204 -r1.205 src/sys/dev/pci/pciide.c
cvs rdiff -r1.57 -r1.58 src/sys/dev/pcmcia/wdc_pcmcia.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.