mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-26 05:34:13 +08:00
[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>
This commit is contained in:
parent
5138870d68
commit
2330fb8242
@ -662,6 +662,32 @@ static int put_v4l2_ext_controls32(struct v4l2_ext_controls *kp, struct v4l2_ext
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct v4l2_event32 {
|
||||||
|
__u32 type;
|
||||||
|
union {
|
||||||
|
__u8 data[64];
|
||||||
|
} u;
|
||||||
|
__u32 pending;
|
||||||
|
__u32 sequence;
|
||||||
|
struct compat_timespec timestamp;
|
||||||
|
__u32 id;
|
||||||
|
__u32 reserved[8];
|
||||||
|
};
|
||||||
|
|
||||||
|
static int put_v4l2_event32(struct v4l2_event *kp, struct v4l2_event32 __user *up)
|
||||||
|
{
|
||||||
|
if (!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_event32)) ||
|
||||||
|
put_user(kp->type, &up->type) ||
|
||||||
|
copy_to_user(&up->u, &kp->u, sizeof(kp->u)) ||
|
||||||
|
put_user(kp->pending, &up->pending) ||
|
||||||
|
put_user(kp->sequence, &up->sequence) ||
|
||||||
|
put_compat_timespec(&kp->timestamp, &up->timestamp) ||
|
||||||
|
put_user(kp->id, &up->id) ||
|
||||||
|
copy_to_user(up->reserved, kp->reserved, 8 * sizeof(__u32)))
|
||||||
|
return -EFAULT;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#define VIDIOC_G_FMT32 _IOWR('V', 4, struct v4l2_format32)
|
#define VIDIOC_G_FMT32 _IOWR('V', 4, struct v4l2_format32)
|
||||||
#define VIDIOC_S_FMT32 _IOWR('V', 5, struct v4l2_format32)
|
#define VIDIOC_S_FMT32 _IOWR('V', 5, struct v4l2_format32)
|
||||||
#define VIDIOC_QUERYBUF32 _IOWR('V', 9, struct v4l2_buffer32)
|
#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
|
|||||||
#define VIDIOC_G_EXT_CTRLS32 _IOWR('V', 71, struct v4l2_ext_controls32)
|
#define VIDIOC_G_EXT_CTRLS32 _IOWR('V', 71, struct v4l2_ext_controls32)
|
||||||
#define VIDIOC_S_EXT_CTRLS32 _IOWR('V', 72, struct v4l2_ext_controls32)
|
#define VIDIOC_S_EXT_CTRLS32 _IOWR('V', 72, struct v4l2_ext_controls32)
|
||||||
#define VIDIOC_TRY_EXT_CTRLS32 _IOWR('V', 73, struct v4l2_ext_controls32)
|
#define VIDIOC_TRY_EXT_CTRLS32 _IOWR('V', 73, struct v4l2_ext_controls32)
|
||||||
|
#define VIDIOC_DQEVENT32 _IOR ('V', 89, struct v4l2_event32)
|
||||||
|
|
||||||
#define VIDIOC_OVERLAY32 _IOW ('V', 14, s32)
|
#define VIDIOC_OVERLAY32 _IOW ('V', 14, s32)
|
||||||
#define VIDIOC_STREAMON32 _IOW ('V', 18, s32)
|
#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
|
|||||||
struct v4l2_input v2i;
|
struct v4l2_input v2i;
|
||||||
struct v4l2_standard v2s;
|
struct v4l2_standard v2s;
|
||||||
struct v4l2_ext_controls v2ecs;
|
struct v4l2_ext_controls v2ecs;
|
||||||
|
struct v4l2_event v2ev;
|
||||||
unsigned long vx;
|
unsigned long vx;
|
||||||
int vi;
|
int vi;
|
||||||
} karg;
|
} karg;
|
||||||
@ -715,6 +743,7 @@ static long do_video_ioctl(struct file *file, unsigned int cmd, unsigned long ar
|
|||||||
case VIDIOC_G_EXT_CTRLS32: cmd = VIDIOC_G_EXT_CTRLS; break;
|
case VIDIOC_G_EXT_CTRLS32: cmd = VIDIOC_G_EXT_CTRLS; break;
|
||||||
case VIDIOC_S_EXT_CTRLS32: cmd = VIDIOC_S_EXT_CTRLS; break;
|
case VIDIOC_S_EXT_CTRLS32: cmd = VIDIOC_S_EXT_CTRLS; break;
|
||||||
case VIDIOC_TRY_EXT_CTRLS32: cmd = VIDIOC_TRY_EXT_CTRLS; break;
|
case VIDIOC_TRY_EXT_CTRLS32: cmd = VIDIOC_TRY_EXT_CTRLS; break;
|
||||||
|
case VIDIOC_DQEVENT32: cmd = VIDIOC_DQEVENT; break;
|
||||||
case VIDIOC_OVERLAY32: cmd = VIDIOC_OVERLAY; break;
|
case VIDIOC_OVERLAY32: cmd = VIDIOC_OVERLAY; break;
|
||||||
case VIDIOC_STREAMON32: cmd = VIDIOC_STREAMON; break;
|
case VIDIOC_STREAMON32: cmd = VIDIOC_STREAMON; break;
|
||||||
case VIDIOC_STREAMOFF32: cmd = VIDIOC_STREAMOFF; break;
|
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
|
|||||||
err = get_v4l2_ext_controls32(&karg.v2ecs, up);
|
err = get_v4l2_ext_controls32(&karg.v2ecs, up);
|
||||||
compatible_arg = 0;
|
compatible_arg = 0;
|
||||||
break;
|
break;
|
||||||
|
case VIDIOC_DQEVENT:
|
||||||
|
compatible_arg = 0;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
@ -818,6 +850,10 @@ static long do_video_ioctl(struct file *file, unsigned int cmd, unsigned long ar
|
|||||||
err = put_v4l2_framebuffer32(&karg.v2fb, up);
|
err = put_v4l2_framebuffer32(&karg.v2fb, up);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case VIDIOC_DQEVENT:
|
||||||
|
err = put_v4l2_event32(&karg.v2ev, up);
|
||||||
|
break;
|
||||||
|
|
||||||
case VIDIOC_G_FMT:
|
case VIDIOC_G_FMT:
|
||||||
case VIDIOC_S_FMT:
|
case VIDIOC_S_FMT:
|
||||||
case VIDIOC_TRY_FMT:
|
case VIDIOC_TRY_FMT:
|
||||||
@ -920,6 +956,7 @@ long v4l2_compat_ioctl32(struct file *file, unsigned int cmd, unsigned long arg)
|
|||||||
case VIDIOC_S_DV_TIMINGS:
|
case VIDIOC_S_DV_TIMINGS:
|
||||||
case VIDIOC_G_DV_TIMINGS:
|
case VIDIOC_G_DV_TIMINGS:
|
||||||
case VIDIOC_DQEVENT:
|
case VIDIOC_DQEVENT:
|
||||||
|
case VIDIOC_DQEVENT32:
|
||||||
case VIDIOC_SUBSCRIBE_EVENT:
|
case VIDIOC_SUBSCRIBE_EVENT:
|
||||||
case VIDIOC_UNSUBSCRIBE_EVENT:
|
case VIDIOC_UNSUBSCRIBE_EVENT:
|
||||||
ret = do_video_ioctl(file, cmd, arg);
|
ret = do_video_ioctl(file, cmd, arg);
|
||||||
|
@ -158,6 +158,7 @@ int put_compat_timespec(const struct timespec *ts, struct compat_timespec __user
|
|||||||
__put_user(ts->tv_sec, &cts->tv_sec) ||
|
__put_user(ts->tv_sec, &cts->tv_sec) ||
|
||||||
__put_user(ts->tv_nsec, &cts->tv_nsec)) ? -EFAULT : 0;
|
__put_user(ts->tv_nsec, &cts->tv_nsec)) ? -EFAULT : 0;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(put_compat_timespec);
|
||||||
|
|
||||||
static long compat_nanosleep_restart(struct restart_block *restart)
|
static long compat_nanosleep_restart(struct restart_block *restart)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user