ide: add ide_dev_has_iordy() helper (take 4)
PATCH 1/1 ide: add ide_dev_has_iordy() helper (take 4)
* Add ide_dev_has_iordy() helper and use it sl82c105 host driver.
* Remove no longer needed ide_pio_data_t.use_iordy field.
v2/v3:
* Fix issues noticed by Sergei:
- correct patch description
- fix comment in ide_get_best_pio_mode()
v4:
* Fix "ata_" prefix (Noticed by Jeff).
--- drivers/ide/ide-lib.c | 7 +------ drivers/ide/pci/sl82c105.c | 10 +++++++--- include/linux/ide.h | 6 +++++- 3 files changed, 13 insertions(+), 10 deletions(-)
drivers/ide/ide-lib.c +1 -6
@@ -267,18 +267,15 @@ u8 ide_get_best_pio_mode (ide_drive_t *d {int pio_mode;int cycle_time =0 ; -int use_iordy =0 ;struct hd_driveid * id = drive->id;int overridden =0 ;if (mode_wanted !=255 ) { pio_mode = mode_wanted; - use_iordy = (pio_mode >2 ); }else if (!drive->id) { pio_mode =0 ; }else if ((pio_mode =ide_scan_pio_blacklist (id->model)) !=-1 ) {printk (KERN_INFO "%s: is on PIO blacklist\n" , drive->name); - use_iordy = (pio_mode >2 ); }else { pio_mode = id->tPIO;if (pio_mode >2 ) {/* 2 is maximum allowed tPIO value */
@@ -286,8 +283,7 @@ u8 ide_get_best_pio_mode (ide_drive_t *d overridden =1 ; }if (id->field_valid &2 ) {/* drive implements ATA2? */ -if (id->capability &8 ) {/* drive supports use_iordy? */ - use_iordy =1 ; +if (id->capability &8 ) {/* IORDY supported? */ cycle_time = id->eide_pio_iordy;if (id->eide_pio_modes &7 ) { overridden =0 ;
@@ -325,7 +321,6 @@ u8 ide_get_best_pio_mode (ide_drive_t *dif (d) { d->pio_mode = pio_mode; d->cycle_time = cycle_time ? cycle_time : ide_pio_timings[pio_mode].cycle_time; - d->use_iordy = use_iordy; }return pio_mode; }
drivers/ide/pci/sl82c105.c +7 -3
@@ -52,9 +52,10 @@* Convert a PIO mode and cycle time to the required on/off times * for the interface. This has protection against runaway timings. */ -static unsigned int get_pio_timings (ide_pio_data_t *p) +static unsigned int get_pio_timings (ide_drive_t *drive,ide_pio_data_t *p) {unsigned int cmd_on, cmd_off; +u8 iordy =0 ; cmd_on = (ide_pio_timings[p->pio_mode].active_time +29 ) /30 ; cmd_off = (p->cycle_time -30 * cmd_on +29 ) /30 ;
@@ -65,7 +66,10 @@ static unsigned int get_pio_timings(ide_if (cmd_off ==0 ) cmd_off =1 ; -return (cmd_on -1 ) <<8 | (cmd_off -1 ) | (p->use_iordy ?0x40 :0x00 ); +if (p->pio_mode >2 ||ide_dev_has_iordy (drive->id)) + iordy =0x40 ; + +return (cmd_on -1 ) <<8 | (cmd_off -1 ) | iordy; }/*
@@ -82,7 +86,7 @@ static u8 sl82c105_tune_pio(ide_drive_t pio =ide_get_best_pio_mode (drive, pio,5 , &p); - drv_ctrl =get_pio_timings (&p); + drv_ctrl =get_pio_timings (drive, &p);/* * Store the PIO timings so that we can restore them
include/linux/ide.h +5 -1
@@ -1363,6 +1363,11 @@ extern void ide_toggle_bounce(ide_drive_extern int ide_set_xfer_rate (ide_drive_t *drive,u8 rate);int ide_use_fast_pio (ide_drive_t *); +static inline int ide_dev_has_iordy (struct hd_driveid *id) +{ +return ((id->field_valid &2 ) && (id->capability &8 )) ?1 :0 ; +} +u8 ide_dump_status (ide_drive_t *,const char *,u8 ); typedef struct ide_pio_timings_s {
@@ -1374,7 +1379,6 @@ typedef struct ide_pio_timings_s {typedef struct ide_pio_data_s {u8 pio_mode; -u8 use_iordy;unsigned int cycle_time; }ide_pio_data_t ;
Hello.
Quoted 11 lines · Bartlomiej Zolnierkiewicz
* Add
ide_dev_has_iordy()helper and use it sl82c105 host driver.* Remove no longer needed ide_pio_data_t.use_iordy field.
v2/v3:
* Fix issues noticed by Sergei:
- correct patch description
- fix comment inide_get_best_pio_mode()v4:
* Fix "ata_" prefix (Noticed by Jeff).
I've noticed it first! ;-)
MBR, Sergei
Hello,
Quoted 12 lines · you
Hello.
Quoted 8 lines · Bartlomiej Zolnierkiewicz
* Add
ide_dev_has_iordy()helper and use it sl82c105 host driver.* Remove no longer needed ide_pio_data_t.use_iordy field.
v2/v3:
* Fix issues noticed by Sergei:
- correct patch description
- fix comment inide_get_best_pio_mode()
Quoted 4 lines
Quoted 2 lines
v4:
* Fix "ata_" prefix (Noticed by Jeff).I've noticed it first! ;-)
Yeah, but IIRC you didn't mention that "ata_" prefix is actually harmful!
Or you did but the message didn't get through... ;-)
Bart