Lines Matching defs:cdi

83   cdi->options in various ioctl.
322 /* The (cdo->capability & ~cdi->mask & CDC_XXX) construct was used in
324 #define CDROM_CAN(type) (cdi->ops->capability & ~cdi->mask & (type))
338 static void signal_media_change(struct cdrom_device_info *cdi)
340 cdi->mc_flags = 0x3; /* set media changed bits, on both queues */
341 cdi->last_media_change_ms = ktime_to_ms(ktime_get());
344 int cdrom_dummy_generic_packet(struct cdrom_device_info *cdi,
358 static int cdrom_flush_cache(struct cdrom_device_info *cdi)
367 return cdi->ops->generic_packet(cdi, &cgc);
371 static int cdrom_get_disc_info(struct cdrom_device_info *cdi,
374 const struct cdrom_device_ops *cdo = cdi->ops;
384 ret = cdo->generic_packet(cdi, &cgc);
398 ret = cdo->generic_packet(cdi, &cgc);
421 static int cdrom_mrw_probe_pc(struct cdrom_device_info *cdi)
431 if (!cdrom_mode_sense(cdi, &cgc, MRW_MODE_PC, 0)) {
432 cdi->mrw_mode_page = MRW_MODE_PC;
434 } else if (!cdrom_mode_sense(cdi, &cgc, MRW_MODE_PC_PRE1, 0)) {
435 cdi->mrw_mode_page = MRW_MODE_PC_PRE1;
442 static int cdrom_is_mrw(struct cdrom_device_info *cdi, int *write)
458 if ((ret = cdi->ops->generic_packet(cdi, &cgc)))
466 if ((ret = cdrom_mrw_probe_pc(cdi))) {
474 static int cdrom_mrw_bgformat(struct cdrom_device_info *cdi, int cont)
508 ret = cdi->ops->generic_packet(cdi, &cgc);
515 static int cdrom_mrw_bgformat_susp(struct cdrom_device_info *cdi, int immed)
530 return cdi->ops->generic_packet(cdi, &cgc);
533 static int cdrom_mrw_exit(struct cdrom_device_info *cdi)
538 ret = cdrom_get_disc_info(cdi, &di);
545 ret = cdrom_mrw_bgformat_susp(cdi, 0);
548 if (!ret && cdi->media_written)
549 ret = cdrom_flush_cache(cdi);
554 static int cdrom_mrw_set_lba_space(struct cdrom_device_info *cdi, int space)
566 ret = cdrom_mode_sense(cdi, &cgc, cdi->mrw_mode_page, 0);
577 ret = cdrom_mode_select(cdi, &cgc);
582 cdi->name, mrw_address_space[space]);
586 int register_cdrom(struct gendisk *disk, struct cdrom_device_info *cdi)
589 const struct cdrom_device_ops *cdo = cdi->ops;
601 cdi->disk = disk;
602 disk->cdi = cdi;
614 cdi->mc_flags = 0;
615 cdi->options = CDO_USE_FFLAGS;
616 cdi->last_media_change_ms = ktime_to_ms(ktime_get());
619 cdi->options |= (int) CDO_AUTO_CLOSE;
621 cdi->options |= (int) CDO_AUTO_EJECT;
623 cdi->options |= (int) CDO_LOCK;
625 cdi->options |= (int) CDO_CHECK_TYPE;
628 cdi->exit = cdrom_mrw_exit;
630 if (cdi->ops->read_cdda_bpc)
631 cdi->cdda_method = CDDA_BPC_FULL;
633 cdi->cdda_method = CDDA_OLD;
637 cd_dbg(CD_REG_UNREG, "drive \"/dev/%s\" registered\n", cdi->name);
639 list_add(&cdi->list, &cdrom_list);
646 void unregister_cdrom(struct cdrom_device_info *cdi)
651 list_del(&cdi->list);
654 if (cdi->exit)
655 cdi->exit(cdi);
657 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))
689 static int cdrom_get_random_writable(struct cdrom_device_info *cdi,
703 if ((ret = cdi->ops->generic_packet(cdi, &cgc)))
710 static int cdrom_has_defect_mgt(struct cdrom_device_info *cdi)
724 if ((ret = cdi->ops->generic_packet(cdi, &cgc)))
735 static int cdrom_is_random_writable(struct cdrom_device_info *cdi, int *write)
742 if ((ret = cdrom_get_random_writable(cdi, &rfd)))
751 static int cdrom_media_erasable(struct cdrom_device_info *cdi)
756 ret = cdrom_get_disc_info(cdi, &di);
766 static int cdrom_dvdram_open_write(struct cdrom_device_info *cdi)
768 int ret = cdrom_media_erasable(cdi);
780 static int cdrom_mrw_open_write(struct cdrom_device_info *cdi)
788 if (cdrom_mrw_set_lba_space(cdi, MRW_LBA_DMA)) {
793 ret = cdrom_get_disc_info(cdi, &di);
813 ret = cdrom_mrw_bgformat(cdi, 1);
818 static int mo_open_write(struct cdrom_device_info *cdi)
832 ret = cdrom_mode_sense(cdi, &cgc, GPMODE_ALL_PAGES, 0);
834 ret = cdrom_mode_sense(cdi, &cgc, GPMODE_VENDOR_PAGE, 0);
837 ret = cdrom_mode_sense(cdi, &cgc, GPMODE_ALL_PAGES, 0);
847 static int cdrom_ram_open_write(struct cdrom_device_info *cdi)
852 if ((ret = cdrom_has_defect_mgt(cdi)))
855 if ((ret = cdrom_get_random_writable(cdi, &rfd)))
864 static void cdrom_mmc3_profile(struct cdrom_device_info *cdi)
878 if (cdi->ops->generic_packet(cdi, &cgc))
883 cdi->mmc3_profile = mmc3_profile;
886 static int cdrom_is_dvd_rw(struct cdrom_device_info *cdi)
888 switch (cdi->mmc3_profile) {
901 static int cdrom_open_write(struct cdrom_device_info *cdi)
907 if (!cdrom_is_mrw(cdi, &mrw_write))
913 (void) cdrom_is_random_writable(cdi, &ram_write);
916 cdi->mask &= ~CDC_MRW;
918 cdi->mask |= CDC_MRW;
921 cdi->mask &= ~CDC_MRW_W;
923 cdi->mask |= CDC_MRW_W;
926 cdi->mask &= ~CDC_RAM;
928 cdi->mask |= CDC_RAM;
931 ret = cdrom_mrw_open_write(cdi);
933 ret = cdrom_dvdram_open_write(cdi);
936 ret = cdrom_ram_open_write(cdi);
938 ret = mo_open_write(cdi);
939 else if (!cdrom_is_dvd_rw(cdi))
945 static void cdrom_dvd_rw_close_write(struct cdrom_device_info *cdi)
949 if (cdi->mmc3_profile != 0x1a) {
950 cd_dbg(CD_CLOSE, "%s: No DVD+RW\n", cdi->name);
954 if (!cdi->media_written) {
955 cd_dbg(CD_CLOSE, "%s: DVD+RW media clean\n", cdi->name);
959 pr_info("%s: dirty DVD+RW media, \"finalizing\"\n", cdi->name);
964 cdi->ops->generic_packet(cdi, &cgc);
970 cdi->ops->generic_packet(cdi, &cgc);
977 cdi->ops->generic_packet(cdi, &cgc);
979 cdi->media_written = 0;
983 static void cdrom_count_tracks(struct cdrom_device_info *cdi, tracktype *tracks)
990 tracks->cdi = 0;
1001 ret = cdi->ops->audio_ioctl(cdi, CDROMREADTOCHDR, &header);
1013 if (cdi->ops->audio_ioctl(cdi, CDROMREADTOCENTRY, &entry)) {
1019 tracks->cdi++;
1032 tracks->cdi, tracks->xa);
1036 int open_for_data(struct cdrom_device_info *cdi)
1039 const struct cdrom_device_ops *cdo = cdi->ops;
1045 ret = cdo->drive_status(cdi, CDSL_CURRENT);
1051 cdi->options & CDO_AUTO_CLOSE) {
1053 ret=cdo->tray_move(cdi,0);
1070 ret = cdo->drive_status(cdi, CDSL_CURRENT);
1080 ret = cdo->drive_status(cdi, CDSL_CURRENT);
1086 cdrom_count_tracks(cdi, &tracks);
1095 if (cdi->options & CDO_CHECK_TYPE) {
1112 ret = cdo->open(cdi, 0); /* open for data */
1121 if (CDROM_CAN(CDC_LOCK) && (cdi->options & CDO_LOCK)) {
1122 cdo->lock_door(cdi, 1);
1135 if (CDROM_CAN(CDC_LOCK) && cdi->options & CDO_LOCK) {
1136 cdo->lock_door(cdi, 0);
1150 int cdrom_open(struct cdrom_device_info *cdi, blk_mode_t mode)
1158 cdi->use_count++;
1159 if ((mode & BLK_OPEN_NDELAY) && (cdi->options & CDO_USE_FFLAGS)) {
1160 ret = cdi->ops->open(cdi, 1);
1162 ret = open_for_data(cdi);
1166 cdrom_mmc3_profile(cdi);
1169 if (cdrom_open_write(cdi))
1174 cdi->media_written = 0;
1176 cdi->opened_for_data = true;
1183 cdi->name, cdi->use_count);
1186 if (CDROM_CAN(CDC_LOCK) && cdi->options & CDO_LOCK) {
1187 cdi->ops->lock_door(cdi, 0);
1190 cdi->ops->release(cdi);
1192 cdi->use_count--;
1200 static int check_for_audio_disc(struct cdrom_device_info *cdi,
1206 if (!(cdi->options & CDO_CHECK_TYPE))
1209 ret = cdo->drive_status(cdi, CDSL_CURRENT);
1215 cdi->options & CDO_AUTO_CLOSE) {
1217 ret=cdo->tray_move(cdi,0);
1232 ret = cdo->drive_status(cdi, CDSL_CURRENT);
1244 cdrom_count_tracks(cdi, &tracks);
1254 void cdrom_release(struct cdrom_device_info *cdi)
1256 const struct cdrom_device_ops *cdo = cdi->ops;
1260 if (cdi->use_count > 0)
1261 cdi->use_count--;
1263 if (cdi->use_count == 0) {
1265 cdi->name);
1266 cdrom_dvd_rw_close_write(cdi);
1268 if ((cdo->capability & CDC_LOCK) && !cdi->keeplocked) {
1270 cdo->lock_door(cdi, 0);
1274 cdo->release(cdi);
1276 if (cdi->use_count == 0 && cdi->opened_for_data) {
1277 if (cdi->options & CDO_AUTO_EJECT && CDROM_CAN(CDC_OPEN_TRAY))
1278 cdo->tray_move(cdi, 1);
1279 cdi->opened_for_data = false;
1284 static int cdrom_read_mech_status(struct cdrom_device_info *cdi,
1288 const struct cdrom_device_ops *cdo = cdi->ops;
1296 if (cdi->sanyo_slot) {
1298 buf->hdr.curslot = cdi->sanyo_slot == 3 ? 0 : cdi->sanyo_slot;
1307 cdi->capacity * sizeof(struct cdrom_slot);
1313 return cdo->generic_packet(cdi, &cgc);
1316 static int cdrom_slot_status(struct cdrom_device_info *cdi, int slot)
1322 if (cdi->sanyo_slot)
1329 if ((ret = cdrom_read_mech_status(cdi, info)))
1345 int cdrom_number_of_slots(struct cdrom_device_info *cdi)
1352 cdi->capacity = 0;
1358 if (cdrom_read_mech_status(cdi, info) == 0)
1368 static int cdrom_load_unload(struct cdrom_device_info *cdi, int slot)
1373 if (cdi->sanyo_slot && slot < 0)
1385 if (cdi->sanyo_slot && -1 < slot) {
1389 cdi->sanyo_slot = slot ? slot : 3;
1392 return cdi->ops->generic_packet(cdi, &cgc);
1395 static int cdrom_select_disc(struct cdrom_device_info *cdi, int slot)
1405 if (cdi->ops->check_events)
1406 cdi->ops->check_events(cdi, 0, slot);
1409 signal_media_change(cdi);
1410 return cdrom_load_unload(cdi, -1);
1417 if ((ret = cdrom_read_mech_status(cdi, info))) {
1425 if (cdi->use_count > 1 || cdi->keeplocked) {
1442 signal_media_change(cdi);
1443 if ((ret = cdrom_load_unload(cdi, slot)))
1453 * cdi->{vfs|ioctl}_events are used to buffer pending events for each
1456 * XXX: Locking is non-existent. cdi->ops->check_events() can be
1463 static void cdrom_update_events(struct cdrom_device_info *cdi,
1468 events = cdi->ops->check_events(cdi, clearing, CDSL_CURRENT);
1469 cdi->vfs_events |= events;
1470 cdi->ioctl_events |= events;
1473 unsigned int cdrom_check_events(struct cdrom_device_info *cdi,
1478 cdrom_update_events(cdi, clearing);
1479 events = cdi->vfs_events;
1480 cdi->vfs_events = 0;
1492 int media_changed(struct cdrom_device_info *cdi, int queue)
1495 int ret = !!(cdi->mc_flags & mask);
1503 cdrom_update_events(cdi, DISK_EVENT_MEDIA_CHANGE);
1504 changed = cdi->ioctl_events & DISK_EVENT_MEDIA_CHANGE;
1505 cdi->ioctl_events = 0;
1508 signal_media_change(cdi);
1510 cdi->media_written = 0;
1513 cdi->mc_flags &= ~mask; /* clear bit */
1615 static int dvd_do_auth(struct cdrom_device_info *cdi, dvd_authinfo *ai)
1620 const struct cdrom_device_ops *cdo = cdi->ops;
1633 if ((ret = cdo->generic_packet(cdi, &cgc)))
1644 if ((ret = cdo->generic_packet(cdi, &cgc)))
1655 if ((ret = cdo->generic_packet(cdi, &cgc)))
1672 if ((ret = cdo->generic_packet(cdi, &cgc)))
1686 if ((ret = cdo->generic_packet(cdi, &cgc)))
1699 if ((ret = cdo->generic_packet(cdi, &cgc)))
1711 if ((ret = cdo->generic_packet(cdi, &cgc))) {
1723 if ((ret = cdo->generic_packet(cdi, &cgc)))
1734 if ((ret = cdo->generic_packet(cdi, &cgc)))
1751 if ((ret = cdo->generic_packet(cdi, &cgc)))
1763 static int dvd_read_physical(struct cdrom_device_info *cdi, dvd_struct *s,
1768 const struct cdrom_device_ops *cdo = cdi->ops;
1785 ret = cdo->generic_packet(cdi, cgc);
1814 static int dvd_read_copyright(struct cdrom_device_info *cdi, dvd_struct *s,
1819 const struct cdrom_device_ops *cdo = cdi->ops;
1828 ret = cdo->generic_packet(cdi, cgc);
1838 static int dvd_read_disckey(struct cdrom_device_info *cdi, dvd_struct *s,
1843 const struct cdrom_device_ops *cdo = cdi->ops;
1858 ret = cdo->generic_packet(cdi, cgc);
1866 static int dvd_read_bca(struct cdrom_device_info *cdi, dvd_struct *s,
1871 const struct cdrom_device_ops *cdo = cdi->ops;
1882 ret = cdo->generic_packet(cdi, cgc);
1900 static int dvd_read_manufact(struct cdrom_device_info *cdi, dvd_struct *s,
1905 const struct cdrom_device_ops *cdo = cdi->ops;
1919 ret = cdo->generic_packet(cdi, cgc);
1942 static int dvd_read_struct(struct cdrom_device_info *cdi, dvd_struct *s,
1947 return dvd_read_physical(cdi, s, cgc);
1950 return dvd_read_copyright(cdi, s, cgc);
1953 return dvd_read_disckey(cdi, s, cgc);
1956 return dvd_read_bca(cdi, s, cgc);
1959 return dvd_read_manufact(cdi, s, cgc);
1968 int cdrom_mode_sense(struct cdrom_device_info *cdi,
1972 const struct cdrom_device_ops *cdo = cdi->ops;
1981 return cdo->generic_packet(cdi, cgc);
1985 int cdrom_mode_select(struct cdrom_device_info *cdi,
1988 const struct cdrom_device_ops *cdo = cdi->ops;
1997 return cdo->generic_packet(cdi, cgc);
2001 static int cdrom_read_subchannel(struct cdrom_device_info *cdi,
2004 const struct cdrom_device_ops *cdo = cdi->ops;
2016 if ((ret = cdo->generic_packet(cdi, &cgc)))
2048 static int cdrom_read_cd(struct cdrom_device_info *cdi,
2052 const struct cdrom_device_ops *cdo = cdi->ops;
2064 return cdo->generic_packet(cdi, cgc);
2068 static int cdrom_read_block(struct cdrom_device_info *cdi,
2072 const struct cdrom_device_ops *cdo = cdi->ops;
2097 return cdo->generic_packet(cdi, cgc);
2100 static int cdrom_read_cdda_old(struct cdrom_device_info *cdi, __u8 __user *ubuf,
2107 cdi->last_sense = 0;
2131 ret = cdrom_read_block(cdi, &cgc, lba, nr, 1, CD_FRAMESIZE_RAW);
2146 static int cdrom_read_cdda_bpc(struct cdrom_device_info *cdi, __u8 __user *ubuf,
2149 int max_frames = (queue_max_sectors(cdi->disk->queue) << 9) /
2153 cdi->last_sense = 0;
2156 if (cdi->cdda_method == CDDA_BPC_SINGLE)
2161 ret = cdi->ops->read_cdda_bpc(cdi, ubuf, lba, nr,
2162 &cdi->last_sense);
2174 static int cdrom_read_cdda(struct cdrom_device_info *cdi, __u8 __user *ubuf,
2179 if (cdi->cdda_method == CDDA_OLD)
2180 return cdrom_read_cdda_old(cdi, ubuf, lba, nframes);
2186 ret = cdrom_read_cdda_bpc(cdi, ubuf, lba, nframes);
2194 if (cdi->cdda_method == CDDA_BPC_FULL && nframes > 1) {
2196 cdi->cdda_method = CDDA_BPC_SINGLE;
2205 if (cdi->last_sense != 0x04 && cdi->last_sense != 0x0b)
2208 pr_info("dropping to old style cdda (sense=%x)\n", cdi->last_sense);
2209 cdi->cdda_method = CDDA_OLD;
2210 return cdrom_read_cdda_old(cdi, ubuf, lba, nframes);
2213 int cdrom_multisession(struct cdrom_device_info *cdi,
2219 if (!(cdi->ops->capability & CDC_MULTI_SESSION))
2227 ret = cdi->ops->get_last_session(cdi, info);
2235 static int cdrom_ioctl_multisession(struct cdrom_device_info *cdi,
2245 ret = cdrom_multisession(cdi, &info);
2255 static int cdrom_ioctl_eject(struct cdrom_device_info *cdi)
2261 if (cdi->use_count != 1 || cdi->keeplocked)
2264 int ret = cdi->ops->lock_door(cdi, 0);
2269 return cdi->ops->tray_move(cdi, 1);
2272 static int cdrom_ioctl_closetray(struct cdrom_device_info *cdi)
2278 return cdi->ops->tray_move(cdi, 0);
2281 static int cdrom_ioctl_eject_sw(struct cdrom_device_info *cdi,
2288 if (cdi->keeplocked)
2291 cdi->options &= ~(CDO_AUTO_CLOSE | CDO_AUTO_EJECT);
2293 cdi->options |= CDO_AUTO_CLOSE | CDO_AUTO_EJECT;
2297 static int cdrom_ioctl_media_changed(struct cdrom_device_info *cdi,
2310 return media_changed(cdi, 1);
2312 if (arg >= cdi->capacity)
2322 ret = cdrom_read_mech_status(cdi, info);
2340 static int cdrom_ioctl_timed_media_change(struct cdrom_device_info *cdi,
2353 ret = cdrom_ioctl_media_changed(cdi, CDSL_CURRENT);
2361 if (tmp_info.last_media_change - cdi->last_media_change_ms < 0)
2364 tmp_info.last_media_change = cdi->last_media_change_ms;
2372 static int cdrom_ioctl_set_options(struct cdrom_device_info *cdi,
2390 return cdi->options;
2396 cdi->options |= (int) arg;
2397 return cdi->options;
2400 static int cdrom_ioctl_clear_options(struct cdrom_device_info *cdi,
2405 cdi->options &= ~(int) arg;
2406 return cdi->options;
2409 static int cdrom_ioctl_select_speed(struct cdrom_device_info *cdi,
2416 return cdi->ops->select_speed(cdi, arg);
2419 static int cdrom_ioctl_select_disc(struct cdrom_device_info *cdi,
2428 if (arg >= cdi->capacity)
2433 return cdrom_select_disc(cdi, arg);
2436 static int cdrom_ioctl_reset(struct cdrom_device_info *cdi,
2446 return cdi->ops->reset(cdi);
2449 static int cdrom_ioctl_lock_door(struct cdrom_device_info *cdi,
2457 cdi->keeplocked = arg ? 1 : 0;
2463 if (cdi->use_count != 1 && !arg && !capable(CAP_SYS_ADMIN))
2465 return cdi->ops->lock_door(cdi, arg);
2468 static int cdrom_ioctl_debug(struct cdrom_device_info *cdi,
2479 static int cdrom_ioctl_get_capability(struct cdrom_device_info *cdi)
2482 return (cdi->ops->capability & ~cdi->mask);
2491 static int cdrom_ioctl_get_mcn(struct cdrom_device_info *cdi,
2499 if (!(cdi->ops->capability & CDC_MCN))
2501 ret = cdi->ops->get_mcn(cdi, &mcn);
2511 static int cdrom_ioctl_drive_status(struct cdrom_device_info *cdi,
2516 if (!(cdi->ops->capability & CDC_DRIVE_STATUS))
2520 return cdi->ops->drive_status(cdi, CDSL_CURRENT);
2521 if (arg >= cdi->capacity)
2523 return cdrom_slot_status(cdi, arg);
2543 static int cdrom_ioctl_disc_status(struct cdrom_device_info *cdi)
2549 cdrom_count_tracks(cdi, &tracks);
2555 if (!tracks.data && !tracks.cdi && !tracks.xa)
2561 if (tracks.cdi > 0)
2573 static int cdrom_ioctl_changer_nslots(struct cdrom_device_info *cdi)
2576 return cdi->capacity;
2579 static int cdrom_ioctl_get_subchnl(struct cdrom_device_info *cdi,
2596 ret = cdi->ops->audio_ioctl(cdi, CDROMSUBCHNL, &q);
2610 static int cdrom_ioctl_read_tochdr(struct cdrom_device_info *cdi,
2621 ret = cdi->ops->audio_ioctl(cdi, CDROMREADTOCHDR, &header);
2631 int cdrom_read_tocentry(struct cdrom_device_info *cdi,
2642 ret = cdi->ops->audio_ioctl(cdi, CDROMREADTOCENTRY, entry);
2650 static int cdrom_ioctl_read_tocentry(struct cdrom_device_info *cdi,
2658 ret = cdrom_read_tocentry(cdi, &entry);
2664 static int cdrom_ioctl_play_msf(struct cdrom_device_info *cdi,
2675 return cdi->ops->audio_ioctl(cdi, CDROMPLAYMSF, &msf);
2678 static int cdrom_ioctl_play_trkind(struct cdrom_device_info *cdi,
2691 ret = check_for_audio_disc(cdi, cdi->ops);
2694 return cdi->ops->audio_ioctl(cdi, CDROMPLAYTRKIND, &ti);
2696 static int cdrom_ioctl_volctrl(struct cdrom_device_info *cdi,
2707 return cdi->ops->audio_ioctl(cdi, CDROMVOLCTRL, &volume);
2710 static int cdrom_ioctl_volread(struct cdrom_device_info *cdi,
2721 ret = cdi->ops->audio_ioctl(cdi, CDROMVOLREAD, &volume);
2730 static int cdrom_ioctl_audioctl(struct cdrom_device_info *cdi,
2739 ret = check_for_audio_disc(cdi, cdi->ops);
2742 return cdi->ops->audio_ioctl(cdi, cmd, NULL);
2749 static int cdrom_switch_blocksize(struct cdrom_device_info *cdi, int size)
2751 const struct cdrom_device_ops *cdo = cdi->ops;
2771 return cdo->generic_packet(cdi, &cgc);
2774 static int cdrom_get_track_info(struct cdrom_device_info *cdi,
2777 const struct cdrom_device_ops *cdo = cdi->ops;
2789 ret = cdo->generic_packet(cdi, &cgc);
2800 ret = cdo->generic_packet(cdi, &cgc);
2810 int cdrom_get_last_written(struct cdrom_device_info *cdi, long *last_written)
2821 ret = cdrom_get_disc_info(cdi, &di);
2828 ti_size = cdrom_get_track_info(cdi, last_track, 1, &ti);
2837 ti_size = cdrom_get_track_info(cdi, last_track, 1, &ti);
2867 if ((ret = cdi->ops->audio_ioctl(cdi, CDROMREADTOCENTRY, &toc)))
2876 static int cdrom_get_next_writable(struct cdrom_device_info *cdi,
2887 ret = cdrom_get_disc_info(cdi, &di);
2894 ti_size = cdrom_get_track_info(cdi, last_track, 1, &ti);
2903 ti_size = cdrom_get_track_info(cdi, last_track, 1, &ti);
2916 ret = cdrom_get_last_written(cdi, next_writable);
2926 static noinline int mmc_ioctl_cdrom_read_data(struct cdrom_device_info *cdi,
2962 ret = cdrom_read_block(cdi, cgc, lba, 1, format, blocksize);
2971 ret = cdrom_switch_blocksize(cdi, blocksize);
2976 ret = cdrom_read_cd(cdi, cgc, lba, blocksize, 1);
2978 ret |= cdrom_switch_blocksize(cdi, CD_FRAMESIZE);
2987 static noinline int mmc_ioctl_cdrom_read_audio(struct cdrom_device_info *cdi,
3032 return cdrom_read_cdda(cdi, ra.buf, lba, ra.nframes);
3035 static noinline int mmc_ioctl_cdrom_subchannel(struct cdrom_device_info *cdi,
3048 ret = cdrom_read_subchannel(cdi, &q, 0);
3060 static noinline int mmc_ioctl_cdrom_play_msf(struct cdrom_device_info *cdi,
3064 const struct cdrom_device_ops *cdo = cdi->ops;
3077 return cdo->generic_packet(cdi, cgc);
3080 static noinline int mmc_ioctl_cdrom_play_blk(struct cdrom_device_info *cdi,
3084 const struct cdrom_device_ops *cdo = cdi->ops;
3097 return cdo->generic_packet(cdi, cgc);
3100 static noinline int mmc_ioctl_cdrom_volume(struct cdrom_device_info *cdi,
3119 ret = cdrom_mode_sense(cdi, cgc, GPMODE_AUDIO_CTL_PAGE, 0);
3134 ret = cdrom_mode_sense(cdi, cgc,
3160 ret = cdrom_mode_sense(cdi, cgc, GPMODE_AUDIO_CTL_PAGE, 1);
3172 return cdrom_mode_select(cdi, cgc);
3175 static noinline int mmc_ioctl_cdrom_start_stop(struct cdrom_device_info *cdi,
3179 const struct cdrom_device_ops *cdo = cdi->ops;
3185 return cdo->generic_packet(cdi, cgc);
3188 static noinline int mmc_ioctl_cdrom_pause_resume(struct cdrom_device_info *cdi,
3192 const struct cdrom_device_ops *cdo = cdi->ops;
3197 return cdo->generic_packet(cdi, cgc);
3200 static noinline int mmc_ioctl_dvd_read_struct(struct cdrom_device_info *cdi,
3217 ret = dvd_read_struct(cdi, s, cgc);
3228 static noinline int mmc_ioctl_dvd_auth(struct cdrom_device_info *cdi,
3238 ret = dvd_do_auth(cdi, &ai);
3246 static noinline int mmc_ioctl_cdrom_next_writable(struct cdrom_device_info *cdi,
3252 ret = cdrom_get_next_writable(cdi, &next);
3260 static noinline int mmc_ioctl_cdrom_last_written(struct cdrom_device_info *cdi,
3266 ret = cdrom_get_last_written(cdi, &last);
3275 static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd,
3289 return mmc_ioctl_cdrom_read_data(cdi, userptr, &cgc, cmd);
3291 return mmc_ioctl_cdrom_read_audio(cdi, userptr);
3293 return mmc_ioctl_cdrom_subchannel(cdi, userptr);
3295 return mmc_ioctl_cdrom_play_msf(cdi, userptr, &cgc);
3297 return mmc_ioctl_cdrom_play_blk(cdi, userptr, &cgc);
3300 return mmc_ioctl_cdrom_volume(cdi, userptr, &cgc, cmd);
3303 return mmc_ioctl_cdrom_start_stop(cdi, &cgc, cmd);
3306 return mmc_ioctl_cdrom_pause_resume(cdi, &cgc, cmd);
3308 return mmc_ioctl_dvd_read_struct(cdi, userptr, &cgc);
3310 return mmc_ioctl_dvd_auth(cdi, userptr);
3312 return mmc_ioctl_cdrom_next_writable(cdi, userptr);
3314 return mmc_ioctl_cdrom_last_written(cdi, userptr);
3325 int cdrom_ioctl(struct cdrom_device_info *cdi, struct block_device *bdev,
3333 return cdrom_ioctl_multisession(cdi, argp);
3335 return cdrom_ioctl_eject(cdi);
3337 return cdrom_ioctl_closetray(cdi);
3339 return cdrom_ioctl_eject_sw(cdi, arg);
3341 return cdrom_ioctl_media_changed(cdi, arg);
3343 return cdrom_ioctl_timed_media_change(cdi, arg);
3345 return cdrom_ioctl_set_options(cdi, arg);
3347 return cdrom_ioctl_clear_options(cdi, arg);
3349 return cdrom_ioctl_select_speed(cdi, arg);
3351 return cdrom_ioctl_select_disc(cdi, arg);
3353 return cdrom_ioctl_reset(cdi, bdev);
3355 return cdrom_ioctl_lock_door(cdi, arg);
3357 return cdrom_ioctl_debug(cdi, arg);
3359 return cdrom_ioctl_get_capability(cdi);
3361 return cdrom_ioctl_get_mcn(cdi, argp);
3363 return cdrom_ioctl_drive_status(cdi, arg);
3365 return cdrom_ioctl_disc_status(cdi);
3367 return cdrom_ioctl_changer_nslots(cdi);
3377 ret = mmc_ioctl(cdi, cmd, arg);
3389 return cdrom_ioctl_get_subchnl(cdi, argp);
3391 return cdrom_ioctl_read_tochdr(cdi, argp);
3393 return cdrom_ioctl_read_tocentry(cdi, argp);
3395 return cdrom_ioctl_play_msf(cdi, argp);
3397 return cdrom_ioctl_play_trkind(cdi, argp);
3399 return cdrom_ioctl_volctrl(cdi, argp);
3401 return cdrom_ioctl_volread(cdi, argp);
3406 return cdrom_ioctl_audioctl(cdi, cmd);
3437 struct cdrom_device_info *cdi;
3446 list_for_each_entry(cdi, &cdrom_list, list) {
3450 "\t%s", cdi->name);
3454 "\t%d", cdi->speed);
3458 "\t%d", cdi->capacity);
3565 struct cdrom_device_info *cdi;
3568 list_for_each_entry(cdi, &cdrom_list, list) {
3570 cdi->options |= CDO_AUTO_CLOSE;
3572 cdi->options &= ~CDO_AUTO_CLOSE;
3574 cdi->options |= CDO_AUTO_EJECT;
3576 cdi->options &= ~CDO_AUTO_EJECT;
3578 cdi->options |= CDO_LOCK;
3580 cdi->options &= ~CDO_LOCK;
3582 cdi->options |= CDO_CHECK_TYPE;
3584 cdi->options &= ~CDO_CHECK_TYPE;