diff options
author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2009-03-31 14:15:21 -0400 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2009-03-31 14:15:21 -0400 |
commit | 8a4a5738ba499083cf4c5668895efe220b1946d3 (patch) | |
tree | 78272b711b31f43526d2c665478cc3bdb0b6e393 /drivers/ide/trm290.c | |
parent | 7526efaafdc835b8d6b22aa1a302e14651373908 (diff) |
ide: add ->dma_check method
* Add (an optional) ->dma_check method for checking if DMA can be
used for a given command and fail DMA setup in ide_dma_prepare()
if necessary.
* Convert alim15x3 and trm290 host drivers to use ->dma_check.
* Rename ali15x3_dma_setup() to ali_dma_check() while at it.
There should be no functional changes caused by this patch.
Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers/ide/trm290.c')
-rw-r--r-- | drivers/ide/trm290.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/drivers/ide/trm290.c b/drivers/ide/trm290.c index b91bb709af40..1076efd050dc 100644 --- a/drivers/ide/trm290.c +++ b/drivers/ide/trm290.c | |||
@@ -176,19 +176,21 @@ static void trm290_selectproc (ide_drive_t *drive) | |||
176 | trm290_prepare_drive(drive, !!(drive->dev_flags & IDE_DFLAG_USING_DMA)); | 176 | trm290_prepare_drive(drive, !!(drive->dev_flags & IDE_DFLAG_USING_DMA)); |
177 | } | 177 | } |
178 | 178 | ||
179 | static int trm290_dma_setup(ide_drive_t *drive, struct ide_cmd *cmd) | 179 | static int trm290_dma_check(ide_drive_t *drive, struct ide_cmd *cmd) |
180 | { | 180 | { |
181 | ide_hwif_t *hwif = drive->hwif; | ||
182 | unsigned int count, rw; | ||
183 | |||
184 | if (cmd->tf_flags & IDE_TFLAG_WRITE) { | 181 | if (cmd->tf_flags & IDE_TFLAG_WRITE) { |
185 | #ifdef TRM290_NO_DMA_WRITES | 182 | #ifdef TRM290_NO_DMA_WRITES |
186 | /* always use PIO for writes */ | 183 | /* always use PIO for writes */ |
187 | return 1; | 184 | return 1; |
188 | #endif | 185 | #endif |
189 | rw = 1; | 186 | } |
190 | } else | 187 | return 0; |
191 | rw = 2; | 188 | } |
189 | |||
190 | static int trm290_dma_setup(ide_drive_t *drive, struct ide_cmd *cmd) | ||
191 | { | ||
192 | ide_hwif_t *hwif = drive->hwif; | ||
193 | unsigned int count, rw = (cmd->tf_flags & IDE_TFLAG_WRITE) ? 1 : 2; | ||
192 | 194 | ||
193 | count = ide_build_dmatable(drive, cmd); | 195 | count = ide_build_dmatable(drive, cmd); |
194 | if (count == 0) { | 196 | if (count == 0) { |
@@ -312,6 +314,7 @@ static struct ide_dma_ops trm290_dma_ops = { | |||
312 | .dma_end = trm290_dma_end, | 314 | .dma_end = trm290_dma_end, |
313 | .dma_test_irq = trm290_dma_test_irq, | 315 | .dma_test_irq = trm290_dma_test_irq, |
314 | .dma_lost_irq = ide_dma_lost_irq, | 316 | .dma_lost_irq = ide_dma_lost_irq, |
317 | .dma_check = trm290_dma_check, | ||
315 | }; | 318 | }; |
316 | 319 | ||
317 | static const struct ide_port_info trm290_chipset __devinitdata = { | 320 | static const struct ide_port_info trm290_chipset __devinitdata = { |