aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/v4l2-core/v4l2-compat-ioctl32.c')
-rw-r--r--drivers/media/v4l2-core/v4l2-compat-ioctl32.c133
1 files changed, 22 insertions, 111 deletions
diff --git a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
index 6191968db8fa..04b2daf567be 100644
--- a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
+++ b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
@@ -740,7 +740,7 @@ static int put_v4l2_event32(struct v4l2_event *kp, struct v4l2_event32 __user *u
740 return 0; 740 return 0;
741} 741}
742 742
743struct v4l2_subdev_edid32 { 743struct v4l2_edid32 {
744 __u32 pad; 744 __u32 pad;
745 __u32 start_block; 745 __u32 start_block;
746 __u32 blocks; 746 __u32 blocks;
@@ -748,11 +748,11 @@ struct v4l2_subdev_edid32 {
748 compat_caddr_t edid; 748 compat_caddr_t edid;
749}; 749};
750 750
751static int get_v4l2_subdev_edid32(struct v4l2_subdev_edid *kp, struct v4l2_subdev_edid32 __user *up) 751static int get_v4l2_edid32(struct v4l2_edid *kp, struct v4l2_edid32 __user *up)
752{ 752{
753 u32 tmp; 753 u32 tmp;
754 754
755 if (!access_ok(VERIFY_READ, up, sizeof(struct v4l2_subdev_edid32)) || 755 if (!access_ok(VERIFY_READ, up, sizeof(struct v4l2_edid32)) ||
756 get_user(kp->pad, &up->pad) || 756 get_user(kp->pad, &up->pad) ||
757 get_user(kp->start_block, &up->start_block) || 757 get_user(kp->start_block, &up->start_block) ||
758 get_user(kp->blocks, &up->blocks) || 758 get_user(kp->blocks, &up->blocks) ||
@@ -763,11 +763,11 @@ static int get_v4l2_subdev_edid32(struct v4l2_subdev_edid *kp, struct v4l2_subde
763 return 0; 763 return 0;
764} 764}
765 765
766static int put_v4l2_subdev_edid32(struct v4l2_subdev_edid *kp, struct v4l2_subdev_edid32 __user *up) 766static int put_v4l2_edid32(struct v4l2_edid *kp, struct v4l2_edid32 __user *up)
767{ 767{
768 u32 tmp = (u32)((unsigned long)kp->edid); 768 u32 tmp = (u32)((unsigned long)kp->edid);
769 769
770 if (!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_subdev_edid32)) || 770 if (!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_edid32)) ||
771 put_user(kp->pad, &up->pad) || 771 put_user(kp->pad, &up->pad) ||
772 put_user(kp->start_block, &up->start_block) || 772 put_user(kp->start_block, &up->start_block) ||
773 put_user(kp->blocks, &up->blocks) || 773 put_user(kp->blocks, &up->blocks) ||
@@ -787,8 +787,8 @@ static int put_v4l2_subdev_edid32(struct v4l2_subdev_edid *kp, struct v4l2_subde
787#define VIDIOC_DQBUF32 _IOWR('V', 17, struct v4l2_buffer32) 787#define VIDIOC_DQBUF32 _IOWR('V', 17, struct v4l2_buffer32)
788#define VIDIOC_ENUMSTD32 _IOWR('V', 25, struct v4l2_standard32) 788#define VIDIOC_ENUMSTD32 _IOWR('V', 25, struct v4l2_standard32)
789#define VIDIOC_ENUMINPUT32 _IOWR('V', 26, struct v4l2_input32) 789#define VIDIOC_ENUMINPUT32 _IOWR('V', 26, struct v4l2_input32)
790#define VIDIOC_SUBDEV_G_EDID32 _IOWR('V', 63, struct v4l2_subdev_edid32) 790#define VIDIOC_G_EDID32 _IOWR('V', 40, struct v4l2_edid32)
791#define VIDIOC_SUBDEV_S_EDID32 _IOWR('V', 64, struct v4l2_subdev_edid32) 791#define VIDIOC_S_EDID32 _IOWR('V', 41, struct v4l2_edid32)
792#define VIDIOC_TRY_FMT32 _IOWR('V', 64, struct v4l2_format32) 792#define VIDIOC_TRY_FMT32 _IOWR('V', 64, struct v4l2_format32)
793#define VIDIOC_G_EXT_CTRLS32 _IOWR('V', 71, struct v4l2_ext_controls32) 793#define VIDIOC_G_EXT_CTRLS32 _IOWR('V', 71, struct v4l2_ext_controls32)
794#define VIDIOC_S_EXT_CTRLS32 _IOWR('V', 72, struct v4l2_ext_controls32) 794#define VIDIOC_S_EXT_CTRLS32 _IOWR('V', 72, struct v4l2_ext_controls32)
@@ -816,7 +816,7 @@ static long do_video_ioctl(struct file *file, unsigned int cmd, unsigned long ar
816 struct v4l2_ext_controls v2ecs; 816 struct v4l2_ext_controls v2ecs;
817 struct v4l2_event v2ev; 817 struct v4l2_event v2ev;
818 struct v4l2_create_buffers v2crt; 818 struct v4l2_create_buffers v2crt;
819 struct v4l2_subdev_edid v2edid; 819 struct v4l2_edid v2edid;
820 unsigned long vx; 820 unsigned long vx;
821 int vi; 821 int vi;
822 } karg; 822 } karg;
@@ -849,8 +849,8 @@ static long do_video_ioctl(struct file *file, unsigned int cmd, unsigned long ar
849 case VIDIOC_S_OUTPUT32: cmd = VIDIOC_S_OUTPUT; break; 849 case VIDIOC_S_OUTPUT32: cmd = VIDIOC_S_OUTPUT; break;
850 case VIDIOC_CREATE_BUFS32: cmd = VIDIOC_CREATE_BUFS; break; 850 case VIDIOC_CREATE_BUFS32: cmd = VIDIOC_CREATE_BUFS; break;
851 case VIDIOC_PREPARE_BUF32: cmd = VIDIOC_PREPARE_BUF; break; 851 case VIDIOC_PREPARE_BUF32: cmd = VIDIOC_PREPARE_BUF; break;
852 case VIDIOC_SUBDEV_G_EDID32: cmd = VIDIOC_SUBDEV_G_EDID; break; 852 case VIDIOC_G_EDID32: cmd = VIDIOC_G_EDID; break;
853 case VIDIOC_SUBDEV_S_EDID32: cmd = VIDIOC_SUBDEV_S_EDID; break; 853 case VIDIOC_S_EDID32: cmd = VIDIOC_S_EDID; break;
854 } 854 }
855 855
856 switch (cmd) { 856 switch (cmd) {
@@ -868,9 +868,9 @@ static long do_video_ioctl(struct file *file, unsigned int cmd, unsigned long ar
868 compatible_arg = 0; 868 compatible_arg = 0;
869 break; 869 break;
870 870
871 case VIDIOC_SUBDEV_G_EDID: 871 case VIDIOC_G_EDID:
872 case VIDIOC_SUBDEV_S_EDID: 872 case VIDIOC_S_EDID:
873 err = get_v4l2_subdev_edid32(&karg.v2edid, up); 873 err = get_v4l2_edid32(&karg.v2edid, up);
874 compatible_arg = 0; 874 compatible_arg = 0;
875 break; 875 break;
876 876
@@ -966,9 +966,9 @@ static long do_video_ioctl(struct file *file, unsigned int cmd, unsigned long ar
966 err = put_v4l2_event32(&karg.v2ev, up); 966 err = put_v4l2_event32(&karg.v2ev, up);
967 break; 967 break;
968 968
969 case VIDIOC_SUBDEV_G_EDID: 969 case VIDIOC_G_EDID:
970 case VIDIOC_SUBDEV_S_EDID: 970 case VIDIOC_S_EDID:
971 err = put_v4l2_subdev_edid32(&karg.v2edid, up); 971 err = put_v4l2_edid32(&karg.v2edid, up);
972 break; 972 break;
973 973
974 case VIDIOC_G_FMT: 974 case VIDIOC_G_FMT:
@@ -1006,103 +1006,14 @@ long v4l2_compat_ioctl32(struct file *file, unsigned int cmd, unsigned long arg)
1006 if (!file->f_op->unlocked_ioctl) 1006 if (!file->f_op->unlocked_ioctl)
1007 return ret; 1007 return ret;
1008 1008
1009 switch (cmd) { 1009 if (_IOC_TYPE(cmd) == 'V' && _IOC_NR(cmd) < BASE_VIDIOC_PRIVATE)
1010 case VIDIOC_QUERYCAP:
1011 case VIDIOC_RESERVED:
1012 case VIDIOC_ENUM_FMT:
1013 case VIDIOC_G_FMT32:
1014 case VIDIOC_S_FMT32:
1015 case VIDIOC_REQBUFS:
1016 case VIDIOC_QUERYBUF32:
1017 case VIDIOC_G_FBUF32:
1018 case VIDIOC_S_FBUF32:
1019 case VIDIOC_OVERLAY32:
1020 case VIDIOC_QBUF32:
1021 case VIDIOC_EXPBUF:
1022 case VIDIOC_DQBUF32:
1023 case VIDIOC_STREAMON32:
1024 case VIDIOC_STREAMOFF32:
1025 case VIDIOC_G_PARM:
1026 case VIDIOC_S_PARM:
1027 case VIDIOC_G_STD:
1028 case VIDIOC_S_STD:
1029 case VIDIOC_ENUMSTD32:
1030 case VIDIOC_ENUMINPUT32:
1031 case VIDIOC_G_CTRL:
1032 case VIDIOC_S_CTRL:
1033 case VIDIOC_G_TUNER:
1034 case VIDIOC_S_TUNER:
1035 case VIDIOC_G_AUDIO:
1036 case VIDIOC_S_AUDIO:
1037 case VIDIOC_QUERYCTRL:
1038 case VIDIOC_QUERYMENU:
1039 case VIDIOC_G_INPUT32:
1040 case VIDIOC_S_INPUT32:
1041 case VIDIOC_G_OUTPUT32:
1042 case VIDIOC_S_OUTPUT32:
1043 case VIDIOC_ENUMOUTPUT:
1044 case VIDIOC_G_AUDOUT:
1045 case VIDIOC_S_AUDOUT:
1046 case VIDIOC_G_MODULATOR:
1047 case VIDIOC_S_MODULATOR:
1048 case VIDIOC_S_FREQUENCY:
1049 case VIDIOC_G_FREQUENCY:
1050 case VIDIOC_CROPCAP:
1051 case VIDIOC_G_CROP:
1052 case VIDIOC_S_CROP:
1053 case VIDIOC_G_SELECTION:
1054 case VIDIOC_S_SELECTION:
1055 case VIDIOC_G_JPEGCOMP:
1056 case VIDIOC_S_JPEGCOMP:
1057 case VIDIOC_QUERYSTD:
1058 case VIDIOC_TRY_FMT32:
1059 case VIDIOC_ENUMAUDIO:
1060 case VIDIOC_ENUMAUDOUT:
1061 case VIDIOC_G_PRIORITY:
1062 case VIDIOC_S_PRIORITY:
1063 case VIDIOC_G_SLICED_VBI_CAP:
1064 case VIDIOC_LOG_STATUS:
1065 case VIDIOC_G_EXT_CTRLS32:
1066 case VIDIOC_S_EXT_CTRLS32:
1067 case VIDIOC_TRY_EXT_CTRLS32:
1068 case VIDIOC_ENUM_FRAMESIZES:
1069 case VIDIOC_ENUM_FRAMEINTERVALS:
1070 case VIDIOC_G_ENC_INDEX:
1071 case VIDIOC_ENCODER_CMD:
1072 case VIDIOC_TRY_ENCODER_CMD:
1073 case VIDIOC_DECODER_CMD:
1074 case VIDIOC_TRY_DECODER_CMD:
1075 case VIDIOC_DBG_S_REGISTER:
1076 case VIDIOC_DBG_G_REGISTER:
1077 case VIDIOC_S_HW_FREQ_SEEK:
1078 case VIDIOC_S_DV_TIMINGS:
1079 case VIDIOC_G_DV_TIMINGS:
1080 case VIDIOC_DQEVENT:
1081 case VIDIOC_DQEVENT32:
1082 case VIDIOC_SUBSCRIBE_EVENT:
1083 case VIDIOC_UNSUBSCRIBE_EVENT:
1084 case VIDIOC_CREATE_BUFS32:
1085 case VIDIOC_PREPARE_BUF32:
1086 case VIDIOC_ENUM_DV_TIMINGS:
1087 case VIDIOC_QUERY_DV_TIMINGS:
1088 case VIDIOC_DV_TIMINGS_CAP:
1089 case VIDIOC_ENUM_FREQ_BANDS:
1090 case VIDIOC_SUBDEV_G_EDID32:
1091 case VIDIOC_SUBDEV_S_EDID32:
1092 ret = do_video_ioctl(file, cmd, arg); 1010 ret = do_video_ioctl(file, cmd, arg);
1093 break; 1011 else if (vdev->fops->compat_ioctl32)
1012 ret = vdev->fops->compat_ioctl32(file, cmd, arg);
1094 1013
1095 default: 1014 if (ret == -ENOIOCTLCMD)
1096 if (vdev->fops->compat_ioctl32) 1015 pr_warn("compat_ioctl32: unknown ioctl '%c', dir=%d, #%d (0x%08x)\n",
1097 ret = vdev->fops->compat_ioctl32(file, cmd, arg); 1016 _IOC_TYPE(cmd), _IOC_DIR(cmd), _IOC_NR(cmd), cmd);
1098
1099 if (ret == -ENOIOCTLCMD)
1100 printk(KERN_WARNING "compat_ioctl32: "
1101 "unknown ioctl '%c', dir=%d, #%d (0x%08x)\n",
1102 _IOC_TYPE(cmd), _IOC_DIR(cmd), _IOC_NR(cmd),
1103 cmd);
1104 break;
1105 }
1106 return ret; 1017 return ret;
1107} 1018}
1108EXPORT_SYMBOL_GPL(v4l2_compat_ioctl32); 1019EXPORT_SYMBOL_GPL(v4l2_compat_ioctl32);