ide: add ide_execute_pkt_cmd() helper
PATCH 3/3 ide: add ide_execute_pkt_cmd() helper
Add ide_execute_pkt_cmd() helper for executing PACKET command, then convert ATAPI device drivers to use it.
As a nice side-effect this fixes ide-{floppy,tape,scsi} w.r.t. ide_lock taking (ide-cd was OK).
Signed-off-by Bartlomiej Zolnierkiewicz <[email protected]>
--- drivers/ide/ide-cd.c | 9 +-------- drivers/ide/ide-floppy.c | 4 +--- drivers/ide/ide-iops.c | 12 +++++++++++- drivers/ide/ide-tape.c | 4 +--- drivers/scsi/ide-scsi.c | 4 +--- include/linux/ide.h | 2 ++ 6 files changed, 17 insertions(+), 18 deletions(-)
drivers/ide/ide-cd.c +1 -8
@@ -555,14 +555,7 @@ static ide_startstop_t cdrom_start_packe ATAPI_WAIT_PC, cdrom_timer_expiry);return ide_started; }else { -unsigned long flags; - -/* packet command */ -spin_lock_irqsave (&ide_lock, flags); - hwif->OUTBSYNC (drive,WIN_PACKETCMD , - hwif->io_ports.command_addr); -ndelay (400 ); -spin_unlock_irqrestore (&ide_lock, flags); +ide_execute_pkt_cmd (drive);return (*handler) (drive); }
drivers/ide/ide-floppy.c +1 -3
@@ -696,9 +696,7 @@ static ide_startstop_t idefloppy_issue_preturn ide_started; }else {/* Issue the packet command */ - hwif->OUTBSYNC (drive,WIN_PACKETCMD , - hwif->io_ports.command_addr); -ndelay (400 ); +ide_execute_pkt_cmd (drive);return (*pkt_xfer_routine) (drive); } }
drivers/ide/ide-iops.c +11 -1
@@ -801,9 +801,19 @@ void ide_execute_command(ide_drive_t *drndelay (400 );spin_unlock_irqrestore (&ide_lock, flags); } -EXPORT_SYMBOL (ide_execute_command); +void ide_execute_pkt_cmd (ide_drive_t *drive) +{ +ide_hwif_t *hwif = drive->hwif; +unsigned long flags; + +spin_lock_irqsave (&ide_lock, flags); + hwif->OUTBSYNC (drive,WIN_PACKETCMD , hwif->io_ports.command_addr); +ndelay (400 ); +spin_unlock_irqrestore (&ide_lock, flags); +} +EXPORT_SYMBOL_GPL (ide_execute_pkt_cmd);/* needed below */ static ide_startstop_t do_reset1 (ide_drive_t *,int );
drivers/ide/ide-tape.c +1 -3
@@ -1056,9 +1056,7 @@ static ide_startstop_t idetape_issue_pc( IDETAPE_WAIT_CMD, NULL);return ide_started; }else { - hwif->OUTBSYNC (drive,WIN_PACKETCMD , - hwif->io_ports.command_addr); -ndelay (400 ); +ide_execute_pkt_cmd (drive);return idetape_transfer_pc (drive); } }
drivers/scsi/ide-scsi.c +1 -3
@@ -574,9 +574,7 @@ static ide_startstop_t idescsi_issue_pc(return ide_started; }else {/* Issue the packet command */ - hwif->OUTBSYNC (drive,WIN_PACKETCMD , - hwif->io_ports.command_addr); -ndelay (400 ); +ide_execute_pkt_cmd (drive);return idescsi_transfer_pc (drive); } }
include/linux/ide.h +2 -0
@@ -811,6 +811,8 @@ extern void ide_set_handler (ide_drive_tvoid ide_execute_command (ide_drive_t *,u8 ,ide_handler_t *,unsigned int ,ide_expiry_t *); +void ide_execute_pkt_cmd (ide_drive_t *); +ide_startstop_t __ide_error (ide_drive_t *,struct request *,u8 ,u8 );ide_startstop_t ide_error (ide_drive_t *drive,const char *msg,byte stat);