diff options
Diffstat (limited to 'drivers/media/v4l2-core/v4l2-compat-ioctl32.c')
-rw-r--r-- | drivers/media/v4l2-core/v4l2-compat-ioctl32.c | 133 |
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 | ||
743 | struct v4l2_subdev_edid32 { | 743 | struct 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 | ||
751 | static int get_v4l2_subdev_edid32(struct v4l2_subdev_edid *kp, struct v4l2_subdev_edid32 __user *up) | 751 | static 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 | ||
766 | static int put_v4l2_subdev_edid32(struct v4l2_subdev_edid *kp, struct v4l2_subdev_edid32 __user *up) | 766 | static 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 | } |
1108 | EXPORT_SYMBOL_GPL(v4l2_compat_ioctl32); | 1019 | EXPORT_SYMBOL_GPL(v4l2_compat_ioctl32); |