improved timeout handling
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23475 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -21,6 +21,8 @@
|
|||||||
|
|
||||||
static void ata_exec_dma_transfer(ata_request *request);
|
static void ata_exec_dma_transfer(ata_request *request);
|
||||||
static void ata_exec_pio_transfer(ata_request *request);
|
static void ata_exec_pio_transfer(ata_request *request);
|
||||||
|
status_t ata_wait_idle(ide_bus_info *bus);
|
||||||
|
status_t ata_read_status(ide_device_info *device, uint8 *status);
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -812,7 +814,7 @@ ata_exec_pio_transfer(ata_request *request)
|
|||||||
{
|
{
|
||||||
ide_device_info *device = request->device;
|
ide_device_info *device = request->device;
|
||||||
ide_bus_info *bus = device->bus;
|
ide_bus_info *bus = device->bus;
|
||||||
uint32 timeout = request->ccb->timeout > 0 ?
|
bigtime_t timeout = request->ccb->timeout > 0 ?
|
||||||
request->ccb->timeout * 1000 : IDE_STD_TIMEOUT;
|
request->ccb->timeout * 1000 : IDE_STD_TIMEOUT;
|
||||||
|
|
||||||
// FLOW("ata_exec_pio_transfer: length %d, left_blocks %d, left_sg_elem %d, cur_sg_ofs %d\n",
|
// FLOW("ata_exec_pio_transfer: length %d, left_blocks %d, left_sg_elem %d, cur_sg_ofs %d\n",
|
||||||
@@ -821,7 +823,7 @@ ata_exec_pio_transfer(ata_request *request)
|
|||||||
|
|
||||||
while (device->left_blocks > 0) {
|
while (device->left_blocks > 0) {
|
||||||
|
|
||||||
if (ata_wait(bus, ide_status_drq, ide_status_bsy, 0, 4000000) != B_OK) {
|
if (ata_wait(bus, ide_status_drq, ide_status_bsy, 0, timeout) != B_OK) {
|
||||||
TRACE("ata_exec_pio_transfer: wait failed\n");
|
TRACE("ata_exec_pio_transfer: wait failed\n");
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user