ide-cd: unify request end exit path in cdrom_decode_status()
[safe/jmp/linux-2.6] / drivers / ide / ide-cd.c
1 /*
2  * linux/drivers/ide/ide-cd.c
3  *
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>
7  *
8  * May be copied or modified under the terms of the GNU General Public
9  * License.  See linux/COPYING for more information.
10  *
11  * ATAPI CD-ROM driver.  To be used with ide.c.
12  * See Documentation/cdrom/ide-cd for usage information.
13  *
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 
18  * anonymous ftp from:
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
21  *
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...
25  *
26  * ----------------------------------
27  * TO DO LIST:
28  * -Make it so that Pioneer CD DR-A24X and friends don't get screwed up on
29  *   boot
30  *
31  * For historical changelog please see:
32  *      Documentation/ide/ChangeLog.ide-cd.1994-2004
33  */
34
35 #define IDECD_VERSION "4.61"
36
37 #include <linux/module.h>
38 #include <linux/types.h>
39 #include <linux/kernel.h>
40 #include <linux/delay.h>
41 #include <linux/timer.h>
42 #include <linux/slab.h>
43 #include <linux/interrupt.h>
44 #include <linux/errno.h>
45 #include <linux/cdrom.h>
46 #include <linux/ide.h>
47 #include <linux/completion.h>
48 #include <linux/mutex.h>
49 #include <linux/bcd.h>
50
51 #include <scsi/scsi.h>  /* For SCSI -> ATAPI command conversion */
52
53 #include <asm/irq.h>
54 #include <asm/io.h>
55 #include <asm/byteorder.h>
56 #include <asm/uaccess.h>
57 #include <asm/unaligned.h>
58
59 #include "ide-cd.h"
60
61 static DEFINE_MUTEX(idecd_ref_mutex);
62
63 #define to_ide_cd(obj) container_of(obj, struct cdrom_info, kref) 
64
65 #define ide_cd_g(disk) \
66         container_of((disk)->private_data, struct cdrom_info, driver)
67
68 static struct cdrom_info *ide_cd_get(struct gendisk *disk)
69 {
70         struct cdrom_info *cd = NULL;
71
72         mutex_lock(&idecd_ref_mutex);
73         cd = ide_cd_g(disk);
74         if (cd)
75                 kref_get(&cd->kref);
76         mutex_unlock(&idecd_ref_mutex);
77         return cd;
78 }
79
80 static void ide_cd_release(struct kref *);
81
82 static void ide_cd_put(struct cdrom_info *cd)
83 {
84         mutex_lock(&idecd_ref_mutex);
85         kref_put(&cd->kref, ide_cd_release);
86         mutex_unlock(&idecd_ref_mutex);
87 }
88
89 /****************************************************************************
90  * Generic packet command support and error handling routines.
91  */
92
93 /* Mark that we've seen a media change, and invalidate our internal
94    buffers. */
95 static void cdrom_saw_media_change (ide_drive_t *drive)
96 {
97         struct cdrom_info *cd = drive->driver_data;
98
99         cd->cd_flags |= IDE_CD_FLAG_MEDIA_CHANGED;
100         cd->cd_flags &= ~IDE_CD_FLAG_TOC_VALID;
101         cd->nsectors_buffered = 0;
102 }
103
104 static int cdrom_log_sense(ide_drive_t *drive, struct request *rq,
105                            struct request_sense *sense)
106 {
107         int log = 0;
108
109         if (!sense || !rq || (rq->cmd_flags & REQ_QUIET))
110                 return 0;
111
112         switch (sense->sense_key) {
113                 case NO_SENSE: case RECOVERED_ERROR:
114                         break;
115                 case NOT_READY:
116                         /*
117                          * don't care about tray state messages for
118                          * e.g. capacity commands or in-progress or
119                          * becoming ready
120                          */
121                         if (sense->asc == 0x3a || sense->asc == 0x04)
122                                 break;
123                         log = 1;
124                         break;
125                 case ILLEGAL_REQUEST:
126                         /*
127                          * don't log START_STOP unit with LoEj set, since
128                          * we cannot reliably check if drive can auto-close
129                          */
130                         if (rq->cmd[0] == GPCMD_START_STOP_UNIT && sense->asc == 0x24)
131                                 break;
132                         log = 1;
133                         break;
134                 case UNIT_ATTENTION:
135                         /*
136                          * Make good and sure we've seen this potential media
137                          * change. Some drives (i.e. Creative) fail to present
138                          * the correct sense key in the error register.
139                          */
140                         cdrom_saw_media_change(drive);
141                         break;
142                 default:
143                         log = 1;
144                         break;
145         }
146         return log;
147 }
148
149 static
150 void cdrom_analyze_sense_data(ide_drive_t *drive,
151                               struct request *failed_command,
152                               struct request_sense *sense)
153 {
154         unsigned long sector;
155         unsigned long bio_sectors;
156         unsigned long valid;
157         struct cdrom_info *info = drive->driver_data;
158
159         if (!cdrom_log_sense(drive, failed_command, sense))
160                 return;
161
162         /*
163          * If a read toc is executed for a CD-R or CD-RW medium where
164          * the first toc has not been recorded yet, it will fail with
165          * 05/24/00 (which is a confusing error)
166          */
167         if (failed_command && failed_command->cmd[0] == GPCMD_READ_TOC_PMA_ATIP)
168                 if (sense->sense_key == 0x05 && sense->asc == 0x24)
169                         return;
170
171         if (sense->error_code == 0x70) {        /* Current Error */
172                 switch(sense->sense_key) {
173                 case MEDIUM_ERROR:
174                 case VOLUME_OVERFLOW:
175                 case ILLEGAL_REQUEST:
176                         if (!sense->valid)
177                                 break;
178                         if (failed_command == NULL ||
179                                         !blk_fs_request(failed_command))
180                                 break;
181                         sector = (sense->information[0] << 24) |
182                                  (sense->information[1] << 16) |
183                                  (sense->information[2] <<  8) |
184                                  (sense->information[3]);
185
186                         bio_sectors = bio_sectors(failed_command->bio);
187                         if (bio_sectors < 4)
188                                 bio_sectors = 4;
189                         if (drive->queue->hardsect_size == 2048)
190                                 sector <<= 2;   /* Device sector size is 2K */
191                         sector &= ~(bio_sectors -1);
192                         valid = (sector - failed_command->sector) << 9;
193
194                         if (valid < 0)
195                                 valid = 0;
196                         if (sector < get_capacity(info->disk) &&
197                                 drive->probed_capacity - sector < 4 * 75) {
198                                 set_capacity(info->disk, sector);
199                         }
200                 }
201         }
202
203         ide_cd_log_error(drive->name, failed_command, sense);
204 }
205
206 /*
207  * Initialize a ide-cd packet command request
208  */
209 void ide_cd_init_rq(ide_drive_t *drive, struct request *rq)
210 {
211         struct cdrom_info *cd = drive->driver_data;
212
213         ide_init_drive_cmd(rq);
214         rq->cmd_type = REQ_TYPE_ATA_PC;
215         rq->rq_disk = cd->disk;
216 }
217
218 static void cdrom_queue_request_sense(ide_drive_t *drive, void *sense,
219                                       struct request *failed_command)
220 {
221         struct cdrom_info *info         = drive->driver_data;
222         struct request *rq              = &info->request_sense_request;
223
224         if (sense == NULL)
225                 sense = &info->sense_data;
226
227         /* stuff the sense request in front of our current request */
228         ide_cd_init_rq(drive, rq);
229
230         rq->data = sense;
231         rq->cmd[0] = GPCMD_REQUEST_SENSE;
232         rq->cmd[4] = rq->data_len = 18;
233
234         rq->cmd_type = REQ_TYPE_SENSE;
235
236         /* NOTE! Save the failed command in "rq->buffer" */
237         rq->buffer = (void *) failed_command;
238
239         (void) ide_do_drive_cmd(drive, rq, ide_preempt);
240 }
241
242 static void cdrom_end_request (ide_drive_t *drive, int uptodate)
243 {
244         struct request *rq = HWGROUP(drive)->rq;
245         int nsectors = rq->hard_cur_sectors;
246
247         if (blk_sense_request(rq) && uptodate) {
248                 /*
249                  * For REQ_TYPE_SENSE, "rq->buffer" points to the original
250                  * failed request
251                  */
252                 struct request *failed = (struct request *) rq->buffer;
253                 struct cdrom_info *info = drive->driver_data;
254                 void *sense = &info->sense_data;
255                 unsigned long flags;
256
257                 if (failed) {
258                         if (failed->sense) {
259                                 sense = failed->sense;
260                                 failed->sense_len = rq->sense_len;
261                         }
262                         cdrom_analyze_sense_data(drive, failed, sense);
263                         /*
264                          * now end failed request
265                          */
266                         if (blk_fs_request(failed)) {
267                                 if (ide_end_dequeued_request(drive, failed, 0,
268                                                 failed->hard_nr_sectors))
269                                         BUG();
270                         } else {
271                                 spin_lock_irqsave(&ide_lock, flags);
272                                 if (__blk_end_request(failed, -EIO,
273                                                       failed->data_len))
274                                         BUG();
275                                 spin_unlock_irqrestore(&ide_lock, flags);
276                         }
277                 } else
278                         cdrom_analyze_sense_data(drive, NULL, sense);
279         }
280
281         if (!rq->current_nr_sectors && blk_fs_request(rq))
282                 uptodate = 1;
283         /* make sure it's fully ended */
284         if (blk_pc_request(rq))
285                 nsectors = (rq->data_len + 511) >> 9;
286         if (!nsectors)
287                 nsectors = 1;
288
289         ide_end_request(drive, uptodate, nsectors);
290 }
291
292 static void ide_dump_status_no_sense(ide_drive_t *drive, const char *msg, u8 stat)
293 {
294         if (stat & 0x80)
295                 return;
296         ide_dump_status(drive, msg, stat);
297 }
298
299 /* Returns 0 if the request should be continued.
300    Returns 1 if the request was ended. */
301 static int cdrom_decode_status(ide_drive_t *drive, int good_stat, int *stat_ret)
302 {
303         struct request *rq = HWGROUP(drive)->rq;
304         int stat, err, sense_key;
305         
306         /* Check for errors. */
307         stat = HWIF(drive)->INB(IDE_STATUS_REG);
308         if (stat_ret)
309                 *stat_ret = stat;
310
311         if (OK_STAT(stat, good_stat, BAD_R_STAT))
312                 return 0;
313
314         /* Get the IDE error register. */
315         err = HWIF(drive)->INB(IDE_ERROR_REG);
316         sense_key = err >> 4;
317
318         if (rq == NULL) {
319                 printk("%s: missing rq in cdrom_decode_status\n", drive->name);
320                 return 1;
321         }
322
323         if (blk_sense_request(rq)) {
324                 /* We got an error trying to get sense info
325                    from the drive (probably while trying
326                    to recover from a former error).  Just give up. */
327
328                 rq->cmd_flags |= REQ_FAILED;
329                 cdrom_end_request(drive, 0);
330                 ide_error(drive, "request sense failure", stat);
331                 return 1;
332
333         } else if (blk_pc_request(rq) || rq->cmd_type == REQ_TYPE_ATA_PC) {
334                 /* All other functions, except for READ. */
335
336                 /*
337                  * if we have an error, pass back CHECK_CONDITION as the
338                  * scsi status byte
339                  */
340                 if (blk_pc_request(rq) && !rq->errors)
341                         rq->errors = SAM_STAT_CHECK_CONDITION;
342
343                 /* Check for tray open. */
344                 if (sense_key == NOT_READY) {
345                         cdrom_saw_media_change (drive);
346                 } else if (sense_key == UNIT_ATTENTION) {
347                         /* Check for media change. */
348                         cdrom_saw_media_change (drive);
349                         /*printk("%s: media changed\n",drive->name);*/
350                         return 0;
351                 } else if ((sense_key == ILLEGAL_REQUEST) &&
352                            (rq->cmd[0] == GPCMD_START_STOP_UNIT)) {
353                         /*
354                          * Don't print error message for this condition--
355                          * SFF8090i indicates that 5/24/00 is the correct
356                          * response to a request to close the tray if the
357                          * drive doesn't have that capability.
358                          * cdrom_log_sense() knows this!
359                          */
360                 } else if (!(rq->cmd_flags & REQ_QUIET)) {
361                         /* Otherwise, print an error. */
362                         ide_dump_status(drive, "packet command error", stat);
363                 }
364                 
365                 rq->cmd_flags |= REQ_FAILED;
366
367                 /*
368                  * instead of playing games with moving completions around,
369                  * remove failed request completely and end it when the
370                  * request sense has completed
371                  */
372                 goto end_request;
373
374         } else if (blk_fs_request(rq)) {
375                 int do_end_request = 0;
376
377                 /* Handle errors from READ and WRITE requests. */
378
379                 if (blk_noretry_request(rq))
380                         do_end_request = 1;
381
382                 if (sense_key == NOT_READY) {
383                         /* Tray open. */
384                         if (rq_data_dir(rq) == READ) {
385                                 cdrom_saw_media_change (drive);
386
387                                 /* Fail the request. */
388                                 printk ("%s: tray open\n", drive->name);
389                                 do_end_request = 1;
390                         } else {
391                                 struct cdrom_info *info = drive->driver_data;
392
393                                 /* allow the drive 5 seconds to recover, some
394                                  * devices will return this error while flushing
395                                  * data from cache */
396                                 if (!rq->errors)
397                                         info->write_timeout = jiffies + ATAPI_WAIT_WRITE_BUSY;
398                                 rq->errors = 1;
399                                 if (time_after(jiffies, info->write_timeout))
400                                         do_end_request = 1;
401                                 else {
402                                         unsigned long flags;
403
404                                         /*
405                                          * take a breather relying on the
406                                          * unplug timer to kick us again
407                                          */
408                                         spin_lock_irqsave(&ide_lock, flags);
409                                         blk_plug_device(drive->queue);
410                                         spin_unlock_irqrestore(&ide_lock,flags);
411                                         return 1;
412                                 }
413                         }
414                 } else if (sense_key == UNIT_ATTENTION) {
415                         /* Media change. */
416                         cdrom_saw_media_change (drive);
417
418                         /* Arrange to retry the request.
419                            But be sure to give up if we've retried
420                            too many times. */
421                         if (++rq->errors > ERROR_MAX)
422                                 do_end_request = 1;
423                 } else if (sense_key == ILLEGAL_REQUEST ||
424                            sense_key == DATA_PROTECT) {
425                         /* No point in retrying after an illegal
426                            request or data protect error.*/
427                         ide_dump_status_no_sense (drive, "command error", stat);
428                         do_end_request = 1;
429                 } else if (sense_key == MEDIUM_ERROR) {
430                         /* No point in re-trying a zillion times on a bad 
431                          * sector...  If we got here the error is not correctable */
432                         ide_dump_status_no_sense (drive, "media error (bad sector)", stat);
433                         do_end_request = 1;
434                 } else if (sense_key == BLANK_CHECK) {
435                         /* Disk appears blank ?? */
436                         ide_dump_status_no_sense (drive, "media error (blank)", stat);
437                         do_end_request = 1;
438                 } else if ((err & ~ABRT_ERR) != 0) {
439                         /* Go to the default handler
440                            for other errors. */
441                         ide_error(drive, "cdrom_decode_status", stat);
442                         return 1;
443                 } else if ((++rq->errors > ERROR_MAX)) {
444                         /* We've racked up too many retries.  Abort. */
445                         do_end_request = 1;
446                 }
447
448                 /* End a request through request sense analysis when we have
449                    sense data. We need this in order to perform end of media
450                    processing */
451
452                 if (do_end_request)
453                         goto end_request;
454
455                 /*
456                  * If we got a CHECK_CONDITION status,
457                  * queue a request sense command.
458                  */
459                 if (stat & ERR_STAT)
460                         cdrom_queue_request_sense(drive, NULL, NULL);
461         } else {
462                 blk_dump_rq_flags(rq, "ide-cd: bad rq");
463                 cdrom_end_request(drive, 0);
464         }
465
466         /* Retry, or handle the next request. */
467         return 1;
468
469 end_request:
470         if (stat & ERR_STAT) {
471                 unsigned long flags;
472
473                 spin_lock_irqsave(&ide_lock, flags);
474                 blkdev_dequeue_request(rq);
475                 HWGROUP(drive)->rq = NULL;
476                 spin_unlock_irqrestore(&ide_lock, flags);
477
478                 cdrom_queue_request_sense(drive, rq->sense, rq);
479         } else
480                 cdrom_end_request(drive, 0);
481
482         return 1;
483 }
484
485 static int cdrom_timer_expiry(ide_drive_t *drive)
486 {
487         struct request *rq = HWGROUP(drive)->rq;
488         unsigned long wait = 0;
489
490         /*
491          * Some commands are *slow* and normally take a long time to
492          * complete. Usually we can use the ATAPI "disconnect" to bypass
493          * this, but not all commands/drives support that. Let
494          * ide_timer_expiry keep polling us for these.
495          */
496         switch (rq->cmd[0]) {
497                 case GPCMD_BLANK:
498                 case GPCMD_FORMAT_UNIT:
499                 case GPCMD_RESERVE_RZONE_TRACK:
500                 case GPCMD_CLOSE_TRACK:
501                 case GPCMD_FLUSH_CACHE:
502                         wait = ATAPI_WAIT_PC;
503                         break;
504                 default:
505                         if (!(rq->cmd_flags & REQ_QUIET))
506                                 printk(KERN_INFO "ide-cd: cmd 0x%x timed out\n", rq->cmd[0]);
507                         wait = 0;
508                         break;
509         }
510         return wait;
511 }
512
513 /* Set up the device registers for transferring a packet command on DEV,
514    expecting to later transfer XFERLEN bytes.  HANDLER is the routine
515    which actually transfers the command to the drive.  If this is a
516    drq_interrupt device, this routine will arrange for HANDLER to be
517    called when the interrupt from the drive arrives.  Otherwise, HANDLER
518    will be called immediately after the drive is prepared for the transfer. */
519
520 static ide_startstop_t cdrom_start_packet_command(ide_drive_t *drive,
521                                                   int xferlen,
522                                                   ide_handler_t *handler)
523 {
524         ide_startstop_t startstop;
525         struct cdrom_info *info = drive->driver_data;
526         ide_hwif_t *hwif = drive->hwif;
527
528         /* Wait for the controller to be idle. */
529         if (ide_wait_stat(&startstop, drive, 0, BUSY_STAT, WAIT_READY))
530                 return startstop;
531
532         /* FIXME: for Virtual DMA we must check harder */
533         if (info->dma)
534                 info->dma = !hwif->dma_setup(drive);
535
536         /* Set up the controller registers. */
537         ide_pktcmd_tf_load(drive, IDE_TFLAG_OUT_NSECT | IDE_TFLAG_OUT_LBAL |
538                            IDE_TFLAG_NO_SELECT_MASK, xferlen, info->dma);
539
540         if (info->cd_flags & IDE_CD_FLAG_DRQ_INTERRUPT) {
541                 /* waiting for CDB interrupt, not DMA yet. */
542                 if (info->dma)
543                         drive->waiting_for_dma = 0;
544
545                 /* packet command */
546                 ide_execute_command(drive, WIN_PACKETCMD, handler, ATAPI_WAIT_PC, cdrom_timer_expiry);
547                 return ide_started;
548         } else {
549                 unsigned long flags;
550
551                 /* packet command */
552                 spin_lock_irqsave(&ide_lock, flags);
553                 hwif->OUTBSYNC(drive, WIN_PACKETCMD, IDE_COMMAND_REG);
554                 ndelay(400);
555                 spin_unlock_irqrestore(&ide_lock, flags);
556
557                 return (*handler) (drive);
558         }
559 }
560
561 /* Send a packet command to DRIVE described by CMD_BUF and CMD_LEN.
562    The device registers must have already been prepared
563    by cdrom_start_packet_command.
564    HANDLER is the interrupt handler to call when the command completes
565    or there's data ready. */
566 #define ATAPI_MIN_CDB_BYTES 12
567 static ide_startstop_t cdrom_transfer_packet_command (ide_drive_t *drive,
568                                           struct request *rq,
569                                           ide_handler_t *handler)
570 {
571         ide_hwif_t *hwif = drive->hwif;
572         int cmd_len;
573         struct cdrom_info *info = drive->driver_data;
574         ide_startstop_t startstop;
575
576         if (info->cd_flags & IDE_CD_FLAG_DRQ_INTERRUPT) {
577                 /* Here we should have been called after receiving an interrupt
578                    from the device.  DRQ should how be set. */
579
580                 /* Check for errors. */
581                 if (cdrom_decode_status(drive, DRQ_STAT, NULL))
582                         return ide_stopped;
583
584                 /* Ok, next interrupt will be DMA interrupt. */
585                 if (info->dma)
586                         drive->waiting_for_dma = 1;
587         } else {
588                 /* Otherwise, we must wait for DRQ to get set. */
589                 if (ide_wait_stat(&startstop, drive, DRQ_STAT,
590                                 BUSY_STAT, WAIT_READY))
591                         return startstop;
592         }
593
594         /* Arm the interrupt handler. */
595         ide_set_handler(drive, handler, rq->timeout, cdrom_timer_expiry);
596
597         /* ATAPI commands get padded out to 12 bytes minimum */
598         cmd_len = COMMAND_SIZE(rq->cmd[0]);
599         if (cmd_len < ATAPI_MIN_CDB_BYTES)
600                 cmd_len = ATAPI_MIN_CDB_BYTES;
601
602         /* Send the command to the device. */
603         HWIF(drive)->atapi_output_bytes(drive, rq->cmd, cmd_len);
604
605         /* Start the DMA if need be */
606         if (info->dma)
607                 hwif->dma_start(drive);
608
609         return ide_started;
610 }
611
612 /****************************************************************************
613  * Block read functions.
614  */
615
616 typedef void (xfer_func_t)(ide_drive_t *, void *, u32);
617
618 static void ide_cd_pad_transfer(ide_drive_t *drive, xfer_func_t *xf, int len)
619 {
620         while (len > 0) {
621                 int dum = 0;
622                 xf(drive, &dum, sizeof(dum));
623                 len -= sizeof(dum);
624         }
625 }
626
627 static void ide_cd_drain_data(ide_drive_t *drive, int nsects)
628 {
629         while (nsects > 0) {
630                 static char dum[SECTOR_SIZE];
631
632                 drive->hwif->atapi_input_bytes(drive, dum, sizeof(dum));
633                 nsects--;
634         }
635 }
636
637 /*
638  * Buffer up to SECTORS_TO_TRANSFER sectors from the drive in our sector
639  * buffer.  Once the first sector is added, any subsequent sectors are
640  * assumed to be continuous (until the buffer is cleared).  For the first
641  * sector added, SECTOR is its sector number.  (SECTOR is then ignored until
642  * the buffer is cleared.)
643  */
644 static void cdrom_buffer_sectors (ide_drive_t *drive, unsigned long sector,
645                                   int sectors_to_transfer)
646 {
647         struct cdrom_info *info = drive->driver_data;
648
649         /* Number of sectors to read into the buffer. */
650         int sectors_to_buffer = min_t(int, sectors_to_transfer,
651                                      (SECTOR_BUFFER_SIZE >> SECTOR_BITS) -
652                                        info->nsectors_buffered);
653
654         char *dest;
655
656         /* If we couldn't get a buffer, don't try to buffer anything... */
657         if (info->buffer == NULL)
658                 sectors_to_buffer = 0;
659
660         /* If this is the first sector in the buffer, remember its number. */
661         if (info->nsectors_buffered == 0)
662                 info->sector_buffered = sector;
663
664         /* Read the data into the buffer. */
665         dest = info->buffer + info->nsectors_buffered * SECTOR_SIZE;
666         while (sectors_to_buffer > 0) {
667                 HWIF(drive)->atapi_input_bytes(drive, dest, SECTOR_SIZE);
668                 --sectors_to_buffer;
669                 --sectors_to_transfer;
670                 ++info->nsectors_buffered;
671                 dest += SECTOR_SIZE;
672         }
673
674         /* Throw away any remaining data. */
675         ide_cd_drain_data(drive, sectors_to_transfer);
676 }
677
678 /*
679  * Check the contents of the interrupt reason register from the cdrom
680  * and attempt to recover if there are problems.  Returns  0 if everything's
681  * ok; nonzero if the request has been terminated.
682  */
683 static
684 int ide_cd_check_ireason(ide_drive_t *drive, int len, int ireason, int rw)
685 {
686         /*
687          * ireason == 0: the drive wants to receive data from us
688          * ireason == 2: the drive is expecting to transfer data to us
689          */
690         if (ireason == (!rw << 1))
691                 return 0;
692         else if (ireason == (rw << 1)) {
693                 ide_hwif_t *hwif = drive->hwif;
694                 xfer_func_t *xf;
695
696                 /* Whoops... */
697                 printk(KERN_ERR "%s: %s: wrong transfer direction!\n",
698                                 drive->name, __FUNCTION__);
699
700                 xf = rw ? hwif->atapi_output_bytes : hwif->atapi_input_bytes;
701                 ide_cd_pad_transfer(drive, xf, len);
702         } else  if (rw == 0 && ireason == 1) {
703                 /* Some drives (ASUS) seem to tell us that status
704                  * info is available. just get it and ignore.
705                  */
706                 (void) HWIF(drive)->INB(IDE_STATUS_REG);
707                 return 0;
708         } else {
709                 /* Drive wants a command packet, or invalid ireason... */
710                 printk(KERN_ERR "%s: %s: bad interrupt reason 0x%02x\n",
711                                 drive->name, __FUNCTION__, ireason);
712         }
713
714         cdrom_end_request(drive, 0);
715         return -1;
716 }
717
718 /*
719  * Assume that the drive will always provide data in multiples of at least
720  * SECTOR_SIZE, as it gets hairy to keep track of the transfers otherwise.
721  */
722 static int ide_cd_check_transfer_size(ide_drive_t *drive, int len)
723 {
724         struct cdrom_info *cd = drive->driver_data;
725
726         if ((len % SECTOR_SIZE) == 0)
727                 return 0;
728
729         printk(KERN_ERR "%s: %s: Bad transfer size %d\n",
730                         drive->name, __FUNCTION__, len);
731
732         if (cd->cd_flags & IDE_CD_FLAG_LIMIT_NFRAMES)
733                 printk(KERN_ERR "  This drive is not supported by "
734                                 "this version of the driver\n");
735         else {
736                 printk(KERN_ERR "  Trying to limit transfer sizes\n");
737                 cd->cd_flags |= IDE_CD_FLAG_LIMIT_NFRAMES;
738         }
739
740         return 1;
741 }
742
743 /*
744  * Try to satisfy some of the current read request from our cached data.
745  * Returns nonzero if the request has been completed, zero otherwise.
746  */
747 static int cdrom_read_from_buffer (ide_drive_t *drive)
748 {
749         struct cdrom_info *info = drive->driver_data;
750         struct request *rq = HWGROUP(drive)->rq;
751         unsigned short sectors_per_frame;
752
753         sectors_per_frame = queue_hardsect_size(drive->queue) >> SECTOR_BITS;
754
755         /* Can't do anything if there's no buffer. */
756         if (info->buffer == NULL) return 0;
757
758         /* Loop while this request needs data and the next block is present
759            in our cache. */
760         while (rq->nr_sectors > 0 &&
761                rq->sector >= info->sector_buffered &&
762                rq->sector < info->sector_buffered + info->nsectors_buffered) {
763                 if (rq->current_nr_sectors == 0)
764                         cdrom_end_request(drive, 1);
765
766                 memcpy (rq->buffer,
767                         info->buffer +
768                         (rq->sector - info->sector_buffered) * SECTOR_SIZE,
769                         SECTOR_SIZE);
770                 rq->buffer += SECTOR_SIZE;
771                 --rq->current_nr_sectors;
772                 --rq->nr_sectors;
773                 ++rq->sector;
774         }
775
776         /* If we've satisfied the current request,
777            terminate it successfully. */
778         if (rq->nr_sectors == 0) {
779                 cdrom_end_request(drive, 1);
780                 return -1;
781         }
782
783         /* Move on to the next buffer if needed. */
784         if (rq->current_nr_sectors == 0)
785                 cdrom_end_request(drive, 1);
786
787         /* If this condition does not hold, then the kluge i use to
788            represent the number of sectors to skip at the start of a transfer
789            will fail.  I think that this will never happen, but let's be
790            paranoid and check. */
791         if (rq->current_nr_sectors < bio_cur_sectors(rq->bio) &&
792             (rq->sector & (sectors_per_frame - 1))) {
793                 printk(KERN_ERR "%s: cdrom_read_from_buffer: buffer botch (%ld)\n",
794                         drive->name, (long)rq->sector);
795                 cdrom_end_request(drive, 0);
796                 return -1;
797         }
798
799         return 0;
800 }
801
802 static ide_startstop_t cdrom_newpc_intr(ide_drive_t *);
803
804 /*
805  * Routine to send a read/write packet command to the drive.
806  * This is usually called directly from cdrom_start_{read,write}().
807  * However, for drq_interrupt devices, it is called from an interrupt
808  * when the drive is ready to accept the command.
809  */
810 static ide_startstop_t cdrom_start_rw_cont(ide_drive_t *drive)
811 {
812         struct request *rq = HWGROUP(drive)->rq;
813
814         if (rq_data_dir(rq) == READ) {
815                 unsigned short sectors_per_frame =
816                         queue_hardsect_size(drive->queue) >> SECTOR_BITS;
817                 int nskip = rq->sector & (sectors_per_frame - 1);
818
819                 /*
820                  * If the requested sector doesn't start on a frame boundary,
821                  * we must adjust the start of the transfer so that it does,
822                  * and remember to skip the first few sectors.
823                  *
824                  * If the rq->current_nr_sectors field is larger than the size
825                  * of the buffer, it will mean that we're to skip a number of
826                  * sectors equal to the amount by which rq->current_nr_sectors
827                  * is larger than the buffer size.
828                  */
829                 if (nskip > 0) {
830                         /* Sanity check... */
831                         if (rq->current_nr_sectors !=
832                             bio_cur_sectors(rq->bio)) {
833                                 printk(KERN_ERR "%s: %s: buffer botch (%u)\n",
834                                                 drive->name, __FUNCTION__,
835                                                 rq->current_nr_sectors);
836                                 cdrom_end_request(drive, 0);
837                                 return ide_stopped;
838                         }
839                         rq->current_nr_sectors += nskip;
840                 }
841         }
842 #if 0
843         else
844                 /* the immediate bit */
845                 rq->cmd[1] = 1 << 3;
846 #endif
847         /* Set up the command */
848         rq->timeout = ATAPI_WAIT_PC;
849
850         /* Send the command to the drive and return. */
851         return cdrom_transfer_packet_command(drive, rq, cdrom_newpc_intr);
852 }
853
854 #define IDECD_SEEK_THRESHOLD    (1000)                  /* 1000 blocks */
855 #define IDECD_SEEK_TIMER        (5 * WAIT_MIN_SLEEP)    /* 100 ms */
856 #define IDECD_SEEK_TIMEOUT      (2 * WAIT_CMD)          /* 20 sec */
857
858 static ide_startstop_t cdrom_seek_intr (ide_drive_t *drive)
859 {
860         struct cdrom_info *info = drive->driver_data;
861         int stat;
862         static int retry = 10;
863
864         if (cdrom_decode_status(drive, 0, &stat))
865                 return ide_stopped;
866
867         info->cd_flags |= IDE_CD_FLAG_SEEKING;
868
869         if (retry && time_after(jiffies, info->start_seek + IDECD_SEEK_TIMER)) {
870                 if (--retry == 0) {
871                         /*
872                          * this condition is far too common, to bother
873                          * users about it
874                          */
875                         /* printk("%s: disabled DSC seek overlap\n", drive->name);*/ 
876                         drive->dsc_overlap = 0;
877                 }
878         }
879         return ide_stopped;
880 }
881
882 static ide_startstop_t cdrom_start_seek_continuation (ide_drive_t *drive)
883 {
884         struct request *rq = HWGROUP(drive)->rq;
885         sector_t frame = rq->sector;
886
887         sector_div(frame, queue_hardsect_size(drive->queue) >> SECTOR_BITS);
888
889         memset(rq->cmd, 0, sizeof(rq->cmd));
890         rq->cmd[0] = GPCMD_SEEK;
891         put_unaligned(cpu_to_be32(frame), (unsigned int *) &rq->cmd[2]);
892
893         rq->timeout = ATAPI_WAIT_PC;
894         return cdrom_transfer_packet_command(drive, rq, &cdrom_seek_intr);
895 }
896
897 static ide_startstop_t cdrom_start_seek (ide_drive_t *drive, unsigned int block)
898 {
899         struct cdrom_info *info = drive->driver_data;
900
901         info->dma = 0;
902         info->start_seek = jiffies;
903         return cdrom_start_packet_command(drive, 0, cdrom_start_seek_continuation);
904 }
905
906 /* Fix up a possibly partially-processed request so that we can
907    start it over entirely, or even put it back on the request queue. */
908 static void restore_request (struct request *rq)
909 {
910         if (rq->buffer != bio_data(rq->bio)) {
911                 sector_t n = (rq->buffer - (char *) bio_data(rq->bio)) / SECTOR_SIZE;
912
913                 rq->buffer = bio_data(rq->bio);
914                 rq->nr_sectors += n;
915                 rq->sector -= n;
916         }
917         rq->hard_cur_sectors = rq->current_nr_sectors = bio_cur_sectors(rq->bio);
918         rq->hard_nr_sectors = rq->nr_sectors;
919         rq->hard_sector = rq->sector;
920         rq->q->prep_rq_fn(rq->q, rq);
921 }
922
923 /****************************************************************************
924  * Execute all other packet commands.
925  */
926
927 static void ide_cd_request_sense_fixup(struct request *rq)
928 {
929         /*
930          * Some of the trailing request sense fields are optional,
931          * and some drives don't send them.  Sigh.
932          */
933         if (rq->cmd[0] == GPCMD_REQUEST_SENSE &&
934             rq->data_len > 0 && rq->data_len <= 5)
935                 while (rq->data_len > 0) {
936                         *(u8 *)rq->data++ = 0;
937                         --rq->data_len;
938                 }
939 }
940
941 int ide_cd_queue_pc(ide_drive_t *drive, struct request *rq)
942 {
943         struct request_sense sense;
944         int retries = 10;
945         unsigned int flags = rq->cmd_flags;
946
947         if (rq->sense == NULL)
948                 rq->sense = &sense;
949
950         /* Start of retry loop. */
951         do {
952                 int error;
953                 unsigned long time = jiffies;
954                 rq->cmd_flags = flags;
955
956                 error = ide_do_drive_cmd(drive, rq, ide_wait);
957                 time = jiffies - time;
958
959                 /* FIXME: we should probably abort/retry or something 
960                  * in case of failure */
961                 if (rq->cmd_flags & REQ_FAILED) {
962                         /* The request failed.  Retry if it was due to a unit
963                            attention status
964                            (usually means media was changed). */
965                         struct request_sense *reqbuf = rq->sense;
966
967                         if (reqbuf->sense_key == UNIT_ATTENTION)
968                                 cdrom_saw_media_change(drive);
969                         else if (reqbuf->sense_key == NOT_READY &&
970                                  reqbuf->asc == 4 && reqbuf->ascq != 4) {
971                                 /* The drive is in the process of loading
972                                    a disk.  Retry, but wait a little to give
973                                    the drive time to complete the load. */
974                                 ssleep(2);
975                         } else {
976                                 /* Otherwise, don't retry. */
977                                 retries = 0;
978                         }
979                         --retries;
980                 }
981
982                 /* End of retry loop. */
983         } while ((rq->cmd_flags & REQ_FAILED) && retries >= 0);
984
985         /* Return an error if the command failed. */
986         return (rq->cmd_flags & REQ_FAILED) ? -EIO : 0;
987 }
988
989 /*
990  * Called from blk_end_request_callback() after the data of the request
991  * is completed and before the request is completed.
992  * By returning value '1', blk_end_request_callback() returns immediately
993  * without completing the request.
994  */
995 static int cdrom_newpc_intr_dummy_cb(struct request *rq)
996 {
997         return 1;
998 }
999
1000 static ide_startstop_t cdrom_newpc_intr(ide_drive_t *drive)
1001 {
1002         struct cdrom_info *info = drive->driver_data;
1003         struct request *rq = HWGROUP(drive)->rq;
1004         xfer_func_t *xferfunc;
1005         ide_expiry_t *expiry = NULL;
1006         int dma_error = 0, dma, stat, ireason, len, thislen, uptodate = 0;
1007         int write = (rq_data_dir(rq) == WRITE) ? 1 : 0;
1008         unsigned int timeout;
1009         u8 lowcyl, highcyl;
1010
1011         /* Check for errors. */
1012         dma = info->dma;
1013         if (dma) {
1014                 info->dma = 0;
1015                 dma_error = HWIF(drive)->ide_dma_end(drive);
1016                 if (dma_error) {
1017                         printk(KERN_ERR "%s: DMA %s error\n", drive->name,
1018                                         write ? "write" : "read");
1019                         ide_dma_off(drive);
1020                 }
1021         }
1022
1023         if (cdrom_decode_status(drive, 0, &stat))
1024                 return ide_stopped;
1025
1026         /*
1027          * using dma, transfer is complete now
1028          */
1029         if (dma) {
1030                 if (dma_error)
1031                         return ide_error(drive, "dma error", stat);
1032                 if (blk_fs_request(rq)) {
1033                         ide_end_request(drive, 1, rq->nr_sectors);
1034                         return ide_stopped;
1035                 }
1036                 goto end_request;
1037         }
1038
1039         /*
1040          * ok we fall to pio :/
1041          */
1042         ireason = HWIF(drive)->INB(IDE_IREASON_REG) & 0x3;
1043         lowcyl  = HWIF(drive)->INB(IDE_BCOUNTL_REG);
1044         highcyl = HWIF(drive)->INB(IDE_BCOUNTH_REG);
1045
1046         len = lowcyl + (256 * highcyl);
1047
1048         thislen = blk_fs_request(rq) ? len : rq->data_len;
1049         if (thislen > len)
1050                 thislen = len;
1051
1052         /*
1053          * If DRQ is clear, the command has completed.
1054          */
1055         if ((stat & DRQ_STAT) == 0) {
1056                 if (blk_fs_request(rq)) {
1057                         /*
1058                          * If we're not done reading/writing, complain.
1059                          * Otherwise, complete the command normally.
1060                          */
1061                         uptodate = 1;
1062                         if (rq->current_nr_sectors > 0) {
1063                                 printk(KERN_ERR "%s: %s: data underrun "
1064                                                 "(%d blocks)\n",
1065                                                 drive->name, __FUNCTION__,
1066                                                 rq->current_nr_sectors);
1067                                 if (!write)
1068                                         rq->cmd_flags |= REQ_FAILED;
1069                                 uptodate = 0;
1070                         }
1071                         cdrom_end_request(drive, uptodate);
1072                         return ide_stopped;
1073                 } else if (!blk_pc_request(rq)) {
1074                         ide_cd_request_sense_fixup(rq);
1075                         /* Complain if we still have data left to transfer. */
1076                         uptodate = rq->data_len ? 0 : 1;
1077                 }
1078                 goto end_request;
1079         }
1080
1081         /*
1082          * check which way to transfer data
1083          */
1084         if (blk_fs_request(rq) || blk_pc_request(rq)) {
1085                 if (ide_cd_check_ireason(drive, len, ireason, write))
1086                         return ide_stopped;
1087
1088                 if (blk_fs_request(rq) && write == 0) {
1089                         int nskip;
1090
1091                         if (ide_cd_check_transfer_size(drive, len)) {
1092                                 cdrom_end_request(drive, 0);
1093                                 return ide_stopped;
1094                         }
1095
1096                         /*
1097                          * First, figure out if we need to bit-bucket
1098                          * any of the leading sectors.
1099                          */
1100                         nskip = min_t(int, rq->current_nr_sectors
1101                                            - bio_cur_sectors(rq->bio),
1102                                            thislen >> 9);
1103                         if (nskip > 0) {
1104                                 ide_cd_drain_data(drive, nskip);
1105                                 rq->current_nr_sectors -= nskip;
1106                                 thislen -= (nskip << 9);
1107                         }
1108                 }
1109         }
1110
1111         if (ireason == 0) {
1112                 write = 1;
1113                 xferfunc = HWIF(drive)->atapi_output_bytes;
1114         } else if (ireason == 2 || (ireason == 1 &&
1115                    (blk_fs_request(rq) || blk_pc_request(rq)))) {
1116                 write = 0;
1117                 xferfunc = HWIF(drive)->atapi_input_bytes;
1118         } else {
1119                 printk(KERN_ERR "%s: %s: The drive "
1120                                 "appears confused (ireason = 0x%02x). "
1121                                 "Trying to recover by ending request.\n",
1122                                 drive->name, __FUNCTION__, ireason);
1123                 goto end_request;
1124         }
1125
1126         /*
1127          * transfer data
1128          */
1129         while (thislen > 0) {
1130                 u8 *ptr = blk_fs_request(rq) ? NULL : rq->data;
1131                 int blen = rq->data_len;
1132
1133                 /*
1134                  * bio backed?
1135                  */
1136                 if (rq->bio) {
1137                         if (blk_fs_request(rq)) {
1138                                 ptr = rq->buffer;
1139                                 blen = rq->current_nr_sectors << 9;
1140                         } else {
1141                                 ptr = bio_data(rq->bio);
1142                                 blen = bio_iovec(rq->bio)->bv_len;
1143                         }
1144                 }
1145
1146                 if (!ptr) {
1147                         if (blk_fs_request(rq) && !write)
1148                                 /*
1149                                  * If the buffers are full, cache the rest
1150                                  * of the data in our internal buffer.
1151                                  */
1152                                 cdrom_buffer_sectors(drive, rq->sector,
1153                                                      thislen >> 9);
1154                         else {
1155                                 printk(KERN_ERR "%s: confused, missing data\n",
1156                                                 drive->name);
1157                                 blk_dump_rq_flags(rq, rq_data_dir(rq)
1158                                                   ? "cdrom_newpc_intr, write"
1159                                                   : "cdrom_newpc_intr, read");
1160                         }
1161                         break;
1162                 }
1163
1164                 if (blen > thislen)
1165                         blen = thislen;
1166
1167                 xferfunc(drive, ptr, blen);
1168
1169                 thislen -= blen;
1170                 len -= blen;
1171
1172                 if (blk_fs_request(rq)) {
1173                         rq->buffer += blen;
1174                         rq->nr_sectors -= (blen >> 9);
1175                         rq->current_nr_sectors -= (blen >> 9);
1176                         rq->sector += (blen >> 9);
1177
1178                         if (rq->current_nr_sectors == 0 && rq->nr_sectors)
1179                                 cdrom_end_request(drive, 1);
1180                 } else {
1181                         rq->data_len -= blen;
1182
1183                         /*
1184                          * The request can't be completed until DRQ is cleared.
1185                          * So complete the data, but don't complete the request
1186                          * using the dummy function for the callback feature
1187                          * of blk_end_request_callback().
1188                          */
1189                         if (rq->bio)
1190                                 blk_end_request_callback(rq, 0, blen,
1191                                                  cdrom_newpc_intr_dummy_cb);
1192                         else
1193                                 rq->data += blen;
1194                 }
1195         }
1196
1197         if (write && blk_sense_request(rq))
1198                 rq->sense_len += thislen;
1199
1200         /*
1201          * pad, if necessary
1202          */
1203         if (!blk_fs_request(rq) && len > 0)
1204                 ide_cd_pad_transfer(drive, xferfunc, len);
1205
1206         if (blk_pc_request(rq)) {
1207                 timeout = rq->timeout;
1208         } else {
1209                 timeout = ATAPI_WAIT_PC;
1210                 if (!blk_fs_request(rq))
1211                         expiry = cdrom_timer_expiry;
1212         }
1213
1214         ide_set_handler(drive, cdrom_newpc_intr, timeout, expiry);
1215         return ide_started;
1216
1217 end_request:
1218         if (blk_pc_request(rq)) {
1219                 unsigned long flags;
1220
1221                 spin_lock_irqsave(&ide_lock, flags);
1222                 if (__blk_end_request(rq, 0, rq->data_len))
1223                         BUG();
1224                 HWGROUP(drive)->rq = NULL;
1225                 spin_unlock_irqrestore(&ide_lock, flags);
1226         } else {
1227                 if (!uptodate)
1228                         rq->cmd_flags |= REQ_FAILED;
1229                 cdrom_end_request(drive, uptodate);
1230         }
1231         return ide_stopped;
1232 }
1233
1234 static ide_startstop_t cdrom_start_rw(ide_drive_t *drive, struct request *rq)
1235 {
1236         struct cdrom_info *cd = drive->driver_data;
1237         int write = rq_data_dir(rq) == WRITE;
1238         unsigned short sectors_per_frame =
1239                 queue_hardsect_size(drive->queue) >> SECTOR_BITS;
1240
1241         if (write) {
1242                 /*
1243                  * disk has become write protected
1244                  */
1245                 if (cd->disk->policy) {
1246                         cdrom_end_request(drive, 0);
1247                         return ide_stopped;
1248                 }
1249         } else {
1250                 /*
1251                  * We may be retrying this request after an error.  Fix up any
1252                  * weirdness which might be present in the request packet.
1253                  */
1254                 restore_request(rq);
1255
1256                 /* Satisfy whatever we can of this request from our cache. */
1257                 if (cdrom_read_from_buffer(drive))
1258                         return ide_stopped;
1259         }
1260
1261         /*
1262          * use DMA, if possible / writes *must* be hardware frame aligned
1263          */
1264         if ((rq->nr_sectors & (sectors_per_frame - 1)) ||
1265             (rq->sector & (sectors_per_frame - 1))) {
1266                 if (write) {
1267                         cdrom_end_request(drive, 0);
1268                         return ide_stopped;
1269                 }
1270                 cd->dma = 0;
1271         } else
1272                 cd->dma = drive->using_dma;
1273
1274         /* Clear the local sector buffer. */
1275         cd->nsectors_buffered = 0;
1276
1277         if (write)
1278                 cd->devinfo.media_written = 1;
1279
1280         /* Start sending the read/write request to the drive. */
1281         return cdrom_start_packet_command(drive, 32768, cdrom_start_rw_cont);
1282 }
1283
1284 static ide_startstop_t cdrom_do_newpc_cont(ide_drive_t *drive)
1285 {
1286         struct request *rq = HWGROUP(drive)->rq;
1287
1288         if (!rq->timeout)
1289                 rq->timeout = ATAPI_WAIT_PC;
1290
1291         return cdrom_transfer_packet_command(drive, rq, cdrom_newpc_intr);
1292 }
1293
1294 static ide_startstop_t cdrom_do_block_pc(ide_drive_t *drive, struct request *rq)
1295 {
1296         struct cdrom_info *info = drive->driver_data;
1297
1298         if (blk_pc_request(rq))
1299                 rq->cmd_flags |= REQ_QUIET;
1300         else
1301                 rq->cmd_flags &= ~REQ_FAILED;
1302
1303         info->dma = 0;
1304
1305         /*
1306          * sg request
1307          */
1308         if (rq->bio) {
1309                 int mask = drive->queue->dma_alignment;
1310                 unsigned long addr = (unsigned long) page_address(bio_page(rq->bio));
1311
1312                 info->dma = drive->using_dma;
1313
1314                 /*
1315                  * check if dma is safe
1316                  *
1317                  * NOTE! The "len" and "addr" checks should possibly have
1318                  * separate masks.
1319                  */
1320                 if ((rq->data_len & 15) || (addr & mask))
1321                         info->dma = 0;
1322         }
1323
1324         /* Start sending the command to the drive. */
1325         return cdrom_start_packet_command(drive, rq->data_len, cdrom_do_newpc_cont);
1326 }
1327
1328 /****************************************************************************
1329  * cdrom driver request routine.
1330  */
1331 static ide_startstop_t
1332 ide_do_rw_cdrom (ide_drive_t *drive, struct request *rq, sector_t block)
1333 {
1334         ide_startstop_t action;
1335         struct cdrom_info *info = drive->driver_data;
1336
1337         if (blk_fs_request(rq)) {
1338                 if (info->cd_flags & IDE_CD_FLAG_SEEKING) {
1339                         unsigned long elapsed = jiffies - info->start_seek;
1340                         int stat = HWIF(drive)->INB(IDE_STATUS_REG);
1341
1342                         if ((stat & SEEK_STAT) != SEEK_STAT) {
1343                                 if (elapsed < IDECD_SEEK_TIMEOUT) {
1344                                         ide_stall_queue(drive, IDECD_SEEK_TIMER);
1345                                         return ide_stopped;
1346                                 }
1347                                 printk (KERN_ERR "%s: DSC timeout\n", drive->name);
1348                         }
1349                         info->cd_flags &= ~IDE_CD_FLAG_SEEKING;
1350                 }
1351                 if ((rq_data_dir(rq) == READ) && IDE_LARGE_SEEK(info->last_block, block, IDECD_SEEK_THRESHOLD) && drive->dsc_overlap) {
1352                         action = cdrom_start_seek(drive, block);
1353                 } else
1354                         action = cdrom_start_rw(drive, rq);
1355                 info->last_block = block;
1356                 return action;
1357         } else if (blk_sense_request(rq) || blk_pc_request(rq) ||
1358                    rq->cmd_type == REQ_TYPE_ATA_PC) {
1359                 return cdrom_do_block_pc(drive, rq);
1360         } else if (blk_special_request(rq)) {
1361                 /*
1362                  * right now this can only be a reset...
1363                  */
1364                 cdrom_end_request(drive, 1);
1365                 return ide_stopped;
1366         }
1367
1368         blk_dump_rq_flags(rq, "ide-cd bad flags");
1369         cdrom_end_request(drive, 0);
1370         return ide_stopped;
1371 }
1372
1373
1374
1375 /****************************************************************************
1376  * Ioctl handling.
1377  *
1378  * Routines which queue packet commands take as a final argument a pointer
1379  * to a request_sense struct.  If execution of the command results
1380  * in an error with a CHECK CONDITION status, this structure will be filled
1381  * with the results of the subsequent request sense command.  The pointer
1382  * can also be NULL, in which case no sense information is returned.
1383  */
1384
1385 static
1386 void msf_from_bcd (struct atapi_msf *msf)
1387 {
1388         msf->minute = BCD2BIN(msf->minute);
1389         msf->second = BCD2BIN(msf->second);
1390         msf->frame  = BCD2BIN(msf->frame);
1391 }
1392
1393 static int cdrom_check_status(ide_drive_t *drive, struct request_sense *sense)
1394 {
1395         struct request req;
1396         struct cdrom_info *info = drive->driver_data;
1397         struct cdrom_device_info *cdi = &info->devinfo;
1398
1399         ide_cd_init_rq(drive, &req);
1400
1401         req.sense = sense;
1402         req.cmd[0] = GPCMD_TEST_UNIT_READY;
1403         req.cmd_flags |= REQ_QUIET;
1404
1405         /*
1406          * Sanyo 3 CD changer uses byte 7 of TEST_UNIT_READY to
1407          * switch CDs instead of supporting the LOAD_UNLOAD opcode.
1408          */
1409         req.cmd[7] = cdi->sanyo_slot % 3;
1410
1411         return ide_cd_queue_pc(drive, &req);
1412 }
1413
1414 /* Lock the door if LOCKFLAG is nonzero; unlock it otherwise. */
1415 int ide_cd_lockdoor(ide_drive_t *drive, int lockflag,
1416                     struct request_sense *sense)
1417 {
1418         struct cdrom_info *cd = drive->driver_data;
1419         struct request_sense my_sense;
1420         struct request req;
1421         int stat;
1422
1423         if (sense == NULL)
1424                 sense = &my_sense;
1425
1426         /* If the drive cannot lock the door, just pretend. */
1427         if (cd->cd_flags & IDE_CD_FLAG_NO_DOORLOCK) {
1428                 stat = 0;
1429         } else {
1430                 ide_cd_init_rq(drive, &req);
1431                 req.sense = sense;
1432                 req.cmd[0] = GPCMD_PREVENT_ALLOW_MEDIUM_REMOVAL;
1433                 req.cmd[4] = lockflag ? 1 : 0;
1434                 stat = ide_cd_queue_pc(drive, &req);
1435         }
1436
1437         /* If we got an illegal field error, the drive
1438            probably cannot lock the door. */
1439         if (stat != 0 &&
1440             sense->sense_key == ILLEGAL_REQUEST &&
1441             (sense->asc == 0x24 || sense->asc == 0x20)) {
1442                 printk (KERN_ERR "%s: door locking not supported\n",
1443                         drive->name);
1444                 cd->cd_flags |= IDE_CD_FLAG_NO_DOORLOCK;
1445                 stat = 0;
1446         }
1447         
1448         /* no medium, that's alright. */
1449         if (stat != 0 && sense->sense_key == NOT_READY && sense->asc == 0x3a)
1450                 stat = 0;
1451
1452         if (stat == 0) {
1453                 if (lockflag)
1454                         cd->cd_flags |= IDE_CD_FLAG_DOOR_LOCKED;
1455                 else
1456                         cd->cd_flags &= ~IDE_CD_FLAG_DOOR_LOCKED;
1457         }
1458
1459         return stat;
1460 }
1461
1462
1463 /* Eject the disk if EJECTFLAG is 0.
1464    If EJECTFLAG is 1, try to reload the disk. */
1465 static int cdrom_eject(ide_drive_t *drive, int ejectflag,
1466                        struct request_sense *sense)
1467 {
1468         struct cdrom_info *cd = drive->driver_data;
1469         struct cdrom_device_info *cdi = &cd->devinfo;
1470         struct request req;
1471         char loej = 0x02;
1472
1473         if ((cd->cd_flags & IDE_CD_FLAG_NO_EJECT) && !ejectflag)
1474                 return -EDRIVE_CANT_DO_THIS;
1475
1476         /* reload fails on some drives, if the tray is locked */
1477         if ((cd->cd_flags & IDE_CD_FLAG_DOOR_LOCKED) && ejectflag)
1478                 return 0;
1479
1480         ide_cd_init_rq(drive, &req);
1481
1482         /* only tell drive to close tray if open, if it can do that */
1483         if (ejectflag && (cdi->mask & CDC_CLOSE_TRAY))
1484                 loej = 0;
1485
1486         req.sense = sense;
1487         req.cmd[0] = GPCMD_START_STOP_UNIT;
1488         req.cmd[4] = loej | (ejectflag != 0);
1489
1490         return ide_cd_queue_pc(drive, &req);
1491 }
1492
1493 static int cdrom_read_capacity(ide_drive_t *drive, unsigned long *capacity,
1494                                unsigned long *sectors_per_frame,
1495                                struct request_sense *sense)
1496 {
1497         struct {
1498                 __u32 lba;
1499                 __u32 blocklen;
1500         } capbuf;
1501
1502         int stat;
1503         struct request req;
1504
1505         ide_cd_init_rq(drive, &req);
1506
1507         req.sense = sense;
1508         req.cmd[0] = GPCMD_READ_CDVD_CAPACITY;
1509         req.data = (char *)&capbuf;
1510         req.data_len = sizeof(capbuf);
1511         req.cmd_flags |= REQ_QUIET;
1512
1513         stat = ide_cd_queue_pc(drive, &req);
1514         if (stat == 0) {
1515                 *capacity = 1 + be32_to_cpu(capbuf.lba);
1516                 *sectors_per_frame =
1517                         be32_to_cpu(capbuf.blocklen) >> SECTOR_BITS;
1518         }
1519
1520         return stat;
1521 }
1522
1523 static int cdrom_read_tocentry(ide_drive_t *drive, int trackno, int msf_flag,
1524                                 int format, char *buf, int buflen,
1525                                 struct request_sense *sense)
1526 {
1527         struct request req;
1528
1529         ide_cd_init_rq(drive, &req);
1530
1531         req.sense = sense;
1532         req.data =  buf;
1533         req.data_len = buflen;
1534         req.cmd_flags |= REQ_QUIET;
1535         req.cmd[0] = GPCMD_READ_TOC_PMA_ATIP;
1536         req.cmd[6] = trackno;
1537         req.cmd[7] = (buflen >> 8);
1538         req.cmd[8] = (buflen & 0xff);
1539         req.cmd[9] = (format << 6);
1540
1541         if (msf_flag)
1542                 req.cmd[1] = 2;
1543
1544         return ide_cd_queue_pc(drive, &req);
1545 }
1546
1547 /* Try to read the entire TOC for the disk into our internal buffer. */
1548 int ide_cd_read_toc(ide_drive_t *drive, struct request_sense *sense)
1549 {
1550         int stat, ntracks, i;
1551         struct cdrom_info *info = drive->driver_data;
1552         struct cdrom_device_info *cdi = &info->devinfo;
1553         struct atapi_toc *toc = info->toc;
1554         struct {
1555                 struct atapi_toc_header hdr;
1556                 struct atapi_toc_entry  ent;
1557         } ms_tmp;
1558         long last_written;
1559         unsigned long sectors_per_frame = SECTORS_PER_FRAME;
1560
1561         if (toc == NULL) {
1562                 /* Try to allocate space. */
1563                 toc = kmalloc(sizeof(struct atapi_toc), GFP_KERNEL);
1564                 if (toc == NULL) {
1565                         printk (KERN_ERR "%s: No cdrom TOC buffer!\n", drive->name);
1566                         return -ENOMEM;
1567                 }
1568                 info->toc = toc;
1569         }
1570
1571         /* Check to see if the existing data is still valid.
1572            If it is, just return. */
1573         (void) cdrom_check_status(drive, sense);
1574
1575         if (info->cd_flags & IDE_CD_FLAG_TOC_VALID)
1576                 return 0;
1577
1578         /* Try to get the total cdrom capacity and sector size. */
1579         stat = cdrom_read_capacity(drive, &toc->capacity, &sectors_per_frame,
1580                                    sense);
1581         if (stat)
1582                 toc->capacity = 0x1fffff;
1583
1584         set_capacity(info->disk, toc->capacity * sectors_per_frame);
1585         /* Save a private copy of te TOC capacity for error handling */
1586         drive->probed_capacity = toc->capacity * sectors_per_frame;
1587
1588         blk_queue_hardsect_size(drive->queue,
1589                                 sectors_per_frame << SECTOR_BITS);
1590
1591         /* First read just the header, so we know how long the TOC is. */
1592         stat = cdrom_read_tocentry(drive, 0, 1, 0, (char *) &toc->hdr,
1593                                     sizeof(struct atapi_toc_header), sense);
1594         if (stat)
1595                 return stat;
1596
1597         if (info->cd_flags & IDE_CD_FLAG_TOCTRACKS_AS_BCD) {
1598                 toc->hdr.first_track = BCD2BIN(toc->hdr.first_track);
1599                 toc->hdr.last_track  = BCD2BIN(toc->hdr.last_track);
1600         }
1601
1602         ntracks = toc->hdr.last_track - toc->hdr.first_track + 1;
1603         if (ntracks <= 0)
1604                 return -EIO;
1605         if (ntracks > MAX_TRACKS)
1606                 ntracks = MAX_TRACKS;
1607
1608         /* Now read the whole schmeer. */
1609         stat = cdrom_read_tocentry(drive, toc->hdr.first_track, 1, 0,
1610                                   (char *)&toc->hdr,
1611                                    sizeof(struct atapi_toc_header) +
1612                                    (ntracks + 1) *
1613                                    sizeof(struct atapi_toc_entry), sense);
1614
1615         if (stat && toc->hdr.first_track > 1) {
1616                 /* Cds with CDI tracks only don't have any TOC entries,
1617                    despite of this the returned values are
1618                    first_track == last_track = number of CDI tracks + 1,
1619                    so that this case is indistinguishable from the same
1620                    layout plus an additional audio track.
1621                    If we get an error for the regular case, we assume
1622                    a CDI without additional audio tracks. In this case
1623                    the readable TOC is empty (CDI tracks are not included)
1624                    and only holds the Leadout entry. Heiko Eißfeldt */
1625                 ntracks = 0;
1626                 stat = cdrom_read_tocentry(drive, CDROM_LEADOUT, 1, 0,
1627                                            (char *)&toc->hdr,
1628                                            sizeof(struct atapi_toc_header) +
1629                                            (ntracks + 1) *
1630                                            sizeof(struct atapi_toc_entry),
1631                                            sense);
1632                 if (stat)
1633                         return stat;
1634
1635                 if (info->cd_flags & IDE_CD_FLAG_TOCTRACKS_AS_BCD) {
1636                         toc->hdr.first_track = (u8)BIN2BCD(CDROM_LEADOUT);
1637                         toc->hdr.last_track = (u8)BIN2BCD(CDROM_LEADOUT);
1638                 } else {
1639                         toc->hdr.first_track = CDROM_LEADOUT;
1640                         toc->hdr.last_track = CDROM_LEADOUT;
1641                 }
1642         }
1643
1644         if (stat)
1645                 return stat;
1646
1647         toc->hdr.toc_length = ntohs (toc->hdr.toc_length);
1648
1649         if (info->cd_flags & IDE_CD_FLAG_TOCTRACKS_AS_BCD) {
1650                 toc->hdr.first_track = BCD2BIN(toc->hdr.first_track);
1651                 toc->hdr.last_track  = BCD2BIN(toc->hdr.last_track);
1652         }
1653
1654         for (i = 0; i <= ntracks; i++) {
1655                 if (info->cd_flags & IDE_CD_FLAG_TOCADDR_AS_BCD) {
1656                         if (info->cd_flags & IDE_CD_FLAG_TOCTRACKS_AS_BCD)
1657                                 toc->ent[i].track = BCD2BIN(toc->ent[i].track);
1658                         msf_from_bcd(&toc->ent[i].addr.msf);
1659                 }
1660                 toc->ent[i].addr.lba = msf_to_lba (toc->ent[i].addr.msf.minute,
1661                                                    toc->ent[i].addr.msf.second,
1662                                                    toc->ent[i].addr.msf.frame);
1663         }
1664
1665         /* Read the multisession information. */
1666         if (toc->hdr.first_track != CDROM_LEADOUT) {
1667                 /* Read the multisession information. */
1668                 stat = cdrom_read_tocentry(drive, 0, 0, 1, (char *)&ms_tmp,
1669                                            sizeof(ms_tmp), sense);
1670                 if (stat)
1671                         return stat;
1672
1673                 toc->last_session_lba = be32_to_cpu(ms_tmp.ent.addr.lba);
1674         } else {
1675                 ms_tmp.hdr.first_track = ms_tmp.hdr.last_track = CDROM_LEADOUT;
1676                 toc->last_session_lba = msf_to_lba(0, 2, 0); /* 0m 2s 0f */
1677         }
1678
1679         if (info->cd_flags & IDE_CD_FLAG_TOCADDR_AS_BCD) {
1680                 /* Re-read multisession information using MSF format */
1681                 stat = cdrom_read_tocentry(drive, 0, 1, 1, (char *)&ms_tmp,
1682                                            sizeof(ms_tmp), sense);
1683                 if (stat)
1684                         return stat;
1685
1686                 msf_from_bcd (&ms_tmp.ent.addr.msf);
1687                 toc->last_session_lba = msf_to_lba(ms_tmp.ent.addr.msf.minute,
1688                                                    ms_tmp.ent.addr.msf.second,
1689                                                    ms_tmp.ent.addr.msf.frame);
1690         }
1691
1692         toc->xa_flag = (ms_tmp.hdr.first_track != ms_tmp.hdr.last_track);
1693
1694         /* Now try to get the total cdrom capacity. */
1695         stat = cdrom_get_last_written(cdi, &last_written);
1696         if (!stat && (last_written > toc->capacity)) {
1697                 toc->capacity = last_written;
1698                 set_capacity(info->disk, toc->capacity * sectors_per_frame);
1699                 drive->probed_capacity = toc->capacity * sectors_per_frame;
1700         }
1701
1702         /* Remember that we've read this stuff. */
1703         info->cd_flags |= IDE_CD_FLAG_TOC_VALID;
1704
1705         return 0;
1706 }
1707
1708 /* the generic packet interface to cdrom.c */
1709 static int ide_cdrom_packet(struct cdrom_device_info *cdi,
1710                             struct packet_command *cgc)
1711 {
1712         struct request req;
1713         ide_drive_t *drive = cdi->handle;
1714
1715         if (cgc->timeout <= 0)
1716                 cgc->timeout = ATAPI_WAIT_PC;
1717
1718         /* here we queue the commands from the uniform CD-ROM
1719            layer. the packet must be complete, as we do not
1720            touch it at all. */
1721         ide_cd_init_rq(drive, &req);
1722         memcpy(req.cmd, cgc->cmd, CDROM_PACKET_SIZE);
1723         if (cgc->sense)
1724                 memset(cgc->sense, 0, sizeof(struct request_sense));
1725         req.data = cgc->buffer;
1726         req.data_len = cgc->buflen;
1727         req.timeout = cgc->timeout;
1728
1729         if (cgc->quiet)
1730                 req.cmd_flags |= REQ_QUIET;
1731
1732         req.sense = cgc->sense;
1733         cgc->stat = ide_cd_queue_pc(drive, &req);
1734         if (!cgc->stat)
1735                 cgc->buflen -= req.data_len;
1736         return cgc->stat;
1737 }
1738
1739 static
1740 int ide_cdrom_tray_move (struct cdrom_device_info *cdi, int position)
1741 {
1742         ide_drive_t *drive = cdi->handle;
1743         struct request_sense sense;
1744
1745         if (position) {
1746                 int stat = ide_cd_lockdoor(drive, 0, &sense);
1747
1748                 if (stat)
1749                         return stat;
1750         }
1751
1752         return cdrom_eject(drive, !position, &sense);
1753 }
1754
1755 int ide_cdrom_get_capabilities(ide_drive_t *drive, u8 *buf)
1756 {
1757         struct cdrom_info *info = drive->driver_data;
1758         struct cdrom_device_info *cdi = &info->devinfo;
1759         struct packet_command cgc;
1760         int stat, attempts = 3, size = ATAPI_CAPABILITIES_PAGE_SIZE;
1761
1762         if ((info->cd_flags & IDE_CD_FLAG_FULL_CAPS_PAGE) == 0)
1763                 size -= ATAPI_CAPABILITIES_PAGE_PAD_SIZE;
1764
1765         init_cdrom_command(&cgc, buf, size, CGC_DATA_UNKNOWN);
1766         do { /* we seem to get stat=0x01,err=0x00 the first time (??) */
1767                 stat = cdrom_mode_sense(cdi, &cgc, GPMODE_CAPABILITIES_PAGE, 0);
1768                 if (!stat)
1769                         break;
1770         } while (--attempts);
1771         return stat;
1772 }
1773
1774 void ide_cdrom_update_speed(ide_drive_t *drive, u8 *buf)
1775 {
1776         struct cdrom_info *cd = drive->driver_data;
1777         u16 curspeed, maxspeed;
1778
1779         curspeed = *(u16 *)&buf[8 + 14];
1780         maxspeed = *(u16 *)&buf[8 +  8];
1781
1782         if (cd->cd_flags & IDE_CD_FLAG_LE_SPEED_FIELDS) {
1783                 curspeed = le16_to_cpu(curspeed);
1784                 maxspeed = le16_to_cpu(maxspeed);
1785         } else {
1786                 curspeed = be16_to_cpu(curspeed);
1787                 maxspeed = be16_to_cpu(maxspeed);
1788         }
1789
1790         cd->current_speed = (curspeed + (176/2)) / 176;
1791         cd->max_speed = (maxspeed + (176/2)) / 176;
1792 }
1793
1794 /*
1795  * add logic to try GET_EVENT command first to check for media and tray
1796  * status. this should be supported by newer cd-r/w and all DVD etc
1797  * drives
1798  */
1799 static
1800 int ide_cdrom_drive_status (struct cdrom_device_info *cdi, int slot_nr)
1801 {
1802         ide_drive_t *drive = cdi->handle;
1803         struct media_event_desc med;
1804         struct request_sense sense;
1805         int stat;
1806
1807         if (slot_nr != CDSL_CURRENT)
1808                 return -EINVAL;
1809
1810         stat = cdrom_check_status(drive, &sense);
1811         if (!stat || sense.sense_key == UNIT_ATTENTION)
1812                 return CDS_DISC_OK;
1813
1814         if (!cdrom_get_media_event(cdi, &med)) {
1815                 if (med.media_present)
1816                         return CDS_DISC_OK;
1817                 else if (med.door_open)
1818                         return CDS_TRAY_OPEN;
1819                 else
1820                         return CDS_NO_DISC;
1821         }
1822
1823         if (sense.sense_key == NOT_READY && sense.asc == 0x04 && sense.ascq == 0x04)
1824                 return CDS_DISC_OK;
1825
1826         /*
1827          * If not using Mt Fuji extended media tray reports,
1828          * just return TRAY_OPEN since ATAPI doesn't provide
1829          * any other way to detect this...
1830          */
1831         if (sense.sense_key == NOT_READY) {
1832                 if (sense.asc == 0x3a && sense.ascq == 1)
1833                         return CDS_NO_DISC;
1834                 else
1835                         return CDS_TRAY_OPEN;
1836         }
1837         return CDS_DRIVE_NOT_READY;
1838 }
1839
1840 /****************************************************************************
1841  * Other driver requests (open, close, check media change).
1842  */
1843
1844 static
1845 int ide_cdrom_check_media_change_real (struct cdrom_device_info *cdi,
1846                                        int slot_nr)
1847 {
1848         ide_drive_t *drive = cdi->handle;
1849         struct cdrom_info *cd = drive->driver_data;
1850         int retval;
1851
1852         if (slot_nr == CDSL_CURRENT) {
1853                 (void) cdrom_check_status(drive, NULL);
1854                 retval = (cd->cd_flags & IDE_CD_FLAG_MEDIA_CHANGED) ? 1 : 0;
1855                 cd->cd_flags &= ~IDE_CD_FLAG_MEDIA_CHANGED;
1856                 return retval;
1857         } else {
1858                 return -EINVAL;
1859         }
1860 }
1861
1862
1863 static
1864 int ide_cdrom_open_real (struct cdrom_device_info *cdi, int purpose)
1865 {
1866         return 0;
1867 }
1868
1869 /*
1870  * Close down the device.  Invalidate all cached blocks.
1871  */
1872
1873 static
1874 void ide_cdrom_release_real (struct cdrom_device_info *cdi)
1875 {
1876         ide_drive_t *drive = cdi->handle;
1877         struct cdrom_info *cd = drive->driver_data;
1878
1879         if (!cdi->use_count)
1880                 cd->cd_flags &= ~IDE_CD_FLAG_TOC_VALID;
1881 }
1882
1883 #define IDE_CD_CAPABILITIES \
1884         (CDC_CLOSE_TRAY | CDC_OPEN_TRAY | CDC_LOCK | CDC_SELECT_SPEED | \
1885          CDC_SELECT_DISC | CDC_MULTI_SESSION | CDC_MCN | CDC_MEDIA_CHANGED | \
1886          CDC_PLAY_AUDIO | CDC_RESET | CDC_DRIVE_STATUS | CDC_CD_R | \
1887          CDC_CD_RW | CDC_DVD | CDC_DVD_R | CDC_DVD_RAM | CDC_GENERIC_PACKET | \
1888          CDC_MO_DRIVE | CDC_MRW | CDC_MRW_W | CDC_RAM)
1889
1890 static struct cdrom_device_ops ide_cdrom_dops = {
1891         .open                   = ide_cdrom_open_real,
1892         .release                = ide_cdrom_release_real,
1893         .drive_status           = ide_cdrom_drive_status,
1894         .media_changed          = ide_cdrom_check_media_change_real,
1895         .tray_move              = ide_cdrom_tray_move,
1896         .lock_door              = ide_cdrom_lock_door,
1897         .select_speed           = ide_cdrom_select_speed,
1898         .get_last_session       = ide_cdrom_get_last_session,
1899         .get_mcn                = ide_cdrom_get_mcn,
1900         .reset                  = ide_cdrom_reset,
1901         .audio_ioctl            = ide_cdrom_audio_ioctl,
1902         .capability             = IDE_CD_CAPABILITIES,
1903         .generic_packet         = ide_cdrom_packet,
1904 };
1905
1906 static int ide_cdrom_register (ide_drive_t *drive, int nslots)
1907 {
1908         struct cdrom_info *info = drive->driver_data;
1909         struct cdrom_device_info *devinfo = &info->devinfo;
1910
1911         devinfo->ops = &ide_cdrom_dops;
1912         devinfo->speed = info->current_speed;
1913         devinfo->capacity = nslots;
1914         devinfo->handle = drive;
1915         strcpy(devinfo->name, drive->name);
1916
1917         if (info->cd_flags & IDE_CD_FLAG_NO_SPEED_SELECT)
1918                 devinfo->mask |= CDC_SELECT_SPEED;
1919
1920         devinfo->disk = info->disk;
1921         return register_cdrom(devinfo);
1922 }
1923
1924 static
1925 int ide_cdrom_probe_capabilities (ide_drive_t *drive)
1926 {
1927         struct cdrom_info *cd = drive->driver_data;
1928         struct cdrom_device_info *cdi = &cd->devinfo;
1929         u8 buf[ATAPI_CAPABILITIES_PAGE_SIZE];
1930         mechtype_t mechtype;
1931         int nslots = 1;
1932
1933         cdi->mask = (CDC_CD_R | CDC_CD_RW | CDC_DVD | CDC_DVD_R |
1934                      CDC_DVD_RAM | CDC_SELECT_DISC | CDC_PLAY_AUDIO |
1935                      CDC_MO_DRIVE | CDC_RAM);
1936
1937         if (drive->media == ide_optical) {
1938                 cdi->mask &= ~(CDC_MO_DRIVE | CDC_RAM);
1939                 printk(KERN_ERR "%s: ATAPI magneto-optical drive\n", drive->name);
1940                 return nslots;
1941         }
1942
1943         if (cd->cd_flags & IDE_CD_FLAG_PRE_ATAPI12) {
1944                 cd->cd_flags &= ~IDE_CD_FLAG_NO_EJECT;
1945                 cdi->mask &= ~CDC_PLAY_AUDIO;
1946                 return nslots;
1947         }
1948
1949         /*
1950          * we have to cheat a little here. the packet will eventually
1951          * be queued with ide_cdrom_packet(), which extracts the
1952          * drive from cdi->handle. Since this device hasn't been
1953          * registered with the Uniform layer yet, it can't do this.
1954          * Same goes for cdi->ops.
1955          */
1956         cdi->handle = drive;
1957         cdi->ops = &ide_cdrom_dops;
1958
1959         if (ide_cdrom_get_capabilities(drive, buf))
1960                 return 0;
1961
1962         if ((buf[8 + 6] & 0x01) == 0)
1963                 cd->cd_flags |= IDE_CD_FLAG_NO_DOORLOCK;
1964         if (buf[8 + 6] & 0x08)
1965                 cd->cd_flags &= ~IDE_CD_FLAG_NO_EJECT;
1966         if (buf[8 + 3] & 0x01)
1967                 cdi->mask &= ~CDC_CD_R;
1968         if (buf[8 + 3] & 0x02)
1969                 cdi->mask &= ~(CDC_CD_RW | CDC_RAM);
1970         if (buf[8 + 2] & 0x38)
1971                 cdi->mask &= ~CDC_DVD;
1972         if (buf[8 + 3] & 0x20)
1973                 cdi->mask &= ~(CDC_DVD_RAM | CDC_RAM);
1974         if (buf[8 + 3] & 0x10)
1975                 cdi->mask &= ~CDC_DVD_R;
1976         if ((buf[8 + 4] & 0x01) || (cd->cd_flags & IDE_CD_FLAG_PLAY_AUDIO_OK))
1977                 cdi->mask &= ~CDC_PLAY_AUDIO;
1978
1979         mechtype = buf[8 + 6] >> 5;
1980         if (mechtype == mechtype_caddy || mechtype == mechtype_popup)
1981                 cdi->mask |= CDC_CLOSE_TRAY;
1982
1983         if (cdi->sanyo_slot > 0) {
1984                 cdi->mask &= ~CDC_SELECT_DISC;
1985                 nslots = 3;
1986         } else if (mechtype == mechtype_individual_changer ||
1987                    mechtype == mechtype_cartridge_changer) {
1988                 nslots = cdrom_number_of_slots(cdi);
1989                 if (nslots > 1)
1990                         cdi->mask &= ~CDC_SELECT_DISC;
1991         }
1992
1993         ide_cdrom_update_speed(drive, buf);
1994
1995         printk(KERN_INFO "%s: ATAPI", drive->name);
1996
1997         /* don't print speed if the drive reported 0 */
1998         if (cd->max_speed)
1999                 printk(KERN_CONT " %dX", cd->max_speed);
2000
2001         printk(KERN_CONT " %s", (cdi->mask & CDC_DVD) ? "CD-ROM" : "DVD-ROM");
2002
2003         if ((cdi->mask & CDC_DVD_R) == 0 || (cdi->mask & CDC_DVD_RAM) == 0)
2004                 printk(KERN_CONT " DVD%s%s",
2005                                  (cdi->mask & CDC_DVD_R) ? "" : "-R",
2006                                  (cdi->mask & CDC_DVD_RAM) ? "" : "-RAM");
2007
2008         if ((cdi->mask & CDC_CD_R) == 0 || (cdi->mask & CDC_CD_RW) == 0)
2009                 printk(KERN_CONT " CD%s%s",
2010                                  (cdi->mask & CDC_CD_R) ? "" : "-R",
2011                                  (cdi->mask & CDC_CD_RW) ? "" : "/RW");
2012
2013         if ((cdi->mask & CDC_SELECT_DISC) == 0)
2014                 printk(KERN_CONT " changer w/%d slots", nslots);
2015         else
2016                 printk(KERN_CONT " drive");
2017
2018         printk(KERN_CONT ", %dkB Cache\n", be16_to_cpu(*(u16 *)&buf[8 + 12]));
2019
2020         return nslots;
2021 }
2022
2023 #ifdef CONFIG_IDE_PROC_FS
2024 static void ide_cdrom_add_settings(ide_drive_t *drive)
2025 {
2026         ide_add_setting(drive, "dsc_overlap", SETTING_RW, TYPE_BYTE, 0, 1, 1, 1, &drive->dsc_overlap, NULL);
2027 }
2028 #else
2029 static inline void ide_cdrom_add_settings(ide_drive_t *drive) { ; }
2030 #endif
2031
2032 /*
2033  * standard prep_rq_fn that builds 10 byte cmds
2034  */
2035 static int ide_cdrom_prep_fs(struct request_queue *q, struct request *rq)
2036 {
2037         int hard_sect = queue_hardsect_size(q);
2038         long block = (long)rq->hard_sector / (hard_sect >> 9);
2039         unsigned long blocks = rq->hard_nr_sectors / (hard_sect >> 9);
2040
2041         memset(rq->cmd, 0, sizeof(rq->cmd));
2042
2043         if (rq_data_dir(rq) == READ)
2044                 rq->cmd[0] = GPCMD_READ_10;
2045         else
2046                 rq->cmd[0] = GPCMD_WRITE_10;
2047
2048         /*
2049          * fill in lba
2050          */
2051         rq->cmd[2] = (block >> 24) & 0xff;
2052         rq->cmd[3] = (block >> 16) & 0xff;
2053         rq->cmd[4] = (block >>  8) & 0xff;
2054         rq->cmd[5] = block & 0xff;
2055
2056         /*
2057          * and transfer length
2058          */
2059         rq->cmd[7] = (blocks >> 8) & 0xff;
2060         rq->cmd[8] = blocks & 0xff;
2061         rq->cmd_len = 10;
2062         return BLKPREP_OK;
2063 }
2064
2065 /*
2066  * Most of the SCSI commands are supported directly by ATAPI devices.
2067  * This transform handles the few exceptions.
2068  */
2069 static int ide_cdrom_prep_pc(struct request *rq)
2070 {
2071         u8 *c = rq->cmd;
2072
2073         /*
2074          * Transform 6-byte read/write commands to the 10-byte version
2075          */
2076         if (c[0] == READ_6 || c[0] == WRITE_6) {
2077                 c[8] = c[4];
2078                 c[5] = c[3];
2079                 c[4] = c[2];
2080                 c[3] = c[1] & 0x1f;
2081                 c[2] = 0;
2082                 c[1] &= 0xe0;
2083                 c[0] += (READ_10 - READ_6);
2084                 rq->cmd_len = 10;
2085                 return BLKPREP_OK;
2086         }
2087
2088         /*
2089          * it's silly to pretend we understand 6-byte sense commands, just
2090          * reject with ILLEGAL_REQUEST and the caller should take the
2091          * appropriate action
2092          */
2093         if (c[0] == MODE_SENSE || c[0] == MODE_SELECT) {
2094                 rq->errors = ILLEGAL_REQUEST;
2095                 return BLKPREP_KILL;
2096         }
2097         
2098         return BLKPREP_OK;
2099 }
2100
2101 static int ide_cdrom_prep_fn(struct request_queue *q, struct request *rq)
2102 {
2103         if (blk_fs_request(rq))
2104                 return ide_cdrom_prep_fs(q, rq);
2105         else if (blk_pc_request(rq))
2106                 return ide_cdrom_prep_pc(rq);
2107
2108         return 0;
2109 }
2110
2111 struct cd_list_entry {
2112         const char      *id_model;
2113         const char      *id_firmware;
2114         unsigned int    cd_flags;
2115 };
2116
2117 static const struct cd_list_entry ide_cd_quirks_list[] = {
2118         /* Limit transfer size per interrupt. */
2119         { "SAMSUNG CD-ROM SCR-2430", NULL,   IDE_CD_FLAG_LIMIT_NFRAMES      },
2120         { "SAMSUNG CD-ROM SCR-2432", NULL,   IDE_CD_FLAG_LIMIT_NFRAMES      },
2121         /* SCR-3231 doesn't support the SET_CD_SPEED command. */
2122         { "SAMSUNG CD-ROM SCR-3231", NULL,   IDE_CD_FLAG_NO_SPEED_SELECT    },
2123         /* Old NEC260 (not R) was released before ATAPI 1.2 spec. */
2124         { "NEC CD-ROM DRIVE:260",    "1.01", IDE_CD_FLAG_TOCADDR_AS_BCD |
2125                                              IDE_CD_FLAG_PRE_ATAPI12,       },
2126         /* Vertos 300, some versions of this drive like to talk BCD. */
2127         { "V003S0DS",                NULL,   IDE_CD_FLAG_VERTOS_300_SSD,    },
2128         /* Vertos 600 ESD. */
2129         { "V006E0DS",                NULL,   IDE_CD_FLAG_VERTOS_600_ESD,    },
2130         /*
2131          * Sanyo 3 CD changer uses a non-standard command for CD changing
2132          * (by default standard ATAPI support for CD changers is used).
2133          */
2134         { "CD-ROM CDR-C3 G",         NULL,   IDE_CD_FLAG_SANYO_3CD          },
2135         { "CD-ROM CDR-C3G",          NULL,   IDE_CD_FLAG_SANYO_3CD          },
2136         { "CD-ROM CDR_C36",          NULL,   IDE_CD_FLAG_SANYO_3CD          },
2137         /* Stingray 8X CD-ROM. */
2138         { "STINGRAY 8422 IDE 8X CD-ROM 7-27-95", NULL, IDE_CD_FLAG_PRE_ATAPI12},
2139         /*
2140          * ACER 50X CD-ROM and WPI 32X CD-ROM require the full spec length
2141          * mode sense page capabilities size, but older drives break.
2142          */
2143         { "ATAPI CD ROM DRIVE 50X MAX", NULL,   IDE_CD_FLAG_FULL_CAPS_PAGE  },
2144         { "WPI CDS-32X",                NULL,   IDE_CD_FLAG_FULL_CAPS_PAGE  },
2145         /* ACER/AOpen 24X CD-ROM has the speed fields byte-swapped. */
2146         { "",                        "241N", IDE_CD_FLAG_LE_SPEED_FIELDS    },
2147         /*
2148          * Some drives used by Apple don't advertise audio play
2149          * but they do support reading TOC & audio datas.
2150          */
2151         { "MATSHITADVD-ROM SR-8187", NULL,   IDE_CD_FLAG_PLAY_AUDIO_OK      },
2152         { "MATSHITADVD-ROM SR-8186", NULL,   IDE_CD_FLAG_PLAY_AUDIO_OK      },
2153         { "MATSHITADVD-ROM SR-8176", NULL,   IDE_CD_FLAG_PLAY_AUDIO_OK      },
2154         { "MATSHITADVD-ROM SR-8174", NULL,   IDE_CD_FLAG_PLAY_AUDIO_OK      },
2155         { NULL, NULL, 0 }
2156 };
2157
2158 static unsigned int ide_cd_flags(struct hd_driveid *id)
2159 {
2160         const struct cd_list_entry *cle = ide_cd_quirks_list;
2161
2162         while (cle->id_model) {
2163                 if (strcmp(cle->id_model, id->model) == 0 &&
2164                     (cle->id_firmware == NULL ||
2165                      strstr(id->fw_rev, cle->id_firmware)))
2166                         return cle->cd_flags;
2167                 cle++;
2168         }
2169
2170         return 0;
2171 }
2172
2173 static
2174 int ide_cdrom_setup (ide_drive_t *drive)
2175 {
2176         struct cdrom_info *cd = drive->driver_data;
2177         struct cdrom_device_info *cdi = &cd->devinfo;
2178         struct hd_driveid *id = drive->id;
2179         int nslots;
2180
2181         blk_queue_prep_rq(drive->queue, ide_cdrom_prep_fn);
2182         blk_queue_dma_alignment(drive->queue, 31);
2183         drive->queue->unplug_delay = (1 * HZ) / 1000;
2184         if (!drive->queue->unplug_delay)
2185                 drive->queue->unplug_delay = 1;
2186
2187         drive->special.all      = 0;
2188
2189         cd->cd_flags = IDE_CD_FLAG_MEDIA_CHANGED | IDE_CD_FLAG_NO_EJECT |
2190                        ide_cd_flags(id);
2191
2192         if ((id->config & 0x0060) == 0x20)
2193                 cd->cd_flags |= IDE_CD_FLAG_DRQ_INTERRUPT;
2194
2195         if ((cd->cd_flags & IDE_CD_FLAG_VERTOS_300_SSD) &&
2196             id->fw_rev[4] == '1' && id->fw_rev[6] <= '2')
2197                 cd->cd_flags |= (IDE_CD_FLAG_TOCTRACKS_AS_BCD |
2198                                  IDE_CD_FLAG_TOCADDR_AS_BCD);
2199         else if ((cd->cd_flags & IDE_CD_FLAG_VERTOS_600_ESD) &&
2200                  id->fw_rev[4] == '1' && id->fw_rev[6] <= '2')
2201                 cd->cd_flags |= IDE_CD_FLAG_TOCTRACKS_AS_BCD;
2202         else if (cd->cd_flags & IDE_CD_FLAG_SANYO_3CD)
2203                 cdi->sanyo_slot = 3;    /* 3 => use CD in slot 0 */
2204
2205         nslots = ide_cdrom_probe_capabilities (drive);
2206
2207         /*
2208          * set correct block size
2209          */
2210         blk_queue_hardsect_size(drive->queue, CD_FRAMESIZE);
2211
2212         if (drive->autotune == IDE_TUNE_DEFAULT ||
2213             drive->autotune == IDE_TUNE_AUTO)
2214                 drive->dsc_overlap = (drive->next != drive);
2215
2216         if (ide_cdrom_register(drive, nslots)) {
2217                 printk (KERN_ERR "%s: ide_cdrom_setup failed to register device with the cdrom driver.\n", drive->name);
2218                 cd->devinfo.handle = NULL;
2219                 return 1;
2220         }
2221         ide_cdrom_add_settings(drive);
2222         return 0;
2223 }
2224
2225 #ifdef CONFIG_IDE_PROC_FS
2226 static
2227 sector_t ide_cdrom_capacity (ide_drive_t *drive)
2228 {
2229         unsigned long capacity, sectors_per_frame;
2230
2231         if (cdrom_read_capacity(drive, &capacity, &sectors_per_frame, NULL))
2232                 return 0;
2233
2234         return capacity * sectors_per_frame;
2235 }
2236 #endif
2237
2238 static void ide_cd_remove(ide_drive_t *drive)
2239 {
2240         struct cdrom_info *info = drive->driver_data;
2241
2242         ide_proc_unregister_driver(drive, info->driver);
2243
2244         del_gendisk(info->disk);
2245
2246         ide_cd_put(info);
2247 }
2248
2249 static void ide_cd_release(struct kref *kref)
2250 {
2251         struct cdrom_info *info = to_ide_cd(kref);
2252         struct cdrom_device_info *devinfo = &info->devinfo;
2253         ide_drive_t *drive = info->drive;
2254         struct gendisk *g = info->disk;
2255
2256         kfree(info->buffer);
2257         kfree(info->toc);
2258         if (devinfo->handle == drive && unregister_cdrom(devinfo))
2259                 printk(KERN_ERR "%s: %s failed to unregister device from the cdrom "
2260                                 "driver.\n", __FUNCTION__, drive->name);
2261         drive->dsc_overlap = 0;
2262         drive->driver_data = NULL;
2263         blk_queue_prep_rq(drive->queue, NULL);
2264         g->private_data = NULL;
2265         put_disk(g);
2266         kfree(info);
2267 }
2268
2269 static int ide_cd_probe(ide_drive_t *);
2270
2271 #ifdef CONFIG_IDE_PROC_FS
2272 static int proc_idecd_read_capacity
2273         (char *page, char **start, off_t off, int count, int *eof, void *data)
2274 {
2275         ide_drive_t *drive = data;
2276         int len;
2277
2278         len = sprintf(page,"%llu\n", (long long)ide_cdrom_capacity(drive));
2279         PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
2280 }
2281
2282 static ide_proc_entry_t idecd_proc[] = {
2283         { "capacity", S_IFREG|S_IRUGO, proc_idecd_read_capacity, NULL },
2284         { NULL, 0, NULL, NULL }
2285 };
2286 #endif
2287
2288 static ide_driver_t ide_cdrom_driver = {
2289         .gen_driver = {
2290                 .owner          = THIS_MODULE,
2291                 .name           = "ide-cdrom",
2292                 .bus            = &ide_bus_type,
2293         },
2294         .probe                  = ide_cd_probe,
2295         .remove                 = ide_cd_remove,
2296         .version                = IDECD_VERSION,
2297         .media                  = ide_cdrom,
2298         .supports_dsc_overlap   = 1,
2299         .do_request             = ide_do_rw_cdrom,
2300         .end_request            = ide_end_request,
2301         .error                  = __ide_error,
2302         .abort                  = __ide_abort,
2303 #ifdef CONFIG_IDE_PROC_FS
2304         .proc                   = idecd_proc,
2305 #endif
2306 };
2307
2308 static int idecd_open(struct inode * inode, struct file * file)
2309 {
2310         struct gendisk *disk = inode->i_bdev->bd_disk;
2311         struct cdrom_info *info;
2312         int rc = -ENOMEM;
2313
2314         if (!(info = ide_cd_get(disk)))
2315                 return -ENXIO;
2316
2317         if (!info->buffer)
2318                 info->buffer = kmalloc(SECTOR_BUFFER_SIZE, GFP_KERNEL|__GFP_REPEAT);
2319
2320         if (info->buffer)
2321                 rc = cdrom_open(&info->devinfo, inode, file);
2322
2323         if (rc < 0)
2324                 ide_cd_put(info);
2325
2326         return rc;
2327 }
2328
2329 static int idecd_release(struct inode * inode, struct file * file)
2330 {
2331         struct gendisk *disk = inode->i_bdev->bd_disk;
2332         struct cdrom_info *info = ide_cd_g(disk);
2333
2334         cdrom_release (&info->devinfo, file);
2335
2336         ide_cd_put(info);
2337
2338         return 0;
2339 }
2340
2341 static int idecd_set_spindown(struct cdrom_device_info *cdi, unsigned long arg)
2342 {
2343         struct packet_command cgc;
2344         char buffer[16];
2345         int stat;
2346         char spindown;
2347
2348         if (copy_from_user(&spindown, (void __user *)arg, sizeof(char)))
2349                 return -EFAULT;
2350
2351         init_cdrom_command(&cgc, buffer, sizeof(buffer), CGC_DATA_UNKNOWN);
2352
2353         stat = cdrom_mode_sense(cdi, &cgc, GPMODE_CDROM_PAGE, 0);
2354         if (stat)
2355                 return stat;
2356
2357         buffer[11] = (buffer[11] & 0xf0) | (spindown & 0x0f);
2358         return cdrom_mode_select(cdi, &cgc);
2359 }
2360
2361 static int idecd_get_spindown(struct cdrom_device_info *cdi, unsigned long arg)
2362 {
2363         struct packet_command cgc;
2364         char buffer[16];
2365         int stat;
2366         char spindown;
2367
2368         init_cdrom_command(&cgc, buffer, sizeof(buffer), CGC_DATA_UNKNOWN);
2369
2370         stat = cdrom_mode_sense(cdi, &cgc, GPMODE_CDROM_PAGE, 0);
2371         if (stat)
2372                 return stat;
2373
2374         spindown = buffer[11] & 0x0f;
2375         if (copy_to_user((void __user *)arg, &spindown, sizeof (char)))
2376                 return -EFAULT;
2377         return 0;
2378 }
2379
2380 static int idecd_ioctl (struct inode *inode, struct file *file,
2381                         unsigned int cmd, unsigned long arg)
2382 {
2383         struct block_device *bdev = inode->i_bdev;
2384         struct cdrom_info *info = ide_cd_g(bdev->bd_disk);
2385         int err;
2386
2387         switch (cmd) {
2388         case CDROMSETSPINDOWN:
2389                 return idecd_set_spindown(&info->devinfo, arg);
2390         case CDROMGETSPINDOWN:
2391                 return idecd_get_spindown(&info->devinfo, arg);
2392         default:
2393                 break;
2394         }
2395
2396         err = generic_ide_ioctl(info->drive, file, bdev, cmd, arg);
2397         if (err == -EINVAL)
2398                 err = cdrom_ioctl(file, &info->devinfo, inode, cmd, arg);
2399
2400         return err;
2401 }
2402
2403 static int idecd_media_changed(struct gendisk *disk)
2404 {
2405         struct cdrom_info *info = ide_cd_g(disk);
2406         return cdrom_media_changed(&info->devinfo);
2407 }
2408
2409 static int idecd_revalidate_disk(struct gendisk *disk)
2410 {
2411         struct cdrom_info *info = ide_cd_g(disk);
2412         struct request_sense sense;
2413
2414         ide_cd_read_toc(info->drive, &sense);
2415
2416         return  0;
2417 }
2418
2419 static struct block_device_operations idecd_ops = {
2420         .owner          = THIS_MODULE,
2421         .open           = idecd_open,
2422         .release        = idecd_release,
2423         .ioctl          = idecd_ioctl,
2424         .media_changed  = idecd_media_changed,
2425         .revalidate_disk= idecd_revalidate_disk
2426 };
2427
2428 /* options */
2429 static char *ignore = NULL;
2430
2431 module_param(ignore, charp, 0400);
2432 MODULE_DESCRIPTION("ATAPI CD-ROM Driver");
2433
2434 static int ide_cd_probe(ide_drive_t *drive)
2435 {
2436         struct cdrom_info *info;
2437         struct gendisk *g;
2438         struct request_sense sense;
2439
2440         if (!strstr("ide-cdrom", drive->driver_req))
2441                 goto failed;
2442         if (!drive->present)
2443                 goto failed;
2444         if (drive->media != ide_cdrom && drive->media != ide_optical)
2445                 goto failed;
2446         /* skip drives that we were told to ignore */
2447         if (ignore != NULL) {
2448                 if (strstr(ignore, drive->name)) {
2449                         printk(KERN_INFO "ide-cd: ignoring drive %s\n", drive->name);
2450                         goto failed;
2451                 }
2452         }
2453         if (drive->scsi) {
2454                 printk(KERN_INFO "ide-cd: passing drive %s to ide-scsi emulation.\n", drive->name);
2455                 goto failed;
2456         }
2457         info = kzalloc(sizeof(struct cdrom_info), GFP_KERNEL);
2458         if (info == NULL) {
2459                 printk(KERN_ERR "%s: Can't allocate a cdrom structure\n", drive->name);
2460                 goto failed;
2461         }
2462
2463         g = alloc_disk(1 << PARTN_BITS);
2464         if (!g)
2465                 goto out_free_cd;
2466
2467         ide_init_disk(g, drive);
2468
2469         ide_proc_register_driver(drive, &ide_cdrom_driver);
2470
2471         kref_init(&info->kref);
2472
2473         info->drive = drive;
2474         info->driver = &ide_cdrom_driver;
2475         info->disk = g;
2476
2477         g->private_data = &info->driver;
2478
2479         drive->driver_data = info;
2480
2481         g->minors = 1;
2482         g->driverfs_dev = &drive->gendev;
2483         g->flags = GENHD_FL_CD | GENHD_FL_REMOVABLE;
2484         if (ide_cdrom_setup(drive)) {
2485                 ide_proc_unregister_driver(drive, &ide_cdrom_driver);
2486                 ide_cd_release(&info->kref);
2487                 goto failed;
2488         }
2489
2490         ide_cd_read_toc(drive, &sense);
2491         g->fops = &idecd_ops;
2492         g->flags |= GENHD_FL_REMOVABLE;
2493         add_disk(g);
2494         return 0;
2495
2496 out_free_cd:
2497         kfree(info);
2498 failed:
2499         return -ENODEV;
2500 }
2501
2502 static void __exit ide_cdrom_exit(void)
2503 {
2504         driver_unregister(&ide_cdrom_driver.gen_driver);
2505 }
2506
2507 static int __init ide_cdrom_init(void)
2508 {
2509         return driver_register(&ide_cdrom_driver.gen_driver);
2510 }
2511
2512 MODULE_ALIAS("ide:*m-cdrom*");
2513 MODULE_ALIAS("ide-cd");
2514 module_init(ide_cdrom_init);
2515 module_exit(ide_cdrom_exit);
2516 MODULE_LICENSE("GPL");