diff options
Diffstat (limited to 'drivers/ide/ide-atapi.c')
-rw-r--r-- | drivers/ide/ide-atapi.c | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/drivers/ide/ide-atapi.c b/drivers/ide/ide-atapi.c index 33a15343e8bb..b6e0aac68938 100644 --- a/drivers/ide/ide-atapi.c +++ b/drivers/ide/ide-atapi.c | |||
@@ -551,18 +551,24 @@ ide_startstop_t ide_issue_pc(ide_drive_t *drive, unsigned int timeout, | |||
551 | struct ide_atapi_pc *pc = drive->pc; | 551 | struct ide_atapi_pc *pc = drive->pc; |
552 | ide_hwif_t *hwif = drive->hwif; | 552 | ide_hwif_t *hwif = drive->hwif; |
553 | u32 tf_flags; | 553 | u32 tf_flags; |
554 | u16 bcount; | 554 | u16 bcount = 0; |
555 | u8 scsi = !!(drive->dev_flags & IDE_DFLAG_SCSI); | 555 | u8 scsi = !!(drive->dev_flags & IDE_DFLAG_SCSI); |
556 | 556 | ||
557 | /* We haven't transferred any data yet */ | 557 | /* We haven't transferred any data yet */ |
558 | pc->xferred = 0; | 558 | pc->xferred = 0; |
559 | pc->cur_pos = pc->buf; | 559 | pc->cur_pos = pc->buf; |
560 | 560 | ||
561 | /* Request to transfer the entire buffer at once */ | 561 | if (dev_is_idecd(drive)) { |
562 | if (drive->media == ide_tape && scsi == 0) | 562 | tf_flags = IDE_TFLAG_OUT_NSECT | IDE_TFLAG_OUT_LBAL; |
563 | bcount = pc->req_xfer; | 563 | } else if (scsi) { |
564 | else | 564 | tf_flags = 0; |
565 | bcount = min(pc->req_xfer, 63 * 1024); | 565 | bcount = min(pc->req_xfer, 63 * 1024); |
566 | } else { | ||
567 | tf_flags = IDE_TFLAG_OUT_DEVICE; | ||
568 | bcount = ((drive->media == ide_tape) ? | ||
569 | pc->req_xfer : | ||
570 | min(pc->req_xfer, 63 * 1024)); | ||
571 | } | ||
566 | 572 | ||
567 | if (pc->flags & PC_FLAG_DMA_ERROR) { | 573 | if (pc->flags & PC_FLAG_DMA_ERROR) { |
568 | pc->flags &= ~PC_FLAG_DMA_ERROR; | 574 | pc->flags &= ~PC_FLAG_DMA_ERROR; |
@@ -581,13 +587,6 @@ ide_startstop_t ide_issue_pc(ide_drive_t *drive, unsigned int timeout, | |||
581 | if (!drive->dma) | 587 | if (!drive->dma) |
582 | pc->flags &= ~PC_FLAG_DMA_OK; | 588 | pc->flags &= ~PC_FLAG_DMA_OK; |
583 | 589 | ||
584 | if (scsi) | ||
585 | tf_flags = 0; | ||
586 | else if (dev_is_idecd(drive)) | ||
587 | tf_flags = IDE_TFLAG_OUT_NSECT | IDE_TFLAG_OUT_LBAL; | ||
588 | else | ||
589 | tf_flags = IDE_TFLAG_OUT_DEVICE; | ||
590 | |||
591 | ide_pktcmd_tf_load(drive, tf_flags, bcount, drive->dma); | 590 | ide_pktcmd_tf_load(drive, tf_flags, bcount, drive->dma); |
592 | 591 | ||
593 | /* Issue the packet command */ | 592 | /* Issue the packet command */ |