According to ATA-4 specification, the error and device-fault
bit (and all other status register bits) are only valid when the busy bit is zero. This makes PIO mode work on a WD Raptor. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30443 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
380ed9afdd
commit
4a2e45ea36
@ -394,12 +394,14 @@ ATAChannel::Wait(uint8 setBits, uint8 clearedBits, uint32 flags,
|
|||||||
while (true) {
|
while (true) {
|
||||||
uint8 status = AltStatus();
|
uint8 status = AltStatus();
|
||||||
if ((flags & ATA_CHECK_ERROR_BIT) != 0
|
if ((flags & ATA_CHECK_ERROR_BIT) != 0
|
||||||
|
&& (status & ATA_STATUS_BUSY) == 0
|
||||||
&& (status & ATA_STATUS_ERROR) != 0) {
|
&& (status & ATA_STATUS_ERROR) != 0) {
|
||||||
TRACE("error bit set while waiting\n");
|
TRACE("error bit set while waiting\n");
|
||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((flags & ATA_CHECK_DEVICE_FAULT) != 0
|
if ((flags & ATA_CHECK_DEVICE_FAULT) != 0
|
||||||
|
&& (status & ATA_STATUS_BUSY) == 0
|
||||||
&& (status & ATA_STATUS_DEVICE_FAULT) != 0) {
|
&& (status & ATA_STATUS_DEVICE_FAULT) != 0) {
|
||||||
TRACE("device fault bit set while waiting\n");
|
TRACE("device fault bit set while waiting\n");
|
||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
|
Loading…
Reference in New Issue
Block a user