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 Eissfeldt <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.
142 * 4.00 Nov 5, 1996 -- New ide-cd maintainer,
143 * Erik B. Andersen <andersee@debian.org>
144 * -- Newer Creative drives don't always set the error
145 * register correctly. Make sure we see media changes
147 * -- Integrate with generic cdrom driver.
148 * -- CDROMGETSPINDOWN and CDROMSETSPINDOWN ioctls, based on
149 * a patch from Ciro Cattuto <>.
150 * -- Call set_device_ro.
151 * -- Implement CDROMMECHANISMSTATUS and CDROMSLOTTABLE
152 * ioctls, based on patch by Erik Andersen
153 * -- Add some probes of drive capability during setup.
155 * 4.01 Nov 11, 1996 -- Split into ide-cd.c and ide-cd.h
156 * -- Removed CDROMMECHANISMSTATUS and CDROMSLOTTABLE
157 * ioctls in favor of a generalized approach
158 * using the generic cdrom driver.
159 * -- Fully integrated with the 2.1.X kernel.
160 * -- Other stuff that I forgot (lots of changes)
162 * 4.02 Dec 01, 1996 -- Applied patch from Gadi Oxman <gadio@netvision.net.il>
163 * to fix the drive door locking problems.
165 * 4.03 Dec 04, 1996 -- Added DSC overlap support.
166 * 4.04 Dec 29, 1996 -- Added CDROMREADRAW ioclt based on patch
167 * by Ales Makarov (xmakarov@sun.felk.cvut.cz)
169 * 4.05 Nov 20, 1997 -- Modified to print more drive info on init
170 * Minor other changes
171 * Fix errors on CDROMSTOP (If you have a "Dolphin",
172 * you must define IHAVEADOLPHIN)
173 * Added identifier so new Sanyo CD-changer works
174 * Better detection if door locking isn't supported
176 * 4.06 Dec 17, 1997 -- fixed endless "tray open" messages -ml
177 * 4.07 Dec 17, 1997 -- fallback to set pc->stat on "tray open"
178 * 4.08 Dec 18, 1997 -- spew less noise when tray is empty
179 * -- fix speed display for ACER 24X, 18X
180 * 4.09 Jan 04, 1998 -- fix handling of the last block so we return
181 * an end of file instead of an I/O error (Gadi)
182 * 4.10 Jan 24, 1998 -- fixed a bug so now changers can change to a new
183 * slot when there is no disc in the current slot.
184 * -- Fixed a memory leak where info->changer_info was
185 * malloc'ed but never free'd when closing the device.
186 * -- Cleaned up the global namespace a bit by making more
187 * functions static that should already have been.
188 * 4.11 Mar 12, 1998 -- Added support for the CDROM_SELECT_SPEED ioctl
189 * based on a patch for 2.0.33 by Jelle Foks
190 * <jelle@scintilla.utwente.nl>, a patch for 2.0.33
191 * by Toni Giorgino <toni@pcape2.pi.infn.it>, the SCSI
192 * version, and my own efforts. -erik
193 * -- Fixed a stupid bug which egcs was kind enough to
194 * inform me of where "Illegal mode for this track"
195 * was never returned due to a comparison on data
196 * types of limited range.
197 * 4.12 Mar 29, 1998 -- Fixed bug in CDROM_SELECT_SPEED so write speed is
198 * now set ionly for CD-R and CD-RW drives. I had
199 * removed this support because it produced errors.
200 * It produced errors _only_ for non-writers. duh.
201 * 4.13 May 05, 1998 -- Suppress useless "in progress of becoming ready"
202 * messages, since this is not an error.
203 * -- Change error messages to be const
204 * -- Remove a "\t" which looks ugly in the syslogs
205 * 4.14 July 17, 1998 -- Change to pointing to .ps version of ATAPI spec
206 * since the .pdf version doesn't seem to work...
207 * -- Updated the TODO list to something more current.
209 * 4.15 Aug 25, 1998 -- Updated ide-cd.h to respect mechine endianess,
210 * patch thanks to "Eddie C. Dost" <ecd@skynet.be>
212 * 4.50 Oct 19, 1998 -- New maintainers!
213 * Jens Axboe <axboe@image.dk>
214 * Chris Zwilling <chris@cloudnet.com>
216 * 4.51 Dec 23, 1998 -- Jens Axboe <axboe@image.dk>
217 * - ide_cdrom_reset enabled since the ide subsystem
218 * handles resets fine now. <axboe@image.dk>
219 * - Transfer size fix for Samsung CD-ROMs, thanks to
220 * "Ville Hallik" <ville.hallik@mail.ee>.
221 * - other minor stuff.
223 * 4.52 Jan 19, 1999 -- Jens Axboe <axboe@image.dk>
224 * - Detect DVD-ROM/RAM drives
226 * 4.53 Feb 22, 1999 - Include other model Samsung and one Goldstar
227 * drive in transfer size limit.
228 * - Fix the I/O error when doing eject without a medium
229 * loaded on some drives.
230 * - CDROMREADMODE2 is now implemented through
231 * CDROMREADRAW, since many drives don't support
232 * MODE2 (even though ATAPI 2.6 says they must).
233 * - Added ignore parameter to ide-cd (as a module), eg
234 * insmod ide-cd ignore='hda hdb'
235 * Useful when using ide-cd in conjunction with
236 * ide-scsi. TODO: non-modular way of doing the
239 * 4.54 Aug 5, 1999 - Support for MMC2 class commands through the generic
240 * packet interface to cdrom.c.
241 * - Unified audio ioctl support, most of it.
242 * - cleaned up various deprecated verify_area().
243 * - Added ide_cdrom_packet() as the interface for
244 * the Uniform generic_packet().
245 * - bunch of other stuff, will fill in logs later.
246 * - report 1 slot for non-changers, like the other
247 * cd-rom drivers. don't report select disc for
248 * non-changers as well.
249 * - mask out audio playing, if the device can't do it.
251 * 4.55 Sep 1, 1999 - Eliminated the rest of the audio ioctls, except
252 * for CDROMREADTOC[ENTRY|HEADER]. Some of the drivers
253 * use this independently of the actual audio handling.
254 * They will disappear later when I get the time to
256 * - Minimize the TOC reading - only do it when we
257 * know a media change has occurred.
258 * - Moved all the CDROMREADx ioctls to the Uniform layer.
259 * - Heiko Eissfeldt <heiko@colossus.escape.de> supplied
260 * some fixes for CDI.
261 * - CD-ROM leaving door locked fix from Andries
262 * Brouwer <Andries.Brouwer@cwi.nl>
263 * - Erik Andersen <andersen@xmission.com> unified
264 * commands across the various drivers and how
265 * sense errors are handled.
267 * 4.56 Sep 12, 1999 - Removed changer support - it is now in the
269 * - Added partition based multisession handling.
270 * - Mode sense and mode select moved to the
272 * - Fixed a problem with WPI CDS-32X drive - it
273 * failed the capabilities
275 * 4.57 Apr 7, 2000 - Fixed sense reporting.
276 * - Fixed possible oops in ide_cdrom_get_last_session()
277 * - Fix locking mania and make ide_cdrom_reset relock
278 * - Stop spewing errors to log when magicdev polls with
279 * TEST_UNIT_READY on some drives.
280 * - Various fixes from Tobias Ringstrom:
281 * tray if it was locked prior to the reset.
282 * - cdrom_read_capacity returns one frame too little.
283 * - Fix real capacity reporting.
285 * 4.58 May 1, 2000 - Clean up ACER50 stuff.
286 * - Fix small problem with ide_cdrom_capacity
288 * 4.59 Aug 11, 2000 - Fix changer problem in cdrom_read_toc, we weren't
289 * correctly sensing a disc change.
290 * - Rearranged some code
291 * - Use extended sense on drives that support it for
292 * correctly reporting tray status -- from
293 * Michael D Johnson <johnsom@orst.edu>
294 * 4.60 Dec 17, 2003 - Add mt rainier support
295 * - Bump timeout for packet commands, matches sr
297 * 4.61 Jan 22, 2004 - support hardware sector sizes other than 2kB,
298 * Pascal Schmidt <der.eremit@email.de>
300 *************************************************************************/
302 #define IDECD_VERSION "4.61"
304 #include <linux/config.h>
305 #include <linux/module.h>
306 #include <linux/types.h>
307 #include <linux/kernel.h>
308 #include <linux/delay.h>
309 #include <linux/timer.h>
310 #include <linux/slab.h>
311 #include <linux/interrupt.h>
312 #include <linux/errno.h>
313 #include <linux/cdrom.h>
314 #include <linux/ide.h>
315 #include <linux/completion.h>
317 #include <scsi/scsi.h> /* For SCSI -> ATAPI command conversion */
321 #include <asm/byteorder.h>
322 #include <asm/uaccess.h>
323 #include <asm/unaligned.h>
327 /****************************************************************************
328 * Generic packet command support and error handling routines.
331 /* Mark that we've seen a media change, and invalidate our internal
333 static void cdrom_saw_media_change (ide_drive_t *drive)
335 struct cdrom_info *info = drive->driver_data;
337 CDROM_STATE_FLAGS (drive)->media_changed = 1;
338 CDROM_STATE_FLAGS (drive)->toc_valid = 0;
339 info->nsectors_buffered = 0;
342 static int cdrom_log_sense(ide_drive_t *drive, struct request *rq,
343 struct request_sense *sense)
347 if (!sense || !rq || (rq->flags & REQ_QUIET))
350 switch (sense->sense_key) {
351 case NO_SENSE: case RECOVERED_ERROR:
355 * don't care about tray state messages for
356 * e.g. capacity commands or in-progress or
359 if (sense->asc == 0x3a || sense->asc == 0x04)
363 case ILLEGAL_REQUEST:
365 * don't log START_STOP unit with LoEj set, since
366 * we cannot reliably check if drive can auto-close
368 if (rq->cmd[0] == GPCMD_START_STOP_UNIT && sense->asc == 0x24)
374 * Make good and sure we've seen this potential media
375 * change. Some drives (i.e. Creative) fail to present
376 * the correct sense key in the error register.
378 cdrom_saw_media_change(drive);
388 void cdrom_analyze_sense_data(ide_drive_t *drive,
389 struct request *failed_command,
390 struct request_sense *sense)
392 unsigned long sector;
393 unsigned long bio_sectors;
396 if (!cdrom_log_sense(drive, failed_command, sense))
400 * If a read toc is executed for a CD-R or CD-RW medium where
401 * the first toc has not been recorded yet, it will fail with
402 * 05/24/00 (which is a confusing error)
404 if (failed_command && failed_command->cmd[0] == GPCMD_READ_TOC_PMA_ATIP)
405 if (sense->sense_key == 0x05 && sense->asc == 0x24)
408 if (sense->error_code == 0x70) { /* Current Error */
409 switch(sense->sense_key) {
411 case VOLUME_OVERFLOW:
412 case ILLEGAL_REQUEST:
415 if(failed_command == NULL || !blk_fs_request(failed_command))
417 sector = (sense->information[0] << 24) |
418 (sense->information[1] << 16) |
419 (sense->information[2] << 8) |
420 (sense->information[3]);
422 bio_sectors = bio_sectors(failed_command->bio);
425 if(drive->queue->hardsect_size == 2048)
426 sector <<= 2; /* Device sector size is 2K */
427 sector &= ~(bio_sectors -1);
428 valid = (sector - failed_command->sector) << 9;
432 if(sector < get_capacity(drive->disk) &&
433 drive->probed_capacity - sector < 4 * 75) {
434 set_capacity(drive->disk, sector);
438 #if VERBOSE_IDE_CD_ERRORS
444 printk (KERN_ERR "ATAPI device %s:\n", drive->name);
445 if (sense->error_code==0x70)
447 else if (sense->error_code==0x71)
448 printk(" Deferred Error: ");
449 else if (sense->error_code == 0x7f)
450 printk(" Vendor-specific Error: ");
452 printk(" Unknown Error Type: ");
454 if (sense->sense_key < ARY_LEN(sense_key_texts))
455 s = sense_key_texts[sense->sense_key];
457 s = "bad sense key!";
459 printk("%s -- (Sense key=0x%02x)\n", s, sense->sense_key);
461 if (sense->asc == 0x40) {
462 sprintf(buf, "Diagnostic failure on component 0x%02x",
466 int lo = 0, mid, hi = ARY_LEN(sense_data_texts);
467 unsigned long key = (sense->sense_key << 16);
468 key |= (sense->asc << 8);
469 if (!(sense->ascq >= 0x80 && sense->ascq <= 0xdd))
475 if (sense_data_texts[mid].asc_ascq == key ||
476 sense_data_texts[mid].asc_ascq == (0xff0000|key)) {
477 s = sense_data_texts[mid].text;
480 else if (sense_data_texts[mid].asc_ascq > key)
488 if (sense->asc > 0x80)
489 s = "(vendor-specific error)";
491 s = "(reserved error code)";
494 printk(KERN_ERR " %s -- (asc=0x%02x, ascq=0x%02x)\n",
495 s, sense->asc, sense->ascq);
497 if (failed_command != NULL) {
499 int lo=0, mid, hi= ARY_LEN (packet_command_texts);
504 if (packet_command_texts[mid].packet_command ==
505 failed_command->cmd[0]) {
506 s = packet_command_texts[mid].text;
509 if (packet_command_texts[mid].packet_command >
510 failed_command->cmd[0])
516 printk (KERN_ERR " The failed \"%s\" packet command was: \n \"", s);
517 for (i=0; i<sizeof (failed_command->cmd); i++)
518 printk ("%02x ", failed_command->cmd[i]);
522 /* The SKSV bit specifies validity of the sense_key_specific
523 * in the next two commands. It is bit 7 of the first byte.
524 * In the case of NOT_READY, if SKSV is set the drive can
525 * give us nice ETA readings.
527 if (sense->sense_key == NOT_READY && (sense->sks[0] & 0x80)) {
528 int progress = (sense->sks[1] << 8 | sense->sks[2]) * 100;
529 printk(KERN_ERR " Command is %02d%% complete\n", progress / 0xffff);
533 if (sense->sense_key == ILLEGAL_REQUEST &&
534 (sense->sks[0] & 0x80) != 0) {
535 printk(KERN_ERR " Error in %s byte %d",
536 (sense->sks[0] & 0x40) != 0 ?
537 "command packet" : "command data",
538 (sense->sks[1] << 8) + sense->sks[2]);
540 if ((sense->sks[0] & 0x40) != 0)
541 printk (" bit %d", sense->sks[0] & 0x07);
547 #else /* not VERBOSE_IDE_CD_ERRORS */
549 /* Suppress printing unit attention and `in progress of becoming ready'
550 errors when we're not being verbose. */
552 if (sense->sense_key == UNIT_ATTENTION ||
553 (sense->sense_key == NOT_READY && (sense->asc == 4 ||
554 sense->asc == 0x3a)))
557 printk(KERN_ERR "%s: error code: 0x%02x sense_key: 0x%02x asc: 0x%02x ascq: 0x%02x\n",
559 sense->error_code, sense->sense_key,
560 sense->asc, sense->ascq);
561 #endif /* not VERBOSE_IDE_CD_ERRORS */
565 * Initialize a ide-cd packet command request
567 static void cdrom_prepare_request(struct request *rq)
569 ide_init_drive_cmd(rq);
573 static void cdrom_queue_request_sense(ide_drive_t *drive, void *sense,
574 struct request *failed_command)
576 struct cdrom_info *info = drive->driver_data;
577 struct request *rq = &info->request_sense_request;
580 sense = &info->sense_data;
582 /* stuff the sense request in front of our current request */
583 cdrom_prepare_request(rq);
586 rq->cmd[0] = GPCMD_REQUEST_SENSE;
587 rq->cmd[4] = rq->data_len = 18;
589 rq->flags = REQ_SENSE;
591 /* NOTE! Save the failed command in "rq->buffer" */
592 rq->buffer = (void *) failed_command;
594 (void) ide_do_drive_cmd(drive, rq, ide_preempt);
598 * ide_error() takes action based on the error returned by the drive.
600 static ide_startstop_t ide_cdrom_error (ide_drive_t *drive, const char *msg, byte stat)
605 err = ide_dump_atapi_status(drive, msg, stat);
606 if (drive == NULL || (rq = HWGROUP(drive)->rq) == NULL)
608 /* retry only "normal" I/O: */
609 if (rq->flags & (REQ_DRIVE_CMD | REQ_DRIVE_TASK | REQ_DRIVE_TASKFILE)) {
611 ide_end_drive_cmd(drive, stat, err);
615 if (stat & BUSY_STAT || ((stat & WRERR_STAT) && !drive->nowerr)) {
616 /* other bits are useless when BUSY */
617 rq->errors |= ERROR_RESET;
619 /* add decoding error stuff */
621 if (HWIF(drive)->INB(IDE_STATUS_REG) & (BUSY_STAT|DRQ_STAT))
623 HWIF(drive)->OUTB(WIN_IDLEIMMEDIATE,IDE_COMMAND_REG);
624 if (rq->errors >= ERROR_MAX) {
625 DRIVER(drive)->end_request(drive, 0, 0);
627 if ((rq->errors & ERROR_RESET) == ERROR_RESET) {
629 return ide_do_reset(drive);
636 static ide_startstop_t ide_cdrom_abort (ide_drive_t *drive, const char *msg)
640 if (drive == NULL || (rq = HWGROUP(drive)->rq) == NULL)
642 /* retry only "normal" I/O: */
643 if (rq->flags & (REQ_DRIVE_CMD | REQ_DRIVE_TASK | REQ_DRIVE_TASKFILE)) {
645 ide_end_drive_cmd(drive, BUSY_STAT, 0);
648 rq->errors |= ERROR_RESET;
649 DRIVER(drive)->end_request(drive, 0, 0);
653 static void cdrom_end_request (ide_drive_t *drive, int uptodate)
655 struct request *rq = HWGROUP(drive)->rq;
656 int nsectors = rq->hard_cur_sectors;
658 if ((rq->flags & REQ_SENSE) && uptodate) {
660 * For REQ_SENSE, "rq->buffer" points to the original failed
663 struct request *failed = (struct request *) rq->buffer;
664 struct cdrom_info *info = drive->driver_data;
665 void *sense = &info->sense_data;
670 sense = failed->sense;
671 failed->sense_len = rq->sense_len;
673 cdrom_analyze_sense_data(drive, failed, sense);
675 * now end failed request
677 if(blk_fs_request(failed)) {
678 if(ide_end_dequeued_request(drive, failed, 0, failed->hard_nr_sectors))
681 spin_lock_irqsave(&ide_lock, flags);
682 end_that_request_chunk(failed, 0, failed->data_len);
683 end_that_request_last(failed);
684 spin_unlock_irqrestore(&ide_lock, flags);
688 cdrom_analyze_sense_data(drive, NULL , sense);
691 if (!rq->current_nr_sectors && blk_fs_request(rq))
693 /* make sure it's fully ended */
694 if (blk_pc_request(rq))
695 nsectors = (rq->data_len + 511) >> 9;
699 ide_end_request(drive, uptodate, nsectors);
702 static void ide_dump_status_no_sense(ide_drive_t *drive, const char *msg, u8 stat)
706 ide_dump_status(drive, msg, stat);
709 /* Returns 0 if the request should be continued.
710 Returns 1 if the request was ended. */
711 static int cdrom_decode_status(ide_drive_t *drive, int good_stat, int *stat_ret)
713 struct request *rq = HWGROUP(drive)->rq;
714 int stat, err, sense_key;
716 /* Check for errors. */
717 stat = HWIF(drive)->INB(IDE_STATUS_REG);
721 if (OK_STAT(stat, good_stat, BAD_R_STAT))
724 /* Get the IDE error register. */
725 err = HWIF(drive)->INB(IDE_ERROR_REG);
726 sense_key = err >> 4;
729 printk("%s: missing rq in cdrom_decode_status\n", drive->name);
733 if (rq->flags & REQ_SENSE) {
734 /* We got an error trying to get sense info
735 from the drive (probably while trying
736 to recover from a former error). Just give up. */
738 rq->flags |= REQ_FAILED;
739 cdrom_end_request(drive, 0);
740 DRIVER(drive)->error(drive, "request sense failure", stat);
743 } else if (rq->flags & (REQ_PC | REQ_BLOCK_PC)) {
744 /* All other functions, except for READ. */
748 * if we have an error, pass back CHECK_CONDITION as the
751 if ((rq->flags & REQ_BLOCK_PC) && !rq->errors)
752 rq->errors = SAM_STAT_CHECK_CONDITION;
754 /* Check for tray open. */
755 if (sense_key == NOT_READY) {
756 cdrom_saw_media_change (drive);
757 } else if (sense_key == UNIT_ATTENTION) {
758 /* Check for media change. */
759 cdrom_saw_media_change (drive);
760 /*printk("%s: media changed\n",drive->name);*/
762 } else if (!(rq->flags & REQ_QUIET)) {
763 /* Otherwise, print an error. */
764 ide_dump_status(drive, "packet command error", stat);
767 rq->flags |= REQ_FAILED;
770 * instead of playing games with moving completions around,
771 * remove failed request completely and end it when the
772 * request sense has completed
774 if (stat & ERR_STAT) {
775 spin_lock_irqsave(&ide_lock, flags);
776 blkdev_dequeue_request(rq);
777 HWGROUP(drive)->rq = NULL;
778 spin_unlock_irqrestore(&ide_lock, flags);
780 cdrom_queue_request_sense(drive, rq->sense, rq);
782 cdrom_end_request(drive, 0);
784 } else if (blk_fs_request(rq)) {
785 int do_end_request = 0;
787 /* Handle errors from READ and WRITE requests. */
789 if (blk_noretry_request(rq))
792 if (sense_key == NOT_READY) {
794 if (rq_data_dir(rq) == READ) {
795 cdrom_saw_media_change (drive);
797 /* Fail the request. */
798 printk ("%s: tray open\n", drive->name);
801 struct cdrom_info *info = drive->driver_data;
803 /* allow the drive 5 seconds to recover, some
804 * devices will return this error while flushing
807 info->write_timeout = jiffies + ATAPI_WAIT_WRITE_BUSY;
809 if (time_after(jiffies, info->write_timeout))
815 * take a breather relying on the
816 * unplug timer to kick us again
818 spin_lock_irqsave(&ide_lock, flags);
819 blk_plug_device(drive->queue);
820 spin_unlock_irqrestore(&ide_lock,flags);
824 } else if (sense_key == UNIT_ATTENTION) {
826 cdrom_saw_media_change (drive);
828 /* Arrange to retry the request.
829 But be sure to give up if we've retried
831 if (++rq->errors > ERROR_MAX)
833 } else if (sense_key == ILLEGAL_REQUEST ||
834 sense_key == DATA_PROTECT) {
835 /* No point in retrying after an illegal
836 request or data protect error.*/
837 ide_dump_status_no_sense (drive, "command error", stat);
839 } else if (sense_key == MEDIUM_ERROR) {
840 /* No point in re-trying a zillion times on a bad
841 * sector... If we got here the error is not correctable */
842 ide_dump_status_no_sense (drive, "media error (bad sector)", stat);
844 } else if (sense_key == BLANK_CHECK) {
845 /* Disk appears blank ?? */
846 ide_dump_status_no_sense (drive, "media error (blank)", stat);
848 } else if ((err & ~ABRT_ERR) != 0) {
849 /* Go to the default handler
851 DRIVER(drive)->error(drive, "cdrom_decode_status",stat);
853 } else if ((++rq->errors > ERROR_MAX)) {
854 /* We've racked up too many retries. Abort. */
858 /* End a request through request sense analysis when we have
859 sense data. We need this in order to perform end of media
862 if (do_end_request) {
863 if (stat & ERR_STAT) {
865 spin_lock_irqsave(&ide_lock, flags);
866 blkdev_dequeue_request(rq);
867 HWGROUP(drive)->rq = NULL;
868 spin_unlock_irqrestore(&ide_lock, flags);
870 cdrom_queue_request_sense(drive, rq->sense, rq);
872 else cdrom_end_request(drive, 0);
874 /* If we got a CHECK_CONDITION status,
875 queue a request sense command. */
877 cdrom_queue_request_sense(drive, NULL, NULL);
880 blk_dump_rq_flags(rq, "ide-cd: bad rq");
881 cdrom_end_request(drive, 0);
884 /* Retry, or handle the next request. */
888 static int cdrom_timer_expiry(ide_drive_t *drive)
890 struct request *rq = HWGROUP(drive)->rq;
891 unsigned long wait = 0;
894 * Some commands are *slow* and normally take a long time to
895 * complete. Usually we can use the ATAPI "disconnect" to bypass
896 * this, but not all commands/drives support that. Let
897 * ide_timer_expiry keep polling us for these.
899 switch (rq->cmd[0]) {
901 case GPCMD_FORMAT_UNIT:
902 case GPCMD_RESERVE_RZONE_TRACK:
903 case GPCMD_CLOSE_TRACK:
904 case GPCMD_FLUSH_CACHE:
905 wait = ATAPI_WAIT_PC;
908 if (!(rq->flags & REQ_QUIET))
909 printk(KERN_INFO "ide-cd: cmd 0x%x timed out\n", rq->cmd[0]);
916 /* Set up the device registers for transferring a packet command on DEV,
917 expecting to later transfer XFERLEN bytes. HANDLER is the routine
918 which actually transfers the command to the drive. If this is a
919 drq_interrupt device, this routine will arrange for HANDLER to be
920 called when the interrupt from the drive arrives. Otherwise, HANDLER
921 will be called immediately after the drive is prepared for the transfer. */
923 static ide_startstop_t cdrom_start_packet_command(ide_drive_t *drive,
925 ide_handler_t *handler)
927 ide_startstop_t startstop;
928 struct cdrom_info *info = drive->driver_data;
929 ide_hwif_t *hwif = drive->hwif;
931 /* Wait for the controller to be idle. */
932 if (ide_wait_stat(&startstop, drive, 0, BUSY_STAT, WAIT_READY))
936 info->dma = !hwif->ide_dma_setup(drive);
938 /* Set up the controller registers. */
939 /* FIXME: for Virtual DMA we must check harder */
940 HWIF(drive)->OUTB(info->dma, IDE_FEATURE_REG);
941 HWIF(drive)->OUTB(0, IDE_IREASON_REG);
942 HWIF(drive)->OUTB(0, IDE_SECTOR_REG);
944 HWIF(drive)->OUTB(xferlen & 0xff, IDE_BCOUNTL_REG);
945 HWIF(drive)->OUTB(xferlen >> 8 , IDE_BCOUNTH_REG);
947 HWIF(drive)->OUTB(drive->ctl, IDE_CONTROL_REG);
949 if (CDROM_CONFIG_FLAGS (drive)->drq_interrupt) {
951 ide_execute_command(drive, WIN_PACKETCMD, handler, ATAPI_WAIT_PC, cdrom_timer_expiry);
957 spin_lock_irqsave(&ide_lock, flags);
958 hwif->OUTBSYNC(drive, WIN_PACKETCMD, IDE_COMMAND_REG);
960 spin_unlock_irqrestore(&ide_lock, flags);
962 return (*handler) (drive);
966 /* Send a packet command to DRIVE described by CMD_BUF and CMD_LEN.
967 The device registers must have already been prepared
968 by cdrom_start_packet_command.
969 HANDLER is the interrupt handler to call when the command completes
970 or there's data ready. */
972 * changed 5 parameters to 3 for dvd-ram
973 * struct packet_command *pc; now packet_command_t *pc;
975 #define ATAPI_MIN_CDB_BYTES 12
976 static ide_startstop_t cdrom_transfer_packet_command (ide_drive_t *drive,
978 ide_handler_t *handler)
980 ide_hwif_t *hwif = drive->hwif;
982 struct cdrom_info *info = drive->driver_data;
983 ide_startstop_t startstop;
985 if (CDROM_CONFIG_FLAGS(drive)->drq_interrupt) {
986 /* Here we should have been called after receiving an interrupt
987 from the device. DRQ should how be set. */
989 /* Check for errors. */
990 if (cdrom_decode_status(drive, DRQ_STAT, NULL))
993 /* Otherwise, we must wait for DRQ to get set. */
994 if (ide_wait_stat(&startstop, drive, DRQ_STAT,
995 BUSY_STAT, WAIT_READY))
999 /* Arm the interrupt handler. */
1000 ide_set_handler(drive, handler, rq->timeout, cdrom_timer_expiry);
1002 /* ATAPI commands get padded out to 12 bytes minimum */
1003 cmd_len = COMMAND_SIZE(rq->cmd[0]);
1004 if (cmd_len < ATAPI_MIN_CDB_BYTES)
1005 cmd_len = ATAPI_MIN_CDB_BYTES;
1007 /* Send the command to the device. */
1008 HWIF(drive)->atapi_output_bytes(drive, rq->cmd, cmd_len);
1010 /* Start the DMA if need be */
1012 hwif->ide_dma_start(drive);
1017 /****************************************************************************
1018 * Block read functions.
1022 * Buffer up to SECTORS_TO_TRANSFER sectors from the drive in our sector
1023 * buffer. Once the first sector is added, any subsequent sectors are
1024 * assumed to be continuous (until the buffer is cleared). For the first
1025 * sector added, SECTOR is its sector number. (SECTOR is then ignored until
1026 * the buffer is cleared.)
1028 static void cdrom_buffer_sectors (ide_drive_t *drive, unsigned long sector,
1029 int sectors_to_transfer)
1031 struct cdrom_info *info = drive->driver_data;
1033 /* Number of sectors to read into the buffer. */
1034 int sectors_to_buffer = min_t(int, sectors_to_transfer,
1035 (SECTOR_BUFFER_SIZE >> SECTOR_BITS) -
1036 info->nsectors_buffered);
1040 /* If we couldn't get a buffer, don't try to buffer anything... */
1041 if (info->buffer == NULL)
1042 sectors_to_buffer = 0;
1044 /* If this is the first sector in the buffer, remember its number. */
1045 if (info->nsectors_buffered == 0)
1046 info->sector_buffered = sector;
1048 /* Read the data into the buffer. */
1049 dest = info->buffer + info->nsectors_buffered * SECTOR_SIZE;
1050 while (sectors_to_buffer > 0) {
1051 HWIF(drive)->atapi_input_bytes(drive, dest, SECTOR_SIZE);
1052 --sectors_to_buffer;
1053 --sectors_to_transfer;
1054 ++info->nsectors_buffered;
1055 dest += SECTOR_SIZE;
1058 /* Throw away any remaining data. */
1059 while (sectors_to_transfer > 0) {
1060 static char dum[SECTOR_SIZE];
1061 HWIF(drive)->atapi_input_bytes(drive, dum, sizeof (dum));
1062 --sectors_to_transfer;
1067 * Check the contents of the interrupt reason register from the cdrom
1068 * and attempt to recover if there are problems. Returns 0 if everything's
1069 * ok; nonzero if the request has been terminated.
1072 int cdrom_read_check_ireason (ide_drive_t *drive, int len, int ireason)
1076 else if (ireason == 0) {
1077 /* Whoops... The drive is expecting to receive data from us! */
1078 printk(KERN_ERR "%s: read_intr: Drive wants to transfer data the "
1079 "wrong way!\n", drive->name);
1081 /* Throw some data at the drive so it doesn't hang
1082 and quit this request. */
1085 HWIF(drive)->atapi_output_bytes(drive, &dum, sizeof (dum));
1086 len -= sizeof (dum);
1088 } else if (ireason == 1) {
1089 /* Some drives (ASUS) seem to tell us that status
1090 * info is available. just get it and ignore.
1092 (void) HWIF(drive)->INB(IDE_STATUS_REG);
1095 /* Drive wants a command packet, or invalid ireason... */
1096 printk(KERN_ERR "%s: read_intr: bad interrupt reason %x\n", drive->name,
1100 cdrom_end_request(drive, 0);
1105 * Interrupt routine. Called when a read request has completed.
1107 static ide_startstop_t cdrom_read_intr (ide_drive_t *drive)
1110 int ireason, len, sectors_to_transfer, nskip;
1111 struct cdrom_info *info = drive->driver_data;
1112 u8 lowcyl = 0, highcyl = 0;
1113 int dma = info->dma, dma_error = 0;
1115 struct request *rq = HWGROUP(drive)->rq;
1122 if ((dma_error = HWIF(drive)->ide_dma_end(drive)))
1123 __ide_dma_off(drive);
1126 if (cdrom_decode_status(drive, 0, &stat))
1131 ide_end_request(drive, 1, rq->nr_sectors);
1134 return DRIVER(drive)->error(drive, "dma error", stat);
1137 /* Read the interrupt reason and the transfer length. */
1138 ireason = HWIF(drive)->INB(IDE_IREASON_REG) & 0x3;
1139 lowcyl = HWIF(drive)->INB(IDE_BCOUNTL_REG);
1140 highcyl = HWIF(drive)->INB(IDE_BCOUNTH_REG);
1142 len = lowcyl + (256 * highcyl);
1144 /* If DRQ is clear, the command has completed. */
1145 if ((stat & DRQ_STAT) == 0) {
1146 /* If we're not done filling the current buffer, complain.
1147 Otherwise, complete the command normally. */
1148 if (rq->current_nr_sectors > 0) {
1149 printk (KERN_ERR "%s: cdrom_read_intr: data underrun (%d blocks)\n",
1150 drive->name, rq->current_nr_sectors);
1151 rq->flags |= REQ_FAILED;
1152 cdrom_end_request(drive, 0);
1154 cdrom_end_request(drive, 1);
1158 /* Check that the drive is expecting to do the same thing we are. */
1159 if (cdrom_read_check_ireason (drive, len, ireason))
1162 /* Assume that the drive will always provide data in multiples
1163 of at least SECTOR_SIZE, as it gets hairy to keep track
1164 of the transfers otherwise. */
1165 if ((len % SECTOR_SIZE) != 0) {
1166 printk (KERN_ERR "%s: cdrom_read_intr: Bad transfer size %d\n",
1168 if (CDROM_CONFIG_FLAGS(drive)->limit_nframes)
1169 printk (KERN_ERR " This drive is not supported by this version of the driver\n");
1171 printk (KERN_ERR " Trying to limit transfer sizes\n");
1172 CDROM_CONFIG_FLAGS(drive)->limit_nframes = 1;
1174 cdrom_end_request(drive, 0);
1178 /* The number of sectors we need to read from the drive. */
1179 sectors_to_transfer = len / SECTOR_SIZE;
1181 /* First, figure out if we need to bit-bucket
1182 any of the leading sectors. */
1183 nskip = min_t(int, rq->current_nr_sectors - bio_cur_sectors(rq->bio), sectors_to_transfer);
1186 /* We need to throw away a sector. */
1187 static char dum[SECTOR_SIZE];
1188 HWIF(drive)->atapi_input_bytes(drive, dum, sizeof (dum));
1190 --rq->current_nr_sectors;
1192 --sectors_to_transfer;
1195 /* Now loop while we still have data to read from the drive. */
1196 while (sectors_to_transfer > 0) {
1199 /* If we've filled the present buffer but there's another
1200 chained buffer after it, move on. */
1201 if (rq->current_nr_sectors == 0 && rq->nr_sectors)
1202 cdrom_end_request(drive, 1);
1204 /* If the buffers are full, cache the rest of the data in our
1206 if (rq->current_nr_sectors == 0) {
1207 cdrom_buffer_sectors(drive, rq->sector, sectors_to_transfer);
1208 sectors_to_transfer = 0;
1210 /* Transfer data to the buffers.
1211 Figure out how many sectors we can transfer
1212 to the current buffer. */
1213 this_transfer = min_t(int, sectors_to_transfer,
1214 rq->current_nr_sectors);
1216 /* Read this_transfer sectors
1217 into the current buffer. */
1218 while (this_transfer > 0) {
1219 HWIF(drive)->atapi_input_bytes(drive, rq->buffer, SECTOR_SIZE);
1220 rq->buffer += SECTOR_SIZE;
1222 --rq->current_nr_sectors;
1225 --sectors_to_transfer;
1230 /* Done moving data! Wait for another interrupt. */
1231 ide_set_handler(drive, &cdrom_read_intr, ATAPI_WAIT_PC, NULL);
1236 * Try to satisfy some of the current read request from our cached data.
1237 * Returns nonzero if the request has been completed, zero otherwise.
1239 static int cdrom_read_from_buffer (ide_drive_t *drive)
1241 struct cdrom_info *info = drive->driver_data;
1242 struct request *rq = HWGROUP(drive)->rq;
1243 unsigned short sectors_per_frame;
1245 sectors_per_frame = queue_hardsect_size(drive->queue) >> SECTOR_BITS;
1247 /* Can't do anything if there's no buffer. */
1248 if (info->buffer == NULL) return 0;
1250 /* Loop while this request needs data and the next block is present
1252 while (rq->nr_sectors > 0 &&
1253 rq->sector >= info->sector_buffered &&
1254 rq->sector < info->sector_buffered + info->nsectors_buffered) {
1255 if (rq->current_nr_sectors == 0)
1256 cdrom_end_request(drive, 1);
1260 (rq->sector - info->sector_buffered) * SECTOR_SIZE,
1262 rq->buffer += SECTOR_SIZE;
1263 --rq->current_nr_sectors;
1268 /* If we've satisfied the current request,
1269 terminate it successfully. */
1270 if (rq->nr_sectors == 0) {
1271 cdrom_end_request(drive, 1);
1275 /* Move on to the next buffer if needed. */
1276 if (rq->current_nr_sectors == 0)
1277 cdrom_end_request(drive, 1);
1279 /* If this condition does not hold, then the kluge i use to
1280 represent the number of sectors to skip at the start of a transfer
1281 will fail. I think that this will never happen, but let's be
1282 paranoid and check. */
1283 if (rq->current_nr_sectors < bio_cur_sectors(rq->bio) &&
1284 (rq->sector & (sectors_per_frame - 1))) {
1285 printk(KERN_ERR "%s: cdrom_read_from_buffer: buffer botch (%ld)\n",
1286 drive->name, (long)rq->sector);
1287 cdrom_end_request(drive, 0);
1295 * Routine to send a read packet command to the drive.
1296 * This is usually called directly from cdrom_start_read.
1297 * However, for drq_interrupt devices, it is called from an interrupt
1298 * when the drive is ready to accept the command.
1300 static ide_startstop_t cdrom_start_read_continuation (ide_drive_t *drive)
1302 struct request *rq = HWGROUP(drive)->rq;
1303 unsigned short sectors_per_frame;
1306 sectors_per_frame = queue_hardsect_size(drive->queue) >> SECTOR_BITS;
1308 /* If the requested sector doesn't start on a cdrom block boundary,
1309 we must adjust the start of the transfer so that it does,
1310 and remember to skip the first few sectors.
1311 If the CURRENT_NR_SECTORS field is larger than the size
1312 of the buffer, it will mean that we're to skip a number
1313 of sectors equal to the amount by which CURRENT_NR_SECTORS
1314 is larger than the buffer size. */
1315 nskip = rq->sector & (sectors_per_frame - 1);
1317 /* Sanity check... */
1318 if (rq->current_nr_sectors != bio_cur_sectors(rq->bio) &&
1319 (rq->sector & (sectors_per_frame - 1))) {
1320 printk(KERN_ERR "%s: cdrom_start_read_continuation: buffer botch (%u)\n",
1321 drive->name, rq->current_nr_sectors);
1322 cdrom_end_request(drive, 0);
1325 rq->current_nr_sectors += nskip;
1328 /* Set up the command */
1329 rq->timeout = ATAPI_WAIT_PC;
1331 /* Send the command to the drive and return. */
1332 return cdrom_transfer_packet_command(drive, rq, &cdrom_read_intr);
1336 #define IDECD_SEEK_THRESHOLD (1000) /* 1000 blocks */
1337 #define IDECD_SEEK_TIMER (5 * WAIT_MIN_SLEEP) /* 100 ms */
1338 #define IDECD_SEEK_TIMEOUT (2 * WAIT_CMD) /* 20 sec */
1340 static ide_startstop_t cdrom_seek_intr (ide_drive_t *drive)
1342 struct cdrom_info *info = drive->driver_data;
1344 static int retry = 10;
1346 if (cdrom_decode_status(drive, 0, &stat))
1348 CDROM_CONFIG_FLAGS(drive)->seeking = 1;
1350 if (retry && time_after(jiffies, info->start_seek + IDECD_SEEK_TIMER)) {
1353 * this condition is far too common, to bother
1356 /* printk("%s: disabled DSC seek overlap\n", drive->name);*/
1357 drive->dsc_overlap = 0;
1363 static ide_startstop_t cdrom_start_seek_continuation (ide_drive_t *drive)
1365 struct request *rq = HWGROUP(drive)->rq;
1366 sector_t frame = rq->sector;
1368 sector_div(frame, queue_hardsect_size(drive->queue) >> SECTOR_BITS);
1370 memset(rq->cmd, 0, sizeof(rq->cmd));
1371 rq->cmd[0] = GPCMD_SEEK;
1372 put_unaligned(cpu_to_be32(frame), (unsigned int *) &rq->cmd[2]);
1374 rq->timeout = ATAPI_WAIT_PC;
1375 return cdrom_transfer_packet_command(drive, rq, &cdrom_seek_intr);
1378 static ide_startstop_t cdrom_start_seek (ide_drive_t *drive, unsigned int block)
1380 struct cdrom_info *info = drive->driver_data;
1384 info->start_seek = jiffies;
1385 return cdrom_start_packet_command(drive, 0, cdrom_start_seek_continuation);
1388 /* Fix up a possibly partially-processed request so that we can
1389 start it over entirely, or even put it back on the request queue. */
1390 static void restore_request (struct request *rq)
1392 if (rq->buffer != bio_data(rq->bio)) {
1393 sector_t n = (rq->buffer - (char *) bio_data(rq->bio)) / SECTOR_SIZE;
1395 rq->buffer = bio_data(rq->bio);
1396 rq->nr_sectors += n;
1399 rq->hard_cur_sectors = rq->current_nr_sectors = bio_cur_sectors(rq->bio);
1400 rq->hard_nr_sectors = rq->nr_sectors;
1401 rq->hard_sector = rq->sector;
1402 rq->q->prep_rq_fn(rq->q, rq);
1406 * Start a read request from the CD-ROM.
1408 static ide_startstop_t cdrom_start_read (ide_drive_t *drive, unsigned int block)
1410 struct cdrom_info *info = drive->driver_data;
1411 struct request *rq = HWGROUP(drive)->rq;
1412 unsigned short sectors_per_frame;
1414 sectors_per_frame = queue_hardsect_size(drive->queue) >> SECTOR_BITS;
1416 /* We may be retrying this request after an error. Fix up
1417 any weirdness which might be present in the request packet. */
1418 restore_request(rq);
1420 /* Satisfy whatever we can of this request from our cached sector. */
1421 if (cdrom_read_from_buffer(drive))
1424 blk_attempt_remerge(drive->queue, rq);
1426 /* Clear the local sector buffer. */
1427 info->nsectors_buffered = 0;
1429 /* use dma, if possible. */
1430 info->dma = drive->using_dma;
1431 if ((rq->sector & (sectors_per_frame - 1)) ||
1432 (rq->nr_sectors & (sectors_per_frame - 1)))
1437 /* Start sending the read request to the drive. */
1438 return cdrom_start_packet_command(drive, 32768, cdrom_start_read_continuation);
1441 /****************************************************************************
1442 * Execute all other packet commands.
1445 /* Interrupt routine for packet command completion. */
1446 static ide_startstop_t cdrom_pc_intr (ide_drive_t *drive)
1448 int ireason, len, thislen;
1449 struct request *rq = HWGROUP(drive)->rq;
1450 u8 lowcyl = 0, highcyl = 0;
1453 /* Check for errors. */
1454 if (cdrom_decode_status(drive, 0, &stat))
1457 /* Read the interrupt reason and the transfer length. */
1458 ireason = HWIF(drive)->INB(IDE_IREASON_REG);
1459 lowcyl = HWIF(drive)->INB(IDE_BCOUNTL_REG);
1460 highcyl = HWIF(drive)->INB(IDE_BCOUNTH_REG);
1462 len = lowcyl + (256 * highcyl);
1464 /* If DRQ is clear, the command has completed.
1465 Complain if we still have data left to transfer. */
1466 if ((stat & DRQ_STAT) == 0) {
1467 /* Some of the trailing request sense fields are optional, and
1468 some drives don't send them. Sigh. */
1469 if (rq->cmd[0] == GPCMD_REQUEST_SENSE &&
1471 rq->data_len <= 5) {
1472 while (rq->data_len > 0) {
1473 *(unsigned char *)rq->data++ = 0;
1478 if (rq->data_len == 0)
1479 cdrom_end_request(drive, 1);
1481 /* Comment this out, because this always happens
1482 right after a reset occurs, and it is annoying to
1483 always print expected stuff. */
1485 printk ("%s: cdrom_pc_intr: data underrun %d\n",
1486 drive->name, pc->buflen);
1488 rq->flags |= REQ_FAILED;
1489 cdrom_end_request(drive, 0);
1494 /* Figure out how much data to transfer. */
1495 thislen = rq->data_len;
1496 if (thislen > len) thislen = len;
1498 /* The drive wants to be written to. */
1499 if ((ireason & 3) == 0) {
1501 blk_dump_rq_flags(rq, "cdrom_pc_intr, write");
1504 /* Transfer the data. */
1505 HWIF(drive)->atapi_output_bytes(drive, rq->data, thislen);
1507 /* If we haven't moved enough data to satisfy the drive,
1508 add some padding. */
1509 while (len > thislen) {
1511 HWIF(drive)->atapi_output_bytes(drive, &dum, sizeof(dum));
1515 /* Keep count of how much data we've moved. */
1516 rq->data += thislen;
1517 rq->data_len -= thislen;
1520 /* Same drill for reading. */
1521 else if ((ireason & 3) == 2) {
1523 blk_dump_rq_flags(rq, "cdrom_pc_intr, write");
1526 /* Transfer the data. */
1527 HWIF(drive)->atapi_input_bytes(drive, rq->data, thislen);
1529 /* If we haven't moved enough data to satisfy the drive,
1530 add some padding. */
1531 while (len > thislen) {
1533 HWIF(drive)->atapi_input_bytes(drive, &dum, sizeof(dum));
1537 /* Keep count of how much data we've moved. */
1538 rq->data += thislen;
1539 rq->data_len -= thislen;
1541 if (rq->flags & REQ_SENSE)
1542 rq->sense_len += thislen;
1545 printk (KERN_ERR "%s: cdrom_pc_intr: The drive "
1546 "appears confused (ireason = 0x%02x)\n",
1547 drive->name, ireason);
1548 rq->flags |= REQ_FAILED;
1551 /* Now we wait for another interrupt. */
1552 ide_set_handler(drive, &cdrom_pc_intr, ATAPI_WAIT_PC, cdrom_timer_expiry);
1556 static ide_startstop_t cdrom_do_pc_continuation (ide_drive_t *drive)
1558 struct request *rq = HWGROUP(drive)->rq;
1561 rq->timeout = ATAPI_WAIT_PC;
1563 /* Send the command to the drive and return. */
1564 return cdrom_transfer_packet_command(drive, rq, &cdrom_pc_intr);
1568 static ide_startstop_t cdrom_do_packet_command (ide_drive_t *drive)
1571 struct request *rq = HWGROUP(drive)->rq;
1572 struct cdrom_info *info = drive->driver_data;
1576 rq->flags &= ~REQ_FAILED;
1579 /* Start sending the command to the drive. */
1580 return cdrom_start_packet_command(drive, len, cdrom_do_pc_continuation);
1584 static int cdrom_queue_packet_command(ide_drive_t *drive, struct request *rq)
1586 struct request_sense sense;
1588 unsigned int flags = rq->flags;
1590 if (rq->sense == NULL)
1593 /* Start of retry loop. */
1596 unsigned long time = jiffies;
1599 error = ide_do_drive_cmd(drive, rq, ide_wait);
1600 time = jiffies - time;
1602 /* FIXME: we should probably abort/retry or something
1603 * in case of failure */
1604 if (rq->flags & REQ_FAILED) {
1605 /* The request failed. Retry if it was due to a unit
1607 (usually means media was changed). */
1608 struct request_sense *reqbuf = rq->sense;
1610 if (reqbuf->sense_key == UNIT_ATTENTION)
1611 cdrom_saw_media_change(drive);
1612 else if (reqbuf->sense_key == NOT_READY &&
1613 reqbuf->asc == 4 && reqbuf->ascq != 4) {
1614 /* The drive is in the process of loading
1615 a disk. Retry, but wait a little to give
1616 the drive time to complete the load. */
1619 /* Otherwise, don't retry. */
1625 /* End of retry loop. */
1626 } while ((rq->flags & REQ_FAILED) && retries >= 0);
1628 /* Return an error if the command failed. */
1629 return (rq->flags & REQ_FAILED) ? -EIO : 0;
1635 static inline int cdrom_write_check_ireason(ide_drive_t *drive, int len, int ireason)
1637 /* Two notes about IDE interrupt reason here - 0 means that
1638 * the drive wants to receive data from us, 2 means that
1639 * the drive is expecting to transfer data to us.
1643 else if (ireason == 2) {
1644 /* Whoops... The drive wants to send data. */
1645 printk(KERN_ERR "%s: write_intr: wrong transfer direction!\n",
1650 HWIF(drive)->atapi_input_bytes(drive, &dum, sizeof(dum));
1654 /* Drive wants a command packet, or invalid ireason... */
1655 printk(KERN_ERR "%s: write_intr: bad interrupt reason %x\n",
1656 drive->name, ireason);
1659 cdrom_end_request(drive, 0);
1663 static void post_transform_command(struct request *req)
1668 if (!blk_pc_request(req))
1672 ibuf = bio_data(req->bio);
1680 * set ansi-revision and response data as atapi
1682 if (c[0] == GPCMD_INQUIRY) {
1684 ibuf[3] = (ibuf[3] & 0xf0) | 2;
1688 typedef void (xfer_func_t)(ide_drive_t *, void *, u32);
1691 * best way to deal with dma that is not sector aligned right now... note
1692 * that in this path we are not using ->data or ->buffer at all. this irs
1693 * can replace cdrom_pc_intr, cdrom_read_intr, and cdrom_write_intr in the
1696 static ide_startstop_t cdrom_newpc_intr(ide_drive_t *drive)
1698 struct cdrom_info *info = drive->driver_data;
1699 struct request *rq = HWGROUP(drive)->rq;
1700 int dma_error, dma, stat, ireason, len, thislen;
1702 xfer_func_t *xferfunc;
1703 unsigned long flags;
1705 /* Check for errors. */
1710 dma_error = HWIF(drive)->ide_dma_end(drive);
1713 if (cdrom_decode_status(drive, 0, &stat))
1717 * using dma, transfer is complete now
1721 printk(KERN_ERR "ide-cd: dma error\n");
1722 __ide_dma_off(drive);
1723 return DRIVER(drive)->error(drive, "dma error", stat);
1726 end_that_request_chunk(rq, 1, rq->data_len);
1732 * ok we fall to pio :/
1734 ireason = HWIF(drive)->INB(IDE_IREASON_REG) & 0x3;
1735 lowcyl = HWIF(drive)->INB(IDE_BCOUNTL_REG);
1736 highcyl = HWIF(drive)->INB(IDE_BCOUNTH_REG);
1738 len = lowcyl + (256 * highcyl);
1739 thislen = rq->data_len;
1744 * If DRQ is clear, the command has completed.
1746 if ((stat & DRQ_STAT) == 0)
1750 * check which way to transfer data
1752 if (rq_data_dir(rq) == WRITE) {
1756 if (cdrom_write_check_ireason(drive, len, ireason))
1759 xferfunc = HWIF(drive)->atapi_output_bytes;
1764 if (cdrom_read_check_ireason(drive, len, ireason))
1767 xferfunc = HWIF(drive)->atapi_input_bytes;
1773 while (thislen > 0) {
1774 int blen = blen = rq->data_len;
1775 char *ptr = rq->data;
1781 ptr = bio_data(rq->bio);
1782 blen = bio_iovec(rq->bio)->bv_len;
1786 printk(KERN_ERR "%s: confused, missing data\n", drive->name);
1793 xferfunc(drive, ptr, blen);
1797 rq->data_len -= blen;
1800 end_that_request_chunk(rq, 1, blen);
1812 xferfunc(drive, &pad, sizeof(pad));
1817 if (HWGROUP(drive)->handler != NULL)
1820 ide_set_handler(drive, cdrom_newpc_intr, rq->timeout, NULL);
1825 post_transform_command(rq);
1827 spin_lock_irqsave(&ide_lock, flags);
1828 blkdev_dequeue_request(rq);
1829 end_that_request_last(rq);
1830 HWGROUP(drive)->rq = NULL;
1831 spin_unlock_irqrestore(&ide_lock, flags);
1835 static ide_startstop_t cdrom_write_intr(ide_drive_t *drive)
1837 int stat, ireason, len, sectors_to_transfer, uptodate;
1838 struct cdrom_info *info = drive->driver_data;
1839 int dma_error = 0, dma = info->dma;
1840 u8 lowcyl = 0, highcyl = 0;
1842 struct request *rq = HWGROUP(drive)->rq;
1844 /* Check for errors. */
1847 if ((dma_error = HWIF(drive)->ide_dma_end(drive))) {
1848 printk(KERN_ERR "ide-cd: write dma error\n");
1849 __ide_dma_off(drive);
1853 if (cdrom_decode_status(drive, 0, &stat))
1857 * using dma, transfer is complete now
1861 return DRIVER(drive)->error(drive, "dma error", stat);
1863 ide_end_request(drive, 1, rq->nr_sectors);
1867 /* Read the interrupt reason and the transfer length. */
1868 ireason = HWIF(drive)->INB(IDE_IREASON_REG);
1869 lowcyl = HWIF(drive)->INB(IDE_BCOUNTL_REG);
1870 highcyl = HWIF(drive)->INB(IDE_BCOUNTH_REG);
1872 len = lowcyl + (256 * highcyl);
1874 /* If DRQ is clear, the command has completed. */
1875 if ((stat & DRQ_STAT) == 0) {
1876 /* If we're not done writing, complain.
1877 * Otherwise, complete the command normally.
1880 if (rq->current_nr_sectors > 0) {
1881 printk(KERN_ERR "%s: write_intr: data underrun (%d blocks)\n",
1882 drive->name, rq->current_nr_sectors);
1885 cdrom_end_request(drive, uptodate);
1889 /* Check that the drive is expecting to do the same thing we are. */
1890 if (cdrom_write_check_ireason(drive, len, ireason))
1893 sectors_to_transfer = len / SECTOR_SIZE;
1896 * now loop and write out the data
1898 while (sectors_to_transfer > 0) {
1901 if (!rq->current_nr_sectors) {
1902 printk(KERN_ERR "ide-cd: write_intr: oops\n");
1907 * Figure out how many sectors we can transfer
1909 this_transfer = min_t(int, sectors_to_transfer, rq->current_nr_sectors);
1911 while (this_transfer > 0) {
1912 HWIF(drive)->atapi_output_bytes(drive, rq->buffer, SECTOR_SIZE);
1913 rq->buffer += SECTOR_SIZE;
1915 --rq->current_nr_sectors;
1918 --sectors_to_transfer;
1922 * current buffer complete, move on
1924 if (rq->current_nr_sectors == 0 && rq->nr_sectors)
1925 cdrom_end_request(drive, 1);
1928 /* re-arm handler */
1929 ide_set_handler(drive, &cdrom_write_intr, ATAPI_WAIT_PC, NULL);
1933 static ide_startstop_t cdrom_start_write_cont(ide_drive_t *drive)
1935 struct request *rq = HWGROUP(drive)->rq;
1937 #if 0 /* the immediate bit */
1938 rq->cmd[1] = 1 << 3;
1940 rq->timeout = ATAPI_WAIT_PC;
1942 return cdrom_transfer_packet_command(drive, rq, cdrom_write_intr);
1945 static ide_startstop_t cdrom_start_write(ide_drive_t *drive, struct request *rq)
1947 struct cdrom_info *info = drive->driver_data;
1948 struct gendisk *g = drive->disk;
1949 unsigned short sectors_per_frame = queue_hardsect_size(drive->queue) >> SECTOR_BITS;
1952 * writes *must* be hardware frame aligned
1954 if ((rq->nr_sectors & (sectors_per_frame - 1)) ||
1955 (rq->sector & (sectors_per_frame - 1))) {
1956 cdrom_end_request(drive, 0);
1961 * disk has become write protected
1964 cdrom_end_request(drive, 0);
1969 * for dvd-ram and such media, it's a really big deal to get
1970 * big writes all the time. so scour the queue and attempt to
1971 * remerge requests, often the plugging will not have had time
1972 * to do this properly
1974 blk_attempt_remerge(drive->queue, rq);
1976 info->nsectors_buffered = 0;
1978 /* use dma, if possible. we don't need to check more, since we
1979 * know that the transfer is always (at least!) frame aligned */
1980 info->dma = drive->using_dma ? 1 : 0;
1983 info->devinfo.media_written = 1;
1985 /* Start sending the write request to the drive. */
1986 return cdrom_start_packet_command(drive, 32768, cdrom_start_write_cont);
1989 static ide_startstop_t cdrom_do_newpc_cont(ide_drive_t *drive)
1991 struct request *rq = HWGROUP(drive)->rq;
1994 rq->timeout = ATAPI_WAIT_PC;
1996 return cdrom_transfer_packet_command(drive, rq, cdrom_newpc_intr);
1999 static ide_startstop_t cdrom_do_block_pc(ide_drive_t *drive, struct request *rq)
2001 struct cdrom_info *info = drive->driver_data;
2003 rq->flags |= REQ_QUIET;
2012 int mask = drive->queue->dma_alignment;
2013 unsigned long addr = (unsigned long) page_address(bio_page(rq->bio));
2015 info->cmd = rq_data_dir(rq);
2016 info->dma = drive->using_dma;
2019 * check if dma is safe
2021 if ((rq->data_len & mask) || (addr & mask))
2025 /* Start sending the command to the drive. */
2026 return cdrom_start_packet_command(drive, rq->data_len, cdrom_do_newpc_cont);
2029 /****************************************************************************
2030 * cdrom driver request routine.
2032 static ide_startstop_t
2033 ide_do_rw_cdrom (ide_drive_t *drive, struct request *rq, sector_t block)
2035 ide_startstop_t action;
2036 struct cdrom_info *info = drive->driver_data;
2038 if (blk_fs_request(rq)) {
2039 if (CDROM_CONFIG_FLAGS(drive)->seeking) {
2040 unsigned long elapsed = jiffies - info->start_seek;
2041 int stat = HWIF(drive)->INB(IDE_STATUS_REG);
2043 if ((stat & SEEK_STAT) != SEEK_STAT) {
2044 if (elapsed < IDECD_SEEK_TIMEOUT) {
2045 ide_stall_queue(drive, IDECD_SEEK_TIMER);
2048 printk (KERN_ERR "%s: DSC timeout\n", drive->name);
2050 CDROM_CONFIG_FLAGS(drive)->seeking = 0;
2052 if ((rq_data_dir(rq) == READ) && IDE_LARGE_SEEK(info->last_block, block, IDECD_SEEK_THRESHOLD) && drive->dsc_overlap) {
2053 action = cdrom_start_seek(drive, block);
2055 if (rq_data_dir(rq) == READ)
2056 action = cdrom_start_read(drive, block);
2058 action = cdrom_start_write(drive, rq);
2060 info->last_block = block;
2062 } else if (rq->flags & (REQ_PC | REQ_SENSE)) {
2063 return cdrom_do_packet_command(drive);
2064 } else if (rq->flags & REQ_BLOCK_PC) {
2065 return cdrom_do_block_pc(drive, rq);
2066 } else if (rq->flags & REQ_SPECIAL) {
2068 * right now this can only be a reset...
2070 cdrom_end_request(drive, 1);
2074 blk_dump_rq_flags(rq, "ide-cd bad flags");
2075 cdrom_end_request(drive, 0);
2081 /****************************************************************************
2084 * Routines which queue packet commands take as a final argument a pointer
2085 * to a request_sense struct. If execution of the command results
2086 * in an error with a CHECK CONDITION status, this structure will be filled
2087 * with the results of the subsequent request sense command. The pointer
2088 * can also be NULL, in which case no sense information is returned.
2091 #if ! STANDARD_ATAPI
2095 return (x%10) | ((x/10) << 4);
2102 return (x >> 4) * 10 + (x & 0x0f);
2106 void msf_from_bcd (struct atapi_msf *msf)
2108 msf->minute = bcd2bin (msf->minute);
2109 msf->second = bcd2bin (msf->second);
2110 msf->frame = bcd2bin (msf->frame);
2113 #endif /* not STANDARD_ATAPI */
2117 void lba_to_msf (int lba, byte *m, byte *s, byte *f)
2119 lba += CD_MSF_OFFSET;
2120 lba &= 0xffffff; /* negative lbas use only 24 bits */
2121 *m = lba / (CD_SECS * CD_FRAMES);
2122 lba %= (CD_SECS * CD_FRAMES);
2123 *s = lba / CD_FRAMES;
2124 *f = lba % CD_FRAMES;
2129 int msf_to_lba (byte m, byte s, byte f)
2131 return (((m * CD_SECS) + s) * CD_FRAMES + f) - CD_MSF_OFFSET;
2134 static int cdrom_check_status(ide_drive_t *drive, struct request_sense *sense)
2137 struct cdrom_info *info = drive->driver_data;
2138 struct cdrom_device_info *cdi = &info->devinfo;
2140 cdrom_prepare_request(&req);
2143 req.cmd[0] = GPCMD_TEST_UNIT_READY;
2144 req.flags |= REQ_QUIET;
2146 #if ! STANDARD_ATAPI
2147 /* the Sanyo 3 CD changer uses byte 7 of TEST_UNIT_READY to
2148 switch CDs instead of supporting the LOAD_UNLOAD opcode */
2150 req.cmd[7] = cdi->sanyo_slot % 3;
2151 #endif /* not STANDARD_ATAPI */
2153 return cdrom_queue_packet_command(drive, &req);
2157 /* Lock the door if LOCKFLAG is nonzero; unlock it otherwise. */
2159 cdrom_lockdoor(ide_drive_t *drive, int lockflag, struct request_sense *sense)
2161 struct request_sense my_sense;
2168 /* If the drive cannot lock the door, just pretend. */
2169 if (CDROM_CONFIG_FLAGS(drive)->no_doorlock) {
2172 cdrom_prepare_request(&req);
2174 req.cmd[0] = GPCMD_PREVENT_ALLOW_MEDIUM_REMOVAL;
2175 req.cmd[4] = lockflag ? 1 : 0;
2176 stat = cdrom_queue_packet_command(drive, &req);
2179 /* If we got an illegal field error, the drive
2180 probably cannot lock the door. */
2182 sense->sense_key == ILLEGAL_REQUEST &&
2183 (sense->asc == 0x24 || sense->asc == 0x20)) {
2184 printk (KERN_ERR "%s: door locking not supported\n",
2186 CDROM_CONFIG_FLAGS(drive)->no_doorlock = 1;
2190 /* no medium, that's alright. */
2191 if (stat != 0 && sense->sense_key == NOT_READY && sense->asc == 0x3a)
2195 CDROM_STATE_FLAGS(drive)->door_locked = lockflag;
2201 /* Eject the disk if EJECTFLAG is 0.
2202 If EJECTFLAG is 1, try to reload the disk. */
2203 static int cdrom_eject(ide_drive_t *drive, int ejectflag,
2204 struct request_sense *sense)
2209 if (CDROM_CONFIG_FLAGS(drive)->no_eject && !ejectflag)
2210 return -EDRIVE_CANT_DO_THIS;
2212 /* reload fails on some drives, if the tray is locked */
2213 if (CDROM_STATE_FLAGS(drive)->door_locked && ejectflag)
2216 cdrom_prepare_request(&req);
2218 /* only tell drive to close tray if open, if it can do that */
2219 if (ejectflag && !CDROM_CONFIG_FLAGS(drive)->close_tray)
2223 req.cmd[0] = GPCMD_START_STOP_UNIT;
2224 req.cmd[4] = loej | (ejectflag != 0);
2225 return cdrom_queue_packet_command(drive, &req);
2228 static int cdrom_read_capacity(ide_drive_t *drive, unsigned long *capacity,
2229 unsigned long *sectors_per_frame,
2230 struct request_sense *sense)
2240 cdrom_prepare_request(&req);
2243 req.cmd[0] = GPCMD_READ_CDVD_CAPACITY;
2244 req.data = (char *)&capbuf;
2245 req.data_len = sizeof(capbuf);
2247 stat = cdrom_queue_packet_command(drive, &req);
2249 *capacity = 1 + be32_to_cpu(capbuf.lba);
2250 *sectors_per_frame =
2251 be32_to_cpu(capbuf.blocklen) >> SECTOR_BITS;
2257 static int cdrom_read_tocentry(ide_drive_t *drive, int trackno, int msf_flag,
2258 int format, char *buf, int buflen,
2259 struct request_sense *sense)
2263 cdrom_prepare_request(&req);
2267 req.data_len = buflen;
2268 req.flags |= REQ_QUIET;
2269 req.cmd[0] = GPCMD_READ_TOC_PMA_ATIP;
2270 req.cmd[6] = trackno;
2271 req.cmd[7] = (buflen >> 8);
2272 req.cmd[8] = (buflen & 0xff);
2273 req.cmd[9] = (format << 6);
2278 return cdrom_queue_packet_command(drive, &req);
2282 /* Try to read the entire TOC for the disk into our internal buffer. */
2283 static int cdrom_read_toc(ide_drive_t *drive, struct request_sense *sense)
2285 int stat, ntracks, i;
2286 struct cdrom_info *info = drive->driver_data;
2287 struct cdrom_device_info *cdi = &info->devinfo;
2288 struct atapi_toc *toc = info->toc;
2290 struct atapi_toc_header hdr;
2291 struct atapi_toc_entry ent;
2294 unsigned long sectors_per_frame = SECTORS_PER_FRAME;
2297 /* Try to allocate space. */
2298 toc = (struct atapi_toc *) kmalloc (sizeof (struct atapi_toc),
2302 printk (KERN_ERR "%s: No cdrom TOC buffer!\n", drive->name);
2307 /* Check to see if the existing data is still valid.
2308 If it is, just return. */
2309 (void) cdrom_check_status(drive, sense);
2311 if (CDROM_STATE_FLAGS(drive)->toc_valid)
2314 /* Try to get the total cdrom capacity and sector size. */
2315 stat = cdrom_read_capacity(drive, &toc->capacity, §ors_per_frame,
2318 toc->capacity = 0x1fffff;
2320 set_capacity(drive->disk, toc->capacity * sectors_per_frame);
2321 /* Save a private copy of te TOC capacity for error handling */
2322 drive->probed_capacity = toc->capacity * sectors_per_frame;
2324 blk_queue_hardsect_size(drive->queue,
2325 sectors_per_frame << SECTOR_BITS);
2327 /* First read just the header, so we know how long the TOC is. */
2328 stat = cdrom_read_tocentry(drive, 0, 1, 0, (char *) &toc->hdr,
2329 sizeof(struct atapi_toc_header), sense);
2330 if (stat) return stat;
2332 #if ! STANDARD_ATAPI
2333 if (CDROM_CONFIG_FLAGS(drive)->toctracks_as_bcd) {
2334 toc->hdr.first_track = bcd2bin(toc->hdr.first_track);
2335 toc->hdr.last_track = bcd2bin(toc->hdr.last_track);
2337 #endif /* not STANDARD_ATAPI */
2339 ntracks = toc->hdr.last_track - toc->hdr.first_track + 1;
2342 if (ntracks > MAX_TRACKS)
2343 ntracks = MAX_TRACKS;
2345 /* Now read the whole schmeer. */
2346 stat = cdrom_read_tocentry(drive, toc->hdr.first_track, 1, 0,
2348 sizeof(struct atapi_toc_header) +
2350 sizeof(struct atapi_toc_entry), sense);
2352 if (stat && toc->hdr.first_track > 1) {
2353 /* Cds with CDI tracks only don't have any TOC entries,
2354 despite of this the returned values are
2355 first_track == last_track = number of CDI tracks + 1,
2356 so that this case is indistinguishable from the same
2357 layout plus an additional audio track.
2358 If we get an error for the regular case, we assume
2359 a CDI without additional audio tracks. In this case
2360 the readable TOC is empty (CDI tracks are not included)
2361 and only holds the Leadout entry. Heiko Eißfeldt */
2363 stat = cdrom_read_tocentry(drive, CDROM_LEADOUT, 1, 0,
2365 sizeof(struct atapi_toc_header) +
2367 sizeof(struct atapi_toc_entry),
2372 #if ! STANDARD_ATAPI
2373 if (CDROM_CONFIG_FLAGS(drive)->toctracks_as_bcd) {
2374 toc->hdr.first_track = bin2bcd(CDROM_LEADOUT);
2375 toc->hdr.last_track = bin2bcd(CDROM_LEADOUT);
2377 #endif /* not STANDARD_ATAPI */
2379 toc->hdr.first_track = CDROM_LEADOUT;
2380 toc->hdr.last_track = CDROM_LEADOUT;
2387 toc->hdr.toc_length = ntohs (toc->hdr.toc_length);
2389 #if ! STANDARD_ATAPI
2390 if (CDROM_CONFIG_FLAGS(drive)->toctracks_as_bcd) {
2391 toc->hdr.first_track = bcd2bin(toc->hdr.first_track);
2392 toc->hdr.last_track = bcd2bin(toc->hdr.last_track);
2394 #endif /* not STANDARD_ATAPI */
2396 for (i=0; i<=ntracks; i++) {
2397 #if ! STANDARD_ATAPI
2398 if (CDROM_CONFIG_FLAGS(drive)->tocaddr_as_bcd) {
2399 if (CDROM_CONFIG_FLAGS(drive)->toctracks_as_bcd)
2400 toc->ent[i].track = bcd2bin(toc->ent[i].track);
2401 msf_from_bcd(&toc->ent[i].addr.msf);
2403 #endif /* not STANDARD_ATAPI */
2404 toc->ent[i].addr.lba = msf_to_lba (toc->ent[i].addr.msf.minute,
2405 toc->ent[i].addr.msf.second,
2406 toc->ent[i].addr.msf.frame);
2409 /* Read the multisession information. */
2410 if (toc->hdr.first_track != CDROM_LEADOUT) {
2411 /* Read the multisession information. */
2412 stat = cdrom_read_tocentry(drive, 0, 0, 1, (char *)&ms_tmp,
2413 sizeof(ms_tmp), sense);
2414 if (stat) return stat;
2416 toc->last_session_lba = be32_to_cpu(ms_tmp.ent.addr.lba);
2418 ms_tmp.hdr.first_track = ms_tmp.hdr.last_track = CDROM_LEADOUT;
2419 toc->last_session_lba = msf_to_lba(0, 2, 0); /* 0m 2s 0f */
2422 #if ! STANDARD_ATAPI
2423 if (CDROM_CONFIG_FLAGS(drive)->tocaddr_as_bcd) {
2424 /* Re-read multisession information using MSF format */
2425 stat = cdrom_read_tocentry(drive, 0, 1, 1, (char *)&ms_tmp,
2426 sizeof(ms_tmp), sense);
2430 msf_from_bcd (&ms_tmp.ent.addr.msf);
2431 toc->last_session_lba = msf_to_lba(ms_tmp.ent.addr.msf.minute,
2432 ms_tmp.ent.addr.msf.second,
2433 ms_tmp.ent.addr.msf.frame);
2435 #endif /* not STANDARD_ATAPI */
2437 toc->xa_flag = (ms_tmp.hdr.first_track != ms_tmp.hdr.last_track);
2439 /* Now try to get the total cdrom capacity. */
2440 stat = cdrom_get_last_written(cdi, &last_written);
2441 if (!stat && (last_written > toc->capacity)) {
2442 toc->capacity = last_written;
2443 set_capacity(drive->disk, toc->capacity * sectors_per_frame);
2444 drive->probed_capacity = toc->capacity * sectors_per_frame;
2447 /* Remember that we've read this stuff. */
2448 CDROM_STATE_FLAGS(drive)->toc_valid = 1;
2454 static int cdrom_read_subchannel(ide_drive_t *drive, int format, char *buf,
2455 int buflen, struct request_sense *sense)
2459 cdrom_prepare_request(&req);
2463 req.data_len = buflen;
2464 req.cmd[0] = GPCMD_READ_SUBCHANNEL;
2465 req.cmd[1] = 2; /* MSF addressing */
2466 req.cmd[2] = 0x40; /* request subQ data */
2467 req.cmd[3] = format;
2468 req.cmd[7] = (buflen >> 8);
2469 req.cmd[8] = (buflen & 0xff);
2470 return cdrom_queue_packet_command(drive, &req);
2473 /* ATAPI cdrom drives are free to select the speed you request or any slower
2474 rate :-( Requesting too fast a speed will _not_ produce an error. */
2475 static int cdrom_select_speed(ide_drive_t *drive, int speed,
2476 struct request_sense *sense)
2479 cdrom_prepare_request(&req);
2483 speed = 0xffff; /* set to max */
2485 speed *= 177; /* Nx to kbytes/s */
2487 req.cmd[0] = GPCMD_SET_SPEED;
2488 /* Read Drive speed in kbytes/second MSB */
2489 req.cmd[2] = (speed >> 8) & 0xff;
2490 /* Read Drive speed in kbytes/second LSB */
2491 req.cmd[3] = speed & 0xff;
2492 if (CDROM_CONFIG_FLAGS(drive)->cd_r ||
2493 CDROM_CONFIG_FLAGS(drive)->cd_rw ||
2494 CDROM_CONFIG_FLAGS(drive)->dvd_r) {
2495 /* Write Drive speed in kbytes/second MSB */
2496 req.cmd[4] = (speed >> 8) & 0xff;
2497 /* Write Drive speed in kbytes/second LSB */
2498 req.cmd[5] = speed & 0xff;
2501 return cdrom_queue_packet_command(drive, &req);
2504 static int cdrom_play_audio(ide_drive_t *drive, int lba_start, int lba_end)
2506 struct request_sense sense;
2509 cdrom_prepare_request(&req);
2512 req.cmd[0] = GPCMD_PLAY_AUDIO_MSF;
2513 lba_to_msf(lba_start, &req.cmd[3], &req.cmd[4], &req.cmd[5]);
2514 lba_to_msf(lba_end-1, &req.cmd[6], &req.cmd[7], &req.cmd[8]);
2516 return cdrom_queue_packet_command(drive, &req);
2519 static int cdrom_get_toc_entry(ide_drive_t *drive, int track,
2520 struct atapi_toc_entry **ent)
2522 struct cdrom_info *info = drive->driver_data;
2523 struct atapi_toc *toc = info->toc;
2527 * don't serve cached data, if the toc isn't valid
2529 if (!CDROM_STATE_FLAGS(drive)->toc_valid)
2532 /* Check validity of requested track number. */
2533 ntracks = toc->hdr.last_track - toc->hdr.first_track + 1;
2534 if (toc->hdr.first_track == CDROM_LEADOUT) ntracks = 0;
2535 if (track == CDROM_LEADOUT)
2536 *ent = &toc->ent[ntracks];
2537 else if (track < toc->hdr.first_track ||
2538 track > toc->hdr.last_track)
2541 *ent = &toc->ent[track - toc->hdr.first_track];
2546 /* the generic packet interface to cdrom.c */
2547 static int ide_cdrom_packet(struct cdrom_device_info *cdi,
2548 struct packet_command *cgc)
2551 ide_drive_t *drive = (ide_drive_t*) cdi->handle;
2553 if (cgc->timeout <= 0)
2554 cgc->timeout = ATAPI_WAIT_PC;
2556 /* here we queue the commands from the uniform CD-ROM
2557 layer. the packet must be complete, as we do not
2559 cdrom_prepare_request(&req);
2560 memcpy(req.cmd, cgc->cmd, CDROM_PACKET_SIZE);
2562 memset(cgc->sense, 0, sizeof(struct request_sense));
2563 req.data = cgc->buffer;
2564 req.data_len = cgc->buflen;
2565 req.timeout = cgc->timeout;
2568 req.flags |= REQ_QUIET;
2570 req.sense = cgc->sense;
2571 cgc->stat = cdrom_queue_packet_command(drive, &req);
2573 cgc->buflen -= req.data_len;
2578 int ide_cdrom_dev_ioctl (struct cdrom_device_info *cdi,
2579 unsigned int cmd, unsigned long arg)
2581 struct packet_command cgc;
2585 init_cdrom_command(&cgc, buffer, sizeof(buffer), CGC_DATA_UNKNOWN);
2587 /* These will be moved into the Uniform layer shortly... */
2589 case CDROMSETSPINDOWN: {
2592 if (copy_from_user(&spindown, (void __user *) arg, sizeof(char)))
2595 if ((stat = cdrom_mode_sense(cdi, &cgc, GPMODE_CDROM_PAGE, 0)))
2598 buffer[11] = (buffer[11] & 0xf0) | (spindown & 0x0f);
2600 return cdrom_mode_select(cdi, &cgc);
2603 case CDROMGETSPINDOWN: {
2606 if ((stat = cdrom_mode_sense(cdi, &cgc, GPMODE_CDROM_PAGE, 0)))
2609 spindown = buffer[11] & 0x0f;
2611 if (copy_to_user((void __user *) arg, &spindown, sizeof (char)))
2624 int ide_cdrom_audio_ioctl (struct cdrom_device_info *cdi,
2625 unsigned int cmd, void *arg)
2628 ide_drive_t *drive = (ide_drive_t*) cdi->handle;
2629 struct cdrom_info *info = drive->driver_data;
2634 * emulate PLAY_AUDIO_TI command with PLAY_AUDIO_10, since
2635 * atapi doesn't support it
2637 case CDROMPLAYTRKIND: {
2638 unsigned long lba_start, lba_end;
2639 struct cdrom_ti *ti = (struct cdrom_ti *)arg;
2640 struct atapi_toc_entry *first_toc, *last_toc;
2642 stat = cdrom_get_toc_entry(drive, ti->cdti_trk0, &first_toc);
2646 stat = cdrom_get_toc_entry(drive, ti->cdti_trk1, &last_toc);
2650 if (ti->cdti_trk1 != CDROM_LEADOUT)
2652 lba_start = first_toc->addr.lba;
2653 lba_end = last_toc->addr.lba;
2655 if (lba_end <= lba_start)
2658 return cdrom_play_audio(drive, lba_start, lba_end);
2661 case CDROMREADTOCHDR: {
2662 struct cdrom_tochdr *tochdr = (struct cdrom_tochdr *) arg;
2663 struct atapi_toc *toc;
2665 /* Make sure our saved TOC is valid. */
2666 stat = cdrom_read_toc(drive, NULL);
2667 if (stat) return stat;
2670 tochdr->cdth_trk0 = toc->hdr.first_track;
2671 tochdr->cdth_trk1 = toc->hdr.last_track;
2676 case CDROMREADTOCENTRY: {
2677 struct cdrom_tocentry *tocentry = (struct cdrom_tocentry*) arg;
2678 struct atapi_toc_entry *toce;
2680 stat = cdrom_get_toc_entry(drive, tocentry->cdte_track, &toce);
2681 if (stat) return stat;
2683 tocentry->cdte_ctrl = toce->control;
2684 tocentry->cdte_adr = toce->adr;
2685 if (tocentry->cdte_format == CDROM_MSF) {
2686 lba_to_msf (toce->addr.lba,
2687 &tocentry->cdte_addr.msf.minute,
2688 &tocentry->cdte_addr.msf.second,
2689 &tocentry->cdte_addr.msf.frame);
2691 tocentry->cdte_addr.lba = toce->addr.lba;
2702 int ide_cdrom_reset (struct cdrom_device_info *cdi)
2704 ide_drive_t *drive = (ide_drive_t*) cdi->handle;
2705 struct request_sense sense;
2709 cdrom_prepare_request(&req);
2710 req.flags = REQ_SPECIAL | REQ_QUIET;
2711 ret = ide_do_drive_cmd(drive, &req, ide_wait);
2714 * A reset will unlock the door. If it was previously locked,
2717 if (CDROM_STATE_FLAGS(drive)->door_locked)
2718 (void) cdrom_lockdoor(drive, 1, &sense);
2725 int ide_cdrom_tray_move (struct cdrom_device_info *cdi, int position)
2727 ide_drive_t *drive = (ide_drive_t*) cdi->handle;
2728 struct request_sense sense;
2731 int stat = cdrom_lockdoor(drive, 0, &sense);
2732 if (stat) return stat;
2735 return cdrom_eject(drive, !position, &sense);
2739 int ide_cdrom_lock_door (struct cdrom_device_info *cdi, int lock)
2741 ide_drive_t *drive = (ide_drive_t*) cdi->handle;
2742 return cdrom_lockdoor(drive, lock, NULL);
2746 int ide_cdrom_select_speed (struct cdrom_device_info *cdi, int speed)
2748 ide_drive_t *drive = (ide_drive_t*) cdi->handle;
2749 struct request_sense sense;
2752 if ((stat = cdrom_select_speed(drive, speed, &sense)) < 0)
2755 cdi->speed = CDROM_STATE_FLAGS(drive)->current_speed;
2760 * add logic to try GET_EVENT command first to check for media and tray
2761 * status. this should be supported by newer cd-r/w and all DVD etc
2765 int ide_cdrom_drive_status (struct cdrom_device_info *cdi, int slot_nr)
2767 ide_drive_t *drive = (ide_drive_t*) cdi->handle;
2768 struct media_event_desc med;
2769 struct request_sense sense;
2772 if (slot_nr != CDSL_CURRENT)
2775 stat = cdrom_check_status(drive, &sense);
2776 if (!stat || sense.sense_key == UNIT_ATTENTION)
2779 if (!cdrom_get_media_event(cdi, &med)) {
2780 if (med.media_present)
2782 else if (med.door_open)
2783 return CDS_TRAY_OPEN;
2788 if (sense.sense_key == NOT_READY && sense.asc == 0x04 && sense.ascq == 0x04)
2792 * If not using Mt Fuji extended media tray reports,
2793 * just return TRAY_OPEN since ATAPI doesn't provide
2794 * any other way to detect this...
2796 if (sense.sense_key == NOT_READY) {
2797 if (sense.asc == 0x3a && sense.ascq == 1)
2800 return CDS_TRAY_OPEN;
2803 return CDS_DRIVE_NOT_READY;
2807 int ide_cdrom_get_last_session (struct cdrom_device_info *cdi,
2808 struct cdrom_multisession *ms_info)
2810 struct atapi_toc *toc;
2811 ide_drive_t *drive = (ide_drive_t*) cdi->handle;
2812 struct cdrom_info *info = drive->driver_data;
2813 struct request_sense sense;
2816 if (!CDROM_STATE_FLAGS(drive)->toc_valid || info->toc == NULL)
2817 if ((ret = cdrom_read_toc(drive, &sense)))
2821 ms_info->addr.lba = toc->last_session_lba;
2822 ms_info->xa_flag = toc->xa_flag;
2828 int ide_cdrom_get_mcn (struct cdrom_device_info *cdi,
2829 struct cdrom_mcn *mcn_info)
2833 ide_drive_t *drive = (ide_drive_t*) cdi->handle;
2836 if ((stat = cdrom_read_subchannel(drive, 2, mcnbuf, sizeof (mcnbuf), NULL)))
2839 memcpy (mcn_info->medium_catalog_number, mcnbuf+9,
2840 sizeof (mcn_info->medium_catalog_number)-1);
2841 mcn_info->medium_catalog_number[sizeof (mcn_info->medium_catalog_number)-1]
2849 /****************************************************************************
2850 * Other driver requests (open, close, check media change).
2854 int ide_cdrom_check_media_change_real (struct cdrom_device_info *cdi,
2857 ide_drive_t *drive = (ide_drive_t*) cdi->handle;
2860 if (slot_nr == CDSL_CURRENT) {
2861 (void) cdrom_check_status(drive, NULL);
2862 retval = CDROM_STATE_FLAGS(drive)->media_changed;
2863 CDROM_STATE_FLAGS(drive)->media_changed = 0;
2872 int ide_cdrom_open_real (struct cdrom_device_info *cdi, int purpose)
2878 * Close down the device. Invalidate all cached blocks.
2882 void ide_cdrom_release_real (struct cdrom_device_info *cdi)
2884 ide_drive_t *drive = cdi->handle;
2886 if (!cdi->use_count)
2887 CDROM_STATE_FLAGS(drive)->toc_valid = 0;
2892 /****************************************************************************
2893 * Device initialization.
2895 static struct cdrom_device_ops ide_cdrom_dops = {
2896 .open = ide_cdrom_open_real,
2897 .release = ide_cdrom_release_real,
2898 .drive_status = ide_cdrom_drive_status,
2899 .media_changed = ide_cdrom_check_media_change_real,
2900 .tray_move = ide_cdrom_tray_move,
2901 .lock_door = ide_cdrom_lock_door,
2902 .select_speed = ide_cdrom_select_speed,
2903 .get_last_session = ide_cdrom_get_last_session,
2904 .get_mcn = ide_cdrom_get_mcn,
2905 .reset = ide_cdrom_reset,
2906 .audio_ioctl = ide_cdrom_audio_ioctl,
2907 .dev_ioctl = ide_cdrom_dev_ioctl,
2908 .capability = CDC_CLOSE_TRAY | CDC_OPEN_TRAY | CDC_LOCK |
2909 CDC_SELECT_SPEED | CDC_SELECT_DISC |
2910 CDC_MULTI_SESSION | CDC_MCN |
2911 CDC_MEDIA_CHANGED | CDC_PLAY_AUDIO | CDC_RESET |
2912 CDC_IOCTLS | CDC_DRIVE_STATUS | CDC_CD_R |
2913 CDC_CD_RW | CDC_DVD | CDC_DVD_R| CDC_DVD_RAM |
2914 CDC_GENERIC_PACKET | CDC_MO_DRIVE | CDC_MRW |
2915 CDC_MRW_W | CDC_RAM,
2916 .generic_packet = ide_cdrom_packet,
2919 static int ide_cdrom_register (ide_drive_t *drive, int nslots)
2921 struct cdrom_info *info = drive->driver_data;
2922 struct cdrom_device_info *devinfo = &info->devinfo;
2924 devinfo->ops = &ide_cdrom_dops;
2926 devinfo->speed = CDROM_STATE_FLAGS(drive)->current_speed;
2927 devinfo->capacity = nslots;
2928 devinfo->handle = (void *) drive;
2929 strcpy(devinfo->name, drive->name);
2931 /* set capability mask to match the probe. */
2932 if (!CDROM_CONFIG_FLAGS(drive)->cd_r)
2933 devinfo->mask |= CDC_CD_R;
2934 if (!CDROM_CONFIG_FLAGS(drive)->cd_rw)
2935 devinfo->mask |= CDC_CD_RW;
2936 if (!CDROM_CONFIG_FLAGS(drive)->dvd)
2937 devinfo->mask |= CDC_DVD;
2938 if (!CDROM_CONFIG_FLAGS(drive)->dvd_r)
2939 devinfo->mask |= CDC_DVD_R;
2940 if (!CDROM_CONFIG_FLAGS(drive)->dvd_ram)
2941 devinfo->mask |= CDC_DVD_RAM;
2942 if (!CDROM_CONFIG_FLAGS(drive)->is_changer)
2943 devinfo->mask |= CDC_SELECT_DISC;
2944 if (!CDROM_CONFIG_FLAGS(drive)->audio_play)
2945 devinfo->mask |= CDC_PLAY_AUDIO;
2946 if (!CDROM_CONFIG_FLAGS(drive)->close_tray)
2947 devinfo->mask |= CDC_CLOSE_TRAY;
2948 if (!CDROM_CONFIG_FLAGS(drive)->mo_drive)
2949 devinfo->mask |= CDC_MO_DRIVE;
2951 devinfo->disk = drive->disk;
2952 return register_cdrom(devinfo);
2956 int ide_cdrom_get_capabilities(ide_drive_t *drive, struct atapi_capabilities_page *cap)
2958 struct cdrom_info *info = drive->driver_data;
2959 struct cdrom_device_info *cdi = &info->devinfo;
2960 struct packet_command cgc;
2961 int stat, attempts = 3, size = sizeof(*cap);
2964 * ACER50 (and others?) require the full spec length mode sense
2965 * page capabilities size, but older drives break.
2967 if (!(!strcmp(drive->id->model, "ATAPI CD ROM DRIVE 50X MAX") ||
2968 !strcmp(drive->id->model, "WPI CDS-32X")))
2969 size -= sizeof(cap->pad);
2971 init_cdrom_command(&cgc, cap, size, CGC_DATA_UNKNOWN);
2972 do { /* we seem to get stat=0x01,err=0x00 the first time (??) */
2973 stat = cdrom_mode_sense(cdi, &cgc, GPMODE_CAPABILITIES_PAGE, 0);
2976 } while (--attempts);
2981 int ide_cdrom_probe_capabilities (ide_drive_t *drive)
2983 struct cdrom_info *info = drive->driver_data;
2984 struct cdrom_device_info *cdi = &info->devinfo;
2985 struct atapi_capabilities_page cap;
2988 if (drive->media == ide_optical) {
2989 CDROM_CONFIG_FLAGS(drive)->mo_drive = 1;
2990 CDROM_CONFIG_FLAGS(drive)->ram = 1;
2991 printk(KERN_ERR "%s: ATAPI magneto-optical drive\n", drive->name);
2995 if (CDROM_CONFIG_FLAGS(drive)->nec260 ||
2996 !strcmp(drive->id->model,"STINGRAY 8422 IDE 8X CD-ROM 7-27-95")) {
2997 CDROM_CONFIG_FLAGS(drive)->no_eject = 0;
2998 CDROM_CONFIG_FLAGS(drive)->audio_play = 1;
3003 * we have to cheat a little here. the packet will eventually
3004 * be queued with ide_cdrom_packet(), which extracts the
3005 * drive from cdi->handle. Since this device hasn't been
3006 * registered with the Uniform layer yet, it can't do this.
3007 * Same goes for cdi->ops.
3009 cdi->handle = (ide_drive_t *) drive;
3010 cdi->ops = &ide_cdrom_dops;
3012 if (ide_cdrom_get_capabilities(drive, &cap))
3016 CDROM_CONFIG_FLAGS(drive)->no_doorlock = 1;
3018 CDROM_CONFIG_FLAGS(drive)->no_eject = 0;
3020 CDROM_CONFIG_FLAGS(drive)->cd_r = 1;
3021 if (cap.cd_rw_write) {
3022 CDROM_CONFIG_FLAGS(drive)->cd_rw = 1;
3023 CDROM_CONFIG_FLAGS(drive)->ram = 1;
3026 CDROM_CONFIG_FLAGS(drive)->test_write = 1;
3027 if (cap.dvd_ram_read || cap.dvd_r_read || cap.dvd_rom)
3028 CDROM_CONFIG_FLAGS(drive)->dvd = 1;
3029 if (cap.dvd_ram_write) {
3030 CDROM_CONFIG_FLAGS(drive)->dvd_ram = 1;
3031 CDROM_CONFIG_FLAGS(drive)->ram = 1;
3033 if (cap.dvd_r_write)
3034 CDROM_CONFIG_FLAGS(drive)->dvd_r = 1;
3036 CDROM_CONFIG_FLAGS(drive)->audio_play = 1;
3037 if (cap.mechtype == mechtype_caddy || cap.mechtype == mechtype_popup)
3038 CDROM_CONFIG_FLAGS(drive)->close_tray = 0;
3040 /* Some drives used by Apple don't advertise audio play
3041 * but they do support reading TOC & audio datas
3043 if (strcmp(drive->id->model, "MATSHITADVD-ROM SR-8187") == 0 ||
3044 strcmp(drive->id->model, "MATSHITADVD-ROM SR-8186") == 0 ||
3045 strcmp(drive->id->model, "MATSHITADVD-ROM SR-8176") == 0 ||
3046 strcmp(drive->id->model, "MATSHITADVD-ROM SR-8174") == 0)
3047 CDROM_CONFIG_FLAGS(drive)->audio_play = 1;
3049 #if ! STANDARD_ATAPI
3050 if (cdi->sanyo_slot > 0) {
3051 CDROM_CONFIG_FLAGS(drive)->is_changer = 1;
3056 #endif /* not STANDARD_ATAPI */
3057 if (cap.mechtype == mechtype_individual_changer ||
3058 cap.mechtype == mechtype_cartridge_changer) {
3059 if ((nslots = cdrom_number_of_slots(cdi)) > 1) {
3060 CDROM_CONFIG_FLAGS(drive)->is_changer = 1;
3061 CDROM_CONFIG_FLAGS(drive)->supp_disc_present = 1;
3065 /* The ACER/AOpen 24X cdrom has the speed fields byte-swapped */
3066 if (!drive->id->model[0] &&
3067 !strncmp(drive->id->fw_rev, "241N", 4)) {
3068 CDROM_STATE_FLAGS(drive)->current_speed =
3069 (((unsigned int)cap.curspeed) + (176/2)) / 176;
3070 CDROM_CONFIG_FLAGS(drive)->max_speed =
3071 (((unsigned int)cap.maxspeed) + (176/2)) / 176;
3073 CDROM_STATE_FLAGS(drive)->current_speed =
3074 (ntohs(cap.curspeed) + (176/2)) / 176;
3075 CDROM_CONFIG_FLAGS(drive)->max_speed =
3076 (ntohs(cap.maxspeed) + (176/2)) / 176;
3079 /* don't print speed if the drive reported 0.
3081 printk(KERN_INFO "%s: ATAPI", drive->name);
3082 if (CDROM_CONFIG_FLAGS(drive)->max_speed)
3083 printk(" %dX", CDROM_CONFIG_FLAGS(drive)->max_speed);
3084 printk(" %s", CDROM_CONFIG_FLAGS(drive)->dvd ? "DVD-ROM" : "CD-ROM");
3086 if (CDROM_CONFIG_FLAGS(drive)->dvd_r|CDROM_CONFIG_FLAGS(drive)->dvd_ram)
3088 (CDROM_CONFIG_FLAGS(drive)->dvd_r)? "-R" : "",
3089 (CDROM_CONFIG_FLAGS(drive)->dvd_ram)? "-RAM" : "");
3091 if (CDROM_CONFIG_FLAGS(drive)->cd_r|CDROM_CONFIG_FLAGS(drive)->cd_rw)
3093 (CDROM_CONFIG_FLAGS(drive)->cd_r)? "-R" : "",
3094 (CDROM_CONFIG_FLAGS(drive)->cd_rw)? "/RW" : "");
3096 if (CDROM_CONFIG_FLAGS(drive)->is_changer)
3097 printk(" changer w/%d slots", nslots);
3101 printk(", %dkB Cache", be16_to_cpu(cap.buffer_size));
3103 if (drive->using_dma)
3104 ide_dma_verbose(drive);
3111 static void ide_cdrom_add_settings(ide_drive_t *drive)
3113 ide_add_setting(drive, "dsc_overlap", SETTING_RW, -1, -1, TYPE_BYTE, 0, 1, 1, 1, &drive->dsc_overlap, NULL);
3117 * standard prep_rq_fn that builds 10 byte cmds
3119 static int ide_cdrom_prep_fs(request_queue_t *q, struct request *rq)
3121 int hard_sect = queue_hardsect_size(q);
3122 long block = (long)rq->hard_sector / (hard_sect >> 9);
3123 unsigned long blocks = rq->hard_nr_sectors / (hard_sect >> 9);
3125 memset(rq->cmd, 0, sizeof(rq->cmd));
3127 if (rq_data_dir(rq) == READ)
3128 rq->cmd[0] = GPCMD_READ_10;
3130 rq->cmd[0] = GPCMD_WRITE_10;
3135 rq->cmd[2] = (block >> 24) & 0xff;
3136 rq->cmd[3] = (block >> 16) & 0xff;
3137 rq->cmd[4] = (block >> 8) & 0xff;
3138 rq->cmd[5] = block & 0xff;
3141 * and transfer length
3143 rq->cmd[7] = (blocks >> 8) & 0xff;
3144 rq->cmd[8] = blocks & 0xff;
3150 * Most of the SCSI commands are supported directly by ATAPI devices.
3151 * This transform handles the few exceptions.
3153 static int ide_cdrom_prep_pc(struct request *rq)
3158 * Transform 6-byte read/write commands to the 10-byte version
3160 if (c[0] == READ_6 || c[0] == WRITE_6) {
3167 c[0] += (READ_10 - READ_6);
3173 * it's silly to pretend we understand 6-byte sense commands, just
3174 * reject with ILLEGAL_REQUEST and the caller should take the
3175 * appropriate action
3177 if (c[0] == MODE_SENSE || c[0] == MODE_SELECT) {
3178 rq->errors = ILLEGAL_REQUEST;
3179 return BLKPREP_KILL;
3185 static int ide_cdrom_prep_fn(request_queue_t *q, struct request *rq)
3187 if (rq->flags & REQ_CMD)
3188 return ide_cdrom_prep_fs(q, rq);
3189 else if (rq->flags & REQ_BLOCK_PC)
3190 return ide_cdrom_prep_pc(rq);
3196 int ide_cdrom_setup (ide_drive_t *drive)
3198 struct cdrom_info *info = drive->driver_data;
3199 struct cdrom_device_info *cdi = &info->devinfo;
3202 blk_queue_prep_rq(drive->queue, ide_cdrom_prep_fn);
3203 blk_queue_dma_alignment(drive->queue, 31);
3204 drive->queue->unplug_delay = (1 * HZ) / 1000;
3205 if (!drive->queue->unplug_delay)
3206 drive->queue->unplug_delay = 1;
3208 drive->special.all = 0;
3209 drive->ready_stat = 0;
3211 CDROM_STATE_FLAGS(drive)->media_changed = 1;
3212 CDROM_STATE_FLAGS(drive)->toc_valid = 0;
3213 CDROM_STATE_FLAGS(drive)->door_locked = 0;
3216 CDROM_CONFIG_FLAGS(drive)->no_doorlock = 1;
3218 CDROM_CONFIG_FLAGS(drive)->no_doorlock = 0;
3221 CDROM_CONFIG_FLAGS(drive)->drq_interrupt = ((drive->id->config & 0x0060) == 0x20);
3222 CDROM_CONFIG_FLAGS(drive)->is_changer = 0;
3223 CDROM_CONFIG_FLAGS(drive)->cd_r = 0;
3224 CDROM_CONFIG_FLAGS(drive)->cd_rw = 0;
3225 CDROM_CONFIG_FLAGS(drive)->test_write = 0;
3226 CDROM_CONFIG_FLAGS(drive)->dvd = 0;
3227 CDROM_CONFIG_FLAGS(drive)->dvd_r = 0;
3228 CDROM_CONFIG_FLAGS(drive)->dvd_ram = 0;
3229 CDROM_CONFIG_FLAGS(drive)->no_eject = 1;
3230 CDROM_CONFIG_FLAGS(drive)->supp_disc_present = 0;
3231 CDROM_CONFIG_FLAGS(drive)->audio_play = 0;
3232 CDROM_CONFIG_FLAGS(drive)->close_tray = 1;
3234 /* limit transfer size per interrupt. */
3235 CDROM_CONFIG_FLAGS(drive)->limit_nframes = 0;
3236 /* a testament to the nice quality of Samsung drives... */
3237 if (!strcmp(drive->id->model, "SAMSUNG CD-ROM SCR-2430"))
3238 CDROM_CONFIG_FLAGS(drive)->limit_nframes = 1;
3239 else if (!strcmp(drive->id->model, "SAMSUNG CD-ROM SCR-2432"))
3240 CDROM_CONFIG_FLAGS(drive)->limit_nframes = 1;
3241 /* the 3231 model does not support the SET_CD_SPEED command */
3242 else if (!strcmp(drive->id->model, "SAMSUNG CD-ROM SCR-3231"))
3243 cdi->mask |= CDC_SELECT_SPEED;
3245 #if ! STANDARD_ATAPI
3246 /* by default Sanyo 3 CD changer support is turned off and
3247 ATAPI Rev 2.2+ standard support for CD changers is used */
3248 cdi->sanyo_slot = 0;
3250 CDROM_CONFIG_FLAGS(drive)->nec260 = 0;
3251 CDROM_CONFIG_FLAGS(drive)->toctracks_as_bcd = 0;
3252 CDROM_CONFIG_FLAGS(drive)->tocaddr_as_bcd = 0;
3253 CDROM_CONFIG_FLAGS(drive)->playmsf_as_bcd = 0;
3254 CDROM_CONFIG_FLAGS(drive)->subchan_as_bcd = 0;
3256 if (strcmp (drive->id->model, "V003S0DS") == 0 &&
3257 drive->id->fw_rev[4] == '1' &&
3258 drive->id->fw_rev[6] <= '2') {
3260 Some versions of this drive like to talk BCD. */
3261 CDROM_CONFIG_FLAGS(drive)->toctracks_as_bcd = 1;
3262 CDROM_CONFIG_FLAGS(drive)->tocaddr_as_bcd = 1;
3263 CDROM_CONFIG_FLAGS(drive)->playmsf_as_bcd = 1;
3264 CDROM_CONFIG_FLAGS(drive)->subchan_as_bcd = 1;
3267 else if (strcmp (drive->id->model, "V006E0DS") == 0 &&
3268 drive->id->fw_rev[4] == '1' &&
3269 drive->id->fw_rev[6] <= '2') {
3270 /* Vertos 600 ESD. */
3271 CDROM_CONFIG_FLAGS(drive)->toctracks_as_bcd = 1;
3273 else if (strcmp(drive->id->model, "NEC CD-ROM DRIVE:260") == 0 &&
3274 strncmp(drive->id->fw_rev, "1.01", 4) == 0) { /* FIXME */
3275 /* Old NEC260 (not R).
3276 This drive was released before the 1.2 version
3278 CDROM_CONFIG_FLAGS(drive)->tocaddr_as_bcd = 1;
3279 CDROM_CONFIG_FLAGS(drive)->playmsf_as_bcd = 1;
3280 CDROM_CONFIG_FLAGS(drive)->subchan_as_bcd = 1;
3281 CDROM_CONFIG_FLAGS(drive)->nec260 = 1;
3283 else if (strcmp(drive->id->model, "WEARNES CDD-120") == 0 &&
3284 strncmp(drive->id->fw_rev, "A1.1", 4) == 0) { /* FIXME */
3286 CDROM_CONFIG_FLAGS(drive)->playmsf_as_bcd = 1;
3287 CDROM_CONFIG_FLAGS(drive)->subchan_as_bcd = 1;
3289 /* Sanyo 3 CD changer uses a non-standard command
3291 else if ((strcmp(drive->id->model, "CD-ROM CDR-C3 G") == 0) ||
3292 (strcmp(drive->id->model, "CD-ROM CDR-C3G") == 0) ||
3293 (strcmp(drive->id->model, "CD-ROM CDR_C36") == 0)) {
3294 /* uses CD in slot 0 when value is set to 3 */
3295 cdi->sanyo_slot = 3;
3297 #endif /* not STANDARD_ATAPI */
3300 info->buffer = NULL;
3301 info->sector_buffered = 0;
3302 info->nsectors_buffered = 0;
3303 info->changer_info = NULL;
3304 info->last_block = 0;
3305 info->start_seek = 0;
3307 nslots = ide_cdrom_probe_capabilities (drive);
3310 * set correct block size
3312 blk_queue_hardsect_size(drive->queue, CD_FRAMESIZE);
3315 drive->dsc_overlap = (HWIF(drive)->no_dsc) ? 0 : 1;
3316 if (HWIF(drive)->no_dsc) {
3317 printk(KERN_INFO "ide-cd: %s: disabling DSC overlap\n",
3319 drive->dsc_overlap = 0;
3323 if (ide_cdrom_register(drive, nslots)) {
3324 printk (KERN_ERR "%s: ide_cdrom_setup failed to register device with the cdrom driver.\n", drive->name);
3325 info->devinfo.handle = NULL;
3328 ide_cdrom_add_settings(drive);
3333 sector_t ide_cdrom_capacity (ide_drive_t *drive)
3335 unsigned long capacity, sectors_per_frame;
3337 if (cdrom_read_capacity(drive, &capacity, §ors_per_frame, NULL))
3340 return capacity * sectors_per_frame;
3344 int ide_cdrom_cleanup(ide_drive_t *drive)
3346 struct cdrom_info *info = drive->driver_data;
3347 struct cdrom_device_info *devinfo = &info->devinfo;
3348 struct gendisk *g = drive->disk;
3350 if (ide_unregister_subdriver(drive)) {
3351 printk(KERN_ERR "%s: %s: failed to ide_unregister_subdriver\n",
3352 __FUNCTION__, drive->name);
3355 if (info->buffer != NULL)
3356 kfree(info->buffer);
3357 if (info->toc != NULL)
3359 if (info->changer_info != NULL)
3360 kfree(info->changer_info);
3361 if (devinfo->handle == drive && unregister_cdrom(devinfo))
3362 printk(KERN_ERR "%s: ide_cdrom_cleanup failed to unregister device from the cdrom driver.\n", drive->name);
3364 drive->driver_data = NULL;
3365 blk_queue_prep_rq(drive->queue, NULL);
3371 static int ide_cdrom_attach (ide_drive_t *drive);
3374 * Power Management state machine.
3376 * We don't do much for CDs right now.
3379 static void ide_cdrom_complete_power_step (ide_drive_t *drive, struct request *rq, u8 stat, u8 error)
3383 static ide_startstop_t ide_cdrom_start_power_step (ide_drive_t *drive, struct request *rq)
3385 ide_task_t *args = rq->special;
3387 memset(args, 0, sizeof(*args));
3389 switch (rq->pm->pm_step) {
3390 case ide_pm_state_start_suspend:
3393 case ide_pm_state_start_resume: /* Resume step 1 (restore DMA) */
3395 * Right now, all we do is call hwif->ide_dma_check(drive),
3396 * we could be smarter and check for current xfer_speed
3397 * in struct drive etc...
3398 * Also, this step could be implemented as a generic helper
3399 * as most subdrivers will use it.
3401 if ((drive->id->capability & 1) == 0)
3403 if (HWIF(drive)->ide_dma_check == NULL)
3405 HWIF(drive)->ide_dma_check(drive);
3408 rq->pm->pm_step = ide_pm_state_completed;
3412 static ide_driver_t ide_cdrom_driver = {
3413 .owner = THIS_MODULE,
3414 .name = "ide-cdrom",
3415 .version = IDECD_VERSION,
3418 .supports_dsc_overlap = 1,
3419 .cleanup = ide_cdrom_cleanup,
3420 .do_request = ide_do_rw_cdrom,
3421 .sense = ide_dump_atapi_status,
3422 .error = ide_cdrom_error,
3423 .abort = ide_cdrom_abort,
3424 .capacity = ide_cdrom_capacity,
3425 .attach = ide_cdrom_attach,
3426 .drives = LIST_HEAD_INIT(ide_cdrom_driver.drives),
3427 .start_power_step = ide_cdrom_start_power_step,
3428 .complete_power_step = ide_cdrom_complete_power_step,
3431 static int idecd_open(struct inode * inode, struct file * file)
3433 ide_drive_t *drive = inode->i_bdev->bd_disk->private_data;
3434 struct cdrom_info *info = drive->driver_data;
3439 info->buffer = kmalloc(SECTOR_BUFFER_SIZE,
3440 GFP_KERNEL|__GFP_REPEAT);
3441 if (!info->buffer || (rc = cdrom_open(&info->devinfo, inode, file)))
3446 static int idecd_release(struct inode * inode, struct file * file)
3448 ide_drive_t *drive = inode->i_bdev->bd_disk->private_data;
3449 struct cdrom_info *info = drive->driver_data;
3451 cdrom_release (&info->devinfo, file);
3456 static int idecd_ioctl (struct inode *inode, struct file *file,
3457 unsigned int cmd, unsigned long arg)
3459 struct block_device *bdev = inode->i_bdev;
3460 ide_drive_t *drive = bdev->bd_disk->private_data;
3461 int err = generic_ide_ioctl(file, bdev, cmd, arg);
3462 if (err == -EINVAL) {
3463 struct cdrom_info *info = drive->driver_data;
3464 err = cdrom_ioctl(file, &info->devinfo, inode, cmd, arg);
3469 static int idecd_media_changed(struct gendisk *disk)
3471 ide_drive_t *drive = disk->private_data;
3472 struct cdrom_info *info = drive->driver_data;
3473 return cdrom_media_changed(&info->devinfo);
3476 static int idecd_revalidate_disk(struct gendisk *disk)
3478 ide_drive_t *drive = disk->private_data;
3479 struct request_sense sense;
3480 cdrom_read_toc(drive, &sense);
3484 static struct block_device_operations idecd_ops = {
3485 .owner = THIS_MODULE,
3487 .release = idecd_release,
3488 .ioctl = idecd_ioctl,
3489 .media_changed = idecd_media_changed,
3490 .revalidate_disk= idecd_revalidate_disk
3494 static char *ignore = NULL;
3496 module_param(ignore, charp, 0400);
3497 MODULE_DESCRIPTION("ATAPI CD-ROM Driver");
3499 static int ide_cdrom_attach (ide_drive_t *drive)
3501 struct cdrom_info *info;
3502 struct gendisk *g = drive->disk;
3503 struct request_sense sense;
3505 if (!strstr("ide-cdrom", drive->driver_req))
3507 if (!drive->present)
3509 if (drive->media != ide_cdrom && drive->media != ide_optical)
3511 /* skip drives that we were told to ignore */
3512 if (ignore != NULL) {
3513 if (strstr(ignore, drive->name)) {
3514 printk(KERN_INFO "ide-cd: ignoring drive %s\n", drive->name);
3519 printk(KERN_INFO "ide-cd: passing drive %s to ide-scsi emulation.\n", drive->name);
3522 info = (struct cdrom_info *) kmalloc (sizeof (struct cdrom_info), GFP_KERNEL);
3524 printk(KERN_ERR "%s: Can't allocate a cdrom structure\n", drive->name);
3527 if (ide_register_subdriver(drive, &ide_cdrom_driver)) {
3528 printk(KERN_ERR "%s: Failed to register the driver with ide.c\n",
3533 memset(info, 0, sizeof (struct cdrom_info));
3534 drive->driver_data = info;
3535 DRIVER(drive)->busy++;
3537 snprintf(g->devfs_name, sizeof(g->devfs_name),
3538 "%s/cd", drive->devfs_name);
3539 g->driverfs_dev = &drive->gendev;
3540 g->flags = GENHD_FL_CD | GENHD_FL_REMOVABLE;
3541 if (ide_cdrom_setup(drive)) {
3542 struct cdrom_device_info *devinfo = &info->devinfo;
3543 DRIVER(drive)->busy--;
3544 ide_unregister_subdriver(drive);
3545 if (info->buffer != NULL)
3546 kfree(info->buffer);
3547 if (info->toc != NULL)
3549 if (info->changer_info != NULL)
3550 kfree(info->changer_info);
3551 if (devinfo->handle == drive && unregister_cdrom(devinfo))
3552 printk (KERN_ERR "%s: ide_cdrom_cleanup failed to unregister device from the cdrom driver.\n", drive->name);
3554 drive->driver_data = NULL;
3557 DRIVER(drive)->busy--;
3559 cdrom_read_toc(drive, &sense);
3560 g->fops = &idecd_ops;
3561 g->flags |= GENHD_FL_REMOVABLE;
3568 static void __exit ide_cdrom_exit(void)
3570 ide_unregister_driver(&ide_cdrom_driver);
3573 static int ide_cdrom_init(void)
3575 ide_register_driver(&ide_cdrom_driver);
3579 module_init(ide_cdrom_init);
3580 module_exit(ide_cdrom_exit);
3581 MODULE_LICENSE("GPL");