diff options
| author | mycroft <mycroft@NetBSD.org> | 2003-09-23 09:19:22 +0000 |
|---|---|---|
| committer | mycroft <mycroft@NetBSD.org> | 2003-09-23 09:19:22 +0000 |
| commit | f9d629fb934420ba7069d098914ac45ef9eda29d (patch) | |
| tree | 63aff812c48dc131dc9e43b7c01ba6cda6b47cc2 /lib/libc/stdlib | |
| parent | 5a696d0850d2225767665e80f0b221b463a73439 (diff) | |
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
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.
Diffstat (limited to 'lib/libc/stdlib')
0 files changed, 0 insertions, 0 deletions
