Lines Matching refs:cdi

92   cdi->options in various ioctl.
338 /* The (cdo->capability & ~cdi->mask & CDC_XXX) construct was used in
340 #define CDROM_CAN(type) (cdi->ops->capability & ~cdi->mask & (type))
343 #define CHECKAUDIO if ((ret=check_for_audio_disc(cdi, cdo))) return ret
352 static int open_for_data(struct cdrom_device_info * cdi);
353 static int check_for_audio_disc(struct cdrom_device_info * cdi,
357 static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd,
364 static int cdrom_mrw_exit(struct cdrom_device_info *cdi);
366 static int cdrom_get_disc_info(struct cdrom_device_info *cdi, disc_information *di);
372 static int cdrom_dummy_generic_packet(struct cdrom_device_info *cdi,
392 int register_cdrom(struct cdrom_device_info *cdi)
395 struct cdrom_device_ops *cdo = cdi->ops;
418 cdi->mc_flags = 0;
420 cdi->options = CDO_USE_FFLAGS;
423 cdi->options |= (int) CDO_AUTO_CLOSE;
425 cdi->options |= (int) CDO_AUTO_EJECT;
427 cdi->options |= (int) CDO_LOCK;
429 cdi->options |= (int) CDO_CHECK_TYPE;
432 cdi->exit = cdrom_mrw_exit;
434 if (cdi->disk)
435 cdi->cdda_method = CDDA_BPC_FULL;
437 cdi->cdda_method = CDDA_OLD;
442 cdinfo(CD_REG_UNREG, "drive \"/dev/%s\" registered\n", cdi->name);
444 list_add(&cdi->list, &cdrom_list);
450 void unregister_cdrom(struct cdrom_device_info *cdi)
455 list_del(&cdi->list);
458 if (cdi->exit)
459 cdi->exit(cdi);
461 cdi->ops->n_minors--;
462 cdinfo(CD_REG_UNREG, "drive \"/dev/%s\" unregistered\n", cdi->name);
465 int cdrom_get_media_event(struct cdrom_device_info *cdi,
479 if (cdi->ops->generic_packet(cdi, &cgc))
496 static int cdrom_mrw_probe_pc(struct cdrom_device_info *cdi)
506 if (!cdrom_mode_sense(cdi, &cgc, MRW_MODE_PC, 0)) {
507 cdi->mrw_mode_page = MRW_MODE_PC;
509 } else if (!cdrom_mode_sense(cdi, &cgc, MRW_MODE_PC_PRE1, 0)) {
510 cdi->mrw_mode_page = MRW_MODE_PC_PRE1;
517 static int cdrom_is_mrw(struct cdrom_device_info *cdi, int *write)
533 if ((ret = cdi->ops->generic_packet(cdi, &cgc)))
541 if ((ret = cdrom_mrw_probe_pc(cdi))) {
549 static int cdrom_mrw_bgformat(struct cdrom_device_info *cdi, int cont)
583 ret = cdi->ops->generic_packet(cdi, &cgc);
590 static int cdrom_mrw_bgformat_susp(struct cdrom_device_info *cdi, int immed)
605 return cdi->ops->generic_packet(cdi, &cgc);
608 static int cdrom_flush_cache(struct cdrom_device_info *cdi)
617 return cdi->ops->generic_packet(cdi, &cgc);
620 static int cdrom_mrw_exit(struct cdrom_device_info *cdi)
625 ret = cdrom_get_disc_info(cdi, &di);
632 ret = cdrom_mrw_bgformat_susp(cdi, 0);
635 if (!ret && cdi->media_written)
636 ret = cdrom_flush_cache(cdi);
641 static int cdrom_mrw_set_lba_space(struct cdrom_device_info *cdi, int space)
653 if ((ret = cdrom_mode_sense(cdi, &cgc, cdi->mrw_mode_page, 0)))
663 if ((ret = cdrom_mode_select(cdi, &cgc)))
667 cdi->name, mrw_address_space[space]);
671 static int cdrom_get_random_writable(struct cdrom_device_info *cdi,
685 if ((ret = cdi->ops->generic_packet(cdi, &cgc)))
692 static int cdrom_has_defect_mgt(struct cdrom_device_info *cdi)
706 if ((ret = cdi->ops->generic_packet(cdi, &cgc)))
717 static int cdrom_is_random_writable(struct cdrom_device_info *cdi, int *write)
724 if ((ret = cdrom_get_random_writable(cdi, &rfd)))
733 static int cdrom_media_erasable(struct cdrom_device_info *cdi)
738 ret = cdrom_get_disc_info(cdi, &di);
748 static int cdrom_dvdram_open_write(struct cdrom_device_info *cdi)
750 int ret = cdrom_media_erasable(cdi);
762 static int cdrom_mrw_open_write(struct cdrom_device_info *cdi)
770 if (cdrom_mrw_set_lba_space(cdi, MRW_LBA_DMA)) {
775 ret = cdrom_get_disc_info(cdi, &di);
795 ret = cdrom_mrw_bgformat(cdi, 1);
800 static int mo_open_write(struct cdrom_device_info *cdi)
814 ret = cdrom_mode_sense(cdi, &cgc, GPMODE_ALL_PAGES, 0);
816 ret = cdrom_mode_sense(cdi, &cgc, GPMODE_VENDOR_PAGE, 0);
819 ret = cdrom_mode_sense(cdi, &cgc, GPMODE_ALL_PAGES, 0);
829 static int cdrom_ram_open_write(struct cdrom_device_info *cdi)
834 if ((ret = cdrom_has_defect_mgt(cdi)))
837 if ((ret = cdrom_get_random_writable(cdi, &rfd)))
846 static void cdrom_mmc3_profile(struct cdrom_device_info *cdi)
860 if ((ret = cdi->ops->generic_packet(cdi, &cgc)))
865 cdi->mmc3_profile = mmc3_profile;
868 static int cdrom_is_dvd_rw(struct cdrom_device_info *cdi)
870 switch (cdi->mmc3_profile) {
882 static int cdrom_open_write(struct cdrom_device_info *cdi)
888 if (!cdrom_is_mrw(cdi, &mrw_write))
894 (void) cdrom_is_random_writable(cdi, &ram_write);
897 cdi->mask &= ~CDC_MRW;
899 cdi->mask |= CDC_MRW;
902 cdi->mask &= ~CDC_MRW_W;
904 cdi->mask |= CDC_MRW_W;
907 cdi->mask &= ~CDC_RAM;
909 cdi->mask |= CDC_RAM;
912 ret = cdrom_mrw_open_write(cdi);
914 ret = cdrom_dvdram_open_write(cdi);
917 ret = cdrom_ram_open_write(cdi);
919 ret = mo_open_write(cdi);
920 else if (!cdrom_is_dvd_rw(cdi))
926 static void cdrom_dvd_rw_close_write(struct cdrom_device_info *cdi)
930 if (cdi->mmc3_profile != 0x1a) {
931 cdinfo(CD_CLOSE, "%s: No DVD+RW\n", cdi->name);
935 if (!cdi->media_written) {
936 cdinfo(CD_CLOSE, "%s: DVD+RW media clean\n", cdi->name);
940 pr_info("%s: dirty DVD+RW media, \"finalizing\"\n", cdi->name);
945 cdi->ops->generic_packet(cdi, &cgc);
951 cdi->ops->generic_packet(cdi, &cgc);
958 cdi->ops->generic_packet(cdi, &cgc);
960 cdi->media_written = 0;
963 static int cdrom_close_write(struct cdrom_device_info *cdi)
966 return cdrom_flush_cache(cdi);
980 int cdrom_open(struct cdrom_device_info *cdi, struct block_device *bdev, fmode_t mode)
991 cdi->use_count++;
992 if ((mode & FMODE_NDELAY) && (cdi->options & CDO_USE_FFLAGS)) {
993 ret = cdi->ops->open(cdi, 1);
995 ret = open_for_data(cdi);
998 cdrom_mmc3_profile(cdi);
1001 if (cdrom_open_write(cdi))
1006 cdi->media_written = 0;
1014 cdi->name, cdi->use_count);
1017 if (CDROM_CAN(CDC_LOCK) && cdi->options & CDO_LOCK) {
1018 cdi->ops->lock_door(cdi, 0);
1021 cdi->ops->release(cdi);
1023 cdi->use_count--;
1028 int open_for_data(struct cdrom_device_info * cdi)
1031 struct cdrom_device_ops *cdo = cdi->ops;
1037 ret = cdo->drive_status(cdi, CDSL_CURRENT);
1043 cdi->options & CDO_AUTO_CLOSE) {
1045 ret=cdo->tray_move(cdi,0);
1062 ret = cdo->drive_status(cdi, CDSL_CURRENT);
1072 ret = cdo->drive_status(cdi, CDSL_CURRENT);
1078 cdrom_count_tracks(cdi, &tracks);
1087 if (cdi->options & CDO_CHECK_TYPE) {
1104 ret = cdo->open(cdi, 0); /* open for data */
1113 if (CDROM_CAN(CDC_LOCK) && (cdi->options & CDO_LOCK)) {
1114 cdo->lock_door(cdi, 1);
1127 if (CDROM_CAN(CDC_LOCK) && cdi->options & CDO_LOCK) {
1128 cdo->lock_door(cdi, 0);
1137 static int check_for_audio_disc(struct cdrom_device_info * cdi,
1143 if (!(cdi->options & CDO_CHECK_TYPE))
1146 ret = cdo->drive_status(cdi, CDSL_CURRENT);
1152 cdi->options & CDO_AUTO_CLOSE) {
1154 ret=cdo->tray_move(cdi,0);
1169 ret = cdo->drive_status(cdi, CDSL_CURRENT);
1181 cdrom_count_tracks(cdi, &tracks);
1191 void cdrom_release(struct cdrom_device_info *cdi, fmode_t mode)
1193 struct cdrom_device_ops *cdo = cdi->ops;
1198 if (cdi->use_count > 0)
1199 cdi->use_count--;
1201 if (cdi->use_count == 0) {
1202 cdinfo(CD_CLOSE, "Use count for \"/dev/%s\" now zero\n", cdi->name);
1203 cdrom_dvd_rw_close_write(cdi);
1205 if ((cdo->capability & CDC_LOCK) && !cdi->keeplocked) {
1207 cdo->lock_door(cdi, 0);
1211 opened_for_data = !(cdi->options & CDO_USE_FFLAGS) ||
1217 if (CDROM_CAN(CDC_RAM) && !cdi->use_count && cdi->for_data)
1218 cdrom_close_write(cdi);
1220 cdo->release(cdi);
1221 if (cdi->use_count == 0) { /* last process that closes dev*/
1223 cdi->options & CDO_AUTO_EJECT && CDROM_CAN(CDC_OPEN_TRAY))
1224 cdo->tray_move(cdi, 1);
1228 static int cdrom_read_mech_status(struct cdrom_device_info *cdi,
1232 struct cdrom_device_ops *cdo = cdi->ops;
1240 if (cdi->sanyo_slot) {
1242 buf->hdr.curslot = cdi->sanyo_slot == 3 ? 0 : cdi->sanyo_slot;
1251 cdi->capacity * sizeof(struct cdrom_slot);
1257 return cdo->generic_packet(cdi, &cgc);
1260 static int cdrom_slot_status(struct cdrom_device_info *cdi, int slot)
1266 if (cdi->sanyo_slot)
1273 if ((ret = cdrom_read_mech_status(cdi, info)))
1289 int cdrom_number_of_slots(struct cdrom_device_info *cdi)
1297 cdi->capacity = 0;
1303 if ((status = cdrom_read_mech_status(cdi, info)) == 0)
1312 static int cdrom_load_unload(struct cdrom_device_info *cdi, int slot)
1317 if (cdi->sanyo_slot && slot < 0)
1329 if (cdi->sanyo_slot && -1 < slot) {
1333 cdi->sanyo_slot = slot ? slot : 3;
1336 return cdi->ops->generic_packet(cdi, &cgc);
1339 static int cdrom_select_disc(struct cdrom_device_info *cdi, int slot)
1349 if (cdi->ops->check_events)
1350 cdi->ops->check_events(cdi, 0, slot);
1352 cdi->ops->media_changed(cdi, slot);
1356 cdi->mc_flags = 0x3;
1357 return cdrom_load_unload(cdi, -1);
1364 if ((ret = cdrom_read_mech_status(cdi, info))) {
1372 if (cdi->use_count > 1 || cdi->keeplocked) {
1389 cdi->mc_flags = 0x3;
1390 if ((ret = cdrom_load_unload(cdi, slot)))
1400 * cdi->{vfs|ioctl}_events are used to buffer pending events for each
1403 * XXX: Locking is non-existent. cdi->ops->check_events() can be
1410 static void cdrom_update_events(struct cdrom_device_info *cdi,
1415 events = cdi->ops->check_events(cdi, clearing, CDSL_CURRENT);
1416 cdi->vfs_events |= events;
1417 cdi->ioctl_events |= events;
1420 unsigned int cdrom_check_events(struct cdrom_device_info *cdi,
1425 cdrom_update_events(cdi, clearing);
1426 events = cdi->vfs_events;
1427 cdi->vfs_events = 0;
1439 int media_changed(struct cdrom_device_info *cdi, int queue)
1442 int ret = !!(cdi->mc_flags & mask);
1449 if (cdi->ops->check_events) {
1451 cdrom_update_events(cdi, DISK_EVENT_MEDIA_CHANGE);
1452 changed = cdi->ioctl_events & DISK_EVENT_MEDIA_CHANGE;
1453 cdi->ioctl_events = 0;
1455 changed = cdi->ops->media_changed(cdi, CDSL_CURRENT);
1458 cdi->mc_flags = 0x3; /* set bit on both queues */
1460 cdi->media_written = 0;
1463 cdi->mc_flags &= ~mask; /* clear bit */
1467 int cdrom_media_changed(struct cdrom_device_info *cdi)
1472 if (cdi == NULL || cdi->ops->media_changed == NULL)
1476 return media_changed(cdi, 0);
1480 static void cdrom_count_tracks(struct cdrom_device_info *cdi, tracktype* tracks)
1487 tracks->cdi=0;
1492 if ((ret = cdi->ops->audio_ioctl(cdi, CDROMREADTOCHDR, &header))) {
1503 if (cdi->ops->audio_ioctl(cdi, CDROMREADTOCENTRY, &entry)) {
1509 tracks->cdi++;
1521 tracks->cdi, tracks->xa);
1621 static int dvd_do_auth(struct cdrom_device_info *cdi, dvd_authinfo *ai)
1626 struct cdrom_device_ops *cdo = cdi->ops;
1639 if ((ret = cdo->generic_packet(cdi, &cgc)))
1650 if ((ret = cdo->generic_packet(cdi, &cgc)))
1661 if ((ret = cdo->generic_packet(cdi, &cgc)))
1678 if ((ret = cdo->generic_packet(cdi, &cgc)))
1692 if ((ret = cdo->generic_packet(cdi, &cgc)))
1705 if ((ret = cdo->generic_packet(cdi, &cgc)))
1717 if ((ret = cdo->generic_packet(cdi, &cgc))) {
1729 if ((ret = cdo->generic_packet(cdi, &cgc)))
1740 if ((ret = cdo->generic_packet(cdi, &cgc)))
1757 if ((ret = cdo->generic_packet(cdi, &cgc)))
1769 static int dvd_read_physical(struct cdrom_device_info *cdi, dvd_struct *s,
1774 struct cdrom_device_ops *cdo = cdi->ops;
1791 ret = cdo->generic_packet(cdi, cgc);
1820 static int dvd_read_copyright(struct cdrom_device_info *cdi, dvd_struct *s,
1825 struct cdrom_device_ops *cdo = cdi->ops;
1834 ret = cdo->generic_packet(cdi, cgc);
1844 static int dvd_read_disckey(struct cdrom_device_info *cdi, dvd_struct *s,
1849 struct cdrom_device_ops *cdo = cdi->ops;
1864 ret = cdo->generic_packet(cdi, cgc);
1872 static int dvd_read_bca(struct cdrom_device_info *cdi, dvd_struct *s,
1877 struct cdrom_device_ops *cdo = cdi->ops;
1888 ret = cdo->generic_packet(cdi, cgc);
1905 static int dvd_read_manufact(struct cdrom_device_info *cdi, dvd_struct *s,
1910 struct cdrom_device_ops *cdo = cdi->ops;
1924 ret = cdo->generic_packet(cdi, cgc);
1948 static int dvd_read_struct(struct cdrom_device_info *cdi, dvd_struct *s,
1953 return dvd_read_physical(cdi, s, cgc);
1956 return dvd_read_copyright(cdi, s, cgc);
1959 return dvd_read_disckey(cdi, s, cgc);
1962 return dvd_read_bca(cdi, s, cgc);
1965 return dvd_read_manufact(cdi, s, cgc);
1974 int cdrom_mode_sense(struct cdrom_device_info *cdi,
1978 struct cdrom_device_ops *cdo = cdi->ops;
1987 return cdo->generic_packet(cdi, cgc);
1990 int cdrom_mode_select(struct cdrom_device_info *cdi,
1993 struct cdrom_device_ops *cdo = cdi->ops;
2002 return cdo->generic_packet(cdi, cgc);
2005 static int cdrom_read_subchannel(struct cdrom_device_info *cdi,
2008 struct cdrom_device_ops *cdo = cdi->ops;
2020 if ((ret = cdo->generic_packet(cdi, &cgc)))
2042 static int cdrom_read_cd(struct cdrom_device_info *cdi,
2046 struct cdrom_device_ops *cdo = cdi->ops;
2058 return cdo->generic_packet(cdi, cgc);
2062 static int cdrom_read_block(struct cdrom_device_info *cdi,
2066 struct cdrom_device_ops *cdo = cdi->ops;
2091 return cdo->generic_packet(cdi, cgc);
2094 static int cdrom_read_cdda_old(struct cdrom_device_info *cdi, __u8 __user *ubuf,
2101 cdi->last_sense = 0;
2125 ret = cdrom_read_block(cdi, &cgc, lba, nr, 1, CD_FRAMESIZE_RAW);
2140 static int cdrom_read_cdda_bpc(struct cdrom_device_info *cdi, __u8 __user *ubuf,
2143 struct request_queue *q = cdi->disk->queue;
2152 cdi->last_sense = 0;
2156 if (cdi->cdda_method == CDDA_BPC_SINGLE)
2191 if (blk_execute_rq(q, cdi->disk, rq, 0)) {
2194 cdi->last_sense = s->sense_key;
2212 static int cdrom_read_cdda(struct cdrom_device_info *cdi, __u8 __user *ubuf,
2217 if (cdi->cdda_method == CDDA_OLD)
2218 return cdrom_read_cdda_old(cdi, ubuf, lba, nframes);
2224 ret = cdrom_read_cdda_bpc(cdi, ubuf, lba, nframes);
2232 if (cdi->cdda_method == CDDA_BPC_FULL && nframes > 1) {
2234 cdi->cdda_method = CDDA_BPC_SINGLE;
2243 if (cdi->last_sense != 0x04 && cdi->last_sense != 0x0b)
2246 pr_info("dropping to old style cdda (sense=%x)\n", cdi->last_sense);
2247 cdi->cdda_method = CDDA_OLD;
2248 return cdrom_read_cdda_old(cdi, ubuf, lba, nframes);
2251 static int cdrom_ioctl_multisession(struct cdrom_device_info *cdi,
2260 if (!(cdi->ops->capability & CDC_MULTI_SESSION))
2271 ret = cdi->ops->get_last_session(cdi, &ms_info);
2284 static int cdrom_ioctl_eject(struct cdrom_device_info *cdi)
2290 if (cdi->use_count != 1 || cdi->keeplocked)
2293 int ret = cdi->ops->lock_door(cdi, 0);
2298 return cdi->ops->tray_move(cdi, 1);
2301 static int cdrom_ioctl_closetray(struct cdrom_device_info *cdi)
2307 return cdi->ops->tray_move(cdi, 0);
2310 static int cdrom_ioctl_eject_sw(struct cdrom_device_info *cdi,
2317 if (cdi->keeplocked)
2320 cdi->options &= ~(CDO_AUTO_CLOSE | CDO_AUTO_EJECT);
2322 cdi->options |= CDO_AUTO_CLOSE | CDO_AUTO_EJECT;
2326 static int cdrom_ioctl_media_changed(struct cdrom_device_info *cdi,
2339 return media_changed(cdi, 1);
2341 if ((unsigned int)arg >= cdi->capacity)
2348 ret = cdrom_read_mech_status(cdi, info);
2355 static int cdrom_ioctl_set_options(struct cdrom_device_info *cdi,
2373 return cdi->options;
2379 cdi->options |= (int) arg;
2380 return cdi->options;
2383 static int cdrom_ioctl_clear_options(struct cdrom_device_info *cdi,
2388 cdi->options &= ~(int) arg;
2389 return cdi->options;
2392 static int cdrom_ioctl_select_speed(struct cdrom_device_info *cdi,
2399 return cdi->ops->select_speed(cdi, arg);
2402 static int cdrom_ioctl_select_disc(struct cdrom_device_info *cdi,
2411 if ((int)arg >= cdi->capacity)
2420 if (cdi->ops->select_disc)
2421 return cdi->ops->select_disc(cdi, arg);
2424 return cdrom_select_disc(cdi, arg);
2427 static int cdrom_ioctl_reset(struct cdrom_device_info *cdi,
2437 return cdi->ops->reset(cdi);
2440 static int cdrom_ioctl_lock_door(struct cdrom_device_info *cdi,
2448 cdi->keeplocked = arg ? 1 : 0;
2454 if (cdi->use_count != 1 && !arg && !capable(CAP_SYS_ADMIN))
2456 return cdi->ops->lock_door(cdi, arg);
2459 static int cdrom_ioctl_debug(struct cdrom_device_info *cdi,
2470 static int cdrom_ioctl_get_capability(struct cdrom_device_info *cdi)
2473 return (cdi->ops->capability & ~cdi->mask);
2482 static int cdrom_ioctl_get_mcn(struct cdrom_device_info *cdi,
2490 if (!(cdi->ops->capability & CDC_MCN))
2492 ret = cdi->ops->get_mcn(cdi, &mcn);
2502 static int cdrom_ioctl_drive_status(struct cdrom_device_info *cdi,
2507 if (!(cdi->ops->capability & CDC_DRIVE_STATUS))
2511 return cdi->ops->drive_status(cdi, CDSL_CURRENT);
2512 if (((int)arg >= cdi->capacity))
2514 return cdrom_slot_status(cdi, arg);
2534 static int cdrom_ioctl_disc_status(struct cdrom_device_info *cdi)
2540 cdrom_count_tracks(cdi, &tracks);
2546 if (!tracks.data && !tracks.cdi && !tracks.xa)
2552 if (tracks.cdi > 0)
2564 static int cdrom_ioctl_changer_nslots(struct cdrom_device_info *cdi)
2567 return cdi->capacity;
2570 static int cdrom_ioctl_get_subchnl(struct cdrom_device_info *cdi,
2587 ret = cdi->ops->audio_ioctl(cdi, CDROMSUBCHNL, &q);
2601 static int cdrom_ioctl_read_tochdr(struct cdrom_device_info *cdi,
2612 ret = cdi->ops->audio_ioctl(cdi, CDROMREADTOCHDR, &header);
2622 static int cdrom_ioctl_read_tocentry(struct cdrom_device_info *cdi,
2639 ret = cdi->ops->audio_ioctl(cdi, CDROMREADTOCENTRY, &entry);
2650 static int cdrom_ioctl_play_msf(struct cdrom_device_info *cdi,
2661 return cdi->ops->audio_ioctl(cdi, CDROMPLAYMSF, &msf);
2664 static int cdrom_ioctl_play_trkind(struct cdrom_device_info *cdi,
2677 ret = check_for_audio_disc(cdi, cdi->ops);
2680 return cdi->ops->audio_ioctl(cdi, CDROMPLAYTRKIND, &ti);
2682 static int cdrom_ioctl_volctrl(struct cdrom_device_info *cdi,
2693 return cdi->ops->audio_ioctl(cdi, CDROMVOLCTRL, &volume);
2696 static int cdrom_ioctl_volread(struct cdrom_device_info *cdi,
2707 ret = cdi->ops->audio_ioctl(cdi, CDROMVOLREAD, &volume);
2716 static int cdrom_ioctl_audioctl(struct cdrom_device_info *cdi,
2725 ret = check_for_audio_disc(cdi, cdi->ops);
2728 return cdi->ops->audio_ioctl(cdi, cmd, NULL);
2736 int cdrom_ioctl(struct cdrom_device_info *cdi, struct block_device *bdev,
2751 return cdrom_ioctl_multisession(cdi, argp);
2753 return cdrom_ioctl_eject(cdi);
2755 return cdrom_ioctl_closetray(cdi);
2757 return cdrom_ioctl_eject_sw(cdi, arg);
2759 return cdrom_ioctl_media_changed(cdi, arg);
2761 return cdrom_ioctl_set_options(cdi, arg);
2763 return cdrom_ioctl_clear_options(cdi, arg);
2765 return cdrom_ioctl_select_speed(cdi, arg);
2767 return cdrom_ioctl_select_disc(cdi, arg);
2769 return cdrom_ioctl_reset(cdi, bdev);
2771 return cdrom_ioctl_lock_door(cdi, arg);
2773 return cdrom_ioctl_debug(cdi, arg);
2775 return cdrom_ioctl_get_capability(cdi);
2777 return cdrom_ioctl_get_mcn(cdi, argp);
2779 return cdrom_ioctl_drive_status(cdi, arg);
2781 return cdrom_ioctl_disc_status(cdi);
2783 return cdrom_ioctl_changer_nslots(cdi);
2793 ret = mmc_ioctl(cdi, cmd, arg);
2805 return cdrom_ioctl_get_subchnl(cdi, argp);
2807 return cdrom_ioctl_read_tochdr(cdi, argp);
2809 return cdrom_ioctl_read_tocentry(cdi, argp);
2811 return cdrom_ioctl_play_msf(cdi, argp);
2813 return cdrom_ioctl_play_trkind(cdi, argp);
2815 return cdrom_ioctl_volctrl(cdi, argp);
2817 return cdrom_ioctl_volread(cdi, argp);
2822 return cdrom_ioctl_audioctl(cdi, cmd);
2832 static int cdrom_switch_blocksize(struct cdrom_device_info *cdi, int size)
2834 struct cdrom_device_ops *cdo = cdi->ops;
2854 return cdo->generic_packet(cdi, &cgc);
2857 static noinline int mmc_ioctl_cdrom_read_data(struct cdrom_device_info *cdi,
2892 ret = cdrom_read_block(cdi, cgc, lba, 1, format, blocksize);
2901 ret = cdrom_switch_blocksize(cdi, blocksize);
2905 ret = cdrom_read_cd(cdi, cgc, lba, blocksize, 1);
2906 ret |= cdrom_switch_blocksize(cdi, blocksize);
2915 static noinline int mmc_ioctl_cdrom_read_audio(struct cdrom_device_info *cdi,
2936 return cdrom_read_cdda(cdi, ra.buf, lba, ra.nframes);
2939 static noinline int mmc_ioctl_cdrom_subchannel(struct cdrom_device_info *cdi,
2951 ret = cdrom_read_subchannel(cdi, &q, 0);
2962 static noinline int mmc_ioctl_cdrom_play_msf(struct cdrom_device_info *cdi,
2966 struct cdrom_device_ops *cdo = cdi->ops;
2978 return cdo->generic_packet(cdi, cgc);
2981 static noinline int mmc_ioctl_cdrom_play_blk(struct cdrom_device_info *cdi,
2985 struct cdrom_device_ops *cdo = cdi->ops;
2997 return cdo->generic_packet(cdi, cgc);
3000 static noinline int mmc_ioctl_cdrom_volume(struct cdrom_device_info *cdi,
3017 ret = cdrom_mode_sense(cdi, cgc, GPMODE_AUDIO_CTL_PAGE, 0);
3032 ret = cdrom_mode_sense(cdi, cgc,
3056 ret = cdrom_mode_sense(cdi, cgc, GPMODE_AUDIO_CTL_PAGE, 1);
3068 return cdrom_mode_select(cdi, cgc);
3071 static noinline int mmc_ioctl_cdrom_start_stop(struct cdrom_device_info *cdi,
3075 struct cdrom_device_ops *cdo = cdi->ops;
3081 return cdo->generic_packet(cdi, cgc);
3084 static noinline int mmc_ioctl_cdrom_pause_resume(struct cdrom_device_info *cdi,
3088 struct cdrom_device_ops *cdo = cdi->ops;
3093 return cdo->generic_packet(cdi, cgc);
3096 static noinline int mmc_ioctl_dvd_read_struct(struct cdrom_device_info *cdi,
3117 ret = dvd_read_struct(cdi, s, cgc);
3128 static noinline int mmc_ioctl_dvd_auth(struct cdrom_device_info *cdi,
3137 ret = dvd_do_auth(cdi, &ai);
3144 static noinline int mmc_ioctl_cdrom_next_writable(struct cdrom_device_info *cdi,
3150 ret = cdrom_get_next_writable(cdi, &next);
3157 static noinline int mmc_ioctl_cdrom_last_written(struct cdrom_device_info *cdi,
3163 ret = cdrom_get_last_written(cdi, &last);
3170 static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd,
3184 return mmc_ioctl_cdrom_read_data(cdi, userptr, &cgc, cmd);
3186 return mmc_ioctl_cdrom_read_audio(cdi, userptr);
3188 return mmc_ioctl_cdrom_subchannel(cdi, userptr);
3190 return mmc_ioctl_cdrom_play_msf(cdi, userptr, &cgc);
3192 return mmc_ioctl_cdrom_play_blk(cdi, userptr, &cgc);
3195 return mmc_ioctl_cdrom_volume(cdi, userptr, &cgc, cmd);
3198 return mmc_ioctl_cdrom_start_stop(cdi, &cgc, cmd);
3201 return mmc_ioctl_cdrom_pause_resume(cdi, &cgc, cmd);
3203 return mmc_ioctl_dvd_read_struct(cdi, userptr, &cgc);
3205 return mmc_ioctl_dvd_auth(cdi, userptr);
3207 return mmc_ioctl_cdrom_next_writable(cdi, userptr);
3209 return mmc_ioctl_cdrom_last_written(cdi, userptr);
3215 static int cdrom_get_track_info(struct cdrom_device_info *cdi, __u16 track, __u8 type,
3218 struct cdrom_device_ops *cdo = cdi->ops;
3230 if ((ret = cdo->generic_packet(cdi, &cgc)))
3240 if ((ret = cdo->generic_packet(cdi, &cgc)))
3248 static int cdrom_get_disc_info(struct cdrom_device_info *cdi, disc_information *di)
3250 struct cdrom_device_ops *cdo = cdi->ops;
3260 if ((ret = cdo->generic_packet(cdi, &cgc)))
3273 if ((ret = cdo->generic_packet(cdi, &cgc)))
3282 int cdrom_get_last_written(struct cdrom_device_info *cdi, long *last_written)
3293 ret = cdrom_get_disc_info(cdi, &di);
3300 ti_size = cdrom_get_track_info(cdi, last_track, 1, &ti);
3309 ti_size = cdrom_get_track_info(cdi, last_track, 1, &ti);
3336 if ((ret = cdi->ops->audio_ioctl(cdi, CDROMREADTOCENTRY, &toc)))
3344 static int cdrom_get_next_writable(struct cdrom_device_info *cdi, long *next_writable)
3354 ret = cdrom_get_disc_info(cdi, &di);
3361 ti_size = cdrom_get_track_info(cdi, last_track, 1, &ti);
3370 ti_size = cdrom_get_track_info(cdi, last_track, 1, &ti);
3383 if ((ret = cdrom_get_last_written(cdi, next_writable))) {
3429 struct cdrom_device_info *cdi;
3438 list_for_each_entry(cdi, &cdrom_list, list) {
3442 "\t%s", cdi->name);
3446 "\t%d", cdi->speed);
3450 "\t%d", cdi->capacity);
3557 struct cdrom_device_info *cdi;
3560 list_for_each_entry(cdi, &cdrom_list, list) {
3562 cdi->options |= CDO_AUTO_CLOSE;
3564 cdi->options &= ~CDO_AUTO_CLOSE;
3566 cdi->options |= CDO_AUTO_EJECT;
3568 cdi->options &= ~CDO_AUTO_EJECT;
3570 cdi->options |= CDO_LOCK;
3572 cdi->options &= ~CDO_LOCK;
3574 cdi->options |= CDO_CHECK_TYPE;
3576 cdi->options &= ~CDO_CHECK_TYPE;