diff options
author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2009-03-27 07:46:46 -0400 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2009-03-27 07:46:46 -0400 |
commit | 2298169418f43ba5e0919762a4bab95a1227872a (patch) | |
tree | 67cf3133c7bae747ad957c68a650534105a7d8e7 /drivers/ide/trm290.c | |
parent | 130e886708d6e11f3d54e5d27c266578de56f343 (diff) |
ide: pass command to ide_map_sg()
* Set IDE_TFLAG_WRITE flag and ->rq also for ATA_CMD_PACKET
commands.
* Pass command to ->dma_setup method and update all its
implementations accordingly.
* Pass command instead of request to ide_build_sglist(),
*_build_dmatable() and ide_map_sg().
While at it:
* Fix scc_dma_setup() documentation + use ATA_DMA_WR define.
* Rename sgiioc4_build_dma_table() to sgiioc4_build_dmatable(),
change return value type to 'int' and drop unused 'ddir'
argument.
* Do some minor cleanups in [tx4939]ide_dma_setup().
There should be no functional changes caused by this patch.
Acked-by: Borislav Petkov <petkovbb@gmail.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers/ide/trm290.c')
-rw-r--r-- | drivers/ide/trm290.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/ide/trm290.c b/drivers/ide/trm290.c index e8279f32f9a2..746858a7338d 100644 --- a/drivers/ide/trm290.c +++ b/drivers/ide/trm290.c | |||
@@ -181,13 +181,12 @@ static void trm290_dma_exec_cmd(ide_drive_t *drive, u8 command) | |||
181 | ide_execute_command(drive, command, &ide_dma_intr, WAIT_CMD, NULL); | 181 | ide_execute_command(drive, command, &ide_dma_intr, WAIT_CMD, NULL); |
182 | } | 182 | } |
183 | 183 | ||
184 | static int trm290_dma_setup(ide_drive_t *drive) | 184 | static int trm290_dma_setup(ide_drive_t *drive, struct ide_cmd *cmd) |
185 | { | 185 | { |
186 | ide_hwif_t *hwif = drive->hwif; | 186 | ide_hwif_t *hwif = drive->hwif; |
187 | struct request *rq = hwif->rq; | ||
188 | unsigned int count, rw; | 187 | unsigned int count, rw; |
189 | 188 | ||
190 | if (rq_data_dir(rq)) { | 189 | if (cmd->tf_flags & IDE_TFLAG_WRITE) { |
191 | #ifdef TRM290_NO_DMA_WRITES | 190 | #ifdef TRM290_NO_DMA_WRITES |
192 | /* always use PIO for writes */ | 191 | /* always use PIO for writes */ |
193 | trm290_prepare_drive(drive, 0); /* select PIO xfer */ | 192 | trm290_prepare_drive(drive, 0); /* select PIO xfer */ |
@@ -197,8 +196,9 @@ static int trm290_dma_setup(ide_drive_t *drive) | |||
197 | } else | 196 | } else |
198 | rw = 2; | 197 | rw = 2; |
199 | 198 | ||
200 | if (!(count = ide_build_dmatable(drive, rq))) { | 199 | count = ide_build_dmatable(drive, cmd); |
201 | ide_map_sg(drive, rq); | 200 | if (count == 0) { |
201 | ide_map_sg(drive, cmd); | ||
202 | /* try PIO instead of DMA */ | 202 | /* try PIO instead of DMA */ |
203 | trm290_prepare_drive(drive, 0); /* select PIO xfer */ | 203 | trm290_prepare_drive(drive, 0); /* select PIO xfer */ |
204 | return 1; | 204 | return 1; |