Merge tag 'firewire-fixes-6.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / drivers / scsi / sr.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  *  sr.c Copyright (C) 1992 David Giller
4  *           Copyright (C) 1993, 1994, 1995, 1999 Eric Youngdale
5  *
6  *  adapted from:
7  *      sd.c Copyright (C) 1992 Drew Eckhardt
8  *      Linux scsi disk driver by
9  *              Drew Eckhardt <drew@colorado.edu>
10  *
11  *      Modified by Eric Youngdale ericy@andante.org to
12  *      add scatter-gather, multiple outstanding request, and other
13  *      enhancements.
14  *
15  *      Modified by Eric Youngdale eric@andante.org to support loadable
16  *      low-level scsi drivers.
17  *
18  *      Modified by Thomas Quinot thomas@melchior.cuivre.fdn.fr to
19  *      provide auto-eject.
20  *
21  *      Modified by Gerd Knorr <kraxel@cs.tu-berlin.de> to support the
22  *      generic cdrom interface
23  *
24  *      Modified by Jens Axboe <axboe@suse.de> - Uniform sr_packet()
25  *      interface, capabilities probe additions, ioctl cleanups, etc.
26  *
27  *      Modified by Richard Gooch <rgooch@atnf.csiro.au> to support devfs
28  *
29  *      Modified by Jens Axboe <axboe@suse.de> - support DVD-RAM
30  *      transparently and lose the GHOST hack
31  *
32  *      Modified by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
33  *      check resource allocation in sr_init and some cleanups
34  */
35
36 #include <linux/module.h>
37 #include <linux/fs.h>
38 #include <linux/kernel.h>
39 #include <linux/mm.h>
40 #include <linux/bio.h>
41 #include <linux/compat.h>
42 #include <linux/string.h>
43 #include <linux/errno.h>
44 #include <linux/cdrom.h>
45 #include <linux/interrupt.h>
46 #include <linux/init.h>
47 #include <linux/major.h>
48 #include <linux/blkdev.h>
49 #include <linux/blk-pm.h>
50 #include <linux/mutex.h>
51 #include <linux/slab.h>
52 #include <linux/pm_runtime.h>
53 #include <linux/uaccess.h>
54
55 #include <asm/unaligned.h>
56
57 #include <scsi/scsi.h>
58 #include <scsi/scsi_dbg.h>
59 #include <scsi/scsi_device.h>
60 #include <scsi/scsi_driver.h>
61 #include <scsi/scsi_cmnd.h>
62 #include <scsi/scsi_eh.h>
63 #include <scsi/scsi_host.h>
64 #include <scsi/scsi_ioctl.h>    /* For the door lock/unlock commands */
65
66 #include "scsi_logging.h"
67 #include "sr.h"
68
69
70 MODULE_DESCRIPTION("SCSI cdrom (sr) driver");
71 MODULE_LICENSE("GPL");
72 MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_CDROM_MAJOR);
73 MODULE_ALIAS_SCSI_DEVICE(TYPE_ROM);
74 MODULE_ALIAS_SCSI_DEVICE(TYPE_WORM);
75
76 #define SR_DISKS        256
77
78 #define SR_CAPABILITIES \
79         (CDC_CLOSE_TRAY|CDC_OPEN_TRAY|CDC_LOCK|CDC_SELECT_SPEED| \
80          CDC_SELECT_DISC|CDC_MULTI_SESSION|CDC_MCN|CDC_MEDIA_CHANGED| \
81          CDC_PLAY_AUDIO|CDC_RESET|CDC_DRIVE_STATUS| \
82          CDC_CD_R|CDC_CD_RW|CDC_DVD|CDC_DVD_R|CDC_DVD_RAM|CDC_GENERIC_PACKET| \
83          CDC_MRW|CDC_MRW_W|CDC_RAM)
84
85 static int sr_probe(struct device *);
86 static int sr_remove(struct device *);
87 static blk_status_t sr_init_command(struct scsi_cmnd *SCpnt);
88 static int sr_done(struct scsi_cmnd *);
89 static int sr_runtime_suspend(struct device *dev);
90
91 static const struct dev_pm_ops sr_pm_ops = {
92         .runtime_suspend        = sr_runtime_suspend,
93 };
94
95 static struct scsi_driver sr_template = {
96         .gendrv = {
97                 .name           = "sr",
98                 .owner          = THIS_MODULE,
99                 .probe          = sr_probe,
100                 .remove         = sr_remove,
101                 .pm             = &sr_pm_ops,
102         },
103         .init_command           = sr_init_command,
104         .done                   = sr_done,
105 };
106
107 static unsigned long sr_index_bits[SR_DISKS / BITS_PER_LONG];
108 static DEFINE_SPINLOCK(sr_index_lock);
109
110 static struct lock_class_key sr_bio_compl_lkclass;
111
112 static int sr_open(struct cdrom_device_info *, int);
113 static void sr_release(struct cdrom_device_info *);
114
115 static void get_sectorsize(struct scsi_cd *);
116 static int get_capabilities(struct scsi_cd *);
117
118 static unsigned int sr_check_events(struct cdrom_device_info *cdi,
119                                     unsigned int clearing, int slot);
120 static int sr_packet(struct cdrom_device_info *, struct packet_command *);
121 static int sr_read_cdda_bpc(struct cdrom_device_info *cdi, void __user *ubuf,
122                 u32 lba, u32 nr, u8 *last_sense);
123
124 static const struct cdrom_device_ops sr_dops = {
125         .open                   = sr_open,
126         .release                = sr_release,
127         .drive_status           = sr_drive_status,
128         .check_events           = sr_check_events,
129         .tray_move              = sr_tray_move,
130         .lock_door              = sr_lock_door,
131         .select_speed           = sr_select_speed,
132         .get_last_session       = sr_get_last_session,
133         .get_mcn                = sr_get_mcn,
134         .reset                  = sr_reset,
135         .audio_ioctl            = sr_audio_ioctl,
136         .generic_packet         = sr_packet,
137         .read_cdda_bpc          = sr_read_cdda_bpc,
138         .capability             = SR_CAPABILITIES,
139 };
140
141 static inline struct scsi_cd *scsi_cd(struct gendisk *disk)
142 {
143         return disk->private_data;
144 }
145
146 static int sr_runtime_suspend(struct device *dev)
147 {
148         struct scsi_cd *cd = dev_get_drvdata(dev);
149
150         if (!cd)        /* E.g.: runtime suspend following sr_remove() */
151                 return 0;
152
153         if (cd->media_present)
154                 return -EBUSY;
155         else
156                 return 0;
157 }
158
159 static unsigned int sr_get_events(struct scsi_device *sdev)
160 {
161         u8 buf[8];
162         u8 cmd[] = { GET_EVENT_STATUS_NOTIFICATION,
163                      1,                 /* polled */
164                      0, 0,              /* reserved */
165                      1 << 4,            /* notification class: media */
166                      0, 0,              /* reserved */
167                      0, sizeof(buf),    /* allocation length */
168                      0,                 /* control */
169         };
170         struct event_header *eh = (void *)buf;
171         struct media_event_desc *med = (void *)(buf + 4);
172         struct scsi_sense_hdr sshdr;
173         const struct scsi_exec_args exec_args = {
174                 .sshdr = &sshdr,
175         };
176         int result;
177
178         result = scsi_execute_cmd(sdev, cmd, REQ_OP_DRV_IN, buf, sizeof(buf),
179                                   SR_TIMEOUT, MAX_RETRIES, &exec_args);
180         if (result > 0 && scsi_sense_valid(&sshdr) &&
181             sshdr.sense_key == UNIT_ATTENTION)
182                 return DISK_EVENT_MEDIA_CHANGE;
183
184         if (result || be16_to_cpu(eh->data_len) < sizeof(*med))
185                 return 0;
186
187         if (eh->nea || eh->notification_class != 0x4)
188                 return 0;
189
190         if (med->media_event_code == 1)
191                 return DISK_EVENT_EJECT_REQUEST;
192         else if (med->media_event_code == 2)
193                 return DISK_EVENT_MEDIA_CHANGE;
194         else if (med->media_event_code == 3)
195                 return DISK_EVENT_MEDIA_CHANGE;
196         return 0;
197 }
198
199 /*
200  * This function checks to see if the media has been changed or eject
201  * button has been pressed.  It is possible that we have already
202  * sensed a change, or the drive may have sensed one and not yet
203  * reported it.  The past events are accumulated in sdev->changed and
204  * returned together with the current state.
205  */
206 static unsigned int sr_check_events(struct cdrom_device_info *cdi,
207                                     unsigned int clearing, int slot)
208 {
209         struct scsi_cd *cd = cdi->handle;
210         bool last_present;
211         struct scsi_sense_hdr sshdr;
212         unsigned int events;
213         int ret;
214
215         /* no changer support */
216         if (CDSL_CURRENT != slot)
217                 return 0;
218
219         events = sr_get_events(cd->device);
220         cd->get_event_changed |= events & DISK_EVENT_MEDIA_CHANGE;
221
222         /*
223          * If earlier GET_EVENT_STATUS_NOTIFICATION and TUR did not agree
224          * for several times in a row.  We rely on TUR only for this likely
225          * broken device, to prevent generating incorrect media changed
226          * events for every open().
227          */
228         if (cd->ignore_get_event) {
229                 events &= ~DISK_EVENT_MEDIA_CHANGE;
230                 goto do_tur;
231         }
232
233         /*
234          * GET_EVENT_STATUS_NOTIFICATION is enough unless MEDIA_CHANGE
235          * is being cleared.  Note that there are devices which hang
236          * if asked to execute TUR repeatedly.
237          */
238         if (cd->device->changed) {
239                 events |= DISK_EVENT_MEDIA_CHANGE;
240                 cd->device->changed = 0;
241                 cd->tur_changed = true;
242         }
243
244         if (!(clearing & DISK_EVENT_MEDIA_CHANGE))
245                 return events;
246 do_tur:
247         /* let's see whether the media is there with TUR */
248         last_present = cd->media_present;
249         ret = scsi_test_unit_ready(cd->device, SR_TIMEOUT, MAX_RETRIES, &sshdr);
250
251         /*
252          * Media is considered to be present if TUR succeeds or fails with
253          * sense data indicating something other than media-not-present
254          * (ASC 0x3a).
255          */
256         cd->media_present = scsi_status_is_good(ret) ||
257                 (scsi_sense_valid(&sshdr) && sshdr.asc != 0x3a);
258
259         if (last_present != cd->media_present)
260                 cd->device->changed = 1;
261
262         if (cd->device->changed) {
263                 events |= DISK_EVENT_MEDIA_CHANGE;
264                 cd->device->changed = 0;
265                 cd->tur_changed = true;
266         }
267
268         if (cd->ignore_get_event)
269                 return events;
270
271         /* check whether GET_EVENT is reporting spurious MEDIA_CHANGE */
272         if (!cd->tur_changed) {
273                 if (cd->get_event_changed) {
274                         if (cd->tur_mismatch++ > 8) {
275                                 sr_printk(KERN_WARNING, cd,
276                                           "GET_EVENT and TUR disagree continuously, suppress GET_EVENT events\n");
277                                 cd->ignore_get_event = true;
278                         }
279                 } else {
280                         cd->tur_mismatch = 0;
281                 }
282         }
283         cd->tur_changed = false;
284         cd->get_event_changed = false;
285
286         return events;
287 }
288
289 /*
290  * sr_done is the interrupt routine for the device driver.
291  *
292  * It will be notified on the end of a SCSI read / write, and will take one
293  * of several actions based on success or failure.
294  */
295 static int sr_done(struct scsi_cmnd *SCpnt)
296 {
297         int result = SCpnt->result;
298         int this_count = scsi_bufflen(SCpnt);
299         int good_bytes = (result == 0 ? this_count : 0);
300         int block_sectors = 0;
301         long error_sector;
302         struct request *rq = scsi_cmd_to_rq(SCpnt);
303         struct scsi_cd *cd = scsi_cd(rq->q->disk);
304
305 #ifdef DEBUG
306         scmd_printk(KERN_INFO, SCpnt, "done: %x\n", result);
307 #endif
308
309         /*
310          * Handle MEDIUM ERRORs or VOLUME OVERFLOWs that indicate partial
311          * success.  Since this is a relatively rare error condition, no
312          * care is taken to avoid unnecessary additional work such as
313          * memcpy's that could be avoided.
314          */
315         if (scsi_status_is_check_condition(result) &&
316             (SCpnt->sense_buffer[0] & 0x7f) == 0x70) { /* Sense current */
317                 switch (SCpnt->sense_buffer[2]) {
318                 case MEDIUM_ERROR:
319                 case VOLUME_OVERFLOW:
320                 case ILLEGAL_REQUEST:
321                         if (!(SCpnt->sense_buffer[0] & 0x90))
322                                 break;
323                         error_sector =
324                                 get_unaligned_be32(&SCpnt->sense_buffer[3]);
325                         if (rq->bio != NULL)
326                                 block_sectors = bio_sectors(rq->bio);
327                         if (block_sectors < 4)
328                                 block_sectors = 4;
329                         if (cd->device->sector_size == 2048)
330                                 error_sector <<= 2;
331                         error_sector &= ~(block_sectors - 1);
332                         good_bytes = (error_sector - blk_rq_pos(rq)) << 9;
333                         if (good_bytes < 0 || good_bytes >= this_count)
334                                 good_bytes = 0;
335                         /*
336                          * The SCSI specification allows for the value
337                          * returned by READ CAPACITY to be up to 75 2K
338                          * sectors past the last readable block.
339                          * Therefore, if we hit a medium error within the
340                          * last 75 2K sectors, we decrease the saved size
341                          * value.
342                          */
343                         if (error_sector < get_capacity(cd->disk) &&
344                             cd->capacity - error_sector < 4 * 75)
345                                 set_capacity(cd->disk, error_sector);
346                         break;
347
348                 case RECOVERED_ERROR:
349                         good_bytes = this_count;
350                         break;
351
352                 default:
353                         break;
354                 }
355         }
356
357         return good_bytes;
358 }
359
360 static blk_status_t sr_init_command(struct scsi_cmnd *SCpnt)
361 {
362         int block = 0, this_count, s_size;
363         struct scsi_cd *cd;
364         struct request *rq = scsi_cmd_to_rq(SCpnt);
365         blk_status_t ret;
366
367         ret = scsi_alloc_sgtables(SCpnt);
368         if (ret != BLK_STS_OK)
369                 return ret;
370         cd = scsi_cd(rq->q->disk);
371
372         SCSI_LOG_HLQUEUE(1, scmd_printk(KERN_INFO, SCpnt,
373                 "Doing sr request, block = %d\n", block));
374
375         if (!cd->device || !scsi_device_online(cd->device)) {
376                 SCSI_LOG_HLQUEUE(2, scmd_printk(KERN_INFO, SCpnt,
377                         "Finishing %u sectors\n", blk_rq_sectors(rq)));
378                 SCSI_LOG_HLQUEUE(2, scmd_printk(KERN_INFO, SCpnt,
379                         "Retry with 0x%p\n", SCpnt));
380                 goto out;
381         }
382
383         if (cd->device->changed) {
384                 /*
385                  * quietly refuse to do anything to a changed disc until the
386                  * changed bit has been reset
387                  */
388                 goto out;
389         }
390
391         s_size = cd->device->sector_size;
392         if (s_size != 512 && s_size != 1024 && s_size != 2048) {
393                 scmd_printk(KERN_ERR, SCpnt, "bad sector size %d\n", s_size);
394                 goto out;
395         }
396
397         switch (req_op(rq)) {
398         case REQ_OP_WRITE:
399                 if (!cd->writeable)
400                         goto out;
401                 SCpnt->cmnd[0] = WRITE_10;
402                 cd->cdi.media_written = 1;
403                 break;
404         case REQ_OP_READ:
405                 SCpnt->cmnd[0] = READ_10;
406                 break;
407         default:
408                 blk_dump_rq_flags(rq, "Unknown sr command");
409                 goto out;
410         }
411
412         {
413                 struct scatterlist *sg;
414                 int i, size = 0, sg_count = scsi_sg_count(SCpnt);
415
416                 scsi_for_each_sg(SCpnt, sg, sg_count, i)
417                         size += sg->length;
418
419                 if (size != scsi_bufflen(SCpnt)) {
420                         scmd_printk(KERN_ERR, SCpnt,
421                                 "mismatch count %d, bytes %d\n",
422                                 size, scsi_bufflen(SCpnt));
423                         if (scsi_bufflen(SCpnt) > size)
424                                 SCpnt->sdb.length = size;
425                 }
426         }
427
428         /*
429          * request doesn't start on hw block boundary, add scatter pads
430          */
431         if (((unsigned int)blk_rq_pos(rq) % (s_size >> 9)) ||
432             (scsi_bufflen(SCpnt) % s_size)) {
433                 scmd_printk(KERN_NOTICE, SCpnt, "unaligned transfer\n");
434                 goto out;
435         }
436
437         this_count = (scsi_bufflen(SCpnt) >> 9) / (s_size >> 9);
438
439
440         SCSI_LOG_HLQUEUE(2, scmd_printk(KERN_INFO, SCpnt,
441                                         "%s %d/%u 512 byte blocks.\n",
442                                         (rq_data_dir(rq) == WRITE) ?
443                                         "writing" : "reading",
444                                         this_count, blk_rq_sectors(rq)));
445
446         SCpnt->cmnd[1] = 0;
447         block = (unsigned int)blk_rq_pos(rq) / (s_size >> 9);
448
449         if (this_count > 0xffff) {
450                 this_count = 0xffff;
451                 SCpnt->sdb.length = this_count * s_size;
452         }
453
454         put_unaligned_be32(block, &SCpnt->cmnd[2]);
455         SCpnt->cmnd[6] = SCpnt->cmnd[9] = 0;
456         put_unaligned_be16(this_count, &SCpnt->cmnd[7]);
457
458         /*
459          * We shouldn't disconnect in the middle of a sector, so with a dumb
460          * host adapter, it's safe to assume that we can at least transfer
461          * this many bytes between each connect / disconnect.
462          */
463         SCpnt->transfersize = cd->device->sector_size;
464         SCpnt->underflow = this_count << 9;
465         SCpnt->allowed = MAX_RETRIES;
466         SCpnt->cmd_len = 10;
467
468         /*
469          * This indicates that the command is ready from our end to be queued.
470          */
471         return BLK_STS_OK;
472  out:
473         scsi_free_sgtables(SCpnt);
474         return BLK_STS_IOERR;
475 }
476
477 static void sr_revalidate_disk(struct scsi_cd *cd)
478 {
479         struct scsi_sense_hdr sshdr;
480
481         /* if the unit is not ready, nothing more to do */
482         if (scsi_test_unit_ready(cd->device, SR_TIMEOUT, MAX_RETRIES, &sshdr))
483                 return;
484         sr_cd_check(&cd->cdi);
485         get_sectorsize(cd);
486 }
487
488 static int sr_block_open(struct gendisk *disk, blk_mode_t mode)
489 {
490         struct scsi_cd *cd = scsi_cd(disk);
491         struct scsi_device *sdev = cd->device;
492         int ret;
493
494         if (scsi_device_get(cd->device))
495                 return -ENXIO;
496
497         scsi_autopm_get_device(sdev);
498         if (disk_check_media_change(disk))
499                 sr_revalidate_disk(cd);
500
501         mutex_lock(&cd->lock);
502         ret = cdrom_open(&cd->cdi, mode);
503         mutex_unlock(&cd->lock);
504
505         scsi_autopm_put_device(sdev);
506         if (ret)
507                 scsi_device_put(cd->device);
508         return ret;
509 }
510
511 static void sr_block_release(struct gendisk *disk)
512 {
513         struct scsi_cd *cd = scsi_cd(disk);
514
515         mutex_lock(&cd->lock);
516         cdrom_release(&cd->cdi);
517         mutex_unlock(&cd->lock);
518
519         scsi_device_put(cd->device);
520 }
521
522 static int sr_block_ioctl(struct block_device *bdev, blk_mode_t mode,
523                 unsigned cmd, unsigned long arg)
524 {
525         struct scsi_cd *cd = scsi_cd(bdev->bd_disk);
526         struct scsi_device *sdev = cd->device;
527         void __user *argp = (void __user *)arg;
528         int ret;
529
530         if (bdev_is_partition(bdev) && !capable(CAP_SYS_RAWIO))
531                 return -ENOIOCTLCMD;
532
533         mutex_lock(&cd->lock);
534
535         ret = scsi_ioctl_block_when_processing_errors(sdev, cmd,
536                         (mode & BLK_OPEN_NDELAY));
537         if (ret)
538                 goto out;
539
540         scsi_autopm_get_device(sdev);
541
542         if (cmd != CDROMCLOSETRAY && cmd != CDROMEJECT) {
543                 ret = cdrom_ioctl(&cd->cdi, bdev, cmd, arg);
544                 if (ret != -ENOSYS)
545                         goto put;
546         }
547         ret = scsi_ioctl(sdev, mode & BLK_OPEN_WRITE, cmd, argp);
548
549 put:
550         scsi_autopm_put_device(sdev);
551 out:
552         mutex_unlock(&cd->lock);
553         return ret;
554 }
555
556 static unsigned int sr_block_check_events(struct gendisk *disk,
557                                           unsigned int clearing)
558 {
559         struct scsi_cd *cd = disk->private_data;
560
561         if (atomic_read(&cd->device->disk_events_disable_depth))
562                 return 0;
563         return cdrom_check_events(&cd->cdi, clearing);
564 }
565
566 static void sr_free_disk(struct gendisk *disk)
567 {
568         struct scsi_cd *cd = disk->private_data;
569
570         spin_lock(&sr_index_lock);
571         clear_bit(MINOR(disk_devt(disk)), sr_index_bits);
572         spin_unlock(&sr_index_lock);
573
574         unregister_cdrom(&cd->cdi);
575         mutex_destroy(&cd->lock);
576         kfree(cd);
577 }
578
579 static const struct block_device_operations sr_bdops =
580 {
581         .owner          = THIS_MODULE,
582         .open           = sr_block_open,
583         .release        = sr_block_release,
584         .ioctl          = sr_block_ioctl,
585         .compat_ioctl   = blkdev_compat_ptr_ioctl,
586         .check_events   = sr_block_check_events,
587         .free_disk      = sr_free_disk,
588 };
589
590 static int sr_open(struct cdrom_device_info *cdi, int purpose)
591 {
592         struct scsi_cd *cd = cdi->handle;
593         struct scsi_device *sdev = cd->device;
594
595         /*
596          * If the device is in error recovery, wait until it is done.
597          * If the device is offline, then disallow any access to it.
598          */
599         if (!scsi_block_when_processing_errors(sdev))
600                 return -ENXIO;
601
602         return 0;
603 }
604
605 static void sr_release(struct cdrom_device_info *cdi)
606 {
607 }
608
609 static int sr_probe(struct device *dev)
610 {
611         struct scsi_device *sdev = to_scsi_device(dev);
612         struct gendisk *disk;
613         struct scsi_cd *cd;
614         int minor, error;
615
616         scsi_autopm_get_device(sdev);
617         error = -ENODEV;
618         if (sdev->type != TYPE_ROM && sdev->type != TYPE_WORM)
619                 goto fail;
620
621         error = -ENOMEM;
622         cd = kzalloc(sizeof(*cd), GFP_KERNEL);
623         if (!cd)
624                 goto fail;
625
626         disk = blk_mq_alloc_disk_for_queue(sdev->request_queue,
627                                            &sr_bio_compl_lkclass);
628         if (!disk)
629                 goto fail_free;
630         mutex_init(&cd->lock);
631
632         spin_lock(&sr_index_lock);
633         minor = find_first_zero_bit(sr_index_bits, SR_DISKS);
634         if (minor == SR_DISKS) {
635                 spin_unlock(&sr_index_lock);
636                 error = -EBUSY;
637                 goto fail_put;
638         }
639         __set_bit(minor, sr_index_bits);
640         spin_unlock(&sr_index_lock);
641
642         disk->major = SCSI_CDROM_MAJOR;
643         disk->first_minor = minor;
644         disk->minors = 1;
645         sprintf(disk->disk_name, "sr%d", minor);
646         disk->fops = &sr_bdops;
647         disk->flags |= GENHD_FL_REMOVABLE | GENHD_FL_NO_PART;
648         disk->events = DISK_EVENT_MEDIA_CHANGE | DISK_EVENT_EJECT_REQUEST;
649         disk->event_flags = DISK_EVENT_FLAG_POLL | DISK_EVENT_FLAG_UEVENT |
650                                 DISK_EVENT_FLAG_BLOCK_ON_EXCL_WRITE;
651
652         blk_queue_rq_timeout(sdev->request_queue, SR_TIMEOUT);
653
654         cd->device = sdev;
655         cd->disk = disk;
656         cd->capacity = 0x1fffff;
657         cd->device->changed = 1;        /* force recheck CD type */
658         cd->media_present = 1;
659         cd->use = 1;
660         cd->readcd_known = 0;
661         cd->readcd_cdda = 0;
662
663         cd->cdi.ops = &sr_dops;
664         cd->cdi.handle = cd;
665         cd->cdi.mask = 0;
666         cd->cdi.capacity = 1;
667         sprintf(cd->cdi.name, "sr%d", minor);
668
669         sdev->sector_size = 2048;       /* A guess, just in case */
670
671         error = -ENOMEM;
672         if (get_capabilities(cd))
673                 goto fail_minor;
674         sr_vendor_init(cd);
675
676         set_capacity(disk, cd->capacity);
677         disk->private_data = cd;
678
679         if (register_cdrom(disk, &cd->cdi))
680                 goto fail_minor;
681
682         /*
683          * Initialize block layer runtime PM stuffs before the
684          * periodic event checking request gets started in add_disk.
685          */
686         blk_pm_runtime_init(sdev->request_queue, dev);
687
688         dev_set_drvdata(dev, cd);
689         sr_revalidate_disk(cd);
690
691         error = device_add_disk(&sdev->sdev_gendev, disk, NULL);
692         if (error)
693                 goto unregister_cdrom;
694
695         sdev_printk(KERN_DEBUG, sdev,
696                     "Attached scsi CD-ROM %s\n", cd->cdi.name);
697         scsi_autopm_put_device(cd->device);
698
699         return 0;
700
701 unregister_cdrom:
702         unregister_cdrom(&cd->cdi);
703 fail_minor:
704         spin_lock(&sr_index_lock);
705         clear_bit(minor, sr_index_bits);
706         spin_unlock(&sr_index_lock);
707 fail_put:
708         put_disk(disk);
709         mutex_destroy(&cd->lock);
710 fail_free:
711         kfree(cd);
712 fail:
713         scsi_autopm_put_device(sdev);
714         return error;
715 }
716
717
718 static void get_sectorsize(struct scsi_cd *cd)
719 {
720         static const u8 cmd[10] = { READ_CAPACITY };
721         unsigned char buffer[8] = { };
722         int the_result;
723         int sector_size;
724         struct request_queue *queue;
725         struct scsi_failure failure_defs[] = {
726                 {
727                         .result = SCMD_FAILURE_RESULT_ANY,
728                         .allowed = 3,
729                 },
730                 {}
731         };
732         struct scsi_failures failures = {
733                 .failure_definitions = failure_defs,
734         };
735         const struct scsi_exec_args exec_args = {
736                 .failures = &failures,
737         };
738
739         /* Do the command and wait.. */
740         the_result = scsi_execute_cmd(cd->device, cmd, REQ_OP_DRV_IN, buffer,
741                                       sizeof(buffer), SR_TIMEOUT, MAX_RETRIES,
742                                       &exec_args);
743         if (the_result) {
744                 cd->capacity = 0x1fffff;
745                 sector_size = 2048;     /* A guess, just in case */
746         } else {
747                 long last_written;
748
749                 cd->capacity = 1 + get_unaligned_be32(&buffer[0]);
750                 /*
751                  * READ_CAPACITY doesn't return the correct size on
752                  * certain UDF media.  If last_written is larger, use
753                  * it instead.
754                  *
755                  * http://bugzilla.kernel.org/show_bug.cgi?id=9668
756                  */
757                 if (!cdrom_get_last_written(&cd->cdi, &last_written))
758                         cd->capacity = max_t(long, cd->capacity, last_written);
759
760                 sector_size = get_unaligned_be32(&buffer[4]);
761                 switch (sector_size) {
762                         /*
763                          * HP 4020i CD-Recorder reports 2340 byte sectors
764                          * Philips CD-Writers report 2352 byte sectors
765                          *
766                          * Use 2k sectors for them..
767                          */
768                 case 0:
769                 case 2340:
770                 case 2352:
771                         sector_size = 2048;
772                         fallthrough;
773                 case 2048:
774                         cd->capacity *= 4;
775                         fallthrough;
776                 case 512:
777                         break;
778                 default:
779                         sr_printk(KERN_INFO, cd,
780                                   "unsupported sector size %d.", sector_size);
781                         cd->capacity = 0;
782                 }
783
784                 cd->device->sector_size = sector_size;
785
786                 /*
787                  * Add this so that we have the ability to correctly gauge
788                  * what the device is capable of.
789                  */
790                 set_capacity(cd->disk, cd->capacity);
791         }
792
793         queue = cd->device->request_queue;
794         blk_queue_logical_block_size(queue, sector_size);
795
796         return;
797 }
798
799 static int get_capabilities(struct scsi_cd *cd)
800 {
801         unsigned char *buffer;
802         struct scsi_mode_data data;
803         struct scsi_sense_hdr sshdr;
804         unsigned int ms_len = 128;
805         int rc, n;
806
807         static const char *loadmech[] =
808         {
809                 "caddy",
810                 "tray",
811                 "pop-up",
812                 "",
813                 "changer",
814                 "cartridge changer",
815                 "",
816                 ""
817         };
818
819
820         /* allocate transfer buffer */
821         buffer = kmalloc(512, GFP_KERNEL);
822         if (!buffer) {
823                 sr_printk(KERN_ERR, cd, "out of memory.\n");
824                 return -ENOMEM;
825         }
826
827         /* eat unit attentions */
828         scsi_test_unit_ready(cd->device, SR_TIMEOUT, MAX_RETRIES, &sshdr);
829
830         /* ask for mode page 0x2a */
831         rc = scsi_mode_sense(cd->device, 0, 0x2a, 0, buffer, ms_len,
832                              SR_TIMEOUT, 3, &data, NULL);
833
834         if (rc < 0 || data.length > ms_len ||
835             data.header_length + data.block_descriptor_length > data.length) {
836                 /* failed, drive doesn't have capabilities mode page */
837                 cd->cdi.speed = 1;
838                 cd->cdi.mask |= (CDC_CD_R | CDC_CD_RW | CDC_DVD_R |
839                                  CDC_DVD | CDC_DVD_RAM |
840                                  CDC_SELECT_DISC | CDC_SELECT_SPEED |
841                                  CDC_MRW | CDC_MRW_W | CDC_RAM);
842                 kfree(buffer);
843                 sr_printk(KERN_INFO, cd, "scsi-1 drive");
844                 return 0;
845         }
846
847         n = data.header_length + data.block_descriptor_length;
848         cd->cdi.speed = get_unaligned_be16(&buffer[n + 8]) / 176;
849         cd->readcd_known = 1;
850         cd->readcd_cdda = buffer[n + 5] & 0x01;
851         /* print some capability bits */
852         sr_printk(KERN_INFO, cd,
853                   "scsi3-mmc drive: %dx/%dx %s%s%s%s%s%s\n",
854                   get_unaligned_be16(&buffer[n + 14]) / 176,
855                   cd->cdi.speed,
856                   buffer[n + 3] & 0x01 ? "writer " : "", /* CD Writer */
857                   buffer[n + 3] & 0x20 ? "dvd-ram " : "",
858                   buffer[n + 2] & 0x02 ? "cd/rw " : "", /* can read rewriteable */
859                   buffer[n + 4] & 0x20 ? "xa/form2 " : "",      /* can read xa/from2 */
860                   buffer[n + 5] & 0x01 ? "cdda " : "", /* can read audio data */
861                   loadmech[buffer[n + 6] >> 5]);
862         if ((buffer[n + 6] >> 5) == 0)
863                 /* caddy drives can't close tray... */
864                 cd->cdi.mask |= CDC_CLOSE_TRAY;
865         if ((buffer[n + 2] & 0x8) == 0)
866                 /* not a DVD drive */
867                 cd->cdi.mask |= CDC_DVD;
868         if ((buffer[n + 3] & 0x20) == 0)
869                 /* can't write DVD-RAM media */
870                 cd->cdi.mask |= CDC_DVD_RAM;
871         if ((buffer[n + 3] & 0x10) == 0)
872                 /* can't write DVD-R media */
873                 cd->cdi.mask |= CDC_DVD_R;
874         if ((buffer[n + 3] & 0x2) == 0)
875                 /* can't write CD-RW media */
876                 cd->cdi.mask |= CDC_CD_RW;
877         if ((buffer[n + 3] & 0x1) == 0)
878                 /* can't write CD-R media */
879                 cd->cdi.mask |= CDC_CD_R;
880         if ((buffer[n + 6] & 0x8) == 0)
881                 /* can't eject */
882                 cd->cdi.mask |= CDC_OPEN_TRAY;
883
884         if ((buffer[n + 6] >> 5) == mechtype_individual_changer ||
885             (buffer[n + 6] >> 5) == mechtype_cartridge_changer)
886                 cd->cdi.capacity =
887                     cdrom_number_of_slots(&cd->cdi);
888         if (cd->cdi.capacity <= 1)
889                 /* not a changer */
890                 cd->cdi.mask |= CDC_SELECT_DISC;
891         /*else    I don't think it can close its tray
892                 cd->cdi.mask |= CDC_CLOSE_TRAY; */
893
894         /*
895          * if DVD-RAM, MRW-W or CD-RW, we are randomly writable
896          */
897         if ((cd->cdi.mask & (CDC_DVD_RAM | CDC_MRW_W | CDC_RAM | CDC_CD_RW)) !=
898                         (CDC_DVD_RAM | CDC_MRW_W | CDC_RAM | CDC_CD_RW)) {
899                 cd->writeable = 1;
900         }
901
902         kfree(buffer);
903         return 0;
904 }
905
906 /*
907  * sr_packet() is the entry point for the generic commands generated
908  * by the Uniform CD-ROM layer.
909  */
910 static int sr_packet(struct cdrom_device_info *cdi,
911                 struct packet_command *cgc)
912 {
913         struct scsi_cd *cd = cdi->handle;
914         struct scsi_device *sdev = cd->device;
915
916         if (cgc->cmd[0] == GPCMD_READ_DISC_INFO && sdev->no_read_disc_info)
917                 return -EDRIVE_CANT_DO_THIS;
918
919         if (cgc->timeout <= 0)
920                 cgc->timeout = IOCTL_TIMEOUT;
921
922         sr_do_ioctl(cd, cgc);
923
924         return cgc->stat;
925 }
926
927 static int sr_read_cdda_bpc(struct cdrom_device_info *cdi, void __user *ubuf,
928                 u32 lba, u32 nr, u8 *last_sense)
929 {
930         struct gendisk *disk = cdi->disk;
931         u32 len = nr * CD_FRAMESIZE_RAW;
932         struct scsi_cmnd *scmd;
933         struct request *rq;
934         struct bio *bio;
935         int ret;
936
937         rq = scsi_alloc_request(disk->queue, REQ_OP_DRV_IN, 0);
938         if (IS_ERR(rq))
939                 return PTR_ERR(rq);
940         scmd = blk_mq_rq_to_pdu(rq);
941
942         ret = blk_rq_map_user(disk->queue, rq, NULL, ubuf, len, GFP_KERNEL);
943         if (ret)
944                 goto out_put_request;
945
946         scmd->cmnd[0] = GPCMD_READ_CD;
947         scmd->cmnd[1] = 1 << 2;
948         scmd->cmnd[2] = (lba >> 24) & 0xff;
949         scmd->cmnd[3] = (lba >> 16) & 0xff;
950         scmd->cmnd[4] = (lba >>  8) & 0xff;
951         scmd->cmnd[5] = lba & 0xff;
952         scmd->cmnd[6] = (nr >> 16) & 0xff;
953         scmd->cmnd[7] = (nr >>  8) & 0xff;
954         scmd->cmnd[8] = nr & 0xff;
955         scmd->cmnd[9] = 0xf8;
956         scmd->cmd_len = 12;
957         rq->timeout = 60 * HZ;
958         bio = rq->bio;
959
960         blk_execute_rq(rq, false);
961         if (scmd->result) {
962                 struct scsi_sense_hdr sshdr;
963
964                 scsi_normalize_sense(scmd->sense_buffer, scmd->sense_len,
965                                      &sshdr);
966                 *last_sense = sshdr.sense_key;
967                 ret = -EIO;
968         }
969
970         if (blk_rq_unmap_user(bio))
971                 ret = -EFAULT;
972 out_put_request:
973         blk_mq_free_request(rq);
974         return ret;
975 }
976
977 static int sr_remove(struct device *dev)
978 {
979         struct scsi_cd *cd = dev_get_drvdata(dev);
980
981         scsi_autopm_get_device(cd->device);
982
983         del_gendisk(cd->disk);
984         put_disk(cd->disk);
985
986         return 0;
987 }
988
989 static int __init init_sr(void)
990 {
991         int rc;
992
993         rc = register_blkdev(SCSI_CDROM_MAJOR, "sr");
994         if (rc)
995                 return rc;
996         rc = scsi_register_driver(&sr_template.gendrv);
997         if (rc)
998                 unregister_blkdev(SCSI_CDROM_MAJOR, "sr");
999
1000         return rc;
1001 }
1002
1003 static void __exit exit_sr(void)
1004 {
1005         scsi_unregister_driver(&sr_template.gendrv);
1006         unregister_blkdev(SCSI_CDROM_MAJOR, "sr");
1007 }
1008
1009 module_init(init_sr);
1010 module_exit(exit_sr);
1011 MODULE_LICENSE("GPL");