ide-cd: move cdrom_timer_expiry to ide-atapi.c
- cdrom_timer_expiry -> ide_cd_expiry - remove expiry-arg to ide_issue_pc as it is redundant now - ide_debug_log -> debug_log Signed-off-by: Borislav Petkov <petkovbb@gmail.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
parent
5f25843fa7
commit
4cad085efb
|
@ -3,6 +3,7 @@
|
|||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/cdrom.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/ide.h>
|
||||
#include <scsi/scsi.h>
|
||||
|
@ -252,6 +253,38 @@ int ide_scsi_expiry(ide_drive_t *drive)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(ide_scsi_expiry);
|
||||
|
||||
int ide_cd_expiry(ide_drive_t *drive)
|
||||
{
|
||||
struct request *rq = HWGROUP(drive)->rq;
|
||||
unsigned long wait = 0;
|
||||
|
||||
debug_log("%s: rq->cmd[0]: 0x%x\n", __func__, rq->cmd[0]);
|
||||
|
||||
/*
|
||||
* Some commands are *slow* and normally take a long time to complete.
|
||||
* Usually we can use the ATAPI "disconnect" to bypass this, but not all
|
||||
* commands/drives support that. Let ide_timer_expiry keep polling us
|
||||
* for these.
|
||||
*/
|
||||
switch (rq->cmd[0]) {
|
||||
case GPCMD_BLANK:
|
||||
case GPCMD_FORMAT_UNIT:
|
||||
case GPCMD_RESERVE_RZONE_TRACK:
|
||||
case GPCMD_CLOSE_TRACK:
|
||||
case GPCMD_FLUSH_CACHE:
|
||||
wait = ATAPI_WAIT_PC;
|
||||
break;
|
||||
default:
|
||||
if (!(rq->cmd_flags & REQ_QUIET))
|
||||
printk(KERN_INFO "cmd 0x%x timed out\n",
|
||||
rq->cmd[0]);
|
||||
wait = 0;
|
||||
break;
|
||||
}
|
||||
return wait;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ide_cd_expiry);
|
||||
|
||||
int ide_cd_get_xferlen(struct request *rq)
|
||||
{
|
||||
if (blk_fs_request(rq))
|
||||
|
@ -562,11 +595,11 @@ static ide_startstop_t ide_transfer_pc(ide_drive_t *drive)
|
|||
return ide_started;
|
||||
}
|
||||
|
||||
ide_startstop_t ide_issue_pc(ide_drive_t *drive, unsigned int timeout,
|
||||
ide_expiry_t *expiry)
|
||||
ide_startstop_t ide_issue_pc(ide_drive_t *drive, unsigned int timeout)
|
||||
{
|
||||
struct ide_atapi_pc *pc = drive->pc;
|
||||
ide_hwif_t *hwif = drive->hwif;
|
||||
ide_expiry_t *expiry = NULL;
|
||||
u32 tf_flags;
|
||||
u16 bcount;
|
||||
u8 scsi = !!(drive->dev_flags & IDE_DFLAG_SCSI);
|
||||
|
@ -578,9 +611,11 @@ ide_startstop_t ide_issue_pc(ide_drive_t *drive, unsigned int timeout,
|
|||
if (dev_is_idecd(drive)) {
|
||||
tf_flags = IDE_TFLAG_OUT_NSECT | IDE_TFLAG_OUT_LBAL;
|
||||
bcount = ide_cd_get_xferlen(hwif->hwgroup->rq);
|
||||
expiry = ide_cd_expiry;
|
||||
} else if (scsi) {
|
||||
tf_flags = 0;
|
||||
bcount = min(pc->req_xfer, 63 * 1024);
|
||||
expiry = ide_scsi_expiry;
|
||||
} else {
|
||||
tf_flags = IDE_TFLAG_OUT_DEVICE;
|
||||
bcount = ((drive->media == ide_tape) ?
|
||||
|
@ -613,7 +648,7 @@ ide_startstop_t ide_issue_pc(ide_drive_t *drive, unsigned int timeout,
|
|||
if (drive->dma)
|
||||
drive->waiting_for_dma = 0;
|
||||
ide_execute_command(drive, ATA_CMD_PACKET, ide_transfer_pc,
|
||||
timeout, NULL);
|
||||
timeout, expiry);
|
||||
return ide_started;
|
||||
} else {
|
||||
ide_execute_pkt_cmd(drive);
|
||||
|
|
|
@ -511,38 +511,6 @@ end_request:
|
|||
return 1;
|
||||
}
|
||||
|
||||
static int cdrom_timer_expiry(ide_drive_t *drive)
|
||||
{
|
||||
struct request *rq = HWGROUP(drive)->rq;
|
||||
unsigned long wait = 0;
|
||||
|
||||
ide_debug_log(IDE_DBG_RQ, "Call %s: rq->cmd[0]: 0x%x\n", __func__,
|
||||
rq->cmd[0]);
|
||||
|
||||
/*
|
||||
* Some commands are *slow* and normally take a long time to complete.
|
||||
* Usually we can use the ATAPI "disconnect" to bypass this, but not all
|
||||
* commands/drives support that. Let ide_timer_expiry keep polling us
|
||||
* for these.
|
||||
*/
|
||||
switch (rq->cmd[0]) {
|
||||
case GPCMD_BLANK:
|
||||
case GPCMD_FORMAT_UNIT:
|
||||
case GPCMD_RESERVE_RZONE_TRACK:
|
||||
case GPCMD_CLOSE_TRACK:
|
||||
case GPCMD_FLUSH_CACHE:
|
||||
wait = ATAPI_WAIT_PC;
|
||||
break;
|
||||
default:
|
||||
if (!(rq->cmd_flags & REQ_QUIET))
|
||||
printk(KERN_INFO PFX "cmd 0x%x timed out\n",
|
||||
rq->cmd[0]);
|
||||
wait = 0;
|
||||
break;
|
||||
}
|
||||
return wait;
|
||||
}
|
||||
|
||||
/*
|
||||
* Set up the device registers for transferring a packet command on DEV,
|
||||
* expecting to later transfer XFERLEN bytes. HANDLER is the routine
|
||||
|
@ -574,7 +542,7 @@ static ide_startstop_t cdrom_start_packet_command(ide_drive_t *drive,
|
|||
|
||||
/* packet command */
|
||||
ide_execute_command(drive, ATA_CMD_PACKET, handler,
|
||||
ATAPI_WAIT_PC, cdrom_timer_expiry);
|
||||
ATAPI_WAIT_PC, ide_cd_expiry);
|
||||
return ide_started;
|
||||
} else {
|
||||
ide_execute_pkt_cmd(drive);
|
||||
|
@ -621,7 +589,7 @@ static ide_startstop_t cdrom_transfer_packet_command(ide_drive_t *drive,
|
|||
}
|
||||
|
||||
/* arm the interrupt handler */
|
||||
ide_set_handler(drive, handler, rq->timeout, cdrom_timer_expiry);
|
||||
ide_set_handler(drive, handler, rq->timeout, ide_cd_expiry);
|
||||
|
||||
/* ATAPI commands get padded out to 12 bytes minimum */
|
||||
cmd_len = COMMAND_SIZE(rq->cmd[0]);
|
||||
|
@ -1088,7 +1056,7 @@ static ide_startstop_t cdrom_newpc_intr(ide_drive_t *drive)
|
|||
} else {
|
||||
timeout = ATAPI_WAIT_PC;
|
||||
if (!blk_fs_request(rq))
|
||||
expiry = cdrom_timer_expiry;
|
||||
expiry = ide_cd_expiry;
|
||||
}
|
||||
|
||||
ide_set_handler(drive, cdrom_newpc_intr, timeout, expiry);
|
||||
|
|
|
@ -16,10 +16,6 @@
|
|||
#define ide_debug_log(lvl, fmt, args...) do {} while (0)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* typical timeout for packet command
|
||||
*/
|
||||
#define ATAPI_WAIT_PC (60 * HZ)
|
||||
#define ATAPI_WAIT_WRITE_BUSY (10 * HZ)
|
||||
|
||||
/************************************************************************/
|
||||
|
|
|
@ -197,7 +197,7 @@ static ide_startstop_t idefloppy_issue_pc(ide_drive_t *drive,
|
|||
|
||||
pc->retries++;
|
||||
|
||||
return ide_issue_pc(drive, WAIT_FLOPPY_CMD, NULL);
|
||||
return ide_issue_pc(drive, WAIT_FLOPPY_CMD);
|
||||
}
|
||||
|
||||
void ide_floppy_create_read_capacity_cmd(struct ide_atapi_pc *pc)
|
||||
|
|
|
@ -694,7 +694,7 @@ static ide_startstop_t idetape_issue_pc(ide_drive_t *drive,
|
|||
|
||||
pc->retries++;
|
||||
|
||||
return ide_issue_pc(drive, WAIT_TAPE_CMD, NULL);
|
||||
return ide_issue_pc(drive, WAIT_TAPE_CMD);
|
||||
}
|
||||
|
||||
/* A mode sense command is used to "sense" tape parameters. */
|
||||
|
|
|
@ -396,6 +396,7 @@ enum {
|
|||
* This is used for several packet commands (not for READ/WRITE commands).
|
||||
*/
|
||||
#define IDE_PC_BUFFER_SIZE 256
|
||||
#define ATAPI_WAIT_PC (60 * HZ)
|
||||
|
||||
struct ide_atapi_pc {
|
||||
/* actual packet bytes */
|
||||
|
@ -1253,10 +1254,11 @@ static inline unsigned long ide_scsi_get_timeout(struct ide_atapi_pc *pc)
|
|||
}
|
||||
|
||||
int ide_scsi_expiry(ide_drive_t *);
|
||||
int ide_cd_expiry(ide_drive_t *);
|
||||
|
||||
int ide_cd_get_xferlen(struct request *);
|
||||
|
||||
ide_startstop_t ide_issue_pc(ide_drive_t *, unsigned int, ide_expiry_t *);
|
||||
ide_startstop_t ide_issue_pc(ide_drive_t *, unsigned int);
|
||||
|
||||
ide_startstop_t do_rw_taskfile(ide_drive_t *, ide_task_t *);
|
||||
|
||||
|
|
Loading…
Reference in New Issue