f9d629fb93
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 delay. 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. |
||
---|---|---|
.. | ||
ata_raid_promise.c | ||
ata_raid.c | ||
ata_raidreg.h | ||
ata_raidvar.h | ||
ata_wdc.c | ||
ata.c | ||
atareg.h | ||
atavar.h | ||
files.ata | ||
ld_ataraid.c | ||
Makefile | ||
wd.c | ||
wdvar.h |