aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/trm290.c
diff options
context:
space:
mode:
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2009-03-31 14:15:21 -0400
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2009-03-31 14:15:21 -0400
commit8a4a5738ba499083cf4c5668895efe220b1946d3 (patch)
tree78272b711b31f43526d2c665478cc3bdb0b6e393 /drivers/ide/trm290.c
parent7526efaafdc835b8d6b22aa1a302e14651373908 (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.c17
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
179static int trm290_dma_setup(ide_drive_t *drive, struct ide_cmd *cmd) 179static 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
190static 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
317static const struct ide_port_info trm290_chipset __devinitdata = { 320static const struct ide_port_info trm290_chipset __devinitdata = {