Lines Matching refs:cd
145 struct scsi_cd *cd = dev_get_drvdata(dev); in sr_runtime_suspend() local
147 if (!cd) /* E.g.: runtime suspend following sr_remove() */ in sr_runtime_suspend()
150 if (cd->media_present) in sr_runtime_suspend()
162 struct scsi_cd *cd = NULL; in scsi_cd_get() local
167 cd = scsi_cd(disk); in scsi_cd_get()
168 kref_get(&cd->kref); in scsi_cd_get()
169 if (scsi_device_get(cd->device)) { in scsi_cd_get()
170 kref_put(&cd->kref, sr_kref_release); in scsi_cd_get()
171 cd = NULL; in scsi_cd_get()
175 return cd; in scsi_cd_get()
178 static void scsi_cd_put(struct scsi_cd *cd) in scsi_cd_put() argument
180 struct scsi_device *sdev = cd->device; in scsi_cd_put()
183 kref_put(&cd->kref, sr_kref_release); in scsi_cd_put()
232 struct scsi_cd *cd = cdi->handle; in sr_check_events() local
242 events = sr_get_events(cd->device); in sr_check_events()
243 cd->get_event_changed |= events & DISK_EVENT_MEDIA_CHANGE; in sr_check_events()
251 if (cd->ignore_get_event) { 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()
271 last_present = cd->media_present; in sr_check_events()
272 ret = scsi_test_unit_ready(cd->device, SR_TIMEOUT, MAX_RETRIES, &sshdr); in sr_check_events()
279 cd->media_present = scsi_status_is_good(ret) || in sr_check_events()
282 if (last_present != cd->media_present) in sr_check_events()
283 cd->device->changed = 1; in sr_check_events()
285 if (cd->device->changed) { in sr_check_events()
287 cd->device->changed = 0; in sr_check_events()
288 cd->tur_changed = true; in sr_check_events()
291 if (cd->ignore_get_event) in sr_check_events()
295 if (!cd->tur_changed) { in sr_check_events()
296 if (cd->get_event_changed) { in sr_check_events()
297 if (cd->tur_mismatch++ > 8) { in sr_check_events()
298 sr_printk(KERN_WARNING, cd, in sr_check_events()
300 cd->ignore_get_event = true; in sr_check_events()
303 cd->tur_mismatch = 0; in sr_check_events()
306 cd->tur_changed = false; in sr_check_events()
307 cd->get_event_changed = false; in sr_check_events()
325 struct scsi_cd *cd = scsi_cd(SCpnt->request->rq_disk); in sr_done() local
354 if (cd->device->sector_size == 2048) in sr_done()
369 if (error_sector < get_capacity(cd->disk) && in sr_done()
370 cd->capacity - error_sector < 4 * 75) in sr_done()
371 set_capacity(cd->disk, error_sector); in sr_done()
389 struct scsi_cd *cd; in sr_init_command() local
397 cd = scsi_cd(rq->rq_disk); in sr_init_command()
406 if (!cd->device || !scsi_device_online(cd->device)) { in sr_init_command()
414 if (cd->device->changed) { in sr_init_command()
426 s_size = cd->device->sector_size; in sr_init_command()
429 sr_set_blocklength(cd, 2048); in sr_init_command()
441 if (!cd->writeable) in sr_init_command()
444 cd->cdi.media_written = 1; in sr_init_command()
507 SCpnt->transfersize = cd->device->sector_size; in sr_init_command()
522 struct scsi_cd *cd; in sr_block_open() local
526 cd = scsi_cd_get(bdev->bd_disk); in sr_block_open()
527 if (cd) { in sr_block_open()
528 ret = cdrom_open(&cd->cdi, bdev, mode); in sr_block_open()
530 scsi_cd_put(cd); in sr_block_open()
538 struct scsi_cd *cd = scsi_cd(disk); in sr_block_release() local
540 cdrom_release(&cd->cdi, mode); in sr_block_release()
541 scsi_cd_put(cd); in sr_block_release()
548 struct scsi_cd *cd = scsi_cd(bdev->bd_disk); in sr_block_ioctl() local
549 struct scsi_device *sdev = cd->device; in sr_block_ioctl()
571 ret = cdrom_ioctl(&cd->cdi, bdev, mode, cmd, arg); in sr_block_ioctl()
585 struct scsi_cd *cd = scsi_cd(disk); in sr_block_check_events() local
587 if (atomic_read(&cd->device->disk_events_disable_depth)) in sr_block_check_events()
590 return cdrom_check_events(&cd->cdi, clearing); in sr_block_check_events()
595 struct scsi_cd *cd = scsi_cd(disk); in sr_block_revalidate_disk() local
599 if (scsi_test_unit_ready(cd->device, SR_TIMEOUT, MAX_RETRIES, &sshdr)) in sr_block_revalidate_disk()
602 sr_cd_check(&cd->cdi); in sr_block_revalidate_disk()
603 get_sectorsize(cd); in sr_block_revalidate_disk()
624 struct scsi_cd *cd = cdi->handle; in sr_open() local
625 struct scsi_device *sdev = cd->device; in sr_open()
644 struct scsi_cd *cd = cdi->handle; in sr_release() local
646 if (cd->device->sector_size > 2048) in sr_release()
647 sr_set_blocklength(cd, 2048); in sr_release()
655 struct scsi_cd *cd; in sr_probe() local
664 cd = kzalloc(sizeof(*cd), GFP_KERNEL); in sr_probe()
665 if (!cd) in sr_probe()
668 kref_init(&cd->kref); in sr_probe()
693 cd->device = sdev; in sr_probe()
694 cd->disk = disk; in sr_probe()
695 cd->driver = &sr_template; in sr_probe()
696 cd->disk = disk; in sr_probe()
697 cd->capacity = 0x1fffff; in sr_probe()
698 cd->device->changed = 1; /* force recheck CD type */ in sr_probe()
699 cd->media_present = 1; in sr_probe()
700 cd->use = 1; in sr_probe()
701 cd->readcd_known = 0; in sr_probe()
702 cd->readcd_cdda = 0; in sr_probe()
704 cd->cdi.ops = &sr_dops; in sr_probe()
705 cd->cdi.handle = cd; in sr_probe()
706 cd->cdi.mask = 0; in sr_probe()
707 cd->cdi.capacity = 1; in sr_probe()
708 sprintf(cd->cdi.name, "sr%d", minor); in sr_probe()
713 get_capabilities(cd); in sr_probe()
714 sr_vendor_init(cd); in sr_probe()
717 set_capacity(disk, cd->capacity); in sr_probe()
718 disk->private_data = &cd->driver; in sr_probe()
720 cd->cdi.disk = disk; in sr_probe()
722 if (register_cdrom(&cd->cdi)) in sr_probe()
731 dev_set_drvdata(dev, cd); in sr_probe()
736 "Attached scsi CD-ROM %s\n", cd->cdi.name); in sr_probe()
737 scsi_autopm_put_device(cd->device); in sr_probe()
744 kfree(cd); in sr_probe()
751 static void get_sectorsize(struct scsi_cd *cd) in get_sectorsize() argument
765 the_result = scsi_execute_req(cd->device, cmd, DMA_FROM_DEVICE, in get_sectorsize()
775 cd->capacity = 0x1fffff; in get_sectorsize()
780 cd->capacity = 1 + ((buffer[0] << 24) | (buffer[1] << 16) | in get_sectorsize()
789 if (!cdrom_get_last_written(&cd->cdi, &last_written)) in get_sectorsize()
790 cd->capacity = max_t(long, cd->capacity, last_written); in get_sectorsize()
807 cd->capacity *= 4; in get_sectorsize()
812 sr_printk(KERN_INFO, cd, in get_sectorsize()
814 cd->capacity = 0; in get_sectorsize()
817 cd->device->sector_size = sector_size; in get_sectorsize()
823 set_capacity(cd->disk, cd->capacity); in get_sectorsize()
826 queue = cd->device->request_queue; in get_sectorsize()
832 static void get_capabilities(struct scsi_cd *cd) in get_capabilities() argument
855 sr_printk(KERN_ERR, cd, "out of memory.\n"); in get_capabilities()
860 scsi_test_unit_ready(cd->device, SR_TIMEOUT, MAX_RETRIES, &sshdr); in get_capabilities()
863 rc = scsi_mode_sense(cd->device, 0, 0x2a, buffer, 128, in get_capabilities()
868 cd->cdi.speed = 1; in get_capabilities()
869 cd->cdi.mask |= (CDC_CD_R | CDC_CD_RW | CDC_DVD_R | in get_capabilities()
874 sr_printk(KERN_INFO, cd, "scsi-1 drive"); in get_capabilities()
879 cd->cdi.speed = ((buffer[n + 8] << 8) + buffer[n + 9]) / 176; in get_capabilities()
880 cd->readcd_known = 1; in get_capabilities()
881 cd->readcd_cdda = buffer[n + 5] & 0x01; in get_capabilities()
883 sr_printk(KERN_INFO, cd, in get_capabilities()
886 cd->cdi.speed, in get_capabilities()
895 cd->cdi.mask |= CDC_CLOSE_TRAY; in get_capabilities()
898 cd->cdi.mask |= CDC_DVD; in get_capabilities()
901 cd->cdi.mask |= CDC_DVD_RAM; in get_capabilities()
904 cd->cdi.mask |= CDC_DVD_R; in get_capabilities()
907 cd->cdi.mask |= CDC_CD_RW; in get_capabilities()
910 cd->cdi.mask |= CDC_CD_R; in get_capabilities()
913 cd->cdi.mask |= CDC_OPEN_TRAY; in get_capabilities()
917 cd->cdi.capacity = in get_capabilities()
918 cdrom_number_of_slots(&cd->cdi); in get_capabilities()
919 if (cd->cdi.capacity <= 1) in get_capabilities()
921 cd->cdi.mask |= CDC_SELECT_DISC; in get_capabilities()
928 if ((cd->cdi.mask & (CDC_DVD_RAM | CDC_MRW_W | CDC_RAM | CDC_CD_RW)) != in get_capabilities()
930 cd->writeable = 1; in get_capabilities()
943 struct scsi_cd *cd = cdi->handle; in sr_packet() local
944 struct scsi_device *sdev = cd->device; in sr_packet()
952 sr_do_ioctl(cd, cgc); in sr_packet()
968 struct scsi_cd *cd = container_of(kref, struct scsi_cd, kref); in sr_kref_release() local
969 struct gendisk *disk = cd->disk; in sr_kref_release()
975 unregister_cdrom(&cd->cdi); in sr_kref_release()
981 kfree(cd); in sr_kref_release()
986 struct scsi_cd *cd = dev_get_drvdata(dev); in sr_remove() local
988 scsi_autopm_get_device(cd->device); in sr_remove()
990 del_gendisk(cd->disk); in sr_remove()
994 kref_put(&cd->kref, sr_kref_release); in sr_remove()