diff options
author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-07-15 15:21:58 -0400 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-07-15 15:21:58 -0400 |
commit | 4cc196897de9e6c02cf86debc5b9f7cf1b69a214 (patch) | |
tree | 70aebe4c447f6ce48ff10909779382000fd8b6da /drivers | |
parent | 594c16d8dd54cd7b1c5ef1ec3ac0f6bf34301dad (diff) |
ide-scsi: move idescsi_map_sg() call out from idescsi_issue_pc()
Move idescsi_map_sg() call out from idescsi_issue_pc()
to idescsi_do_request() as a preparation to adding generic
ide_issue_pc() helper.
There should be no functional changes caused by this patch.
Cc: Borislav Petkov <petkovbb@gmail.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/scsi/ide-scsi.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/drivers/scsi/ide-scsi.c b/drivers/scsi/ide-scsi.c index d41348f2245e..1d261298d61a 100644 --- a/drivers/scsi/ide-scsi.c +++ b/drivers/scsi/ide-scsi.c | |||
@@ -514,16 +514,16 @@ static ide_startstop_t idescsi_issue_pc(ide_drive_t *drive, | |||
514 | /* Request to transfer the entire buffer at once */ | 514 | /* Request to transfer the entire buffer at once */ |
515 | bcount = min(pc->req_xfer, 63 * 1024); | 515 | bcount = min(pc->req_xfer, 63 * 1024); |
516 | 516 | ||
517 | if (drive->using_dma && !idescsi_map_sg(drive, pc)) { | 517 | if ((pc->flags & PC_FLAG_DMA_OK) && drive->using_dma) { |
518 | hwif->sg_mapped = 1; | 518 | hwif->sg_mapped = 1; |
519 | dma = !hwif->dma_ops->dma_setup(drive); | 519 | dma = !hwif->dma_ops->dma_setup(drive); |
520 | hwif->sg_mapped = 0; | 520 | hwif->sg_mapped = 0; |
521 | } | 521 | } |
522 | 522 | ||
523 | ide_pktcmd_tf_load(drive, 0, bcount, dma); | 523 | if (!dma) |
524 | pc->flags &= ~PC_FLAG_DMA_OK; | ||
524 | 525 | ||
525 | if (dma) | 526 | ide_pktcmd_tf_load(drive, 0, bcount, dma); |
526 | pc->flags |= PC_FLAG_DMA_OK; | ||
527 | 527 | ||
528 | if (test_bit(IDESCSI_DRQ_INTERRUPT, &scsi->flags)) { | 528 | if (test_bit(IDESCSI_DRQ_INTERRUPT, &scsi->flags)) { |
529 | ide_execute_command(drive, WIN_PACKETCMD, &idescsi_transfer_pc, | 529 | ide_execute_command(drive, WIN_PACKETCMD, &idescsi_transfer_pc, |
@@ -547,8 +547,12 @@ static ide_startstop_t idescsi_do_request (ide_drive_t *drive, struct request *r | |||
547 | rq->sector, rq->nr_sectors, rq->current_nr_sectors); | 547 | rq->sector, rq->nr_sectors, rq->current_nr_sectors); |
548 | 548 | ||
549 | if (blk_sense_request(rq) || blk_special_request(rq)) { | 549 | if (blk_sense_request(rq) || blk_special_request(rq)) { |
550 | return idescsi_issue_pc(drive, | 550 | struct ide_atapi_pc *pc = (struct ide_atapi_pc *)rq->special; |
551 | (struct ide_atapi_pc *) rq->special); | 551 | |
552 | if (drive->using_dma && !idescsi_map_sg(drive, pc)) | ||
553 | pc->flags |= PC_FLAG_DMA_OK; | ||
554 | |||
555 | return idescsi_issue_pc(drive, pc); | ||
552 | } | 556 | } |
553 | blk_dump_rq_flags(rq, "ide-scsi: unsup command"); | 557 | blk_dump_rq_flags(rq, "ide-scsi: unsup command"); |
554 | idescsi_end_request (drive, 0, 0); | 558 | idescsi_end_request (drive, 0, 0); |