2 * linux/drivers/ide/ide-cd.c
4 * Copyright (C) 1994, 1995, 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>
8 * May be copied or modified under the terms of the GNU General Public
9 * License. See linux/COPYING for more information.
11 * ATAPI CD-ROM driver. To be used with ide.c.
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 * Drives that deviate from these standards will be accommodated as much
23 * as possible via compile time or command-line options. Since I only have
24 * a few drives, you generally need to send me patches...
26 * ----------------------------------
28 * -Make it so that Pioneer CD DR-A24X and friends don't get screwed up on
31 * For historical changelog please see:
32 * Documentation/ide/ChangeLog.ide-cd.1994-2004
35 #define IDECD_VERSION "4.61"
37 #include <linux/module.h>
38 #include <linux/types.h>
39 #include <linux/kernel.h>
40 #include <linux/delay.h>
41 #include <linux/timer.h>
42 #include <linux/slab.h>
43 #include <linux/interrupt.h>
44 #include <linux/errno.h>
45 #include <linux/cdrom.h>
46 #include <linux/ide.h>
47 #include <linux/completion.h>
48 #include <linux/mutex.h>
49 #include <linux/bcd.h>
51 #include <scsi/scsi.h> /* For SCSI -> ATAPI command conversion */
55 #include <asm/byteorder.h>
56 #include <asm/uaccess.h>
57 #include <asm/unaligned.h>
61 static DEFINE_MUTEX(idecd_ref_mutex);
63 #define to_ide_cd(obj) container_of(obj, struct cdrom_info, kref)
65 #define ide_cd_g(disk) \
66 container_of((disk)->private_data, struct cdrom_info, driver)
68 static struct cdrom_info *ide_cd_get(struct gendisk *disk)
70 struct cdrom_info *cd = NULL;
72 mutex_lock(&idecd_ref_mutex);
76 mutex_unlock(&idecd_ref_mutex);
80 static void ide_cd_release(struct kref *);
82 static void ide_cd_put(struct cdrom_info *cd)
84 mutex_lock(&idecd_ref_mutex);
85 kref_put(&cd->kref, ide_cd_release);
86 mutex_unlock(&idecd_ref_mutex);
89 /****************************************************************************
90 * Generic packet command support and error handling routines.
93 /* Mark that we've seen a media change, and invalidate our internal
95 static void cdrom_saw_media_change (ide_drive_t *drive)
97 struct cdrom_info *cd = drive->driver_data;
99 cd->cd_flags |= IDE_CD_FLAG_MEDIA_CHANGED;
100 cd->cd_flags &= ~IDE_CD_FLAG_TOC_VALID;
101 cd->nsectors_buffered = 0;
104 static int cdrom_log_sense(ide_drive_t *drive, struct request *rq,
105 struct request_sense *sense)
109 if (!sense || !rq || (rq->cmd_flags & REQ_QUIET))
112 switch (sense->sense_key) {
113 case NO_SENSE: case RECOVERED_ERROR:
117 * don't care about tray state messages for
118 * e.g. capacity commands or in-progress or
121 if (sense->asc == 0x3a || sense->asc == 0x04)
125 case ILLEGAL_REQUEST:
127 * don't log START_STOP unit with LoEj set, since
128 * we cannot reliably check if drive can auto-close
130 if (rq->cmd[0] == GPCMD_START_STOP_UNIT && sense->asc == 0x24)
136 * Make good and sure we've seen this potential media
137 * change. Some drives (i.e. Creative) fail to present
138 * the correct sense key in the error register.
140 cdrom_saw_media_change(drive);
150 void cdrom_analyze_sense_data(ide_drive_t *drive,
151 struct request *failed_command,
152 struct request_sense *sense)
154 unsigned long sector;
155 unsigned long bio_sectors;
157 struct cdrom_info *info = drive->driver_data;
159 if (!cdrom_log_sense(drive, failed_command, sense))
163 * If a read toc is executed for a CD-R or CD-RW medium where
164 * the first toc has not been recorded yet, it will fail with
165 * 05/24/00 (which is a confusing error)
167 if (failed_command && failed_command->cmd[0] == GPCMD_READ_TOC_PMA_ATIP)
168 if (sense->sense_key == 0x05 && sense->asc == 0x24)
171 if (sense->error_code == 0x70) { /* Current Error */
172 switch(sense->sense_key) {
174 case VOLUME_OVERFLOW:
175 case ILLEGAL_REQUEST:
178 if (failed_command == NULL ||
179 !blk_fs_request(failed_command))
181 sector = (sense->information[0] << 24) |
182 (sense->information[1] << 16) |
183 (sense->information[2] << 8) |
184 (sense->information[3]);
186 bio_sectors = bio_sectors(failed_command->bio);
189 if (drive->queue->hardsect_size == 2048)
190 sector <<= 2; /* Device sector size is 2K */
191 sector &= ~(bio_sectors -1);
192 valid = (sector - failed_command->sector) << 9;
196 if (sector < get_capacity(info->disk) &&
197 drive->probed_capacity - sector < 4 * 75) {
198 set_capacity(info->disk, sector);
202 #if VERBOSE_IDE_CD_ERRORS
205 const char *s = "bad sense key!";
208 printk(KERN_ERR "ATAPI device %s:\n", drive->name);
209 if (sense->error_code == 0x70)
210 printk(KERN_CONT " Error: ");
211 else if (sense->error_code == 0x71)
212 printk(" Deferred Error: ");
213 else if (sense->error_code == 0x7f)
214 printk(KERN_CONT " Vendor-specific Error: ");
216 printk(KERN_CONT " Unknown Error Type: ");
218 if (sense->sense_key < ARRAY_SIZE(sense_key_texts))
219 s = sense_key_texts[sense->sense_key];
221 printk(KERN_CONT "%s -- (Sense key=0x%02x)\n",
222 s, sense->sense_key);
224 if (sense->asc == 0x40) {
225 sprintf(buf, "Diagnostic failure on component 0x%02x",
229 int lo = 0, mid, hi = ARRAY_SIZE(sense_data_texts);
230 unsigned long key = (sense->sense_key << 16);
232 key |= (sense->asc << 8);
233 if (!(sense->ascq >= 0x80 && sense->ascq <= 0xdd))
239 if (sense_data_texts[mid].asc_ascq == key ||
240 sense_data_texts[mid].asc_ascq == (0xff0000|key)) {
241 s = sense_data_texts[mid].text;
243 } else if (sense_data_texts[mid].asc_ascq > key)
251 if (sense->asc > 0x80)
252 s = "(vendor-specific error)";
254 s = "(reserved error code)";
257 printk(KERN_ERR " %s -- (asc=0x%02x, ascq=0x%02x)\n",
258 s, sense->asc, sense->ascq);
260 if (failed_command != NULL) {
261 int lo = 0, mid, hi = ARRAY_SIZE(packet_command_texts);
266 if (packet_command_texts[mid].packet_command ==
267 failed_command->cmd[0]) {
268 s = packet_command_texts[mid].text;
271 if (packet_command_texts[mid].packet_command >
272 failed_command->cmd[0])
278 printk(KERN_ERR " The failed \"%s\" packet command "
280 for (i = 0; i < sizeof(failed_command->cmd); i++)
281 printk(KERN_CONT "%02x ",
282 failed_command->cmd[i]);
283 printk(KERN_CONT "\"\n");
286 /* The SKSV bit specifies validity of the sense_key_specific
287 * in the next two commands. It is bit 7 of the first byte.
288 * In the case of NOT_READY, if SKSV is set the drive can
289 * give us nice ETA readings.
291 if (sense->sense_key == NOT_READY && (sense->sks[0] & 0x80)) {
292 int progress = (sense->sks[1] << 8 | sense->sks[2]) * 100;
294 printk(KERN_ERR " Command is %02d%% complete\n",
298 if (sense->sense_key == ILLEGAL_REQUEST &&
299 (sense->sks[0] & 0x80) != 0) {
300 printk(KERN_ERR " Error in %s byte %d",
301 (sense->sks[0] & 0x40) != 0 ?
302 "command packet" : "command data",
303 (sense->sks[1] << 8) + sense->sks[2]);
305 if ((sense->sks[0] & 0x40) != 0)
306 printk(KERN_CONT " bit %d",
307 sense->sks[0] & 0x07);
309 printk(KERN_CONT "\n");
312 #else /* not VERBOSE_IDE_CD_ERRORS */
313 /* Suppress printing unit attention and `in progress of becoming ready'
314 errors when we're not being verbose. */
315 if (sense->sense_key == UNIT_ATTENTION ||
316 (sense->sense_key == NOT_READY && (sense->asc == 4 ||
317 sense->asc == 0x3a)))
320 printk(KERN_ERR "%s: error code: 0x%02x sense_key: 0x%02x "
321 "asc: 0x%02x ascq: 0x%02x\n",
322 drive->name, sense->error_code, sense->sense_key,
323 sense->asc, sense->ascq);
324 #endif /* not VERBOSE_IDE_CD_ERRORS */
328 * Initialize a ide-cd packet command request
330 static void cdrom_prepare_request(ide_drive_t *drive, struct request *rq)
332 struct cdrom_info *cd = drive->driver_data;
334 ide_init_drive_cmd(rq);
335 rq->cmd_type = REQ_TYPE_ATA_PC;
336 rq->rq_disk = cd->disk;
339 static void cdrom_queue_request_sense(ide_drive_t *drive, void *sense,
340 struct request *failed_command)
342 struct cdrom_info *info = drive->driver_data;
343 struct request *rq = &info->request_sense_request;
346 sense = &info->sense_data;
348 /* stuff the sense request in front of our current request */
349 cdrom_prepare_request(drive, rq);
352 rq->cmd[0] = GPCMD_REQUEST_SENSE;
353 rq->cmd[4] = rq->data_len = 18;
355 rq->cmd_type = REQ_TYPE_SENSE;
357 /* NOTE! Save the failed command in "rq->buffer" */
358 rq->buffer = (void *) failed_command;
360 (void) ide_do_drive_cmd(drive, rq, ide_preempt);
363 static void cdrom_end_request (ide_drive_t *drive, int uptodate)
365 struct request *rq = HWGROUP(drive)->rq;
366 int nsectors = rq->hard_cur_sectors;
368 if (blk_sense_request(rq) && uptodate) {
370 * For REQ_TYPE_SENSE, "rq->buffer" points to the original
373 struct request *failed = (struct request *) rq->buffer;
374 struct cdrom_info *info = drive->driver_data;
375 void *sense = &info->sense_data;
380 sense = failed->sense;
381 failed->sense_len = rq->sense_len;
383 cdrom_analyze_sense_data(drive, failed, sense);
385 * now end failed request
387 if (blk_fs_request(failed)) {
388 if (ide_end_dequeued_request(drive, failed, 0,
389 failed->hard_nr_sectors))
392 spin_lock_irqsave(&ide_lock, flags);
393 if (__blk_end_request(failed, -EIO,
396 spin_unlock_irqrestore(&ide_lock, flags);
399 cdrom_analyze_sense_data(drive, NULL, sense);
402 if (!rq->current_nr_sectors && blk_fs_request(rq))
404 /* make sure it's fully ended */
405 if (blk_pc_request(rq))
406 nsectors = (rq->data_len + 511) >> 9;
410 ide_end_request(drive, uptodate, nsectors);
413 static void ide_dump_status_no_sense(ide_drive_t *drive, const char *msg, u8 stat)
417 ide_dump_status(drive, msg, stat);
420 /* Returns 0 if the request should be continued.
421 Returns 1 if the request was ended. */
422 static int cdrom_decode_status(ide_drive_t *drive, int good_stat, int *stat_ret)
424 struct request *rq = HWGROUP(drive)->rq;
425 int stat, err, sense_key;
427 /* Check for errors. */
428 stat = HWIF(drive)->INB(IDE_STATUS_REG);
432 if (OK_STAT(stat, good_stat, BAD_R_STAT))
435 /* Get the IDE error register. */
436 err = HWIF(drive)->INB(IDE_ERROR_REG);
437 sense_key = err >> 4;
440 printk("%s: missing rq in cdrom_decode_status\n", drive->name);
444 if (blk_sense_request(rq)) {
445 /* We got an error trying to get sense info
446 from the drive (probably while trying
447 to recover from a former error). Just give up. */
449 rq->cmd_flags |= REQ_FAILED;
450 cdrom_end_request(drive, 0);
451 ide_error(drive, "request sense failure", stat);
454 } else if (blk_pc_request(rq) || rq->cmd_type == REQ_TYPE_ATA_PC) {
455 /* All other functions, except for READ. */
459 * if we have an error, pass back CHECK_CONDITION as the
462 if (blk_pc_request(rq) && !rq->errors)
463 rq->errors = SAM_STAT_CHECK_CONDITION;
465 /* Check for tray open. */
466 if (sense_key == NOT_READY) {
467 cdrom_saw_media_change (drive);
468 } else if (sense_key == UNIT_ATTENTION) {
469 /* Check for media change. */
470 cdrom_saw_media_change (drive);
471 /*printk("%s: media changed\n",drive->name);*/
473 } else if ((sense_key == ILLEGAL_REQUEST) &&
474 (rq->cmd[0] == GPCMD_START_STOP_UNIT)) {
476 * Don't print error message for this condition--
477 * SFF8090i indicates that 5/24/00 is the correct
478 * response to a request to close the tray if the
479 * drive doesn't have that capability.
480 * cdrom_log_sense() knows this!
482 } else if (!(rq->cmd_flags & REQ_QUIET)) {
483 /* Otherwise, print an error. */
484 ide_dump_status(drive, "packet command error", stat);
487 rq->cmd_flags |= REQ_FAILED;
490 * instead of playing games with moving completions around,
491 * remove failed request completely and end it when the
492 * request sense has completed
494 if (stat & ERR_STAT) {
495 spin_lock_irqsave(&ide_lock, flags);
496 blkdev_dequeue_request(rq);
497 HWGROUP(drive)->rq = NULL;
498 spin_unlock_irqrestore(&ide_lock, flags);
500 cdrom_queue_request_sense(drive, rq->sense, rq);
502 cdrom_end_request(drive, 0);
504 } else if (blk_fs_request(rq)) {
505 int do_end_request = 0;
507 /* Handle errors from READ and WRITE requests. */
509 if (blk_noretry_request(rq))
512 if (sense_key == NOT_READY) {
514 if (rq_data_dir(rq) == READ) {
515 cdrom_saw_media_change (drive);
517 /* Fail the request. */
518 printk ("%s: tray open\n", drive->name);
521 struct cdrom_info *info = drive->driver_data;
523 /* allow the drive 5 seconds to recover, some
524 * devices will return this error while flushing
527 info->write_timeout = jiffies + ATAPI_WAIT_WRITE_BUSY;
529 if (time_after(jiffies, info->write_timeout))
535 * take a breather relying on the
536 * unplug timer to kick us again
538 spin_lock_irqsave(&ide_lock, flags);
539 blk_plug_device(drive->queue);
540 spin_unlock_irqrestore(&ide_lock,flags);
544 } else if (sense_key == UNIT_ATTENTION) {
546 cdrom_saw_media_change (drive);
548 /* Arrange to retry the request.
549 But be sure to give up if we've retried
551 if (++rq->errors > ERROR_MAX)
553 } else if (sense_key == ILLEGAL_REQUEST ||
554 sense_key == DATA_PROTECT) {
555 /* No point in retrying after an illegal
556 request or data protect error.*/
557 ide_dump_status_no_sense (drive, "command error", stat);
559 } else if (sense_key == MEDIUM_ERROR) {
560 /* No point in re-trying a zillion times on a bad
561 * sector... If we got here the error is not correctable */
562 ide_dump_status_no_sense (drive, "media error (bad sector)", stat);
564 } else if (sense_key == BLANK_CHECK) {
565 /* Disk appears blank ?? */
566 ide_dump_status_no_sense (drive, "media error (blank)", stat);
568 } else if ((err & ~ABRT_ERR) != 0) {
569 /* Go to the default handler
571 ide_error(drive, "cdrom_decode_status", stat);
573 } else if ((++rq->errors > ERROR_MAX)) {
574 /* We've racked up too many retries. Abort. */
578 /* End a request through request sense analysis when we have
579 sense data. We need this in order to perform end of media
582 if (do_end_request) {
583 if (stat & ERR_STAT) {
585 spin_lock_irqsave(&ide_lock, flags);
586 blkdev_dequeue_request(rq);
587 HWGROUP(drive)->rq = NULL;
588 spin_unlock_irqrestore(&ide_lock, flags);
590 cdrom_queue_request_sense(drive, rq->sense, rq);
592 cdrom_end_request(drive, 0);
594 /* If we got a CHECK_CONDITION status,
595 queue a request sense command. */
597 cdrom_queue_request_sense(drive, NULL, NULL);
600 blk_dump_rq_flags(rq, "ide-cd: bad rq");
601 cdrom_end_request(drive, 0);
604 /* Retry, or handle the next request. */
608 static int cdrom_timer_expiry(ide_drive_t *drive)
610 struct request *rq = HWGROUP(drive)->rq;
611 unsigned long wait = 0;
614 * Some commands are *slow* and normally take a long time to
615 * complete. Usually we can use the ATAPI "disconnect" to bypass
616 * this, but not all commands/drives support that. Let
617 * ide_timer_expiry keep polling us for these.
619 switch (rq->cmd[0]) {
621 case GPCMD_FORMAT_UNIT:
622 case GPCMD_RESERVE_RZONE_TRACK:
623 case GPCMD_CLOSE_TRACK:
624 case GPCMD_FLUSH_CACHE:
625 wait = ATAPI_WAIT_PC;
628 if (!(rq->cmd_flags & REQ_QUIET))
629 printk(KERN_INFO "ide-cd: cmd 0x%x timed out\n", rq->cmd[0]);
636 /* Set up the device registers for transferring a packet command on DEV,
637 expecting to later transfer XFERLEN bytes. HANDLER is the routine
638 which actually transfers the command to the drive. If this is a
639 drq_interrupt device, this routine will arrange for HANDLER to be
640 called when the interrupt from the drive arrives. Otherwise, HANDLER
641 will be called immediately after the drive is prepared for the transfer. */
643 static ide_startstop_t cdrom_start_packet_command(ide_drive_t *drive,
645 ide_handler_t *handler)
647 ide_startstop_t startstop;
648 struct cdrom_info *info = drive->driver_data;
649 ide_hwif_t *hwif = drive->hwif;
651 /* Wait for the controller to be idle. */
652 if (ide_wait_stat(&startstop, drive, 0, BUSY_STAT, WAIT_READY))
655 /* FIXME: for Virtual DMA we must check harder */
657 info->dma = !hwif->dma_setup(drive);
659 /* Set up the controller registers. */
660 ide_pktcmd_tf_load(drive, IDE_TFLAG_OUT_NSECT | IDE_TFLAG_OUT_LBAL |
661 IDE_TFLAG_NO_SELECT_MASK, xferlen, info->dma);
663 if (info->cd_flags & IDE_CD_FLAG_DRQ_INTERRUPT) {
664 /* waiting for CDB interrupt, not DMA yet. */
666 drive->waiting_for_dma = 0;
669 ide_execute_command(drive, WIN_PACKETCMD, handler, ATAPI_WAIT_PC, cdrom_timer_expiry);
675 spin_lock_irqsave(&ide_lock, flags);
676 hwif->OUTBSYNC(drive, WIN_PACKETCMD, IDE_COMMAND_REG);
678 spin_unlock_irqrestore(&ide_lock, flags);
680 return (*handler) (drive);
684 /* Send a packet command to DRIVE described by CMD_BUF and CMD_LEN.
685 The device registers must have already been prepared
686 by cdrom_start_packet_command.
687 HANDLER is the interrupt handler to call when the command completes
688 or there's data ready. */
689 #define ATAPI_MIN_CDB_BYTES 12
690 static ide_startstop_t cdrom_transfer_packet_command (ide_drive_t *drive,
692 ide_handler_t *handler)
694 ide_hwif_t *hwif = drive->hwif;
696 struct cdrom_info *info = drive->driver_data;
697 ide_startstop_t startstop;
699 if (info->cd_flags & IDE_CD_FLAG_DRQ_INTERRUPT) {
700 /* Here we should have been called after receiving an interrupt
701 from the device. DRQ should how be set. */
703 /* Check for errors. */
704 if (cdrom_decode_status(drive, DRQ_STAT, NULL))
707 /* Ok, next interrupt will be DMA interrupt. */
709 drive->waiting_for_dma = 1;
711 /* Otherwise, we must wait for DRQ to get set. */
712 if (ide_wait_stat(&startstop, drive, DRQ_STAT,
713 BUSY_STAT, WAIT_READY))
717 /* Arm the interrupt handler. */
718 ide_set_handler(drive, handler, rq->timeout, cdrom_timer_expiry);
720 /* ATAPI commands get padded out to 12 bytes minimum */
721 cmd_len = COMMAND_SIZE(rq->cmd[0]);
722 if (cmd_len < ATAPI_MIN_CDB_BYTES)
723 cmd_len = ATAPI_MIN_CDB_BYTES;
725 /* Send the command to the device. */
726 HWIF(drive)->atapi_output_bytes(drive, rq->cmd, cmd_len);
728 /* Start the DMA if need be */
730 hwif->dma_start(drive);
735 /****************************************************************************
736 * Block read functions.
739 typedef void (xfer_func_t)(ide_drive_t *, void *, u32);
741 static void ide_cd_pad_transfer(ide_drive_t *drive, xfer_func_t *xf, int len)
745 xf(drive, &dum, sizeof(dum));
751 * Buffer up to SECTORS_TO_TRANSFER sectors from the drive in our sector
752 * buffer. Once the first sector is added, any subsequent sectors are
753 * assumed to be continuous (until the buffer is cleared). For the first
754 * sector added, SECTOR is its sector number. (SECTOR is then ignored until
755 * the buffer is cleared.)
757 static void cdrom_buffer_sectors (ide_drive_t *drive, unsigned long sector,
758 int sectors_to_transfer)
760 struct cdrom_info *info = drive->driver_data;
762 /* Number of sectors to read into the buffer. */
763 int sectors_to_buffer = min_t(int, sectors_to_transfer,
764 (SECTOR_BUFFER_SIZE >> SECTOR_BITS) -
765 info->nsectors_buffered);
769 /* If we couldn't get a buffer, don't try to buffer anything... */
770 if (info->buffer == NULL)
771 sectors_to_buffer = 0;
773 /* If this is the first sector in the buffer, remember its number. */
774 if (info->nsectors_buffered == 0)
775 info->sector_buffered = sector;
777 /* Read the data into the buffer. */
778 dest = info->buffer + info->nsectors_buffered * SECTOR_SIZE;
779 while (sectors_to_buffer > 0) {
780 HWIF(drive)->atapi_input_bytes(drive, dest, SECTOR_SIZE);
782 --sectors_to_transfer;
783 ++info->nsectors_buffered;
787 /* Throw away any remaining data. */
788 while (sectors_to_transfer > 0) {
789 static char dum[SECTOR_SIZE];
790 HWIF(drive)->atapi_input_bytes(drive, dum, sizeof (dum));
791 --sectors_to_transfer;
796 * Check the contents of the interrupt reason register from the cdrom
797 * and attempt to recover if there are problems. Returns 0 if everything's
798 * ok; nonzero if the request has been terminated.
801 int cdrom_read_check_ireason (ide_drive_t *drive, int len, int ireason)
805 else if (ireason == 0) {
806 ide_hwif_t *hwif = drive->hwif;
808 /* Whoops... The drive is expecting to receive data from us! */
809 printk(KERN_ERR "%s: %s: wrong transfer direction!\n",
810 drive->name, __FUNCTION__);
812 /* Throw some data at the drive so it doesn't hang
813 and quit this request. */
814 ide_cd_pad_transfer(drive, hwif->atapi_output_bytes, len);
815 } else if (ireason == 1) {
816 /* Some drives (ASUS) seem to tell us that status
817 * info is available. just get it and ignore.
819 (void) HWIF(drive)->INB(IDE_STATUS_REG);
822 /* Drive wants a command packet, or invalid ireason... */
823 printk(KERN_ERR "%s: %s: bad interrupt reason 0x%02x\n",
824 drive->name, __FUNCTION__, ireason);
827 cdrom_end_request(drive, 0);
832 * Interrupt routine. Called when a read request has completed.
834 static ide_startstop_t cdrom_read_intr (ide_drive_t *drive)
837 int ireason, len, sectors_to_transfer, nskip;
838 struct cdrom_info *info = drive->driver_data;
839 u8 lowcyl = 0, highcyl = 0;
840 int dma = info->dma, dma_error = 0;
842 struct request *rq = HWGROUP(drive)->rq;
849 dma_error = HWIF(drive)->ide_dma_end(drive);
851 printk(KERN_ERR "%s: DMA read error\n", drive->name);
856 if (cdrom_decode_status(drive, 0, &stat))
861 ide_end_request(drive, 1, rq->nr_sectors);
864 return ide_error(drive, "dma error", stat);
867 /* Read the interrupt reason and the transfer length. */
868 ireason = HWIF(drive)->INB(IDE_IREASON_REG) & 0x3;
869 lowcyl = HWIF(drive)->INB(IDE_BCOUNTL_REG);
870 highcyl = HWIF(drive)->INB(IDE_BCOUNTH_REG);
872 len = lowcyl + (256 * highcyl);
874 /* If DRQ is clear, the command has completed. */
875 if ((stat & DRQ_STAT) == 0) {
876 /* If we're not done filling the current buffer, complain.
877 Otherwise, complete the command normally. */
878 if (rq->current_nr_sectors > 0) {
879 printk (KERN_ERR "%s: cdrom_read_intr: data underrun (%d blocks)\n",
880 drive->name, rq->current_nr_sectors);
881 rq->cmd_flags |= REQ_FAILED;
882 cdrom_end_request(drive, 0);
884 cdrom_end_request(drive, 1);
888 /* Check that the drive is expecting to do the same thing we are. */
889 if (cdrom_read_check_ireason (drive, len, ireason))
892 /* Assume that the drive will always provide data in multiples
893 of at least SECTOR_SIZE, as it gets hairy to keep track
894 of the transfers otherwise. */
895 if ((len % SECTOR_SIZE) != 0) {
896 printk (KERN_ERR "%s: cdrom_read_intr: Bad transfer size %d\n",
898 if (info->cd_flags & IDE_CD_FLAG_LIMIT_NFRAMES)
899 printk (KERN_ERR " This drive is not supported by this version of the driver\n");
901 printk (KERN_ERR " Trying to limit transfer sizes\n");
902 info->cd_flags |= IDE_CD_FLAG_LIMIT_NFRAMES;
904 cdrom_end_request(drive, 0);
908 /* The number of sectors we need to read from the drive. */
909 sectors_to_transfer = len / SECTOR_SIZE;
911 /* First, figure out if we need to bit-bucket
912 any of the leading sectors. */
913 nskip = min_t(int, rq->current_nr_sectors - bio_cur_sectors(rq->bio), sectors_to_transfer);
916 /* We need to throw away a sector. */
917 static char dum[SECTOR_SIZE];
918 HWIF(drive)->atapi_input_bytes(drive, dum, sizeof (dum));
920 --rq->current_nr_sectors;
922 --sectors_to_transfer;
925 /* Now loop while we still have data to read from the drive. */
926 while (sectors_to_transfer > 0) {
929 /* If we've filled the present buffer but there's another
930 chained buffer after it, move on. */
931 if (rq->current_nr_sectors == 0 && rq->nr_sectors)
932 cdrom_end_request(drive, 1);
934 /* If the buffers are full, cache the rest of the data in our
936 if (rq->current_nr_sectors == 0) {
937 cdrom_buffer_sectors(drive, rq->sector, sectors_to_transfer);
938 sectors_to_transfer = 0;
940 /* Transfer data to the buffers.
941 Figure out how many sectors we can transfer
942 to the current buffer. */
943 this_transfer = min_t(int, sectors_to_transfer,
944 rq->current_nr_sectors);
946 /* Read this_transfer sectors
947 into the current buffer. */
948 while (this_transfer > 0) {
949 HWIF(drive)->atapi_input_bytes(drive, rq->buffer, SECTOR_SIZE);
950 rq->buffer += SECTOR_SIZE;
952 --rq->current_nr_sectors;
955 --sectors_to_transfer;
960 /* Done moving data! Wait for another interrupt. */
961 ide_set_handler(drive, &cdrom_read_intr, ATAPI_WAIT_PC, NULL);
966 * Try to satisfy some of the current read request from our cached data.
967 * Returns nonzero if the request has been completed, zero otherwise.
969 static int cdrom_read_from_buffer (ide_drive_t *drive)
971 struct cdrom_info *info = drive->driver_data;
972 struct request *rq = HWGROUP(drive)->rq;
973 unsigned short sectors_per_frame;
975 sectors_per_frame = queue_hardsect_size(drive->queue) >> SECTOR_BITS;
977 /* Can't do anything if there's no buffer. */
978 if (info->buffer == NULL) return 0;
980 /* Loop while this request needs data and the next block is present
982 while (rq->nr_sectors > 0 &&
983 rq->sector >= info->sector_buffered &&
984 rq->sector < info->sector_buffered + info->nsectors_buffered) {
985 if (rq->current_nr_sectors == 0)
986 cdrom_end_request(drive, 1);
990 (rq->sector - info->sector_buffered) * SECTOR_SIZE,
992 rq->buffer += SECTOR_SIZE;
993 --rq->current_nr_sectors;
998 /* If we've satisfied the current request,
999 terminate it successfully. */
1000 if (rq->nr_sectors == 0) {
1001 cdrom_end_request(drive, 1);
1005 /* Move on to the next buffer if needed. */
1006 if (rq->current_nr_sectors == 0)
1007 cdrom_end_request(drive, 1);
1009 /* If this condition does not hold, then the kluge i use to
1010 represent the number of sectors to skip at the start of a transfer
1011 will fail. I think that this will never happen, but let's be
1012 paranoid and check. */
1013 if (rq->current_nr_sectors < bio_cur_sectors(rq->bio) &&
1014 (rq->sector & (sectors_per_frame - 1))) {
1015 printk(KERN_ERR "%s: cdrom_read_from_buffer: buffer botch (%ld)\n",
1016 drive->name, (long)rq->sector);
1017 cdrom_end_request(drive, 0);
1025 * Routine to send a read packet command to the drive.
1026 * This is usually called directly from cdrom_start_read.
1027 * However, for drq_interrupt devices, it is called from an interrupt
1028 * when the drive is ready to accept the command.
1030 static ide_startstop_t cdrom_start_read_continuation (ide_drive_t *drive)
1032 struct request *rq = HWGROUP(drive)->rq;
1033 unsigned short sectors_per_frame;
1036 sectors_per_frame = queue_hardsect_size(drive->queue) >> SECTOR_BITS;
1038 /* If the requested sector doesn't start on a cdrom block boundary,
1039 we must adjust the start of the transfer so that it does,
1040 and remember to skip the first few sectors.
1041 If the CURRENT_NR_SECTORS field is larger than the size
1042 of the buffer, it will mean that we're to skip a number
1043 of sectors equal to the amount by which CURRENT_NR_SECTORS
1044 is larger than the buffer size. */
1045 nskip = rq->sector & (sectors_per_frame - 1);
1047 /* Sanity check... */
1048 if (rq->current_nr_sectors != bio_cur_sectors(rq->bio) &&
1049 (rq->sector & (sectors_per_frame - 1))) {
1050 printk(KERN_ERR "%s: cdrom_start_read_continuation: buffer botch (%u)\n",
1051 drive->name, rq->current_nr_sectors);
1052 cdrom_end_request(drive, 0);
1055 rq->current_nr_sectors += nskip;
1058 /* Set up the command */
1059 rq->timeout = ATAPI_WAIT_PC;
1061 /* Send the command to the drive and return. */
1062 return cdrom_transfer_packet_command(drive, rq, &cdrom_read_intr);
1066 #define IDECD_SEEK_THRESHOLD (1000) /* 1000 blocks */
1067 #define IDECD_SEEK_TIMER (5 * WAIT_MIN_SLEEP) /* 100 ms */
1068 #define IDECD_SEEK_TIMEOUT (2 * WAIT_CMD) /* 20 sec */
1070 static ide_startstop_t cdrom_seek_intr (ide_drive_t *drive)
1072 struct cdrom_info *info = drive->driver_data;
1074 static int retry = 10;
1076 if (cdrom_decode_status(drive, 0, &stat))
1079 info->cd_flags |= IDE_CD_FLAG_SEEKING;
1081 if (retry && time_after(jiffies, info->start_seek + IDECD_SEEK_TIMER)) {
1084 * this condition is far too common, to bother
1087 /* printk("%s: disabled DSC seek overlap\n", drive->name);*/
1088 drive->dsc_overlap = 0;
1094 static ide_startstop_t cdrom_start_seek_continuation (ide_drive_t *drive)
1096 struct request *rq = HWGROUP(drive)->rq;
1097 sector_t frame = rq->sector;
1099 sector_div(frame, queue_hardsect_size(drive->queue) >> SECTOR_BITS);
1101 memset(rq->cmd, 0, sizeof(rq->cmd));
1102 rq->cmd[0] = GPCMD_SEEK;
1103 put_unaligned(cpu_to_be32(frame), (unsigned int *) &rq->cmd[2]);
1105 rq->timeout = ATAPI_WAIT_PC;
1106 return cdrom_transfer_packet_command(drive, rq, &cdrom_seek_intr);
1109 static ide_startstop_t cdrom_start_seek (ide_drive_t *drive, unsigned int block)
1111 struct cdrom_info *info = drive->driver_data;
1114 info->start_seek = jiffies;
1115 return cdrom_start_packet_command(drive, 0, cdrom_start_seek_continuation);
1118 /* Fix up a possibly partially-processed request so that we can
1119 start it over entirely, or even put it back on the request queue. */
1120 static void restore_request (struct request *rq)
1122 if (rq->buffer != bio_data(rq->bio)) {
1123 sector_t n = (rq->buffer - (char *) bio_data(rq->bio)) / SECTOR_SIZE;
1125 rq->buffer = bio_data(rq->bio);
1126 rq->nr_sectors += n;
1129 rq->hard_cur_sectors = rq->current_nr_sectors = bio_cur_sectors(rq->bio);
1130 rq->hard_nr_sectors = rq->nr_sectors;
1131 rq->hard_sector = rq->sector;
1132 rq->q->prep_rq_fn(rq->q, rq);
1136 * Start a read request from the CD-ROM.
1138 static ide_startstop_t cdrom_start_read (ide_drive_t *drive, unsigned int block)
1140 struct cdrom_info *info = drive->driver_data;
1141 struct request *rq = HWGROUP(drive)->rq;
1142 unsigned short sectors_per_frame;
1144 sectors_per_frame = queue_hardsect_size(drive->queue) >> SECTOR_BITS;
1146 /* We may be retrying this request after an error. Fix up
1147 any weirdness which might be present in the request packet. */
1148 restore_request(rq);
1150 /* Satisfy whatever we can of this request from our cached sector. */
1151 if (cdrom_read_from_buffer(drive))
1154 /* Clear the local sector buffer. */
1155 info->nsectors_buffered = 0;
1157 /* use dma, if possible. */
1158 info->dma = drive->using_dma;
1159 if ((rq->sector & (sectors_per_frame - 1)) ||
1160 (rq->nr_sectors & (sectors_per_frame - 1)))
1163 /* Start sending the read request to the drive. */
1164 return cdrom_start_packet_command(drive, 32768, cdrom_start_read_continuation);
1167 /****************************************************************************
1168 * Execute all other packet commands.
1171 /* Interrupt routine for packet command completion. */
1172 static ide_startstop_t cdrom_pc_intr (ide_drive_t *drive)
1174 struct request *rq = HWGROUP(drive)->rq;
1175 xfer_func_t *xferfunc = NULL;
1176 int stat, ireason, len, thislen, write;
1177 u8 lowcyl = 0, highcyl = 0;
1179 /* Check for errors. */
1180 if (cdrom_decode_status(drive, 0, &stat))
1183 /* Read the interrupt reason and the transfer length. */
1184 ireason = HWIF(drive)->INB(IDE_IREASON_REG) & 0x3;
1185 lowcyl = HWIF(drive)->INB(IDE_BCOUNTL_REG);
1186 highcyl = HWIF(drive)->INB(IDE_BCOUNTH_REG);
1188 len = lowcyl + (256 * highcyl);
1190 /* If DRQ is clear, the command has completed.
1191 Complain if we still have data left to transfer. */
1192 if ((stat & DRQ_STAT) == 0) {
1193 /* Some of the trailing request sense fields are optional, and
1194 some drives don't send them. Sigh. */
1195 if (rq->cmd[0] == GPCMD_REQUEST_SENSE &&
1197 rq->data_len <= 5) {
1198 while (rq->data_len > 0) {
1199 *(unsigned char *)rq->data++ = 0;
1204 if (rq->data_len == 0)
1205 cdrom_end_request(drive, 1);
1207 rq->cmd_flags |= REQ_FAILED;
1208 cdrom_end_request(drive, 0);
1213 /* Figure out how much data to transfer. */
1214 thislen = rq->data_len;
1220 xferfunc = HWIF(drive)->atapi_output_bytes;
1221 } else if (ireason == 2) {
1223 xferfunc = HWIF(drive)->atapi_input_bytes;
1228 printk(KERN_ERR "%s: confused, missing data\n",
1230 blk_dump_rq_flags(rq, write ? "cdrom_pc_intr, write"
1231 : "cdrom_pc_intr, read");
1234 /* Transfer the data. */
1235 xferfunc(drive, rq->data, thislen);
1237 /* Keep count of how much data we've moved. */
1239 rq->data += thislen;
1240 rq->data_len -= thislen;
1242 if (write && blk_sense_request(rq))
1243 rq->sense_len += thislen;
1245 printk (KERN_ERR "%s: cdrom_pc_intr: The drive "
1246 "appears confused (ireason = 0x%02x). "
1247 "Trying to recover by ending request.\n",
1248 drive->name, ireason);
1249 rq->cmd_flags |= REQ_FAILED;
1250 cdrom_end_request(drive, 0);
1255 * If we haven't moved enough data to satisfy the drive,
1259 ide_cd_pad_transfer(drive, xferfunc, len);
1261 /* Now we wait for another interrupt. */
1262 ide_set_handler(drive, &cdrom_pc_intr, ATAPI_WAIT_PC, cdrom_timer_expiry);
1266 static ide_startstop_t cdrom_do_pc_continuation (ide_drive_t *drive)
1268 struct request *rq = HWGROUP(drive)->rq;
1271 rq->timeout = ATAPI_WAIT_PC;
1273 /* Send the command to the drive and return. */
1274 return cdrom_transfer_packet_command(drive, rq, &cdrom_pc_intr);
1278 static ide_startstop_t cdrom_do_packet_command (ide_drive_t *drive)
1281 struct request *rq = HWGROUP(drive)->rq;
1282 struct cdrom_info *info = drive->driver_data;
1285 rq->cmd_flags &= ~REQ_FAILED;
1288 /* Start sending the command to the drive. */
1289 return cdrom_start_packet_command(drive, len, cdrom_do_pc_continuation);
1293 static int cdrom_queue_packet_command(ide_drive_t *drive, struct request *rq)
1295 struct request_sense sense;
1297 unsigned int flags = rq->cmd_flags;
1299 if (rq->sense == NULL)
1302 /* Start of retry loop. */
1305 unsigned long time = jiffies;
1306 rq->cmd_flags = flags;
1308 error = ide_do_drive_cmd(drive, rq, ide_wait);
1309 time = jiffies - time;
1311 /* FIXME: we should probably abort/retry or something
1312 * in case of failure */
1313 if (rq->cmd_flags & REQ_FAILED) {
1314 /* The request failed. Retry if it was due to a unit
1316 (usually means media was changed). */
1317 struct request_sense *reqbuf = rq->sense;
1319 if (reqbuf->sense_key == UNIT_ATTENTION)
1320 cdrom_saw_media_change(drive);
1321 else if (reqbuf->sense_key == NOT_READY &&
1322 reqbuf->asc == 4 && reqbuf->ascq != 4) {
1323 /* The drive is in the process of loading
1324 a disk. Retry, but wait a little to give
1325 the drive time to complete the load. */
1328 /* Otherwise, don't retry. */
1334 /* End of retry loop. */
1335 } while ((rq->cmd_flags & REQ_FAILED) && retries >= 0);
1337 /* Return an error if the command failed. */
1338 return (rq->cmd_flags & REQ_FAILED) ? -EIO : 0;
1344 static int cdrom_write_check_ireason(ide_drive_t *drive, int len, int ireason)
1346 /* Two notes about IDE interrupt reason here - 0 means that
1347 * the drive wants to receive data from us, 2 means that
1348 * the drive is expecting to transfer data to us.
1352 else if (ireason == 2) {
1353 ide_hwif_t *hwif = drive->hwif;
1355 /* Whoops... The drive wants to send data. */
1356 printk(KERN_ERR "%s: %s: wrong transfer direction!\n",
1357 drive->name, __FUNCTION__);
1359 ide_cd_pad_transfer(drive, hwif->atapi_input_bytes, len);
1361 /* Drive wants a command packet, or invalid ireason... */
1362 printk(KERN_ERR "%s: %s: bad interrupt reason 0x%02x\n",
1363 drive->name, __FUNCTION__, ireason);
1366 cdrom_end_request(drive, 0);
1371 * Called from blk_end_request_callback() after the data of the request
1372 * is completed and before the request is completed.
1373 * By returning value '1', blk_end_request_callback() returns immediately
1374 * without completing the request.
1376 static int cdrom_newpc_intr_dummy_cb(struct request *rq)
1382 * best way to deal with dma that is not sector aligned right now... note
1383 * that in this path we are not using ->data or ->buffer at all. this irs
1384 * can replace cdrom_pc_intr, cdrom_read_intr, and cdrom_write_intr in the
1387 static ide_startstop_t cdrom_newpc_intr(ide_drive_t *drive)
1389 struct cdrom_info *info = drive->driver_data;
1390 struct request *rq = HWGROUP(drive)->rq;
1391 int dma_error, dma, stat, ireason, len, thislen;
1393 xfer_func_t *xferfunc;
1394 unsigned long flags;
1396 /* Check for errors. */
1401 dma_error = HWIF(drive)->ide_dma_end(drive);
1403 printk(KERN_ERR "%s: DMA %s error\n", drive->name,
1404 rq_data_dir(rq) ? "write" : "read");
1409 if (cdrom_decode_status(drive, 0, &stat))
1413 * using dma, transfer is complete now
1417 return ide_error(drive, "dma error", stat);
1419 spin_lock_irqsave(&ide_lock, flags);
1420 if (__blk_end_request(rq, 0, rq->data_len))
1422 HWGROUP(drive)->rq = NULL;
1423 spin_unlock_irqrestore(&ide_lock, flags);
1429 * ok we fall to pio :/
1431 ireason = HWIF(drive)->INB(IDE_IREASON_REG) & 0x3;
1432 lowcyl = HWIF(drive)->INB(IDE_BCOUNTL_REG);
1433 highcyl = HWIF(drive)->INB(IDE_BCOUNTH_REG);
1435 len = lowcyl + (256 * highcyl);
1436 thislen = rq->data_len;
1441 * If DRQ is clear, the command has completed.
1443 if ((stat & DRQ_STAT) == 0) {
1444 spin_lock_irqsave(&ide_lock, flags);
1445 if (__blk_end_request(rq, 0, rq->data_len))
1447 HWGROUP(drive)->rq = NULL;
1448 spin_unlock_irqrestore(&ide_lock, flags);
1454 * check which way to transfer data
1456 if (rq_data_dir(rq) == WRITE) {
1460 if (cdrom_write_check_ireason(drive, len, ireason))
1463 xferfunc = HWIF(drive)->atapi_output_bytes;
1468 if (cdrom_read_check_ireason(drive, len, ireason))
1471 xferfunc = HWIF(drive)->atapi_input_bytes;
1477 while (thislen > 0) {
1478 int blen = blen = rq->data_len;
1479 char *ptr = rq->data;
1485 ptr = bio_data(rq->bio);
1486 blen = bio_iovec(rq->bio)->bv_len;
1490 printk(KERN_ERR "%s: confused, missing data\n", drive->name);
1497 xferfunc(drive, ptr, blen);
1501 rq->data_len -= blen;
1505 * The request can't be completed until DRQ is cleared.
1506 * So complete the data, but don't complete the request
1507 * using the dummy function for the callback feature
1508 * of blk_end_request_callback().
1510 blk_end_request_callback(rq, 0, blen,
1511 cdrom_newpc_intr_dummy_cb);
1520 ide_cd_pad_transfer(drive, xferfunc, len);
1522 BUG_ON(HWGROUP(drive)->handler != NULL);
1524 ide_set_handler(drive, cdrom_newpc_intr, rq->timeout, NULL);
1528 static ide_startstop_t cdrom_write_intr(ide_drive_t *drive)
1530 int stat, ireason, len, sectors_to_transfer, uptodate;
1531 struct cdrom_info *info = drive->driver_data;
1532 int dma_error = 0, dma = info->dma;
1533 u8 lowcyl = 0, highcyl = 0;
1535 struct request *rq = HWGROUP(drive)->rq;
1537 /* Check for errors. */
1540 dma_error = HWIF(drive)->ide_dma_end(drive);
1542 printk(KERN_ERR "%s: DMA write error\n", drive->name);
1547 if (cdrom_decode_status(drive, 0, &stat))
1551 * using dma, transfer is complete now
1555 return ide_error(drive, "dma error", stat);
1557 ide_end_request(drive, 1, rq->nr_sectors);
1561 /* Read the interrupt reason and the transfer length. */
1562 ireason = HWIF(drive)->INB(IDE_IREASON_REG) & 0x3;
1563 lowcyl = HWIF(drive)->INB(IDE_BCOUNTL_REG);
1564 highcyl = HWIF(drive)->INB(IDE_BCOUNTH_REG);
1566 len = lowcyl + (256 * highcyl);
1568 /* If DRQ is clear, the command has completed. */
1569 if ((stat & DRQ_STAT) == 0) {
1570 /* If we're not done writing, complain.
1571 * Otherwise, complete the command normally.
1574 if (rq->current_nr_sectors > 0) {
1575 printk(KERN_ERR "%s: %s: data underrun (%d blocks)\n",
1576 drive->name, __FUNCTION__,
1577 rq->current_nr_sectors);
1580 cdrom_end_request(drive, uptodate);
1584 /* Check that the drive is expecting to do the same thing we are. */
1585 if (cdrom_write_check_ireason(drive, len, ireason))
1588 sectors_to_transfer = len / SECTOR_SIZE;
1591 * now loop and write out the data
1593 while (sectors_to_transfer > 0) {
1596 if (!rq->current_nr_sectors) {
1597 printk(KERN_ERR "%s: %s: confused, missing data\n",
1598 drive->name, __FUNCTION__);
1603 * Figure out how many sectors we can transfer
1605 this_transfer = min_t(int, sectors_to_transfer, rq->current_nr_sectors);
1607 while (this_transfer > 0) {
1608 HWIF(drive)->atapi_output_bytes(drive, rq->buffer, SECTOR_SIZE);
1609 rq->buffer += SECTOR_SIZE;
1611 --rq->current_nr_sectors;
1614 --sectors_to_transfer;
1618 * current buffer complete, move on
1620 if (rq->current_nr_sectors == 0 && rq->nr_sectors)
1621 cdrom_end_request(drive, 1);
1624 /* re-arm handler */
1625 ide_set_handler(drive, &cdrom_write_intr, ATAPI_WAIT_PC, NULL);
1629 static ide_startstop_t cdrom_start_write_cont(ide_drive_t *drive)
1631 struct request *rq = HWGROUP(drive)->rq;
1633 #if 0 /* the immediate bit */
1634 rq->cmd[1] = 1 << 3;
1636 rq->timeout = ATAPI_WAIT_PC;
1638 return cdrom_transfer_packet_command(drive, rq, cdrom_write_intr);
1641 static ide_startstop_t cdrom_start_write(ide_drive_t *drive, struct request *rq)
1643 struct cdrom_info *info = drive->driver_data;
1644 struct gendisk *g = info->disk;
1645 unsigned short sectors_per_frame = queue_hardsect_size(drive->queue) >> SECTOR_BITS;
1648 * writes *must* be hardware frame aligned
1650 if ((rq->nr_sectors & (sectors_per_frame - 1)) ||
1651 (rq->sector & (sectors_per_frame - 1))) {
1652 cdrom_end_request(drive, 0);
1657 * disk has become write protected
1660 cdrom_end_request(drive, 0);
1664 info->nsectors_buffered = 0;
1666 /* use dma, if possible. we don't need to check more, since we
1667 * know that the transfer is always (at least!) frame aligned */
1668 info->dma = drive->using_dma ? 1 : 0;
1670 info->devinfo.media_written = 1;
1672 /* Start sending the write request to the drive. */
1673 return cdrom_start_packet_command(drive, 32768, cdrom_start_write_cont);
1676 static ide_startstop_t cdrom_do_newpc_cont(ide_drive_t *drive)
1678 struct request *rq = HWGROUP(drive)->rq;
1681 rq->timeout = ATAPI_WAIT_PC;
1683 return cdrom_transfer_packet_command(drive, rq, cdrom_newpc_intr);
1686 static ide_startstop_t cdrom_do_block_pc(ide_drive_t *drive, struct request *rq)
1688 struct cdrom_info *info = drive->driver_data;
1690 rq->cmd_flags |= REQ_QUIET;
1698 int mask = drive->queue->dma_alignment;
1699 unsigned long addr = (unsigned long) page_address(bio_page(rq->bio));
1701 info->dma = drive->using_dma;
1704 * check if dma is safe
1706 * NOTE! The "len" and "addr" checks should possibly have
1709 if ((rq->data_len & 15) || (addr & mask))
1713 /* Start sending the command to the drive. */
1714 return cdrom_start_packet_command(drive, rq->data_len, cdrom_do_newpc_cont);
1717 /****************************************************************************
1718 * cdrom driver request routine.
1720 static ide_startstop_t
1721 ide_do_rw_cdrom (ide_drive_t *drive, struct request *rq, sector_t block)
1723 ide_startstop_t action;
1724 struct cdrom_info *info = drive->driver_data;
1726 if (blk_fs_request(rq)) {
1727 if (info->cd_flags & IDE_CD_FLAG_SEEKING) {
1728 unsigned long elapsed = jiffies - info->start_seek;
1729 int stat = HWIF(drive)->INB(IDE_STATUS_REG);
1731 if ((stat & SEEK_STAT) != SEEK_STAT) {
1732 if (elapsed < IDECD_SEEK_TIMEOUT) {
1733 ide_stall_queue(drive, IDECD_SEEK_TIMER);
1736 printk (KERN_ERR "%s: DSC timeout\n", drive->name);
1738 info->cd_flags &= ~IDE_CD_FLAG_SEEKING;
1740 if ((rq_data_dir(rq) == READ) && IDE_LARGE_SEEK(info->last_block, block, IDECD_SEEK_THRESHOLD) && drive->dsc_overlap) {
1741 action = cdrom_start_seek(drive, block);
1743 if (rq_data_dir(rq) == READ)
1744 action = cdrom_start_read(drive, block);
1746 action = cdrom_start_write(drive, rq);
1748 info->last_block = block;
1750 } else if (rq->cmd_type == REQ_TYPE_SENSE ||
1751 rq->cmd_type == REQ_TYPE_ATA_PC) {
1752 return cdrom_do_packet_command(drive);
1753 } else if (blk_pc_request(rq)) {
1754 return cdrom_do_block_pc(drive, rq);
1755 } else if (blk_special_request(rq)) {
1757 * right now this can only be a reset...
1759 cdrom_end_request(drive, 1);
1763 blk_dump_rq_flags(rq, "ide-cd bad flags");
1764 cdrom_end_request(drive, 0);
1770 /****************************************************************************
1773 * Routines which queue packet commands take as a final argument a pointer
1774 * to a request_sense struct. If execution of the command results
1775 * in an error with a CHECK CONDITION status, this structure will be filled
1776 * with the results of the subsequent request sense command. The pointer
1777 * can also be NULL, in which case no sense information is returned.
1781 void msf_from_bcd (struct atapi_msf *msf)
1783 msf->minute = BCD2BIN(msf->minute);
1784 msf->second = BCD2BIN(msf->second);
1785 msf->frame = BCD2BIN(msf->frame);
1789 void lba_to_msf (int lba, byte *m, byte *s, byte *f)
1791 lba += CD_MSF_OFFSET;
1792 lba &= 0xffffff; /* negative lbas use only 24 bits */
1793 *m = lba / (CD_SECS * CD_FRAMES);
1794 lba %= (CD_SECS * CD_FRAMES);
1795 *s = lba / CD_FRAMES;
1796 *f = lba % CD_FRAMES;
1801 int msf_to_lba (byte m, byte s, byte f)
1803 return (((m * CD_SECS) + s) * CD_FRAMES + f) - CD_MSF_OFFSET;
1806 static int cdrom_check_status(ide_drive_t *drive, struct request_sense *sense)
1809 struct cdrom_info *info = drive->driver_data;
1810 struct cdrom_device_info *cdi = &info->devinfo;
1812 cdrom_prepare_request(drive, &req);
1815 req.cmd[0] = GPCMD_TEST_UNIT_READY;
1816 req.cmd_flags |= REQ_QUIET;
1819 * Sanyo 3 CD changer uses byte 7 of TEST_UNIT_READY to
1820 * switch CDs instead of supporting the LOAD_UNLOAD opcode.
1822 req.cmd[7] = cdi->sanyo_slot % 3;
1824 return cdrom_queue_packet_command(drive, &req);
1828 /* Lock the door if LOCKFLAG is nonzero; unlock it otherwise. */
1830 cdrom_lockdoor(ide_drive_t *drive, int lockflag, struct request_sense *sense)
1832 struct cdrom_info *cd = drive->driver_data;
1833 struct request_sense my_sense;
1840 /* If the drive cannot lock the door, just pretend. */
1841 if (cd->cd_flags & IDE_CD_FLAG_NO_DOORLOCK) {
1844 cdrom_prepare_request(drive, &req);
1846 req.cmd[0] = GPCMD_PREVENT_ALLOW_MEDIUM_REMOVAL;
1847 req.cmd[4] = lockflag ? 1 : 0;
1848 stat = cdrom_queue_packet_command(drive, &req);
1851 /* If we got an illegal field error, the drive
1852 probably cannot lock the door. */
1854 sense->sense_key == ILLEGAL_REQUEST &&
1855 (sense->asc == 0x24 || sense->asc == 0x20)) {
1856 printk (KERN_ERR "%s: door locking not supported\n",
1858 cd->cd_flags |= IDE_CD_FLAG_NO_DOORLOCK;
1862 /* no medium, that's alright. */
1863 if (stat != 0 && sense->sense_key == NOT_READY && sense->asc == 0x3a)
1868 cd->cd_flags |= IDE_CD_FLAG_DOOR_LOCKED;
1870 cd->cd_flags &= ~IDE_CD_FLAG_DOOR_LOCKED;
1877 /* Eject the disk if EJECTFLAG is 0.
1878 If EJECTFLAG is 1, try to reload the disk. */
1879 static int cdrom_eject(ide_drive_t *drive, int ejectflag,
1880 struct request_sense *sense)
1882 struct cdrom_info *cd = drive->driver_data;
1883 struct cdrom_device_info *cdi = &cd->devinfo;
1887 if ((cd->cd_flags & IDE_CD_FLAG_NO_EJECT) && !ejectflag)
1888 return -EDRIVE_CANT_DO_THIS;
1890 /* reload fails on some drives, if the tray is locked */
1891 if ((cd->cd_flags & IDE_CD_FLAG_DOOR_LOCKED) && ejectflag)
1894 cdrom_prepare_request(drive, &req);
1896 /* only tell drive to close tray if open, if it can do that */
1897 if (ejectflag && (cdi->mask & CDC_CLOSE_TRAY))
1901 req.cmd[0] = GPCMD_START_STOP_UNIT;
1902 req.cmd[4] = loej | (ejectflag != 0);
1903 return cdrom_queue_packet_command(drive, &req);
1906 static int cdrom_read_capacity(ide_drive_t *drive, unsigned long *capacity,
1907 unsigned long *sectors_per_frame,
1908 struct request_sense *sense)
1918 cdrom_prepare_request(drive, &req);
1921 req.cmd[0] = GPCMD_READ_CDVD_CAPACITY;
1922 req.data = (char *)&capbuf;
1923 req.data_len = sizeof(capbuf);
1924 req.cmd_flags |= REQ_QUIET;
1926 stat = cdrom_queue_packet_command(drive, &req);
1928 *capacity = 1 + be32_to_cpu(capbuf.lba);
1929 *sectors_per_frame =
1930 be32_to_cpu(capbuf.blocklen) >> SECTOR_BITS;
1936 static int cdrom_read_tocentry(ide_drive_t *drive, int trackno, int msf_flag,
1937 int format, char *buf, int buflen,
1938 struct request_sense *sense)
1942 cdrom_prepare_request(drive, &req);
1946 req.data_len = buflen;
1947 req.cmd_flags |= REQ_QUIET;
1948 req.cmd[0] = GPCMD_READ_TOC_PMA_ATIP;
1949 req.cmd[6] = trackno;
1950 req.cmd[7] = (buflen >> 8);
1951 req.cmd[8] = (buflen & 0xff);
1952 req.cmd[9] = (format << 6);
1957 return cdrom_queue_packet_command(drive, &req);
1961 /* Try to read the entire TOC for the disk into our internal buffer. */
1962 static int cdrom_read_toc(ide_drive_t *drive, struct request_sense *sense)
1964 int stat, ntracks, i;
1965 struct cdrom_info *info = drive->driver_data;
1966 struct cdrom_device_info *cdi = &info->devinfo;
1967 struct atapi_toc *toc = info->toc;
1969 struct atapi_toc_header hdr;
1970 struct atapi_toc_entry ent;
1973 unsigned long sectors_per_frame = SECTORS_PER_FRAME;
1976 /* Try to allocate space. */
1977 toc = kmalloc(sizeof(struct atapi_toc), GFP_KERNEL);
1979 printk (KERN_ERR "%s: No cdrom TOC buffer!\n", drive->name);
1985 /* Check to see if the existing data is still valid.
1986 If it is, just return. */
1987 (void) cdrom_check_status(drive, sense);
1989 if (info->cd_flags & IDE_CD_FLAG_TOC_VALID)
1992 /* Try to get the total cdrom capacity and sector size. */
1993 stat = cdrom_read_capacity(drive, &toc->capacity, §ors_per_frame,
1996 toc->capacity = 0x1fffff;
1998 set_capacity(info->disk, toc->capacity * sectors_per_frame);
1999 /* Save a private copy of te TOC capacity for error handling */
2000 drive->probed_capacity = toc->capacity * sectors_per_frame;
2002 blk_queue_hardsect_size(drive->queue,
2003 sectors_per_frame << SECTOR_BITS);
2005 /* First read just the header, so we know how long the TOC is. */
2006 stat = cdrom_read_tocentry(drive, 0, 1, 0, (char *) &toc->hdr,
2007 sizeof(struct atapi_toc_header), sense);
2011 if (info->cd_flags & IDE_CD_FLAG_TOCTRACKS_AS_BCD) {
2012 toc->hdr.first_track = BCD2BIN(toc->hdr.first_track);
2013 toc->hdr.last_track = BCD2BIN(toc->hdr.last_track);
2016 ntracks = toc->hdr.last_track - toc->hdr.first_track + 1;
2019 if (ntracks > MAX_TRACKS)
2020 ntracks = MAX_TRACKS;
2022 /* Now read the whole schmeer. */
2023 stat = cdrom_read_tocentry(drive, toc->hdr.first_track, 1, 0,
2025 sizeof(struct atapi_toc_header) +
2027 sizeof(struct atapi_toc_entry), sense);
2029 if (stat && toc->hdr.first_track > 1) {
2030 /* Cds with CDI tracks only don't have any TOC entries,
2031 despite of this the returned values are
2032 first_track == last_track = number of CDI tracks + 1,
2033 so that this case is indistinguishable from the same
2034 layout plus an additional audio track.
2035 If we get an error for the regular case, we assume
2036 a CDI without additional audio tracks. In this case
2037 the readable TOC is empty (CDI tracks are not included)
2038 and only holds the Leadout entry. Heiko Eißfeldt */
2040 stat = cdrom_read_tocentry(drive, CDROM_LEADOUT, 1, 0,
2042 sizeof(struct atapi_toc_header) +
2044 sizeof(struct atapi_toc_entry),
2049 if (info->cd_flags & IDE_CD_FLAG_TOCTRACKS_AS_BCD) {
2050 toc->hdr.first_track = (u8)BIN2BCD(CDROM_LEADOUT);
2051 toc->hdr.last_track = (u8)BIN2BCD(CDROM_LEADOUT);
2053 toc->hdr.first_track = CDROM_LEADOUT;
2054 toc->hdr.last_track = CDROM_LEADOUT;
2061 toc->hdr.toc_length = ntohs (toc->hdr.toc_length);
2063 if (info->cd_flags & IDE_CD_FLAG_TOCTRACKS_AS_BCD) {
2064 toc->hdr.first_track = BCD2BIN(toc->hdr.first_track);
2065 toc->hdr.last_track = BCD2BIN(toc->hdr.last_track);
2068 for (i = 0; i <= ntracks; i++) {
2069 if (info->cd_flags & IDE_CD_FLAG_TOCADDR_AS_BCD) {
2070 if (info->cd_flags & IDE_CD_FLAG_TOCTRACKS_AS_BCD)
2071 toc->ent[i].track = BCD2BIN(toc->ent[i].track);
2072 msf_from_bcd(&toc->ent[i].addr.msf);
2074 toc->ent[i].addr.lba = msf_to_lba (toc->ent[i].addr.msf.minute,
2075 toc->ent[i].addr.msf.second,
2076 toc->ent[i].addr.msf.frame);
2079 /* Read the multisession information. */
2080 if (toc->hdr.first_track != CDROM_LEADOUT) {
2081 /* Read the multisession information. */
2082 stat = cdrom_read_tocentry(drive, 0, 0, 1, (char *)&ms_tmp,
2083 sizeof(ms_tmp), sense);
2087 toc->last_session_lba = be32_to_cpu(ms_tmp.ent.addr.lba);
2089 ms_tmp.hdr.first_track = ms_tmp.hdr.last_track = CDROM_LEADOUT;
2090 toc->last_session_lba = msf_to_lba(0, 2, 0); /* 0m 2s 0f */
2093 if (info->cd_flags & IDE_CD_FLAG_TOCADDR_AS_BCD) {
2094 /* Re-read multisession information using MSF format */
2095 stat = cdrom_read_tocentry(drive, 0, 1, 1, (char *)&ms_tmp,
2096 sizeof(ms_tmp), sense);
2100 msf_from_bcd (&ms_tmp.ent.addr.msf);
2101 toc->last_session_lba = msf_to_lba(ms_tmp.ent.addr.msf.minute,
2102 ms_tmp.ent.addr.msf.second,
2103 ms_tmp.ent.addr.msf.frame);
2106 toc->xa_flag = (ms_tmp.hdr.first_track != ms_tmp.hdr.last_track);
2108 /* Now try to get the total cdrom capacity. */
2109 stat = cdrom_get_last_written(cdi, &last_written);
2110 if (!stat && (last_written > toc->capacity)) {
2111 toc->capacity = last_written;
2112 set_capacity(info->disk, toc->capacity * sectors_per_frame);
2113 drive->probed_capacity = toc->capacity * sectors_per_frame;
2116 /* Remember that we've read this stuff. */
2117 info->cd_flags |= IDE_CD_FLAG_TOC_VALID;
2123 static int cdrom_read_subchannel(ide_drive_t *drive, int format, char *buf,
2124 int buflen, struct request_sense *sense)
2128 cdrom_prepare_request(drive, &req);
2132 req.data_len = buflen;
2133 req.cmd[0] = GPCMD_READ_SUBCHANNEL;
2134 req.cmd[1] = 2; /* MSF addressing */
2135 req.cmd[2] = 0x40; /* request subQ data */
2136 req.cmd[3] = format;
2137 req.cmd[7] = (buflen >> 8);
2138 req.cmd[8] = (buflen & 0xff);
2139 return cdrom_queue_packet_command(drive, &req);
2142 /* ATAPI cdrom drives are free to select the speed you request or any slower
2143 rate :-( Requesting too fast a speed will _not_ produce an error. */
2144 static int cdrom_select_speed(ide_drive_t *drive, int speed,
2145 struct request_sense *sense)
2147 struct cdrom_info *cd = drive->driver_data;
2148 struct cdrom_device_info *cdi = &cd->devinfo;
2150 cdrom_prepare_request(drive, &req);
2154 speed = 0xffff; /* set to max */
2156 speed *= 177; /* Nx to kbytes/s */
2158 req.cmd[0] = GPCMD_SET_SPEED;
2159 /* Read Drive speed in kbytes/second MSB */
2160 req.cmd[2] = (speed >> 8) & 0xff;
2161 /* Read Drive speed in kbytes/second LSB */
2162 req.cmd[3] = speed & 0xff;
2163 if ((cdi->mask & (CDC_CD_R | CDC_CD_RW | CDC_DVD_R)) !=
2164 (CDC_CD_R | CDC_CD_RW | CDC_DVD_R)) {
2165 /* Write Drive speed in kbytes/second MSB */
2166 req.cmd[4] = (speed >> 8) & 0xff;
2167 /* Write Drive speed in kbytes/second LSB */
2168 req.cmd[5] = speed & 0xff;
2171 return cdrom_queue_packet_command(drive, &req);
2174 static int cdrom_play_audio(ide_drive_t *drive, int lba_start, int lba_end)
2176 struct request_sense sense;
2179 cdrom_prepare_request(drive, &req);
2182 req.cmd[0] = GPCMD_PLAY_AUDIO_MSF;
2183 lba_to_msf(lba_start, &req.cmd[3], &req.cmd[4], &req.cmd[5]);
2184 lba_to_msf(lba_end-1, &req.cmd[6], &req.cmd[7], &req.cmd[8]);
2186 return cdrom_queue_packet_command(drive, &req);
2189 static int cdrom_get_toc_entry(ide_drive_t *drive, int track,
2190 struct atapi_toc_entry **ent)
2192 struct cdrom_info *info = drive->driver_data;
2193 struct atapi_toc *toc = info->toc;
2197 * don't serve cached data, if the toc isn't valid
2199 if ((info->cd_flags & IDE_CD_FLAG_TOC_VALID) == 0)
2202 /* Check validity of requested track number. */
2203 ntracks = toc->hdr.last_track - toc->hdr.first_track + 1;
2204 if (toc->hdr.first_track == CDROM_LEADOUT) ntracks = 0;
2205 if (track == CDROM_LEADOUT)
2206 *ent = &toc->ent[ntracks];
2207 else if (track < toc->hdr.first_track ||
2208 track > toc->hdr.last_track)
2211 *ent = &toc->ent[track - toc->hdr.first_track];
2216 /* the generic packet interface to cdrom.c */
2217 static int ide_cdrom_packet(struct cdrom_device_info *cdi,
2218 struct packet_command *cgc)
2221 ide_drive_t *drive = cdi->handle;
2223 if (cgc->timeout <= 0)
2224 cgc->timeout = ATAPI_WAIT_PC;
2226 /* here we queue the commands from the uniform CD-ROM
2227 layer. the packet must be complete, as we do not
2229 cdrom_prepare_request(drive, &req);
2230 memcpy(req.cmd, cgc->cmd, CDROM_PACKET_SIZE);
2232 memset(cgc->sense, 0, sizeof(struct request_sense));
2233 req.data = cgc->buffer;
2234 req.data_len = cgc->buflen;
2235 req.timeout = cgc->timeout;
2238 req.cmd_flags |= REQ_QUIET;
2240 req.sense = cgc->sense;
2241 cgc->stat = cdrom_queue_packet_command(drive, &req);
2243 cgc->buflen -= req.data_len;
2248 int ide_cdrom_audio_ioctl (struct cdrom_device_info *cdi,
2249 unsigned int cmd, void *arg)
2252 ide_drive_t *drive = cdi->handle;
2253 struct cdrom_info *info = drive->driver_data;
2258 * emulate PLAY_AUDIO_TI command with PLAY_AUDIO_10, since
2259 * atapi doesn't support it
2261 case CDROMPLAYTRKIND: {
2262 unsigned long lba_start, lba_end;
2263 struct cdrom_ti *ti = arg;
2264 struct atapi_toc_entry *first_toc, *last_toc;
2266 stat = cdrom_get_toc_entry(drive, ti->cdti_trk0, &first_toc);
2270 stat = cdrom_get_toc_entry(drive, ti->cdti_trk1, &last_toc);
2274 if (ti->cdti_trk1 != CDROM_LEADOUT)
2276 lba_start = first_toc->addr.lba;
2277 lba_end = last_toc->addr.lba;
2279 if (lba_end <= lba_start)
2282 return cdrom_play_audio(drive, lba_start, lba_end);
2285 case CDROMREADTOCHDR: {
2286 struct cdrom_tochdr *tochdr = arg;
2287 struct atapi_toc *toc;
2289 /* Make sure our saved TOC is valid. */
2290 stat = cdrom_read_toc(drive, NULL);
2295 tochdr->cdth_trk0 = toc->hdr.first_track;
2296 tochdr->cdth_trk1 = toc->hdr.last_track;
2301 case CDROMREADTOCENTRY: {
2302 struct cdrom_tocentry *tocentry = arg;
2303 struct atapi_toc_entry *toce;
2305 stat = cdrom_get_toc_entry(drive, tocentry->cdte_track, &toce);
2309 tocentry->cdte_ctrl = toce->control;
2310 tocentry->cdte_adr = toce->adr;
2311 if (tocentry->cdte_format == CDROM_MSF) {
2312 lba_to_msf (toce->addr.lba,
2313 &tocentry->cdte_addr.msf.minute,
2314 &tocentry->cdte_addr.msf.second,
2315 &tocentry->cdte_addr.msf.frame);
2317 tocentry->cdte_addr.lba = toce->addr.lba;
2328 int ide_cdrom_reset (struct cdrom_device_info *cdi)
2330 ide_drive_t *drive = cdi->handle;
2331 struct cdrom_info *cd = drive->driver_data;
2332 struct request_sense sense;
2336 cdrom_prepare_request(drive, &req);
2337 req.cmd_type = REQ_TYPE_SPECIAL;
2338 req.cmd_flags = REQ_QUIET;
2339 ret = ide_do_drive_cmd(drive, &req, ide_wait);
2342 * A reset will unlock the door. If it was previously locked,
2345 if (cd->cd_flags & IDE_CD_FLAG_DOOR_LOCKED)
2346 (void) cdrom_lockdoor(drive, 1, &sense);
2353 int ide_cdrom_tray_move (struct cdrom_device_info *cdi, int position)
2355 ide_drive_t *drive = cdi->handle;
2356 struct request_sense sense;
2359 int stat = cdrom_lockdoor(drive, 0, &sense);
2364 return cdrom_eject(drive, !position, &sense);
2368 int ide_cdrom_lock_door (struct cdrom_device_info *cdi, int lock)
2370 ide_drive_t *drive = cdi->handle;
2371 return cdrom_lockdoor(drive, lock, NULL);
2374 static int ide_cdrom_get_capabilities(ide_drive_t *drive, u8 *buf)
2376 struct cdrom_info *info = drive->driver_data;
2377 struct cdrom_device_info *cdi = &info->devinfo;
2378 struct packet_command cgc;
2379 int stat, attempts = 3, size = ATAPI_CAPABILITIES_PAGE_SIZE;
2381 if ((info->cd_flags & IDE_CD_FLAG_FULL_CAPS_PAGE) == 0)
2382 size -= ATAPI_CAPABILITIES_PAGE_PAD_SIZE;
2384 init_cdrom_command(&cgc, buf, size, CGC_DATA_UNKNOWN);
2385 do { /* we seem to get stat=0x01,err=0x00 the first time (??) */
2386 stat = cdrom_mode_sense(cdi, &cgc, GPMODE_CAPABILITIES_PAGE, 0);
2389 } while (--attempts);
2393 static void ide_cdrom_update_speed(ide_drive_t *drive, u8 *buf)
2395 struct cdrom_info *cd = drive->driver_data;
2396 u16 curspeed, maxspeed;
2398 curspeed = *(u16 *)&buf[8 + 14];
2399 maxspeed = *(u16 *)&buf[8 + 8];
2401 if (cd->cd_flags & IDE_CD_FLAG_LE_SPEED_FIELDS) {
2402 curspeed = le16_to_cpu(curspeed);
2403 maxspeed = le16_to_cpu(maxspeed);
2405 curspeed = be16_to_cpu(curspeed);
2406 maxspeed = be16_to_cpu(maxspeed);
2409 cd->current_speed = (curspeed + (176/2)) / 176;
2410 cd->max_speed = (maxspeed + (176/2)) / 176;
2414 int ide_cdrom_select_speed (struct cdrom_device_info *cdi, int speed)
2416 ide_drive_t *drive = cdi->handle;
2417 struct cdrom_info *cd = drive->driver_data;
2418 struct request_sense sense;
2419 u8 buf[ATAPI_CAPABILITIES_PAGE_SIZE];
2422 if ((stat = cdrom_select_speed(drive, speed, &sense)) < 0)
2425 if (!ide_cdrom_get_capabilities(drive, buf)) {
2426 ide_cdrom_update_speed(drive, buf);
2427 cdi->speed = cd->current_speed;
2433 * add logic to try GET_EVENT command first to check for media and tray
2434 * status. this should be supported by newer cd-r/w and all DVD etc
2438 int ide_cdrom_drive_status (struct cdrom_device_info *cdi, int slot_nr)
2440 ide_drive_t *drive = cdi->handle;
2441 struct media_event_desc med;
2442 struct request_sense sense;
2445 if (slot_nr != CDSL_CURRENT)
2448 stat = cdrom_check_status(drive, &sense);
2449 if (!stat || sense.sense_key == UNIT_ATTENTION)
2452 if (!cdrom_get_media_event(cdi, &med)) {
2453 if (med.media_present)
2455 else if (med.door_open)
2456 return CDS_TRAY_OPEN;
2461 if (sense.sense_key == NOT_READY && sense.asc == 0x04 && sense.ascq == 0x04)
2465 * If not using Mt Fuji extended media tray reports,
2466 * just return TRAY_OPEN since ATAPI doesn't provide
2467 * any other way to detect this...
2469 if (sense.sense_key == NOT_READY) {
2470 if (sense.asc == 0x3a && sense.ascq == 1)
2473 return CDS_TRAY_OPEN;
2475 return CDS_DRIVE_NOT_READY;
2479 int ide_cdrom_get_last_session (struct cdrom_device_info *cdi,
2480 struct cdrom_multisession *ms_info)
2482 struct atapi_toc *toc;
2483 ide_drive_t *drive = cdi->handle;
2484 struct cdrom_info *info = drive->driver_data;
2485 struct request_sense sense;
2488 if ((info->cd_flags & IDE_CD_FLAG_TOC_VALID) == 0 || info->toc == NULL)
2489 if ((ret = cdrom_read_toc(drive, &sense)))
2493 ms_info->addr.lba = toc->last_session_lba;
2494 ms_info->xa_flag = toc->xa_flag;
2500 int ide_cdrom_get_mcn (struct cdrom_device_info *cdi,
2501 struct cdrom_mcn *mcn_info)
2505 ide_drive_t *drive = cdi->handle;
2508 if ((stat = cdrom_read_subchannel(drive, 2, mcnbuf, sizeof (mcnbuf), NULL)))
2511 memcpy (mcn_info->medium_catalog_number, mcnbuf+9,
2512 sizeof (mcn_info->medium_catalog_number)-1);
2513 mcn_info->medium_catalog_number[sizeof (mcn_info->medium_catalog_number)-1]
2521 /****************************************************************************
2522 * Other driver requests (open, close, check media change).
2526 int ide_cdrom_check_media_change_real (struct cdrom_device_info *cdi,
2529 ide_drive_t *drive = cdi->handle;
2530 struct cdrom_info *cd = drive->driver_data;
2533 if (slot_nr == CDSL_CURRENT) {
2534 (void) cdrom_check_status(drive, NULL);
2535 retval = (cd->cd_flags & IDE_CD_FLAG_MEDIA_CHANGED) ? 1 : 0;
2536 cd->cd_flags &= ~IDE_CD_FLAG_MEDIA_CHANGED;
2545 int ide_cdrom_open_real (struct cdrom_device_info *cdi, int purpose)
2551 * Close down the device. Invalidate all cached blocks.
2555 void ide_cdrom_release_real (struct cdrom_device_info *cdi)
2557 ide_drive_t *drive = cdi->handle;
2558 struct cdrom_info *cd = drive->driver_data;
2560 if (!cdi->use_count)
2561 cd->cd_flags &= ~IDE_CD_FLAG_TOC_VALID;
2564 #define IDE_CD_CAPABILITIES \
2565 (CDC_CLOSE_TRAY | CDC_OPEN_TRAY | CDC_LOCK | CDC_SELECT_SPEED | \
2566 CDC_SELECT_DISC | CDC_MULTI_SESSION | CDC_MCN | CDC_MEDIA_CHANGED | \
2567 CDC_PLAY_AUDIO | CDC_RESET | CDC_DRIVE_STATUS | CDC_CD_R | \
2568 CDC_CD_RW | CDC_DVD | CDC_DVD_R | CDC_DVD_RAM | CDC_GENERIC_PACKET | \
2569 CDC_MO_DRIVE | CDC_MRW | CDC_MRW_W | CDC_RAM)
2571 static struct cdrom_device_ops ide_cdrom_dops = {
2572 .open = ide_cdrom_open_real,
2573 .release = ide_cdrom_release_real,
2574 .drive_status = ide_cdrom_drive_status,
2575 .media_changed = ide_cdrom_check_media_change_real,
2576 .tray_move = ide_cdrom_tray_move,
2577 .lock_door = ide_cdrom_lock_door,
2578 .select_speed = ide_cdrom_select_speed,
2579 .get_last_session = ide_cdrom_get_last_session,
2580 .get_mcn = ide_cdrom_get_mcn,
2581 .reset = ide_cdrom_reset,
2582 .audio_ioctl = ide_cdrom_audio_ioctl,
2583 .capability = IDE_CD_CAPABILITIES,
2584 .generic_packet = ide_cdrom_packet,
2587 static int ide_cdrom_register (ide_drive_t *drive, int nslots)
2589 struct cdrom_info *info = drive->driver_data;
2590 struct cdrom_device_info *devinfo = &info->devinfo;
2592 devinfo->ops = &ide_cdrom_dops;
2593 devinfo->speed = info->current_speed;
2594 devinfo->capacity = nslots;
2595 devinfo->handle = drive;
2596 strcpy(devinfo->name, drive->name);
2598 if (info->cd_flags & IDE_CD_FLAG_NO_SPEED_SELECT)
2599 devinfo->mask |= CDC_SELECT_SPEED;
2601 devinfo->disk = info->disk;
2602 return register_cdrom(devinfo);
2606 int ide_cdrom_probe_capabilities (ide_drive_t *drive)
2608 struct cdrom_info *cd = drive->driver_data;
2609 struct cdrom_device_info *cdi = &cd->devinfo;
2610 u8 buf[ATAPI_CAPABILITIES_PAGE_SIZE];
2611 mechtype_t mechtype;
2614 cdi->mask = (CDC_CD_R | CDC_CD_RW | CDC_DVD | CDC_DVD_R |
2615 CDC_DVD_RAM | CDC_SELECT_DISC | CDC_PLAY_AUDIO |
2616 CDC_MO_DRIVE | CDC_RAM);
2618 if (drive->media == ide_optical) {
2619 cdi->mask &= ~(CDC_MO_DRIVE | CDC_RAM);
2620 printk(KERN_ERR "%s: ATAPI magneto-optical drive\n", drive->name);
2624 if (cd->cd_flags & IDE_CD_FLAG_PRE_ATAPI12) {
2625 cd->cd_flags &= ~IDE_CD_FLAG_NO_EJECT;
2626 cdi->mask &= ~CDC_PLAY_AUDIO;
2631 * we have to cheat a little here. the packet will eventually
2632 * be queued with ide_cdrom_packet(), which extracts the
2633 * drive from cdi->handle. Since this device hasn't been
2634 * registered with the Uniform layer yet, it can't do this.
2635 * Same goes for cdi->ops.
2637 cdi->handle = drive;
2638 cdi->ops = &ide_cdrom_dops;
2640 if (ide_cdrom_get_capabilities(drive, buf))
2643 if ((buf[8 + 6] & 0x01) == 0)
2644 cd->cd_flags |= IDE_CD_FLAG_NO_DOORLOCK;
2645 if (buf[8 + 6] & 0x08)
2646 cd->cd_flags &= ~IDE_CD_FLAG_NO_EJECT;
2647 if (buf[8 + 3] & 0x01)
2648 cdi->mask &= ~CDC_CD_R;
2649 if (buf[8 + 3] & 0x02)
2650 cdi->mask &= ~(CDC_CD_RW | CDC_RAM);
2651 if (buf[8 + 2] & 0x38)
2652 cdi->mask &= ~CDC_DVD;
2653 if (buf[8 + 3] & 0x20)
2654 cdi->mask &= ~(CDC_DVD_RAM | CDC_RAM);
2655 if (buf[8 + 3] & 0x10)
2656 cdi->mask &= ~CDC_DVD_R;
2657 if ((buf[8 + 4] & 0x01) || (cd->cd_flags & IDE_CD_FLAG_PLAY_AUDIO_OK))
2658 cdi->mask &= ~CDC_PLAY_AUDIO;
2660 mechtype = buf[8 + 6] >> 5;
2661 if (mechtype == mechtype_caddy || mechtype == mechtype_popup)
2662 cdi->mask |= CDC_CLOSE_TRAY;
2664 if (cdi->sanyo_slot > 0) {
2665 cdi->mask &= ~CDC_SELECT_DISC;
2667 } else if (mechtype == mechtype_individual_changer ||
2668 mechtype == mechtype_cartridge_changer) {
2669 nslots = cdrom_number_of_slots(cdi);
2671 cdi->mask &= ~CDC_SELECT_DISC;
2674 ide_cdrom_update_speed(drive, buf);
2676 printk(KERN_INFO "%s: ATAPI", drive->name);
2678 /* don't print speed if the drive reported 0 */
2680 printk(KERN_CONT " %dX", cd->max_speed);
2682 printk(KERN_CONT " %s", (cdi->mask & CDC_DVD) ? "CD-ROM" : "DVD-ROM");
2684 if ((cdi->mask & CDC_DVD_R) == 0 || (cdi->mask & CDC_DVD_RAM) == 0)
2685 printk(KERN_CONT " DVD%s%s",
2686 (cdi->mask & CDC_DVD_R) ? "" : "-R",
2687 (cdi->mask & CDC_DVD_RAM) ? "" : "-RAM");
2689 if ((cdi->mask & CDC_CD_R) == 0 || (cdi->mask & CDC_CD_RW) == 0)
2690 printk(KERN_CONT " CD%s%s",
2691 (cdi->mask & CDC_CD_R) ? "" : "-R",
2692 (cdi->mask & CDC_CD_RW) ? "" : "/RW");
2694 if ((cdi->mask & CDC_SELECT_DISC) == 0)
2695 printk(KERN_CONT " changer w/%d slots", nslots);
2697 printk(KERN_CONT " drive");
2699 printk(KERN_CONT ", %dkB Cache\n", be16_to_cpu(*(u16 *)&buf[8 + 12]));
2704 #ifdef CONFIG_IDE_PROC_FS
2705 static void ide_cdrom_add_settings(ide_drive_t *drive)
2707 ide_add_setting(drive, "dsc_overlap", SETTING_RW, TYPE_BYTE, 0, 1, 1, 1, &drive->dsc_overlap, NULL);
2710 static inline void ide_cdrom_add_settings(ide_drive_t *drive) { ; }
2714 * standard prep_rq_fn that builds 10 byte cmds
2716 static int ide_cdrom_prep_fs(struct request_queue *q, struct request *rq)
2718 int hard_sect = queue_hardsect_size(q);
2719 long block = (long)rq->hard_sector / (hard_sect >> 9);
2720 unsigned long blocks = rq->hard_nr_sectors / (hard_sect >> 9);
2722 memset(rq->cmd, 0, sizeof(rq->cmd));
2724 if (rq_data_dir(rq) == READ)
2725 rq->cmd[0] = GPCMD_READ_10;
2727 rq->cmd[0] = GPCMD_WRITE_10;
2732 rq->cmd[2] = (block >> 24) & 0xff;
2733 rq->cmd[3] = (block >> 16) & 0xff;
2734 rq->cmd[4] = (block >> 8) & 0xff;
2735 rq->cmd[5] = block & 0xff;
2738 * and transfer length
2740 rq->cmd[7] = (blocks >> 8) & 0xff;
2741 rq->cmd[8] = blocks & 0xff;
2747 * Most of the SCSI commands are supported directly by ATAPI devices.
2748 * This transform handles the few exceptions.
2750 static int ide_cdrom_prep_pc(struct request *rq)
2755 * Transform 6-byte read/write commands to the 10-byte version
2757 if (c[0] == READ_6 || c[0] == WRITE_6) {
2764 c[0] += (READ_10 - READ_6);
2770 * it's silly to pretend we understand 6-byte sense commands, just
2771 * reject with ILLEGAL_REQUEST and the caller should take the
2772 * appropriate action
2774 if (c[0] == MODE_SENSE || c[0] == MODE_SELECT) {
2775 rq->errors = ILLEGAL_REQUEST;
2776 return BLKPREP_KILL;
2782 static int ide_cdrom_prep_fn(struct request_queue *q, struct request *rq)
2784 if (blk_fs_request(rq))
2785 return ide_cdrom_prep_fs(q, rq);
2786 else if (blk_pc_request(rq))
2787 return ide_cdrom_prep_pc(rq);
2792 struct cd_list_entry {
2793 const char *id_model;
2794 const char *id_firmware;
2795 unsigned int cd_flags;
2798 static const struct cd_list_entry ide_cd_quirks_list[] = {
2799 /* Limit transfer size per interrupt. */
2800 { "SAMSUNG CD-ROM SCR-2430", NULL, IDE_CD_FLAG_LIMIT_NFRAMES },
2801 { "SAMSUNG CD-ROM SCR-2432", NULL, IDE_CD_FLAG_LIMIT_NFRAMES },
2802 /* SCR-3231 doesn't support the SET_CD_SPEED command. */
2803 { "SAMSUNG CD-ROM SCR-3231", NULL, IDE_CD_FLAG_NO_SPEED_SELECT },
2804 /* Old NEC260 (not R) was released before ATAPI 1.2 spec. */
2805 { "NEC CD-ROM DRIVE:260", "1.01", IDE_CD_FLAG_TOCADDR_AS_BCD |
2806 IDE_CD_FLAG_PRE_ATAPI12, },
2807 /* Vertos 300, some versions of this drive like to talk BCD. */
2808 { "V003S0DS", NULL, IDE_CD_FLAG_VERTOS_300_SSD, },
2809 /* Vertos 600 ESD. */
2810 { "V006E0DS", NULL, IDE_CD_FLAG_VERTOS_600_ESD, },
2812 * Sanyo 3 CD changer uses a non-standard command for CD changing
2813 * (by default standard ATAPI support for CD changers is used).
2815 { "CD-ROM CDR-C3 G", NULL, IDE_CD_FLAG_SANYO_3CD },
2816 { "CD-ROM CDR-C3G", NULL, IDE_CD_FLAG_SANYO_3CD },
2817 { "CD-ROM CDR_C36", NULL, IDE_CD_FLAG_SANYO_3CD },
2818 /* Stingray 8X CD-ROM. */
2819 { "STINGRAY 8422 IDE 8X CD-ROM 7-27-95", NULL, IDE_CD_FLAG_PRE_ATAPI12},
2821 * ACER 50X CD-ROM and WPI 32X CD-ROM require the full spec length
2822 * mode sense page capabilities size, but older drives break.
2824 { "ATAPI CD ROM DRIVE 50X MAX", NULL, IDE_CD_FLAG_FULL_CAPS_PAGE },
2825 { "WPI CDS-32X", NULL, IDE_CD_FLAG_FULL_CAPS_PAGE },
2826 /* ACER/AOpen 24X CD-ROM has the speed fields byte-swapped. */
2827 { "", "241N", IDE_CD_FLAG_LE_SPEED_FIELDS },
2829 * Some drives used by Apple don't advertise audio play
2830 * but they do support reading TOC & audio datas.
2832 { "MATSHITADVD-ROM SR-8187", NULL, IDE_CD_FLAG_PLAY_AUDIO_OK },
2833 { "MATSHITADVD-ROM SR-8186", NULL, IDE_CD_FLAG_PLAY_AUDIO_OK },
2834 { "MATSHITADVD-ROM SR-8176", NULL, IDE_CD_FLAG_PLAY_AUDIO_OK },
2835 { "MATSHITADVD-ROM SR-8174", NULL, IDE_CD_FLAG_PLAY_AUDIO_OK },
2839 static unsigned int ide_cd_flags(struct hd_driveid *id)
2841 const struct cd_list_entry *cle = ide_cd_quirks_list;
2843 while (cle->id_model) {
2844 if (strcmp(cle->id_model, id->model) == 0 &&
2845 (cle->id_firmware == NULL ||
2846 strstr(id->fw_rev, cle->id_firmware)))
2847 return cle->cd_flags;
2855 int ide_cdrom_setup (ide_drive_t *drive)
2857 struct cdrom_info *cd = drive->driver_data;
2858 struct cdrom_device_info *cdi = &cd->devinfo;
2859 struct hd_driveid *id = drive->id;
2862 blk_queue_prep_rq(drive->queue, ide_cdrom_prep_fn);
2863 blk_queue_dma_alignment(drive->queue, 31);
2864 drive->queue->unplug_delay = (1 * HZ) / 1000;
2865 if (!drive->queue->unplug_delay)
2866 drive->queue->unplug_delay = 1;
2868 drive->special.all = 0;
2870 cd->cd_flags = IDE_CD_FLAG_MEDIA_CHANGED | IDE_CD_FLAG_NO_EJECT |
2873 if ((id->config & 0x0060) == 0x20)
2874 cd->cd_flags |= IDE_CD_FLAG_DRQ_INTERRUPT;
2876 if ((cd->cd_flags & IDE_CD_FLAG_VERTOS_300_SSD) &&
2877 id->fw_rev[4] == '1' && id->fw_rev[6] <= '2')
2878 cd->cd_flags |= (IDE_CD_FLAG_TOCTRACKS_AS_BCD |
2879 IDE_CD_FLAG_TOCADDR_AS_BCD);
2880 else if ((cd->cd_flags & IDE_CD_FLAG_VERTOS_600_ESD) &&
2881 id->fw_rev[4] == '1' && id->fw_rev[6] <= '2')
2882 cd->cd_flags |= IDE_CD_FLAG_TOCTRACKS_AS_BCD;
2883 else if (cd->cd_flags & IDE_CD_FLAG_SANYO_3CD)
2884 cdi->sanyo_slot = 3; /* 3 => use CD in slot 0 */
2886 nslots = ide_cdrom_probe_capabilities (drive);
2889 * set correct block size
2891 blk_queue_hardsect_size(drive->queue, CD_FRAMESIZE);
2893 if (drive->autotune == IDE_TUNE_DEFAULT ||
2894 drive->autotune == IDE_TUNE_AUTO)
2895 drive->dsc_overlap = (drive->next != drive);
2897 if (ide_cdrom_register(drive, nslots)) {
2898 printk (KERN_ERR "%s: ide_cdrom_setup failed to register device with the cdrom driver.\n", drive->name);
2899 cd->devinfo.handle = NULL;
2902 ide_cdrom_add_settings(drive);
2906 #ifdef CONFIG_IDE_PROC_FS
2908 sector_t ide_cdrom_capacity (ide_drive_t *drive)
2910 unsigned long capacity, sectors_per_frame;
2912 if (cdrom_read_capacity(drive, &capacity, §ors_per_frame, NULL))
2915 return capacity * sectors_per_frame;
2919 static void ide_cd_remove(ide_drive_t *drive)
2921 struct cdrom_info *info = drive->driver_data;
2923 ide_proc_unregister_driver(drive, info->driver);
2925 del_gendisk(info->disk);
2930 static void ide_cd_release(struct kref *kref)
2932 struct cdrom_info *info = to_ide_cd(kref);
2933 struct cdrom_device_info *devinfo = &info->devinfo;
2934 ide_drive_t *drive = info->drive;
2935 struct gendisk *g = info->disk;
2937 kfree(info->buffer);
2939 if (devinfo->handle == drive && unregister_cdrom(devinfo))
2940 printk(KERN_ERR "%s: %s failed to unregister device from the cdrom "
2941 "driver.\n", __FUNCTION__, drive->name);
2942 drive->dsc_overlap = 0;
2943 drive->driver_data = NULL;
2944 blk_queue_prep_rq(drive->queue, NULL);
2945 g->private_data = NULL;
2950 static int ide_cd_probe(ide_drive_t *);
2952 #ifdef CONFIG_IDE_PROC_FS
2953 static int proc_idecd_read_capacity
2954 (char *page, char **start, off_t off, int count, int *eof, void *data)
2956 ide_drive_t *drive = data;
2959 len = sprintf(page,"%llu\n", (long long)ide_cdrom_capacity(drive));
2960 PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
2963 static ide_proc_entry_t idecd_proc[] = {
2964 { "capacity", S_IFREG|S_IRUGO, proc_idecd_read_capacity, NULL },
2965 { NULL, 0, NULL, NULL }
2969 static ide_driver_t ide_cdrom_driver = {
2971 .owner = THIS_MODULE,
2972 .name = "ide-cdrom",
2973 .bus = &ide_bus_type,
2975 .probe = ide_cd_probe,
2976 .remove = ide_cd_remove,
2977 .version = IDECD_VERSION,
2979 .supports_dsc_overlap = 1,
2980 .do_request = ide_do_rw_cdrom,
2981 .end_request = ide_end_request,
2982 .error = __ide_error,
2983 .abort = __ide_abort,
2984 #ifdef CONFIG_IDE_PROC_FS
2989 static int idecd_open(struct inode * inode, struct file * file)
2991 struct gendisk *disk = inode->i_bdev->bd_disk;
2992 struct cdrom_info *info;
2995 if (!(info = ide_cd_get(disk)))
2999 info->buffer = kmalloc(SECTOR_BUFFER_SIZE, GFP_KERNEL|__GFP_REPEAT);
3002 rc = cdrom_open(&info->devinfo, inode, file);
3010 static int idecd_release(struct inode * inode, struct file * file)
3012 struct gendisk *disk = inode->i_bdev->bd_disk;
3013 struct cdrom_info *info = ide_cd_g(disk);
3015 cdrom_release (&info->devinfo, file);
3022 static int idecd_set_spindown(struct cdrom_device_info *cdi, unsigned long arg)
3024 struct packet_command cgc;
3029 if (copy_from_user(&spindown, (void __user *)arg, sizeof(char)))
3032 init_cdrom_command(&cgc, buffer, sizeof(buffer), CGC_DATA_UNKNOWN);
3034 stat = cdrom_mode_sense(cdi, &cgc, GPMODE_CDROM_PAGE, 0);
3038 buffer[11] = (buffer[11] & 0xf0) | (spindown & 0x0f);
3039 return cdrom_mode_select(cdi, &cgc);
3042 static int idecd_get_spindown(struct cdrom_device_info *cdi, unsigned long arg)
3044 struct packet_command cgc;
3049 init_cdrom_command(&cgc, buffer, sizeof(buffer), CGC_DATA_UNKNOWN);
3051 stat = cdrom_mode_sense(cdi, &cgc, GPMODE_CDROM_PAGE, 0);
3055 spindown = buffer[11] & 0x0f;
3056 if (copy_to_user((void __user *)arg, &spindown, sizeof (char)))
3061 static int idecd_ioctl (struct inode *inode, struct file *file,
3062 unsigned int cmd, unsigned long arg)
3064 struct block_device *bdev = inode->i_bdev;
3065 struct cdrom_info *info = ide_cd_g(bdev->bd_disk);
3069 case CDROMSETSPINDOWN:
3070 return idecd_set_spindown(&info->devinfo, arg);
3071 case CDROMGETSPINDOWN:
3072 return idecd_get_spindown(&info->devinfo, arg);
3077 err = generic_ide_ioctl(info->drive, file, bdev, cmd, arg);
3079 err = cdrom_ioctl(file, &info->devinfo, inode, cmd, arg);
3084 static int idecd_media_changed(struct gendisk *disk)
3086 struct cdrom_info *info = ide_cd_g(disk);
3087 return cdrom_media_changed(&info->devinfo);
3090 static int idecd_revalidate_disk(struct gendisk *disk)
3092 struct cdrom_info *info = ide_cd_g(disk);
3093 struct request_sense sense;
3094 cdrom_read_toc(info->drive, &sense);
3098 static struct block_device_operations idecd_ops = {
3099 .owner = THIS_MODULE,
3101 .release = idecd_release,
3102 .ioctl = idecd_ioctl,
3103 .media_changed = idecd_media_changed,
3104 .revalidate_disk= idecd_revalidate_disk
3108 static char *ignore = NULL;
3110 module_param(ignore, charp, 0400);
3111 MODULE_DESCRIPTION("ATAPI CD-ROM Driver");
3113 static int ide_cd_probe(ide_drive_t *drive)
3115 struct cdrom_info *info;
3117 struct request_sense sense;
3119 if (!strstr("ide-cdrom", drive->driver_req))
3121 if (!drive->present)
3123 if (drive->media != ide_cdrom && drive->media != ide_optical)
3125 /* skip drives that we were told to ignore */
3126 if (ignore != NULL) {
3127 if (strstr(ignore, drive->name)) {
3128 printk(KERN_INFO "ide-cd: ignoring drive %s\n", drive->name);
3133 printk(KERN_INFO "ide-cd: passing drive %s to ide-scsi emulation.\n", drive->name);
3136 info = kzalloc(sizeof(struct cdrom_info), GFP_KERNEL);
3138 printk(KERN_ERR "%s: Can't allocate a cdrom structure\n", drive->name);
3142 g = alloc_disk(1 << PARTN_BITS);
3146 ide_init_disk(g, drive);
3148 ide_proc_register_driver(drive, &ide_cdrom_driver);
3150 kref_init(&info->kref);
3152 info->drive = drive;
3153 info->driver = &ide_cdrom_driver;
3156 g->private_data = &info->driver;
3158 drive->driver_data = info;
3161 g->driverfs_dev = &drive->gendev;
3162 g->flags = GENHD_FL_CD | GENHD_FL_REMOVABLE;
3163 if (ide_cdrom_setup(drive)) {
3164 ide_proc_unregister_driver(drive, &ide_cdrom_driver);
3165 ide_cd_release(&info->kref);
3169 cdrom_read_toc(drive, &sense);
3170 g->fops = &idecd_ops;
3171 g->flags |= GENHD_FL_REMOVABLE;
3181 static void __exit ide_cdrom_exit(void)
3183 driver_unregister(&ide_cdrom_driver.gen_driver);
3186 static int __init ide_cdrom_init(void)
3188 return driver_register(&ide_cdrom_driver.gen_driver);
3191 MODULE_ALIAS("ide:*m-cdrom*");
3192 module_init(ide_cdrom_init);
3193 module_exit(ide_cdrom_exit);
3194 MODULE_LICENSE("GPL");