Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4cad085e authored by Borislav Petkov's avatar Borislav Petkov Committed by Bartlomiej Zolnierkiewicz
Browse files

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: default avatarBorislav Petkov <petkovbb@gmail.com>
Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
parent 5f25843f
Loading
Loading
Loading
Loading
+38 −3
Original line number Original line Diff line number Diff line
@@ -3,6 +3,7 @@
 */
 */


#include <linux/kernel.h>
#include <linux/kernel.h>
#include <linux/cdrom.h>
#include <linux/delay.h>
#include <linux/delay.h>
#include <linux/ide.h>
#include <linux/ide.h>
#include <scsi/scsi.h>
#include <scsi/scsi.h>
@@ -252,6 +253,38 @@ int ide_scsi_expiry(ide_drive_t *drive)
}
}
EXPORT_SYMBOL_GPL(ide_scsi_expiry);
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)
int ide_cd_get_xferlen(struct request *rq)
{
{
	if (blk_fs_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;
	return ide_started;
}
}


ide_startstop_t ide_issue_pc(ide_drive_t *drive, unsigned int timeout,
ide_startstop_t ide_issue_pc(ide_drive_t *drive, unsigned int timeout)
			     ide_expiry_t *expiry)
{
{
	struct ide_atapi_pc *pc = drive->pc;
	struct ide_atapi_pc *pc = drive->pc;
	ide_hwif_t *hwif = drive->hwif;
	ide_hwif_t *hwif = drive->hwif;
	ide_expiry_t *expiry = NULL;
	u32 tf_flags;
	u32 tf_flags;
	u16 bcount;
	u16 bcount;
	u8 scsi = !!(drive->dev_flags & IDE_DFLAG_SCSI);
	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)) {
	if (dev_is_idecd(drive)) {
		tf_flags = IDE_TFLAG_OUT_NSECT | IDE_TFLAG_OUT_LBAL;
		tf_flags = IDE_TFLAG_OUT_NSECT | IDE_TFLAG_OUT_LBAL;
		bcount = ide_cd_get_xferlen(hwif->hwgroup->rq);
		bcount = ide_cd_get_xferlen(hwif->hwgroup->rq);
		expiry = ide_cd_expiry;
	} else if (scsi) {
	} else if (scsi) {
		tf_flags = 0;
		tf_flags = 0;
		bcount = min(pc->req_xfer, 63 * 1024);
		bcount = min(pc->req_xfer, 63 * 1024);
		expiry = ide_scsi_expiry;
	} else {
	} else {
		tf_flags = IDE_TFLAG_OUT_DEVICE;
		tf_flags = IDE_TFLAG_OUT_DEVICE;
		bcount = ((drive->media == ide_tape) ?
		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)
		if (drive->dma)
			drive->waiting_for_dma = 0;
			drive->waiting_for_dma = 0;
		ide_execute_command(drive, ATA_CMD_PACKET, ide_transfer_pc,
		ide_execute_command(drive, ATA_CMD_PACKET, ide_transfer_pc,
				    timeout, NULL);
				    timeout, expiry);
		return ide_started;
		return ide_started;
	} else {
	} else {
		ide_execute_pkt_cmd(drive);
		ide_execute_pkt_cmd(drive);
+3 −35
Original line number Original line Diff line number Diff line
@@ -511,38 +511,6 @@ static int cdrom_decode_status(ide_drive_t *drive, int good_stat, int *stat_ret)
	return 1;
	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,
 * Set up the device registers for transferring a packet command on DEV,
 * expecting to later transfer XFERLEN bytes.  HANDLER is the routine
 * 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 */
		/* packet command */
		ide_execute_command(drive, ATA_CMD_PACKET, handler,
		ide_execute_command(drive, ATA_CMD_PACKET, handler,
				    ATAPI_WAIT_PC, cdrom_timer_expiry);
				    ATAPI_WAIT_PC, ide_cd_expiry);
		return ide_started;
		return ide_started;
	} else {
	} else {
		ide_execute_pkt_cmd(drive);
		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 */
	/* 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 */
	/* ATAPI commands get padded out to 12 bytes minimum */
	cmd_len = COMMAND_SIZE(rq->cmd[0]);
	cmd_len = COMMAND_SIZE(rq->cmd[0]);
@@ -1088,7 +1056,7 @@ static ide_startstop_t cdrom_newpc_intr(ide_drive_t *drive)
	} else {
	} else {
		timeout = ATAPI_WAIT_PC;
		timeout = ATAPI_WAIT_PC;
		if (!blk_fs_request(rq))
		if (!blk_fs_request(rq))
			expiry = cdrom_timer_expiry;
			expiry = ide_cd_expiry;
	}
	}


	ide_set_handler(drive, cdrom_newpc_intr, timeout, expiry);
	ide_set_handler(drive, cdrom_newpc_intr, timeout, expiry);
+0 −4
Original line number Original line Diff line number Diff line
@@ -16,10 +16,6 @@
#define ide_debug_log(lvl, fmt, args...) do {} while (0)
#define ide_debug_log(lvl, fmt, args...) do {} while (0)
#endif
#endif


/*
 * typical timeout for packet command
 */
#define ATAPI_WAIT_PC		(60 * HZ)
#define ATAPI_WAIT_WRITE_BUSY	(10 * HZ)
#define ATAPI_WAIT_WRITE_BUSY	(10 * HZ)


/************************************************************************/
/************************************************************************/
+1 −1
Original line number Original line Diff line number Diff line
@@ -197,7 +197,7 @@ static ide_startstop_t idefloppy_issue_pc(ide_drive_t *drive,


	pc->retries++;
	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)
void ide_floppy_create_read_capacity_cmd(struct ide_atapi_pc *pc)
+1 −1
Original line number Original line Diff line number Diff line
@@ -694,7 +694,7 @@ static ide_startstop_t idetape_issue_pc(ide_drive_t *drive,


	pc->retries++;
	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. */
/* A mode sense command is used to "sense" tape parameters. */
Loading