aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/ide-io.c
diff options
context:
space:
mode:
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2007-10-13 11:47:50 -0400
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2007-10-13 11:47:50 -0400
commitaedea5910ce44fea79e2c517bb22e0006372156f (patch)
tree5e9c84f0c045058594a80a2bc67b358f80d1d884 /drivers/ide/ide-io.c
parent3b2d0093b8eb2b0b4adc86138edee9f6d376cafb (diff)
ide-pmac: remove pmac_ide_do_setfeature() (take 2)
Use ide_config_drive_speed() instead of pmac_ide_do_setfeature() and remove the latter, also ide-iops.c::__ide_wait_stat() could be static again. Since for IDE PMAC host driver IDE_CONTROL_REG is always true, device's ->quirk_list is always zero and ->ide_dma_host_{on,off} are nops than the only changes in behavior are: * if PIO mode is set then ->dma_off_queitly is called to disable DMA * if setting transfer mode fails ide_dump_status() is called to dump status v2: * IDE PMAC controllers allow separate PIO and DMA timings and PPC userland depends on this fact, and calls "hdparm -p" without calling "hdparm -d". Therefore to compensate for DMA being disabled by ide_config_drive_speed() for PIO modes: - add IDE_HFLAG_SET_PIO_MODE_KEEP_DMA flag and set it in PMAC host driver - add handling of the new flag to ide-io.c::do_special() Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers/ide/ide-io.c')
-rw-r--r--drivers/ide/ide-io.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c
index 9560a8f4a86c..4cece930114c 100644
--- a/drivers/ide/ide-io.c
+++ b/drivers/ide/ide-io.c
@@ -836,9 +836,17 @@ static ide_startstop_t do_special (ide_drive_t *drive)
836 if (set_pio_mode_abuse(drive->hwif, req_pio)) { 836 if (set_pio_mode_abuse(drive->hwif, req_pio)) {
837 if (hwif->set_pio_mode) 837 if (hwif->set_pio_mode)
838 hwif->set_pio_mode(drive, req_pio); 838 hwif->set_pio_mode(drive, req_pio);
839 } else 839 } else {
840 int keep_dma = drive->using_dma;
841
840 ide_set_pio(drive, req_pio); 842 ide_set_pio(drive, req_pio);
841 843
844 if (hwif->host_flags & IDE_HFLAG_SET_PIO_MODE_KEEP_DMA) {
845 if (keep_dma)
846 hwif->ide_dma_on(drive);
847 }
848 }
849
842 return ide_stopped; 850 return ide_stopped;
843 } else { 851 } else {
844 if (drive->media == ide_disk) 852 if (drive->media == ide_disk)