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 /include | |
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 'include')
-rw-r--r-- | include/linux/ide.h | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/include/linux/ide.h b/include/linux/ide.h index 81736cb7ef3d..85d448b4abec 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
@@ -634,7 +634,7 @@ typedef struct ide_drive_s { | |||
634 | 634 | ||
635 | unsigned int bios_cyl; /* BIOS/fdisk/LILO number of cyls */ | 635 | unsigned int bios_cyl; /* BIOS/fdisk/LILO number of cyls */ |
636 | unsigned int cyl; /* "real" number of cyls */ | 636 | unsigned int cyl; /* "real" number of cyls */ |
637 | unsigned int drive_data; /* use by tuneproc/selectproc */ | 637 | unsigned int drive_data; /* used by set_pio_mode/selectproc */ |
638 | unsigned int failures; /* current failure count */ | 638 | unsigned int failures; /* current failure count */ |
639 | unsigned int max_failures; /* maximum allowed failure count */ | 639 | unsigned int max_failures; /* maximum allowed failure count */ |
640 | u64 probed_capacity;/* initial reported media capacity (ide-cd only currently) */ | 640 | u64 probed_capacity;/* initial reported media capacity (ide-cd only currently) */ |
@@ -702,8 +702,8 @@ typedef struct hwif_s { | |||
702 | #if 0 | 702 | #if 0 |
703 | ide_hwif_ops_t *hwifops; | 703 | ide_hwif_ops_t *hwifops; |
704 | #else | 704 | #else |
705 | /* routine to tune PIO mode for drives */ | 705 | /* routine to set PIO mode for drives */ |
706 | void (*tuneproc)(ide_drive_t *, u8); | 706 | void (*set_pio_mode)(ide_drive_t *, const u8); |
707 | /* routine to retune DMA modes for drives */ | 707 | /* routine to retune DMA modes for drives */ |
708 | int (*speedproc)(ide_drive_t *, const u8); | 708 | int (*speedproc)(ide_drive_t *, const u8); |
709 | /* tweaks hardware to select drive */ | 709 | /* tweaks hardware to select drive */ |
@@ -1256,6 +1256,12 @@ enum { | |||
1256 | IDE_HFLAG_PIO_NO_BLACKLIST = (1 << 2), | 1256 | IDE_HFLAG_PIO_NO_BLACKLIST = (1 << 2), |
1257 | /* don't use conservative PIO "downgrade" */ | 1257 | /* don't use conservative PIO "downgrade" */ |
1258 | IDE_HFLAG_PIO_NO_DOWNGRADE = (1 << 3), | 1258 | IDE_HFLAG_PIO_NO_DOWNGRADE = (1 << 3), |
1259 | /* use PIO8/9 for prefetch off/on */ | ||
1260 | IDE_HFLAG_ABUSE_PREFETCH = (1 << 4), | ||
1261 | /* use PIO6/7 for fast-devsel off/on */ | ||
1262 | IDE_HFLAG_ABUSE_FAST_DEVSEL = (1 << 5), | ||
1263 | /* use 100-102 and 200-202 PIO values to set DMA modes */ | ||
1264 | IDE_HFLAG_ABUSE_DMA_MODES = (1 << 6), | ||
1259 | }; | 1265 | }; |
1260 | 1266 | ||
1261 | typedef struct ide_pci_device_s { | 1267 | typedef struct ide_pci_device_s { |
@@ -1414,6 +1420,12 @@ unsigned int ide_pio_cycle_time(ide_drive_t *, u8); | |||
1414 | u8 ide_get_best_pio_mode(ide_drive_t *, u8, u8); | 1420 | u8 ide_get_best_pio_mode(ide_drive_t *, u8, u8); |
1415 | extern const ide_pio_timings_t ide_pio_timings[6]; | 1421 | extern const ide_pio_timings_t ide_pio_timings[6]; |
1416 | 1422 | ||
1423 | void ide_set_pio(ide_drive_t *, u8); | ||
1424 | |||
1425 | static inline void ide_set_max_pio(ide_drive_t *drive) | ||
1426 | { | ||
1427 | ide_set_pio(drive, 255); | ||
1428 | } | ||
1417 | 1429 | ||
1418 | extern spinlock_t ide_lock; | 1430 | extern spinlock_t ide_lock; |
1419 | extern struct mutex ide_cfg_mtx; | 1431 | extern struct mutex ide_cfg_mtx; |