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>
This commit is contained in:
parent
842c19ad6f
commit
26bcb879c0
45 changed files with 318 additions and 326 deletions
|
@ -634,7 +634,7 @@ typedef struct ide_drive_s {
|
|||
|
||||
unsigned int bios_cyl; /* BIOS/fdisk/LILO number of cyls */
|
||||
unsigned int cyl; /* "real" number of cyls */
|
||||
unsigned int drive_data; /* use by tuneproc/selectproc */
|
||||
unsigned int drive_data; /* used by set_pio_mode/selectproc */
|
||||
unsigned int failures; /* current failure count */
|
||||
unsigned int max_failures; /* maximum allowed failure count */
|
||||
u64 probed_capacity;/* initial reported media capacity (ide-cd only currently) */
|
||||
|
@ -702,8 +702,8 @@ typedef struct hwif_s {
|
|||
#if 0
|
||||
ide_hwif_ops_t *hwifops;
|
||||
#else
|
||||
/* routine to tune PIO mode for drives */
|
||||
void (*tuneproc)(ide_drive_t *, u8);
|
||||
/* routine to set PIO mode for drives */
|
||||
void (*set_pio_mode)(ide_drive_t *, const u8);
|
||||
/* routine to retune DMA modes for drives */
|
||||
int (*speedproc)(ide_drive_t *, const u8);
|
||||
/* tweaks hardware to select drive */
|
||||
|
@ -1256,6 +1256,12 @@ enum {
|
|||
IDE_HFLAG_PIO_NO_BLACKLIST = (1 << 2),
|
||||
/* don't use conservative PIO "downgrade" */
|
||||
IDE_HFLAG_PIO_NO_DOWNGRADE = (1 << 3),
|
||||
/* use PIO8/9 for prefetch off/on */
|
||||
IDE_HFLAG_ABUSE_PREFETCH = (1 << 4),
|
||||
/* use PIO6/7 for fast-devsel off/on */
|
||||
IDE_HFLAG_ABUSE_FAST_DEVSEL = (1 << 5),
|
||||
/* use 100-102 and 200-202 PIO values to set DMA modes */
|
||||
IDE_HFLAG_ABUSE_DMA_MODES = (1 << 6),
|
||||
};
|
||||
|
||||
typedef struct ide_pci_device_s {
|
||||
|
@ -1414,6 +1420,12 @@ unsigned int ide_pio_cycle_time(ide_drive_t *, u8);
|
|||
u8 ide_get_best_pio_mode(ide_drive_t *, u8, u8);
|
||||
extern const ide_pio_timings_t ide_pio_timings[6];
|
||||
|
||||
void ide_set_pio(ide_drive_t *, u8);
|
||||
|
||||
static inline void ide_set_max_pio(ide_drive_t *drive)
|
||||
{
|
||||
ide_set_pio(drive, 255);
|
||||
}
|
||||
|
||||
extern spinlock_t ide_lock;
|
||||
extern struct mutex ide_cfg_mtx;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue