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 * ----------------------------------
32 * 1.00 Oct 31, 1994 -- Initial version.
33 * 1.01 Nov 2, 1994 -- Fixed problem with starting request in
35 * 1.03 Nov 25, 1994 -- leaving unmask_intr[] as a user-setting (as for disks)
36 * (from mlord) -- minor changes to cdrom_setup()
37 * -- renamed ide_dev_s to ide_drive_t, enable irq on command
38 * 2.00 Nov 27, 1994 -- Generalize packet command interface;
40 * 2.01 Dec 3, 1994 -- Rework packet command interface to handle devices
41 * which send an interrupt when ready for a command.
42 * 2.02 Dec 11, 1994 -- Cache the TOC in the driver.
43 * Don't use SCMD_PLAYAUDIO_TI; it's not included
44 * in the current version of ATAPI.
45 * Try to use LBA instead of track or MSF addressing
47 * Don't wait for READY_STAT.
48 * 2.03 Jan 10, 1995 -- Rewrite block read routines to handle block sizes
49 * other than 2k and to move multiple sectors in a
51 * 2.04 Apr 21, 1995 -- Add work-around for Creative Labs CD220E drives.
52 * Thanks to Nick Saw <cwsaw@pts7.pts.mot.com> for
53 * help in figuring this out. Ditto for Acer and
54 * Aztech drives, which seem to have the same problem.
55 * 2.04b May 30, 1995 -- Fix to match changes in ide.c version 3.16 -ml
56 * 2.05 Jun 8, 1995 -- Don't attempt to retry after an illegal request
57 * or data protect error.
58 * Use HWIF and DEV_HWIF macros as in ide.c.
59 * Always try to do a request_sense after
61 * Include an option to give textual descriptions
63 * Fix a bug in handling the sector cache which
64 * showed up if the drive returned data in 512 byte
65 * blocks (like Pioneer drives). Thanks to
66 * Richard Hirst <srh@gpt.co.uk> for diagnosing this.
67 * Properly supply the page number field in the
68 * MODE_SELECT command.
69 * PLAYAUDIO12 is broken on the Aztech; work around it.
70 * 2.05x Aug 11, 1995 -- lots of data structure renaming/restructuring in ide.c
71 * (my apologies to Scott, but now ide-cd.c is independent)
72 * 3.00 Aug 22, 1995 -- Implement CDROMMULTISESSION ioctl.
73 * Implement CDROMREADAUDIO ioctl (UNTESTED).
74 * Use input_ide_data() and output_ide_data().
76 * Fix usage count leak in cdrom_open, which happened
77 * when a read-write mount was attempted.
78 * Try to load the disk on open.
79 * Implement CDROMEJECT_SW ioctl (off by default).
80 * Read total cdrom capacity during open.
81 * Rearrange logic in cdrom_decode_status. Issue
82 * request sense commands for failed packet commands
83 * from here instead of from cdrom_queue_packet_command.
84 * Fix a race condition in retrieving error information.
85 * Suppress printing normal unit attention errors and
86 * some drive not ready errors.
87 * Implement CDROMVOLREAD ioctl.
88 * Implement CDROMREADMODE1/2 ioctls.
89 * Fix race condition in setting up interrupt handlers
90 * when the `serialize' option is used.
91 * 3.01 Sep 2, 1995 -- Fix ordering of reenabling interrupts in
92 * cdrom_queue_request.
93 * Another try at using ide_[input,output]_data.
94 * 3.02 Sep 16, 1995 -- Stick total disk capacity in partition table as well.
95 * Make VERBOSE_IDE_CD_ERRORS dump failed command again.
96 * Dump out more information for ILLEGAL REQUEST errs.
97 * Fix handling of errors occurring before the
98 * packet command is transferred.
99 * Fix transfers with odd bytelengths.
100 * 3.03 Oct 27, 1995 -- Some Creative drives have an id of just `CD'.
101 * `DCI-2S10' drives are broken too.
102 * 3.04 Nov 20, 1995 -- So are Vertos drives.
103 * 3.05 Dec 1, 1995 -- Changes to go with overhaul of ide.c and ide-tape.c
104 * 3.06 Dec 16, 1995 -- Add support needed for partitions.
105 * More workarounds for Vertos bugs (based on patches
106 * from Holger Dietze <dietze@aix520.informatik.uni-leipzig.de>).
107 * Try to eliminate byteorder assumptions.
108 * Use atapi_cdrom_subchnl struct definition.
109 * Add STANDARD_ATAPI compilation option.
110 * 3.07 Jan 29, 1996 -- More twiddling for broken drives: Sony 55D,
112 * Add NO_DOOR_LOCKING configuration option.
113 * Handle drive_cmd requests w/NULL args (for hdparm -t).
114 * Work around sporadic Sony55e audio play problem.
115 * 3.07a Feb 11, 1996 -- check drive->id for NULL before dereferencing, to fix
116 * problem with "hde=cdrom" with no drive present. -ml
117 * 3.08 Mar 6, 1996 -- More Vertos workarounds.
118 * 3.09 Apr 5, 1996 -- Add CDROMCLOSETRAY ioctl.
119 * Switch to using MSF addressing for audio commands.
120 * Reformat to match kernel tabbing style.
121 * Add CDROM_GET_UPC ioctl.
122 * 3.10 Apr 10, 1996 -- Fix compilation error with STANDARD_ATAPI.
123 * 3.11 Apr 29, 1996 -- Patch from Heiko Eißfeldt <heiko@colossus.escape.de>
124 * to remove redundant verify_area calls.
125 * 3.12 May 7, 1996 -- Rudimentary changer support. Based on patches
126 * from Gerhard Zuber <zuber@berlin.snafu.de>.
127 * Let open succeed even if there's no loaded disc.
128 * 3.13 May 19, 1996 -- Fixes for changer code.
129 * 3.14 May 29, 1996 -- Add work-around for Vertos 600.
130 * (From Hennus Bergman <hennus@sky.ow.nl>.)
131 * 3.15 July 2, 1996 -- Added support for Sanyo 3 CD changers
132 * from Ben Galliart <bgallia@luc.edu> with
133 * special help from Jeff Lightfoot
135 * 3.15a July 9, 1996 -- Improved Sanyo 3 CD changer identification
136 * 3.16 Jul 28, 1996 -- Fix from Gadi to reduce kernel stack usage for ioctl.
137 * 3.17 Sep 17, 1996 -- Tweak audio reads for some drives.
138 * Start changing CDROMLOADFROMSLOT to CDROM_SELECT_DISC.
139 * 3.18 Oct 31, 1996 -- Added module and DMA support.
141 * 4.00 Nov 5, 1996 -- New ide-cd maintainer,
142 * Erik B. Andersen <andersee@debian.org>
143 * -- Newer Creative drives don't always set the error
144 * register correctly. Make sure we see media changes
146 * -- Integrate with generic cdrom driver.
147 * -- CDROMGETSPINDOWN and CDROMSETSPINDOWN ioctls, based on
148 * a patch from Ciro Cattuto <>.
149 * -- Call set_device_ro.
150 * -- Implement CDROMMECHANISMSTATUS and CDROMSLOTTABLE
151 * ioctls, based on patch by Erik Andersen
152 * -- Add some probes of drive capability during setup.
154 * 4.01 Nov 11, 1996 -- Split into ide-cd.c and ide-cd.h
155 * -- Removed CDROMMECHANISMSTATUS and CDROMSLOTTABLE
156 * ioctls in favor of a generalized approach
157 * using the generic cdrom driver.
158 * -- Fully integrated with the 2.1.X kernel.
159 * -- Other stuff that I forgot (lots of changes)
161 * 4.02 Dec 01, 1996 -- Applied patch from Gadi Oxman <gadio@netvision.net.il>
162 * to fix the drive door locking problems.
164 * 4.03 Dec 04, 1996 -- Added DSC overlap support.
165 * 4.04 Dec 29, 1996 -- Added CDROMREADRAW ioclt based on patch
166 * by Ales Makarov (xmakarov@sun.felk.cvut.cz)
168 * 4.05 Nov 20, 1997 -- Modified to print more drive info on init
169 * Minor other changes
170 * Fix errors on CDROMSTOP (If you have a "Dolphin",
171 * you must define IHAVEADOLPHIN)
172 * Added identifier so new Sanyo CD-changer works
173 * Better detection if door locking isn't supported
175 * 4.06 Dec 17, 1997 -- fixed endless "tray open" messages -ml
176 * 4.07 Dec 17, 1997 -- fallback to set pc->stat on "tray open"
177 * 4.08 Dec 18, 1997 -- spew less noise when tray is empty
178 * -- fix speed display for ACER 24X, 18X
179 * 4.09 Jan 04, 1998 -- fix handling of the last block so we return
180 * an end of file instead of an I/O error (Gadi)
181 * 4.10 Jan 24, 1998 -- fixed a bug so now changers can change to a new
182 * slot when there is no disc in the current slot.
183 * -- Fixed a memory leak where info->changer_info was
184 * malloc'ed but never free'd when closing the device.
185 * -- Cleaned up the global namespace a bit by making more
186 * functions static that should already have been.
187 * 4.11 Mar 12, 1998 -- Added support for the CDROM_SELECT_SPEED ioctl
188 * based on a patch for 2.0.33 by Jelle Foks
189 * <jelle@scintilla.utwente.nl>, a patch for 2.0.33
190 * by Toni Giorgino <toni@pcape2.pi.infn.it>, the SCSI
191 * version, and my own efforts. -erik
192 * -- Fixed a stupid bug which egcs was kind enough to
193 * inform me of where "Illegal mode for this track"
194 * was never returned due to a comparison on data
195 * types of limited range.
196 * 4.12 Mar 29, 1998 -- Fixed bug in CDROM_SELECT_SPEED so write speed is
197 * now set ionly for CD-R and CD-RW drives. I had
198 * removed this support because it produced errors.
199 * It produced errors _only_ for non-writers. duh.
200 * 4.13 May 05, 1998 -- Suppress useless "in progress of becoming ready"
201 * messages, since this is not an error.
202 * -- Change error messages to be const
203 * -- Remove a "\t" which looks ugly in the syslogs
204 * 4.14 July 17, 1998 -- Change to pointing to .ps version of ATAPI spec
205 * since the .pdf version doesn't seem to work...
206 * -- Updated the TODO list to something more current.
208 * 4.15 Aug 25, 1998 -- Updated ide-cd.h to respect mechine endianess,
209 * patch thanks to "Eddie C. Dost" <ecd@skynet.be>
211 * 4.50 Oct 19, 1998 -- New maintainers!
212 * Jens Axboe <axboe@image.dk>
213 * Chris Zwilling <chris@cloudnet.com>
215 * 4.51 Dec 23, 1998 -- Jens Axboe <axboe@image.dk>
216 * - ide_cdrom_reset enabled since the ide subsystem
217 * handles resets fine now. <axboe@image.dk>
218 * - Transfer size fix for Samsung CD-ROMs, thanks to
219 * "Ville Hallik" <ville.hallik@mail.ee>.
220 * - other minor stuff.
222 * 4.52 Jan 19, 1999 -- Jens Axboe <axboe@image.dk>
223 * - Detect DVD-ROM/RAM drives
225 * 4.53 Feb 22, 1999 - Include other model Samsung and one Goldstar
226 * drive in transfer size limit.
227 * - Fix the I/O error when doing eject without a medium
228 * loaded on some drives.
229 * - CDROMREADMODE2 is now implemented through
230 * CDROMREADRAW, since many drives don't support
231 * MODE2 (even though ATAPI 2.6 says they must).
232 * - Added ignore parameter to ide-cd (as a module), eg
233 * insmod ide-cd ignore='hda hdb'
234 * Useful when using ide-cd in conjunction with
235 * ide-scsi. TODO: non-modular way of doing the
238 * 4.54 Aug 5, 1999 - Support for MMC2 class commands through the generic
239 * packet interface to cdrom.c.
240 * - Unified audio ioctl support, most of it.
241 * - cleaned up various deprecated verify_area().
242 * - Added ide_cdrom_packet() as the interface for
243 * the Uniform generic_packet().
244 * - bunch of other stuff, will fill in logs later.
245 * - report 1 slot for non-changers, like the other
246 * cd-rom drivers. don't report select disc for
247 * non-changers as well.
248 * - mask out audio playing, if the device can't do it.
250 * 4.55 Sep 1, 1999 - Eliminated the rest of the audio ioctls, except
251 * for CDROMREADTOC[ENTRY|HEADER]. Some of the drivers
252 * use this independently of the actual audio handling.
253 * They will disappear later when I get the time to
255 * - Minimize the TOC reading - only do it when we
256 * know a media change has occurred.
257 * - Moved all the CDROMREADx ioctls to the Uniform layer.
258 * - Heiko Eißfeldt <heiko@colossus.escape.de> supplied
259 * some fixes for CDI.
260 * - CD-ROM leaving door locked fix from Andries
261 * Brouwer <Andries.Brouwer@cwi.nl>
262 * - Erik Andersen <andersen@xmission.com> unified
263 * commands across the various drivers and how
264 * sense errors are handled.
266 * 4.56 Sep 12, 1999 - Removed changer support - it is now in the
268 * - Added partition based multisession handling.
269 * - Mode sense and mode select moved to the
271 * - Fixed a problem with WPI CDS-32X drive - it
272 * failed the capabilities
274 * 4.57 Apr 7, 2000 - Fixed sense reporting.
275 * - Fixed possible oops in ide_cdrom_get_last_session()
276 * - Fix locking mania and make ide_cdrom_reset relock
277 * - Stop spewing errors to log when magicdev polls with
278 * TEST_UNIT_READY on some drives.
279 * - Various fixes from Tobias Ringstrom:
280 * tray if it was locked prior to the reset.
281 * - cdrom_read_capacity returns one frame too little.
282 * - Fix real capacity reporting.
284 * 4.58 May 1, 2000 - Clean up ACER50 stuff.
285 * - Fix small problem with ide_cdrom_capacity
287 * 4.59 Aug 11, 2000 - Fix changer problem in cdrom_read_toc, we weren't
288 * correctly sensing a disc change.
289 * - Rearranged some code
290 * - Use extended sense on drives that support it for
291 * correctly reporting tray status -- from
292 * Michael D Johnson <johnsom@orst.edu>
293 * 4.60 Dec 17, 2003 - Add mt rainier support
294 * - Bump timeout for packet commands, matches sr
296 * 4.61 Jan 22, 2004 - support hardware sector sizes other than 2kB,
297 * Pascal Schmidt <der.eremit@email.de>
299 *************************************************************************/
301 #define IDECD_VERSION "4.61"
303 #include <linux/module.h>
304 #include <linux/types.h>
305 #include <linux/kernel.h>
306 #include <linux/delay.h>
307 #include <linux/timer.h>
308 #include <linux/slab.h>
309 #include <linux/interrupt.h>
310 #include <linux/errno.h>
311 #include <linux/cdrom.h>
312 #include <linux/ide.h>
313 #include <linux/completion.h>
314 #include <linux/mutex.h>
316 #include <scsi/scsi.h> /* For SCSI -> ATAPI command conversion */
320 #include <asm/byteorder.h>
321 #include <asm/uaccess.h>
322 #include <asm/unaligned.h>
326 static DEFINE_MUTEX(idecd_ref_mutex);
328 #define to_ide_cd(obj) container_of(obj, struct cdrom_info, kref)
330 #define ide_cd_g(disk) \
331 container_of((disk)->private_data, struct cdrom_info, driver)
333 static struct cdrom_info *ide_cd_get(struct gendisk *disk)
335 struct cdrom_info *cd = NULL;
337 mutex_lock(&idecd_ref_mutex);
341 mutex_unlock(&idecd_ref_mutex);
345 static void ide_cd_release(struct kref *);
347 static void ide_cd_put(struct cdrom_info *cd)
349 mutex_lock(&idecd_ref_mutex);
350 kref_put(&cd->kref, ide_cd_release);
351 mutex_unlock(&idecd_ref_mutex);
354 /****************************************************************************
355 * Generic packet command support and error handling routines.
358 /* Mark that we've seen a media change, and invalidate our internal
360 static void cdrom_saw_media_change (ide_drive_t *drive)
362 struct cdrom_info *info = drive->driver_data;
364 CDROM_STATE_FLAGS (drive)->media_changed = 1;
365 CDROM_STATE_FLAGS (drive)->toc_valid = 0;
366 info->nsectors_buffered = 0;
369 static int cdrom_log_sense(ide_drive_t *drive, struct request *rq,
370 struct request_sense *sense)
374 if (!sense || !rq || (rq->cmd_flags & REQ_QUIET))
377 switch (sense->sense_key) {
378 case NO_SENSE: case RECOVERED_ERROR:
382 * don't care about tray state messages for
383 * e.g. capacity commands or in-progress or
386 if (sense->asc == 0x3a || sense->asc == 0x04)
390 case ILLEGAL_REQUEST:
392 * don't log START_STOP unit with LoEj set, since
393 * we cannot reliably check if drive can auto-close
395 if (rq->cmd[0] == GPCMD_START_STOP_UNIT && sense->asc == 0x24)
401 * Make good and sure we've seen this potential media
402 * change. Some drives (i.e. Creative) fail to present
403 * the correct sense key in the error register.
405 cdrom_saw_media_change(drive);
415 void cdrom_analyze_sense_data(ide_drive_t *drive,
416 struct request *failed_command,
417 struct request_sense *sense)
419 unsigned long sector;
420 unsigned long bio_sectors;
422 struct cdrom_info *info = drive->driver_data;
424 if (!cdrom_log_sense(drive, failed_command, sense))
428 * If a read toc is executed for a CD-R or CD-RW medium where
429 * the first toc has not been recorded yet, it will fail with
430 * 05/24/00 (which is a confusing error)
432 if (failed_command && failed_command->cmd[0] == GPCMD_READ_TOC_PMA_ATIP)
433 if (sense->sense_key == 0x05 && sense->asc == 0x24)
436 if (sense->error_code == 0x70) { /* Current Error */
437 switch(sense->sense_key) {
439 case VOLUME_OVERFLOW:
440 case ILLEGAL_REQUEST:
443 if (failed_command == NULL ||
444 !blk_fs_request(failed_command))
446 sector = (sense->information[0] << 24) |
447 (sense->information[1] << 16) |
448 (sense->information[2] << 8) |
449 (sense->information[3]);
451 bio_sectors = bio_sectors(failed_command->bio);
454 if (drive->queue->hardsect_size == 2048)
455 sector <<= 2; /* Device sector size is 2K */
456 sector &= ~(bio_sectors -1);
457 valid = (sector - failed_command->sector) << 9;
461 if (sector < get_capacity(info->disk) &&
462 drive->probed_capacity - sector < 4 * 75) {
463 set_capacity(info->disk, sector);
467 #if VERBOSE_IDE_CD_ERRORS
470 const char *s = "bad sense key!";
473 printk ("ATAPI device %s:\n", drive->name);
474 if (sense->error_code==0x70)
476 else if (sense->error_code==0x71)
477 printk(" Deferred Error: ");
478 else if (sense->error_code == 0x7f)
479 printk(" Vendor-specific Error: ");
481 printk(" Unknown Error Type: ");
483 if (sense->sense_key < ARRAY_SIZE(sense_key_texts))
484 s = sense_key_texts[sense->sense_key];
486 printk("%s -- (Sense key=0x%02x)\n", s, sense->sense_key);
488 if (sense->asc == 0x40) {
489 sprintf(buf, "Diagnostic failure on component 0x%02x",
493 int lo = 0, mid, hi = ARRAY_SIZE(sense_data_texts);
494 unsigned long key = (sense->sense_key << 16);
495 key |= (sense->asc << 8);
496 if (!(sense->ascq >= 0x80 && sense->ascq <= 0xdd))
502 if (sense_data_texts[mid].asc_ascq == key ||
503 sense_data_texts[mid].asc_ascq == (0xff0000|key)) {
504 s = sense_data_texts[mid].text;
507 else if (sense_data_texts[mid].asc_ascq > key)
515 if (sense->asc > 0x80)
516 s = "(vendor-specific error)";
518 s = "(reserved error code)";
521 printk(KERN_ERR " %s -- (asc=0x%02x, ascq=0x%02x)\n",
522 s, sense->asc, sense->ascq);
524 if (failed_command != NULL) {
526 int lo=0, mid, hi= ARRAY_SIZE(packet_command_texts);
531 if (packet_command_texts[mid].packet_command ==
532 failed_command->cmd[0]) {
533 s = packet_command_texts[mid].text;
536 if (packet_command_texts[mid].packet_command >
537 failed_command->cmd[0])
543 printk (KERN_ERR " The failed \"%s\" packet command was: \n \"", s);
544 for (i=0; i<sizeof (failed_command->cmd); i++)
545 printk ("%02x ", failed_command->cmd[i]);
549 /* The SKSV bit specifies validity of the sense_key_specific
550 * in the next two commands. It is bit 7 of the first byte.
551 * In the case of NOT_READY, if SKSV is set the drive can
552 * give us nice ETA readings.
554 if (sense->sense_key == NOT_READY && (sense->sks[0] & 0x80)) {
555 int progress = (sense->sks[1] << 8 | sense->sks[2]) * 100;
556 printk(KERN_ERR " Command is %02d%% complete\n", progress / 0xffff);
560 if (sense->sense_key == ILLEGAL_REQUEST &&
561 (sense->sks[0] & 0x80) != 0) {
562 printk(KERN_ERR " Error in %s byte %d",
563 (sense->sks[0] & 0x40) != 0 ?
564 "command packet" : "command data",
565 (sense->sks[1] << 8) + sense->sks[2]);
567 if ((sense->sks[0] & 0x40) != 0)
568 printk (" bit %d", sense->sks[0] & 0x07);
574 #else /* not VERBOSE_IDE_CD_ERRORS */
576 /* Suppress printing unit attention and `in progress of becoming ready'
577 errors when we're not being verbose. */
579 if (sense->sense_key == UNIT_ATTENTION ||
580 (sense->sense_key == NOT_READY && (sense->asc == 4 ||
581 sense->asc == 0x3a)))
584 printk(KERN_ERR "%s: error code: 0x%02x sense_key: 0x%02x asc: 0x%02x ascq: 0x%02x\n",
586 sense->error_code, sense->sense_key,
587 sense->asc, sense->ascq);
588 #endif /* not VERBOSE_IDE_CD_ERRORS */
592 * Initialize a ide-cd packet command request
594 static void cdrom_prepare_request(ide_drive_t *drive, struct request *rq)
596 struct cdrom_info *cd = drive->driver_data;
598 ide_init_drive_cmd(rq);
599 rq->cmd_type = REQ_TYPE_ATA_PC;
600 rq->rq_disk = cd->disk;
603 static void cdrom_queue_request_sense(ide_drive_t *drive, void *sense,
604 struct request *failed_command)
606 struct cdrom_info *info = drive->driver_data;
607 struct request *rq = &info->request_sense_request;
610 sense = &info->sense_data;
612 /* stuff the sense request in front of our current request */
613 cdrom_prepare_request(drive, rq);
616 rq->cmd[0] = GPCMD_REQUEST_SENSE;
617 rq->cmd[4] = rq->data_len = 18;
619 rq->cmd_type = REQ_TYPE_SENSE;
621 /* NOTE! Save the failed command in "rq->buffer" */
622 rq->buffer = (void *) failed_command;
624 (void) ide_do_drive_cmd(drive, rq, ide_preempt);
627 static void cdrom_end_request (ide_drive_t *drive, int uptodate)
629 struct request *rq = HWGROUP(drive)->rq;
630 int nsectors = rq->hard_cur_sectors;
632 if (blk_sense_request(rq) && uptodate) {
634 * For REQ_TYPE_SENSE, "rq->buffer" points to the original
637 struct request *failed = (struct request *) rq->buffer;
638 struct cdrom_info *info = drive->driver_data;
639 void *sense = &info->sense_data;
644 sense = failed->sense;
645 failed->sense_len = rq->sense_len;
647 cdrom_analyze_sense_data(drive, failed, sense);
649 * now end failed request
651 if (blk_fs_request(failed)) {
652 if (ide_end_dequeued_request(drive, failed, 0,
653 failed->hard_nr_sectors))
656 spin_lock_irqsave(&ide_lock, flags);
657 if (__blk_end_request(failed, -EIO,
660 spin_unlock_irqrestore(&ide_lock, flags);
663 cdrom_analyze_sense_data(drive, NULL, sense);
666 if (!rq->current_nr_sectors && blk_fs_request(rq))
668 /* make sure it's fully ended */
669 if (blk_pc_request(rq))
670 nsectors = (rq->data_len + 511) >> 9;
674 ide_end_request(drive, uptodate, nsectors);
677 static void ide_dump_status_no_sense(ide_drive_t *drive, const char *msg, u8 stat)
681 ide_dump_status(drive, msg, stat);
684 /* Returns 0 if the request should be continued.
685 Returns 1 if the request was ended. */
686 static int cdrom_decode_status(ide_drive_t *drive, int good_stat, int *stat_ret)
688 struct request *rq = HWGROUP(drive)->rq;
689 int stat, err, sense_key;
691 /* Check for errors. */
692 stat = HWIF(drive)->INB(IDE_STATUS_REG);
696 if (OK_STAT(stat, good_stat, BAD_R_STAT))
699 /* Get the IDE error register. */
700 err = HWIF(drive)->INB(IDE_ERROR_REG);
701 sense_key = err >> 4;
704 printk("%s: missing rq in cdrom_decode_status\n", drive->name);
708 if (blk_sense_request(rq)) {
709 /* We got an error trying to get sense info
710 from the drive (probably while trying
711 to recover from a former error). Just give up. */
713 rq->cmd_flags |= REQ_FAILED;
714 cdrom_end_request(drive, 0);
715 ide_error(drive, "request sense failure", stat);
718 } else if (blk_pc_request(rq) || rq->cmd_type == REQ_TYPE_ATA_PC) {
719 /* All other functions, except for READ. */
723 * if we have an error, pass back CHECK_CONDITION as the
726 if (blk_pc_request(rq) && !rq->errors)
727 rq->errors = SAM_STAT_CHECK_CONDITION;
729 /* Check for tray open. */
730 if (sense_key == NOT_READY) {
731 cdrom_saw_media_change (drive);
732 } else if (sense_key == UNIT_ATTENTION) {
733 /* Check for media change. */
734 cdrom_saw_media_change (drive);
735 /*printk("%s: media changed\n",drive->name);*/
737 } else if ((sense_key == ILLEGAL_REQUEST) &&
738 (rq->cmd[0] == GPCMD_START_STOP_UNIT)) {
740 * Don't print error message for this condition--
741 * SFF8090i indicates that 5/24/00 is the correct
742 * response to a request to close the tray if the
743 * drive doesn't have that capability.
744 * cdrom_log_sense() knows this!
746 } else if (!(rq->cmd_flags & REQ_QUIET)) {
747 /* Otherwise, print an error. */
748 ide_dump_status(drive, "packet command error", stat);
751 rq->cmd_flags |= REQ_FAILED;
754 * instead of playing games with moving completions around,
755 * remove failed request completely and end it when the
756 * request sense has completed
758 if (stat & ERR_STAT) {
759 spin_lock_irqsave(&ide_lock, flags);
760 blkdev_dequeue_request(rq);
761 HWGROUP(drive)->rq = NULL;
762 spin_unlock_irqrestore(&ide_lock, flags);
764 cdrom_queue_request_sense(drive, rq->sense, rq);
766 cdrom_end_request(drive, 0);
768 } else if (blk_fs_request(rq)) {
769 int do_end_request = 0;
771 /* Handle errors from READ and WRITE requests. */
773 if (blk_noretry_request(rq))
776 if (sense_key == NOT_READY) {
778 if (rq_data_dir(rq) == READ) {
779 cdrom_saw_media_change (drive);
781 /* Fail the request. */
782 printk ("%s: tray open\n", drive->name);
785 struct cdrom_info *info = drive->driver_data;
787 /* allow the drive 5 seconds to recover, some
788 * devices will return this error while flushing
791 info->write_timeout = jiffies + ATAPI_WAIT_WRITE_BUSY;
793 if (time_after(jiffies, info->write_timeout))
799 * take a breather relying on the
800 * unplug timer to kick us again
802 spin_lock_irqsave(&ide_lock, flags);
803 blk_plug_device(drive->queue);
804 spin_unlock_irqrestore(&ide_lock,flags);
808 } else if (sense_key == UNIT_ATTENTION) {
810 cdrom_saw_media_change (drive);
812 /* Arrange to retry the request.
813 But be sure to give up if we've retried
815 if (++rq->errors > ERROR_MAX)
817 } else if (sense_key == ILLEGAL_REQUEST ||
818 sense_key == DATA_PROTECT) {
819 /* No point in retrying after an illegal
820 request or data protect error.*/
821 ide_dump_status_no_sense (drive, "command error", stat);
823 } else if (sense_key == MEDIUM_ERROR) {
824 /* No point in re-trying a zillion times on a bad
825 * sector... If we got here the error is not correctable */
826 ide_dump_status_no_sense (drive, "media error (bad sector)", stat);
828 } else if (sense_key == BLANK_CHECK) {
829 /* Disk appears blank ?? */
830 ide_dump_status_no_sense (drive, "media error (blank)", stat);
832 } else if ((err & ~ABRT_ERR) != 0) {
833 /* Go to the default handler
835 ide_error(drive, "cdrom_decode_status", stat);
837 } else if ((++rq->errors > ERROR_MAX)) {
838 /* We've racked up too many retries. Abort. */
842 /* End a request through request sense analysis when we have
843 sense data. We need this in order to perform end of media
846 if (do_end_request) {
847 if (stat & ERR_STAT) {
849 spin_lock_irqsave(&ide_lock, flags);
850 blkdev_dequeue_request(rq);
851 HWGROUP(drive)->rq = NULL;
852 spin_unlock_irqrestore(&ide_lock, flags);
854 cdrom_queue_request_sense(drive, rq->sense, rq);
856 cdrom_end_request(drive, 0);
858 /* If we got a CHECK_CONDITION status,
859 queue a request sense command. */
861 cdrom_queue_request_sense(drive, NULL, NULL);
864 blk_dump_rq_flags(rq, "ide-cd: bad rq");
865 cdrom_end_request(drive, 0);
868 /* Retry, or handle the next request. */
872 static int cdrom_timer_expiry(ide_drive_t *drive)
874 struct request *rq = HWGROUP(drive)->rq;
875 unsigned long wait = 0;
878 * Some commands are *slow* and normally take a long time to
879 * complete. Usually we can use the ATAPI "disconnect" to bypass
880 * this, but not all commands/drives support that. Let
881 * ide_timer_expiry keep polling us for these.
883 switch (rq->cmd[0]) {
885 case GPCMD_FORMAT_UNIT:
886 case GPCMD_RESERVE_RZONE_TRACK:
887 case GPCMD_CLOSE_TRACK:
888 case GPCMD_FLUSH_CACHE:
889 wait = ATAPI_WAIT_PC;
892 if (!(rq->cmd_flags & REQ_QUIET))
893 printk(KERN_INFO "ide-cd: cmd 0x%x timed out\n", rq->cmd[0]);
900 /* Set up the device registers for transferring a packet command on DEV,
901 expecting to later transfer XFERLEN bytes. HANDLER is the routine
902 which actually transfers the command to the drive. If this is a
903 drq_interrupt device, this routine will arrange for HANDLER to be
904 called when the interrupt from the drive arrives. Otherwise, HANDLER
905 will be called immediately after the drive is prepared for the transfer. */
907 static ide_startstop_t cdrom_start_packet_command(ide_drive_t *drive,
909 ide_handler_t *handler)
911 ide_startstop_t startstop;
912 struct cdrom_info *info = drive->driver_data;
913 ide_hwif_t *hwif = drive->hwif;
915 /* Wait for the controller to be idle. */
916 if (ide_wait_stat(&startstop, drive, 0, BUSY_STAT, WAIT_READY))
919 /* FIXME: for Virtual DMA we must check harder */
921 info->dma = !hwif->dma_setup(drive);
923 /* Set up the controller registers. */
924 ide_pktcmd_tf_load(drive, IDE_TFLAG_OUT_NSECT | IDE_TFLAG_OUT_LBAL |
925 IDE_TFLAG_NO_SELECT_MASK, xferlen, info->dma);
927 if (CDROM_CONFIG_FLAGS (drive)->drq_interrupt) {
928 /* waiting for CDB interrupt, not DMA yet. */
930 drive->waiting_for_dma = 0;
933 ide_execute_command(drive, WIN_PACKETCMD, handler, ATAPI_WAIT_PC, cdrom_timer_expiry);
939 spin_lock_irqsave(&ide_lock, flags);
940 hwif->OUTBSYNC(drive, WIN_PACKETCMD, IDE_COMMAND_REG);
942 spin_unlock_irqrestore(&ide_lock, flags);
944 return (*handler) (drive);
948 /* Send a packet command to DRIVE described by CMD_BUF and CMD_LEN.
949 The device registers must have already been prepared
950 by cdrom_start_packet_command.
951 HANDLER is the interrupt handler to call when the command completes
952 or there's data ready. */
954 * changed 5 parameters to 3 for dvd-ram
955 * struct packet_command *pc; now packet_command_t *pc;
957 #define ATAPI_MIN_CDB_BYTES 12
958 static ide_startstop_t cdrom_transfer_packet_command (ide_drive_t *drive,
960 ide_handler_t *handler)
962 ide_hwif_t *hwif = drive->hwif;
964 struct cdrom_info *info = drive->driver_data;
965 ide_startstop_t startstop;
967 if (CDROM_CONFIG_FLAGS(drive)->drq_interrupt) {
968 /* Here we should have been called after receiving an interrupt
969 from the device. DRQ should how be set. */
971 /* Check for errors. */
972 if (cdrom_decode_status(drive, DRQ_STAT, NULL))
975 /* Ok, next interrupt will be DMA interrupt. */
977 drive->waiting_for_dma = 1;
979 /* Otherwise, we must wait for DRQ to get set. */
980 if (ide_wait_stat(&startstop, drive, DRQ_STAT,
981 BUSY_STAT, WAIT_READY))
985 /* Arm the interrupt handler. */
986 ide_set_handler(drive, handler, rq->timeout, cdrom_timer_expiry);
988 /* ATAPI commands get padded out to 12 bytes minimum */
989 cmd_len = COMMAND_SIZE(rq->cmd[0]);
990 if (cmd_len < ATAPI_MIN_CDB_BYTES)
991 cmd_len = ATAPI_MIN_CDB_BYTES;
993 /* Send the command to the device. */
994 HWIF(drive)->atapi_output_bytes(drive, rq->cmd, cmd_len);
996 /* Start the DMA if need be */
998 hwif->dma_start(drive);
1003 /****************************************************************************
1004 * Block read functions.
1007 typedef void (xfer_func_t)(ide_drive_t *, void *, u32);
1009 static void ide_cd_pad_transfer(ide_drive_t *drive, xfer_func_t *xf, int len)
1013 xf(drive, &dum, sizeof(dum));
1019 * Buffer up to SECTORS_TO_TRANSFER sectors from the drive in our sector
1020 * buffer. Once the first sector is added, any subsequent sectors are
1021 * assumed to be continuous (until the buffer is cleared). For the first
1022 * sector added, SECTOR is its sector number. (SECTOR is then ignored until
1023 * the buffer is cleared.)
1025 static void cdrom_buffer_sectors (ide_drive_t *drive, unsigned long sector,
1026 int sectors_to_transfer)
1028 struct cdrom_info *info = drive->driver_data;
1030 /* Number of sectors to read into the buffer. */
1031 int sectors_to_buffer = min_t(int, sectors_to_transfer,
1032 (SECTOR_BUFFER_SIZE >> SECTOR_BITS) -
1033 info->nsectors_buffered);
1037 /* If we couldn't get a buffer, don't try to buffer anything... */
1038 if (info->buffer == NULL)
1039 sectors_to_buffer = 0;
1041 /* If this is the first sector in the buffer, remember its number. */
1042 if (info->nsectors_buffered == 0)
1043 info->sector_buffered = sector;
1045 /* Read the data into the buffer. */
1046 dest = info->buffer + info->nsectors_buffered * SECTOR_SIZE;
1047 while (sectors_to_buffer > 0) {
1048 HWIF(drive)->atapi_input_bytes(drive, dest, SECTOR_SIZE);
1049 --sectors_to_buffer;
1050 --sectors_to_transfer;
1051 ++info->nsectors_buffered;
1052 dest += SECTOR_SIZE;
1055 /* Throw away any remaining data. */
1056 while (sectors_to_transfer > 0) {
1057 static char dum[SECTOR_SIZE];
1058 HWIF(drive)->atapi_input_bytes(drive, dum, sizeof (dum));
1059 --sectors_to_transfer;
1064 * Check the contents of the interrupt reason register from the cdrom
1065 * and attempt to recover if there are problems. Returns 0 if everything's
1066 * ok; nonzero if the request has been terminated.
1069 int cdrom_read_check_ireason (ide_drive_t *drive, int len, int ireason)
1073 else if (ireason == 0) {
1074 ide_hwif_t *hwif = drive->hwif;
1076 /* Whoops... The drive is expecting to receive data from us! */
1077 printk(KERN_ERR "%s: %s: wrong transfer direction!\n",
1078 drive->name, __FUNCTION__);
1080 /* Throw some data at the drive so it doesn't hang
1081 and quit this request. */
1082 ide_cd_pad_transfer(drive, hwif->atapi_output_bytes, len);
1083 } else if (ireason == 1) {
1084 /* Some drives (ASUS) seem to tell us that status
1085 * info is available. just get it and ignore.
1087 (void) HWIF(drive)->INB(IDE_STATUS_REG);
1090 /* Drive wants a command packet, or invalid ireason... */
1091 printk(KERN_ERR "%s: %s: bad interrupt reason 0x%02x\n",
1092 drive->name, __FUNCTION__, ireason);
1095 cdrom_end_request(drive, 0);
1100 * Interrupt routine. Called when a read request has completed.
1102 static ide_startstop_t cdrom_read_intr (ide_drive_t *drive)
1105 int ireason, len, sectors_to_transfer, nskip;
1106 struct cdrom_info *info = drive->driver_data;
1107 u8 lowcyl = 0, highcyl = 0;
1108 int dma = info->dma, dma_error = 0;
1110 struct request *rq = HWGROUP(drive)->rq;
1117 dma_error = HWIF(drive)->ide_dma_end(drive);
1119 printk(KERN_ERR "%s: DMA read error\n", drive->name);
1124 if (cdrom_decode_status(drive, 0, &stat))
1129 ide_end_request(drive, 1, rq->nr_sectors);
1132 return ide_error(drive, "dma error", stat);
1135 /* Read the interrupt reason and the transfer length. */
1136 ireason = HWIF(drive)->INB(IDE_IREASON_REG) & 0x3;
1137 lowcyl = HWIF(drive)->INB(IDE_BCOUNTL_REG);
1138 highcyl = HWIF(drive)->INB(IDE_BCOUNTH_REG);
1140 len = lowcyl + (256 * highcyl);
1142 /* If DRQ is clear, the command has completed. */
1143 if ((stat & DRQ_STAT) == 0) {
1144 /* If we're not done filling the current buffer, complain.
1145 Otherwise, complete the command normally. */
1146 if (rq->current_nr_sectors > 0) {
1147 printk (KERN_ERR "%s: cdrom_read_intr: data underrun (%d blocks)\n",
1148 drive->name, rq->current_nr_sectors);
1149 rq->cmd_flags |= REQ_FAILED;
1150 cdrom_end_request(drive, 0);
1152 cdrom_end_request(drive, 1);
1156 /* Check that the drive is expecting to do the same thing we are. */
1157 if (cdrom_read_check_ireason (drive, len, ireason))
1160 /* Assume that the drive will always provide data in multiples
1161 of at least SECTOR_SIZE, as it gets hairy to keep track
1162 of the transfers otherwise. */
1163 if ((len % SECTOR_SIZE) != 0) {
1164 printk (KERN_ERR "%s: cdrom_read_intr: Bad transfer size %d\n",
1166 if (CDROM_CONFIG_FLAGS(drive)->limit_nframes)
1167 printk (KERN_ERR " This drive is not supported by this version of the driver\n");
1169 printk (KERN_ERR " Trying to limit transfer sizes\n");
1170 CDROM_CONFIG_FLAGS(drive)->limit_nframes = 1;
1172 cdrom_end_request(drive, 0);
1176 /* The number of sectors we need to read from the drive. */
1177 sectors_to_transfer = len / SECTOR_SIZE;
1179 /* First, figure out if we need to bit-bucket
1180 any of the leading sectors. */
1181 nskip = min_t(int, rq->current_nr_sectors - bio_cur_sectors(rq->bio), sectors_to_transfer);
1184 /* We need to throw away a sector. */
1185 static char dum[SECTOR_SIZE];
1186 HWIF(drive)->atapi_input_bytes(drive, dum, sizeof (dum));
1188 --rq->current_nr_sectors;
1190 --sectors_to_transfer;
1193 /* Now loop while we still have data to read from the drive. */
1194 while (sectors_to_transfer > 0) {
1197 /* If we've filled the present buffer but there's another
1198 chained buffer after it, move on. */
1199 if (rq->current_nr_sectors == 0 && rq->nr_sectors)
1200 cdrom_end_request(drive, 1);
1202 /* If the buffers are full, cache the rest of the data in our
1204 if (rq->current_nr_sectors == 0) {
1205 cdrom_buffer_sectors(drive, rq->sector, sectors_to_transfer);
1206 sectors_to_transfer = 0;
1208 /* Transfer data to the buffers.
1209 Figure out how many sectors we can transfer
1210 to the current buffer. */
1211 this_transfer = min_t(int, sectors_to_transfer,
1212 rq->current_nr_sectors);
1214 /* Read this_transfer sectors
1215 into the current buffer. */
1216 while (this_transfer > 0) {
1217 HWIF(drive)->atapi_input_bytes(drive, rq->buffer, SECTOR_SIZE);
1218 rq->buffer += SECTOR_SIZE;
1220 --rq->current_nr_sectors;
1223 --sectors_to_transfer;
1228 /* Done moving data! Wait for another interrupt. */
1229 ide_set_handler(drive, &cdrom_read_intr, ATAPI_WAIT_PC, NULL);
1234 * Try to satisfy some of the current read request from our cached data.
1235 * Returns nonzero if the request has been completed, zero otherwise.
1237 static int cdrom_read_from_buffer (ide_drive_t *drive)
1239 struct cdrom_info *info = drive->driver_data;
1240 struct request *rq = HWGROUP(drive)->rq;
1241 unsigned short sectors_per_frame;
1243 sectors_per_frame = queue_hardsect_size(drive->queue) >> SECTOR_BITS;
1245 /* Can't do anything if there's no buffer. */
1246 if (info->buffer == NULL) return 0;
1248 /* Loop while this request needs data and the next block is present
1250 while (rq->nr_sectors > 0 &&
1251 rq->sector >= info->sector_buffered &&
1252 rq->sector < info->sector_buffered + info->nsectors_buffered) {
1253 if (rq->current_nr_sectors == 0)
1254 cdrom_end_request(drive, 1);
1258 (rq->sector - info->sector_buffered) * SECTOR_SIZE,
1260 rq->buffer += SECTOR_SIZE;
1261 --rq->current_nr_sectors;
1266 /* If we've satisfied the current request,
1267 terminate it successfully. */
1268 if (rq->nr_sectors == 0) {
1269 cdrom_end_request(drive, 1);
1273 /* Move on to the next buffer if needed. */
1274 if (rq->current_nr_sectors == 0)
1275 cdrom_end_request(drive, 1);
1277 /* If this condition does not hold, then the kluge i use to
1278 represent the number of sectors to skip at the start of a transfer
1279 will fail. I think that this will never happen, but let's be
1280 paranoid and check. */
1281 if (rq->current_nr_sectors < bio_cur_sectors(rq->bio) &&
1282 (rq->sector & (sectors_per_frame - 1))) {
1283 printk(KERN_ERR "%s: cdrom_read_from_buffer: buffer botch (%ld)\n",
1284 drive->name, (long)rq->sector);
1285 cdrom_end_request(drive, 0);
1293 * Routine to send a read packet command to the drive.
1294 * This is usually called directly from cdrom_start_read.
1295 * However, for drq_interrupt devices, it is called from an interrupt
1296 * when the drive is ready to accept the command.
1298 static ide_startstop_t cdrom_start_read_continuation (ide_drive_t *drive)
1300 struct request *rq = HWGROUP(drive)->rq;
1301 unsigned short sectors_per_frame;
1304 sectors_per_frame = queue_hardsect_size(drive->queue) >> SECTOR_BITS;
1306 /* If the requested sector doesn't start on a cdrom block boundary,
1307 we must adjust the start of the transfer so that it does,
1308 and remember to skip the first few sectors.
1309 If the CURRENT_NR_SECTORS field is larger than the size
1310 of the buffer, it will mean that we're to skip a number
1311 of sectors equal to the amount by which CURRENT_NR_SECTORS
1312 is larger than the buffer size. */
1313 nskip = rq->sector & (sectors_per_frame - 1);
1315 /* Sanity check... */
1316 if (rq->current_nr_sectors != bio_cur_sectors(rq->bio) &&
1317 (rq->sector & (sectors_per_frame - 1))) {
1318 printk(KERN_ERR "%s: cdrom_start_read_continuation: buffer botch (%u)\n",
1319 drive->name, rq->current_nr_sectors);
1320 cdrom_end_request(drive, 0);
1323 rq->current_nr_sectors += nskip;
1326 /* Set up the command */
1327 rq->timeout = ATAPI_WAIT_PC;
1329 /* Send the command to the drive and return. */
1330 return cdrom_transfer_packet_command(drive, rq, &cdrom_read_intr);
1334 #define IDECD_SEEK_THRESHOLD (1000) /* 1000 blocks */
1335 #define IDECD_SEEK_TIMER (5 * WAIT_MIN_SLEEP) /* 100 ms */
1336 #define IDECD_SEEK_TIMEOUT (2 * WAIT_CMD) /* 20 sec */
1338 static ide_startstop_t cdrom_seek_intr (ide_drive_t *drive)
1340 struct cdrom_info *info = drive->driver_data;
1342 static int retry = 10;
1344 if (cdrom_decode_status(drive, 0, &stat))
1346 CDROM_CONFIG_FLAGS(drive)->seeking = 1;
1348 if (retry && time_after(jiffies, info->start_seek + IDECD_SEEK_TIMER)) {
1351 * this condition is far too common, to bother
1354 /* printk("%s: disabled DSC seek overlap\n", drive->name);*/
1355 drive->dsc_overlap = 0;
1361 static ide_startstop_t cdrom_start_seek_continuation (ide_drive_t *drive)
1363 struct request *rq = HWGROUP(drive)->rq;
1364 sector_t frame = rq->sector;
1366 sector_div(frame, queue_hardsect_size(drive->queue) >> SECTOR_BITS);
1368 memset(rq->cmd, 0, sizeof(rq->cmd));
1369 rq->cmd[0] = GPCMD_SEEK;
1370 put_unaligned(cpu_to_be32(frame), (unsigned int *) &rq->cmd[2]);
1372 rq->timeout = ATAPI_WAIT_PC;
1373 return cdrom_transfer_packet_command(drive, rq, &cdrom_seek_intr);
1376 static ide_startstop_t cdrom_start_seek (ide_drive_t *drive, unsigned int block)
1378 struct cdrom_info *info = drive->driver_data;
1381 info->start_seek = jiffies;
1382 return cdrom_start_packet_command(drive, 0, cdrom_start_seek_continuation);
1385 /* Fix up a possibly partially-processed request so that we can
1386 start it over entirely, or even put it back on the request queue. */
1387 static void restore_request (struct request *rq)
1389 if (rq->buffer != bio_data(rq->bio)) {
1390 sector_t n = (rq->buffer - (char *) bio_data(rq->bio)) / SECTOR_SIZE;
1392 rq->buffer = bio_data(rq->bio);
1393 rq->nr_sectors += n;
1396 rq->hard_cur_sectors = rq->current_nr_sectors = bio_cur_sectors(rq->bio);
1397 rq->hard_nr_sectors = rq->nr_sectors;
1398 rq->hard_sector = rq->sector;
1399 rq->q->prep_rq_fn(rq->q, rq);
1403 * Start a read request from the CD-ROM.
1405 static ide_startstop_t cdrom_start_read (ide_drive_t *drive, unsigned int block)
1407 struct cdrom_info *info = drive->driver_data;
1408 struct request *rq = HWGROUP(drive)->rq;
1409 unsigned short sectors_per_frame;
1411 sectors_per_frame = queue_hardsect_size(drive->queue) >> SECTOR_BITS;
1413 /* We may be retrying this request after an error. Fix up
1414 any weirdness which might be present in the request packet. */
1415 restore_request(rq);
1417 /* Satisfy whatever we can of this request from our cached sector. */
1418 if (cdrom_read_from_buffer(drive))
1421 /* Clear the local sector buffer. */
1422 info->nsectors_buffered = 0;
1424 /* use dma, if possible. */
1425 info->dma = drive->using_dma;
1426 if ((rq->sector & (sectors_per_frame - 1)) ||
1427 (rq->nr_sectors & (sectors_per_frame - 1)))
1430 /* Start sending the read request to the drive. */
1431 return cdrom_start_packet_command(drive, 32768, cdrom_start_read_continuation);
1434 /****************************************************************************
1435 * Execute all other packet commands.
1438 /* Interrupt routine for packet command completion. */
1439 static ide_startstop_t cdrom_pc_intr (ide_drive_t *drive)
1441 struct request *rq = HWGROUP(drive)->rq;
1442 xfer_func_t *xferfunc = NULL;
1443 int stat, ireason, len, thislen, write;
1444 u8 lowcyl = 0, highcyl = 0;
1446 /* Check for errors. */
1447 if (cdrom_decode_status(drive, 0, &stat))
1450 /* Read the interrupt reason and the transfer length. */
1451 ireason = HWIF(drive)->INB(IDE_IREASON_REG) & 0x3;
1452 lowcyl = HWIF(drive)->INB(IDE_BCOUNTL_REG);
1453 highcyl = HWIF(drive)->INB(IDE_BCOUNTH_REG);
1455 len = lowcyl + (256 * highcyl);
1457 /* If DRQ is clear, the command has completed.
1458 Complain if we still have data left to transfer. */
1459 if ((stat & DRQ_STAT) == 0) {
1460 /* Some of the trailing request sense fields are optional, and
1461 some drives don't send them. Sigh. */
1462 if (rq->cmd[0] == GPCMD_REQUEST_SENSE &&
1464 rq->data_len <= 5) {
1465 while (rq->data_len > 0) {
1466 *(unsigned char *)rq->data++ = 0;
1471 if (rq->data_len == 0)
1472 cdrom_end_request(drive, 1);
1474 /* Comment this out, because this always happens
1475 right after a reset occurs, and it is annoying to
1476 always print expected stuff. */
1478 printk ("%s: cdrom_pc_intr: data underrun %d\n",
1479 drive->name, pc->buflen);
1481 rq->cmd_flags |= REQ_FAILED;
1482 cdrom_end_request(drive, 0);
1487 /* Figure out how much data to transfer. */
1488 thislen = rq->data_len;
1494 xferfunc = HWIF(drive)->atapi_output_bytes;
1495 } else if (ireason == 2) {
1497 xferfunc = HWIF(drive)->atapi_input_bytes;
1502 printk(KERN_ERR "%s: confused, missing data\n",
1504 blk_dump_rq_flags(rq, write ? "cdrom_pc_intr, write"
1505 : "cdrom_pc_intr, read");
1508 /* Transfer the data. */
1509 xferfunc(drive, rq->data, thislen);
1511 /* Keep count of how much data we've moved. */
1513 rq->data += thislen;
1514 rq->data_len -= thislen;
1516 if (write && blk_sense_request(rq))
1517 rq->sense_len += thislen;
1519 printk (KERN_ERR "%s: cdrom_pc_intr: The drive "
1520 "appears confused (ireason = 0x%02x). "
1521 "Trying to recover by ending request.\n",
1522 drive->name, ireason);
1523 rq->cmd_flags |= REQ_FAILED;
1524 cdrom_end_request(drive, 0);
1529 * If we haven't moved enough data to satisfy the drive,
1533 ide_cd_pad_transfer(drive, xferfunc, len);
1535 /* Now we wait for another interrupt. */
1536 ide_set_handler(drive, &cdrom_pc_intr, ATAPI_WAIT_PC, cdrom_timer_expiry);
1540 static ide_startstop_t cdrom_do_pc_continuation (ide_drive_t *drive)
1542 struct request *rq = HWGROUP(drive)->rq;
1545 rq->timeout = ATAPI_WAIT_PC;
1547 /* Send the command to the drive and return. */
1548 return cdrom_transfer_packet_command(drive, rq, &cdrom_pc_intr);
1552 static ide_startstop_t cdrom_do_packet_command (ide_drive_t *drive)
1555 struct request *rq = HWGROUP(drive)->rq;
1556 struct cdrom_info *info = drive->driver_data;
1559 rq->cmd_flags &= ~REQ_FAILED;
1562 /* Start sending the command to the drive. */
1563 return cdrom_start_packet_command(drive, len, cdrom_do_pc_continuation);
1567 static int cdrom_queue_packet_command(ide_drive_t *drive, struct request *rq)
1569 struct request_sense sense;
1571 unsigned int flags = rq->cmd_flags;
1573 if (rq->sense == NULL)
1576 /* Start of retry loop. */
1579 unsigned long time = jiffies;
1580 rq->cmd_flags = flags;
1582 error = ide_do_drive_cmd(drive, rq, ide_wait);
1583 time = jiffies - time;
1585 /* FIXME: we should probably abort/retry or something
1586 * in case of failure */
1587 if (rq->cmd_flags & REQ_FAILED) {
1588 /* The request failed. Retry if it was due to a unit
1590 (usually means media was changed). */
1591 struct request_sense *reqbuf = rq->sense;
1593 if (reqbuf->sense_key == UNIT_ATTENTION)
1594 cdrom_saw_media_change(drive);
1595 else if (reqbuf->sense_key == NOT_READY &&
1596 reqbuf->asc == 4 && reqbuf->ascq != 4) {
1597 /* The drive is in the process of loading
1598 a disk. Retry, but wait a little to give
1599 the drive time to complete the load. */
1602 /* Otherwise, don't retry. */
1608 /* End of retry loop. */
1609 } while ((rq->cmd_flags & REQ_FAILED) && retries >= 0);
1611 /* Return an error if the command failed. */
1612 return (rq->cmd_flags & REQ_FAILED) ? -EIO : 0;
1618 static int cdrom_write_check_ireason(ide_drive_t *drive, int len, int ireason)
1620 /* Two notes about IDE interrupt reason here - 0 means that
1621 * the drive wants to receive data from us, 2 means that
1622 * the drive is expecting to transfer data to us.
1626 else if (ireason == 2) {
1627 ide_hwif_t *hwif = drive->hwif;
1629 /* Whoops... The drive wants to send data. */
1630 printk(KERN_ERR "%s: %s: wrong transfer direction!\n",
1631 drive->name, __FUNCTION__);
1633 ide_cd_pad_transfer(drive, hwif->atapi_input_bytes, len);
1635 /* Drive wants a command packet, or invalid ireason... */
1636 printk(KERN_ERR "%s: %s: bad interrupt reason 0x%02x\n",
1637 drive->name, __FUNCTION__, ireason);
1640 cdrom_end_request(drive, 0);
1645 * Called from blk_end_request_callback() after the data of the request
1646 * is completed and before the request is completed.
1647 * By returning value '1', blk_end_request_callback() returns immediately
1648 * without completing the request.
1650 static int cdrom_newpc_intr_dummy_cb(struct request *rq)
1656 * best way to deal with dma that is not sector aligned right now... note
1657 * that in this path we are not using ->data or ->buffer at all. this irs
1658 * can replace cdrom_pc_intr, cdrom_read_intr, and cdrom_write_intr in the
1661 static ide_startstop_t cdrom_newpc_intr(ide_drive_t *drive)
1663 struct cdrom_info *info = drive->driver_data;
1664 struct request *rq = HWGROUP(drive)->rq;
1665 int dma_error, dma, stat, ireason, len, thislen;
1667 xfer_func_t *xferfunc;
1668 unsigned long flags;
1670 /* Check for errors. */
1675 dma_error = HWIF(drive)->ide_dma_end(drive);
1677 printk(KERN_ERR "%s: DMA %s error\n", drive->name,
1678 rq_data_dir(rq) ? "write" : "read");
1683 if (cdrom_decode_status(drive, 0, &stat))
1687 * using dma, transfer is complete now
1691 return ide_error(drive, "dma error", stat);
1693 spin_lock_irqsave(&ide_lock, flags);
1694 if (__blk_end_request(rq, 0, rq->data_len))
1696 HWGROUP(drive)->rq = NULL;
1697 spin_unlock_irqrestore(&ide_lock, flags);
1703 * ok we fall to pio :/
1705 ireason = HWIF(drive)->INB(IDE_IREASON_REG) & 0x3;
1706 lowcyl = HWIF(drive)->INB(IDE_BCOUNTL_REG);
1707 highcyl = HWIF(drive)->INB(IDE_BCOUNTH_REG);
1709 len = lowcyl + (256 * highcyl);
1710 thislen = rq->data_len;
1715 * If DRQ is clear, the command has completed.
1717 if ((stat & DRQ_STAT) == 0) {
1718 spin_lock_irqsave(&ide_lock, flags);
1719 if (__blk_end_request(rq, 0, rq->data_len))
1721 HWGROUP(drive)->rq = NULL;
1722 spin_unlock_irqrestore(&ide_lock, flags);
1728 * check which way to transfer data
1730 if (rq_data_dir(rq) == WRITE) {
1734 if (cdrom_write_check_ireason(drive, len, ireason))
1737 xferfunc = HWIF(drive)->atapi_output_bytes;
1742 if (cdrom_read_check_ireason(drive, len, ireason))
1745 xferfunc = HWIF(drive)->atapi_input_bytes;
1751 while (thislen > 0) {
1752 int blen = blen = rq->data_len;
1753 char *ptr = rq->data;
1759 ptr = bio_data(rq->bio);
1760 blen = bio_iovec(rq->bio)->bv_len;
1764 printk(KERN_ERR "%s: confused, missing data\n", drive->name);
1771 xferfunc(drive, ptr, blen);
1775 rq->data_len -= blen;
1779 * The request can't be completed until DRQ is cleared.
1780 * So complete the data, but don't complete the request
1781 * using the dummy function for the callback feature
1782 * of blk_end_request_callback().
1784 blk_end_request_callback(rq, 0, blen,
1785 cdrom_newpc_intr_dummy_cb);
1794 ide_cd_pad_transfer(drive, xferfunc, len);
1796 BUG_ON(HWGROUP(drive)->handler != NULL);
1798 ide_set_handler(drive, cdrom_newpc_intr, rq->timeout, NULL);
1802 static ide_startstop_t cdrom_write_intr(ide_drive_t *drive)
1804 int stat, ireason, len, sectors_to_transfer, uptodate;
1805 struct cdrom_info *info = drive->driver_data;
1806 int dma_error = 0, dma = info->dma;
1807 u8 lowcyl = 0, highcyl = 0;
1809 struct request *rq = HWGROUP(drive)->rq;
1811 /* Check for errors. */
1814 dma_error = HWIF(drive)->ide_dma_end(drive);
1816 printk(KERN_ERR "%s: DMA write error\n", drive->name);
1821 if (cdrom_decode_status(drive, 0, &stat))
1825 * using dma, transfer is complete now
1829 return ide_error(drive, "dma error", stat);
1831 ide_end_request(drive, 1, rq->nr_sectors);
1835 /* Read the interrupt reason and the transfer length. */
1836 ireason = HWIF(drive)->INB(IDE_IREASON_REG) & 0x3;
1837 lowcyl = HWIF(drive)->INB(IDE_BCOUNTL_REG);
1838 highcyl = HWIF(drive)->INB(IDE_BCOUNTH_REG);
1840 len = lowcyl + (256 * highcyl);
1842 /* If DRQ is clear, the command has completed. */
1843 if ((stat & DRQ_STAT) == 0) {
1844 /* If we're not done writing, complain.
1845 * Otherwise, complete the command normally.
1848 if (rq->current_nr_sectors > 0) {
1849 printk(KERN_ERR "%s: %s: data underrun (%d blocks)\n",
1850 drive->name, __FUNCTION__,
1851 rq->current_nr_sectors);
1854 cdrom_end_request(drive, uptodate);
1858 /* Check that the drive is expecting to do the same thing we are. */
1859 if (cdrom_write_check_ireason(drive, len, ireason))
1862 sectors_to_transfer = len / SECTOR_SIZE;
1865 * now loop and write out the data
1867 while (sectors_to_transfer > 0) {
1870 if (!rq->current_nr_sectors) {
1871 printk(KERN_ERR "%s: %s: confused, missing data\n",
1872 drive->name, __FUNCTION__);
1877 * Figure out how many sectors we can transfer
1879 this_transfer = min_t(int, sectors_to_transfer, rq->current_nr_sectors);
1881 while (this_transfer > 0) {
1882 HWIF(drive)->atapi_output_bytes(drive, rq->buffer, SECTOR_SIZE);
1883 rq->buffer += SECTOR_SIZE;
1885 --rq->current_nr_sectors;
1888 --sectors_to_transfer;
1892 * current buffer complete, move on
1894 if (rq->current_nr_sectors == 0 && rq->nr_sectors)
1895 cdrom_end_request(drive, 1);
1898 /* re-arm handler */
1899 ide_set_handler(drive, &cdrom_write_intr, ATAPI_WAIT_PC, NULL);
1903 static ide_startstop_t cdrom_start_write_cont(ide_drive_t *drive)
1905 struct request *rq = HWGROUP(drive)->rq;
1907 #if 0 /* the immediate bit */
1908 rq->cmd[1] = 1 << 3;
1910 rq->timeout = ATAPI_WAIT_PC;
1912 return cdrom_transfer_packet_command(drive, rq, cdrom_write_intr);
1915 static ide_startstop_t cdrom_start_write(ide_drive_t *drive, struct request *rq)
1917 struct cdrom_info *info = drive->driver_data;
1918 struct gendisk *g = info->disk;
1919 unsigned short sectors_per_frame = queue_hardsect_size(drive->queue) >> SECTOR_BITS;
1922 * writes *must* be hardware frame aligned
1924 if ((rq->nr_sectors & (sectors_per_frame - 1)) ||
1925 (rq->sector & (sectors_per_frame - 1))) {
1926 cdrom_end_request(drive, 0);
1931 * disk has become write protected
1934 cdrom_end_request(drive, 0);
1938 info->nsectors_buffered = 0;
1940 /* use dma, if possible. we don't need to check more, since we
1941 * know that the transfer is always (at least!) frame aligned */
1942 info->dma = drive->using_dma ? 1 : 0;
1944 info->devinfo.media_written = 1;
1946 /* Start sending the write request to the drive. */
1947 return cdrom_start_packet_command(drive, 32768, cdrom_start_write_cont);
1950 static ide_startstop_t cdrom_do_newpc_cont(ide_drive_t *drive)
1952 struct request *rq = HWGROUP(drive)->rq;
1955 rq->timeout = ATAPI_WAIT_PC;
1957 return cdrom_transfer_packet_command(drive, rq, cdrom_newpc_intr);
1960 static ide_startstop_t cdrom_do_block_pc(ide_drive_t *drive, struct request *rq)
1962 struct cdrom_info *info = drive->driver_data;
1964 rq->cmd_flags |= REQ_QUIET;
1972 int mask = drive->queue->dma_alignment;
1973 unsigned long addr = (unsigned long) page_address(bio_page(rq->bio));
1975 info->dma = drive->using_dma;
1978 * check if dma is safe
1980 * NOTE! The "len" and "addr" checks should possibly have
1983 if ((rq->data_len & 15) || (addr & mask))
1987 /* Start sending the command to the drive. */
1988 return cdrom_start_packet_command(drive, rq->data_len, cdrom_do_newpc_cont);
1991 /****************************************************************************
1992 * cdrom driver request routine.
1994 static ide_startstop_t
1995 ide_do_rw_cdrom (ide_drive_t *drive, struct request *rq, sector_t block)
1997 ide_startstop_t action;
1998 struct cdrom_info *info = drive->driver_data;
2000 if (blk_fs_request(rq)) {
2001 if (CDROM_CONFIG_FLAGS(drive)->seeking) {
2002 unsigned long elapsed = jiffies - info->start_seek;
2003 int stat = HWIF(drive)->INB(IDE_STATUS_REG);
2005 if ((stat & SEEK_STAT) != SEEK_STAT) {
2006 if (elapsed < IDECD_SEEK_TIMEOUT) {
2007 ide_stall_queue(drive, IDECD_SEEK_TIMER);
2010 printk (KERN_ERR "%s: DSC timeout\n", drive->name);
2012 CDROM_CONFIG_FLAGS(drive)->seeking = 0;
2014 if ((rq_data_dir(rq) == READ) && IDE_LARGE_SEEK(info->last_block, block, IDECD_SEEK_THRESHOLD) && drive->dsc_overlap) {
2015 action = cdrom_start_seek(drive, block);
2017 if (rq_data_dir(rq) == READ)
2018 action = cdrom_start_read(drive, block);
2020 action = cdrom_start_write(drive, rq);
2022 info->last_block = block;
2024 } else if (rq->cmd_type == REQ_TYPE_SENSE ||
2025 rq->cmd_type == REQ_TYPE_ATA_PC) {
2026 return cdrom_do_packet_command(drive);
2027 } else if (blk_pc_request(rq)) {
2028 return cdrom_do_block_pc(drive, rq);
2029 } else if (blk_special_request(rq)) {
2031 * right now this can only be a reset...
2033 cdrom_end_request(drive, 1);
2037 blk_dump_rq_flags(rq, "ide-cd bad flags");
2038 cdrom_end_request(drive, 0);
2044 /****************************************************************************
2047 * Routines which queue packet commands take as a final argument a pointer
2048 * to a request_sense struct. If execution of the command results
2049 * in an error with a CHECK CONDITION status, this structure will be filled
2050 * with the results of the subsequent request sense command. The pointer
2051 * can also be NULL, in which case no sense information is returned.
2054 #if ! STANDARD_ATAPI
2058 return (x%10) | ((x/10) << 4);
2065 return (x >> 4) * 10 + (x & 0x0f);
2069 void msf_from_bcd (struct atapi_msf *msf)
2071 msf->minute = bcd2bin (msf->minute);
2072 msf->second = bcd2bin (msf->second);
2073 msf->frame = bcd2bin (msf->frame);
2076 #endif /* not STANDARD_ATAPI */
2080 void lba_to_msf (int lba, byte *m, byte *s, byte *f)
2082 lba += CD_MSF_OFFSET;
2083 lba &= 0xffffff; /* negative lbas use only 24 bits */
2084 *m = lba / (CD_SECS * CD_FRAMES);
2085 lba %= (CD_SECS * CD_FRAMES);
2086 *s = lba / CD_FRAMES;
2087 *f = lba % CD_FRAMES;
2092 int msf_to_lba (byte m, byte s, byte f)
2094 return (((m * CD_SECS) + s) * CD_FRAMES + f) - CD_MSF_OFFSET;
2097 static int cdrom_check_status(ide_drive_t *drive, struct request_sense *sense)
2100 struct cdrom_info *info = drive->driver_data;
2101 struct cdrom_device_info *cdi = &info->devinfo;
2103 cdrom_prepare_request(drive, &req);
2106 req.cmd[0] = GPCMD_TEST_UNIT_READY;
2107 req.cmd_flags |= REQ_QUIET;
2109 #if ! STANDARD_ATAPI
2110 /* the Sanyo 3 CD changer uses byte 7 of TEST_UNIT_READY to
2111 switch CDs instead of supporting the LOAD_UNLOAD opcode */
2113 req.cmd[7] = cdi->sanyo_slot % 3;
2114 #endif /* not STANDARD_ATAPI */
2116 return cdrom_queue_packet_command(drive, &req);
2120 /* Lock the door if LOCKFLAG is nonzero; unlock it otherwise. */
2122 cdrom_lockdoor(ide_drive_t *drive, int lockflag, struct request_sense *sense)
2124 struct request_sense my_sense;
2131 /* If the drive cannot lock the door, just pretend. */
2132 if (CDROM_CONFIG_FLAGS(drive)->no_doorlock) {
2135 cdrom_prepare_request(drive, &req);
2137 req.cmd[0] = GPCMD_PREVENT_ALLOW_MEDIUM_REMOVAL;
2138 req.cmd[4] = lockflag ? 1 : 0;
2139 stat = cdrom_queue_packet_command(drive, &req);
2142 /* If we got an illegal field error, the drive
2143 probably cannot lock the door. */
2145 sense->sense_key == ILLEGAL_REQUEST &&
2146 (sense->asc == 0x24 || sense->asc == 0x20)) {
2147 printk (KERN_ERR "%s: door locking not supported\n",
2149 CDROM_CONFIG_FLAGS(drive)->no_doorlock = 1;
2153 /* no medium, that's alright. */
2154 if (stat != 0 && sense->sense_key == NOT_READY && sense->asc == 0x3a)
2158 CDROM_STATE_FLAGS(drive)->door_locked = lockflag;
2164 /* Eject the disk if EJECTFLAG is 0.
2165 If EJECTFLAG is 1, try to reload the disk. */
2166 static int cdrom_eject(ide_drive_t *drive, int ejectflag,
2167 struct request_sense *sense)
2172 if (CDROM_CONFIG_FLAGS(drive)->no_eject && !ejectflag)
2173 return -EDRIVE_CANT_DO_THIS;
2175 /* reload fails on some drives, if the tray is locked */
2176 if (CDROM_STATE_FLAGS(drive)->door_locked && ejectflag)
2179 cdrom_prepare_request(drive, &req);
2181 /* only tell drive to close tray if open, if it can do that */
2182 if (ejectflag && !CDROM_CONFIG_FLAGS(drive)->close_tray)
2186 req.cmd[0] = GPCMD_START_STOP_UNIT;
2187 req.cmd[4] = loej | (ejectflag != 0);
2188 return cdrom_queue_packet_command(drive, &req);
2191 static int cdrom_read_capacity(ide_drive_t *drive, unsigned long *capacity,
2192 unsigned long *sectors_per_frame,
2193 struct request_sense *sense)
2203 cdrom_prepare_request(drive, &req);
2206 req.cmd[0] = GPCMD_READ_CDVD_CAPACITY;
2207 req.data = (char *)&capbuf;
2208 req.data_len = sizeof(capbuf);
2209 req.cmd_flags |= REQ_QUIET;
2211 stat = cdrom_queue_packet_command(drive, &req);
2213 *capacity = 1 + be32_to_cpu(capbuf.lba);
2214 *sectors_per_frame =
2215 be32_to_cpu(capbuf.blocklen) >> SECTOR_BITS;
2221 static int cdrom_read_tocentry(ide_drive_t *drive, int trackno, int msf_flag,
2222 int format, char *buf, int buflen,
2223 struct request_sense *sense)
2227 cdrom_prepare_request(drive, &req);
2231 req.data_len = buflen;
2232 req.cmd_flags |= REQ_QUIET;
2233 req.cmd[0] = GPCMD_READ_TOC_PMA_ATIP;
2234 req.cmd[6] = trackno;
2235 req.cmd[7] = (buflen >> 8);
2236 req.cmd[8] = (buflen & 0xff);
2237 req.cmd[9] = (format << 6);
2242 return cdrom_queue_packet_command(drive, &req);
2246 /* Try to read the entire TOC for the disk into our internal buffer. */
2247 static int cdrom_read_toc(ide_drive_t *drive, struct request_sense *sense)
2249 int stat, ntracks, i;
2250 struct cdrom_info *info = drive->driver_data;
2251 struct cdrom_device_info *cdi = &info->devinfo;
2252 struct atapi_toc *toc = info->toc;
2254 struct atapi_toc_header hdr;
2255 struct atapi_toc_entry ent;
2258 unsigned long sectors_per_frame = SECTORS_PER_FRAME;
2261 /* Try to allocate space. */
2262 toc = kmalloc(sizeof(struct atapi_toc), GFP_KERNEL);
2264 printk (KERN_ERR "%s: No cdrom TOC buffer!\n", drive->name);
2270 /* Check to see if the existing data is still valid.
2271 If it is, just return. */
2272 (void) cdrom_check_status(drive, sense);
2274 if (CDROM_STATE_FLAGS(drive)->toc_valid)
2277 /* Try to get the total cdrom capacity and sector size. */
2278 stat = cdrom_read_capacity(drive, &toc->capacity, §ors_per_frame,
2281 toc->capacity = 0x1fffff;
2283 set_capacity(info->disk, toc->capacity * sectors_per_frame);
2284 /* Save a private copy of te TOC capacity for error handling */
2285 drive->probed_capacity = toc->capacity * sectors_per_frame;
2287 blk_queue_hardsect_size(drive->queue,
2288 sectors_per_frame << SECTOR_BITS);
2290 /* First read just the header, so we know how long the TOC is. */
2291 stat = cdrom_read_tocentry(drive, 0, 1, 0, (char *) &toc->hdr,
2292 sizeof(struct atapi_toc_header), sense);
2296 #if ! STANDARD_ATAPI
2297 if (CDROM_CONFIG_FLAGS(drive)->toctracks_as_bcd) {
2298 toc->hdr.first_track = bcd2bin(toc->hdr.first_track);
2299 toc->hdr.last_track = bcd2bin(toc->hdr.last_track);
2301 #endif /* not STANDARD_ATAPI */
2303 ntracks = toc->hdr.last_track - toc->hdr.first_track + 1;
2306 if (ntracks > MAX_TRACKS)
2307 ntracks = MAX_TRACKS;
2309 /* Now read the whole schmeer. */
2310 stat = cdrom_read_tocentry(drive, toc->hdr.first_track, 1, 0,
2312 sizeof(struct atapi_toc_header) +
2314 sizeof(struct atapi_toc_entry), sense);
2316 if (stat && toc->hdr.first_track > 1) {
2317 /* Cds with CDI tracks only don't have any TOC entries,
2318 despite of this the returned values are
2319 first_track == last_track = number of CDI tracks + 1,
2320 so that this case is indistinguishable from the same
2321 layout plus an additional audio track.
2322 If we get an error for the regular case, we assume
2323 a CDI without additional audio tracks. In this case
2324 the readable TOC is empty (CDI tracks are not included)
2325 and only holds the Leadout entry. Heiko Eißfeldt */
2327 stat = cdrom_read_tocentry(drive, CDROM_LEADOUT, 1, 0,
2329 sizeof(struct atapi_toc_header) +
2331 sizeof(struct atapi_toc_entry),
2336 #if ! STANDARD_ATAPI
2337 if (CDROM_CONFIG_FLAGS(drive)->toctracks_as_bcd) {
2338 toc->hdr.first_track = bin2bcd(CDROM_LEADOUT);
2339 toc->hdr.last_track = bin2bcd(CDROM_LEADOUT);
2341 #endif /* not STANDARD_ATAPI */
2343 toc->hdr.first_track = CDROM_LEADOUT;
2344 toc->hdr.last_track = CDROM_LEADOUT;
2351 toc->hdr.toc_length = ntohs (toc->hdr.toc_length);
2353 #if ! STANDARD_ATAPI
2354 if (CDROM_CONFIG_FLAGS(drive)->toctracks_as_bcd) {
2355 toc->hdr.first_track = bcd2bin(toc->hdr.first_track);
2356 toc->hdr.last_track = bcd2bin(toc->hdr.last_track);
2358 #endif /* not STANDARD_ATAPI */
2360 for (i=0; i<=ntracks; i++) {
2361 #if ! STANDARD_ATAPI
2362 if (CDROM_CONFIG_FLAGS(drive)->tocaddr_as_bcd) {
2363 if (CDROM_CONFIG_FLAGS(drive)->toctracks_as_bcd)
2364 toc->ent[i].track = bcd2bin(toc->ent[i].track);
2365 msf_from_bcd(&toc->ent[i].addr.msf);
2367 #endif /* not STANDARD_ATAPI */
2368 toc->ent[i].addr.lba = msf_to_lba (toc->ent[i].addr.msf.minute,
2369 toc->ent[i].addr.msf.second,
2370 toc->ent[i].addr.msf.frame);
2373 /* Read the multisession information. */
2374 if (toc->hdr.first_track != CDROM_LEADOUT) {
2375 /* Read the multisession information. */
2376 stat = cdrom_read_tocentry(drive, 0, 0, 1, (char *)&ms_tmp,
2377 sizeof(ms_tmp), sense);
2381 toc->last_session_lba = be32_to_cpu(ms_tmp.ent.addr.lba);
2383 ms_tmp.hdr.first_track = ms_tmp.hdr.last_track = CDROM_LEADOUT;
2384 toc->last_session_lba = msf_to_lba(0, 2, 0); /* 0m 2s 0f */
2387 #if ! STANDARD_ATAPI
2388 if (CDROM_CONFIG_FLAGS(drive)->tocaddr_as_bcd) {
2389 /* Re-read multisession information using MSF format */
2390 stat = cdrom_read_tocentry(drive, 0, 1, 1, (char *)&ms_tmp,
2391 sizeof(ms_tmp), sense);
2395 msf_from_bcd (&ms_tmp.ent.addr.msf);
2396 toc->last_session_lba = msf_to_lba(ms_tmp.ent.addr.msf.minute,
2397 ms_tmp.ent.addr.msf.second,
2398 ms_tmp.ent.addr.msf.frame);
2400 #endif /* not STANDARD_ATAPI */
2402 toc->xa_flag = (ms_tmp.hdr.first_track != ms_tmp.hdr.last_track);
2404 /* Now try to get the total cdrom capacity. */
2405 stat = cdrom_get_last_written(cdi, &last_written);
2406 if (!stat && (last_written > toc->capacity)) {
2407 toc->capacity = last_written;
2408 set_capacity(info->disk, toc->capacity * sectors_per_frame);
2409 drive->probed_capacity = toc->capacity * sectors_per_frame;
2412 /* Remember that we've read this stuff. */
2413 CDROM_STATE_FLAGS(drive)->toc_valid = 1;
2419 static int cdrom_read_subchannel(ide_drive_t *drive, int format, char *buf,
2420 int buflen, struct request_sense *sense)
2424 cdrom_prepare_request(drive, &req);
2428 req.data_len = buflen;
2429 req.cmd[0] = GPCMD_READ_SUBCHANNEL;
2430 req.cmd[1] = 2; /* MSF addressing */
2431 req.cmd[2] = 0x40; /* request subQ data */
2432 req.cmd[3] = format;
2433 req.cmd[7] = (buflen >> 8);
2434 req.cmd[8] = (buflen & 0xff);
2435 return cdrom_queue_packet_command(drive, &req);
2438 /* ATAPI cdrom drives are free to select the speed you request or any slower
2439 rate :-( Requesting too fast a speed will _not_ produce an error. */
2440 static int cdrom_select_speed(ide_drive_t *drive, int speed,
2441 struct request_sense *sense)
2444 cdrom_prepare_request(drive, &req);
2448 speed = 0xffff; /* set to max */
2450 speed *= 177; /* Nx to kbytes/s */
2452 req.cmd[0] = GPCMD_SET_SPEED;
2453 /* Read Drive speed in kbytes/second MSB */
2454 req.cmd[2] = (speed >> 8) & 0xff;
2455 /* Read Drive speed in kbytes/second LSB */
2456 req.cmd[3] = speed & 0xff;
2457 if (CDROM_CONFIG_FLAGS(drive)->cd_r ||
2458 CDROM_CONFIG_FLAGS(drive)->cd_rw ||
2459 CDROM_CONFIG_FLAGS(drive)->dvd_r) {
2460 /* Write Drive speed in kbytes/second MSB */
2461 req.cmd[4] = (speed >> 8) & 0xff;
2462 /* Write Drive speed in kbytes/second LSB */
2463 req.cmd[5] = speed & 0xff;
2466 return cdrom_queue_packet_command(drive, &req);
2469 static int cdrom_play_audio(ide_drive_t *drive, int lba_start, int lba_end)
2471 struct request_sense sense;
2474 cdrom_prepare_request(drive, &req);
2477 req.cmd[0] = GPCMD_PLAY_AUDIO_MSF;
2478 lba_to_msf(lba_start, &req.cmd[3], &req.cmd[4], &req.cmd[5]);
2479 lba_to_msf(lba_end-1, &req.cmd[6], &req.cmd[7], &req.cmd[8]);
2481 return cdrom_queue_packet_command(drive, &req);
2484 static int cdrom_get_toc_entry(ide_drive_t *drive, int track,
2485 struct atapi_toc_entry **ent)
2487 struct cdrom_info *info = drive->driver_data;
2488 struct atapi_toc *toc = info->toc;
2492 * don't serve cached data, if the toc isn't valid
2494 if (!CDROM_STATE_FLAGS(drive)->toc_valid)
2497 /* Check validity of requested track number. */
2498 ntracks = toc->hdr.last_track - toc->hdr.first_track + 1;
2499 if (toc->hdr.first_track == CDROM_LEADOUT) ntracks = 0;
2500 if (track == CDROM_LEADOUT)
2501 *ent = &toc->ent[ntracks];
2502 else if (track < toc->hdr.first_track ||
2503 track > toc->hdr.last_track)
2506 *ent = &toc->ent[track - toc->hdr.first_track];
2511 /* the generic packet interface to cdrom.c */
2512 static int ide_cdrom_packet(struct cdrom_device_info *cdi,
2513 struct packet_command *cgc)
2516 ide_drive_t *drive = cdi->handle;
2518 if (cgc->timeout <= 0)
2519 cgc->timeout = ATAPI_WAIT_PC;
2521 /* here we queue the commands from the uniform CD-ROM
2522 layer. the packet must be complete, as we do not
2524 cdrom_prepare_request(drive, &req);
2525 memcpy(req.cmd, cgc->cmd, CDROM_PACKET_SIZE);
2527 memset(cgc->sense, 0, sizeof(struct request_sense));
2528 req.data = cgc->buffer;
2529 req.data_len = cgc->buflen;
2530 req.timeout = cgc->timeout;
2533 req.cmd_flags |= REQ_QUIET;
2535 req.sense = cgc->sense;
2536 cgc->stat = cdrom_queue_packet_command(drive, &req);
2538 cgc->buflen -= req.data_len;
2543 int ide_cdrom_audio_ioctl (struct cdrom_device_info *cdi,
2544 unsigned int cmd, void *arg)
2547 ide_drive_t *drive = cdi->handle;
2548 struct cdrom_info *info = drive->driver_data;
2553 * emulate PLAY_AUDIO_TI command with PLAY_AUDIO_10, since
2554 * atapi doesn't support it
2556 case CDROMPLAYTRKIND: {
2557 unsigned long lba_start, lba_end;
2558 struct cdrom_ti *ti = arg;
2559 struct atapi_toc_entry *first_toc, *last_toc;
2561 stat = cdrom_get_toc_entry(drive, ti->cdti_trk0, &first_toc);
2565 stat = cdrom_get_toc_entry(drive, ti->cdti_trk1, &last_toc);
2569 if (ti->cdti_trk1 != CDROM_LEADOUT)
2571 lba_start = first_toc->addr.lba;
2572 lba_end = last_toc->addr.lba;
2574 if (lba_end <= lba_start)
2577 return cdrom_play_audio(drive, lba_start, lba_end);
2580 case CDROMREADTOCHDR: {
2581 struct cdrom_tochdr *tochdr = arg;
2582 struct atapi_toc *toc;
2584 /* Make sure our saved TOC is valid. */
2585 stat = cdrom_read_toc(drive, NULL);
2590 tochdr->cdth_trk0 = toc->hdr.first_track;
2591 tochdr->cdth_trk1 = toc->hdr.last_track;
2596 case CDROMREADTOCENTRY: {
2597 struct cdrom_tocentry *tocentry = arg;
2598 struct atapi_toc_entry *toce;
2600 stat = cdrom_get_toc_entry(drive, tocentry->cdte_track, &toce);
2604 tocentry->cdte_ctrl = toce->control;
2605 tocentry->cdte_adr = toce->adr;
2606 if (tocentry->cdte_format == CDROM_MSF) {
2607 lba_to_msf (toce->addr.lba,
2608 &tocentry->cdte_addr.msf.minute,
2609 &tocentry->cdte_addr.msf.second,
2610 &tocentry->cdte_addr.msf.frame);
2612 tocentry->cdte_addr.lba = toce->addr.lba;
2623 int ide_cdrom_reset (struct cdrom_device_info *cdi)
2625 ide_drive_t *drive = cdi->handle;
2626 struct request_sense sense;
2630 cdrom_prepare_request(drive, &req);
2631 req.cmd_type = REQ_TYPE_SPECIAL;
2632 req.cmd_flags = REQ_QUIET;
2633 ret = ide_do_drive_cmd(drive, &req, ide_wait);
2636 * A reset will unlock the door. If it was previously locked,
2639 if (CDROM_STATE_FLAGS(drive)->door_locked)
2640 (void) cdrom_lockdoor(drive, 1, &sense);
2647 int ide_cdrom_tray_move (struct cdrom_device_info *cdi, int position)
2649 ide_drive_t *drive = cdi->handle;
2650 struct request_sense sense;
2653 int stat = cdrom_lockdoor(drive, 0, &sense);
2658 return cdrom_eject(drive, !position, &sense);
2662 int ide_cdrom_lock_door (struct cdrom_device_info *cdi, int lock)
2664 ide_drive_t *drive = cdi->handle;
2665 return cdrom_lockdoor(drive, lock, NULL);
2669 int ide_cdrom_get_capabilities(ide_drive_t *drive, struct atapi_capabilities_page *cap)
2671 struct cdrom_info *info = drive->driver_data;
2672 struct cdrom_device_info *cdi = &info->devinfo;
2673 struct packet_command cgc;
2674 int stat, attempts = 3, size = sizeof(*cap);
2677 * ACER50 (and others?) require the full spec length mode sense
2678 * page capabilities size, but older drives break.
2680 if (!(!strcmp(drive->id->model, "ATAPI CD ROM DRIVE 50X MAX") ||
2681 !strcmp(drive->id->model, "WPI CDS-32X")))
2682 size -= sizeof(cap->pad);
2684 init_cdrom_command(&cgc, cap, size, CGC_DATA_UNKNOWN);
2685 do { /* we seem to get stat=0x01,err=0x00 the first time (??) */
2686 stat = cdrom_mode_sense(cdi, &cgc, GPMODE_CAPABILITIES_PAGE, 0);
2689 } while (--attempts);
2694 void ide_cdrom_update_speed (ide_drive_t *drive, struct atapi_capabilities_page *cap)
2696 /* The ACER/AOpen 24X cdrom has the speed fields byte-swapped */
2697 if (!drive->id->model[0] &&
2698 !strncmp(drive->id->fw_rev, "241N", 4)) {
2699 CDROM_STATE_FLAGS(drive)->current_speed =
2700 (le16_to_cpu(cap->curspeed) + (176/2)) / 176;
2701 CDROM_CONFIG_FLAGS(drive)->max_speed =
2702 (le16_to_cpu(cap->maxspeed) + (176/2)) / 176;
2704 CDROM_STATE_FLAGS(drive)->current_speed =
2705 (be16_to_cpu(cap->curspeed) + (176/2)) / 176;
2706 CDROM_CONFIG_FLAGS(drive)->max_speed =
2707 (be16_to_cpu(cap->maxspeed) + (176/2)) / 176;
2712 int ide_cdrom_select_speed (struct cdrom_device_info *cdi, int speed)
2714 ide_drive_t *drive = cdi->handle;
2715 struct request_sense sense;
2716 struct atapi_capabilities_page cap;
2719 if ((stat = cdrom_select_speed(drive, speed, &sense)) < 0)
2722 if (!ide_cdrom_get_capabilities(drive, &cap)) {
2723 ide_cdrom_update_speed(drive, &cap);
2724 cdi->speed = CDROM_STATE_FLAGS(drive)->current_speed;
2730 * add logic to try GET_EVENT command first to check for media and tray
2731 * status. this should be supported by newer cd-r/w and all DVD etc
2735 int ide_cdrom_drive_status (struct cdrom_device_info *cdi, int slot_nr)
2737 ide_drive_t *drive = cdi->handle;
2738 struct media_event_desc med;
2739 struct request_sense sense;
2742 if (slot_nr != CDSL_CURRENT)
2745 stat = cdrom_check_status(drive, &sense);
2746 if (!stat || sense.sense_key == UNIT_ATTENTION)
2749 if (!cdrom_get_media_event(cdi, &med)) {
2750 if (med.media_present)
2752 else if (med.door_open)
2753 return CDS_TRAY_OPEN;
2758 if (sense.sense_key == NOT_READY && sense.asc == 0x04 && sense.ascq == 0x04)
2762 * If not using Mt Fuji extended media tray reports,
2763 * just return TRAY_OPEN since ATAPI doesn't provide
2764 * any other way to detect this...
2766 if (sense.sense_key == NOT_READY) {
2767 if (sense.asc == 0x3a && sense.ascq == 1)
2770 return CDS_TRAY_OPEN;
2772 return CDS_DRIVE_NOT_READY;
2776 int ide_cdrom_get_last_session (struct cdrom_device_info *cdi,
2777 struct cdrom_multisession *ms_info)
2779 struct atapi_toc *toc;
2780 ide_drive_t *drive = cdi->handle;
2781 struct cdrom_info *info = drive->driver_data;
2782 struct request_sense sense;
2785 if (!CDROM_STATE_FLAGS(drive)->toc_valid || info->toc == NULL)
2786 if ((ret = cdrom_read_toc(drive, &sense)))
2790 ms_info->addr.lba = toc->last_session_lba;
2791 ms_info->xa_flag = toc->xa_flag;
2797 int ide_cdrom_get_mcn (struct cdrom_device_info *cdi,
2798 struct cdrom_mcn *mcn_info)
2802 ide_drive_t *drive = cdi->handle;
2805 if ((stat = cdrom_read_subchannel(drive, 2, mcnbuf, sizeof (mcnbuf), NULL)))
2808 memcpy (mcn_info->medium_catalog_number, mcnbuf+9,
2809 sizeof (mcn_info->medium_catalog_number)-1);
2810 mcn_info->medium_catalog_number[sizeof (mcn_info->medium_catalog_number)-1]
2818 /****************************************************************************
2819 * Other driver requests (open, close, check media change).
2823 int ide_cdrom_check_media_change_real (struct cdrom_device_info *cdi,
2826 ide_drive_t *drive = cdi->handle;
2829 if (slot_nr == CDSL_CURRENT) {
2830 (void) cdrom_check_status(drive, NULL);
2831 retval = CDROM_STATE_FLAGS(drive)->media_changed;
2832 CDROM_STATE_FLAGS(drive)->media_changed = 0;
2841 int ide_cdrom_open_real (struct cdrom_device_info *cdi, int purpose)
2847 * Close down the device. Invalidate all cached blocks.
2851 void ide_cdrom_release_real (struct cdrom_device_info *cdi)
2853 ide_drive_t *drive = cdi->handle;
2855 if (!cdi->use_count)
2856 CDROM_STATE_FLAGS(drive)->toc_valid = 0;
2861 /****************************************************************************
2862 * Device initialization.
2864 static struct cdrom_device_ops ide_cdrom_dops = {
2865 .open = ide_cdrom_open_real,
2866 .release = ide_cdrom_release_real,
2867 .drive_status = ide_cdrom_drive_status,
2868 .media_changed = ide_cdrom_check_media_change_real,
2869 .tray_move = ide_cdrom_tray_move,
2870 .lock_door = ide_cdrom_lock_door,
2871 .select_speed = ide_cdrom_select_speed,
2872 .get_last_session = ide_cdrom_get_last_session,
2873 .get_mcn = ide_cdrom_get_mcn,
2874 .reset = ide_cdrom_reset,
2875 .audio_ioctl = ide_cdrom_audio_ioctl,
2876 .capability = CDC_CLOSE_TRAY | CDC_OPEN_TRAY | CDC_LOCK |
2877 CDC_SELECT_SPEED | CDC_SELECT_DISC |
2878 CDC_MULTI_SESSION | CDC_MCN |
2879 CDC_MEDIA_CHANGED | CDC_PLAY_AUDIO | CDC_RESET |
2880 CDC_DRIVE_STATUS | CDC_CD_R |
2881 CDC_CD_RW | CDC_DVD | CDC_DVD_R| CDC_DVD_RAM |
2882 CDC_GENERIC_PACKET | CDC_MO_DRIVE | CDC_MRW |
2883 CDC_MRW_W | CDC_RAM,
2884 .generic_packet = ide_cdrom_packet,
2887 static int ide_cdrom_register (ide_drive_t *drive, int nslots)
2889 struct cdrom_info *info = drive->driver_data;
2890 struct cdrom_device_info *devinfo = &info->devinfo;
2892 devinfo->ops = &ide_cdrom_dops;
2894 devinfo->speed = CDROM_STATE_FLAGS(drive)->current_speed;
2895 devinfo->capacity = nslots;
2896 devinfo->handle = drive;
2897 strcpy(devinfo->name, drive->name);
2899 /* set capability mask to match the probe. */
2900 if (!CDROM_CONFIG_FLAGS(drive)->cd_r)
2901 devinfo->mask |= CDC_CD_R;
2902 if (!CDROM_CONFIG_FLAGS(drive)->cd_rw)
2903 devinfo->mask |= CDC_CD_RW;
2904 if (!CDROM_CONFIG_FLAGS(drive)->dvd)
2905 devinfo->mask |= CDC_DVD;
2906 if (!CDROM_CONFIG_FLAGS(drive)->dvd_r)
2907 devinfo->mask |= CDC_DVD_R;
2908 if (!CDROM_CONFIG_FLAGS(drive)->dvd_ram)
2909 devinfo->mask |= CDC_DVD_RAM;
2910 if (!CDROM_CONFIG_FLAGS(drive)->is_changer)
2911 devinfo->mask |= CDC_SELECT_DISC;
2912 if (!CDROM_CONFIG_FLAGS(drive)->audio_play)
2913 devinfo->mask |= CDC_PLAY_AUDIO;
2914 if (!CDROM_CONFIG_FLAGS(drive)->close_tray)
2915 devinfo->mask |= CDC_CLOSE_TRAY;
2916 if (!CDROM_CONFIG_FLAGS(drive)->mo_drive)
2917 devinfo->mask |= CDC_MO_DRIVE;
2918 if (!CDROM_CONFIG_FLAGS(drive)->ram)
2919 devinfo->mask |= CDC_RAM;
2921 if (CDROM_CONFIG_FLAGS(drive)->no_speed_select)
2922 devinfo->mask |= CDC_SELECT_SPEED;
2924 devinfo->disk = info->disk;
2925 return register_cdrom(devinfo);
2929 int ide_cdrom_probe_capabilities (ide_drive_t *drive)
2931 struct cdrom_info *info = drive->driver_data;
2932 struct cdrom_device_info *cdi = &info->devinfo;
2933 struct atapi_capabilities_page cap;
2936 if (drive->media == ide_optical) {
2937 CDROM_CONFIG_FLAGS(drive)->mo_drive = 1;
2938 CDROM_CONFIG_FLAGS(drive)->ram = 1;
2939 printk(KERN_ERR "%s: ATAPI magneto-optical drive\n", drive->name);
2943 if (CDROM_CONFIG_FLAGS(drive)->nec260 ||
2944 !strcmp(drive->id->model,"STINGRAY 8422 IDE 8X CD-ROM 7-27-95")) {
2945 CDROM_CONFIG_FLAGS(drive)->no_eject = 0;
2946 CDROM_CONFIG_FLAGS(drive)->audio_play = 1;
2951 * we have to cheat a little here. the packet will eventually
2952 * be queued with ide_cdrom_packet(), which extracts the
2953 * drive from cdi->handle. Since this device hasn't been
2954 * registered with the Uniform layer yet, it can't do this.
2955 * Same goes for cdi->ops.
2957 cdi->handle = drive;
2958 cdi->ops = &ide_cdrom_dops;
2960 if (ide_cdrom_get_capabilities(drive, &cap))
2964 CDROM_CONFIG_FLAGS(drive)->no_doorlock = 1;
2966 CDROM_CONFIG_FLAGS(drive)->no_eject = 0;
2968 CDROM_CONFIG_FLAGS(drive)->cd_r = 1;
2969 if (cap.cd_rw_write) {
2970 CDROM_CONFIG_FLAGS(drive)->cd_rw = 1;
2971 CDROM_CONFIG_FLAGS(drive)->ram = 1;
2974 CDROM_CONFIG_FLAGS(drive)->test_write = 1;
2975 if (cap.dvd_ram_read || cap.dvd_r_read || cap.dvd_rom)
2976 CDROM_CONFIG_FLAGS(drive)->dvd = 1;
2977 if (cap.dvd_ram_write) {
2978 CDROM_CONFIG_FLAGS(drive)->dvd_ram = 1;
2979 CDROM_CONFIG_FLAGS(drive)->ram = 1;
2981 if (cap.dvd_r_write)
2982 CDROM_CONFIG_FLAGS(drive)->dvd_r = 1;
2984 CDROM_CONFIG_FLAGS(drive)->audio_play = 1;
2985 if (cap.mechtype == mechtype_caddy || cap.mechtype == mechtype_popup)
2986 CDROM_CONFIG_FLAGS(drive)->close_tray = 0;
2988 /* Some drives used by Apple don't advertise audio play
2989 * but they do support reading TOC & audio datas
2991 if (strcmp(drive->id->model, "MATSHITADVD-ROM SR-8187") == 0 ||
2992 strcmp(drive->id->model, "MATSHITADVD-ROM SR-8186") == 0 ||
2993 strcmp(drive->id->model, "MATSHITADVD-ROM SR-8176") == 0 ||
2994 strcmp(drive->id->model, "MATSHITADVD-ROM SR-8174") == 0)
2995 CDROM_CONFIG_FLAGS(drive)->audio_play = 1;
2997 #if ! STANDARD_ATAPI
2998 if (cdi->sanyo_slot > 0) {
2999 CDROM_CONFIG_FLAGS(drive)->is_changer = 1;
3004 #endif /* not STANDARD_ATAPI */
3005 if (cap.mechtype == mechtype_individual_changer ||
3006 cap.mechtype == mechtype_cartridge_changer) {
3007 if ((nslots = cdrom_number_of_slots(cdi)) > 1) {
3008 CDROM_CONFIG_FLAGS(drive)->is_changer = 1;
3009 CDROM_CONFIG_FLAGS(drive)->supp_disc_present = 1;
3013 ide_cdrom_update_speed(drive, &cap);
3014 /* don't print speed if the drive reported 0.
3016 printk(KERN_INFO "%s: ATAPI", drive->name);
3017 if (CDROM_CONFIG_FLAGS(drive)->max_speed)
3018 printk(" %dX", CDROM_CONFIG_FLAGS(drive)->max_speed);
3019 printk(" %s", CDROM_CONFIG_FLAGS(drive)->dvd ? "DVD-ROM" : "CD-ROM");
3021 if (CDROM_CONFIG_FLAGS(drive)->dvd_r|CDROM_CONFIG_FLAGS(drive)->dvd_ram)
3023 (CDROM_CONFIG_FLAGS(drive)->dvd_r)? "-R" : "",
3024 (CDROM_CONFIG_FLAGS(drive)->dvd_ram)? "-RAM" : "");
3026 if (CDROM_CONFIG_FLAGS(drive)->cd_r|CDROM_CONFIG_FLAGS(drive)->cd_rw)
3028 (CDROM_CONFIG_FLAGS(drive)->cd_r)? "-R" : "",
3029 (CDROM_CONFIG_FLAGS(drive)->cd_rw)? "/RW" : "");
3031 if (CDROM_CONFIG_FLAGS(drive)->is_changer)
3032 printk(" changer w/%d slots", nslots);
3036 printk(KERN_CONT ", %dkB Cache\n", be16_to_cpu(cap.buffer_size));
3041 #ifdef CONFIG_IDE_PROC_FS
3042 static void ide_cdrom_add_settings(ide_drive_t *drive)
3044 ide_add_setting(drive, "dsc_overlap", SETTING_RW, TYPE_BYTE, 0, 1, 1, 1, &drive->dsc_overlap, NULL);
3047 static inline void ide_cdrom_add_settings(ide_drive_t *drive) { ; }
3051 * standard prep_rq_fn that builds 10 byte cmds
3053 static int ide_cdrom_prep_fs(struct request_queue *q, struct request *rq)
3055 int hard_sect = queue_hardsect_size(q);
3056 long block = (long)rq->hard_sector / (hard_sect >> 9);
3057 unsigned long blocks = rq->hard_nr_sectors / (hard_sect >> 9);
3059 memset(rq->cmd, 0, sizeof(rq->cmd));
3061 if (rq_data_dir(rq) == READ)
3062 rq->cmd[0] = GPCMD_READ_10;
3064 rq->cmd[0] = GPCMD_WRITE_10;
3069 rq->cmd[2] = (block >> 24) & 0xff;
3070 rq->cmd[3] = (block >> 16) & 0xff;
3071 rq->cmd[4] = (block >> 8) & 0xff;
3072 rq->cmd[5] = block & 0xff;
3075 * and transfer length
3077 rq->cmd[7] = (blocks >> 8) & 0xff;
3078 rq->cmd[8] = blocks & 0xff;
3084 * Most of the SCSI commands are supported directly by ATAPI devices.
3085 * This transform handles the few exceptions.
3087 static int ide_cdrom_prep_pc(struct request *rq)
3092 * Transform 6-byte read/write commands to the 10-byte version
3094 if (c[0] == READ_6 || c[0] == WRITE_6) {
3101 c[0] += (READ_10 - READ_6);
3107 * it's silly to pretend we understand 6-byte sense commands, just
3108 * reject with ILLEGAL_REQUEST and the caller should take the
3109 * appropriate action
3111 if (c[0] == MODE_SENSE || c[0] == MODE_SELECT) {
3112 rq->errors = ILLEGAL_REQUEST;
3113 return BLKPREP_KILL;
3119 static int ide_cdrom_prep_fn(struct request_queue *q, struct request *rq)
3121 if (blk_fs_request(rq))
3122 return ide_cdrom_prep_fs(q, rq);
3123 else if (blk_pc_request(rq))
3124 return ide_cdrom_prep_pc(rq);
3130 int ide_cdrom_setup (ide_drive_t *drive)
3132 struct cdrom_info *info = drive->driver_data;
3133 struct cdrom_device_info *cdi = &info->devinfo;
3136 blk_queue_prep_rq(drive->queue, ide_cdrom_prep_fn);
3137 blk_queue_dma_alignment(drive->queue, 31);
3138 drive->queue->unplug_delay = (1 * HZ) / 1000;
3139 if (!drive->queue->unplug_delay)
3140 drive->queue->unplug_delay = 1;
3142 drive->special.all = 0;
3144 CDROM_STATE_FLAGS(drive)->media_changed = 1;
3145 CDROM_STATE_FLAGS(drive)->toc_valid = 0;
3146 CDROM_STATE_FLAGS(drive)->door_locked = 0;
3149 CDROM_CONFIG_FLAGS(drive)->no_doorlock = 1;
3151 CDROM_CONFIG_FLAGS(drive)->no_doorlock = 0;
3154 CDROM_CONFIG_FLAGS(drive)->drq_interrupt = ((drive->id->config & 0x0060) == 0x20);
3155 CDROM_CONFIG_FLAGS(drive)->is_changer = 0;
3156 CDROM_CONFIG_FLAGS(drive)->cd_r = 0;
3157 CDROM_CONFIG_FLAGS(drive)->cd_rw = 0;
3158 CDROM_CONFIG_FLAGS(drive)->test_write = 0;
3159 CDROM_CONFIG_FLAGS(drive)->dvd = 0;
3160 CDROM_CONFIG_FLAGS(drive)->dvd_r = 0;
3161 CDROM_CONFIG_FLAGS(drive)->dvd_ram = 0;
3162 CDROM_CONFIG_FLAGS(drive)->no_eject = 1;
3163 CDROM_CONFIG_FLAGS(drive)->supp_disc_present = 0;
3164 CDROM_CONFIG_FLAGS(drive)->audio_play = 0;
3165 CDROM_CONFIG_FLAGS(drive)->close_tray = 1;
3167 /* limit transfer size per interrupt. */
3168 CDROM_CONFIG_FLAGS(drive)->limit_nframes = 0;
3169 /* a testament to the nice quality of Samsung drives... */
3170 if (!strcmp(drive->id->model, "SAMSUNG CD-ROM SCR-2430"))
3171 CDROM_CONFIG_FLAGS(drive)->limit_nframes = 1;
3172 else if (!strcmp(drive->id->model, "SAMSUNG CD-ROM SCR-2432"))
3173 CDROM_CONFIG_FLAGS(drive)->limit_nframes = 1;
3174 /* the 3231 model does not support the SET_CD_SPEED command */
3175 else if (!strcmp(drive->id->model, "SAMSUNG CD-ROM SCR-3231"))
3176 CDROM_CONFIG_FLAGS(drive)->no_speed_select = 1;
3178 #if ! STANDARD_ATAPI
3179 /* by default Sanyo 3 CD changer support is turned off and
3180 ATAPI Rev 2.2+ standard support for CD changers is used */
3181 cdi->sanyo_slot = 0;
3183 CDROM_CONFIG_FLAGS(drive)->nec260 = 0;
3184 CDROM_CONFIG_FLAGS(drive)->toctracks_as_bcd = 0;
3185 CDROM_CONFIG_FLAGS(drive)->tocaddr_as_bcd = 0;
3186 CDROM_CONFIG_FLAGS(drive)->playmsf_as_bcd = 0;
3187 CDROM_CONFIG_FLAGS(drive)->subchan_as_bcd = 0;
3189 if (strcmp (drive->id->model, "V003S0DS") == 0 &&
3190 drive->id->fw_rev[4] == '1' &&
3191 drive->id->fw_rev[6] <= '2') {
3193 Some versions of this drive like to talk BCD. */
3194 CDROM_CONFIG_FLAGS(drive)->toctracks_as_bcd = 1;
3195 CDROM_CONFIG_FLAGS(drive)->tocaddr_as_bcd = 1;
3196 CDROM_CONFIG_FLAGS(drive)->playmsf_as_bcd = 1;
3197 CDROM_CONFIG_FLAGS(drive)->subchan_as_bcd = 1;
3200 else if (strcmp (drive->id->model, "V006E0DS") == 0 &&
3201 drive->id->fw_rev[4] == '1' &&
3202 drive->id->fw_rev[6] <= '2') {
3203 /* Vertos 600 ESD. */
3204 CDROM_CONFIG_FLAGS(drive)->toctracks_as_bcd = 1;
3206 else if (strcmp(drive->id->model, "NEC CD-ROM DRIVE:260") == 0 &&
3207 strncmp(drive->id->fw_rev, "1.01", 4) == 0) { /* FIXME */
3208 /* Old NEC260 (not R).
3209 This drive was released before the 1.2 version
3211 CDROM_CONFIG_FLAGS(drive)->tocaddr_as_bcd = 1;
3212 CDROM_CONFIG_FLAGS(drive)->playmsf_as_bcd = 1;
3213 CDROM_CONFIG_FLAGS(drive)->subchan_as_bcd = 1;
3214 CDROM_CONFIG_FLAGS(drive)->nec260 = 1;
3216 else if (strcmp(drive->id->model, "WEARNES CDD-120") == 0 &&
3217 strncmp(drive->id->fw_rev, "A1.1", 4) == 0) { /* FIXME */
3219 CDROM_CONFIG_FLAGS(drive)->playmsf_as_bcd = 1;
3220 CDROM_CONFIG_FLAGS(drive)->subchan_as_bcd = 1;
3222 /* Sanyo 3 CD changer uses a non-standard command
3224 else if ((strcmp(drive->id->model, "CD-ROM CDR-C3 G") == 0) ||
3225 (strcmp(drive->id->model, "CD-ROM CDR-C3G") == 0) ||
3226 (strcmp(drive->id->model, "CD-ROM CDR_C36") == 0)) {
3227 /* uses CD in slot 0 when value is set to 3 */
3228 cdi->sanyo_slot = 3;
3230 #endif /* not STANDARD_ATAPI */
3233 info->buffer = NULL;
3234 info->sector_buffered = 0;
3235 info->nsectors_buffered = 0;
3236 info->changer_info = NULL;
3237 info->last_block = 0;
3238 info->start_seek = 0;
3240 nslots = ide_cdrom_probe_capabilities (drive);
3243 * set correct block size
3245 blk_queue_hardsect_size(drive->queue, CD_FRAMESIZE);
3247 if (drive->autotune == IDE_TUNE_DEFAULT ||
3248 drive->autotune == IDE_TUNE_AUTO)
3249 drive->dsc_overlap = (drive->next != drive);
3251 if (ide_cdrom_register(drive, nslots)) {
3252 printk (KERN_ERR "%s: ide_cdrom_setup failed to register device with the cdrom driver.\n", drive->name);
3253 info->devinfo.handle = NULL;
3256 ide_cdrom_add_settings(drive);
3260 #ifdef CONFIG_IDE_PROC_FS
3262 sector_t ide_cdrom_capacity (ide_drive_t *drive)
3264 unsigned long capacity, sectors_per_frame;
3266 if (cdrom_read_capacity(drive, &capacity, §ors_per_frame, NULL))
3269 return capacity * sectors_per_frame;
3273 static void ide_cd_remove(ide_drive_t *drive)
3275 struct cdrom_info *info = drive->driver_data;
3277 ide_proc_unregister_driver(drive, info->driver);
3279 del_gendisk(info->disk);
3284 static void ide_cd_release(struct kref *kref)
3286 struct cdrom_info *info = to_ide_cd(kref);
3287 struct cdrom_device_info *devinfo = &info->devinfo;
3288 ide_drive_t *drive = info->drive;
3289 struct gendisk *g = info->disk;
3291 kfree(info->buffer);
3293 kfree(info->changer_info);
3294 if (devinfo->handle == drive && unregister_cdrom(devinfo))
3295 printk(KERN_ERR "%s: %s failed to unregister device from the cdrom "
3296 "driver.\n", __FUNCTION__, drive->name);
3297 drive->dsc_overlap = 0;
3298 drive->driver_data = NULL;
3299 blk_queue_prep_rq(drive->queue, NULL);
3300 g->private_data = NULL;
3305 static int ide_cd_probe(ide_drive_t *);
3307 #ifdef CONFIG_IDE_PROC_FS
3308 static int proc_idecd_read_capacity
3309 (char *page, char **start, off_t off, int count, int *eof, void *data)
3311 ide_drive_t *drive = data;
3314 len = sprintf(page,"%llu\n", (long long)ide_cdrom_capacity(drive));
3315 PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
3318 static ide_proc_entry_t idecd_proc[] = {
3319 { "capacity", S_IFREG|S_IRUGO, proc_idecd_read_capacity, NULL },
3320 { NULL, 0, NULL, NULL }
3324 static ide_driver_t ide_cdrom_driver = {
3326 .owner = THIS_MODULE,
3327 .name = "ide-cdrom",
3328 .bus = &ide_bus_type,
3330 .probe = ide_cd_probe,
3331 .remove = ide_cd_remove,
3332 .version = IDECD_VERSION,
3334 .supports_dsc_overlap = 1,
3335 .do_request = ide_do_rw_cdrom,
3336 .end_request = ide_end_request,
3337 .error = __ide_error,
3338 .abort = __ide_abort,
3339 #ifdef CONFIG_IDE_PROC_FS
3344 static int idecd_open(struct inode * inode, struct file * file)
3346 struct gendisk *disk = inode->i_bdev->bd_disk;
3347 struct cdrom_info *info;
3350 if (!(info = ide_cd_get(disk)))
3354 info->buffer = kmalloc(SECTOR_BUFFER_SIZE, GFP_KERNEL|__GFP_REPEAT);
3357 rc = cdrom_open(&info->devinfo, inode, file);
3365 static int idecd_release(struct inode * inode, struct file * file)
3367 struct gendisk *disk = inode->i_bdev->bd_disk;
3368 struct cdrom_info *info = ide_cd_g(disk);
3370 cdrom_release (&info->devinfo, file);
3377 static int idecd_set_spindown(struct cdrom_device_info *cdi, unsigned long arg)
3379 struct packet_command cgc;
3384 if (copy_from_user(&spindown, (void __user *)arg, sizeof(char)))
3387 init_cdrom_command(&cgc, buffer, sizeof(buffer), CGC_DATA_UNKNOWN);
3389 stat = cdrom_mode_sense(cdi, &cgc, GPMODE_CDROM_PAGE, 0);
3393 buffer[11] = (buffer[11] & 0xf0) | (spindown & 0x0f);
3394 return cdrom_mode_select(cdi, &cgc);
3397 static int idecd_get_spindown(struct cdrom_device_info *cdi, unsigned long arg)
3399 struct packet_command cgc;
3404 init_cdrom_command(&cgc, buffer, sizeof(buffer), CGC_DATA_UNKNOWN);
3406 stat = cdrom_mode_sense(cdi, &cgc, GPMODE_CDROM_PAGE, 0);
3410 spindown = buffer[11] & 0x0f;
3411 if (copy_to_user((void __user *)arg, &spindown, sizeof (char)))
3416 static int idecd_ioctl (struct inode *inode, struct file *file,
3417 unsigned int cmd, unsigned long arg)
3419 struct block_device *bdev = inode->i_bdev;
3420 struct cdrom_info *info = ide_cd_g(bdev->bd_disk);
3424 case CDROMSETSPINDOWN:
3425 return idecd_set_spindown(&info->devinfo, arg);
3426 case CDROMGETSPINDOWN:
3427 return idecd_get_spindown(&info->devinfo, arg);
3432 err = generic_ide_ioctl(info->drive, file, bdev, cmd, arg);
3434 err = cdrom_ioctl(file, &info->devinfo, inode, cmd, arg);
3439 static int idecd_media_changed(struct gendisk *disk)
3441 struct cdrom_info *info = ide_cd_g(disk);
3442 return cdrom_media_changed(&info->devinfo);
3445 static int idecd_revalidate_disk(struct gendisk *disk)
3447 struct cdrom_info *info = ide_cd_g(disk);
3448 struct request_sense sense;
3449 cdrom_read_toc(info->drive, &sense);
3453 static struct block_device_operations idecd_ops = {
3454 .owner = THIS_MODULE,
3456 .release = idecd_release,
3457 .ioctl = idecd_ioctl,
3458 .media_changed = idecd_media_changed,
3459 .revalidate_disk= idecd_revalidate_disk
3463 static char *ignore = NULL;
3465 module_param(ignore, charp, 0400);
3466 MODULE_DESCRIPTION("ATAPI CD-ROM Driver");
3468 static int ide_cd_probe(ide_drive_t *drive)
3470 struct cdrom_info *info;
3472 struct request_sense sense;
3474 if (!strstr("ide-cdrom", drive->driver_req))
3476 if (!drive->present)
3478 if (drive->media != ide_cdrom && drive->media != ide_optical)
3480 /* skip drives that we were told to ignore */
3481 if (ignore != NULL) {
3482 if (strstr(ignore, drive->name)) {
3483 printk(KERN_INFO "ide-cd: ignoring drive %s\n", drive->name);
3488 printk(KERN_INFO "ide-cd: passing drive %s to ide-scsi emulation.\n", drive->name);
3491 info = kzalloc(sizeof(struct cdrom_info), GFP_KERNEL);
3493 printk(KERN_ERR "%s: Can't allocate a cdrom structure\n", drive->name);
3497 g = alloc_disk(1 << PARTN_BITS);
3501 ide_init_disk(g, drive);
3503 ide_proc_register_driver(drive, &ide_cdrom_driver);
3505 kref_init(&info->kref);
3507 info->drive = drive;
3508 info->driver = &ide_cdrom_driver;
3511 g->private_data = &info->driver;
3513 drive->driver_data = info;
3516 g->driverfs_dev = &drive->gendev;
3517 g->flags = GENHD_FL_CD | GENHD_FL_REMOVABLE;
3518 if (ide_cdrom_setup(drive)) {
3519 ide_proc_unregister_driver(drive, &ide_cdrom_driver);
3520 ide_cd_release(&info->kref);
3524 cdrom_read_toc(drive, &sense);
3525 g->fops = &idecd_ops;
3526 g->flags |= GENHD_FL_REMOVABLE;
3536 static void __exit ide_cdrom_exit(void)
3538 driver_unregister(&ide_cdrom_driver.gen_driver);
3541 static int __init ide_cdrom_init(void)
3543 return driver_register(&ide_cdrom_driver.gen_driver);
3546 MODULE_ALIAS("ide:*m-cdrom*");
3547 module_init(ide_cdrom_init);
3548 module_exit(ide_cdrom_exit);
3549 MODULE_LICENSE("GPL");