diff options
Diffstat (limited to 'drivers/ide/ide-io.c')
-rw-r--r-- | drivers/ide/ide-io.c | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c index ce9ecd138836..8dd7b46b41b7 100644 --- a/drivers/ide/ide-io.c +++ b/drivers/ide/ide-io.c | |||
@@ -322,7 +322,7 @@ void ide_end_drive_cmd (ide_drive_t *drive, u8 stat, u8 err) | |||
322 | ide_task_t *task = (ide_task_t *)rq->special; | 322 | ide_task_t *task = (ide_task_t *)rq->special; |
323 | 323 | ||
324 | if (rq->errors == 0) | 324 | if (rq->errors == 0) |
325 | rq->errors = !OK_STAT(stat, READY_STAT, BAD_STAT); | 325 | rq->errors = !OK_STAT(stat, ATA_DRDY, BAD_STAT); |
326 | 326 | ||
327 | if (task) { | 327 | if (task) { |
328 | struct ide_taskfile *tf = &task->tf; | 328 | struct ide_taskfile *tf = &task->tf; |
@@ -373,12 +373,12 @@ static ide_startstop_t ide_ata_error(ide_drive_t *drive, struct request *rq, u8 | |||
373 | { | 373 | { |
374 | ide_hwif_t *hwif = drive->hwif; | 374 | ide_hwif_t *hwif = drive->hwif; |
375 | 375 | ||
376 | if (stat & BUSY_STAT || ((stat & WRERR_STAT) && !drive->nowerr)) { | 376 | if ((stat & ATA_BUSY) || ((stat & ATA_DF) && !drive->nowerr)) { |
377 | /* other bits are useless when BUSY */ | 377 | /* other bits are useless when BUSY */ |
378 | rq->errors |= ERROR_RESET; | 378 | rq->errors |= ERROR_RESET; |
379 | } else if (stat & ERR_STAT) { | 379 | } else if (stat & ATA_ERR) { |
380 | /* err has different meaning on cdrom and tape */ | 380 | /* err has different meaning on cdrom and tape */ |
381 | if (err == ABRT_ERR) { | 381 | if (err == ATA_ABORTED) { |
382 | if (drive->select.b.lba && | 382 | if (drive->select.b.lba && |
383 | /* some newer drives don't support ATA_CMD_INIT_DEV_PARAMS */ | 383 | /* some newer drives don't support ATA_CMD_INIT_DEV_PARAMS */ |
384 | hwif->tp_ops->read_status(hwif) == ATA_CMD_INIT_DEV_PARAMS) | 384 | hwif->tp_ops->read_status(hwif) == ATA_CMD_INIT_DEV_PARAMS) |
@@ -386,16 +386,16 @@ static ide_startstop_t ide_ata_error(ide_drive_t *drive, struct request *rq, u8 | |||
386 | } else if ((err & BAD_CRC) == BAD_CRC) { | 386 | } else if ((err & BAD_CRC) == BAD_CRC) { |
387 | /* UDMA crc error, just retry the operation */ | 387 | /* UDMA crc error, just retry the operation */ |
388 | drive->crc_count++; | 388 | drive->crc_count++; |
389 | } else if (err & (BBD_ERR | ECC_ERR)) { | 389 | } else if (err & (ATA_BBK | ATA_UNC)) { |
390 | /* retries won't help these */ | 390 | /* retries won't help these */ |
391 | rq->errors = ERROR_MAX; | 391 | rq->errors = ERROR_MAX; |
392 | } else if (err & TRK0_ERR) { | 392 | } else if (err & ATA_TRK0NF) { |
393 | /* help it find track zero */ | 393 | /* help it find track zero */ |
394 | rq->errors |= ERROR_RECAL; | 394 | rq->errors |= ERROR_RECAL; |
395 | } | 395 | } |
396 | } | 396 | } |
397 | 397 | ||
398 | if ((stat & DRQ_STAT) && rq_data_dir(rq) == READ && | 398 | if ((stat & ATA_DRQ) && rq_data_dir(rq) == READ && |
399 | (hwif->host_flags & IDE_HFLAG_ERROR_STOPS_FIFO) == 0) { | 399 | (hwif->host_flags & IDE_HFLAG_ERROR_STOPS_FIFO) == 0) { |
400 | int nsect = drive->mult_count ? drive->mult_count : 1; | 400 | int nsect = drive->mult_count ? drive->mult_count : 1; |
401 | 401 | ||
@@ -407,7 +407,7 @@ static ide_startstop_t ide_ata_error(ide_drive_t *drive, struct request *rq, u8 | |||
407 | return ide_stopped; | 407 | return ide_stopped; |
408 | } | 408 | } |
409 | 409 | ||
410 | if (hwif->tp_ops->read_status(hwif) & (BUSY_STAT | DRQ_STAT)) | 410 | if (hwif->tp_ops->read_status(hwif) & (ATA_BUSY | ATA_DRQ)) |
411 | rq->errors |= ERROR_RESET; | 411 | rq->errors |= ERROR_RESET; |
412 | 412 | ||
413 | if ((rq->errors & ERROR_RESET) == ERROR_RESET) { | 413 | if ((rq->errors & ERROR_RESET) == ERROR_RESET) { |
@@ -427,14 +427,14 @@ static ide_startstop_t ide_atapi_error(ide_drive_t *drive, struct request *rq, u | |||
427 | { | 427 | { |
428 | ide_hwif_t *hwif = drive->hwif; | 428 | ide_hwif_t *hwif = drive->hwif; |
429 | 429 | ||
430 | if (stat & BUSY_STAT || ((stat & WRERR_STAT) && !drive->nowerr)) { | 430 | if ((stat & ATA_BUSY) || ((stat & ATA_DF) && !drive->nowerr)) { |
431 | /* other bits are useless when BUSY */ | 431 | /* other bits are useless when BUSY */ |
432 | rq->errors |= ERROR_RESET; | 432 | rq->errors |= ERROR_RESET; |
433 | } else { | 433 | } else { |
434 | /* add decoding error stuff */ | 434 | /* add decoding error stuff */ |
435 | } | 435 | } |
436 | 436 | ||
437 | if (hwif->tp_ops->read_status(hwif) & (BUSY_STAT | DRQ_STAT)) | 437 | if (hwif->tp_ops->read_status(hwif) & (ATA_BUSY | ATA_DRQ)) |
438 | /* force an abort */ | 438 | /* force an abort */ |
439 | hwif->tp_ops->exec_command(hwif, ATA_CMD_IDLEIMMEDIATE); | 439 | hwif->tp_ops->exec_command(hwif, ATA_CMD_IDLEIMMEDIATE); |
440 | 440 | ||
@@ -804,7 +804,8 @@ static ide_startstop_t start_request (ide_drive_t *drive, struct request *rq) | |||
804 | ide_check_pm_state(drive, rq); | 804 | ide_check_pm_state(drive, rq); |
805 | 805 | ||
806 | SELECT_DRIVE(drive); | 806 | SELECT_DRIVE(drive); |
807 | if (ide_wait_stat(&startstop, drive, drive->ready_stat, BUSY_STAT|DRQ_STAT, WAIT_READY)) { | 807 | if (ide_wait_stat(&startstop, drive, drive->ready_stat, |
808 | ATA_BUSY | ATA_DRQ, WAIT_READY)) { | ||
808 | printk(KERN_ERR "%s: drive not ready for command\n", drive->name); | 809 | printk(KERN_ERR "%s: drive not ready for command\n", drive->name); |
809 | return startstop; | 810 | return startstop; |
810 | } | 811 | } |
@@ -1324,7 +1325,7 @@ static void unexpected_intr (int irq, ide_hwgroup_t *hwgroup) | |||
1324 | if (hwif->irq == irq) { | 1325 | if (hwif->irq == irq) { |
1325 | stat = hwif->tp_ops->read_status(hwif); | 1326 | stat = hwif->tp_ops->read_status(hwif); |
1326 | 1327 | ||
1327 | if (!OK_STAT(stat, READY_STAT, BAD_STAT)) { | 1328 | if (!OK_STAT(stat, ATA_DRDY, BAD_STAT)) { |
1328 | /* Try to not flood the console with msgs */ | 1329 | /* Try to not flood the console with msgs */ |
1329 | static unsigned long last_msgtime, count; | 1330 | static unsigned long last_msgtime, count; |
1330 | ++count; | 1331 | ++count; |