aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/pci/sc1200.c
diff options
context:
space:
mode:
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2007-10-11 17:54:00 -0400
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2007-10-11 17:54:00 -0400
commit26bcb879c03254545a19c6700fe5bcef6f21e7b1 (patch)
treedc35f1a7d7860fe0de268ff92189ff0884b689d3 /drivers/ide/pci/sc1200.c
parent842c19ad6fc0dbd9ac9d2f8527466201802934cf (diff)
ide: add ide_set{_max}_pio() (take 4)
* Add IDE_HFLAG_ABUSE_{PREFETCH,FAST_DEVSEL,DMA_MODES} flags and set them in ht6560, cmd640, cmd64x and sc1200 host drivers. * Add set_pio_mode_abuse() for checking if host driver has a non-standard ->tuneproc() implementation and use it in do_special(). * Add ide_set_pio() for setting PIO mode (it uses hwif->pio_mask to find the maximum PIO mode supported by the host), also add ide_set_max_pio() wrapper for ide_set_pio() to use for auto-tuning. Convert users of ->tuneproc to use ide_set{_max}_pio() where possible. This leaves only do_special(), set_using_pio(), ide_hwif_restore() and ide_set_pio() as a direct users of ->tuneproc. * Remove no longer needed ide_get_best_pio_mode() calls and printk-s reporting PIO mode selected from ->tuneproc implementations. * Rename ->tuneproc hook to ->set_pio_mode and make 'pio' argument const. * Remove stale comment from ide_config_drive_speed(). v2: * Fix "ata_" prefix (Noticed by Jeff). v3: * Minor cleanups/fixups per Sergei's suggestions. v4: * Fix compile problem in drivers/ide/pci/cmd640.c (Noticed by Andrew Morton). * Improve some ->set_pio_mode comments. Reviewed-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Cc: Jeff Garzik <jeff@garzik.org> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers/ide/pci/sc1200.c')
-rw-r--r--drivers/ide/pci/sc1200.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/drivers/ide/pci/sc1200.c b/drivers/ide/pci/sc1200.c
index 059071cd2d49..f9f5ed906577 100644
--- a/drivers/ide/pci/sc1200.c
+++ b/drivers/ide/pci/sc1200.c
@@ -272,19 +272,20 @@ static int sc1200_ide_dma_end (ide_drive_t *drive)
272} 272}
273 273
274/* 274/*
275 * sc1200_tuneproc() handles selection/setting of PIO modes 275 * sc1200_set_pio_mode() handles setting of PIO modes
276 * for both the chipset and drive. 276 * for both the chipset and drive.
277 * 277 *
278 * All existing BIOSs for this chipset guarantee that all drives 278 * All existing BIOSs for this chipset guarantee that all drives
279 * will have valid default PIO timings set up before we get here. 279 * will have valid default PIO timings set up before we get here.
280 */ 280 */
281static void sc1200_tuneproc (ide_drive_t *drive, byte pio) /* mode=255 means "autotune" */ 281
282static void sc1200_set_pio_mode(ide_drive_t *drive, const u8 pio)
282{ 283{
283 ide_hwif_t *hwif = HWIF(drive); 284 ide_hwif_t *hwif = HWIF(drive);
284 int mode = -1; 285 int mode = -1;
285 286
286 /* 287 /*
287 * bad abuse of ->tuneproc interface 288 * bad abuse of ->set_pio_mode interface
288 */ 289 */
289 switch (pio) { 290 switch (pio) {
290 case 200: mode = XFER_UDMA_0; break; 291 case 200: mode = XFER_UDMA_0; break;
@@ -302,9 +303,6 @@ static void sc1200_tuneproc (ide_drive_t *drive, byte pio) /* mode=255 means "au
302 return; 303 return;
303 } 304 }
304 305
305 pio = ide_get_best_pio_mode(drive, pio, 4);
306 printk("SC1200: %s: setting PIO mode%d\n", drive->name, pio);
307
308 if (sc1200_set_xfer_mode(drive, XFER_PIO_0 + pio) == 0) 306 if (sc1200_set_xfer_mode(drive, XFER_PIO_0 + pio) == 0)
309 sc1200_tunepio(drive, pio); 307 sc1200_tunepio(drive, pio);
310} 308}
@@ -420,7 +418,8 @@ static void __devinit init_hwif_sc1200 (ide_hwif_t *hwif)
420 hwif->ide_dma_end = &sc1200_ide_dma_end; 418 hwif->ide_dma_end = &sc1200_ide_dma_end;
421 if (!noautodma) 419 if (!noautodma)
422 hwif->autodma = 1; 420 hwif->autodma = 1;
423 hwif->tuneproc = &sc1200_tuneproc; 421
422 hwif->set_pio_mode = &sc1200_set_pio_mode;
424 hwif->speedproc = &sc1200_tune_chipset; 423 hwif->speedproc = &sc1200_tune_chipset;
425 } 424 }
426 hwif->atapi_dma = 1; 425 hwif->atapi_dma = 1;
@@ -436,6 +435,7 @@ static ide_pci_device_t sc1200_chipset __devinitdata = {
436 .init_hwif = init_hwif_sc1200, 435 .init_hwif = init_hwif_sc1200,
437 .autodma = AUTODMA, 436 .autodma = AUTODMA,
438 .bootable = ON_BOARD, 437 .bootable = ON_BOARD,
438 .host_flags = IDE_HFLAG_ABUSE_DMA_MODES,
439 .pio_mask = ATA_PIO4, 439 .pio_mask = ATA_PIO4,
440}; 440};
441 441