Lines Matching refs: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()
164 struct scsi_cd *cd = NULL; in scsi_cd_get() local
169 cd = scsi_cd(disk); in scsi_cd_get()
170 kref_get(&cd->kref); in scsi_cd_get()
171 if (scsi_device_get(cd->device)) { in scsi_cd_get()
172 kref_put(&cd->kref, sr_kref_release); in scsi_cd_get()
173 cd = NULL; in scsi_cd_get()
177 return cd; in scsi_cd_get()
180 static void scsi_cd_put(struct scsi_cd *cd) in scsi_cd_put() argument
182 struct scsi_device *sdev = cd->device; in scsi_cd_put()
185 kref_put(&cd->kref, sr_kref_release); in scsi_cd_put()
234 struct scsi_cd *cd = cdi->handle; in sr_check_events() local
244 events = sr_get_events(cd->device); in sr_check_events()
245 cd->get_event_changed |= events & DISK_EVENT_MEDIA_CHANGE; in sr_check_events()
253 if (cd->ignore_get_event) { in sr_check_events()
263 if (cd->device->changed) { in sr_check_events()
265 cd->device->changed = 0; in sr_check_events()
266 cd->tur_changed = true; in sr_check_events()
273 last_present = cd->media_present; in sr_check_events()
274 ret = scsi_test_unit_ready(cd->device, SR_TIMEOUT, MAX_RETRIES, &sshdr); in sr_check_events()
281 cd->media_present = scsi_status_is_good(ret) || in sr_check_events()
284 if (last_present != cd->media_present) in sr_check_events()
285 cd->device->changed = 1; in sr_check_events()
287 if (cd->device->changed) { in sr_check_events()
289 cd->device->changed = 0; in sr_check_events()
290 cd->tur_changed = true; in sr_check_events()
293 if (cd->ignore_get_event) in sr_check_events()
297 if (!cd->tur_changed) { in sr_check_events()
298 if (cd->get_event_changed) { in sr_check_events()
299 if (cd->tur_mismatch++ > 8) { in sr_check_events()
300 sr_printk(KERN_WARNING, cd, in sr_check_events()
302 cd->ignore_get_event = true; in sr_check_events()
305 cd->tur_mismatch = 0; in sr_check_events()
308 cd->tur_changed = false; in sr_check_events()
309 cd->get_event_changed = false; in sr_check_events()
327 struct scsi_cd *cd = scsi_cd(SCpnt->request->rq_disk); in sr_done() local
356 if (cd->device->sector_size == 2048) in sr_done()
371 if (error_sector < get_capacity(cd->disk) && in sr_done()
372 cd->capacity - error_sector < 4 * 75) in sr_done()
373 set_capacity(cd->disk, error_sector); in sr_done()
391 struct scsi_cd *cd; in sr_init_command() local
398 cd = scsi_cd(rq->rq_disk); in sr_init_command()
407 if (!cd->device || !scsi_device_online(cd->device)) { in sr_init_command()
415 if (cd->device->changed) { in sr_init_command()
427 s_size = cd->device->sector_size; in sr_init_command()
430 sr_set_blocklength(cd, 2048); in sr_init_command()
443 if (!cd->writeable) in sr_init_command()
446 cd->cdi.media_written = 1; in sr_init_command()
511 SCpnt->transfersize = cd->device->sector_size; in sr_init_command()
526 struct scsi_cd *cd; in sr_block_open() local
530 cd = scsi_cd_get(bdev->bd_disk); in sr_block_open()
531 if (!cd) in sr_block_open()
534 sdev = cd->device; in sr_block_open()
539 ret = cdrom_open(&cd->cdi, bdev, mode); in sr_block_open()
544 scsi_cd_put(cd); in sr_block_open()
552 struct scsi_cd *cd = scsi_cd(disk); in sr_block_release() local
554 cdrom_release(&cd->cdi, mode); in sr_block_release()
555 scsi_cd_put(cd); in sr_block_release()
562 struct scsi_cd *cd = scsi_cd(bdev->bd_disk); in sr_block_ioctl() local
563 struct scsi_device *sdev = cd->device; in sr_block_ioctl()
587 ret = cdrom_ioctl(&cd->cdi, bdev, mode, cmd, arg); in sr_block_ioctl()
605 struct scsi_cd *cd; in sr_block_check_events() local
607 cd = scsi_cd_get(disk); in sr_block_check_events()
608 if (!cd) in sr_block_check_events()
611 if (!atomic_read(&cd->device->disk_events_disable_depth)) in sr_block_check_events()
612 ret = cdrom_check_events(&cd->cdi, clearing); in sr_block_check_events()
614 scsi_cd_put(cd); in sr_block_check_events()
621 struct scsi_cd *cd; in sr_block_revalidate_disk() local
623 cd = scsi_cd_get(disk); in sr_block_revalidate_disk()
624 if (!cd) in sr_block_revalidate_disk()
628 if (scsi_test_unit_ready(cd->device, SR_TIMEOUT, MAX_RETRIES, &sshdr)) in sr_block_revalidate_disk()
631 sr_cd_check(&cd->cdi); in sr_block_revalidate_disk()
632 get_sectorsize(cd); in sr_block_revalidate_disk()
634 scsi_cd_put(cd); in sr_block_revalidate_disk()
654 struct scsi_cd *cd = cdi->handle; in sr_open() local
655 struct scsi_device *sdev = cd->device; in sr_open()
674 struct scsi_cd *cd = cdi->handle; in sr_release() local
676 if (cd->device->sector_size > 2048) in sr_release()
677 sr_set_blocklength(cd, 2048); in sr_release()
685 struct scsi_cd *cd; in sr_probe() local
694 cd = kzalloc(sizeof(*cd), GFP_KERNEL); in sr_probe()
695 if (!cd) in sr_probe()
698 kref_init(&cd->kref); in sr_probe()
724 cd->device = sdev; in sr_probe()
725 cd->disk = disk; in sr_probe()
726 cd->driver = &sr_template; in sr_probe()
727 cd->disk = disk; in sr_probe()
728 cd->capacity = 0x1fffff; in sr_probe()
729 cd->device->changed = 1; /* force recheck CD type */ in sr_probe()
730 cd->media_present = 1; in sr_probe()
731 cd->use = 1; in sr_probe()
732 cd->readcd_known = 0; in sr_probe()
733 cd->readcd_cdda = 0; in sr_probe()
735 cd->cdi.ops = &sr_dops; in sr_probe()
736 cd->cdi.handle = cd; in sr_probe()
737 cd->cdi.mask = 0; in sr_probe()
738 cd->cdi.capacity = 1; in sr_probe()
739 sprintf(cd->cdi.name, "sr%d", minor); in sr_probe()
744 get_capabilities(cd); in sr_probe()
745 sr_vendor_init(cd); in sr_probe()
747 set_capacity(disk, cd->capacity); in sr_probe()
748 disk->private_data = &cd->driver; in sr_probe()
750 cd->cdi.disk = disk; in sr_probe()
752 if (register_cdrom(&cd->cdi)) in sr_probe()
761 dev_set_drvdata(dev, cd); in sr_probe()
766 "Attached scsi CD-ROM %s\n", cd->cdi.name); in sr_probe()
767 scsi_autopm_put_device(cd->device); in sr_probe()
774 kfree(cd); in sr_probe()
781 static void get_sectorsize(struct scsi_cd *cd) in get_sectorsize() argument
795 the_result = scsi_execute_req(cd->device, cmd, DMA_FROM_DEVICE, in get_sectorsize()
805 cd->capacity = 0x1fffff; in get_sectorsize()
810 cd->capacity = 1 + ((buffer[0] << 24) | (buffer[1] << 16) | in get_sectorsize()
819 if (!cdrom_get_last_written(&cd->cdi, &last_written)) in get_sectorsize()
820 cd->capacity = max_t(long, cd->capacity, last_written); in get_sectorsize()
837 cd->capacity *= 4; in get_sectorsize()
842 sr_printk(KERN_INFO, cd, in get_sectorsize()
844 cd->capacity = 0; in get_sectorsize()
847 cd->device->sector_size = sector_size; in get_sectorsize()
853 set_capacity(cd->disk, cd->capacity); in get_sectorsize()
856 queue = cd->device->request_queue; in get_sectorsize()
862 static void get_capabilities(struct scsi_cd *cd) in get_capabilities() argument
886 sr_printk(KERN_ERR, cd, "out of memory.\n"); in get_capabilities()
891 scsi_test_unit_ready(cd->device, SR_TIMEOUT, MAX_RETRIES, &sshdr); in get_capabilities()
894 rc = scsi_mode_sense(cd->device, 0, 0x2a, buffer, ms_len, in get_capabilities()
900 cd->cdi.speed = 1; in get_capabilities()
901 cd->cdi.mask |= (CDC_CD_R | CDC_CD_RW | CDC_DVD_R | in get_capabilities()
906 sr_printk(KERN_INFO, cd, "scsi-1 drive"); in get_capabilities()
911 cd->cdi.speed = ((buffer[n + 8] << 8) + buffer[n + 9]) / 176; in get_capabilities()
912 cd->readcd_known = 1; in get_capabilities()
913 cd->readcd_cdda = buffer[n + 5] & 0x01; in get_capabilities()
915 sr_printk(KERN_INFO, cd, in get_capabilities()
918 cd->cdi.speed, in get_capabilities()
927 cd->cdi.mask |= CDC_CLOSE_TRAY; in get_capabilities()
930 cd->cdi.mask |= CDC_DVD; in get_capabilities()
933 cd->cdi.mask |= CDC_DVD_RAM; in get_capabilities()
936 cd->cdi.mask |= CDC_DVD_R; in get_capabilities()
939 cd->cdi.mask |= CDC_CD_RW; in get_capabilities()
942 cd->cdi.mask |= CDC_CD_R; in get_capabilities()
945 cd->cdi.mask |= CDC_OPEN_TRAY; in get_capabilities()
949 cd->cdi.capacity = in get_capabilities()
950 cdrom_number_of_slots(&cd->cdi); in get_capabilities()
951 if (cd->cdi.capacity <= 1) in get_capabilities()
953 cd->cdi.mask |= CDC_SELECT_DISC; in get_capabilities()
960 if ((cd->cdi.mask & (CDC_DVD_RAM | CDC_MRW_W | CDC_RAM | CDC_CD_RW)) != in get_capabilities()
962 cd->writeable = 1; in get_capabilities()
975 struct scsi_cd *cd = cdi->handle; in sr_packet() local
976 struct scsi_device *sdev = cd->device; in sr_packet()
984 sr_do_ioctl(cd, cgc); in sr_packet()
1000 struct scsi_cd *cd = container_of(kref, struct scsi_cd, kref); in sr_kref_release() local
1001 struct gendisk *disk = cd->disk; in sr_kref_release()
1007 unregister_cdrom(&cd->cdi); in sr_kref_release()
1013 kfree(cd); in sr_kref_release()
1018 struct scsi_cd *cd = dev_get_drvdata(dev); in sr_remove() local
1020 scsi_autopm_get_device(cd->device); in sr_remove()
1022 del_gendisk(cd->disk); in sr_remove()
1026 kref_put(&cd->kref, sr_kref_release); in sr_remove()