summaryrefslogtreecommitdiffstats
path: root/drivers/cdrom
diff options
context:
space:
mode:
authorJoe Perches <joe@perches.com>2014-05-04 20:05:08 -0400
committerJens Axboe <axboe@fb.com>2014-05-05 16:58:06 -0400
commit2e9aa08a4801d439daec4c7d1b953c27b212d423 (patch)
tree08fac2d5eb2447e2674947be515ad849cf0ecc99 /drivers/cdrom
parent1237d1eecff27015617e5a43cc9528658a5fa8ef (diff)
cdrom: Move mmc_ioctls above cdrom_ioctl to remove unnecessary prototype
Neaten the spacing too. Signed-off-by: Joe Perches <joe@perches.com> Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'drivers/cdrom')
-rw-r--r--drivers/cdrom/cdrom.c246
1 files changed, 122 insertions, 124 deletions
diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c
index 08abbae6bf68..332c3aee1346 100644
--- a/drivers/cdrom/cdrom.c
+++ b/drivers/cdrom/cdrom.c
@@ -337,8 +337,6 @@ do { \
337#define CDROM_DEF_TIMEOUT (7 * HZ) 337#define CDROM_DEF_TIMEOUT (7 * HZ)
338 338
339/* Not-exported routines. */ 339/* Not-exported routines. */
340static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd,
341 unsigned long arg);
342 340
343int cdrom_get_last_written(struct cdrom_device_info *, long *); 341int cdrom_get_last_written(struct cdrom_device_info *, long *);
344static int cdrom_get_next_writable(struct cdrom_device_info *, long *); 342static int cdrom_get_next_writable(struct cdrom_device_info *, long *);
@@ -2714,103 +2712,6 @@ static int cdrom_ioctl_audioctl(struct cdrom_device_info *cdi,
2714} 2712}
2715 2713
2716/* 2714/*
2717 * Just about every imaginable ioctl is supported in the Uniform layer
2718 * these days.
2719 * ATAPI / SCSI specific code now mainly resides in mmc_ioctl().
2720 */
2721int cdrom_ioctl(struct cdrom_device_info *cdi, struct block_device *bdev,
2722 fmode_t mode, unsigned int cmd, unsigned long arg)
2723{
2724 void __user *argp = (void __user *)arg;
2725 int ret;
2726
2727 /*
2728 * Try the generic SCSI command ioctl's first.
2729 */
2730 ret = scsi_cmd_blk_ioctl(bdev, mode, cmd, argp);
2731 if (ret != -ENOTTY)
2732 return ret;
2733
2734 switch (cmd) {
2735 case CDROMMULTISESSION:
2736 return cdrom_ioctl_multisession(cdi, argp);
2737 case CDROMEJECT:
2738 return cdrom_ioctl_eject(cdi);
2739 case CDROMCLOSETRAY:
2740 return cdrom_ioctl_closetray(cdi);
2741 case CDROMEJECT_SW:
2742 return cdrom_ioctl_eject_sw(cdi, arg);
2743 case CDROM_MEDIA_CHANGED:
2744 return cdrom_ioctl_media_changed(cdi, arg);
2745 case CDROM_SET_OPTIONS:
2746 return cdrom_ioctl_set_options(cdi, arg);
2747 case CDROM_CLEAR_OPTIONS:
2748 return cdrom_ioctl_clear_options(cdi, arg);
2749 case CDROM_SELECT_SPEED:
2750 return cdrom_ioctl_select_speed(cdi, arg);
2751 case CDROM_SELECT_DISC:
2752 return cdrom_ioctl_select_disc(cdi, arg);
2753 case CDROMRESET:
2754 return cdrom_ioctl_reset(cdi, bdev);
2755 case CDROM_LOCKDOOR:
2756 return cdrom_ioctl_lock_door(cdi, arg);
2757 case CDROM_DEBUG:
2758 return cdrom_ioctl_debug(cdi, arg);
2759 case CDROM_GET_CAPABILITY:
2760 return cdrom_ioctl_get_capability(cdi);
2761 case CDROM_GET_MCN:
2762 return cdrom_ioctl_get_mcn(cdi, argp);
2763 case CDROM_DRIVE_STATUS:
2764 return cdrom_ioctl_drive_status(cdi, arg);
2765 case CDROM_DISC_STATUS:
2766 return cdrom_ioctl_disc_status(cdi);
2767 case CDROM_CHANGER_NSLOTS:
2768 return cdrom_ioctl_changer_nslots(cdi);
2769 }
2770
2771 /*
2772 * Use the ioctls that are implemented through the generic_packet()
2773 * interface. this may look at bit funny, but if -ENOTTY is
2774 * returned that particular ioctl is not implemented and we
2775 * let it go through the device specific ones.
2776 */
2777 if (CDROM_CAN(CDC_GENERIC_PACKET)) {
2778 ret = mmc_ioctl(cdi, cmd, arg);
2779 if (ret != -ENOTTY)
2780 return ret;
2781 }
2782
2783 /*
2784 * Note: most of the cd_dbg() calls are commented out here,
2785 * because they fill up the sys log when CD players poll
2786 * the drive.
2787 */
2788 switch (cmd) {
2789 case CDROMSUBCHNL:
2790 return cdrom_ioctl_get_subchnl(cdi, argp);
2791 case CDROMREADTOCHDR:
2792 return cdrom_ioctl_read_tochdr(cdi, argp);
2793 case CDROMREADTOCENTRY:
2794 return cdrom_ioctl_read_tocentry(cdi, argp);
2795 case CDROMPLAYMSF:
2796 return cdrom_ioctl_play_msf(cdi, argp);
2797 case CDROMPLAYTRKIND:
2798 return cdrom_ioctl_play_trkind(cdi, argp);
2799 case CDROMVOLCTRL:
2800 return cdrom_ioctl_volctrl(cdi, argp);
2801 case CDROMVOLREAD:
2802 return cdrom_ioctl_volread(cdi, argp);
2803 case CDROMSTART:
2804 case CDROMSTOP:
2805 case CDROMPAUSE:
2806 case CDROMRESUME:
2807 return cdrom_ioctl_audioctl(cdi, cmd);
2808 }
2809
2810 return -ENOSYS;
2811}
2812
2813/*
2814 * Required when we need to use READ_10 to issue other than 2048 block 2715 * Required when we need to use READ_10 to issue other than 2048 block
2815 * reads 2716 * reads
2816 */ 2717 */
@@ -2840,9 +2741,9 @@ static int cdrom_switch_blocksize(struct cdrom_device_info *cdi, int size)
2840} 2741}
2841 2742
2842static noinline int mmc_ioctl_cdrom_read_data(struct cdrom_device_info *cdi, 2743static noinline int mmc_ioctl_cdrom_read_data(struct cdrom_device_info *cdi,
2843 void __user *arg, 2744 void __user *arg,
2844 struct packet_command *cgc, 2745 struct packet_command *cgc,
2845 int cmd) 2746 int cmd)
2846{ 2747{
2847 struct request_sense sense; 2748 struct request_sense sense;
2848 struct cdrom_msf msf; 2749 struct cdrom_msf msf;
@@ -2877,8 +2778,8 @@ static noinline int mmc_ioctl_cdrom_read_data(struct cdrom_device_info *cdi,
2877 cgc->data_direction = CGC_DATA_READ; 2778 cgc->data_direction = CGC_DATA_READ;
2878 ret = cdrom_read_block(cdi, cgc, lba, 1, format, blocksize); 2779 ret = cdrom_read_block(cdi, cgc, lba, 1, format, blocksize);
2879 if (ret && sense.sense_key == 0x05 && 2780 if (ret && sense.sense_key == 0x05 &&
2880 sense.asc == 0x20 && 2781 sense.asc == 0x20 &&
2881 sense.ascq == 0x00) { 2782 sense.ascq == 0x00) {
2882 /* 2783 /*
2883 * SCSI-II devices are not required to support 2784 * SCSI-II devices are not required to support
2884 * READ_CD, so let's try switching block size 2785 * READ_CD, so let's try switching block size
@@ -2899,7 +2800,7 @@ out:
2899} 2800}
2900 2801
2901static noinline int mmc_ioctl_cdrom_read_audio(struct cdrom_device_info *cdi, 2802static noinline int mmc_ioctl_cdrom_read_audio(struct cdrom_device_info *cdi,
2902 void __user *arg) 2803 void __user *arg)
2903{ 2804{
2904 struct cdrom_read_audio ra; 2805 struct cdrom_read_audio ra;
2905 int lba; 2806 int lba;
@@ -2925,7 +2826,7 @@ static noinline int mmc_ioctl_cdrom_read_audio(struct cdrom_device_info *cdi,
2925} 2826}
2926 2827
2927static noinline int mmc_ioctl_cdrom_subchannel(struct cdrom_device_info *cdi, 2828static noinline int mmc_ioctl_cdrom_subchannel(struct cdrom_device_info *cdi,
2928 void __user *arg) 2829 void __user *arg)
2929{ 2830{
2930 int ret; 2831 int ret;
2931 struct cdrom_subchnl q; 2832 struct cdrom_subchnl q;
@@ -2950,8 +2851,8 @@ static noinline int mmc_ioctl_cdrom_subchannel(struct cdrom_device_info *cdi,
2950} 2851}
2951 2852
2952static noinline int mmc_ioctl_cdrom_play_msf(struct cdrom_device_info *cdi, 2853static noinline int mmc_ioctl_cdrom_play_msf(struct cdrom_device_info *cdi,
2953 void __user *arg, 2854 void __user *arg,
2954 struct packet_command *cgc) 2855 struct packet_command *cgc)
2955{ 2856{
2956 struct cdrom_device_ops *cdo = cdi->ops; 2857 struct cdrom_device_ops *cdo = cdi->ops;
2957 struct cdrom_msf msf; 2858 struct cdrom_msf msf;
@@ -2970,8 +2871,8 @@ static noinline int mmc_ioctl_cdrom_play_msf(struct cdrom_device_info *cdi,
2970} 2871}
2971 2872
2972static noinline int mmc_ioctl_cdrom_play_blk(struct cdrom_device_info *cdi, 2873static noinline int mmc_ioctl_cdrom_play_blk(struct cdrom_device_info *cdi,
2973 void __user *arg, 2874 void __user *arg,
2974 struct packet_command *cgc) 2875 struct packet_command *cgc)
2975{ 2876{
2976 struct cdrom_device_ops *cdo = cdi->ops; 2877 struct cdrom_device_ops *cdo = cdi->ops;
2977 struct cdrom_blk blk; 2878 struct cdrom_blk blk;
@@ -2990,9 +2891,9 @@ static noinline int mmc_ioctl_cdrom_play_blk(struct cdrom_device_info *cdi,
2990} 2891}
2991 2892
2992static noinline int mmc_ioctl_cdrom_volume(struct cdrom_device_info *cdi, 2893static noinline int mmc_ioctl_cdrom_volume(struct cdrom_device_info *cdi,
2993 void __user *arg, 2894 void __user *arg,
2994 struct packet_command *cgc, 2895 struct packet_command *cgc,
2995 unsigned int cmd) 2896 unsigned int cmd)
2996{ 2897{
2997 struct cdrom_volctrl volctrl; 2898 struct cdrom_volctrl volctrl;
2998 unsigned char buffer[32]; 2899 unsigned char buffer[32];
@@ -3024,14 +2925,14 @@ static noinline int mmc_ioctl_cdrom_volume(struct cdrom_device_info *cdi,
3024 if (offset + 16 > cgc->buflen) { 2925 if (offset + 16 > cgc->buflen) {
3025 cgc->buflen = offset + 16; 2926 cgc->buflen = offset + 16;
3026 ret = cdrom_mode_sense(cdi, cgc, 2927 ret = cdrom_mode_sense(cdi, cgc,
3027 GPMODE_AUDIO_CTL_PAGE, 0); 2928 GPMODE_AUDIO_CTL_PAGE, 0);
3028 if (ret) 2929 if (ret)
3029 return ret; 2930 return ret;
3030 } 2931 }
3031 2932
3032 /* sanity check */ 2933 /* sanity check */
3033 if ((buffer[offset] & 0x3f) != GPMODE_AUDIO_CTL_PAGE || 2934 if ((buffer[offset] & 0x3f) != GPMODE_AUDIO_CTL_PAGE ||
3034 buffer[offset + 1] < 14) 2935 buffer[offset + 1] < 14)
3035 return -EINVAL; 2936 return -EINVAL;
3036 2937
3037 /* now we have the current volume settings. if it was only 2938 /* now we have the current volume settings. if it was only
@@ -3065,8 +2966,8 @@ static noinline int mmc_ioctl_cdrom_volume(struct cdrom_device_info *cdi,
3065} 2966}
3066 2967
3067static noinline int mmc_ioctl_cdrom_start_stop(struct cdrom_device_info *cdi, 2968static noinline int mmc_ioctl_cdrom_start_stop(struct cdrom_device_info *cdi,
3068 struct packet_command *cgc, 2969 struct packet_command *cgc,
3069 int cmd) 2970 int cmd)
3070{ 2971{
3071 struct cdrom_device_ops *cdo = cdi->ops; 2972 struct cdrom_device_ops *cdo = cdi->ops;
3072 cd_dbg(CD_DO_IOCTL, "entering CDROMSTART/CDROMSTOP\n"); 2973 cd_dbg(CD_DO_IOCTL, "entering CDROMSTART/CDROMSTOP\n");
@@ -3078,8 +2979,8 @@ static noinline int mmc_ioctl_cdrom_start_stop(struct cdrom_device_info *cdi,
3078} 2979}
3079 2980
3080static noinline int mmc_ioctl_cdrom_pause_resume(struct cdrom_device_info *cdi, 2981static noinline int mmc_ioctl_cdrom_pause_resume(struct cdrom_device_info *cdi,
3081 struct packet_command *cgc, 2982 struct packet_command *cgc,
3082 int cmd) 2983 int cmd)
3083{ 2984{
3084 struct cdrom_device_ops *cdo = cdi->ops; 2985 struct cdrom_device_ops *cdo = cdi->ops;
3085 cd_dbg(CD_DO_IOCTL, "entering CDROMPAUSE/CDROMRESUME\n"); 2986 cd_dbg(CD_DO_IOCTL, "entering CDROMPAUSE/CDROMRESUME\n");
@@ -3090,8 +2991,8 @@ static noinline int mmc_ioctl_cdrom_pause_resume(struct cdrom_device_info *cdi,
3090} 2991}
3091 2992
3092static noinline int mmc_ioctl_dvd_read_struct(struct cdrom_device_info *cdi, 2993static noinline int mmc_ioctl_dvd_read_struct(struct cdrom_device_info *cdi,
3093 void __user *arg, 2994 void __user *arg,
3094 struct packet_command *cgc) 2995 struct packet_command *cgc)
3095{ 2996{
3096 int ret; 2997 int ret;
3097 dvd_struct *s; 2998 dvd_struct *s;
@@ -3122,7 +3023,7 @@ out:
3122} 3023}
3123 3024
3124static noinline int mmc_ioctl_dvd_auth(struct cdrom_device_info *cdi, 3025static noinline int mmc_ioctl_dvd_auth(struct cdrom_device_info *cdi,
3125 void __user *arg) 3026 void __user *arg)
3126{ 3027{
3127 int ret; 3028 int ret;
3128 dvd_authinfo ai; 3029 dvd_authinfo ai;
@@ -3140,7 +3041,7 @@ static noinline int mmc_ioctl_dvd_auth(struct cdrom_device_info *cdi,
3140} 3041}
3141 3042
3142static noinline int mmc_ioctl_cdrom_next_writable(struct cdrom_device_info *cdi, 3043static noinline int mmc_ioctl_cdrom_next_writable(struct cdrom_device_info *cdi,
3143 void __user *arg) 3044 void __user *arg)
3144{ 3045{
3145 int ret; 3046 int ret;
3146 long next = 0; 3047 long next = 0;
@@ -3154,7 +3055,7 @@ static noinline int mmc_ioctl_cdrom_next_writable(struct cdrom_device_info *cdi,
3154} 3055}
3155 3056
3156static noinline int mmc_ioctl_cdrom_last_written(struct cdrom_device_info *cdi, 3057static noinline int mmc_ioctl_cdrom_last_written(struct cdrom_device_info *cdi,
3157 void __user *arg) 3058 void __user *arg)
3158{ 3059{
3159 int ret; 3060 int ret;
3160 long last = 0; 3061 long last = 0;
@@ -3212,6 +3113,103 @@ static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd,
3212 return -ENOTTY; 3113 return -ENOTTY;
3213} 3114}
3214 3115
3116/*
3117 * Just about every imaginable ioctl is supported in the Uniform layer
3118 * these days.
3119 * ATAPI / SCSI specific code now mainly resides in mmc_ioctl().
3120 */
3121int cdrom_ioctl(struct cdrom_device_info *cdi, struct block_device *bdev,
3122 fmode_t mode, unsigned int cmd, unsigned long arg)
3123{
3124 void __user *argp = (void __user *)arg;
3125 int ret;
3126
3127 /*
3128 * Try the generic SCSI command ioctl's first.
3129 */
3130 ret = scsi_cmd_blk_ioctl(bdev, mode, cmd, argp);
3131 if (ret != -ENOTTY)
3132 return ret;
3133
3134 switch (cmd) {
3135 case CDROMMULTISESSION:
3136 return cdrom_ioctl_multisession(cdi, argp);
3137 case CDROMEJECT:
3138 return cdrom_ioctl_eject(cdi);
3139 case CDROMCLOSETRAY:
3140 return cdrom_ioctl_closetray(cdi);
3141 case CDROMEJECT_SW:
3142 return cdrom_ioctl_eject_sw(cdi, arg);
3143 case CDROM_MEDIA_CHANGED:
3144 return cdrom_ioctl_media_changed(cdi, arg);
3145 case CDROM_SET_OPTIONS:
3146 return cdrom_ioctl_set_options(cdi, arg);
3147 case CDROM_CLEAR_OPTIONS:
3148 return cdrom_ioctl_clear_options(cdi, arg);
3149 case CDROM_SELECT_SPEED:
3150 return cdrom_ioctl_select_speed(cdi, arg);
3151 case CDROM_SELECT_DISC:
3152 return cdrom_ioctl_select_disc(cdi, arg);
3153 case CDROMRESET:
3154 return cdrom_ioctl_reset(cdi, bdev);
3155 case CDROM_LOCKDOOR:
3156 return cdrom_ioctl_lock_door(cdi, arg);
3157 case CDROM_DEBUG:
3158 return cdrom_ioctl_debug(cdi, arg);
3159 case CDROM_GET_CAPABILITY:
3160 return cdrom_ioctl_get_capability(cdi);
3161 case CDROM_GET_MCN:
3162 return cdrom_ioctl_get_mcn(cdi, argp);
3163 case CDROM_DRIVE_STATUS:
3164 return cdrom_ioctl_drive_status(cdi, arg);
3165 case CDROM_DISC_STATUS:
3166 return cdrom_ioctl_disc_status(cdi);
3167 case CDROM_CHANGER_NSLOTS:
3168 return cdrom_ioctl_changer_nslots(cdi);
3169 }
3170
3171 /*
3172 * Use the ioctls that are implemented through the generic_packet()
3173 * interface. this may look at bit funny, but if -ENOTTY is
3174 * returned that particular ioctl is not implemented and we
3175 * let it go through the device specific ones.
3176 */
3177 if (CDROM_CAN(CDC_GENERIC_PACKET)) {
3178 ret = mmc_ioctl(cdi, cmd, arg);
3179 if (ret != -ENOTTY)
3180 return ret;
3181 }
3182
3183 /*
3184 * Note: most of the cd_dbg() calls are commented out here,
3185 * because they fill up the sys log when CD players poll
3186 * the drive.
3187 */
3188 switch (cmd) {
3189 case CDROMSUBCHNL:
3190 return cdrom_ioctl_get_subchnl(cdi, argp);
3191 case CDROMREADTOCHDR:
3192 return cdrom_ioctl_read_tochdr(cdi, argp);
3193 case CDROMREADTOCENTRY:
3194 return cdrom_ioctl_read_tocentry(cdi, argp);
3195 case CDROMPLAYMSF:
3196 return cdrom_ioctl_play_msf(cdi, argp);
3197 case CDROMPLAYTRKIND:
3198 return cdrom_ioctl_play_trkind(cdi, argp);
3199 case CDROMVOLCTRL:
3200 return cdrom_ioctl_volctrl(cdi, argp);
3201 case CDROMVOLREAD:
3202 return cdrom_ioctl_volread(cdi, argp);
3203 case CDROMSTART:
3204 case CDROMSTOP:
3205 case CDROMPAUSE:
3206 case CDROMRESUME:
3207 return cdrom_ioctl_audioctl(cdi, cmd);
3208 }
3209
3210 return -ENOSYS;
3211}
3212
3215static int cdrom_get_track_info(struct cdrom_device_info *cdi, __u16 track, __u8 type, 3213static int cdrom_get_track_info(struct cdrom_device_info *cdi, __u16 track, __u8 type,
3216 track_information *ti) 3214 track_information *ti)
3217{ 3215{