diff options
author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2007-10-11 17:54:00 -0400 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2007-10-11 17:54:00 -0400 |
commit | 26bcb879c03254545a19c6700fe5bcef6f21e7b1 (patch) | |
tree | dc35f1a7d7860fe0de268ff92189ff0884b689d3 /drivers/ide/pci/sc1200.c | |
parent | 842c19ad6fc0dbd9ac9d2f8527466201802934cf (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.c | 14 |
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 | */ |
281 | static void sc1200_tuneproc (ide_drive_t *drive, byte pio) /* mode=255 means "autotune" */ | 281 | |
282 | static 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 | ||