aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/v4l2-compat-ioctl32.c
diff options
context:
space:
mode:
authorHans Verkuil <hans.verkuil@cisco.com>2011-06-07 10:43:57 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2011-07-27 16:53:20 -0400
commit2330fb8242c3efc281ab8a2d3e22686023699955 (patch)
treeb0359e3869a8db4a2039f090f2f3292d37ca0e8d /drivers/media/video/v4l2-compat-ioctl32.c
parent5138870d68ffbf6fcdf019af5b2ce78bc5a1f837 (diff)
[media] v4l2-compat-ioctl32: add VIDIOC_DQEVENT support
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/v4l2-compat-ioctl32.c')
-rw-r--r--drivers/media/video/v4l2-compat-ioctl32.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/drivers/media/video/v4l2-compat-ioctl32.c b/drivers/media/video/v4l2-compat-ioctl32.c
index 7c2694738b3..61979b70f38 100644
--- a/drivers/media/video/v4l2-compat-ioctl32.c
+++ b/drivers/media/video/v4l2-compat-ioctl32.c
@@ -662,6 +662,32 @@ static int put_v4l2_ext_controls32(struct v4l2_ext_controls *kp, struct v4l2_ext
662 return 0; 662 return 0;
663} 663}
664 664
665struct v4l2_event32 {
666 __u32 type;
667 union {
668 __u8 data[64];
669 } u;
670 __u32 pending;
671 __u32 sequence;
672 struct compat_timespec timestamp;
673 __u32 id;
674 __u32 reserved[8];
675};
676
677static int put_v4l2_event32(struct v4l2_event *kp, struct v4l2_event32 __user *up)
678{
679 if (!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_event32)) ||
680 put_user(kp->type, &up->type) ||
681 copy_to_user(&up->u, &kp->u, sizeof(kp->u)) ||
682 put_user(kp->pending, &up->pending) ||
683 put_user(kp->sequence, &up->sequence) ||
684 put_compat_timespec(&kp->timestamp, &up->timestamp) ||
685 put_user(kp->id, &up->id) ||
686 copy_to_user(up->reserved, kp->reserved, 8 * sizeof(__u32)))
687 return -EFAULT;
688 return 0;
689}
690
665#define VIDIOC_G_FMT32 _IOWR('V', 4, struct v4l2_format32) 691#define VIDIOC_G_FMT32 _IOWR('V', 4, struct v4l2_format32)
666#define VIDIOC_S_FMT32 _IOWR('V', 5, struct v4l2_format32) 692#define VIDIOC_S_FMT32 _IOWR('V', 5, struct v4l2_format32)
667#define VIDIOC_QUERYBUF32 _IOWR('V', 9, struct v4l2_buffer32) 693#define VIDIOC_QUERYBUF32 _IOWR('V', 9, struct v4l2_buffer32)
@@ -675,6 +701,7 @@ static int put_v4l2_ext_controls32(struct v4l2_ext_controls *kp, struct v4l2_ext
675#define VIDIOC_G_EXT_CTRLS32 _IOWR('V', 71, struct v4l2_ext_controls32) 701#define VIDIOC_G_EXT_CTRLS32 _IOWR('V', 71, struct v4l2_ext_controls32)
676#define VIDIOC_S_EXT_CTRLS32 _IOWR('V', 72, struct v4l2_ext_controls32) 702#define VIDIOC_S_EXT_CTRLS32 _IOWR('V', 72, struct v4l2_ext_controls32)
677#define VIDIOC_TRY_EXT_CTRLS32 _IOWR('V', 73, struct v4l2_ext_controls32) 703#define VIDIOC_TRY_EXT_CTRLS32 _IOWR('V', 73, struct v4l2_ext_controls32)
704#define VIDIOC_DQEVENT32 _IOR ('V', 89, struct v4l2_event32)
678 705
679#define VIDIOC_OVERLAY32 _IOW ('V', 14, s32) 706#define VIDIOC_OVERLAY32 _IOW ('V', 14, s32)
680#define VIDIOC_STREAMON32 _IOW ('V', 18, s32) 707#define VIDIOC_STREAMON32 _IOW ('V', 18, s32)
@@ -693,6 +720,7 @@ static long do_video_ioctl(struct file *file, unsigned int cmd, unsigned long ar
693 struct v4l2_input v2i; 720 struct v4l2_input v2i;
694 struct v4l2_standard v2s; 721 struct v4l2_standard v2s;
695 struct v4l2_ext_controls v2ecs; 722 struct v4l2_ext_controls v2ecs;
723 struct v4l2_event v2ev;
696 unsigned long vx; 724 unsigned long vx;
697 int vi; 725 int vi;
698 } karg; 726 } karg;
@@ -715,6 +743,7 @@ static long do_video_ioctl(struct file *file, unsigned int cmd, unsigned long ar
715 case VIDIOC_G_EXT_CTRLS32: cmd = VIDIOC_G_EXT_CTRLS; break; 743 case VIDIOC_G_EXT_CTRLS32: cmd = VIDIOC_G_EXT_CTRLS; break;
716 case VIDIOC_S_EXT_CTRLS32: cmd = VIDIOC_S_EXT_CTRLS; break; 744 case VIDIOC_S_EXT_CTRLS32: cmd = VIDIOC_S_EXT_CTRLS; break;
717 case VIDIOC_TRY_EXT_CTRLS32: cmd = VIDIOC_TRY_EXT_CTRLS; break; 745 case VIDIOC_TRY_EXT_CTRLS32: cmd = VIDIOC_TRY_EXT_CTRLS; break;
746 case VIDIOC_DQEVENT32: cmd = VIDIOC_DQEVENT; break;
718 case VIDIOC_OVERLAY32: cmd = VIDIOC_OVERLAY; break; 747 case VIDIOC_OVERLAY32: cmd = VIDIOC_OVERLAY; break;
719 case VIDIOC_STREAMON32: cmd = VIDIOC_STREAMON; break; 748 case VIDIOC_STREAMON32: cmd = VIDIOC_STREAMON; break;
720 case VIDIOC_STREAMOFF32: cmd = VIDIOC_STREAMOFF; break; 749 case VIDIOC_STREAMOFF32: cmd = VIDIOC_STREAMOFF; break;
@@ -778,6 +807,9 @@ static long do_video_ioctl(struct file *file, unsigned int cmd, unsigned long ar
778 err = get_v4l2_ext_controls32(&karg.v2ecs, up); 807 err = get_v4l2_ext_controls32(&karg.v2ecs, up);
779 compatible_arg = 0; 808 compatible_arg = 0;
780 break; 809 break;
810 case VIDIOC_DQEVENT:
811 compatible_arg = 0;
812 break;
781 } 813 }
782 if (err) 814 if (err)
783 return err; 815 return err;
@@ -818,6 +850,10 @@ static long do_video_ioctl(struct file *file, unsigned int cmd, unsigned long ar
818 err = put_v4l2_framebuffer32(&karg.v2fb, up); 850 err = put_v4l2_framebuffer32(&karg.v2fb, up);
819 break; 851 break;
820 852
853 case VIDIOC_DQEVENT:
854 err = put_v4l2_event32(&karg.v2ev, up);
855 break;
856
821 case VIDIOC_G_FMT: 857 case VIDIOC_G_FMT:
822 case VIDIOC_S_FMT: 858 case VIDIOC_S_FMT:
823 case VIDIOC_TRY_FMT: 859 case VIDIOC_TRY_FMT:
@@ -920,6 +956,7 @@ long v4l2_compat_ioctl32(struct file *file, unsigned int cmd, unsigned long arg)
920 case VIDIOC_S_DV_TIMINGS: 956 case VIDIOC_S_DV_TIMINGS:
921 case VIDIOC_G_DV_TIMINGS: 957 case VIDIOC_G_DV_TIMINGS:
922 case VIDIOC_DQEVENT: 958 case VIDIOC_DQEVENT:
959 case VIDIOC_DQEVENT32:
923 case VIDIOC_SUBSCRIBE_EVENT: 960 case VIDIOC_SUBSCRIBE_EVENT:
924 case VIDIOC_UNSUBSCRIBE_EVENT: 961 case VIDIOC_UNSUBSCRIBE_EVENT:
925 ret = do_video_ioctl(file, cmd, arg); 962 ret = do_video_ioctl(file, cmd, arg);