4 * Copyright (C) 1994-1996 Scott Snyder <snyder@fnald0.fnal.gov>
5 * Copyright (C) 1996-1998 Erik Andersen <andersee@debian.org>
6 * Copyright (C) 1998-2000 Jens Axboe <axboe@suse.de>
7 * Copyright (C) 2005, 2007 Bartlomiej Zolnierkiewicz
9 * May be copied or modified under the terms of the GNU General Public
10 * License. See linux/COPYING for more information.
12 * See Documentation/cdrom/ide-cd for usage information.
14 * Suggestions are welcome. Patches that work are more welcome though. ;-)
15 * For those wishing to work on this driver, please be sure you download
16 * and comply with the latest Mt. Fuji (SFF8090 version 4) and ATAPI
17 * (SFF-8020i rev 2.6) standards. These documents can be obtained by
19 * ftp://fission.dt.wdc.com/pub/standards/SFF_atapi/spec/SFF8020-r2.6/PS/8020r26.ps
20 * ftp://ftp.avc-pioneer.com/Mtfuji4/Spec/Fuji4r10.pdf
22 * For historical changelog please see:
23 * Documentation/ide/ChangeLog.ide-cd.1994-2004
26 #define IDECD_VERSION "5.00"
28 #include <linux/module.h>
29 #include <linux/types.h>
30 #include <linux/kernel.h>
31 #include <linux/delay.h>
32 #include <linux/timer.h>
33 #include <linux/slab.h>
34 #include <linux/interrupt.h>
35 #include <linux/errno.h>
36 #include <linux/cdrom.h>
37 #include <linux/ide.h>
38 #include <linux/completion.h>
39 #include <linux/mutex.h>
40 #include <linux/bcd.h>
42 #include <scsi/scsi.h> /* For SCSI -> ATAPI command conversion */
46 #include <asm/byteorder.h>
47 #include <asm/uaccess.h>
48 #include <asm/unaligned.h>
52 static DEFINE_MUTEX(idecd_ref_mutex);
54 #define to_ide_cd(obj) container_of(obj, struct cdrom_info, kref)
56 #define ide_cd_g(disk) \
57 container_of((disk)->private_data, struct cdrom_info, driver)
59 static struct cdrom_info *ide_cd_get(struct gendisk *disk)
61 struct cdrom_info *cd = NULL;
63 mutex_lock(&idecd_ref_mutex);
67 mutex_unlock(&idecd_ref_mutex);
71 static void ide_cd_release(struct kref *);
73 static void ide_cd_put(struct cdrom_info *cd)
75 mutex_lock(&idecd_ref_mutex);
76 kref_put(&cd->kref, ide_cd_release);
77 mutex_unlock(&idecd_ref_mutex);
80 /****************************************************************************
81 * Generic packet command support and error handling routines.
84 /* Mark that we've seen a media change, and invalidate our internal
86 static void cdrom_saw_media_change(ide_drive_t *drive)
88 struct cdrom_info *cd = drive->driver_data;
90 cd->cd_flags |= IDE_CD_FLAG_MEDIA_CHANGED;
91 cd->cd_flags &= ~IDE_CD_FLAG_TOC_VALID;
94 static int cdrom_log_sense(ide_drive_t *drive, struct request *rq,
95 struct request_sense *sense)
99 if (!sense || !rq || (rq->cmd_flags & REQ_QUIET))
102 switch (sense->sense_key) {
104 case RECOVERED_ERROR:
108 * don't care about tray state messages for
109 * e.g. capacity commands or in-progress or
112 if (sense->asc == 0x3a || sense->asc == 0x04)
116 case ILLEGAL_REQUEST:
118 * don't log START_STOP unit with LoEj set, since
119 * we cannot reliably check if drive can auto-close
121 if (rq->cmd[0] == GPCMD_START_STOP_UNIT && sense->asc == 0x24)
127 * Make good and sure we've seen this potential media
128 * change. Some drives (i.e. Creative) fail to present
129 * the correct sense key in the error register.
131 cdrom_saw_media_change(drive);
141 void cdrom_analyze_sense_data(ide_drive_t *drive,
142 struct request *failed_command,
143 struct request_sense *sense)
145 unsigned long sector;
146 unsigned long bio_sectors;
148 struct cdrom_info *info = drive->driver_data;
150 if (!cdrom_log_sense(drive, failed_command, sense))
154 * If a read toc is executed for a CD-R or CD-RW medium where
155 * the first toc has not been recorded yet, it will fail with
156 * 05/24/00 (which is a confusing error)
158 if (failed_command && failed_command->cmd[0] == GPCMD_READ_TOC_PMA_ATIP)
159 if (sense->sense_key == 0x05 && sense->asc == 0x24)
162 if (sense->error_code == 0x70) { /* Current Error */
163 switch (sense->sense_key) {
165 case VOLUME_OVERFLOW:
166 case ILLEGAL_REQUEST:
169 if (failed_command == NULL ||
170 !blk_fs_request(failed_command))
172 sector = (sense->information[0] << 24) |
173 (sense->information[1] << 16) |
174 (sense->information[2] << 8) |
175 (sense->information[3]);
177 bio_sectors = bio_sectors(failed_command->bio);
180 if (drive->queue->hardsect_size == 2048)
181 sector <<= 2; /* Device sector size is 2K */
182 sector &= ~(bio_sectors - 1);
183 valid = (sector - failed_command->sector) << 9;
187 if (sector < get_capacity(info->disk) &&
188 drive->probed_capacity - sector < 4 * 75) {
189 set_capacity(info->disk, sector);
194 ide_cd_log_error(drive->name, failed_command, sense);
198 * Initialize a ide-cd packet command request
200 void ide_cd_init_rq(ide_drive_t *drive, struct request *rq)
202 struct cdrom_info *cd = drive->driver_data;
204 ide_init_drive_cmd(rq);
205 rq->cmd_type = REQ_TYPE_ATA_PC;
206 rq->rq_disk = cd->disk;
209 static void cdrom_queue_request_sense(ide_drive_t *drive, void *sense,
210 struct request *failed_command)
212 struct cdrom_info *info = drive->driver_data;
213 struct request *rq = &info->request_sense_request;
216 sense = &info->sense_data;
218 /* stuff the sense request in front of our current request */
219 ide_cd_init_rq(drive, rq);
222 rq->cmd[0] = GPCMD_REQUEST_SENSE;
223 rq->cmd[4] = rq->data_len = 18;
225 rq->cmd_type = REQ_TYPE_SENSE;
227 /* NOTE! Save the failed command in "rq->buffer" */
228 rq->buffer = (void *) failed_command;
230 (void) ide_do_drive_cmd(drive, rq, ide_preempt);
233 static void cdrom_end_request(ide_drive_t *drive, int uptodate)
235 struct request *rq = HWGROUP(drive)->rq;
236 int nsectors = rq->hard_cur_sectors;
238 if (blk_sense_request(rq) && uptodate) {
240 * For REQ_TYPE_SENSE, "rq->buffer" points to the original
243 struct request *failed = (struct request *) rq->buffer;
244 struct cdrom_info *info = drive->driver_data;
245 void *sense = &info->sense_data;
250 sense = failed->sense;
251 failed->sense_len = rq->sense_len;
253 cdrom_analyze_sense_data(drive, failed, sense);
255 * now end failed request
257 if (blk_fs_request(failed)) {
258 if (ide_end_dequeued_request(drive, failed, 0,
259 failed->hard_nr_sectors))
262 spin_lock_irqsave(&ide_lock, flags);
263 if (__blk_end_request(failed, -EIO,
266 spin_unlock_irqrestore(&ide_lock, flags);
269 cdrom_analyze_sense_data(drive, NULL, sense);
272 if (!rq->current_nr_sectors && blk_fs_request(rq))
274 /* make sure it's fully ended */
275 if (blk_pc_request(rq))
276 nsectors = (rq->data_len + 511) >> 9;
280 ide_end_request(drive, uptodate, nsectors);
283 static void ide_dump_status_no_sense(ide_drive_t *drive, const char *msg, u8 stat)
287 ide_dump_status(drive, msg, stat);
290 /* Returns 0 if the request should be continued.
291 Returns 1 if the request was ended. */
292 static int cdrom_decode_status(ide_drive_t *drive, int good_stat, int *stat_ret)
294 struct request *rq = HWGROUP(drive)->rq;
295 int stat, err, sense_key;
297 /* Check for errors. */
298 stat = ide_read_status(drive);
303 if (OK_STAT(stat, good_stat, BAD_R_STAT))
306 /* Get the IDE error register. */
307 err = ide_read_error(drive);
308 sense_key = err >> 4;
311 printk("%s: missing rq in cdrom_decode_status\n", drive->name);
315 if (blk_sense_request(rq)) {
316 /* We got an error trying to get sense info
317 from the drive (probably while trying
318 to recover from a former error). Just give up. */
320 rq->cmd_flags |= REQ_FAILED;
321 cdrom_end_request(drive, 0);
322 ide_error(drive, "request sense failure", stat);
325 } else if (blk_pc_request(rq) || rq->cmd_type == REQ_TYPE_ATA_PC) {
326 /* All other functions, except for READ. */
329 * if we have an error, pass back CHECK_CONDITION as the
332 if (blk_pc_request(rq) && !rq->errors)
333 rq->errors = SAM_STAT_CHECK_CONDITION;
335 /* Check for tray open. */
336 if (sense_key == NOT_READY) {
337 cdrom_saw_media_change(drive);
338 } else if (sense_key == UNIT_ATTENTION) {
339 /* Check for media change. */
340 cdrom_saw_media_change(drive);
341 /*printk("%s: media changed\n",drive->name);*/
343 } else if (sense_key == ILLEGAL_REQUEST &&
344 rq->cmd[0] == GPCMD_START_STOP_UNIT) {
346 * Don't print error message for this condition--
347 * SFF8090i indicates that 5/24/00 is the correct
348 * response to a request to close the tray if the
349 * drive doesn't have that capability.
350 * cdrom_log_sense() knows this!
352 } else if (!(rq->cmd_flags & REQ_QUIET)) {
353 /* Otherwise, print an error. */
354 ide_dump_status(drive, "packet command error", stat);
357 rq->cmd_flags |= REQ_FAILED;
360 * instead of playing games with moving completions around,
361 * remove failed request completely and end it when the
362 * request sense has completed
366 } else if (blk_fs_request(rq)) {
367 int do_end_request = 0;
369 /* Handle errors from READ and WRITE requests. */
371 if (blk_noretry_request(rq))
374 if (sense_key == NOT_READY) {
376 if (rq_data_dir(rq) == READ) {
377 cdrom_saw_media_change(drive);
379 /* Fail the request. */
380 printk("%s: tray open\n", drive->name);
383 struct cdrom_info *info = drive->driver_data;
385 /* allow the drive 5 seconds to recover, some
386 * devices will return this error while flushing
389 info->write_timeout = jiffies + ATAPI_WAIT_WRITE_BUSY;
391 if (time_after(jiffies, info->write_timeout))
397 * take a breather relying on the
398 * unplug timer to kick us again
400 spin_lock_irqsave(&ide_lock, flags);
401 blk_plug_device(drive->queue);
402 spin_unlock_irqrestore(&ide_lock, flags);
406 } else if (sense_key == UNIT_ATTENTION) {
408 cdrom_saw_media_change (drive);
411 * Arrange to retry the request.
412 * But be sure to give up if we've retried
415 if (++rq->errors > ERROR_MAX)
417 } else if (sense_key == ILLEGAL_REQUEST ||
418 sense_key == DATA_PROTECT) {
420 * No point in retrying after an illegal
421 * request or data protect error.
423 ide_dump_status_no_sense(drive, "command error", stat);
425 } else if (sense_key == MEDIUM_ERROR) {
427 * No point in re-trying a zillion times on a bad
428 * sector... If we got here the error is not correctable
430 ide_dump_status_no_sense(drive, "media error (bad sector)", stat);
432 } else if (sense_key == BLANK_CHECK) {
433 /* Disk appears blank ?? */
434 ide_dump_status_no_sense(drive, "media error (blank)", stat);
436 } else if ((err & ~ABRT_ERR) != 0) {
437 /* Go to the default handler
439 ide_error(drive, "cdrom_decode_status", stat);
441 } else if ((++rq->errors > ERROR_MAX)) {
442 /* We've racked up too many retries. Abort. */
446 /* End a request through request sense analysis when we have
447 sense data. We need this in order to perform end of media
454 * If we got a CHECK_CONDITION status,
455 * queue a request sense command.
458 cdrom_queue_request_sense(drive, NULL, NULL);
460 blk_dump_rq_flags(rq, "ide-cd: bad rq");
461 cdrom_end_request(drive, 0);
464 /* Retry, or handle the next request. */
468 if (stat & ERR_STAT) {
471 spin_lock_irqsave(&ide_lock, flags);
472 blkdev_dequeue_request(rq);
473 HWGROUP(drive)->rq = NULL;
474 spin_unlock_irqrestore(&ide_lock, flags);
476 cdrom_queue_request_sense(drive, rq->sense, rq);
478 cdrom_end_request(drive, 0);
483 static int cdrom_timer_expiry(ide_drive_t *drive)
485 struct request *rq = HWGROUP(drive)->rq;
486 unsigned long wait = 0;
489 * Some commands are *slow* and normally take a long time to
490 * complete. Usually we can use the ATAPI "disconnect" to bypass
491 * this, but not all commands/drives support that. Let
492 * ide_timer_expiry keep polling us for these.
494 switch (rq->cmd[0]) {
496 case GPCMD_FORMAT_UNIT:
497 case GPCMD_RESERVE_RZONE_TRACK:
498 case GPCMD_CLOSE_TRACK:
499 case GPCMD_FLUSH_CACHE:
500 wait = ATAPI_WAIT_PC;
503 if (!(rq->cmd_flags & REQ_QUIET))
504 printk(KERN_INFO "ide-cd: cmd 0x%x timed out\n", rq->cmd[0]);
511 /* Set up the device registers for transferring a packet command on DEV,
512 expecting to later transfer XFERLEN bytes. HANDLER is the routine
513 which actually transfers the command to the drive. If this is a
514 drq_interrupt device, this routine will arrange for HANDLER to be
515 called when the interrupt from the drive arrives. Otherwise, HANDLER
516 will be called immediately after the drive is prepared for the transfer. */
518 static ide_startstop_t cdrom_start_packet_command(ide_drive_t *drive,
520 ide_handler_t *handler)
522 ide_startstop_t startstop;
523 struct cdrom_info *info = drive->driver_data;
524 ide_hwif_t *hwif = drive->hwif;
526 /* Wait for the controller to be idle. */
527 if (ide_wait_stat(&startstop, drive, 0, BUSY_STAT, WAIT_READY))
530 /* FIXME: for Virtual DMA we must check harder */
532 info->dma = !hwif->dma_setup(drive);
534 /* Set up the controller registers. */
535 ide_pktcmd_tf_load(drive, IDE_TFLAG_OUT_NSECT | IDE_TFLAG_OUT_LBAL |
536 IDE_TFLAG_NO_SELECT_MASK, xferlen, info->dma);
538 if (info->cd_flags & IDE_CD_FLAG_DRQ_INTERRUPT) {
539 /* waiting for CDB interrupt, not DMA yet. */
541 drive->waiting_for_dma = 0;
544 ide_execute_command(drive, WIN_PACKETCMD, handler, ATAPI_WAIT_PC, cdrom_timer_expiry);
550 spin_lock_irqsave(&ide_lock, flags);
551 hwif->OUTBSYNC(drive, WIN_PACKETCMD,
552 hwif->io_ports[IDE_COMMAND_OFFSET]);
554 spin_unlock_irqrestore(&ide_lock, flags);
556 return (*handler) (drive);
560 /* Send a packet command to DRIVE described by CMD_BUF and CMD_LEN.
561 The device registers must have already been prepared
562 by cdrom_start_packet_command.
563 HANDLER is the interrupt handler to call when the command completes
564 or there's data ready. */
565 #define ATAPI_MIN_CDB_BYTES 12
566 static ide_startstop_t cdrom_transfer_packet_command(ide_drive_t *drive,
568 ide_handler_t *handler)
570 ide_hwif_t *hwif = drive->hwif;
572 struct cdrom_info *info = drive->driver_data;
573 ide_startstop_t startstop;
575 if (info->cd_flags & IDE_CD_FLAG_DRQ_INTERRUPT) {
576 /* Here we should have been called after receiving an interrupt
577 from the device. DRQ should how be set. */
579 /* Check for errors. */
580 if (cdrom_decode_status(drive, DRQ_STAT, NULL))
583 /* Ok, next interrupt will be DMA interrupt. */
585 drive->waiting_for_dma = 1;
587 /* Otherwise, we must wait for DRQ to get set. */
588 if (ide_wait_stat(&startstop, drive, DRQ_STAT,
589 BUSY_STAT, WAIT_READY))
593 /* Arm the interrupt handler. */
594 ide_set_handler(drive, handler, rq->timeout, cdrom_timer_expiry);
596 /* ATAPI commands get padded out to 12 bytes minimum */
597 cmd_len = COMMAND_SIZE(rq->cmd[0]);
598 if (cmd_len < ATAPI_MIN_CDB_BYTES)
599 cmd_len = ATAPI_MIN_CDB_BYTES;
601 /* Send the command to the device. */
602 HWIF(drive)->atapi_output_bytes(drive, rq->cmd, cmd_len);
604 /* Start the DMA if need be */
606 hwif->dma_start(drive);
611 /****************************************************************************
612 * Block read functions.
615 static void ide_cd_pad_transfer(ide_drive_t *drive, xfer_func_t *xf, int len)
619 xf(drive, &dum, sizeof(dum));
624 static void ide_cd_drain_data(ide_drive_t *drive, int nsects)
627 static char dum[SECTOR_SIZE];
629 drive->hwif->atapi_input_bytes(drive, dum, sizeof(dum));
635 * Check the contents of the interrupt reason register from the cdrom
636 * and attempt to recover if there are problems. Returns 0 if everything's
637 * ok; nonzero if the request has been terminated.
639 static int ide_cd_check_ireason(ide_drive_t *drive, struct request *rq,
640 int len, int ireason, int rw)
643 * ireason == 0: the drive wants to receive data from us
644 * ireason == 2: the drive is expecting to transfer data to us
646 if (ireason == (!rw << 1))
648 else if (ireason == (rw << 1)) {
649 ide_hwif_t *hwif = drive->hwif;
653 printk(KERN_ERR "%s: %s: wrong transfer direction!\n",
654 drive->name, __FUNCTION__);
656 xf = rw ? hwif->atapi_output_bytes : hwif->atapi_input_bytes;
657 ide_cd_pad_transfer(drive, xf, len);
658 } else if (rw == 0 && ireason == 1) {
659 /* Some drives (ASUS) seem to tell us that status
660 * info is available. just get it and ignore.
662 (void)ide_read_status(drive);
665 /* Drive wants a command packet, or invalid ireason... */
666 printk(KERN_ERR "%s: %s: bad interrupt reason 0x%02x\n",
667 drive->name, __FUNCTION__, ireason);
670 if (rq->cmd_type == REQ_TYPE_ATA_PC)
671 rq->cmd_flags |= REQ_FAILED;
673 cdrom_end_request(drive, 0);
678 * Assume that the drive will always provide data in multiples of at least
679 * SECTOR_SIZE, as it gets hairy to keep track of the transfers otherwise.
681 static int ide_cd_check_transfer_size(ide_drive_t *drive, int len)
683 struct cdrom_info *cd = drive->driver_data;
685 if ((len % SECTOR_SIZE) == 0)
688 printk(KERN_ERR "%s: %s: Bad transfer size %d\n",
689 drive->name, __FUNCTION__, len);
691 if (cd->cd_flags & IDE_CD_FLAG_LIMIT_NFRAMES)
692 printk(KERN_ERR " This drive is not supported by "
693 "this version of the driver\n");
695 printk(KERN_ERR " Trying to limit transfer sizes\n");
696 cd->cd_flags |= IDE_CD_FLAG_LIMIT_NFRAMES;
702 static ide_startstop_t cdrom_newpc_intr(ide_drive_t *);
705 * Routine to send a read/write packet command to the drive.
706 * This is usually called directly from cdrom_start_{read,write}().
707 * However, for drq_interrupt devices, it is called from an interrupt
708 * when the drive is ready to accept the command.
710 static ide_startstop_t cdrom_start_rw_cont(ide_drive_t *drive)
712 struct request *rq = HWGROUP(drive)->rq;
714 if (rq_data_dir(rq) == READ) {
715 unsigned short sectors_per_frame =
716 queue_hardsect_size(drive->queue) >> SECTOR_BITS;
717 int nskip = rq->sector & (sectors_per_frame - 1);
720 * If the requested sector doesn't start on a frame boundary,
721 * we must adjust the start of the transfer so that it does,
722 * and remember to skip the first few sectors.
724 * If the rq->current_nr_sectors field is larger than the size
725 * of the buffer, it will mean that we're to skip a number of
726 * sectors equal to the amount by which rq->current_nr_sectors
727 * is larger than the buffer size.
730 /* Sanity check... */
731 if (rq->current_nr_sectors !=
732 bio_cur_sectors(rq->bio)) {
733 printk(KERN_ERR "%s: %s: buffer botch (%u)\n",
734 drive->name, __FUNCTION__,
735 rq->current_nr_sectors);
736 cdrom_end_request(drive, 0);
739 rq->current_nr_sectors += nskip;
744 /* the immediate bit */
747 /* Set up the command */
748 rq->timeout = ATAPI_WAIT_PC;
750 /* Send the command to the drive and return. */
751 return cdrom_transfer_packet_command(drive, rq, cdrom_newpc_intr);
754 #define IDECD_SEEK_THRESHOLD (1000) /* 1000 blocks */
755 #define IDECD_SEEK_TIMER (5 * WAIT_MIN_SLEEP) /* 100 ms */
756 #define IDECD_SEEK_TIMEOUT (2 * WAIT_CMD) /* 20 sec */
758 static ide_startstop_t cdrom_seek_intr(ide_drive_t *drive)
760 struct cdrom_info *info = drive->driver_data;
762 static int retry = 10;
764 if (cdrom_decode_status(drive, 0, &stat))
767 info->cd_flags |= IDE_CD_FLAG_SEEKING;
769 if (retry && time_after(jiffies, info->start_seek + IDECD_SEEK_TIMER)) {
772 * this condition is far too common, to bother
775 /* printk("%s: disabled DSC seek overlap\n", drive->name);*/
776 drive->dsc_overlap = 0;
782 static ide_startstop_t cdrom_start_seek_continuation(ide_drive_t *drive)
784 struct request *rq = HWGROUP(drive)->rq;
785 sector_t frame = rq->sector;
787 sector_div(frame, queue_hardsect_size(drive->queue) >> SECTOR_BITS);
789 memset(rq->cmd, 0, sizeof(rq->cmd));
790 rq->cmd[0] = GPCMD_SEEK;
791 put_unaligned(cpu_to_be32(frame), (unsigned int *) &rq->cmd[2]);
793 rq->timeout = ATAPI_WAIT_PC;
794 return cdrom_transfer_packet_command(drive, rq, &cdrom_seek_intr);
797 static ide_startstop_t cdrom_start_seek(ide_drive_t *drive, unsigned int block)
799 struct cdrom_info *info = drive->driver_data;
802 info->start_seek = jiffies;
803 return cdrom_start_packet_command(drive, 0, cdrom_start_seek_continuation);
807 * Fix up a possibly partially-processed request so that we can
808 * start it over entirely, or even put it back on the request queue.
810 static void restore_request(struct request *rq)
812 if (rq->buffer != bio_data(rq->bio)) {
813 sector_t n = (rq->buffer - (char *) bio_data(rq->bio)) / SECTOR_SIZE;
815 rq->buffer = bio_data(rq->bio);
819 rq->hard_cur_sectors = rq->current_nr_sectors = bio_cur_sectors(rq->bio);
820 rq->hard_nr_sectors = rq->nr_sectors;
821 rq->hard_sector = rq->sector;
822 rq->q->prep_rq_fn(rq->q, rq);
825 /****************************************************************************
826 * Execute all other packet commands.
829 static void ide_cd_request_sense_fixup(struct request *rq)
832 * Some of the trailing request sense fields are optional,
833 * and some drives don't send them. Sigh.
835 if (rq->cmd[0] == GPCMD_REQUEST_SENSE &&
836 rq->data_len > 0 && rq->data_len <= 5)
837 while (rq->data_len > 0) {
838 *(u8 *)rq->data++ = 0;
843 int ide_cd_queue_pc(ide_drive_t *drive, struct request *rq)
845 struct request_sense sense;
847 unsigned int flags = rq->cmd_flags;
849 if (rq->sense == NULL)
852 /* Start of retry loop. */
855 unsigned long time = jiffies;
856 rq->cmd_flags = flags;
858 error = ide_do_drive_cmd(drive, rq, ide_wait);
859 time = jiffies - time;
861 /* FIXME: we should probably abort/retry or something
862 * in case of failure */
863 if (rq->cmd_flags & REQ_FAILED) {
864 /* The request failed. Retry if it was due to a unit
866 (usually means media was changed). */
867 struct request_sense *reqbuf = rq->sense;
869 if (reqbuf->sense_key == UNIT_ATTENTION)
870 cdrom_saw_media_change(drive);
871 else if (reqbuf->sense_key == NOT_READY &&
872 reqbuf->asc == 4 && reqbuf->ascq != 4) {
873 /* The drive is in the process of loading
874 a disk. Retry, but wait a little to give
875 the drive time to complete the load. */
878 /* Otherwise, don't retry. */
884 /* End of retry loop. */
885 } while ((rq->cmd_flags & REQ_FAILED) && retries >= 0);
887 /* Return an error if the command failed. */
888 return (rq->cmd_flags & REQ_FAILED) ? -EIO : 0;
892 * Called from blk_end_request_callback() after the data of the request
893 * is completed and before the request is completed.
894 * By returning value '1', blk_end_request_callback() returns immediately
895 * without completing the request.
897 static int cdrom_newpc_intr_dummy_cb(struct request *rq)
902 static ide_startstop_t cdrom_newpc_intr(ide_drive_t *drive)
904 ide_hwif_t *hwif = drive->hwif;
905 struct cdrom_info *info = drive->driver_data;
906 struct request *rq = HWGROUP(drive)->rq;
907 xfer_func_t *xferfunc;
908 ide_expiry_t *expiry = NULL;
909 int dma_error = 0, dma, stat, ireason, len, thislen, uptodate = 0;
910 int write = (rq_data_dir(rq) == WRITE) ? 1 : 0;
911 unsigned int timeout;
914 /* Check for errors. */
918 dma_error = HWIF(drive)->ide_dma_end(drive);
920 printk(KERN_ERR "%s: DMA %s error\n", drive->name,
921 write ? "write" : "read");
926 if (cdrom_decode_status(drive, 0, &stat))
930 * using dma, transfer is complete now
934 return ide_error(drive, "dma error", stat);
935 if (blk_fs_request(rq)) {
936 ide_end_request(drive, 1, rq->nr_sectors);
943 * ok we fall to pio :/
945 ireason = hwif->INB(hwif->io_ports[IDE_IREASON_OFFSET]) & 0x3;
946 lowcyl = hwif->INB(hwif->io_ports[IDE_BCOUNTL_OFFSET]);
947 highcyl = hwif->INB(hwif->io_ports[IDE_BCOUNTH_OFFSET]);
949 len = lowcyl + (256 * highcyl);
951 thislen = blk_fs_request(rq) ? len : rq->data_len;
956 * If DRQ is clear, the command has completed.
958 if ((stat & DRQ_STAT) == 0) {
959 if (blk_fs_request(rq)) {
961 * If we're not done reading/writing, complain.
962 * Otherwise, complete the command normally.
965 if (rq->current_nr_sectors > 0) {
966 printk(KERN_ERR "%s: %s: data underrun "
968 drive->name, __FUNCTION__,
969 rq->current_nr_sectors);
971 rq->cmd_flags |= REQ_FAILED;
974 cdrom_end_request(drive, uptodate);
976 } else if (!blk_pc_request(rq)) {
977 ide_cd_request_sense_fixup(rq);
978 /* Complain if we still have data left to transfer. */
979 uptodate = rq->data_len ? 0 : 1;
985 * check which way to transfer data
987 if (ide_cd_check_ireason(drive, rq, len, ireason, write))
990 if (blk_fs_request(rq)) {
994 if (ide_cd_check_transfer_size(drive, len)) {
995 cdrom_end_request(drive, 0);
1000 * First, figure out if we need to bit-bucket
1001 * any of the leading sectors.
1003 nskip = min_t(int, rq->current_nr_sectors
1004 - bio_cur_sectors(rq->bio),
1007 ide_cd_drain_data(drive, nskip);
1008 rq->current_nr_sectors -= nskip;
1009 thislen -= (nskip << 9);
1016 xferfunc = HWIF(drive)->atapi_output_bytes;
1019 xferfunc = HWIF(drive)->atapi_input_bytes;
1025 while (thislen > 0) {
1026 u8 *ptr = blk_fs_request(rq) ? NULL : rq->data;
1027 int blen = rq->data_len;
1033 if (blk_fs_request(rq)) {
1035 blen = rq->current_nr_sectors << 9;
1037 ptr = bio_data(rq->bio);
1038 blen = bio_iovec(rq->bio)->bv_len;
1043 if (blk_fs_request(rq) && !write)
1045 * If the buffers are full, pipe the rest into
1047 ide_cd_drain_data(drive, thislen >> 9);
1049 printk(KERN_ERR "%s: confused, missing data\n",
1051 blk_dump_rq_flags(rq, rq_data_dir(rq)
1052 ? "cdrom_newpc_intr, write"
1053 : "cdrom_newpc_intr, read");
1061 xferfunc(drive, ptr, blen);
1066 if (blk_fs_request(rq)) {
1068 rq->nr_sectors -= (blen >> 9);
1069 rq->current_nr_sectors -= (blen >> 9);
1070 rq->sector += (blen >> 9);
1072 if (rq->current_nr_sectors == 0 && rq->nr_sectors)
1073 cdrom_end_request(drive, 1);
1075 rq->data_len -= blen;
1078 * The request can't be completed until DRQ is cleared.
1079 * So complete the data, but don't complete the request
1080 * using the dummy function for the callback feature
1081 * of blk_end_request_callback().
1084 blk_end_request_callback(rq, 0, blen,
1085 cdrom_newpc_intr_dummy_cb);
1089 if (!write && blk_sense_request(rq))
1090 rq->sense_len += blen;
1096 if (!blk_fs_request(rq) && len > 0)
1097 ide_cd_pad_transfer(drive, xferfunc, len);
1099 if (blk_pc_request(rq)) {
1100 timeout = rq->timeout;
1102 timeout = ATAPI_WAIT_PC;
1103 if (!blk_fs_request(rq))
1104 expiry = cdrom_timer_expiry;
1107 ide_set_handler(drive, cdrom_newpc_intr, timeout, expiry);
1111 if (blk_pc_request(rq)) {
1112 unsigned long flags;
1113 unsigned int dlen = rq->data_len;
1118 spin_lock_irqsave(&ide_lock, flags);
1119 if (__blk_end_request(rq, 0, dlen))
1121 HWGROUP(drive)->rq = NULL;
1122 spin_unlock_irqrestore(&ide_lock, flags);
1125 rq->cmd_flags |= REQ_FAILED;
1126 cdrom_end_request(drive, uptodate);
1131 static ide_startstop_t cdrom_start_rw(ide_drive_t *drive, struct request *rq)
1133 struct cdrom_info *cd = drive->driver_data;
1134 int write = rq_data_dir(rq) == WRITE;
1135 unsigned short sectors_per_frame =
1136 queue_hardsect_size(drive->queue) >> SECTOR_BITS;
1140 * disk has become write protected
1142 if (cd->disk->policy) {
1143 cdrom_end_request(drive, 0);
1148 * We may be retrying this request after an error. Fix up any
1149 * weirdness which might be present in the request packet.
1151 restore_request(rq);
1155 * use DMA, if possible / writes *must* be hardware frame aligned
1157 if ((rq->nr_sectors & (sectors_per_frame - 1)) ||
1158 (rq->sector & (sectors_per_frame - 1))) {
1160 cdrom_end_request(drive, 0);
1165 cd->dma = drive->using_dma;
1168 cd->devinfo.media_written = 1;
1170 /* Start sending the read/write request to the drive. */
1171 return cdrom_start_packet_command(drive, 32768, cdrom_start_rw_cont);
1174 static ide_startstop_t cdrom_do_newpc_cont(ide_drive_t *drive)
1176 struct request *rq = HWGROUP(drive)->rq;
1179 rq->timeout = ATAPI_WAIT_PC;
1181 return cdrom_transfer_packet_command(drive, rq, cdrom_newpc_intr);
1184 static ide_startstop_t cdrom_do_block_pc(ide_drive_t *drive, struct request *rq)
1186 struct cdrom_info *info = drive->driver_data;
1188 if (blk_pc_request(rq))
1189 rq->cmd_flags |= REQ_QUIET;
1191 rq->cmd_flags &= ~REQ_FAILED;
1199 int mask = drive->queue->dma_alignment;
1200 unsigned long addr = (unsigned long) page_address(bio_page(rq->bio));
1202 info->dma = drive->using_dma;
1205 * check if dma is safe
1207 * NOTE! The "len" and "addr" checks should possibly have
1210 if ((rq->data_len & 15) || (addr & mask))
1214 /* Start sending the command to the drive. */
1215 return cdrom_start_packet_command(drive, rq->data_len, cdrom_do_newpc_cont);
1218 /****************************************************************************
1219 * cdrom driver request routine.
1221 static ide_startstop_t
1222 ide_do_rw_cdrom(ide_drive_t *drive, struct request *rq, sector_t block)
1224 ide_startstop_t action;
1225 struct cdrom_info *info = drive->driver_data;
1227 if (blk_fs_request(rq)) {
1228 if (info->cd_flags & IDE_CD_FLAG_SEEKING) {
1229 unsigned long elapsed = jiffies - info->start_seek;
1230 int stat = ide_read_status(drive);
1232 if ((stat & SEEK_STAT) != SEEK_STAT) {
1233 if (elapsed < IDECD_SEEK_TIMEOUT) {
1234 ide_stall_queue(drive, IDECD_SEEK_TIMER);
1237 printk(KERN_ERR "%s: DSC timeout\n", drive->name);
1239 info->cd_flags &= ~IDE_CD_FLAG_SEEKING;
1241 if ((rq_data_dir(rq) == READ) && IDE_LARGE_SEEK(info->last_block, block, IDECD_SEEK_THRESHOLD) && drive->dsc_overlap)
1242 action = cdrom_start_seek(drive, block);
1244 action = cdrom_start_rw(drive, rq);
1245 info->last_block = block;
1247 } else if (blk_sense_request(rq) || blk_pc_request(rq) ||
1248 rq->cmd_type == REQ_TYPE_ATA_PC) {
1249 return cdrom_do_block_pc(drive, rq);
1250 } else if (blk_special_request(rq)) {
1252 * right now this can only be a reset...
1254 cdrom_end_request(drive, 1);
1258 blk_dump_rq_flags(rq, "ide-cd bad flags");
1259 cdrom_end_request(drive, 0);
1265 /****************************************************************************
1268 * Routines which queue packet commands take as a final argument a pointer
1269 * to a request_sense struct. If execution of the command results
1270 * in an error with a CHECK CONDITION status, this structure will be filled
1271 * with the results of the subsequent request sense command. The pointer
1272 * can also be NULL, in which case no sense information is returned.
1276 void msf_from_bcd(struct atapi_msf *msf)
1278 msf->minute = BCD2BIN(msf->minute);
1279 msf->second = BCD2BIN(msf->second);
1280 msf->frame = BCD2BIN(msf->frame);
1283 int cdrom_check_status(ide_drive_t *drive, struct request_sense *sense)
1286 struct cdrom_info *info = drive->driver_data;
1287 struct cdrom_device_info *cdi = &info->devinfo;
1289 ide_cd_init_rq(drive, &req);
1292 req.cmd[0] = GPCMD_TEST_UNIT_READY;
1293 req.cmd_flags |= REQ_QUIET;
1296 * Sanyo 3 CD changer uses byte 7 of TEST_UNIT_READY to
1297 * switch CDs instead of supporting the LOAD_UNLOAD opcode.
1299 req.cmd[7] = cdi->sanyo_slot % 3;
1301 return ide_cd_queue_pc(drive, &req);
1304 static int cdrom_read_capacity(ide_drive_t *drive, unsigned long *capacity,
1305 unsigned long *sectors_per_frame,
1306 struct request_sense *sense)
1316 ide_cd_init_rq(drive, &req);
1319 req.cmd[0] = GPCMD_READ_CDVD_CAPACITY;
1320 req.data = (char *)&capbuf;
1321 req.data_len = sizeof(capbuf);
1322 req.cmd_flags |= REQ_QUIET;
1324 stat = ide_cd_queue_pc(drive, &req);
1326 *capacity = 1 + be32_to_cpu(capbuf.lba);
1327 *sectors_per_frame =
1328 be32_to_cpu(capbuf.blocklen) >> SECTOR_BITS;
1334 static int cdrom_read_tocentry(ide_drive_t *drive, int trackno, int msf_flag,
1335 int format, char *buf, int buflen,
1336 struct request_sense *sense)
1340 ide_cd_init_rq(drive, &req);
1344 req.data_len = buflen;
1345 req.cmd_flags |= REQ_QUIET;
1346 req.cmd[0] = GPCMD_READ_TOC_PMA_ATIP;
1347 req.cmd[6] = trackno;
1348 req.cmd[7] = (buflen >> 8);
1349 req.cmd[8] = (buflen & 0xff);
1350 req.cmd[9] = (format << 6);
1355 return ide_cd_queue_pc(drive, &req);
1358 /* Try to read the entire TOC for the disk into our internal buffer. */
1359 int ide_cd_read_toc(ide_drive_t *drive, struct request_sense *sense)
1361 int stat, ntracks, i;
1362 struct cdrom_info *info = drive->driver_data;
1363 struct cdrom_device_info *cdi = &info->devinfo;
1364 struct atapi_toc *toc = info->toc;
1366 struct atapi_toc_header hdr;
1367 struct atapi_toc_entry ent;
1370 unsigned long sectors_per_frame = SECTORS_PER_FRAME;
1373 /* Try to allocate space. */
1374 toc = kmalloc(sizeof(struct atapi_toc), GFP_KERNEL);
1376 printk(KERN_ERR "%s: No cdrom TOC buffer!\n", drive->name);
1382 /* Check to see if the existing data is still valid.
1383 If it is, just return. */
1384 (void) cdrom_check_status(drive, sense);
1386 if (info->cd_flags & IDE_CD_FLAG_TOC_VALID)
1389 /* Try to get the total cdrom capacity and sector size. */
1390 stat = cdrom_read_capacity(drive, &toc->capacity, §ors_per_frame,
1393 toc->capacity = 0x1fffff;
1395 set_capacity(info->disk, toc->capacity * sectors_per_frame);
1396 /* Save a private copy of te TOC capacity for error handling */
1397 drive->probed_capacity = toc->capacity * sectors_per_frame;
1399 blk_queue_hardsect_size(drive->queue,
1400 sectors_per_frame << SECTOR_BITS);
1402 /* First read just the header, so we know how long the TOC is. */
1403 stat = cdrom_read_tocentry(drive, 0, 1, 0, (char *) &toc->hdr,
1404 sizeof(struct atapi_toc_header), sense);
1408 if (info->cd_flags & IDE_CD_FLAG_TOCTRACKS_AS_BCD) {
1409 toc->hdr.first_track = BCD2BIN(toc->hdr.first_track);
1410 toc->hdr.last_track = BCD2BIN(toc->hdr.last_track);
1413 ntracks = toc->hdr.last_track - toc->hdr.first_track + 1;
1416 if (ntracks > MAX_TRACKS)
1417 ntracks = MAX_TRACKS;
1419 /* Now read the whole schmeer. */
1420 stat = cdrom_read_tocentry(drive, toc->hdr.first_track, 1, 0,
1422 sizeof(struct atapi_toc_header) +
1424 sizeof(struct atapi_toc_entry), sense);
1426 if (stat && toc->hdr.first_track > 1) {
1427 /* Cds with CDI tracks only don't have any TOC entries,
1428 despite of this the returned values are
1429 first_track == last_track = number of CDI tracks + 1,
1430 so that this case is indistinguishable from the same
1431 layout plus an additional audio track.
1432 If we get an error for the regular case, we assume
1433 a CDI without additional audio tracks. In this case
1434 the readable TOC is empty (CDI tracks are not included)
1435 and only holds the Leadout entry. Heiko Eißfeldt */
1437 stat = cdrom_read_tocentry(drive, CDROM_LEADOUT, 1, 0,
1439 sizeof(struct atapi_toc_header) +
1441 sizeof(struct atapi_toc_entry),
1446 if (info->cd_flags & IDE_CD_FLAG_TOCTRACKS_AS_BCD) {
1447 toc->hdr.first_track = (u8)BIN2BCD(CDROM_LEADOUT);
1448 toc->hdr.last_track = (u8)BIN2BCD(CDROM_LEADOUT);
1450 toc->hdr.first_track = CDROM_LEADOUT;
1451 toc->hdr.last_track = CDROM_LEADOUT;
1458 toc->hdr.toc_length = be16_to_cpu(toc->hdr.toc_length);
1460 if (info->cd_flags & IDE_CD_FLAG_TOCTRACKS_AS_BCD) {
1461 toc->hdr.first_track = BCD2BIN(toc->hdr.first_track);
1462 toc->hdr.last_track = BCD2BIN(toc->hdr.last_track);
1465 for (i = 0; i <= ntracks; i++) {
1466 if (info->cd_flags & IDE_CD_FLAG_TOCADDR_AS_BCD) {
1467 if (info->cd_flags & IDE_CD_FLAG_TOCTRACKS_AS_BCD)
1468 toc->ent[i].track = BCD2BIN(toc->ent[i].track);
1469 msf_from_bcd(&toc->ent[i].addr.msf);
1471 toc->ent[i].addr.lba = msf_to_lba(toc->ent[i].addr.msf.minute,
1472 toc->ent[i].addr.msf.second,
1473 toc->ent[i].addr.msf.frame);
1476 /* Read the multisession information. */
1477 if (toc->hdr.first_track != CDROM_LEADOUT) {
1478 /* Read the multisession information. */
1479 stat = cdrom_read_tocentry(drive, 0, 0, 1, (char *)&ms_tmp,
1480 sizeof(ms_tmp), sense);
1484 toc->last_session_lba = be32_to_cpu(ms_tmp.ent.addr.lba);
1486 ms_tmp.hdr.first_track = ms_tmp.hdr.last_track = CDROM_LEADOUT;
1487 toc->last_session_lba = msf_to_lba(0, 2, 0); /* 0m 2s 0f */
1490 if (info->cd_flags & IDE_CD_FLAG_TOCADDR_AS_BCD) {
1491 /* Re-read multisession information using MSF format */
1492 stat = cdrom_read_tocentry(drive, 0, 1, 1, (char *)&ms_tmp,
1493 sizeof(ms_tmp), sense);
1497 msf_from_bcd(&ms_tmp.ent.addr.msf);
1498 toc->last_session_lba = msf_to_lba(ms_tmp.ent.addr.msf.minute,
1499 ms_tmp.ent.addr.msf.second,
1500 ms_tmp.ent.addr.msf.frame);
1503 toc->xa_flag = (ms_tmp.hdr.first_track != ms_tmp.hdr.last_track);
1505 /* Now try to get the total cdrom capacity. */
1506 stat = cdrom_get_last_written(cdi, &last_written);
1507 if (!stat && (last_written > toc->capacity)) {
1508 toc->capacity = last_written;
1509 set_capacity(info->disk, toc->capacity * sectors_per_frame);
1510 drive->probed_capacity = toc->capacity * sectors_per_frame;
1513 /* Remember that we've read this stuff. */
1514 info->cd_flags |= IDE_CD_FLAG_TOC_VALID;
1519 int ide_cdrom_get_capabilities(ide_drive_t *drive, u8 *buf)
1521 struct cdrom_info *info = drive->driver_data;
1522 struct cdrom_device_info *cdi = &info->devinfo;
1523 struct packet_command cgc;
1524 int stat, attempts = 3, size = ATAPI_CAPABILITIES_PAGE_SIZE;
1526 if ((info->cd_flags & IDE_CD_FLAG_FULL_CAPS_PAGE) == 0)
1527 size -= ATAPI_CAPABILITIES_PAGE_PAD_SIZE;
1529 init_cdrom_command(&cgc, buf, size, CGC_DATA_UNKNOWN);
1530 do { /* we seem to get stat=0x01,err=0x00 the first time (??) */
1531 stat = cdrom_mode_sense(cdi, &cgc, GPMODE_CAPABILITIES_PAGE, 0);
1534 } while (--attempts);
1538 void ide_cdrom_update_speed(ide_drive_t *drive, u8 *buf)
1540 struct cdrom_info *cd = drive->driver_data;
1541 u16 curspeed, maxspeed;
1543 curspeed = *(u16 *)&buf[8 + 14];
1544 maxspeed = *(u16 *)&buf[8 + 8];
1546 if (cd->cd_flags & IDE_CD_FLAG_LE_SPEED_FIELDS) {
1547 curspeed = le16_to_cpu(curspeed);
1548 maxspeed = le16_to_cpu(maxspeed);
1550 curspeed = be16_to_cpu(curspeed);
1551 maxspeed = be16_to_cpu(maxspeed);
1554 cd->current_speed = (curspeed + (176/2)) / 176;
1555 cd->max_speed = (maxspeed + (176/2)) / 176;
1558 #define IDE_CD_CAPABILITIES \
1559 (CDC_CLOSE_TRAY | CDC_OPEN_TRAY | CDC_LOCK | CDC_SELECT_SPEED | \
1560 CDC_SELECT_DISC | CDC_MULTI_SESSION | CDC_MCN | CDC_MEDIA_CHANGED | \
1561 CDC_PLAY_AUDIO | CDC_RESET | CDC_DRIVE_STATUS | CDC_CD_R | \
1562 CDC_CD_RW | CDC_DVD | CDC_DVD_R | CDC_DVD_RAM | CDC_GENERIC_PACKET | \
1563 CDC_MO_DRIVE | CDC_MRW | CDC_MRW_W | CDC_RAM)
1565 static struct cdrom_device_ops ide_cdrom_dops = {
1566 .open = ide_cdrom_open_real,
1567 .release = ide_cdrom_release_real,
1568 .drive_status = ide_cdrom_drive_status,
1569 .media_changed = ide_cdrom_check_media_change_real,
1570 .tray_move = ide_cdrom_tray_move,
1571 .lock_door = ide_cdrom_lock_door,
1572 .select_speed = ide_cdrom_select_speed,
1573 .get_last_session = ide_cdrom_get_last_session,
1574 .get_mcn = ide_cdrom_get_mcn,
1575 .reset = ide_cdrom_reset,
1576 .audio_ioctl = ide_cdrom_audio_ioctl,
1577 .capability = IDE_CD_CAPABILITIES,
1578 .generic_packet = ide_cdrom_packet,
1581 static int ide_cdrom_register(ide_drive_t *drive, int nslots)
1583 struct cdrom_info *info = drive->driver_data;
1584 struct cdrom_device_info *devinfo = &info->devinfo;
1586 devinfo->ops = &ide_cdrom_dops;
1587 devinfo->speed = info->current_speed;
1588 devinfo->capacity = nslots;
1589 devinfo->handle = drive;
1590 strcpy(devinfo->name, drive->name);
1592 if (info->cd_flags & IDE_CD_FLAG_NO_SPEED_SELECT)
1593 devinfo->mask |= CDC_SELECT_SPEED;
1595 devinfo->disk = info->disk;
1596 return register_cdrom(devinfo);
1600 int ide_cdrom_probe_capabilities(ide_drive_t *drive)
1602 struct cdrom_info *cd = drive->driver_data;
1603 struct cdrom_device_info *cdi = &cd->devinfo;
1604 u8 buf[ATAPI_CAPABILITIES_PAGE_SIZE];
1605 mechtype_t mechtype;
1608 cdi->mask = (CDC_CD_R | CDC_CD_RW | CDC_DVD | CDC_DVD_R |
1609 CDC_DVD_RAM | CDC_SELECT_DISC | CDC_PLAY_AUDIO |
1610 CDC_MO_DRIVE | CDC_RAM);
1612 if (drive->media == ide_optical) {
1613 cdi->mask &= ~(CDC_MO_DRIVE | CDC_RAM);
1614 printk(KERN_ERR "%s: ATAPI magneto-optical drive\n", drive->name);
1618 if (cd->cd_flags & IDE_CD_FLAG_PRE_ATAPI12) {
1619 cd->cd_flags &= ~IDE_CD_FLAG_NO_EJECT;
1620 cdi->mask &= ~CDC_PLAY_AUDIO;
1625 * we have to cheat a little here. the packet will eventually
1626 * be queued with ide_cdrom_packet(), which extracts the
1627 * drive from cdi->handle. Since this device hasn't been
1628 * registered with the Uniform layer yet, it can't do this.
1629 * Same goes for cdi->ops.
1631 cdi->handle = drive;
1632 cdi->ops = &ide_cdrom_dops;
1634 if (ide_cdrom_get_capabilities(drive, buf))
1637 if ((buf[8 + 6] & 0x01) == 0)
1638 cd->cd_flags |= IDE_CD_FLAG_NO_DOORLOCK;
1639 if (buf[8 + 6] & 0x08)
1640 cd->cd_flags &= ~IDE_CD_FLAG_NO_EJECT;
1641 if (buf[8 + 3] & 0x01)
1642 cdi->mask &= ~CDC_CD_R;
1643 if (buf[8 + 3] & 0x02)
1644 cdi->mask &= ~(CDC_CD_RW | CDC_RAM);
1645 if (buf[8 + 2] & 0x38)
1646 cdi->mask &= ~CDC_DVD;
1647 if (buf[8 + 3] & 0x20)
1648 cdi->mask &= ~(CDC_DVD_RAM | CDC_RAM);
1649 if (buf[8 + 3] & 0x10)
1650 cdi->mask &= ~CDC_DVD_R;
1651 if ((buf[8 + 4] & 0x01) || (cd->cd_flags & IDE_CD_FLAG_PLAY_AUDIO_OK))
1652 cdi->mask &= ~CDC_PLAY_AUDIO;
1654 mechtype = buf[8 + 6] >> 5;
1655 if (mechtype == mechtype_caddy || mechtype == mechtype_popup)
1656 cdi->mask |= CDC_CLOSE_TRAY;
1658 if (cdi->sanyo_slot > 0) {
1659 cdi->mask &= ~CDC_SELECT_DISC;
1661 } else if (mechtype == mechtype_individual_changer ||
1662 mechtype == mechtype_cartridge_changer) {
1663 nslots = cdrom_number_of_slots(cdi);
1665 cdi->mask &= ~CDC_SELECT_DISC;
1668 ide_cdrom_update_speed(drive, buf);
1670 printk(KERN_INFO "%s: ATAPI", drive->name);
1672 /* don't print speed if the drive reported 0 */
1674 printk(KERN_CONT " %dX", cd->max_speed);
1676 printk(KERN_CONT " %s", (cdi->mask & CDC_DVD) ? "CD-ROM" : "DVD-ROM");
1678 if ((cdi->mask & CDC_DVD_R) == 0 || (cdi->mask & CDC_DVD_RAM) == 0)
1679 printk(KERN_CONT " DVD%s%s",
1680 (cdi->mask & CDC_DVD_R) ? "" : "-R",
1681 (cdi->mask & CDC_DVD_RAM) ? "" : "-RAM");
1683 if ((cdi->mask & CDC_CD_R) == 0 || (cdi->mask & CDC_CD_RW) == 0)
1684 printk(KERN_CONT " CD%s%s",
1685 (cdi->mask & CDC_CD_R) ? "" : "-R",
1686 (cdi->mask & CDC_CD_RW) ? "" : "/RW");
1688 if ((cdi->mask & CDC_SELECT_DISC) == 0)
1689 printk(KERN_CONT " changer w/%d slots", nslots);
1691 printk(KERN_CONT " drive");
1693 printk(KERN_CONT ", %dkB Cache\n", be16_to_cpu(*(u16 *)&buf[8 + 12]));
1698 #ifdef CONFIG_IDE_PROC_FS
1699 static void ide_cdrom_add_settings(ide_drive_t *drive)
1701 ide_add_setting(drive, "dsc_overlap", SETTING_RW, TYPE_BYTE, 0, 1, 1, 1, &drive->dsc_overlap, NULL);
1704 static inline void ide_cdrom_add_settings(ide_drive_t *drive) { ; }
1708 * standard prep_rq_fn that builds 10 byte cmds
1710 static int ide_cdrom_prep_fs(struct request_queue *q, struct request *rq)
1712 int hard_sect = queue_hardsect_size(q);
1713 long block = (long)rq->hard_sector / (hard_sect >> 9);
1714 unsigned long blocks = rq->hard_nr_sectors / (hard_sect >> 9);
1716 memset(rq->cmd, 0, sizeof(rq->cmd));
1718 if (rq_data_dir(rq) == READ)
1719 rq->cmd[0] = GPCMD_READ_10;
1721 rq->cmd[0] = GPCMD_WRITE_10;
1726 rq->cmd[2] = (block >> 24) & 0xff;
1727 rq->cmd[3] = (block >> 16) & 0xff;
1728 rq->cmd[4] = (block >> 8) & 0xff;
1729 rq->cmd[5] = block & 0xff;
1732 * and transfer length
1734 rq->cmd[7] = (blocks >> 8) & 0xff;
1735 rq->cmd[8] = blocks & 0xff;
1741 * Most of the SCSI commands are supported directly by ATAPI devices.
1742 * This transform handles the few exceptions.
1744 static int ide_cdrom_prep_pc(struct request *rq)
1749 * Transform 6-byte read/write commands to the 10-byte version
1751 if (c[0] == READ_6 || c[0] == WRITE_6) {
1758 c[0] += (READ_10 - READ_6);
1764 * it's silly to pretend we understand 6-byte sense commands, just
1765 * reject with ILLEGAL_REQUEST and the caller should take the
1766 * appropriate action
1768 if (c[0] == MODE_SENSE || c[0] == MODE_SELECT) {
1769 rq->errors = ILLEGAL_REQUEST;
1770 return BLKPREP_KILL;
1776 static int ide_cdrom_prep_fn(struct request_queue *q, struct request *rq)
1778 if (blk_fs_request(rq))
1779 return ide_cdrom_prep_fs(q, rq);
1780 else if (blk_pc_request(rq))
1781 return ide_cdrom_prep_pc(rq);
1786 struct cd_list_entry {
1787 const char *id_model;
1788 const char *id_firmware;
1789 unsigned int cd_flags;
1792 static const struct cd_list_entry ide_cd_quirks_list[] = {
1793 /* Limit transfer size per interrupt. */
1794 { "SAMSUNG CD-ROM SCR-2430", NULL, IDE_CD_FLAG_LIMIT_NFRAMES },
1795 { "SAMSUNG CD-ROM SCR-2432", NULL, IDE_CD_FLAG_LIMIT_NFRAMES },
1796 /* SCR-3231 doesn't support the SET_CD_SPEED command. */
1797 { "SAMSUNG CD-ROM SCR-3231", NULL, IDE_CD_FLAG_NO_SPEED_SELECT },
1798 /* Old NEC260 (not R) was released before ATAPI 1.2 spec. */
1799 { "NEC CD-ROM DRIVE:260", "1.01", IDE_CD_FLAG_TOCADDR_AS_BCD |
1800 IDE_CD_FLAG_PRE_ATAPI12, },
1801 /* Vertos 300, some versions of this drive like to talk BCD. */
1802 { "V003S0DS", NULL, IDE_CD_FLAG_VERTOS_300_SSD, },
1803 /* Vertos 600 ESD. */
1804 { "V006E0DS", NULL, IDE_CD_FLAG_VERTOS_600_ESD, },
1806 * Sanyo 3 CD changer uses a non-standard command for CD changing
1807 * (by default standard ATAPI support for CD changers is used).
1809 { "CD-ROM CDR-C3 G", NULL, IDE_CD_FLAG_SANYO_3CD },
1810 { "CD-ROM CDR-C3G", NULL, IDE_CD_FLAG_SANYO_3CD },
1811 { "CD-ROM CDR_C36", NULL, IDE_CD_FLAG_SANYO_3CD },
1812 /* Stingray 8X CD-ROM. */
1813 { "STINGRAY 8422 IDE 8X CD-ROM 7-27-95", NULL, IDE_CD_FLAG_PRE_ATAPI12},
1815 * ACER 50X CD-ROM and WPI 32X CD-ROM require the full spec length
1816 * mode sense page capabilities size, but older drives break.
1818 { "ATAPI CD ROM DRIVE 50X MAX", NULL, IDE_CD_FLAG_FULL_CAPS_PAGE },
1819 { "WPI CDS-32X", NULL, IDE_CD_FLAG_FULL_CAPS_PAGE },
1820 /* ACER/AOpen 24X CD-ROM has the speed fields byte-swapped. */
1821 { "", "241N", IDE_CD_FLAG_LE_SPEED_FIELDS },
1823 * Some drives used by Apple don't advertise audio play
1824 * but they do support reading TOC & audio datas.
1826 { "MATSHITADVD-ROM SR-8187", NULL, IDE_CD_FLAG_PLAY_AUDIO_OK },
1827 { "MATSHITADVD-ROM SR-8186", NULL, IDE_CD_FLAG_PLAY_AUDIO_OK },
1828 { "MATSHITADVD-ROM SR-8176", NULL, IDE_CD_FLAG_PLAY_AUDIO_OK },
1829 { "MATSHITADVD-ROM SR-8174", NULL, IDE_CD_FLAG_PLAY_AUDIO_OK },
1830 { "Optiarc DVD RW AD-5200A", NULL, IDE_CD_FLAG_PLAY_AUDIO_OK },
1834 static unsigned int ide_cd_flags(struct hd_driveid *id)
1836 const struct cd_list_entry *cle = ide_cd_quirks_list;
1838 while (cle->id_model) {
1839 if (strcmp(cle->id_model, id->model) == 0 &&
1840 (cle->id_firmware == NULL ||
1841 strstr(id->fw_rev, cle->id_firmware)))
1842 return cle->cd_flags;
1850 int ide_cdrom_setup(ide_drive_t *drive)
1852 struct cdrom_info *cd = drive->driver_data;
1853 struct cdrom_device_info *cdi = &cd->devinfo;
1854 struct hd_driveid *id = drive->id;
1857 blk_queue_prep_rq(drive->queue, ide_cdrom_prep_fn);
1858 blk_queue_dma_alignment(drive->queue, 31);
1859 drive->queue->unplug_delay = (1 * HZ) / 1000;
1860 if (!drive->queue->unplug_delay)
1861 drive->queue->unplug_delay = 1;
1863 drive->special.all = 0;
1865 cd->cd_flags = IDE_CD_FLAG_MEDIA_CHANGED | IDE_CD_FLAG_NO_EJECT |
1868 if ((id->config & 0x0060) == 0x20)
1869 cd->cd_flags |= IDE_CD_FLAG_DRQ_INTERRUPT;
1871 if ((cd->cd_flags & IDE_CD_FLAG_VERTOS_300_SSD) &&
1872 id->fw_rev[4] == '1' && id->fw_rev[6] <= '2')
1873 cd->cd_flags |= (IDE_CD_FLAG_TOCTRACKS_AS_BCD |
1874 IDE_CD_FLAG_TOCADDR_AS_BCD);
1875 else if ((cd->cd_flags & IDE_CD_FLAG_VERTOS_600_ESD) &&
1876 id->fw_rev[4] == '1' && id->fw_rev[6] <= '2')
1877 cd->cd_flags |= IDE_CD_FLAG_TOCTRACKS_AS_BCD;
1878 else if (cd->cd_flags & IDE_CD_FLAG_SANYO_3CD)
1879 cdi->sanyo_slot = 3; /* 3 => use CD in slot 0 */
1881 nslots = ide_cdrom_probe_capabilities(drive);
1884 * set correct block size
1886 blk_queue_hardsect_size(drive->queue, CD_FRAMESIZE);
1888 if (drive->autotune == IDE_TUNE_DEFAULT ||
1889 drive->autotune == IDE_TUNE_AUTO)
1890 drive->dsc_overlap = (drive->next != drive);
1892 if (ide_cdrom_register(drive, nslots)) {
1893 printk(KERN_ERR "%s: ide_cdrom_setup failed to register device with the cdrom driver.\n", drive->name);
1894 cd->devinfo.handle = NULL;
1897 ide_cdrom_add_settings(drive);
1901 #ifdef CONFIG_IDE_PROC_FS
1903 sector_t ide_cdrom_capacity(ide_drive_t *drive)
1905 unsigned long capacity, sectors_per_frame;
1907 if (cdrom_read_capacity(drive, &capacity, §ors_per_frame, NULL))
1910 return capacity * sectors_per_frame;
1914 static void ide_cd_remove(ide_drive_t *drive)
1916 struct cdrom_info *info = drive->driver_data;
1918 ide_proc_unregister_driver(drive, info->driver);
1920 del_gendisk(info->disk);
1925 static void ide_cd_release(struct kref *kref)
1927 struct cdrom_info *info = to_ide_cd(kref);
1928 struct cdrom_device_info *devinfo = &info->devinfo;
1929 ide_drive_t *drive = info->drive;
1930 struct gendisk *g = info->disk;
1933 if (devinfo->handle == drive)
1934 unregister_cdrom(devinfo);
1935 drive->dsc_overlap = 0;
1936 drive->driver_data = NULL;
1937 blk_queue_prep_rq(drive->queue, NULL);
1938 g->private_data = NULL;
1943 static int ide_cd_probe(ide_drive_t *);
1945 #ifdef CONFIG_IDE_PROC_FS
1946 static int proc_idecd_read_capacity
1947 (char *page, char **start, off_t off, int count, int *eof, void *data)
1949 ide_drive_t *drive = data;
1952 len = sprintf(page, "%llu\n", (long long)ide_cdrom_capacity(drive));
1953 PROC_IDE_READ_RETURN(page, start, off, count, eof, len);
1956 static ide_proc_entry_t idecd_proc[] = {
1957 { "capacity", S_IFREG|S_IRUGO, proc_idecd_read_capacity, NULL },
1958 { NULL, 0, NULL, NULL }
1962 static ide_driver_t ide_cdrom_driver = {
1964 .owner = THIS_MODULE,
1965 .name = "ide-cdrom",
1966 .bus = &ide_bus_type,
1968 .probe = ide_cd_probe,
1969 .remove = ide_cd_remove,
1970 .version = IDECD_VERSION,
1972 .supports_dsc_overlap = 1,
1973 .do_request = ide_do_rw_cdrom,
1974 .end_request = ide_end_request,
1975 .error = __ide_error,
1976 .abort = __ide_abort,
1977 #ifdef CONFIG_IDE_PROC_FS
1982 static int idecd_open(struct inode *inode, struct file *file)
1984 struct gendisk *disk = inode->i_bdev->bd_disk;
1985 struct cdrom_info *info;
1988 info = ide_cd_get(disk);
1992 rc = cdrom_open(&info->devinfo, inode, file);
2000 static int idecd_release(struct inode *inode, struct file *file)
2002 struct gendisk *disk = inode->i_bdev->bd_disk;
2003 struct cdrom_info *info = ide_cd_g(disk);
2005 cdrom_release(&info->devinfo, file);
2012 static int idecd_set_spindown(struct cdrom_device_info *cdi, unsigned long arg)
2014 struct packet_command cgc;
2019 if (copy_from_user(&spindown, (void __user *)arg, sizeof(char)))
2022 init_cdrom_command(&cgc, buffer, sizeof(buffer), CGC_DATA_UNKNOWN);
2024 stat = cdrom_mode_sense(cdi, &cgc, GPMODE_CDROM_PAGE, 0);
2028 buffer[11] = (buffer[11] & 0xf0) | (spindown & 0x0f);
2029 return cdrom_mode_select(cdi, &cgc);
2032 static int idecd_get_spindown(struct cdrom_device_info *cdi, unsigned long arg)
2034 struct packet_command cgc;
2039 init_cdrom_command(&cgc, buffer, sizeof(buffer), CGC_DATA_UNKNOWN);
2041 stat = cdrom_mode_sense(cdi, &cgc, GPMODE_CDROM_PAGE, 0);
2045 spindown = buffer[11] & 0x0f;
2046 if (copy_to_user((void __user *)arg, &spindown, sizeof(char)))
2051 static int idecd_ioctl(struct inode *inode, struct file *file,
2052 unsigned int cmd, unsigned long arg)
2054 struct block_device *bdev = inode->i_bdev;
2055 struct cdrom_info *info = ide_cd_g(bdev->bd_disk);
2059 case CDROMSETSPINDOWN:
2060 return idecd_set_spindown(&info->devinfo, arg);
2061 case CDROMGETSPINDOWN:
2062 return idecd_get_spindown(&info->devinfo, arg);
2067 err = generic_ide_ioctl(info->drive, file, bdev, cmd, arg);
2069 err = cdrom_ioctl(file, &info->devinfo, inode, cmd, arg);
2074 static int idecd_media_changed(struct gendisk *disk)
2076 struct cdrom_info *info = ide_cd_g(disk);
2077 return cdrom_media_changed(&info->devinfo);
2080 static int idecd_revalidate_disk(struct gendisk *disk)
2082 struct cdrom_info *info = ide_cd_g(disk);
2083 struct request_sense sense;
2085 ide_cd_read_toc(info->drive, &sense);
2090 static struct block_device_operations idecd_ops = {
2091 .owner = THIS_MODULE,
2093 .release = idecd_release,
2094 .ioctl = idecd_ioctl,
2095 .media_changed = idecd_media_changed,
2096 .revalidate_disk = idecd_revalidate_disk
2100 static char *ignore;
2102 module_param(ignore, charp, 0400);
2103 MODULE_DESCRIPTION("ATAPI CD-ROM Driver");
2105 static int ide_cd_probe(ide_drive_t *drive)
2107 struct cdrom_info *info;
2109 struct request_sense sense;
2111 if (!strstr("ide-cdrom", drive->driver_req))
2113 if (!drive->present)
2115 if (drive->media != ide_cdrom && drive->media != ide_optical)
2117 /* skip drives that we were told to ignore */
2118 if (ignore != NULL) {
2119 if (strstr(ignore, drive->name)) {
2120 printk(KERN_INFO "ide-cd: ignoring drive %s\n", drive->name);
2125 printk(KERN_INFO "ide-cd: passing drive %s to ide-scsi emulation.\n", drive->name);
2128 info = kzalloc(sizeof(struct cdrom_info), GFP_KERNEL);
2130 printk(KERN_ERR "%s: Can't allocate a cdrom structure\n", drive->name);
2134 g = alloc_disk(1 << PARTN_BITS);
2138 ide_init_disk(g, drive);
2140 ide_proc_register_driver(drive, &ide_cdrom_driver);
2142 kref_init(&info->kref);
2144 info->drive = drive;
2145 info->driver = &ide_cdrom_driver;
2148 g->private_data = &info->driver;
2150 drive->driver_data = info;
2153 g->driverfs_dev = &drive->gendev;
2154 g->flags = GENHD_FL_CD | GENHD_FL_REMOVABLE;
2155 if (ide_cdrom_setup(drive)) {
2156 ide_proc_unregister_driver(drive, &ide_cdrom_driver);
2157 ide_cd_release(&info->kref);
2161 ide_cd_read_toc(drive, &sense);
2162 g->fops = &idecd_ops;
2163 g->flags |= GENHD_FL_REMOVABLE;
2173 static void __exit ide_cdrom_exit(void)
2175 driver_unregister(&ide_cdrom_driver.gen_driver);
2178 static int __init ide_cdrom_init(void)
2180 return driver_register(&ide_cdrom_driver.gen_driver);
2183 MODULE_ALIAS("ide:*m-cdrom*");
2184 MODULE_ALIAS("ide-cd");
2185 module_init(ide_cdrom_init);
2186 module_exit(ide_cdrom_exit);
2187 MODULE_LICENSE("GPL");