Lines Matching refs:cdi
335 #define CDROM_CAN(type) (cdi->ops->capability & ~cdi->mask & (type))
338 #define CHECKAUDIO if ((ret=check_for_audio_disc(cdi, cdo))) return ret
347 static int open_for_data(struct cdrom_device_info * cdi);
348 static int check_for_audio_disc(struct cdrom_device_info * cdi,
352 static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd,
359 static int cdrom_mrw_exit(struct cdrom_device_info *cdi);
361 static int cdrom_get_disc_info(struct cdrom_device_info *cdi, disc_information *di);
367 static int cdrom_dummy_generic_packet(struct cdrom_device_info *cdi, in cdrom_dummy_generic_packet() argument
387 int register_cdrom(struct cdrom_device_info *cdi) in register_cdrom() argument
390 struct cdrom_device_ops *cdo = cdi->ops; in register_cdrom()
412 cdi->mc_flags = 0; in register_cdrom()
414 cdi->options = CDO_USE_FFLAGS; in register_cdrom()
417 cdi->options |= (int) CDO_AUTO_CLOSE; in register_cdrom()
419 cdi->options |= (int) CDO_AUTO_EJECT; in register_cdrom()
421 cdi->options |= (int) CDO_LOCK; in register_cdrom()
423 cdi->options |= (int) CDO_CHECK_TYPE; in register_cdrom()
426 cdi->exit = cdrom_mrw_exit; in register_cdrom()
428 if (cdi->disk) in register_cdrom()
429 cdi->cdda_method = CDDA_BPC_FULL; in register_cdrom()
431 cdi->cdda_method = CDDA_OLD; in register_cdrom()
436 cdinfo(CD_REG_UNREG, "drive \"/dev/%s\" registered\n", cdi->name); in register_cdrom()
438 list_add(&cdi->list, &cdrom_list); in register_cdrom()
444 void unregister_cdrom(struct cdrom_device_info *cdi) in unregister_cdrom() argument
449 list_del(&cdi->list); in unregister_cdrom()
452 if (cdi->exit) in unregister_cdrom()
453 cdi->exit(cdi); in unregister_cdrom()
455 cdi->ops->n_minors--; in unregister_cdrom()
456 cdinfo(CD_REG_UNREG, "drive \"/dev/%s\" unregistered\n", cdi->name); in unregister_cdrom()
459 int cdrom_get_media_event(struct cdrom_device_info *cdi, in cdrom_get_media_event() argument
473 if (cdi->ops->generic_packet(cdi, &cgc)) in cdrom_get_media_event()
490 static int cdrom_mrw_probe_pc(struct cdrom_device_info *cdi) in cdrom_mrw_probe_pc() argument
500 if (!cdrom_mode_sense(cdi, &cgc, MRW_MODE_PC, 0)) { in cdrom_mrw_probe_pc()
501 cdi->mrw_mode_page = MRW_MODE_PC; in cdrom_mrw_probe_pc()
503 } else if (!cdrom_mode_sense(cdi, &cgc, MRW_MODE_PC_PRE1, 0)) { in cdrom_mrw_probe_pc()
504 cdi->mrw_mode_page = MRW_MODE_PC_PRE1; in cdrom_mrw_probe_pc()
511 static int cdrom_is_mrw(struct cdrom_device_info *cdi, int *write) in cdrom_is_mrw() argument
527 if ((ret = cdi->ops->generic_packet(cdi, &cgc))) in cdrom_is_mrw()
535 if ((ret = cdrom_mrw_probe_pc(cdi))) { in cdrom_is_mrw()
543 static int cdrom_mrw_bgformat(struct cdrom_device_info *cdi, int cont) in cdrom_mrw_bgformat() argument
577 ret = cdi->ops->generic_packet(cdi, &cgc); in cdrom_mrw_bgformat()
584 static int cdrom_mrw_bgformat_susp(struct cdrom_device_info *cdi, int immed) in cdrom_mrw_bgformat_susp() argument
599 return cdi->ops->generic_packet(cdi, &cgc); in cdrom_mrw_bgformat_susp()
602 static int cdrom_flush_cache(struct cdrom_device_info *cdi) in cdrom_flush_cache() argument
611 return cdi->ops->generic_packet(cdi, &cgc); in cdrom_flush_cache()
614 static int cdrom_mrw_exit(struct cdrom_device_info *cdi) in cdrom_mrw_exit() argument
619 ret = cdrom_get_disc_info(cdi, &di); in cdrom_mrw_exit()
627 ret = cdrom_mrw_bgformat_susp(cdi, 0); in cdrom_mrw_exit()
630 if (!ret && cdi->media_written) in cdrom_mrw_exit()
631 ret = cdrom_flush_cache(cdi); in cdrom_mrw_exit()
636 static int cdrom_mrw_set_lba_space(struct cdrom_device_info *cdi, int space) in cdrom_mrw_set_lba_space() argument
648 if ((ret = cdrom_mode_sense(cdi, &cgc, cdi->mrw_mode_page, 0))) in cdrom_mrw_set_lba_space()
658 if ((ret = cdrom_mode_select(cdi, &cgc))) in cdrom_mrw_set_lba_space()
661 …printk(KERN_INFO "cdrom: %s: mrw address space %s selected\n", cdi->name, mrw_address_space[space]… in cdrom_mrw_set_lba_space()
665 static int cdrom_get_random_writable(struct cdrom_device_info *cdi, in cdrom_get_random_writable() argument
679 if ((ret = cdi->ops->generic_packet(cdi, &cgc))) in cdrom_get_random_writable()
686 static int cdrom_has_defect_mgt(struct cdrom_device_info *cdi) in cdrom_has_defect_mgt() argument
700 if ((ret = cdi->ops->generic_packet(cdi, &cgc))) in cdrom_has_defect_mgt()
711 static int cdrom_is_random_writable(struct cdrom_device_info *cdi, int *write) in cdrom_is_random_writable() argument
718 if ((ret = cdrom_get_random_writable(cdi, &rfd))) in cdrom_is_random_writable()
727 static int cdrom_media_erasable(struct cdrom_device_info *cdi) in cdrom_media_erasable() argument
732 ret = cdrom_get_disc_info(cdi, &di); in cdrom_media_erasable()
742 static int cdrom_dvdram_open_write(struct cdrom_device_info *cdi) in cdrom_dvdram_open_write() argument
744 int ret = cdrom_media_erasable(cdi); in cdrom_dvdram_open_write()
756 static int cdrom_mrw_open_write(struct cdrom_device_info *cdi) in cdrom_mrw_open_write() argument
764 if (cdrom_mrw_set_lba_space(cdi, MRW_LBA_DMA)) { in cdrom_mrw_open_write()
769 ret = cdrom_get_disc_info(cdi, &di); in cdrom_mrw_open_write()
790 ret = cdrom_mrw_bgformat(cdi, 1); in cdrom_mrw_open_write()
795 static int mo_open_write(struct cdrom_device_info *cdi) in mo_open_write() argument
809 ret = cdrom_mode_sense(cdi, &cgc, GPMODE_ALL_PAGES, 0); in mo_open_write()
811 ret = cdrom_mode_sense(cdi, &cgc, GPMODE_VENDOR_PAGE, 0); in mo_open_write()
814 ret = cdrom_mode_sense(cdi, &cgc, GPMODE_ALL_PAGES, 0); in mo_open_write()
824 static int cdrom_ram_open_write(struct cdrom_device_info *cdi) in cdrom_ram_open_write() argument
829 if ((ret = cdrom_has_defect_mgt(cdi))) in cdrom_ram_open_write()
832 if ((ret = cdrom_get_random_writable(cdi, &rfd))) in cdrom_ram_open_write()
841 static void cdrom_mmc3_profile(struct cdrom_device_info *cdi) in cdrom_mmc3_profile() argument
855 if ((ret = cdi->ops->generic_packet(cdi, &cgc))) in cdrom_mmc3_profile()
860 cdi->mmc3_profile = mmc3_profile; in cdrom_mmc3_profile()
863 static int cdrom_is_dvd_rw(struct cdrom_device_info *cdi) in cdrom_is_dvd_rw() argument
865 switch (cdi->mmc3_profile) { in cdrom_is_dvd_rw()
877 static int cdrom_open_write(struct cdrom_device_info *cdi) in cdrom_open_write() argument
883 if (!cdrom_is_mrw(cdi, &mrw_write)) in cdrom_open_write()
889 (void) cdrom_is_random_writable(cdi, &ram_write); in cdrom_open_write()
892 cdi->mask &= ~CDC_MRW; in cdrom_open_write()
894 cdi->mask |= CDC_MRW; in cdrom_open_write()
897 cdi->mask &= ~CDC_MRW_W; in cdrom_open_write()
899 cdi->mask |= CDC_MRW_W; in cdrom_open_write()
902 cdi->mask &= ~CDC_RAM; in cdrom_open_write()
904 cdi->mask |= CDC_RAM; in cdrom_open_write()
907 ret = cdrom_mrw_open_write(cdi); in cdrom_open_write()
909 ret = cdrom_dvdram_open_write(cdi); in cdrom_open_write()
912 ret = cdrom_ram_open_write(cdi); in cdrom_open_write()
914 ret = mo_open_write(cdi); in cdrom_open_write()
915 else if (!cdrom_is_dvd_rw(cdi)) in cdrom_open_write()
921 static void cdrom_dvd_rw_close_write(struct cdrom_device_info *cdi) in cdrom_dvd_rw_close_write() argument
925 if (cdi->mmc3_profile != 0x1a) { in cdrom_dvd_rw_close_write()
926 cdinfo(CD_CLOSE, "%s: No DVD+RW\n", cdi->name); in cdrom_dvd_rw_close_write()
930 if (!cdi->media_written) { in cdrom_dvd_rw_close_write()
931 cdinfo(CD_CLOSE, "%s: DVD+RW media clean\n", cdi->name); in cdrom_dvd_rw_close_write()
936 cdi->name); in cdrom_dvd_rw_close_write()
941 cdi->ops->generic_packet(cdi, &cgc); in cdrom_dvd_rw_close_write()
947 cdi->ops->generic_packet(cdi, &cgc); in cdrom_dvd_rw_close_write()
954 cdi->ops->generic_packet(cdi, &cgc); in cdrom_dvd_rw_close_write()
956 cdi->media_written = 0; in cdrom_dvd_rw_close_write()
959 static int cdrom_close_write(struct cdrom_device_info *cdi) in cdrom_close_write() argument
962 return cdrom_flush_cache(cdi); in cdrom_close_write()
976 int cdrom_open(struct cdrom_device_info *cdi, struct block_device *bdev, fmode_t mode) in cdrom_open() argument
984 cdi->use_count++; in cdrom_open()
985 if ((mode & FMODE_NDELAY) && (cdi->options & CDO_USE_FFLAGS)) { in cdrom_open()
986 ret = cdi->ops->open(cdi, 1); in cdrom_open()
988 ret = open_for_data(cdi); in cdrom_open()
991 cdrom_mmc3_profile(cdi); in cdrom_open()
994 if (cdrom_open_write(cdi)) in cdrom_open()
999 cdi->media_written = 0; in cdrom_open()
1007 cdi->name, cdi->use_count); in cdrom_open()
1013 if (CDROM_CAN(CDC_LOCK) && cdi->options & CDO_LOCK) { in cdrom_open()
1014 cdi->ops->lock_door(cdi, 0); in cdrom_open()
1017 cdi->ops->release(cdi); in cdrom_open()
1019 cdi->use_count--; in cdrom_open()
1024 int open_for_data(struct cdrom_device_info * cdi) in open_for_data() argument
1027 struct cdrom_device_ops *cdo = cdi->ops; in open_for_data()
1033 ret = cdo->drive_status(cdi, CDSL_CURRENT); in open_for_data()
1039 cdi->options & CDO_AUTO_CLOSE) { in open_for_data()
1041 ret=cdo->tray_move(cdi,0); in open_for_data()
1058 ret = cdo->drive_status(cdi, CDSL_CURRENT); in open_for_data()
1068 ret = cdo->drive_status(cdi, CDSL_CURRENT); in open_for_data()
1074 cdrom_count_tracks(cdi, &tracks); in open_for_data()
1083 if (cdi->options & CDO_CHECK_TYPE) { in open_for_data()
1100 ret = cdo->open(cdi, 0); /* open for data */ in open_for_data()
1109 if (CDROM_CAN(CDC_LOCK) && (cdi->options & CDO_LOCK)) { in open_for_data()
1110 cdo->lock_door(cdi, 1); in open_for_data()
1123 if (CDROM_CAN(CDC_LOCK) && cdi->options & CDO_LOCK) { in open_for_data()
1124 cdo->lock_door(cdi, 0); in open_for_data()
1133 static int check_for_audio_disc(struct cdrom_device_info * cdi, in check_for_audio_disc() argument
1139 if (!(cdi->options & CDO_CHECK_TYPE)) in check_for_audio_disc()
1142 ret = cdo->drive_status(cdi, CDSL_CURRENT); in check_for_audio_disc()
1148 cdi->options & CDO_AUTO_CLOSE) { in check_for_audio_disc()
1150 ret=cdo->tray_move(cdi,0); in check_for_audio_disc()
1165 ret = cdo->drive_status(cdi, CDSL_CURRENT); in check_for_audio_disc()
1177 cdrom_count_tracks(cdi, &tracks); in check_for_audio_disc()
1187 void cdrom_release(struct cdrom_device_info *cdi, fmode_t mode) in cdrom_release() argument
1189 struct cdrom_device_ops *cdo = cdi->ops; in cdrom_release()
1194 if (cdi->use_count > 0) in cdrom_release()
1195 cdi->use_count--; in cdrom_release()
1197 if (cdi->use_count == 0) { in cdrom_release()
1198 cdinfo(CD_CLOSE, "Use count for \"/dev/%s\" now zero\n", cdi->name); in cdrom_release()
1199 cdrom_dvd_rw_close_write(cdi); in cdrom_release()
1203 cdo->lock_door(cdi, 0); in cdrom_release()
1207 opened_for_data = !(cdi->options & CDO_USE_FFLAGS) || in cdrom_release()
1213 if (CDROM_CAN(CDC_RAM) && !cdi->use_count && cdi->for_data) in cdrom_release()
1214 cdrom_close_write(cdi); in cdrom_release()
1216 cdo->release(cdi); in cdrom_release()
1217 if (cdi->use_count == 0) { /* last process that closes dev*/ in cdrom_release()
1219 cdi->options & CDO_AUTO_EJECT && CDROM_CAN(CDC_OPEN_TRAY)) in cdrom_release()
1220 cdo->tray_move(cdi, 1); in cdrom_release()
1224 static int cdrom_read_mech_status(struct cdrom_device_info *cdi, in cdrom_read_mech_status() argument
1228 struct cdrom_device_ops *cdo = cdi->ops; in cdrom_read_mech_status()
1236 if (cdi->sanyo_slot) { in cdrom_read_mech_status()
1238 buf->hdr.curslot = cdi->sanyo_slot == 3 ? 0 : cdi->sanyo_slot; in cdrom_read_mech_status()
1247 cdi->capacity * sizeof(struct cdrom_slot); in cdrom_read_mech_status()
1253 return cdo->generic_packet(cdi, &cgc); in cdrom_read_mech_status()
1256 static int cdrom_slot_status(struct cdrom_device_info *cdi, int slot) in cdrom_slot_status() argument
1262 if (cdi->sanyo_slot) in cdrom_slot_status()
1269 if ((ret = cdrom_read_mech_status(cdi, info))) in cdrom_slot_status()
1285 int cdrom_number_of_slots(struct cdrom_device_info *cdi) in cdrom_number_of_slots() argument
1293 cdi->capacity = 0; in cdrom_number_of_slots()
1299 if ((status = cdrom_read_mech_status(cdi, info)) == 0) in cdrom_number_of_slots()
1308 static int cdrom_load_unload(struct cdrom_device_info *cdi, int slot) in cdrom_load_unload() argument
1313 if (cdi->sanyo_slot && slot < 0) in cdrom_load_unload()
1325 if (cdi->sanyo_slot && -1 < slot) { in cdrom_load_unload()
1329 cdi->sanyo_slot = slot ? slot : 3; in cdrom_load_unload()
1332 return cdi->ops->generic_packet(cdi, &cgc); in cdrom_load_unload()
1335 static int cdrom_select_disc(struct cdrom_device_info *cdi, int slot) in cdrom_select_disc() argument
1345 (void) cdi->ops->media_changed(cdi, slot); in cdrom_select_disc()
1349 cdi->mc_flags = 0x3; in cdrom_select_disc()
1350 return cdrom_load_unload(cdi, -1); in cdrom_select_disc()
1357 if ((ret = cdrom_read_mech_status(cdi, info))) { in cdrom_select_disc()
1365 if (cdi->use_count > 1 || keeplocked) { in cdrom_select_disc()
1382 cdi->mc_flags = 0x3; in cdrom_select_disc()
1383 if ((ret = cdrom_load_unload(cdi, slot))) in cdrom_select_disc()
1396 int media_changed(struct cdrom_device_info *cdi, int queue) in media_changed() argument
1399 int ret = !!(cdi->mc_flags & mask); in media_changed()
1404 if (cdi->ops->media_changed(cdi, CDSL_CURRENT)) { in media_changed()
1405 cdi->mc_flags = 0x3; /* set bit on both queues */ in media_changed()
1407 cdi->media_written = 0; in media_changed()
1409 cdi->mc_flags &= ~mask; /* clear bit */ in media_changed()
1413 int cdrom_media_changed(struct cdrom_device_info *cdi) in cdrom_media_changed() argument
1418 if (cdi == NULL || cdi->ops->media_changed == NULL) in cdrom_media_changed()
1422 return media_changed(cdi, 0); in cdrom_media_changed()
1426 static void cdrom_count_tracks(struct cdrom_device_info *cdi, tracktype* tracks) in cdrom_count_tracks() argument
1433 tracks->cdi=0; in cdrom_count_tracks()
1438 if ((ret = cdi->ops->audio_ioctl(cdi, CDROMREADTOCHDR, &header))) { in cdrom_count_tracks()
1449 if (cdi->ops->audio_ioctl(cdi, CDROMREADTOCENTRY, &entry)) { in cdrom_count_tracks()
1455 tracks->cdi++; in cdrom_count_tracks()
1467 tracks->cdi, tracks->xa); in cdrom_count_tracks()
1567 static int dvd_do_auth(struct cdrom_device_info *cdi, dvd_authinfo *ai) in dvd_do_auth() argument
1572 struct cdrom_device_ops *cdo = cdi->ops; in dvd_do_auth()
1585 if ((ret = cdo->generic_packet(cdi, &cgc))) in dvd_do_auth()
1596 if ((ret = cdo->generic_packet(cdi, &cgc))) in dvd_do_auth()
1607 if ((ret = cdo->generic_packet(cdi, &cgc))) in dvd_do_auth()
1624 if ((ret = cdo->generic_packet(cdi, &cgc))) in dvd_do_auth()
1638 if ((ret = cdo->generic_packet(cdi, &cgc))) in dvd_do_auth()
1651 if ((ret = cdo->generic_packet(cdi, &cgc))) in dvd_do_auth()
1663 if ((ret = cdo->generic_packet(cdi, &cgc))) { in dvd_do_auth()
1675 if ((ret = cdo->generic_packet(cdi, &cgc))) in dvd_do_auth()
1686 if ((ret = cdo->generic_packet(cdi, &cgc))) in dvd_do_auth()
1703 if ((ret = cdo->generic_packet(cdi, &cgc))) in dvd_do_auth()
1715 static int dvd_read_physical(struct cdrom_device_info *cdi, dvd_struct *s, in dvd_read_physical() argument
1720 struct cdrom_device_ops *cdo = cdi->ops; in dvd_read_physical()
1737 ret = cdo->generic_packet(cdi, cgc); in dvd_read_physical()
1766 static int dvd_read_copyright(struct cdrom_device_info *cdi, dvd_struct *s, in dvd_read_copyright() argument
1771 struct cdrom_device_ops *cdo = cdi->ops; in dvd_read_copyright()
1780 ret = cdo->generic_packet(cdi, cgc); in dvd_read_copyright()
1790 static int dvd_read_disckey(struct cdrom_device_info *cdi, dvd_struct *s, in dvd_read_disckey() argument
1795 struct cdrom_device_ops *cdo = cdi->ops; in dvd_read_disckey()
1810 ret = cdo->generic_packet(cdi, cgc); in dvd_read_disckey()
1818 static int dvd_read_bca(struct cdrom_device_info *cdi, dvd_struct *s, in dvd_read_bca() argument
1823 struct cdrom_device_ops *cdo = cdi->ops; in dvd_read_bca()
1834 ret = cdo->generic_packet(cdi, cgc); in dvd_read_bca()
1851 static int dvd_read_manufact(struct cdrom_device_info *cdi, dvd_struct *s, in dvd_read_manufact() argument
1856 struct cdrom_device_ops *cdo = cdi->ops; in dvd_read_manufact()
1870 ret = cdo->generic_packet(cdi, cgc); in dvd_read_manufact()
1888 static int dvd_read_struct(struct cdrom_device_info *cdi, dvd_struct *s, in dvd_read_struct() argument
1893 return dvd_read_physical(cdi, s, cgc); in dvd_read_struct()
1896 return dvd_read_copyright(cdi, s, cgc); in dvd_read_struct()
1899 return dvd_read_disckey(cdi, s, cgc); in dvd_read_struct()
1902 return dvd_read_bca(cdi, s, cgc); in dvd_read_struct()
1905 return dvd_read_manufact(cdi, s, cgc); in dvd_read_struct()
1914 int cdrom_mode_sense(struct cdrom_device_info *cdi, in cdrom_mode_sense() argument
1918 struct cdrom_device_ops *cdo = cdi->ops; in cdrom_mode_sense()
1927 return cdo->generic_packet(cdi, cgc); in cdrom_mode_sense()
1930 int cdrom_mode_select(struct cdrom_device_info *cdi, in cdrom_mode_select() argument
1933 struct cdrom_device_ops *cdo = cdi->ops; in cdrom_mode_select()
1942 return cdo->generic_packet(cdi, cgc); in cdrom_mode_select()
1945 static int cdrom_read_subchannel(struct cdrom_device_info *cdi, in cdrom_read_subchannel() argument
1948 struct cdrom_device_ops *cdo = cdi->ops; in cdrom_read_subchannel()
1960 if ((ret = cdo->generic_packet(cdi, &cgc))) in cdrom_read_subchannel()
1982 static int cdrom_read_cd(struct cdrom_device_info *cdi, in cdrom_read_cd() argument
1986 struct cdrom_device_ops *cdo = cdi->ops; in cdrom_read_cd()
1998 return cdo->generic_packet(cdi, cgc); in cdrom_read_cd()
2002 static int cdrom_read_block(struct cdrom_device_info *cdi, in cdrom_read_block() argument
2006 struct cdrom_device_ops *cdo = cdi->ops; in cdrom_read_block()
2031 return cdo->generic_packet(cdi, cgc); in cdrom_read_block()
2034 static int cdrom_read_cdda_old(struct cdrom_device_info *cdi, __u8 __user *ubuf, in cdrom_read_cdda_old() argument
2041 cdi->last_sense = 0; in cdrom_read_cdda_old()
2070 ret = cdrom_read_block(cdi, &cgc, lba, nr, 1, CD_FRAMESIZE_RAW); in cdrom_read_cdda_old()
2086 static int cdrom_read_cdda_bpc(struct cdrom_device_info *cdi, __u8 __user *ubuf, in cdrom_read_cdda_bpc() argument
2089 struct request_queue *q = cdi->disk->queue; in cdrom_read_cdda_bpc()
2098 cdi->last_sense = 0; in cdrom_read_cdda_bpc()
2102 if (cdi->cdda_method == CDDA_BPC_SINGLE) in cdrom_read_cdda_bpc()
2137 if (blk_execute_rq(q, cdi->disk, rq, 0)) { in cdrom_read_cdda_bpc()
2140 cdi->last_sense = s->sense_key; in cdrom_read_cdda_bpc()
2158 static int cdrom_read_cdda(struct cdrom_device_info *cdi, __u8 __user *ubuf, in cdrom_read_cdda() argument
2163 if (cdi->cdda_method == CDDA_OLD) in cdrom_read_cdda()
2164 return cdrom_read_cdda_old(cdi, ubuf, lba, nframes); in cdrom_read_cdda()
2170 ret = cdrom_read_cdda_bpc(cdi, ubuf, lba, nframes); in cdrom_read_cdda()
2178 if (cdi->cdda_method == CDDA_BPC_FULL && nframes > 1) { in cdrom_read_cdda()
2180 cdi->cdda_method = CDDA_BPC_SINGLE; in cdrom_read_cdda()
2189 if (cdi->last_sense != 0x04 && cdi->last_sense != 0x0b) in cdrom_read_cdda()
2192 printk("cdrom: dropping to old style cdda (sense=%x)\n", cdi->last_sense); in cdrom_read_cdda()
2193 cdi->cdda_method = CDDA_OLD; in cdrom_read_cdda()
2194 return cdrom_read_cdda_old(cdi, ubuf, lba, nframes); in cdrom_read_cdda()
2197 static int cdrom_ioctl_multisession(struct cdrom_device_info *cdi, in cdrom_ioctl_multisession() argument
2206 if (!(cdi->ops->capability & CDC_MULTI_SESSION)) in cdrom_ioctl_multisession()
2217 ret = cdi->ops->get_last_session(cdi, &ms_info); in cdrom_ioctl_multisession()
2230 static int cdrom_ioctl_eject(struct cdrom_device_info *cdi) in cdrom_ioctl_eject() argument
2236 if (cdi->use_count != 1 || keeplocked) in cdrom_ioctl_eject()
2239 int ret = cdi->ops->lock_door(cdi, 0); in cdrom_ioctl_eject()
2244 return cdi->ops->tray_move(cdi, 1); in cdrom_ioctl_eject()
2247 static int cdrom_ioctl_closetray(struct cdrom_device_info *cdi) in cdrom_ioctl_closetray() argument
2253 return cdi->ops->tray_move(cdi, 0); in cdrom_ioctl_closetray()
2256 static int cdrom_ioctl_eject_sw(struct cdrom_device_info *cdi, in cdrom_ioctl_eject_sw() argument
2266 cdi->options &= ~(CDO_AUTO_CLOSE | CDO_AUTO_EJECT); in cdrom_ioctl_eject_sw()
2268 cdi->options |= CDO_AUTO_CLOSE | CDO_AUTO_EJECT; in cdrom_ioctl_eject_sw()
2272 static int cdrom_ioctl_media_changed(struct cdrom_device_info *cdi, in cdrom_ioctl_media_changed() argument
2285 return media_changed(cdi, 1); in cdrom_ioctl_media_changed()
2287 if ((unsigned int)arg >= cdi->capacity) in cdrom_ioctl_media_changed()
2294 ret = cdrom_read_mech_status(cdi, info); in cdrom_ioctl_media_changed()
2301 static int cdrom_ioctl_set_options(struct cdrom_device_info *cdi, in cdrom_ioctl_set_options() argument
2319 return cdi->options; in cdrom_ioctl_set_options()
2325 cdi->options |= (int) arg; in cdrom_ioctl_set_options()
2326 return cdi->options; in cdrom_ioctl_set_options()
2329 static int cdrom_ioctl_clear_options(struct cdrom_device_info *cdi, in cdrom_ioctl_clear_options() argument
2334 cdi->options &= ~(int) arg; in cdrom_ioctl_clear_options()
2335 return cdi->options; in cdrom_ioctl_clear_options()
2338 static int cdrom_ioctl_select_speed(struct cdrom_device_info *cdi, in cdrom_ioctl_select_speed() argument
2345 return cdi->ops->select_speed(cdi, arg); in cdrom_ioctl_select_speed()
2348 static int cdrom_ioctl_select_disc(struct cdrom_device_info *cdi, in cdrom_ioctl_select_disc() argument
2357 if ((int)arg >= cdi->capacity) in cdrom_ioctl_select_disc()
2366 if (cdi->ops->select_disc) in cdrom_ioctl_select_disc()
2367 return cdi->ops->select_disc(cdi, arg); in cdrom_ioctl_select_disc()
2370 return cdrom_select_disc(cdi, arg); in cdrom_ioctl_select_disc()
2373 static int cdrom_ioctl_reset(struct cdrom_device_info *cdi, in cdrom_ioctl_reset() argument
2383 return cdi->ops->reset(cdi); in cdrom_ioctl_reset()
2386 static int cdrom_ioctl_lock_door(struct cdrom_device_info *cdi, in cdrom_ioctl_lock_door() argument
2400 if (cdi->use_count != 1 && !arg && !capable(CAP_SYS_ADMIN)) in cdrom_ioctl_lock_door()
2402 return cdi->ops->lock_door(cdi, arg); in cdrom_ioctl_lock_door()
2405 static int cdrom_ioctl_debug(struct cdrom_device_info *cdi, in cdrom_ioctl_debug() argument
2416 static int cdrom_ioctl_get_capability(struct cdrom_device_info *cdi) in cdrom_ioctl_get_capability() argument
2419 return (cdi->ops->capability & ~cdi->mask); in cdrom_ioctl_get_capability()
2428 static int cdrom_ioctl_get_mcn(struct cdrom_device_info *cdi, in cdrom_ioctl_get_mcn() argument
2436 if (!(cdi->ops->capability & CDC_MCN)) in cdrom_ioctl_get_mcn()
2438 ret = cdi->ops->get_mcn(cdi, &mcn); in cdrom_ioctl_get_mcn()
2448 static int cdrom_ioctl_drive_status(struct cdrom_device_info *cdi, in cdrom_ioctl_drive_status() argument
2453 if (!(cdi->ops->capability & CDC_DRIVE_STATUS)) in cdrom_ioctl_drive_status()
2457 return cdi->ops->drive_status(cdi, CDSL_CURRENT); in cdrom_ioctl_drive_status()
2458 if (((int)arg >= cdi->capacity)) in cdrom_ioctl_drive_status()
2460 return cdrom_slot_status(cdi, arg); in cdrom_ioctl_drive_status()
2480 static int cdrom_ioctl_disc_status(struct cdrom_device_info *cdi) in cdrom_ioctl_disc_status() argument
2486 cdrom_count_tracks(cdi, &tracks); in cdrom_ioctl_disc_status()
2492 if (!tracks.data && !tracks.cdi && !tracks.xa) in cdrom_ioctl_disc_status()
2498 if (tracks.cdi > 0) in cdrom_ioctl_disc_status()
2510 static int cdrom_ioctl_changer_nslots(struct cdrom_device_info *cdi) in cdrom_ioctl_changer_nslots() argument
2513 return cdi->capacity; in cdrom_ioctl_changer_nslots()
2516 static int cdrom_ioctl_get_subchnl(struct cdrom_device_info *cdi, in cdrom_ioctl_get_subchnl() argument
2533 ret = cdi->ops->audio_ioctl(cdi, CDROMSUBCHNL, &q); in cdrom_ioctl_get_subchnl()
2547 static int cdrom_ioctl_read_tochdr(struct cdrom_device_info *cdi, in cdrom_ioctl_read_tochdr() argument
2558 ret = cdi->ops->audio_ioctl(cdi, CDROMREADTOCHDR, &header); in cdrom_ioctl_read_tochdr()
2568 static int cdrom_ioctl_read_tocentry(struct cdrom_device_info *cdi, in cdrom_ioctl_read_tocentry() argument
2585 ret = cdi->ops->audio_ioctl(cdi, CDROMREADTOCENTRY, &entry); in cdrom_ioctl_read_tocentry()
2596 static int cdrom_ioctl_play_msf(struct cdrom_device_info *cdi, in cdrom_ioctl_play_msf() argument
2607 return cdi->ops->audio_ioctl(cdi, CDROMPLAYMSF, &msf); in cdrom_ioctl_play_msf()
2610 static int cdrom_ioctl_play_trkind(struct cdrom_device_info *cdi, in cdrom_ioctl_play_trkind() argument
2623 ret = check_for_audio_disc(cdi, cdi->ops); in cdrom_ioctl_play_trkind()
2626 return cdi->ops->audio_ioctl(cdi, CDROMPLAYTRKIND, &ti); in cdrom_ioctl_play_trkind()
2628 static int cdrom_ioctl_volctrl(struct cdrom_device_info *cdi, in cdrom_ioctl_volctrl() argument
2639 return cdi->ops->audio_ioctl(cdi, CDROMVOLCTRL, &volume); in cdrom_ioctl_volctrl()
2642 static int cdrom_ioctl_volread(struct cdrom_device_info *cdi, in cdrom_ioctl_volread() argument
2653 ret = cdi->ops->audio_ioctl(cdi, CDROMVOLREAD, &volume); in cdrom_ioctl_volread()
2662 static int cdrom_ioctl_audioctl(struct cdrom_device_info *cdi, in cdrom_ioctl_audioctl() argument
2671 ret = check_for_audio_disc(cdi, cdi->ops); in cdrom_ioctl_audioctl()
2674 return cdi->ops->audio_ioctl(cdi, cmd, NULL); in cdrom_ioctl_audioctl()
2682 int cdrom_ioctl(struct cdrom_device_info *cdi, struct block_device *bdev, in cdrom_ioctl() argument
2698 return cdrom_ioctl_multisession(cdi, argp); in cdrom_ioctl()
2700 return cdrom_ioctl_eject(cdi); in cdrom_ioctl()
2702 return cdrom_ioctl_closetray(cdi); in cdrom_ioctl()
2704 return cdrom_ioctl_eject_sw(cdi, arg); in cdrom_ioctl()
2706 return cdrom_ioctl_media_changed(cdi, arg); in cdrom_ioctl()
2708 return cdrom_ioctl_set_options(cdi, arg); in cdrom_ioctl()
2710 return cdrom_ioctl_clear_options(cdi, arg); in cdrom_ioctl()
2712 return cdrom_ioctl_select_speed(cdi, arg); in cdrom_ioctl()
2714 return cdrom_ioctl_select_disc(cdi, arg); in cdrom_ioctl()
2716 return cdrom_ioctl_reset(cdi, bdev); in cdrom_ioctl()
2718 return cdrom_ioctl_lock_door(cdi, arg); in cdrom_ioctl()
2720 return cdrom_ioctl_debug(cdi, arg); in cdrom_ioctl()
2722 return cdrom_ioctl_get_capability(cdi); in cdrom_ioctl()
2724 return cdrom_ioctl_get_mcn(cdi, argp); in cdrom_ioctl()
2726 return cdrom_ioctl_drive_status(cdi, arg); in cdrom_ioctl()
2728 return cdrom_ioctl_disc_status(cdi); in cdrom_ioctl()
2730 return cdrom_ioctl_changer_nslots(cdi); in cdrom_ioctl()
2740 ret = mmc_ioctl(cdi, cmd, arg); in cdrom_ioctl()
2752 return cdrom_ioctl_get_subchnl(cdi, argp); in cdrom_ioctl()
2754 return cdrom_ioctl_read_tochdr(cdi, argp); in cdrom_ioctl()
2756 return cdrom_ioctl_read_tocentry(cdi, argp); in cdrom_ioctl()
2758 return cdrom_ioctl_play_msf(cdi, argp); in cdrom_ioctl()
2760 return cdrom_ioctl_play_trkind(cdi, argp); in cdrom_ioctl()
2762 return cdrom_ioctl_volctrl(cdi, argp); in cdrom_ioctl()
2764 return cdrom_ioctl_volread(cdi, argp); in cdrom_ioctl()
2769 return cdrom_ioctl_audioctl(cdi, cmd); in cdrom_ioctl()
2779 static int cdrom_switch_blocksize(struct cdrom_device_info *cdi, int size) in cdrom_switch_blocksize() argument
2781 struct cdrom_device_ops *cdo = cdi->ops; in cdrom_switch_blocksize()
2801 return cdo->generic_packet(cdi, &cgc); in cdrom_switch_blocksize()
2804 static noinline int mmc_ioctl_cdrom_read_data(struct cdrom_device_info *cdi, in mmc_ioctl_cdrom_read_data() argument
2839 ret = cdrom_read_block(cdi, cgc, lba, 1, format, blocksize); in mmc_ioctl_cdrom_read_data()
2848 ret = cdrom_switch_blocksize(cdi, blocksize); in mmc_ioctl_cdrom_read_data()
2852 ret = cdrom_read_cd(cdi, cgc, lba, blocksize, 1); in mmc_ioctl_cdrom_read_data()
2853 ret |= cdrom_switch_blocksize(cdi, blocksize); in mmc_ioctl_cdrom_read_data()
2862 static noinline int mmc_ioctl_cdrom_read_audio(struct cdrom_device_info *cdi, in mmc_ioctl_cdrom_read_audio() argument
2883 return cdrom_read_cdda(cdi, ra.buf, lba, ra.nframes); in mmc_ioctl_cdrom_read_audio()
2886 static noinline int mmc_ioctl_cdrom_subchannel(struct cdrom_device_info *cdi, in mmc_ioctl_cdrom_subchannel() argument
2898 ret = cdrom_read_subchannel(cdi, &q, 0); in mmc_ioctl_cdrom_subchannel()
2909 static noinline int mmc_ioctl_cdrom_play_msf(struct cdrom_device_info *cdi, in mmc_ioctl_cdrom_play_msf() argument
2913 struct cdrom_device_ops *cdo = cdi->ops; in mmc_ioctl_cdrom_play_msf()
2925 return cdo->generic_packet(cdi, cgc); in mmc_ioctl_cdrom_play_msf()
2928 static noinline int mmc_ioctl_cdrom_play_blk(struct cdrom_device_info *cdi, in mmc_ioctl_cdrom_play_blk() argument
2932 struct cdrom_device_ops *cdo = cdi->ops; in mmc_ioctl_cdrom_play_blk()
2944 return cdo->generic_packet(cdi, cgc); in mmc_ioctl_cdrom_play_blk()
2947 static noinline int mmc_ioctl_cdrom_volume(struct cdrom_device_info *cdi, in mmc_ioctl_cdrom_volume() argument
2964 ret = cdrom_mode_sense(cdi, cgc, GPMODE_AUDIO_CTL_PAGE, 0); in mmc_ioctl_cdrom_volume()
2979 ret = cdrom_mode_sense(cdi, cgc, in mmc_ioctl_cdrom_volume()
3003 ret = cdrom_mode_sense(cdi, cgc, GPMODE_AUDIO_CTL_PAGE, 1); in mmc_ioctl_cdrom_volume()
3015 return cdrom_mode_select(cdi, cgc); in mmc_ioctl_cdrom_volume()
3018 static noinline int mmc_ioctl_cdrom_start_stop(struct cdrom_device_info *cdi, in mmc_ioctl_cdrom_start_stop() argument
3022 struct cdrom_device_ops *cdo = cdi->ops; in mmc_ioctl_cdrom_start_stop()
3028 return cdo->generic_packet(cdi, cgc); in mmc_ioctl_cdrom_start_stop()
3031 static noinline int mmc_ioctl_cdrom_pause_resume(struct cdrom_device_info *cdi, in mmc_ioctl_cdrom_pause_resume() argument
3035 struct cdrom_device_ops *cdo = cdi->ops; in mmc_ioctl_cdrom_pause_resume()
3040 return cdo->generic_packet(cdi, cgc); in mmc_ioctl_cdrom_pause_resume()
3043 static noinline int mmc_ioctl_dvd_read_struct(struct cdrom_device_info *cdi, in mmc_ioctl_dvd_read_struct() argument
3064 ret = dvd_read_struct(cdi, s, cgc); in mmc_ioctl_dvd_read_struct()
3075 static noinline int mmc_ioctl_dvd_auth(struct cdrom_device_info *cdi, in mmc_ioctl_dvd_auth() argument
3084 ret = dvd_do_auth(cdi, &ai); in mmc_ioctl_dvd_auth()
3091 static noinline int mmc_ioctl_cdrom_next_writable(struct cdrom_device_info *cdi, in mmc_ioctl_cdrom_next_writable() argument
3097 ret = cdrom_get_next_writable(cdi, &next); in mmc_ioctl_cdrom_next_writable()
3104 static noinline int mmc_ioctl_cdrom_last_written(struct cdrom_device_info *cdi, in mmc_ioctl_cdrom_last_written() argument
3110 ret = cdrom_get_last_written(cdi, &last); in mmc_ioctl_cdrom_last_written()
3117 static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd, in mmc_ioctl() argument
3131 return mmc_ioctl_cdrom_read_data(cdi, userptr, &cgc, cmd); in mmc_ioctl()
3133 return mmc_ioctl_cdrom_read_audio(cdi, userptr); in mmc_ioctl()
3135 return mmc_ioctl_cdrom_subchannel(cdi, userptr); in mmc_ioctl()
3137 return mmc_ioctl_cdrom_play_msf(cdi, userptr, &cgc); in mmc_ioctl()
3139 return mmc_ioctl_cdrom_play_blk(cdi, userptr, &cgc); in mmc_ioctl()
3142 return mmc_ioctl_cdrom_volume(cdi, userptr, &cgc, cmd); in mmc_ioctl()
3145 return mmc_ioctl_cdrom_start_stop(cdi, &cgc, cmd); in mmc_ioctl()
3148 return mmc_ioctl_cdrom_pause_resume(cdi, &cgc, cmd); in mmc_ioctl()
3150 return mmc_ioctl_dvd_read_struct(cdi, userptr, &cgc); in mmc_ioctl()
3152 return mmc_ioctl_dvd_auth(cdi, userptr); in mmc_ioctl()
3154 return mmc_ioctl_cdrom_next_writable(cdi, userptr); in mmc_ioctl()
3156 return mmc_ioctl_cdrom_last_written(cdi, userptr); in mmc_ioctl()
3162 static int cdrom_get_track_info(struct cdrom_device_info *cdi, __u16 track, __u8 type, in cdrom_get_track_info() argument
3165 struct cdrom_device_ops *cdo = cdi->ops; in cdrom_get_track_info()
3177 if ((ret = cdo->generic_packet(cdi, &cgc))) in cdrom_get_track_info()
3187 if ((ret = cdo->generic_packet(cdi, &cgc))) in cdrom_get_track_info()
3195 static int cdrom_get_disc_info(struct cdrom_device_info *cdi, disc_information *di) in cdrom_get_disc_info() argument
3197 struct cdrom_device_ops *cdo = cdi->ops; in cdrom_get_disc_info()
3207 if ((ret = cdo->generic_packet(cdi, &cgc))) in cdrom_get_disc_info()
3220 if ((ret = cdo->generic_packet(cdi, &cgc))) in cdrom_get_disc_info()
3229 int cdrom_get_last_written(struct cdrom_device_info *cdi, long *last_written) in cdrom_get_last_written() argument
3240 ret = cdrom_get_disc_info(cdi, &di); in cdrom_get_last_written()
3247 ti_size = cdrom_get_track_info(cdi, last_track, 1, &ti); in cdrom_get_last_written()
3256 ti_size = cdrom_get_track_info(cdi, last_track, 1, &ti); in cdrom_get_last_written()
3283 if ((ret = cdi->ops->audio_ioctl(cdi, CDROMREADTOCENTRY, &toc))) in cdrom_get_last_written()
3291 static int cdrom_get_next_writable(struct cdrom_device_info *cdi, long *next_writable) in cdrom_get_next_writable() argument
3301 ret = cdrom_get_disc_info(cdi, &di); in cdrom_get_next_writable()
3308 ti_size = cdrom_get_track_info(cdi, last_track, 1, &ti); in cdrom_get_next_writable()
3317 ti_size = cdrom_get_track_info(cdi, last_track, 1, &ti); in cdrom_get_next_writable()
3330 if ((ret = cdrom_get_last_written(cdi, next_writable))) { in cdrom_get_next_writable()
3376 struct cdrom_device_info *cdi; in cdrom_print_info() local
3385 list_for_each_entry(cdi, &cdrom_list, list) { in cdrom_print_info()
3389 "\t%s", cdi->name); in cdrom_print_info()
3393 "\t%d", cdi->speed); in cdrom_print_info()
3397 "\t%d", cdi->capacity); in cdrom_print_info()
3504 struct cdrom_device_info *cdi; in cdrom_update_settings() local
3507 list_for_each_entry(cdi, &cdrom_list, list) { in cdrom_update_settings()
3509 cdi->options |= CDO_AUTO_CLOSE; in cdrom_update_settings()
3511 cdi->options &= ~CDO_AUTO_CLOSE; in cdrom_update_settings()
3513 cdi->options |= CDO_AUTO_EJECT; in cdrom_update_settings()
3515 cdi->options &= ~CDO_AUTO_EJECT; in cdrom_update_settings()
3517 cdi->options |= CDO_LOCK; in cdrom_update_settings()
3519 cdi->options &= ~CDO_LOCK; in cdrom_update_settings()
3521 cdi->options |= CDO_CHECK_TYPE; in cdrom_update_settings()
3523 cdi->options &= ~CDO_CHECK_TYPE; in cdrom_update_settings()