Lines Matching refs:cdi

92   cdi->options in various ioctl.
331 /* The (cdo->capability & ~cdi->mask & CDC_XXX) construct was used in
333 #define CDROM_CAN(type) (cdi->ops->capability & ~cdi->mask & (type))
347 int cdrom_dummy_generic_packet(struct cdrom_device_info *cdi,
361 static int cdrom_flush_cache(struct cdrom_device_info *cdi)
370 return cdi->ops->generic_packet(cdi, &cgc);
374 static int cdrom_get_disc_info(struct cdrom_device_info *cdi,
377 const struct cdrom_device_ops *cdo = cdi->ops;
387 ret = cdo->generic_packet(cdi, &cgc);
401 ret = cdo->generic_packet(cdi, &cgc);
424 static int cdrom_mrw_probe_pc(struct cdrom_device_info *cdi)
434 if (!cdrom_mode_sense(cdi, &cgc, MRW_MODE_PC, 0)) {
435 cdi->mrw_mode_page = MRW_MODE_PC;
437 } else if (!cdrom_mode_sense(cdi, &cgc, MRW_MODE_PC_PRE1, 0)) {
438 cdi->mrw_mode_page = MRW_MODE_PC_PRE1;
445 static int cdrom_is_mrw(struct cdrom_device_info *cdi, int *write)
461 if ((ret = cdi->ops->generic_packet(cdi, &cgc)))
469 if ((ret = cdrom_mrw_probe_pc(cdi))) {
477 static int cdrom_mrw_bgformat(struct cdrom_device_info *cdi, int cont)
511 ret = cdi->ops->generic_packet(cdi, &cgc);
518 static int cdrom_mrw_bgformat_susp(struct cdrom_device_info *cdi, int immed)
533 return cdi->ops->generic_packet(cdi, &cgc);
536 static int cdrom_mrw_exit(struct cdrom_device_info *cdi)
541 ret = cdrom_get_disc_info(cdi, &di);
548 ret = cdrom_mrw_bgformat_susp(cdi, 0);
551 if (!ret && cdi->media_written)
552 ret = cdrom_flush_cache(cdi);
557 static int cdrom_mrw_set_lba_space(struct cdrom_device_info *cdi, int space)
569 ret = cdrom_mode_sense(cdi, &cgc, cdi->mrw_mode_page, 0);
580 ret = cdrom_mode_select(cdi, &cgc);
585 cdi->name, mrw_address_space[space]);
589 int register_cdrom(struct gendisk *disk, struct cdrom_device_info *cdi)
592 const struct cdrom_device_ops *cdo = cdi->ops;
604 cdi->disk = disk;
605 disk->cdi = cdi;
617 cdi->mc_flags = 0;
618 cdi->options = CDO_USE_FFLAGS;
621 cdi->options |= (int) CDO_AUTO_CLOSE;
623 cdi->options |= (int) CDO_AUTO_EJECT;
625 cdi->options |= (int) CDO_LOCK;
627 cdi->options |= (int) CDO_CHECK_TYPE;
630 cdi->exit = cdrom_mrw_exit;
632 if (cdi->disk)
633 cdi->cdda_method = CDDA_BPC_FULL;
635 cdi->cdda_method = CDDA_OLD;
639 cd_dbg(CD_REG_UNREG, "drive \"/dev/%s\" registered\n", cdi->name);
641 list_add(&cdi->list, &cdrom_list);
647 void unregister_cdrom(struct cdrom_device_info *cdi)
652 list_del(&cdi->list);
655 if (cdi->exit)
656 cdi->exit(cdi);
658 cd_dbg(CD_REG_UNREG, "drive \"/dev/%s\" unregistered\n", cdi->name);
661 int cdrom_get_media_event(struct cdrom_device_info *cdi,
675 if (cdi->ops->generic_packet(cdi, &cgc))
688 static int cdrom_get_random_writable(struct cdrom_device_info *cdi,
702 if ((ret = cdi->ops->generic_packet(cdi, &cgc)))
709 static int cdrom_has_defect_mgt(struct cdrom_device_info *cdi)
723 if ((ret = cdi->ops->generic_packet(cdi, &cgc)))
734 static int cdrom_is_random_writable(struct cdrom_device_info *cdi, int *write)
741 if ((ret = cdrom_get_random_writable(cdi, &rfd)))
750 static int cdrom_media_erasable(struct cdrom_device_info *cdi)
755 ret = cdrom_get_disc_info(cdi, &di);
765 static int cdrom_dvdram_open_write(struct cdrom_device_info *cdi)
767 int ret = cdrom_media_erasable(cdi);
779 static int cdrom_mrw_open_write(struct cdrom_device_info *cdi)
787 if (cdrom_mrw_set_lba_space(cdi, MRW_LBA_DMA)) {
792 ret = cdrom_get_disc_info(cdi, &di);
812 ret = cdrom_mrw_bgformat(cdi, 1);
817 static int mo_open_write(struct cdrom_device_info *cdi)
831 ret = cdrom_mode_sense(cdi, &cgc, GPMODE_ALL_PAGES, 0);
833 ret = cdrom_mode_sense(cdi, &cgc, GPMODE_VENDOR_PAGE, 0);
836 ret = cdrom_mode_sense(cdi, &cgc, GPMODE_ALL_PAGES, 0);
846 static int cdrom_ram_open_write(struct cdrom_device_info *cdi)
851 if ((ret = cdrom_has_defect_mgt(cdi)))
854 if ((ret = cdrom_get_random_writable(cdi, &rfd)))
863 static void cdrom_mmc3_profile(struct cdrom_device_info *cdi)
877 if ((ret = cdi->ops->generic_packet(cdi, &cgc)))
882 cdi->mmc3_profile = mmc3_profile;
885 static int cdrom_is_dvd_rw(struct cdrom_device_info *cdi)
887 switch (cdi->mmc3_profile) {
900 static int cdrom_open_write(struct cdrom_device_info *cdi)
906 if (!cdrom_is_mrw(cdi, &mrw_write))
912 (void) cdrom_is_random_writable(cdi, &ram_write);
915 cdi->mask &= ~CDC_MRW;
917 cdi->mask |= CDC_MRW;
920 cdi->mask &= ~CDC_MRW_W;
922 cdi->mask |= CDC_MRW_W;
925 cdi->mask &= ~CDC_RAM;
927 cdi->mask |= CDC_RAM;
930 ret = cdrom_mrw_open_write(cdi);
932 ret = cdrom_dvdram_open_write(cdi);
935 ret = cdrom_ram_open_write(cdi);
937 ret = mo_open_write(cdi);
938 else if (!cdrom_is_dvd_rw(cdi))
944 static void cdrom_dvd_rw_close_write(struct cdrom_device_info *cdi)
948 if (cdi->mmc3_profile != 0x1a) {
949 cd_dbg(CD_CLOSE, "%s: No DVD+RW\n", cdi->name);
953 if (!cdi->media_written) {
954 cd_dbg(CD_CLOSE, "%s: DVD+RW media clean\n", cdi->name);
958 pr_info("%s: dirty DVD+RW media, \"finalizing\"\n", cdi->name);
963 cdi->ops->generic_packet(cdi, &cgc);
969 cdi->ops->generic_packet(cdi, &cgc);
976 cdi->ops->generic_packet(cdi, &cgc);
978 cdi->media_written = 0;
981 static int cdrom_close_write(struct cdrom_device_info *cdi)
984 return cdrom_flush_cache(cdi);
991 static void cdrom_count_tracks(struct cdrom_device_info *cdi, tracktype *tracks)
998 tracks->cdi = 0;
1009 ret = cdi->ops->audio_ioctl(cdi, CDROMREADTOCHDR, &header);
1021 if (cdi->ops->audio_ioctl(cdi, CDROMREADTOCENTRY, &entry)) {
1027 tracks->cdi++;
1040 tracks->cdi, tracks->xa);
1044 int open_for_data(struct cdrom_device_info *cdi)
1047 const struct cdrom_device_ops *cdo = cdi->ops;
1053 ret = cdo->drive_status(cdi, CDSL_CURRENT);
1059 cdi->options & CDO_AUTO_CLOSE) {
1061 ret=cdo->tray_move(cdi,0);
1078 ret = cdo->drive_status(cdi, CDSL_CURRENT);
1088 ret = cdo->drive_status(cdi, CDSL_CURRENT);
1094 cdrom_count_tracks(cdi, &tracks);
1103 if (cdi->options & CDO_CHECK_TYPE) {
1120 ret = cdo->open(cdi, 0); /* open for data */
1129 if (CDROM_CAN(CDC_LOCK) && (cdi->options & CDO_LOCK)) {
1130 cdo->lock_door(cdi, 1);
1143 if (CDROM_CAN(CDC_LOCK) && cdi->options & CDO_LOCK) {
1144 cdo->lock_door(cdi, 0);
1158 int cdrom_open(struct cdrom_device_info *cdi, struct block_device *bdev,
1167 cdi->use_count++;
1168 if ((mode & FMODE_NDELAY) && (cdi->options & CDO_USE_FFLAGS)) {
1169 ret = cdi->ops->open(cdi, 1);
1171 ret = open_for_data(cdi);
1175 cdrom_mmc3_profile(cdi);
1178 if (cdrom_open_write(cdi))
1183 cdi->media_written = 0;
1191 cdi->name, cdi->use_count);
1194 if (CDROM_CAN(CDC_LOCK) && cdi->options & CDO_LOCK) {
1195 cdi->ops->lock_door(cdi, 0);
1198 cdi->ops->release(cdi);
1200 cdi->use_count--;
1207 static int check_for_audio_disc(struct cdrom_device_info *cdi,
1213 if (!(cdi->options & CDO_CHECK_TYPE))
1216 ret = cdo->drive_status(cdi, CDSL_CURRENT);
1222 cdi->options & CDO_AUTO_CLOSE) {
1224 ret=cdo->tray_move(cdi,0);
1239 ret = cdo->drive_status(cdi, CDSL_CURRENT);
1251 cdrom_count_tracks(cdi, &tracks);
1261 void cdrom_release(struct cdrom_device_info *cdi, fmode_t mode)
1263 const struct cdrom_device_ops *cdo = cdi->ops;
1268 if (cdi->use_count > 0)
1269 cdi->use_count--;
1271 if (cdi->use_count == 0) {
1273 cdi->name);
1274 cdrom_dvd_rw_close_write(cdi);
1276 if ((cdo->capability & CDC_LOCK) && !cdi->keeplocked) {
1278 cdo->lock_door(cdi, 0);
1282 opened_for_data = !(cdi->options & CDO_USE_FFLAGS) ||
1288 if (CDROM_CAN(CDC_RAM) && !cdi->use_count && cdi->for_data)
1289 cdrom_close_write(cdi);
1291 cdo->release(cdi);
1292 if (cdi->use_count == 0) { /* last process that closes dev*/
1294 cdi->options & CDO_AUTO_EJECT && CDROM_CAN(CDC_OPEN_TRAY))
1295 cdo->tray_move(cdi, 1);
1299 static int cdrom_read_mech_status(struct cdrom_device_info *cdi,
1303 const struct cdrom_device_ops *cdo = cdi->ops;
1311 if (cdi->sanyo_slot) {
1313 buf->hdr.curslot = cdi->sanyo_slot == 3 ? 0 : cdi->sanyo_slot;
1322 cdi->capacity * sizeof(struct cdrom_slot);
1328 return cdo->generic_packet(cdi, &cgc);
1331 static int cdrom_slot_status(struct cdrom_device_info *cdi, int slot)
1337 if (cdi->sanyo_slot)
1344 if ((ret = cdrom_read_mech_status(cdi, info)))
1360 int cdrom_number_of_slots(struct cdrom_device_info *cdi)
1368 cdi->capacity = 0;
1374 if ((status = cdrom_read_mech_status(cdi, info)) == 0)
1383 static int cdrom_load_unload(struct cdrom_device_info *cdi, int slot)
1388 if (cdi->sanyo_slot && slot < 0)
1400 if (cdi->sanyo_slot && -1 < slot) {
1404 cdi->sanyo_slot = slot ? slot : 3;
1407 return cdi->ops->generic_packet(cdi, &cgc);
1410 static int cdrom_select_disc(struct cdrom_device_info *cdi, int slot)
1420 if (cdi->ops->check_events)
1421 cdi->ops->check_events(cdi, 0, slot);
1425 cdi->mc_flags = 0x3;
1426 return cdrom_load_unload(cdi, -1);
1433 if ((ret = cdrom_read_mech_status(cdi, info))) {
1441 if (cdi->use_count > 1 || cdi->keeplocked) {
1458 cdi->mc_flags = 0x3;
1459 if ((ret = cdrom_load_unload(cdi, slot)))
1469 * cdi->{vfs|ioctl}_events are used to buffer pending events for each
1472 * XXX: Locking is non-existent. cdi->ops->check_events() can be
1479 static void cdrom_update_events(struct cdrom_device_info *cdi,
1484 events = cdi->ops->check_events(cdi, clearing, CDSL_CURRENT);
1485 cdi->vfs_events |= events;
1486 cdi->ioctl_events |= events;
1489 unsigned int cdrom_check_events(struct cdrom_device_info *cdi,
1494 cdrom_update_events(cdi, clearing);
1495 events = cdi->vfs_events;
1496 cdi->vfs_events = 0;
1508 int media_changed(struct cdrom_device_info *cdi, int queue)
1511 int ret = !!(cdi->mc_flags & mask);
1519 cdrom_update_events(cdi, DISK_EVENT_MEDIA_CHANGE);
1520 changed = cdi->ioctl_events & DISK_EVENT_MEDIA_CHANGE;
1521 cdi->ioctl_events = 0;
1524 cdi->mc_flags = 0x3; /* set bit on both queues */
1526 cdi->media_written = 0;
1529 cdi->mc_flags &= ~mask; /* clear bit */
1630 static int dvd_do_auth(struct cdrom_device_info *cdi, dvd_authinfo *ai)
1635 const struct cdrom_device_ops *cdo = cdi->ops;
1648 if ((ret = cdo->generic_packet(cdi, &cgc)))
1659 if ((ret = cdo->generic_packet(cdi, &cgc)))
1670 if ((ret = cdo->generic_packet(cdi, &cgc)))
1687 if ((ret = cdo->generic_packet(cdi, &cgc)))
1701 if ((ret = cdo->generic_packet(cdi, &cgc)))
1714 if ((ret = cdo->generic_packet(cdi, &cgc)))
1726 if ((ret = cdo->generic_packet(cdi, &cgc))) {
1738 if ((ret = cdo->generic_packet(cdi, &cgc)))
1749 if ((ret = cdo->generic_packet(cdi, &cgc)))
1766 if ((ret = cdo->generic_packet(cdi, &cgc)))
1778 static int dvd_read_physical(struct cdrom_device_info *cdi, dvd_struct *s,
1783 const struct cdrom_device_ops *cdo = cdi->ops;
1800 ret = cdo->generic_packet(cdi, cgc);
1829 static int dvd_read_copyright(struct cdrom_device_info *cdi, dvd_struct *s,
1834 const struct cdrom_device_ops *cdo = cdi->ops;
1843 ret = cdo->generic_packet(cdi, cgc);
1853 static int dvd_read_disckey(struct cdrom_device_info *cdi, dvd_struct *s,
1858 const struct cdrom_device_ops *cdo = cdi->ops;
1873 ret = cdo->generic_packet(cdi, cgc);
1881 static int dvd_read_bca(struct cdrom_device_info *cdi, dvd_struct *s,
1886 const struct cdrom_device_ops *cdo = cdi->ops;
1897 ret = cdo->generic_packet(cdi, cgc);
1915 static int dvd_read_manufact(struct cdrom_device_info *cdi, dvd_struct *s,
1920 const struct cdrom_device_ops *cdo = cdi->ops;
1934 ret = cdo->generic_packet(cdi, cgc);
1957 static int dvd_read_struct(struct cdrom_device_info *cdi, dvd_struct *s,
1962 return dvd_read_physical(cdi, s, cgc);
1965 return dvd_read_copyright(cdi, s, cgc);
1968 return dvd_read_disckey(cdi, s, cgc);
1971 return dvd_read_bca(cdi, s, cgc);
1974 return dvd_read_manufact(cdi, s, cgc);
1983 int cdrom_mode_sense(struct cdrom_device_info *cdi,
1987 const struct cdrom_device_ops *cdo = cdi->ops;
1996 return cdo->generic_packet(cdi, cgc);
1999 int cdrom_mode_select(struct cdrom_device_info *cdi,
2002 const struct cdrom_device_ops *cdo = cdi->ops;
2011 return cdo->generic_packet(cdi, cgc);
2014 static int cdrom_read_subchannel(struct cdrom_device_info *cdi,
2017 const struct cdrom_device_ops *cdo = cdi->ops;
2029 if ((ret = cdo->generic_packet(cdi, &cgc)))
2061 static int cdrom_read_cd(struct cdrom_device_info *cdi,
2065 const struct cdrom_device_ops *cdo = cdi->ops;
2077 return cdo->generic_packet(cdi, cgc);
2081 static int cdrom_read_block(struct cdrom_device_info *cdi,
2085 const struct cdrom_device_ops *cdo = cdi->ops;
2110 return cdo->generic_packet(cdi, cgc);
2113 static int cdrom_read_cdda_old(struct cdrom_device_info *cdi, __u8 __user *ubuf,
2120 cdi->last_sense = 0;
2144 ret = cdrom_read_block(cdi, &cgc, lba, nr, 1, CD_FRAMESIZE_RAW);
2159 static int cdrom_read_cdda_bpc(struct cdrom_device_info *cdi, __u8 __user *ubuf,
2162 struct request_queue *q = cdi->disk->queue;
2178 cdi->last_sense = 0;
2182 if (cdi->cdda_method == CDDA_BPC_SINGLE)
2217 blk_execute_rq(q, cdi->disk, rq, 0);
2224 cdi->last_sense = sshdr.sense_key;
2242 static int cdrom_read_cdda(struct cdrom_device_info *cdi, __u8 __user *ubuf,
2247 if (cdi->cdda_method == CDDA_OLD)
2248 return cdrom_read_cdda_old(cdi, ubuf, lba, nframes);
2254 ret = cdrom_read_cdda_bpc(cdi, ubuf, lba, nframes);
2262 if (cdi->cdda_method == CDDA_BPC_FULL && nframes > 1) {
2264 cdi->cdda_method = CDDA_BPC_SINGLE;
2273 if (cdi->last_sense != 0x04 && cdi->last_sense != 0x0b)
2276 pr_info("dropping to old style cdda (sense=%x)\n", cdi->last_sense);
2277 cdi->cdda_method = CDDA_OLD;
2278 return cdrom_read_cdda_old(cdi, ubuf, lba, nframes);
2281 int cdrom_multisession(struct cdrom_device_info *cdi,
2287 if (!(cdi->ops->capability & CDC_MULTI_SESSION))
2295 ret = cdi->ops->get_last_session(cdi, info);
2303 static int cdrom_ioctl_multisession(struct cdrom_device_info *cdi,
2313 ret = cdrom_multisession(cdi, &info);
2323 static int cdrom_ioctl_eject(struct cdrom_device_info *cdi)
2329 if (cdi->use_count != 1 || cdi->keeplocked)
2332 int ret = cdi->ops->lock_door(cdi, 0);
2337 return cdi->ops->tray_move(cdi, 1);
2340 static int cdrom_ioctl_closetray(struct cdrom_device_info *cdi)
2346 return cdi->ops->tray_move(cdi, 0);
2349 static int cdrom_ioctl_eject_sw(struct cdrom_device_info *cdi,
2356 if (cdi->keeplocked)
2359 cdi->options &= ~(CDO_AUTO_CLOSE | CDO_AUTO_EJECT);
2361 cdi->options |= CDO_AUTO_CLOSE | CDO_AUTO_EJECT;
2365 static int cdrom_ioctl_media_changed(struct cdrom_device_info *cdi,
2378 return media_changed(cdi, 1);
2380 if (arg >= cdi->capacity)
2387 ret = cdrom_read_mech_status(cdi, info);
2394 static int cdrom_ioctl_set_options(struct cdrom_device_info *cdi,
2412 return cdi->options;
2418 cdi->options |= (int) arg;
2419 return cdi->options;
2422 static int cdrom_ioctl_clear_options(struct cdrom_device_info *cdi,
2427 cdi->options &= ~(int) arg;
2428 return cdi->options;
2431 static int cdrom_ioctl_select_speed(struct cdrom_device_info *cdi,
2438 return cdi->ops->select_speed(cdi, arg);
2441 static int cdrom_ioctl_select_disc(struct cdrom_device_info *cdi,
2450 if (arg >= cdi->capacity)
2459 if (cdi->ops->select_disc)
2460 return cdi->ops->select_disc(cdi, arg);
2463 return cdrom_select_disc(cdi, arg);
2466 static int cdrom_ioctl_reset(struct cdrom_device_info *cdi,
2476 return cdi->ops->reset(cdi);
2479 static int cdrom_ioctl_lock_door(struct cdrom_device_info *cdi,
2487 cdi->keeplocked = arg ? 1 : 0;
2493 if (cdi->use_count != 1 && !arg && !capable(CAP_SYS_ADMIN))
2495 return cdi->ops->lock_door(cdi, arg);
2498 static int cdrom_ioctl_debug(struct cdrom_device_info *cdi,
2509 static int cdrom_ioctl_get_capability(struct cdrom_device_info *cdi)
2512 return (cdi->ops->capability & ~cdi->mask);
2521 static int cdrom_ioctl_get_mcn(struct cdrom_device_info *cdi,
2529 if (!(cdi->ops->capability & CDC_MCN))
2531 ret = cdi->ops->get_mcn(cdi, &mcn);
2541 static int cdrom_ioctl_drive_status(struct cdrom_device_info *cdi,
2546 if (!(cdi->ops->capability & CDC_DRIVE_STATUS))
2550 return cdi->ops->drive_status(cdi, CDSL_CURRENT);
2551 if (arg >= cdi->capacity)
2553 return cdrom_slot_status(cdi, arg);
2573 static int cdrom_ioctl_disc_status(struct cdrom_device_info *cdi)
2579 cdrom_count_tracks(cdi, &tracks);
2585 if (!tracks.data && !tracks.cdi && !tracks.xa)
2591 if (tracks.cdi > 0)
2603 static int cdrom_ioctl_changer_nslots(struct cdrom_device_info *cdi)
2606 return cdi->capacity;
2609 static int cdrom_ioctl_get_subchnl(struct cdrom_device_info *cdi,
2626 ret = cdi->ops->audio_ioctl(cdi, CDROMSUBCHNL, &q);
2640 static int cdrom_ioctl_read_tochdr(struct cdrom_device_info *cdi,
2651 ret = cdi->ops->audio_ioctl(cdi, CDROMREADTOCHDR, &header);
2661 int cdrom_read_tocentry(struct cdrom_device_info *cdi,
2672 ret = cdi->ops->audio_ioctl(cdi, CDROMREADTOCENTRY, entry);
2680 static int cdrom_ioctl_read_tocentry(struct cdrom_device_info *cdi,
2688 ret = cdrom_read_tocentry(cdi, &entry);
2694 static int cdrom_ioctl_play_msf(struct cdrom_device_info *cdi,
2705 return cdi->ops->audio_ioctl(cdi, CDROMPLAYMSF, &msf);
2708 static int cdrom_ioctl_play_trkind(struct cdrom_device_info *cdi,
2721 ret = check_for_audio_disc(cdi, cdi->ops);
2724 return cdi->ops->audio_ioctl(cdi, CDROMPLAYTRKIND, &ti);
2726 static int cdrom_ioctl_volctrl(struct cdrom_device_info *cdi,
2737 return cdi->ops->audio_ioctl(cdi, CDROMVOLCTRL, &volume);
2740 static int cdrom_ioctl_volread(struct cdrom_device_info *cdi,
2751 ret = cdi->ops->audio_ioctl(cdi, CDROMVOLREAD, &volume);
2760 static int cdrom_ioctl_audioctl(struct cdrom_device_info *cdi,
2769 ret = check_for_audio_disc(cdi, cdi->ops);
2772 return cdi->ops->audio_ioctl(cdi, cmd, NULL);
2779 static int cdrom_switch_blocksize(struct cdrom_device_info *cdi, int size)
2781 const struct cdrom_device_ops *cdo = cdi->ops;
2801 return cdo->generic_packet(cdi, &cgc);
2804 static int cdrom_get_track_info(struct cdrom_device_info *cdi,
2807 const struct cdrom_device_ops *cdo = cdi->ops;
2819 ret = cdo->generic_packet(cdi, &cgc);
2830 ret = cdo->generic_packet(cdi, &cgc);
2840 int cdrom_get_last_written(struct cdrom_device_info *cdi, long *last_written)
2851 ret = cdrom_get_disc_info(cdi, &di);
2858 ti_size = cdrom_get_track_info(cdi, last_track, 1, &ti);
2867 ti_size = cdrom_get_track_info(cdi, last_track, 1, &ti);
2897 if ((ret = cdi->ops->audio_ioctl(cdi, CDROMREADTOCENTRY, &toc)))
2905 static int cdrom_get_next_writable(struct cdrom_device_info *cdi,
2916 ret = cdrom_get_disc_info(cdi, &di);
2923 ti_size = cdrom_get_track_info(cdi, last_track, 1, &ti);
2932 ti_size = cdrom_get_track_info(cdi, last_track, 1, &ti);
2945 ret = cdrom_get_last_written(cdi, next_writable);
2955 static noinline int mmc_ioctl_cdrom_read_data(struct cdrom_device_info *cdi,
2991 ret = cdrom_read_block(cdi, cgc, lba, 1, format, blocksize);
3000 ret = cdrom_switch_blocksize(cdi, blocksize);
3004 ret = cdrom_read_cd(cdi, cgc, lba, blocksize, 1);
3005 ret |= cdrom_switch_blocksize(cdi, blocksize);
3014 static noinline int mmc_ioctl_cdrom_read_audio(struct cdrom_device_info *cdi,
3059 return cdrom_read_cdda(cdi, ra.buf, lba, ra.nframes);
3062 static noinline int mmc_ioctl_cdrom_subchannel(struct cdrom_device_info *cdi,
3075 ret = cdrom_read_subchannel(cdi, &q, 0);
3087 static noinline int mmc_ioctl_cdrom_play_msf(struct cdrom_device_info *cdi,
3091 const struct cdrom_device_ops *cdo = cdi->ops;
3104 return cdo->generic_packet(cdi, cgc);
3107 static noinline int mmc_ioctl_cdrom_play_blk(struct cdrom_device_info *cdi,
3111 const struct cdrom_device_ops *cdo = cdi->ops;
3124 return cdo->generic_packet(cdi, cgc);
3127 static noinline int mmc_ioctl_cdrom_volume(struct cdrom_device_info *cdi,
3146 ret = cdrom_mode_sense(cdi, cgc, GPMODE_AUDIO_CTL_PAGE, 0);
3161 ret = cdrom_mode_sense(cdi, cgc,
3187 ret = cdrom_mode_sense(cdi, cgc, GPMODE_AUDIO_CTL_PAGE, 1);
3199 return cdrom_mode_select(cdi, cgc);
3202 static noinline int mmc_ioctl_cdrom_start_stop(struct cdrom_device_info *cdi,
3206 const struct cdrom_device_ops *cdo = cdi->ops;
3212 return cdo->generic_packet(cdi, cgc);
3215 static noinline int mmc_ioctl_cdrom_pause_resume(struct cdrom_device_info *cdi,
3219 const struct cdrom_device_ops *cdo = cdi->ops;
3224 return cdo->generic_packet(cdi, cgc);
3227 static noinline int mmc_ioctl_dvd_read_struct(struct cdrom_device_info *cdi,
3244 ret = dvd_read_struct(cdi, s, cgc);
3255 static noinline int mmc_ioctl_dvd_auth(struct cdrom_device_info *cdi,
3265 ret = dvd_do_auth(cdi, &ai);
3273 static noinline int mmc_ioctl_cdrom_next_writable(struct cdrom_device_info *cdi,
3279 ret = cdrom_get_next_writable(cdi, &next);
3287 static noinline int mmc_ioctl_cdrom_last_written(struct cdrom_device_info *cdi,
3293 ret = cdrom_get_last_written(cdi, &last);
3302 static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd,
3316 return mmc_ioctl_cdrom_read_data(cdi, userptr, &cgc, cmd);
3318 return mmc_ioctl_cdrom_read_audio(cdi, userptr);
3320 return mmc_ioctl_cdrom_subchannel(cdi, userptr);
3322 return mmc_ioctl_cdrom_play_msf(cdi, userptr, &cgc);
3324 return mmc_ioctl_cdrom_play_blk(cdi, userptr, &cgc);
3327 return mmc_ioctl_cdrom_volume(cdi, userptr, &cgc, cmd);
3330 return mmc_ioctl_cdrom_start_stop(cdi, &cgc, cmd);
3333 return mmc_ioctl_cdrom_pause_resume(cdi, &cgc, cmd);
3335 return mmc_ioctl_dvd_read_struct(cdi, userptr, &cgc);
3337 return mmc_ioctl_dvd_auth(cdi, userptr);
3339 return mmc_ioctl_cdrom_next_writable(cdi, userptr);
3341 return mmc_ioctl_cdrom_last_written(cdi, userptr);
3352 int cdrom_ioctl(struct cdrom_device_info *cdi, struct block_device *bdev,
3367 return cdrom_ioctl_multisession(cdi, argp);
3369 return cdrom_ioctl_eject(cdi);
3371 return cdrom_ioctl_closetray(cdi);
3373 return cdrom_ioctl_eject_sw(cdi, arg);
3375 return cdrom_ioctl_media_changed(cdi, arg);
3377 return cdrom_ioctl_set_options(cdi, arg);
3379 return cdrom_ioctl_clear_options(cdi, arg);
3381 return cdrom_ioctl_select_speed(cdi, arg);
3383 return cdrom_ioctl_select_disc(cdi, arg);
3385 return cdrom_ioctl_reset(cdi, bdev);
3387 return cdrom_ioctl_lock_door(cdi, arg);
3389 return cdrom_ioctl_debug(cdi, arg);
3391 return cdrom_ioctl_get_capability(cdi);
3393 return cdrom_ioctl_get_mcn(cdi, argp);
3395 return cdrom_ioctl_drive_status(cdi, arg);
3397 return cdrom_ioctl_disc_status(cdi);
3399 return cdrom_ioctl_changer_nslots(cdi);
3409 ret = mmc_ioctl(cdi, cmd, arg);
3421 return cdrom_ioctl_get_subchnl(cdi, argp);
3423 return cdrom_ioctl_read_tochdr(cdi, argp);
3425 return cdrom_ioctl_read_tocentry(cdi, argp);
3427 return cdrom_ioctl_play_msf(cdi, argp);
3429 return cdrom_ioctl_play_trkind(cdi, argp);
3431 return cdrom_ioctl_volctrl(cdi, argp);
3433 return cdrom_ioctl_volread(cdi, argp);
3438 return cdrom_ioctl_audioctl(cdi, cmd);
3480 struct cdrom_device_info *cdi;
3489 list_for_each_entry(cdi, &cdrom_list, list) {
3493 "\t%s", cdi->name);
3497 "\t%d", cdi->speed);
3501 "\t%d", cdi->capacity);
3608 struct cdrom_device_info *cdi;
3611 list_for_each_entry(cdi, &cdrom_list, list) {
3613 cdi->options |= CDO_AUTO_CLOSE;
3615 cdi->options &= ~CDO_AUTO_CLOSE;
3617 cdi->options |= CDO_AUTO_EJECT;
3619 cdi->options &= ~CDO_AUTO_EJECT;
3621 cdi->options |= CDO_LOCK;
3623 cdi->options &= ~CDO_LOCK;
3625 cdi->options |= CDO_CHECK_TYPE;
3627 cdi->options &= ~CDO_CHECK_TYPE;