Subject: CVS commit: src/sys/dev
To: None <>
From: Charles M. Hannum <>
List: source-changes
Date: 09/23/2003 09:19:26
Module Name:	src
Committed By:	mycroft
Date:		Tue Sep 23 09:19:26 UTC 2003

Modified Files:
	src/sys/dev/ata: ata.c
	src/sys/dev/ic: wdc.c wdcvar.h
	src/sys/dev/isa: wdc_isa.c
	src/sys/dev/pci: pciide.c
	src/sys/dev/pcmcia: wdc_pcmcia.c

Log Message:
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
disk configurations.

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.