diff options
Diffstat (limited to 'drivers/ide/ide-atapi.c')
-rw-r--r-- | drivers/ide/ide-atapi.c | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/drivers/ide/ide-atapi.c b/drivers/ide/ide-atapi.c index 7129495b3e40..1022e421abd8 100644 --- a/drivers/ide/ide-atapi.c +++ b/drivers/ide/ide-atapi.c | |||
@@ -172,8 +172,6 @@ void ide_prep_sense(ide_drive_t *drive, struct request *rq) | |||
172 | unsigned int cmd_len, sense_len; | 172 | unsigned int cmd_len, sense_len; |
173 | int err; | 173 | int err; |
174 | 174 | ||
175 | debug_log("%s: enter\n", __func__); | ||
176 | |||
177 | switch (drive->media) { | 175 | switch (drive->media) { |
178 | case ide_floppy: | 176 | case ide_floppy: |
179 | cmd_len = 255; | 177 | cmd_len = 255; |
@@ -370,7 +368,7 @@ static ide_startstop_t ide_pc_intr(ide_drive_t *drive) | |||
370 | ? "write" : "read"); | 368 | ? "write" : "read"); |
371 | pc->flags |= PC_FLAG_DMA_ERROR; | 369 | pc->flags |= PC_FLAG_DMA_ERROR; |
372 | } else | 370 | } else |
373 | pc->xferred = blk_rq_bytes(rq); | 371 | rq->resid_len = 0; |
374 | debug_log("%s: DMA finished\n", drive->name); | 372 | debug_log("%s: DMA finished\n", drive->name); |
375 | } | 373 | } |
376 | 374 | ||
@@ -379,7 +377,7 @@ static ide_startstop_t ide_pc_intr(ide_drive_t *drive) | |||
379 | int uptodate, error; | 377 | int uptodate, error; |
380 | 378 | ||
381 | debug_log("Packet command completed, %d bytes transferred\n", | 379 | debug_log("Packet command completed, %d bytes transferred\n", |
382 | pc->xferred); | 380 | blk_rq_bytes(rq)); |
383 | 381 | ||
384 | pc->flags &= ~PC_FLAG_DMA_IN_PROGRESS; | 382 | pc->flags &= ~PC_FLAG_DMA_IN_PROGRESS; |
385 | 383 | ||
@@ -467,15 +465,15 @@ static ide_startstop_t ide_pc_intr(ide_drive_t *drive) | |||
467 | ide_pio_bytes(drive, cmd, write, done); | 465 | ide_pio_bytes(drive, cmd, write, done); |
468 | 466 | ||
469 | /* Update transferred byte count */ | 467 | /* Update transferred byte count */ |
470 | pc->xferred += done; | 468 | rq->resid_len -= done; |
471 | 469 | ||
472 | bcount -= done; | 470 | bcount -= done; |
473 | 471 | ||
474 | if (bcount) | 472 | if (bcount) |
475 | ide_pad_transfer(drive, write, bcount); | 473 | ide_pad_transfer(drive, write, bcount); |
476 | 474 | ||
477 | debug_log("[cmd %x] transferred %d bytes, padded %d bytes\n", | 475 | debug_log("[cmd %x] transferred %d bytes, padded %d bytes, resid: %u\n", |
478 | rq->cmd[0], done, bcount); | 476 | rq->cmd[0], done, bcount, rq->resid_len); |
479 | 477 | ||
480 | /* And set the interrupt handler again */ | 478 | /* And set the interrupt handler again */ |
481 | ide_set_handler(drive, ide_pc_intr, timeout); | 479 | ide_set_handler(drive, ide_pc_intr, timeout); |
@@ -643,16 +641,15 @@ ide_startstop_t ide_issue_pc(ide_drive_t *drive, struct ide_cmd *cmd) | |||
643 | } else { | 641 | } else { |
644 | pc = drive->pc; | 642 | pc = drive->pc; |
645 | 643 | ||
646 | /* We haven't transferred any data yet */ | ||
647 | pc->xferred = 0; | ||
648 | |||
649 | valid_tf = IDE_VALID_DEVICE; | 644 | valid_tf = IDE_VALID_DEVICE; |
650 | bytes = blk_rq_bytes(rq); | 645 | bytes = blk_rq_bytes(rq); |
651 | |||
652 | bcount = ((drive->media == ide_tape) ? bytes | 646 | bcount = ((drive->media == ide_tape) ? bytes |
653 | : min_t(unsigned int, | 647 | : min_t(unsigned int, |
654 | bytes, 63 * 1024)); | 648 | bytes, 63 * 1024)); |
655 | 649 | ||
650 | /* We haven't transferred any data yet */ | ||
651 | rq->resid_len = bcount; | ||
652 | |||
656 | if (pc->flags & PC_FLAG_DMA_ERROR) { | 653 | if (pc->flags & PC_FLAG_DMA_ERROR) { |
657 | pc->flags &= ~PC_FLAG_DMA_ERROR; | 654 | pc->flags &= ~PC_FLAG_DMA_ERROR; |
658 | ide_dma_off(drive); | 655 | ide_dma_off(drive); |