|
@@ -13,8 +13,8 @@
|
|
|
*
|
|
|
* Suggestions are welcome. Patches that work are more welcome though. ;-)
|
|
|
* For those wishing to work on this driver, please be sure you download
|
|
|
- * and comply with the latest Mt. Fuji (SFF8090 version 4) and ATAPI
|
|
|
- * (SFF-8020i rev 2.6) standards. These documents can be obtained by
|
|
|
+ * and comply with the latest Mt. Fuji (SFF8090 version 4) and ATAPI
|
|
|
+ * (SFF-8020i rev 2.6) standards. These documents can be obtained by
|
|
|
* anonymous ftp from:
|
|
|
* ftp://fission.dt.wdc.com/pub/standards/SFF_atapi/spec/SFF8020-r2.6/PS/8020r26.ps
|
|
|
* ftp://ftp.avc-pioneer.com/Mtfuji4/Spec/Fuji4r10.pdf
|
|
@@ -51,7 +51,7 @@
|
|
|
|
|
|
static DEFINE_MUTEX(idecd_ref_mutex);
|
|
|
|
|
|
-#define to_ide_cd(obj) container_of(obj, struct cdrom_info, kref)
|
|
|
+#define to_ide_cd(obj) container_of(obj, struct cdrom_info, kref)
|
|
|
|
|
|
#define ide_cd_g(disk) \
|
|
|
container_of((disk)->private_data, struct cdrom_info, driver)
|
|
@@ -83,7 +83,7 @@ static void ide_cd_put(struct cdrom_info *cd)
|
|
|
|
|
|
/* Mark that we've seen a media change, and invalidate our internal
|
|
|
buffers. */
|
|
|
-static void cdrom_saw_media_change (ide_drive_t *drive)
|
|
|
+static void cdrom_saw_media_change(ide_drive_t *drive)
|
|
|
{
|
|
|
struct cdrom_info *cd = drive->driver_data;
|
|
|
|
|
@@ -100,38 +100,39 @@ static int cdrom_log_sense(ide_drive_t *drive, struct request *rq,
|
|
|
return 0;
|
|
|
|
|
|
switch (sense->sense_key) {
|
|
|
- case NO_SENSE: case RECOVERED_ERROR:
|
|
|
- break;
|
|
|
- case NOT_READY:
|
|
|
- /*
|
|
|
- * don't care about tray state messages for
|
|
|
- * e.g. capacity commands or in-progress or
|
|
|
- * becoming ready
|
|
|
- */
|
|
|
- if (sense->asc == 0x3a || sense->asc == 0x04)
|
|
|
- break;
|
|
|
- log = 1;
|
|
|
- break;
|
|
|
- case ILLEGAL_REQUEST:
|
|
|
- /*
|
|
|
- * don't log START_STOP unit with LoEj set, since
|
|
|
- * we cannot reliably check if drive can auto-close
|
|
|
- */
|
|
|
- if (rq->cmd[0] == GPCMD_START_STOP_UNIT && sense->asc == 0x24)
|
|
|
- break;
|
|
|
- log = 1;
|
|
|
- break;
|
|
|
- case UNIT_ATTENTION:
|
|
|
- /*
|
|
|
- * Make good and sure we've seen this potential media
|
|
|
- * change. Some drives (i.e. Creative) fail to present
|
|
|
- * the correct sense key in the error register.
|
|
|
- */
|
|
|
- cdrom_saw_media_change(drive);
|
|
|
+ case NO_SENSE:
|
|
|
+ case RECOVERED_ERROR:
|
|
|
+ break;
|
|
|
+ case NOT_READY:
|
|
|
+ /*
|
|
|
+ * don't care about tray state messages for
|
|
|
+ * e.g. capacity commands or in-progress or
|
|
|
+ * becoming ready
|
|
|
+ */
|
|
|
+ if (sense->asc == 0x3a || sense->asc == 0x04)
|
|
|
break;
|
|
|
- default:
|
|
|
- log = 1;
|
|
|
+ log = 1;
|
|
|
+ break;
|
|
|
+ case ILLEGAL_REQUEST:
|
|
|
+ /*
|
|
|
+ * don't log START_STOP unit with LoEj set, since
|
|
|
+ * we cannot reliably check if drive can auto-close
|
|
|
+ */
|
|
|
+ if (rq->cmd[0] == GPCMD_START_STOP_UNIT && sense->asc == 0x24)
|
|
|
break;
|
|
|
+ log = 1;
|
|
|
+ break;
|
|
|
+ case UNIT_ATTENTION:
|
|
|
+ /*
|
|
|
+ * Make good and sure we've seen this potential media
|
|
|
+ * change. Some drives (i.e. Creative) fail to present
|
|
|
+ * the correct sense key in the error register.
|
|
|
+ */
|
|
|
+ cdrom_saw_media_change(drive);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ log = 1;
|
|
|
+ break;
|
|
|
}
|
|
|
return log;
|
|
|
}
|
|
@@ -158,8 +159,8 @@ void cdrom_analyze_sense_data(ide_drive_t *drive,
|
|
|
if (sense->sense_key == 0x05 && sense->asc == 0x24)
|
|
|
return;
|
|
|
|
|
|
- if (sense->error_code == 0x70) { /* Current Error */
|
|
|
- switch(sense->sense_key) {
|
|
|
+ if (sense->error_code == 0x70) { /* Current Error */
|
|
|
+ switch (sense->sense_key) {
|
|
|
case MEDIUM_ERROR:
|
|
|
case VOLUME_OVERFLOW:
|
|
|
case ILLEGAL_REQUEST:
|
|
@@ -178,7 +179,7 @@ void cdrom_analyze_sense_data(ide_drive_t *drive,
|
|
|
bio_sectors = 4;
|
|
|
if (drive->queue->hardsect_size == 2048)
|
|
|
sector <<= 2; /* Device sector size is 2K */
|
|
|
- sector &= ~(bio_sectors -1);
|
|
|
+ sector &= ~(bio_sectors - 1);
|
|
|
valid = (sector - failed_command->sector) << 9;
|
|
|
|
|
|
if (valid < 0)
|
|
@@ -187,8 +188,8 @@ void cdrom_analyze_sense_data(ide_drive_t *drive,
|
|
|
drive->probed_capacity - sector < 4 * 75) {
|
|
|
set_capacity(info->disk, sector);
|
|
|
}
|
|
|
- }
|
|
|
- }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
ide_cd_log_error(drive->name, failed_command, sense);
|
|
|
}
|
|
@@ -229,7 +230,7 @@ static void cdrom_queue_request_sense(ide_drive_t *drive, void *sense,
|
|
|
(void) ide_do_drive_cmd(drive, rq, ide_preempt);
|
|
|
}
|
|
|
|
|
|
-static void cdrom_end_request (ide_drive_t *drive, int uptodate)
|
|
|
+static void cdrom_end_request(ide_drive_t *drive, int uptodate)
|
|
|
{
|
|
|
struct request *rq = HWGROUP(drive)->rq;
|
|
|
int nsectors = rq->hard_cur_sectors;
|
|
@@ -292,7 +293,7 @@ static int cdrom_decode_status(ide_drive_t *drive, int good_stat, int *stat_ret)
|
|
|
{
|
|
|
struct request *rq = HWGROUP(drive)->rq;
|
|
|
int stat, err, sense_key;
|
|
|
-
|
|
|
+
|
|
|
/* Check for errors. */
|
|
|
stat = ide_read_status(drive);
|
|
|
|
|
@@ -333,26 +334,26 @@ static int cdrom_decode_status(ide_drive_t *drive, int good_stat, int *stat_ret)
|
|
|
|
|
|
/* Check for tray open. */
|
|
|
if (sense_key == NOT_READY) {
|
|
|
- cdrom_saw_media_change (drive);
|
|
|
+ cdrom_saw_media_change(drive);
|
|
|
} else if (sense_key == UNIT_ATTENTION) {
|
|
|
/* Check for media change. */
|
|
|
- cdrom_saw_media_change (drive);
|
|
|
+ cdrom_saw_media_change(drive);
|
|
|
/*printk("%s: media changed\n",drive->name);*/
|
|
|
return 0;
|
|
|
- } else if ((sense_key == ILLEGAL_REQUEST) &&
|
|
|
- (rq->cmd[0] == GPCMD_START_STOP_UNIT)) {
|
|
|
- /*
|
|
|
- * Don't print error message for this condition--
|
|
|
- * SFF8090i indicates that 5/24/00 is the correct
|
|
|
- * response to a request to close the tray if the
|
|
|
- * drive doesn't have that capability.
|
|
|
- * cdrom_log_sense() knows this!
|
|
|
- */
|
|
|
+ } else if (sense_key == ILLEGAL_REQUEST &&
|
|
|
+ rq->cmd[0] == GPCMD_START_STOP_UNIT) {
|
|
|
+ /*
|
|
|
+ * Don't print error message for this condition--
|
|
|
+ * SFF8090i indicates that 5/24/00 is the correct
|
|
|
+ * response to a request to close the tray if the
|
|
|
+ * drive doesn't have that capability.
|
|
|
+ * cdrom_log_sense() knows this!
|
|
|
+ */
|
|
|
} else if (!(rq->cmd_flags & REQ_QUIET)) {
|
|
|
/* Otherwise, print an error. */
|
|
|
ide_dump_status(drive, "packet command error", stat);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
rq->cmd_flags |= REQ_FAILED;
|
|
|
|
|
|
/*
|
|
@@ -373,10 +374,10 @@ static int cdrom_decode_status(ide_drive_t *drive, int good_stat, int *stat_ret)
|
|
|
if (sense_key == NOT_READY) {
|
|
|
/* Tray open. */
|
|
|
if (rq_data_dir(rq) == READ) {
|
|
|
- cdrom_saw_media_change (drive);
|
|
|
+ cdrom_saw_media_change(drive);
|
|
|
|
|
|
/* Fail the request. */
|
|
|
- printk ("%s: tray open\n", drive->name);
|
|
|
+ printk("%s: tray open\n", drive->name);
|
|
|
do_end_request = 1;
|
|
|
} else {
|
|
|
struct cdrom_info *info = drive->driver_data;
|
|
@@ -398,7 +399,7 @@ static int cdrom_decode_status(ide_drive_t *drive, int good_stat, int *stat_ret)
|
|
|
*/
|
|
|
spin_lock_irqsave(&ide_lock, flags);
|
|
|
blk_plug_device(drive->queue);
|
|
|
- spin_unlock_irqrestore(&ide_lock,flags);
|
|
|
+ spin_unlock_irqrestore(&ide_lock, flags);
|
|
|
return 1;
|
|
|
}
|
|
|
}
|
|
@@ -406,25 +407,31 @@ static int cdrom_decode_status(ide_drive_t *drive, int good_stat, int *stat_ret)
|
|
|
/* Media change. */
|
|
|
cdrom_saw_media_change (drive);
|
|
|
|
|
|
- /* Arrange to retry the request.
|
|
|
- But be sure to give up if we've retried
|
|
|
- too many times. */
|
|
|
+ /*
|
|
|
+ * Arrange to retry the request.
|
|
|
+ * But be sure to give up if we've retried
|
|
|
+ * too many times.
|
|
|
+ */
|
|
|
if (++rq->errors > ERROR_MAX)
|
|
|
do_end_request = 1;
|
|
|
} else if (sense_key == ILLEGAL_REQUEST ||
|
|
|
sense_key == DATA_PROTECT) {
|
|
|
- /* No point in retrying after an illegal
|
|
|
- request or data protect error.*/
|
|
|
- ide_dump_status_no_sense (drive, "command error", stat);
|
|
|
+ /*
|
|
|
+ * No point in retrying after an illegal
|
|
|
+ * request or data protect error.
|
|
|
+ */
|
|
|
+ ide_dump_status_no_sense(drive, "command error", stat);
|
|
|
do_end_request = 1;
|
|
|
} else if (sense_key == MEDIUM_ERROR) {
|
|
|
- /* No point in re-trying a zillion times on a bad
|
|
|
- * sector... If we got here the error is not correctable */
|
|
|
- ide_dump_status_no_sense (drive, "media error (bad sector)", stat);
|
|
|
+ /*
|
|
|
+ * No point in re-trying a zillion times on a bad
|
|
|
+ * sector... If we got here the error is not correctable
|
|
|
+ */
|
|
|
+ ide_dump_status_no_sense(drive, "media error (bad sector)", stat);
|
|
|
do_end_request = 1;
|
|
|
} else if (sense_key == BLANK_CHECK) {
|
|
|
/* Disk appears blank ?? */
|
|
|
- ide_dump_status_no_sense (drive, "media error (blank)", stat);
|
|
|
+ ide_dump_status_no_sense(drive, "media error (blank)", stat);
|
|
|
do_end_request = 1;
|
|
|
} else if ((err & ~ABRT_ERR) != 0) {
|
|
|
/* Go to the default handler
|
|
@@ -485,18 +492,18 @@ static int cdrom_timer_expiry(ide_drive_t *drive)
|
|
|
* 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 "ide-cd: cmd 0x%x timed out\n", rq->cmd[0]);
|
|
|
- wait = 0;
|
|
|
- break;
|
|
|
+ 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 "ide-cd: cmd 0x%x timed out\n", rq->cmd[0]);
|
|
|
+ wait = 0;
|
|
|
+ break;
|
|
|
}
|
|
|
return wait;
|
|
|
}
|
|
@@ -556,7 +563,7 @@ static ide_startstop_t cdrom_start_packet_command(ide_drive_t *drive,
|
|
|
HANDLER is the interrupt handler to call when the command completes
|
|
|
or there's data ready. */
|
|
|
#define ATAPI_MIN_CDB_BYTES 12
|
|
|
-static ide_startstop_t cdrom_transfer_packet_command (ide_drive_t *drive,
|
|
|
+static ide_startstop_t cdrom_transfer_packet_command(ide_drive_t *drive,
|
|
|
struct request *rq,
|
|
|
ide_handler_t *handler)
|
|
|
{
|
|
@@ -748,7 +755,7 @@ static ide_startstop_t cdrom_start_rw_cont(ide_drive_t *drive)
|
|
|
#define IDECD_SEEK_TIMER (5 * WAIT_MIN_SLEEP) /* 100 ms */
|
|
|
#define IDECD_SEEK_TIMEOUT (2 * WAIT_CMD) /* 20 sec */
|
|
|
|
|
|
-static ide_startstop_t cdrom_seek_intr (ide_drive_t *drive)
|
|
|
+static ide_startstop_t cdrom_seek_intr(ide_drive_t *drive)
|
|
|
{
|
|
|
struct cdrom_info *info = drive->driver_data;
|
|
|
int stat;
|
|
@@ -765,14 +772,14 @@ static ide_startstop_t cdrom_seek_intr (ide_drive_t *drive)
|
|
|
* this condition is far too common, to bother
|
|
|
* users about it
|
|
|
*/
|
|
|
- /* printk("%s: disabled DSC seek overlap\n", drive->name);*/
|
|
|
+ /* printk("%s: disabled DSC seek overlap\n", drive->name);*/
|
|
|
drive->dsc_overlap = 0;
|
|
|
}
|
|
|
}
|
|
|
return ide_stopped;
|
|
|
}
|
|
|
|
|
|
-static ide_startstop_t cdrom_start_seek_continuation (ide_drive_t *drive)
|
|
|
+static ide_startstop_t cdrom_start_seek_continuation(ide_drive_t *drive)
|
|
|
{
|
|
|
struct request *rq = HWGROUP(drive)->rq;
|
|
|
sector_t frame = rq->sector;
|
|
@@ -787,7 +794,7 @@ static ide_startstop_t cdrom_start_seek_continuation (ide_drive_t *drive)
|
|
|
return cdrom_transfer_packet_command(drive, rq, &cdrom_seek_intr);
|
|
|
}
|
|
|
|
|
|
-static ide_startstop_t cdrom_start_seek (ide_drive_t *drive, unsigned int block)
|
|
|
+static ide_startstop_t cdrom_start_seek(ide_drive_t *drive, unsigned int block)
|
|
|
{
|
|
|
struct cdrom_info *info = drive->driver_data;
|
|
|
|
|
@@ -796,9 +803,11 @@ static ide_startstop_t cdrom_start_seek (ide_drive_t *drive, unsigned int block)
|
|
|
return cdrom_start_packet_command(drive, 0, cdrom_start_seek_continuation);
|
|
|
}
|
|
|
|
|
|
-/* Fix up a possibly partially-processed request so that we can
|
|
|
- start it over entirely, or even put it back on the request queue. */
|
|
|
-static void restore_request (struct request *rq)
|
|
|
+/*
|
|
|
+ * Fix up a possibly partially-processed request so that we can
|
|
|
+ * start it over entirely, or even put it back on the request queue.
|
|
|
+ */
|
|
|
+static void restore_request(struct request *rq)
|
|
|
{
|
|
|
if (rq->buffer != bio_data(rq->bio)) {
|
|
|
sector_t n = (rq->buffer - (char *) bio_data(rq->bio)) / SECTOR_SIZE;
|
|
@@ -849,7 +858,7 @@ int ide_cd_queue_pc(ide_drive_t *drive, struct request *rq)
|
|
|
error = ide_do_drive_cmd(drive, rq, ide_wait);
|
|
|
time = jiffies - time;
|
|
|
|
|
|
- /* FIXME: we should probably abort/retry or something
|
|
|
+ /* FIXME: we should probably abort/retry or something
|
|
|
* in case of failure */
|
|
|
if (rq->cmd_flags & REQ_FAILED) {
|
|
|
/* The request failed. Retry if it was due to a unit
|
|
@@ -1210,7 +1219,7 @@ static ide_startstop_t cdrom_do_block_pc(ide_drive_t *drive, struct request *rq)
|
|
|
* cdrom driver request routine.
|
|
|
*/
|
|
|
static ide_startstop_t
|
|
|
-ide_do_rw_cdrom (ide_drive_t *drive, struct request *rq, sector_t block)
|
|
|
+ide_do_rw_cdrom(ide_drive_t *drive, struct request *rq, sector_t block)
|
|
|
{
|
|
|
ide_startstop_t action;
|
|
|
struct cdrom_info *info = drive->driver_data;
|
|
@@ -1225,13 +1234,13 @@ ide_do_rw_cdrom (ide_drive_t *drive, struct request *rq, sector_t block)
|
|
|
ide_stall_queue(drive, IDECD_SEEK_TIMER);
|
|
|
return ide_stopped;
|
|
|
}
|
|
|
- printk (KERN_ERR "%s: DSC timeout\n", drive->name);
|
|
|
+ printk(KERN_ERR "%s: DSC timeout\n", drive->name);
|
|
|
}
|
|
|
info->cd_flags &= ~IDE_CD_FLAG_SEEKING;
|
|
|
}
|
|
|
- if ((rq_data_dir(rq) == READ) && IDE_LARGE_SEEK(info->last_block, block, IDECD_SEEK_THRESHOLD) && drive->dsc_overlap) {
|
|
|
+ if ((rq_data_dir(rq) == READ) && IDE_LARGE_SEEK(info->last_block, block, IDECD_SEEK_THRESHOLD) && drive->dsc_overlap)
|
|
|
action = cdrom_start_seek(drive, block);
|
|
|
- } else
|
|
|
+ else
|
|
|
action = cdrom_start_rw(drive, rq);
|
|
|
info->last_block = block;
|
|
|
return action;
|
|
@@ -1264,7 +1273,7 @@ ide_do_rw_cdrom (ide_drive_t *drive, struct request *rq, sector_t block)
|
|
|
*/
|
|
|
|
|
|
static
|
|
|
-void msf_from_bcd (struct atapi_msf *msf)
|
|
|
+void msf_from_bcd(struct atapi_msf *msf)
|
|
|
{
|
|
|
msf->minute = BCD2BIN(msf->minute);
|
|
|
msf->second = BCD2BIN(msf->second);
|
|
@@ -1364,7 +1373,7 @@ int ide_cd_read_toc(ide_drive_t *drive, struct request_sense *sense)
|
|
|
/* Try to allocate space. */
|
|
|
toc = kmalloc(sizeof(struct atapi_toc), GFP_KERNEL);
|
|
|
if (toc == NULL) {
|
|
|
- printk (KERN_ERR "%s: No cdrom TOC buffer!\n", drive->name);
|
|
|
+ printk(KERN_ERR "%s: No cdrom TOC buffer!\n", drive->name);
|
|
|
return -ENOMEM;
|
|
|
}
|
|
|
info->toc = toc;
|
|
@@ -1459,9 +1468,9 @@ int ide_cd_read_toc(ide_drive_t *drive, struct request_sense *sense)
|
|
|
toc->ent[i].track = BCD2BIN(toc->ent[i].track);
|
|
|
msf_from_bcd(&toc->ent[i].addr.msf);
|
|
|
}
|
|
|
- toc->ent[i].addr.lba = msf_to_lba (toc->ent[i].addr.msf.minute,
|
|
|
- toc->ent[i].addr.msf.second,
|
|
|
- toc->ent[i].addr.msf.frame);
|
|
|
+ toc->ent[i].addr.lba = msf_to_lba(toc->ent[i].addr.msf.minute,
|
|
|
+ toc->ent[i].addr.msf.second,
|
|
|
+ toc->ent[i].addr.msf.frame);
|
|
|
}
|
|
|
|
|
|
/* Read the multisession information. */
|
|
@@ -1485,9 +1494,9 @@ int ide_cd_read_toc(ide_drive_t *drive, struct request_sense *sense)
|
|
|
if (stat)
|
|
|
return stat;
|
|
|
|
|
|
- msf_from_bcd (&ms_tmp.ent.addr.msf);
|
|
|
+ msf_from_bcd(&ms_tmp.ent.addr.msf);
|
|
|
toc->last_session_lba = msf_to_lba(ms_tmp.ent.addr.msf.minute,
|
|
|
- ms_tmp.ent.addr.msf.second,
|
|
|
+ ms_tmp.ent.addr.msf.second,
|
|
|
ms_tmp.ent.addr.msf.frame);
|
|
|
}
|
|
|
|
|
@@ -1569,7 +1578,7 @@ static struct cdrom_device_ops ide_cdrom_dops = {
|
|
|
.generic_packet = ide_cdrom_packet,
|
|
|
};
|
|
|
|
|
|
-static int ide_cdrom_register (ide_drive_t *drive, int nslots)
|
|
|
+static int ide_cdrom_register(ide_drive_t *drive, int nslots)
|
|
|
{
|
|
|
struct cdrom_info *info = drive->driver_data;
|
|
|
struct cdrom_device_info *devinfo = &info->devinfo;
|
|
@@ -1588,7 +1597,7 @@ static int ide_cdrom_register (ide_drive_t *drive, int nslots)
|
|
|
}
|
|
|
|
|
|
static
|
|
|
-int ide_cdrom_probe_capabilities (ide_drive_t *drive)
|
|
|
+int ide_cdrom_probe_capabilities(ide_drive_t *drive)
|
|
|
{
|
|
|
struct cdrom_info *cd = drive->driver_data;
|
|
|
struct cdrom_device_info *cdi = &cd->devinfo;
|
|
@@ -1760,7 +1769,7 @@ static int ide_cdrom_prep_pc(struct request *rq)
|
|
|
rq->errors = ILLEGAL_REQUEST;
|
|
|
return BLKPREP_KILL;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
return BLKPREP_OK;
|
|
|
}
|
|
|
|
|
@@ -1838,7 +1847,7 @@ static unsigned int ide_cd_flags(struct hd_driveid *id)
|
|
|
}
|
|
|
|
|
|
static
|
|
|
-int ide_cdrom_setup (ide_drive_t *drive)
|
|
|
+int ide_cdrom_setup(ide_drive_t *drive)
|
|
|
{
|
|
|
struct cdrom_info *cd = drive->driver_data;
|
|
|
struct cdrom_device_info *cdi = &cd->devinfo;
|
|
@@ -1869,7 +1878,7 @@ int ide_cdrom_setup (ide_drive_t *drive)
|
|
|
else if (cd->cd_flags & IDE_CD_FLAG_SANYO_3CD)
|
|
|
cdi->sanyo_slot = 3; /* 3 => use CD in slot 0 */
|
|
|
|
|
|
- nslots = ide_cdrom_probe_capabilities (drive);
|
|
|
+ nslots = ide_cdrom_probe_capabilities(drive);
|
|
|
|
|
|
/*
|
|
|
* set correct block size
|
|
@@ -1881,7 +1890,7 @@ int ide_cdrom_setup (ide_drive_t *drive)
|
|
|
drive->dsc_overlap = (drive->next != drive);
|
|
|
|
|
|
if (ide_cdrom_register(drive, nslots)) {
|
|
|
- printk (KERN_ERR "%s: ide_cdrom_setup failed to register device with the cdrom driver.\n", drive->name);
|
|
|
+ printk(KERN_ERR "%s: ide_cdrom_setup failed to register device with the cdrom driver.\n", drive->name);
|
|
|
cd->devinfo.handle = NULL;
|
|
|
return 1;
|
|
|
}
|
|
@@ -1891,7 +1900,7 @@ int ide_cdrom_setup (ide_drive_t *drive)
|
|
|
|
|
|
#ifdef CONFIG_IDE_PROC_FS
|
|
|
static
|
|
|
-sector_t ide_cdrom_capacity (ide_drive_t *drive)
|
|
|
+sector_t ide_cdrom_capacity(ide_drive_t *drive)
|
|
|
{
|
|
|
unsigned long capacity, sectors_per_frame;
|
|
|
|
|
@@ -1940,8 +1949,8 @@ static int proc_idecd_read_capacity
|
|
|
ide_drive_t *drive = data;
|
|
|
int len;
|
|
|
|
|
|
- len = sprintf(page,"%llu\n", (long long)ide_cdrom_capacity(drive));
|
|
|
- PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
|
|
|
+ len = sprintf(page, "%llu\n", (long long)ide_cdrom_capacity(drive));
|
|
|
+ PROC_IDE_READ_RETURN(page, start, off, count, eof, len);
|
|
|
}
|
|
|
|
|
|
static ide_proc_entry_t idecd_proc[] = {
|
|
@@ -1970,13 +1979,14 @@ static ide_driver_t ide_cdrom_driver = {
|
|
|
#endif
|
|
|
};
|
|
|
|
|
|
-static int idecd_open(struct inode * inode, struct file * file)
|
|
|
+static int idecd_open(struct inode *inode, struct file *file)
|
|
|
{
|
|
|
struct gendisk *disk = inode->i_bdev->bd_disk;
|
|
|
struct cdrom_info *info;
|
|
|
int rc = -ENOMEM;
|
|
|
|
|
|
- if (!(info = ide_cd_get(disk)))
|
|
|
+ info = ide_cd_get(disk);
|
|
|
+ if (!info)
|
|
|
return -ENXIO;
|
|
|
|
|
|
rc = cdrom_open(&info->devinfo, inode, file);
|
|
@@ -1987,12 +1997,12 @@ static int idecd_open(struct inode * inode, struct file * file)
|
|
|
return rc;
|
|
|
}
|
|
|
|
|
|
-static int idecd_release(struct inode * inode, struct file * file)
|
|
|
+static int idecd_release(struct inode *inode, struct file *file)
|
|
|
{
|
|
|
struct gendisk *disk = inode->i_bdev->bd_disk;
|
|
|
struct cdrom_info *info = ide_cd_g(disk);
|
|
|
|
|
|
- cdrom_release (&info->devinfo, file);
|
|
|
+ cdrom_release(&info->devinfo, file);
|
|
|
|
|
|
ide_cd_put(info);
|
|
|
|
|
@@ -2024,7 +2034,7 @@ static int idecd_get_spindown(struct cdrom_device_info *cdi, unsigned long arg)
|
|
|
struct packet_command cgc;
|
|
|
char buffer[16];
|
|
|
int stat;
|
|
|
- char spindown;
|
|
|
+ char spindown;
|
|
|
|
|
|
init_cdrom_command(&cgc, buffer, sizeof(buffer), CGC_DATA_UNKNOWN);
|
|
|
|
|
@@ -2033,12 +2043,12 @@ static int idecd_get_spindown(struct cdrom_device_info *cdi, unsigned long arg)
|
|
|
return stat;
|
|
|
|
|
|
spindown = buffer[11] & 0x0f;
|
|
|
- if (copy_to_user((void __user *)arg, &spindown, sizeof (char)))
|
|
|
+ if (copy_to_user((void __user *)arg, &spindown, sizeof(char)))
|
|
|
return -EFAULT;
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int idecd_ioctl (struct inode *inode, struct file *file,
|
|
|
+static int idecd_ioctl(struct inode *inode, struct file *file,
|
|
|
unsigned int cmd, unsigned long arg)
|
|
|
{
|
|
|
struct block_device *bdev = inode->i_bdev;
|
|
@@ -2046,13 +2056,13 @@ static int idecd_ioctl (struct inode *inode, struct file *file,
|
|
|
int err;
|
|
|
|
|
|
switch (cmd) {
|
|
|
- case CDROMSETSPINDOWN:
|
|
|
+ case CDROMSETSPINDOWN:
|
|
|
return idecd_set_spindown(&info->devinfo, arg);
|
|
|
- case CDROMGETSPINDOWN:
|
|
|
+ case CDROMGETSPINDOWN:
|
|
|
return idecd_get_spindown(&info->devinfo, arg);
|
|
|
default:
|
|
|
break;
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
err = generic_ide_ioctl(info->drive, file, bdev, cmd, arg);
|
|
|
if (err == -EINVAL)
|
|
@@ -2078,16 +2088,16 @@ static int idecd_revalidate_disk(struct gendisk *disk)
|
|
|
}
|
|
|
|
|
|
static struct block_device_operations idecd_ops = {
|
|
|
- .owner = THIS_MODULE,
|
|
|
- .open = idecd_open,
|
|
|
- .release = idecd_release,
|
|
|
- .ioctl = idecd_ioctl,
|
|
|
- .media_changed = idecd_media_changed,
|
|
|
- .revalidate_disk= idecd_revalidate_disk
|
|
|
+ .owner = THIS_MODULE,
|
|
|
+ .open = idecd_open,
|
|
|
+ .release = idecd_release,
|
|
|
+ .ioctl = idecd_ioctl,
|
|
|
+ .media_changed = idecd_media_changed,
|
|
|
+ .revalidate_disk = idecd_revalidate_disk
|
|
|
};
|
|
|
|
|
|
/* options */
|
|
|
-static char *ignore = NULL;
|
|
|
+static char *ignore;
|
|
|
|
|
|
module_param(ignore, charp, 0400);
|
|
|
MODULE_DESCRIPTION("ATAPI CD-ROM Driver");
|