Lines Matching full:cd
147 struct scsi_cd *cd = dev_get_drvdata(dev); in sr_runtime_suspend() local
149 if (!cd) /* E.g.: runtime suspend following sr_remove() */ in sr_runtime_suspend()
152 if (cd->media_present) in sr_runtime_suspend()
208 struct scsi_cd *cd = cdi->handle; in sr_check_events() local
218 events = sr_get_events(cd->device); in sr_check_events()
219 cd->get_event_changed |= events & DISK_EVENT_MEDIA_CHANGE; in sr_check_events()
227 if (cd->ignore_get_event) { in sr_check_events()
237 if (cd->device->changed) { in sr_check_events()
239 cd->device->changed = 0; in sr_check_events()
240 cd->tur_changed = true; in sr_check_events()
247 last_present = cd->media_present; in sr_check_events()
248 ret = scsi_test_unit_ready(cd->device, SR_TIMEOUT, MAX_RETRIES, &sshdr); in sr_check_events()
255 cd->media_present = scsi_status_is_good(ret) || in sr_check_events()
258 if (last_present != cd->media_present) in sr_check_events()
259 cd->device->changed = 1; in sr_check_events()
261 if (cd->device->changed) { in sr_check_events()
263 cd->device->changed = 0; in sr_check_events()
264 cd->tur_changed = true; in sr_check_events()
267 if (cd->ignore_get_event) in sr_check_events()
271 if (!cd->tur_changed) { in sr_check_events()
272 if (cd->get_event_changed) { in sr_check_events()
273 if (cd->tur_mismatch++ > 8) { in sr_check_events()
274 sr_printk(KERN_WARNING, cd, in sr_check_events()
276 cd->ignore_get_event = true; in sr_check_events()
279 cd->tur_mismatch = 0; in sr_check_events()
282 cd->tur_changed = false; in sr_check_events()
283 cd->get_event_changed = false; in sr_check_events()
302 struct scsi_cd *cd = scsi_cd(rq->q->disk); in sr_done() local
328 if (cd->device->sector_size == 2048) in sr_done()
342 if (error_sector < get_capacity(cd->disk) && in sr_done()
343 cd->capacity - error_sector < 4 * 75) in sr_done()
344 set_capacity(cd->disk, error_sector); in sr_done()
362 struct scsi_cd *cd; in sr_init_command() local
369 cd = scsi_cd(rq->q->disk); in sr_init_command()
374 if (!cd->device || !scsi_device_online(cd->device)) { in sr_init_command()
382 if (cd->device->changed) { in sr_init_command()
390 s_size = cd->device->sector_size; in sr_init_command()
398 if (!cd->writeable) in sr_init_command()
401 cd->cdi.media_written = 1; in sr_init_command()
462 SCpnt->transfersize = cd->device->sector_size; in sr_init_command()
476 static int sr_revalidate_disk(struct scsi_cd *cd) in sr_revalidate_disk() argument
478 struct request_queue *q = cd->device->request_queue; in sr_revalidate_disk()
484 if (scsi_test_unit_ready(cd->device, SR_TIMEOUT, MAX_RETRIES, &sshdr)) in sr_revalidate_disk()
486 sr_cd_check(&cd->cdi); in sr_revalidate_disk()
487 sector_size = get_sectorsize(cd); in sr_revalidate_disk()
497 struct scsi_cd *cd = scsi_cd(disk); in sr_block_open() local
498 struct scsi_device *sdev = cd->device; in sr_block_open()
501 if (scsi_device_get(cd->device)) in sr_block_open()
506 ret = sr_revalidate_disk(cd); in sr_block_open()
511 mutex_lock(&cd->lock); in sr_block_open()
512 ret = cdrom_open(&cd->cdi, mode); in sr_block_open()
513 mutex_unlock(&cd->lock); in sr_block_open()
517 scsi_device_put(cd->device); in sr_block_open()
523 struct scsi_cd *cd = scsi_cd(disk); in sr_block_release() local
525 mutex_lock(&cd->lock); in sr_block_release()
526 cdrom_release(&cd->cdi); in sr_block_release()
527 mutex_unlock(&cd->lock); in sr_block_release()
529 scsi_device_put(cd->device); in sr_block_release()
535 struct scsi_cd *cd = scsi_cd(bdev->bd_disk); in sr_block_ioctl() local
536 struct scsi_device *sdev = cd->device; in sr_block_ioctl()
543 mutex_lock(&cd->lock); in sr_block_ioctl()
553 ret = cdrom_ioctl(&cd->cdi, bdev, cmd, arg); in sr_block_ioctl()
562 mutex_unlock(&cd->lock); in sr_block_ioctl()
569 struct scsi_cd *cd = disk->private_data; in sr_block_check_events() local
571 if (atomic_read(&cd->device->disk_events_disable_depth)) in sr_block_check_events()
573 return cdrom_check_events(&cd->cdi, clearing); in sr_block_check_events()
578 struct scsi_cd *cd = disk->private_data; in sr_free_disk() local
584 unregister_cdrom(&cd->cdi); in sr_free_disk()
585 mutex_destroy(&cd->lock); in sr_free_disk()
586 kfree(cd); in sr_free_disk()
602 struct scsi_cd *cd = cdi->handle; in sr_open() local
603 struct scsi_device *sdev = cd->device; in sr_open()
623 struct scsi_cd *cd; in sr_probe() local
632 cd = kzalloc(sizeof(*cd), GFP_KERNEL); in sr_probe()
633 if (!cd) in sr_probe()
640 mutex_init(&cd->lock); in sr_probe()
664 cd->device = sdev; in sr_probe()
665 cd->disk = disk; in sr_probe()
666 cd->capacity = 0x1fffff; in sr_probe()
667 cd->device->changed = 1; /* force recheck CD type */ in sr_probe()
668 cd->media_present = 1; in sr_probe()
669 cd->use = 1; in sr_probe()
670 cd->readcd_known = 0; in sr_probe()
671 cd->readcd_cdda = 0; in sr_probe()
673 cd->cdi.ops = &sr_dops; in sr_probe()
674 cd->cdi.handle = cd; in sr_probe()
675 cd->cdi.mask = 0; in sr_probe()
676 cd->cdi.capacity = 1; in sr_probe()
677 sprintf(cd->cdi.name, "sr%d", minor); in sr_probe()
682 if (get_capabilities(cd)) in sr_probe()
684 sr_vendor_init(cd); in sr_probe()
686 set_capacity(disk, cd->capacity); in sr_probe()
687 disk->private_data = cd; in sr_probe()
689 if (register_cdrom(disk, &cd->cdi)) in sr_probe()
698 dev_set_drvdata(dev, cd); in sr_probe()
699 error = sr_revalidate_disk(cd); in sr_probe()
708 "Attached scsi CD-ROM %s\n", cd->cdi.name); in sr_probe()
709 scsi_autopm_put_device(cd->device); in sr_probe()
714 unregister_cdrom(&cd->cdi); in sr_probe()
721 mutex_destroy(&cd->lock); in sr_probe()
723 kfree(cd); in sr_probe()
730 static int get_sectorsize(struct scsi_cd *cd) in get_sectorsize() argument
751 err = scsi_execute_cmd(cd->device, cmd, REQ_OP_DRV_IN, buffer, in get_sectorsize()
755 cd->capacity = 0x1fffff; in get_sectorsize()
760 cd->capacity = 1 + get_unaligned_be32(&buffer[0]); in get_sectorsize()
768 if (!cdrom_get_last_written(&cd->cdi, &last_written)) in get_sectorsize()
769 cd->capacity = max_t(long, cd->capacity, last_written); in get_sectorsize()
774 * HP 4020i CD-Recorder reports 2340 byte sectors in get_sectorsize()
775 * Philips CD-Writers report 2352 byte sectors in get_sectorsize()
785 cd->capacity *= 4; in get_sectorsize()
790 sr_printk(KERN_INFO, cd, in get_sectorsize()
792 cd->capacity = 0; in get_sectorsize()
795 cd->device->sector_size = sector_size; in get_sectorsize()
801 set_capacity(cd->disk, cd->capacity); in get_sectorsize()
807 static int get_capabilities(struct scsi_cd *cd) in get_capabilities() argument
831 sr_printk(KERN_ERR, cd, "out of memory.\n"); in get_capabilities()
836 scsi_test_unit_ready(cd->device, SR_TIMEOUT, MAX_RETRIES, &sshdr); in get_capabilities()
839 rc = scsi_mode_sense(cd->device, 0, 0x2a, 0, buffer, ms_len, in get_capabilities()
845 cd->cdi.speed = 1; in get_capabilities()
846 cd->cdi.mask |= (CDC_CD_R | CDC_CD_RW | CDC_DVD_R | in get_capabilities()
851 sr_printk(KERN_INFO, cd, "scsi-1 drive"); in get_capabilities()
856 cd->cdi.speed = get_unaligned_be16(&buffer[n + 8]) / 176; in get_capabilities()
857 cd->readcd_known = 1; in get_capabilities()
858 cd->readcd_cdda = buffer[n + 5] & 0x01; in get_capabilities()
860 sr_printk(KERN_INFO, cd, in get_capabilities()
863 cd->cdi.speed, in get_capabilities()
864 buffer[n + 3] & 0x01 ? "writer " : "", /* CD Writer */ in get_capabilities()
866 buffer[n + 2] & 0x02 ? "cd/rw " : "", /* can read rewriteable */ in get_capabilities()
872 cd->cdi.mask |= CDC_CLOSE_TRAY; in get_capabilities()
875 cd->cdi.mask |= CDC_DVD; in get_capabilities()
878 cd->cdi.mask |= CDC_DVD_RAM; in get_capabilities()
881 cd->cdi.mask |= CDC_DVD_R; in get_capabilities()
883 /* can't write CD-RW media */ in get_capabilities()
884 cd->cdi.mask |= CDC_CD_RW; in get_capabilities()
886 /* can't write CD-R media */ in get_capabilities()
887 cd->cdi.mask |= CDC_CD_R; in get_capabilities()
890 cd->cdi.mask |= CDC_OPEN_TRAY; in get_capabilities()
894 cd->cdi.capacity = in get_capabilities()
895 cdrom_number_of_slots(&cd->cdi); in get_capabilities()
896 if (cd->cdi.capacity <= 1) in get_capabilities()
898 cd->cdi.mask |= CDC_SELECT_DISC; in get_capabilities()
900 cd->cdi.mask |= CDC_CLOSE_TRAY; */ in get_capabilities()
903 * if DVD-RAM, MRW-W or CD-RW, we are randomly writable in get_capabilities()
905 if ((cd->cdi.mask & (CDC_DVD_RAM | CDC_MRW_W | CDC_RAM | CDC_CD_RW)) != in get_capabilities()
907 cd->writeable = 1; in get_capabilities()
916 * by the Uniform CD-ROM layer.
921 struct scsi_cd *cd = cdi->handle; in sr_packet() local
922 struct scsi_device *sdev = cd->device; in sr_packet()
930 sr_do_ioctl(cd, cgc); in sr_packet()
987 struct scsi_cd *cd = dev_get_drvdata(dev); in sr_remove() local
989 scsi_autopm_get_device(cd->device); in sr_remove()
991 del_gendisk(cd->disk); in sr_remove()
992 put_disk(cd->disk); in sr_remove()