1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 235ea11ffSHans Verkuil /* 335ea11ffSHans Verkuil * 435ea11ffSHans Verkuil * V 4 L 2 D R I V E R H E L P E R A P I 535ea11ffSHans Verkuil * 635ea11ffSHans Verkuil * Moved from videodev2.h 735ea11ffSHans Verkuil * 835ea11ffSHans Verkuil * Some commonly needed functions for drivers (v4l2-common.o module) 935ea11ffSHans Verkuil */ 1035ea11ffSHans Verkuil #ifndef _V4L2_IOCTL_H 1135ea11ffSHans Verkuil #define _V4L2_IOCTL_H 1235ea11ffSHans Verkuil 1335ea11ffSHans Verkuil #include <linux/poll.h> 1435ea11ffSHans Verkuil #include <linux/fs.h> 1535ea11ffSHans Verkuil #include <linux/mutex.h> 16174cd4b1SIngo Molnar #include <linux/sched/signal.h> 1735ea11ffSHans Verkuil #include <linux/compiler.h> /* need __user */ 1835ea11ffSHans Verkuil #include <linux/videodev2.h> 1935ea11ffSHans Verkuil 20d3d7c963SSakari Ailus struct v4l2_fh; 21d3d7c963SSakari Ailus 22c91661f1SMauro Carvalho Chehab /** 23c91661f1SMauro Carvalho Chehab * struct v4l2_ioctl_ops - describe operations for each V4L2 ioctl 24c91661f1SMauro Carvalho Chehab * 25c91661f1SMauro Carvalho Chehab * @vidioc_querycap: pointer to the function that implements 26c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_QUERYCAP <vidioc_querycap>` ioctl 27c91661f1SMauro Carvalho Chehab * @vidioc_enum_fmt_vid_cap: pointer to the function that implements 28c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_ENUM_FMT <vidioc_enum_fmt>` ioctl logic 297e98b7b5SBoris Brezillon * for video capture in single and multi plane mode 30c91661f1SMauro Carvalho Chehab * @vidioc_enum_fmt_vid_overlay: pointer to the function that implements 31c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_ENUM_FMT <vidioc_enum_fmt>` ioctl logic 32c91661f1SMauro Carvalho Chehab * for video overlay 33c91661f1SMauro Carvalho Chehab * @vidioc_enum_fmt_vid_out: pointer to the function that implements 34c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_ENUM_FMT <vidioc_enum_fmt>` ioctl logic 357e98b7b5SBoris Brezillon * for video output in single and multi plane mode 36c91661f1SMauro Carvalho Chehab * @vidioc_enum_fmt_sdr_cap: pointer to the function that implements 37c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_ENUM_FMT <vidioc_enum_fmt>` ioctl logic 38c91661f1SMauro Carvalho Chehab * for Software Defined Radio capture 39c91661f1SMauro Carvalho Chehab * @vidioc_enum_fmt_sdr_out: pointer to the function that implements 40c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_ENUM_FMT <vidioc_enum_fmt>` ioctl logic 41c91661f1SMauro Carvalho Chehab * for Software Defined Radio output 42fb9ffa6aSLaurent Pinchart * @vidioc_enum_fmt_meta_cap: pointer to the function that implements 43fb9ffa6aSLaurent Pinchart * :ref:`VIDIOC_ENUM_FMT <vidioc_enum_fmt>` ioctl logic 44fb9ffa6aSLaurent Pinchart * for metadata capture 4572148d1aSSakari Ailus * @vidioc_enum_fmt_meta_out: pointer to the function that implements 4672148d1aSSakari Ailus * :ref:`VIDIOC_ENUM_FMT <vidioc_enum_fmt>` ioctl logic 4772148d1aSSakari Ailus * for metadata output 48c91661f1SMauro Carvalho Chehab * @vidioc_g_fmt_vid_cap: pointer to the function that implements 49c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_G_FMT <vidioc_g_fmt>` ioctl logic for video capture 50c91661f1SMauro Carvalho Chehab * in single plane mode 51c91661f1SMauro Carvalho Chehab * @vidioc_g_fmt_vid_overlay: pointer to the function that implements 52c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_G_FMT <vidioc_g_fmt>` ioctl logic for video overlay 53c91661f1SMauro Carvalho Chehab * @vidioc_g_fmt_vid_out: pointer to the function that implements 54c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_G_FMT <vidioc_g_fmt>` ioctl logic for video out 55c91661f1SMauro Carvalho Chehab * in single plane mode 56c91661f1SMauro Carvalho Chehab * @vidioc_g_fmt_vid_out_overlay: pointer to the function that implements 57c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_G_FMT <vidioc_g_fmt>` ioctl logic for video overlay output 58c91661f1SMauro Carvalho Chehab * @vidioc_g_fmt_vbi_cap: pointer to the function that implements 59c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_G_FMT <vidioc_g_fmt>` ioctl logic for raw VBI capture 60c91661f1SMauro Carvalho Chehab * @vidioc_g_fmt_vbi_out: pointer to the function that implements 61c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_G_FMT <vidioc_g_fmt>` ioctl logic for raw VBI output 62c91661f1SMauro Carvalho Chehab * @vidioc_g_fmt_sliced_vbi_cap: pointer to the function that implements 63c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_G_FMT <vidioc_g_fmt>` ioctl logic for sliced VBI capture 64c91661f1SMauro Carvalho Chehab * @vidioc_g_fmt_sliced_vbi_out: pointer to the function that implements 65c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_G_FMT <vidioc_g_fmt>` ioctl logic for sliced VBI output 66c91661f1SMauro Carvalho Chehab * @vidioc_g_fmt_vid_cap_mplane: pointer to the function that implements 67c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_G_FMT <vidioc_g_fmt>` ioctl logic for video capture 68c91661f1SMauro Carvalho Chehab * in multiple plane mode 69c91661f1SMauro Carvalho Chehab * @vidioc_g_fmt_vid_out_mplane: pointer to the function that implements 70c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_G_FMT <vidioc_g_fmt>` ioctl logic for video out 71c91661f1SMauro Carvalho Chehab * in multiplane plane mode 72c91661f1SMauro Carvalho Chehab * @vidioc_g_fmt_sdr_cap: pointer to the function that implements 73c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_G_FMT <vidioc_g_fmt>` ioctl logic for Software Defined 74c91661f1SMauro Carvalho Chehab * Radio capture 75c91661f1SMauro Carvalho Chehab * @vidioc_g_fmt_sdr_out: pointer to the function that implements 76c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_G_FMT <vidioc_g_fmt>` ioctl logic for Software Defined 77c91661f1SMauro Carvalho Chehab * Radio output 78fb9ffa6aSLaurent Pinchart * @vidioc_g_fmt_meta_cap: pointer to the function that implements 79fb9ffa6aSLaurent Pinchart * :ref:`VIDIOC_G_FMT <vidioc_g_fmt>` ioctl logic for metadata capture 8072148d1aSSakari Ailus * @vidioc_g_fmt_meta_out: pointer to the function that implements 8172148d1aSSakari Ailus * :ref:`VIDIOC_G_FMT <vidioc_g_fmt>` ioctl logic for metadata output 82c91661f1SMauro Carvalho Chehab * @vidioc_s_fmt_vid_cap: pointer to the function that implements 83c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_S_FMT <vidioc_g_fmt>` ioctl logic for video capture 84c91661f1SMauro Carvalho Chehab * in single plane mode 85c91661f1SMauro Carvalho Chehab * @vidioc_s_fmt_vid_overlay: pointer to the function that implements 86c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_S_FMT <vidioc_g_fmt>` ioctl logic for video overlay 87c91661f1SMauro Carvalho Chehab * @vidioc_s_fmt_vid_out: pointer to the function that implements 88c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_S_FMT <vidioc_g_fmt>` ioctl logic for video out 89c91661f1SMauro Carvalho Chehab * in single plane mode 90c91661f1SMauro Carvalho Chehab * @vidioc_s_fmt_vid_out_overlay: pointer to the function that implements 91c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_S_FMT <vidioc_g_fmt>` ioctl logic for video overlay output 92c91661f1SMauro Carvalho Chehab * @vidioc_s_fmt_vbi_cap: pointer to the function that implements 93c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_S_FMT <vidioc_g_fmt>` ioctl logic for raw VBI capture 94c91661f1SMauro Carvalho Chehab * @vidioc_s_fmt_vbi_out: pointer to the function that implements 95c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_S_FMT <vidioc_g_fmt>` ioctl logic for raw VBI output 96c91661f1SMauro Carvalho Chehab * @vidioc_s_fmt_sliced_vbi_cap: pointer to the function that implements 97c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_S_FMT <vidioc_g_fmt>` ioctl logic for sliced VBI capture 98c91661f1SMauro Carvalho Chehab * @vidioc_s_fmt_sliced_vbi_out: pointer to the function that implements 99c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_S_FMT <vidioc_g_fmt>` ioctl logic for sliced VBI output 100c91661f1SMauro Carvalho Chehab * @vidioc_s_fmt_vid_cap_mplane: pointer to the function that implements 101c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_S_FMT <vidioc_g_fmt>` ioctl logic for video capture 102c91661f1SMauro Carvalho Chehab * in multiple plane mode 103c91661f1SMauro Carvalho Chehab * @vidioc_s_fmt_vid_out_mplane: pointer to the function that implements 104c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_S_FMT <vidioc_g_fmt>` ioctl logic for video out 105c91661f1SMauro Carvalho Chehab * in multiplane plane mode 106c91661f1SMauro Carvalho Chehab * @vidioc_s_fmt_sdr_cap: pointer to the function that implements 107c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_S_FMT <vidioc_g_fmt>` ioctl logic for Software Defined 108c91661f1SMauro Carvalho Chehab * Radio capture 109c91661f1SMauro Carvalho Chehab * @vidioc_s_fmt_sdr_out: pointer to the function that implements 110c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_S_FMT <vidioc_g_fmt>` ioctl logic for Software Defined 111c91661f1SMauro Carvalho Chehab * Radio output 112fb9ffa6aSLaurent Pinchart * @vidioc_s_fmt_meta_cap: pointer to the function that implements 113fb9ffa6aSLaurent Pinchart * :ref:`VIDIOC_S_FMT <vidioc_g_fmt>` ioctl logic for metadata capture 11472148d1aSSakari Ailus * @vidioc_s_fmt_meta_out: pointer to the function that implements 11572148d1aSSakari Ailus * :ref:`VIDIOC_S_FMT <vidioc_g_fmt>` ioctl logic for metadata output 116c91661f1SMauro Carvalho Chehab * @vidioc_try_fmt_vid_cap: pointer to the function that implements 117c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_TRY_FMT <vidioc_g_fmt>` ioctl logic for video capture 118c91661f1SMauro Carvalho Chehab * in single plane mode 119c91661f1SMauro Carvalho Chehab * @vidioc_try_fmt_vid_overlay: pointer to the function that implements 120c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_TRY_FMT <vidioc_g_fmt>` ioctl logic for video overlay 121c91661f1SMauro Carvalho Chehab * @vidioc_try_fmt_vid_out: pointer to the function that implements 122c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_TRY_FMT <vidioc_g_fmt>` ioctl logic for video out 123c91661f1SMauro Carvalho Chehab * in single plane mode 124c91661f1SMauro Carvalho Chehab * @vidioc_try_fmt_vid_out_overlay: pointer to the function that implements 125c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_TRY_FMT <vidioc_g_fmt>` ioctl logic for video overlay 126c91661f1SMauro Carvalho Chehab * output 127c91661f1SMauro Carvalho Chehab * @vidioc_try_fmt_vbi_cap: pointer to the function that implements 128c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_TRY_FMT <vidioc_g_fmt>` ioctl logic for raw VBI capture 129c91661f1SMauro Carvalho Chehab * @vidioc_try_fmt_vbi_out: pointer to the function that implements 130c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_TRY_FMT <vidioc_g_fmt>` ioctl logic for raw VBI output 131c91661f1SMauro Carvalho Chehab * @vidioc_try_fmt_sliced_vbi_cap: pointer to the function that implements 132c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_TRY_FMT <vidioc_g_fmt>` ioctl logic for sliced VBI 133c91661f1SMauro Carvalho Chehab * capture 134c91661f1SMauro Carvalho Chehab * @vidioc_try_fmt_sliced_vbi_out: pointer to the function that implements 135c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_TRY_FMT <vidioc_g_fmt>` ioctl logic for sliced VBI output 136c91661f1SMauro Carvalho Chehab * @vidioc_try_fmt_vid_cap_mplane: pointer to the function that implements 137c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_TRY_FMT <vidioc_g_fmt>` ioctl logic for video capture 138c91661f1SMauro Carvalho Chehab * in multiple plane mode 139c91661f1SMauro Carvalho Chehab * @vidioc_try_fmt_vid_out_mplane: pointer to the function that implements 140c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_TRY_FMT <vidioc_g_fmt>` ioctl logic for video out 141c91661f1SMauro Carvalho Chehab * in multiplane plane mode 142c91661f1SMauro Carvalho Chehab * @vidioc_try_fmt_sdr_cap: pointer to the function that implements 143c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_TRY_FMT <vidioc_g_fmt>` ioctl logic for Software Defined 144c91661f1SMauro Carvalho Chehab * Radio capture 145c91661f1SMauro Carvalho Chehab * @vidioc_try_fmt_sdr_out: pointer to the function that implements 146c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_TRY_FMT <vidioc_g_fmt>` ioctl logic for Software Defined 147c91661f1SMauro Carvalho Chehab * Radio output 148fb9ffa6aSLaurent Pinchart * @vidioc_try_fmt_meta_cap: pointer to the function that implements 149fb9ffa6aSLaurent Pinchart * :ref:`VIDIOC_TRY_FMT <vidioc_g_fmt>` ioctl logic for metadata capture 15072148d1aSSakari Ailus * @vidioc_try_fmt_meta_out: pointer to the function that implements 15172148d1aSSakari Ailus * :ref:`VIDIOC_TRY_FMT <vidioc_g_fmt>` ioctl logic for metadata output 152c91661f1SMauro Carvalho Chehab * @vidioc_reqbufs: pointer to the function that implements 153c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_REQBUFS <vidioc_reqbufs>` ioctl 154c91661f1SMauro Carvalho Chehab * @vidioc_querybuf: pointer to the function that implements 155c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_QUERYBUF <vidioc_querybuf>` ioctl 156c91661f1SMauro Carvalho Chehab * @vidioc_qbuf: pointer to the function that implements 157c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_QBUF <vidioc_qbuf>` ioctl 158c91661f1SMauro Carvalho Chehab * @vidioc_expbuf: pointer to the function that implements 159c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_EXPBUF <vidioc_expbuf>` ioctl 160c91661f1SMauro Carvalho Chehab * @vidioc_dqbuf: pointer to the function that implements 161c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_DQBUF <vidioc_qbuf>` ioctl 162c91661f1SMauro Carvalho Chehab * @vidioc_create_bufs: pointer to the function that implements 163c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_CREATE_BUFS <vidioc_create_bufs>` ioctl 164c91661f1SMauro Carvalho Chehab * @vidioc_prepare_buf: pointer to the function that implements 165c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_PREPARE_BUF <vidioc_prepare_buf>` ioctl 166c91661f1SMauro Carvalho Chehab * @vidioc_overlay: pointer to the function that implements 167c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_OVERLAY <vidioc_overlay>` ioctl 168c91661f1SMauro Carvalho Chehab * @vidioc_g_fbuf: pointer to the function that implements 169c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_G_FBUF <vidioc_g_fbuf>` ioctl 170c91661f1SMauro Carvalho Chehab * @vidioc_s_fbuf: pointer to the function that implements 171c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_S_FBUF <vidioc_g_fbuf>` ioctl 172c91661f1SMauro Carvalho Chehab * @vidioc_streamon: pointer to the function that implements 173c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_STREAMON <vidioc_streamon>` ioctl 174c91661f1SMauro Carvalho Chehab * @vidioc_streamoff: pointer to the function that implements 175c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_STREAMOFF <vidioc_streamon>` ioctl 176c91661f1SMauro Carvalho Chehab * @vidioc_g_std: pointer to the function that implements 177c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_G_STD <vidioc_g_std>` ioctl 178c91661f1SMauro Carvalho Chehab * @vidioc_s_std: pointer to the function that implements 179c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_S_STD <vidioc_g_std>` ioctl 180c91661f1SMauro Carvalho Chehab * @vidioc_querystd: pointer to the function that implements 181c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_QUERYSTD <vidioc_querystd>` ioctl 182c91661f1SMauro Carvalho Chehab * @vidioc_enum_input: pointer to the function that implements 183c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_ENUM_INPUT <vidioc_g_input>` ioctl 184c91661f1SMauro Carvalho Chehab * @vidioc_g_input: pointer to the function that implements 185c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_G_INPUT <vidioc_g_input>` ioctl 186c91661f1SMauro Carvalho Chehab * @vidioc_s_input: pointer to the function that implements 187c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_S_INPUT <vidioc_g_input>` ioctl 188c91661f1SMauro Carvalho Chehab * @vidioc_enum_output: pointer to the function that implements 189c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_ENUM_OUTPUT <vidioc_g_output>` ioctl 190c91661f1SMauro Carvalho Chehab * @vidioc_g_output: pointer to the function that implements 191c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_G_OUTPUT <vidioc_g_output>` ioctl 192c91661f1SMauro Carvalho Chehab * @vidioc_s_output: pointer to the function that implements 193c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_S_OUTPUT <vidioc_g_output>` ioctl 194c91661f1SMauro Carvalho Chehab * @vidioc_queryctrl: pointer to the function that implements 195c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_QUERYCTRL <vidioc_queryctrl>` ioctl 196c91661f1SMauro Carvalho Chehab * @vidioc_query_ext_ctrl: pointer to the function that implements 197c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_QUERY_EXT_CTRL <vidioc_queryctrl>` ioctl 198c91661f1SMauro Carvalho Chehab * @vidioc_g_ctrl: pointer to the function that implements 199c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_G_CTRL <vidioc_g_ctrl>` ioctl 200c91661f1SMauro Carvalho Chehab * @vidioc_s_ctrl: pointer to the function that implements 201c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_S_CTRL <vidioc_g_ctrl>` ioctl 202c91661f1SMauro Carvalho Chehab * @vidioc_g_ext_ctrls: pointer to the function that implements 203c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_G_EXT_CTRLS <vidioc_g_ext_ctrls>` ioctl 204c91661f1SMauro Carvalho Chehab * @vidioc_s_ext_ctrls: pointer to the function that implements 205c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_S_EXT_CTRLS <vidioc_g_ext_ctrls>` ioctl 206c91661f1SMauro Carvalho Chehab * @vidioc_try_ext_ctrls: pointer to the function that implements 207c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_TRY_EXT_CTRLS <vidioc_g_ext_ctrls>` ioctl 208c91661f1SMauro Carvalho Chehab * @vidioc_querymenu: pointer to the function that implements 209c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_QUERYMENU <vidioc_queryctrl>` ioctl 210c91661f1SMauro Carvalho Chehab * @vidioc_enumaudio: pointer to the function that implements 211c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_ENUMAUDIO <vidioc_enumaudio>` ioctl 212c91661f1SMauro Carvalho Chehab * @vidioc_g_audio: pointer to the function that implements 213c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_G_AUDIO <vidioc_g_audio>` ioctl 214c91661f1SMauro Carvalho Chehab * @vidioc_s_audio: pointer to the function that implements 215c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_S_AUDIO <vidioc_g_audio>` ioctl 216c91661f1SMauro Carvalho Chehab * @vidioc_enumaudout: pointer to the function that implements 217c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_ENUMAUDOUT <vidioc_enumaudout>` ioctl 218c91661f1SMauro Carvalho Chehab * @vidioc_g_audout: pointer to the function that implements 219c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_G_AUDOUT <vidioc_g_audout>` ioctl 220c91661f1SMauro Carvalho Chehab * @vidioc_s_audout: pointer to the function that implements 221c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_S_AUDOUT <vidioc_g_audout>` ioctl 222c91661f1SMauro Carvalho Chehab * @vidioc_g_modulator: pointer to the function that implements 223c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_G_MODULATOR <vidioc_g_modulator>` ioctl 224c91661f1SMauro Carvalho Chehab * @vidioc_s_modulator: pointer to the function that implements 225c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_S_MODULATOR <vidioc_g_modulator>` ioctl 2265200ab6aSHans Verkuil * @vidioc_g_pixelaspect: pointer to the function that implements 2275200ab6aSHans Verkuil * the pixelaspect part of the :ref:`VIDIOC_CROPCAP <vidioc_cropcap>` ioctl 228c91661f1SMauro Carvalho Chehab * @vidioc_g_selection: pointer to the function that implements 229c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_G_SELECTION <vidioc_g_selection>` ioctl 230c91661f1SMauro Carvalho Chehab * @vidioc_s_selection: pointer to the function that implements 231c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_S_SELECTION <vidioc_g_selection>` ioctl 232c91661f1SMauro Carvalho Chehab * @vidioc_g_jpegcomp: pointer to the function that implements 233c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_G_JPEGCOMP <vidioc_g_jpegcomp>` ioctl 234c91661f1SMauro Carvalho Chehab * @vidioc_s_jpegcomp: pointer to the function that implements 235c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_S_JPEGCOMP <vidioc_g_jpegcomp>` ioctl 236c91661f1SMauro Carvalho Chehab * @vidioc_g_enc_index: pointer to the function that implements 237c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_G_ENC_INDEX <vidioc_g_enc_index>` ioctl 238c91661f1SMauro Carvalho Chehab * @vidioc_encoder_cmd: pointer to the function that implements 239c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_ENCODER_CMD <vidioc_encoder_cmd>` ioctl 240c91661f1SMauro Carvalho Chehab * @vidioc_try_encoder_cmd: pointer to the function that implements 241c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_TRY_ENCODER_CMD <vidioc_encoder_cmd>` ioctl 242c91661f1SMauro Carvalho Chehab * @vidioc_decoder_cmd: pointer to the function that implements 243c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_DECODER_CMD <vidioc_decoder_cmd>` ioctl 244c91661f1SMauro Carvalho Chehab * @vidioc_try_decoder_cmd: pointer to the function that implements 245c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_TRY_DECODER_CMD <vidioc_decoder_cmd>` ioctl 246c91661f1SMauro Carvalho Chehab * @vidioc_g_parm: pointer to the function that implements 247c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_G_PARM <vidioc_g_parm>` ioctl 248c91661f1SMauro Carvalho Chehab * @vidioc_s_parm: pointer to the function that implements 249c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_S_PARM <vidioc_g_parm>` ioctl 250c91661f1SMauro Carvalho Chehab * @vidioc_g_tuner: pointer to the function that implements 251c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_G_TUNER <vidioc_g_tuner>` ioctl 252c91661f1SMauro Carvalho Chehab * @vidioc_s_tuner: pointer to the function that implements 253c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_S_TUNER <vidioc_g_tuner>` ioctl 254c91661f1SMauro Carvalho Chehab * @vidioc_g_frequency: pointer to the function that implements 255c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_G_FREQUENCY <vidioc_g_frequency>` ioctl 256c91661f1SMauro Carvalho Chehab * @vidioc_s_frequency: pointer to the function that implements 257c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_S_FREQUENCY <vidioc_g_frequency>` ioctl 258c91661f1SMauro Carvalho Chehab * @vidioc_enum_freq_bands: pointer to the function that implements 259c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_ENUM_FREQ_BANDS <vidioc_enum_freq_bands>` ioctl 260c91661f1SMauro Carvalho Chehab * @vidioc_g_sliced_vbi_cap: pointer to the function that implements 261c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_G_SLICED_VBI_CAP <vidioc_g_sliced_vbi_cap>` ioctl 262c91661f1SMauro Carvalho Chehab * @vidioc_log_status: pointer to the function that implements 263c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_LOG_STATUS <vidioc_log_status>` ioctl 264c91661f1SMauro Carvalho Chehab * @vidioc_s_hw_freq_seek: pointer to the function that implements 265c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_S_HW_FREQ_SEEK <vidioc_s_hw_freq_seek>` ioctl 266c91661f1SMauro Carvalho Chehab * @vidioc_g_register: pointer to the function that implements 267c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_DBG_G_REGISTER <vidioc_dbg_g_register>` ioctl 268c91661f1SMauro Carvalho Chehab * @vidioc_s_register: pointer to the function that implements 269c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_DBG_S_REGISTER <vidioc_dbg_g_register>` ioctl 270c91661f1SMauro Carvalho Chehab * @vidioc_g_chip_info: pointer to the function that implements 271c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_DBG_G_CHIP_INFO <vidioc_dbg_g_chip_info>` ioctl 272c91661f1SMauro Carvalho Chehab * @vidioc_enum_framesizes: pointer to the function that implements 273c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_ENUM_FRAMESIZES <vidioc_enum_framesizes>` ioctl 274c91661f1SMauro Carvalho Chehab * @vidioc_enum_frameintervals: pointer to the function that implements 275c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_ENUM_FRAMEINTERVALS <vidioc_enum_frameintervals>` ioctl 276c91661f1SMauro Carvalho Chehab * @vidioc_s_dv_timings: pointer to the function that implements 277c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_S_DV_TIMINGS <vidioc_g_dv_timings>` ioctl 278c91661f1SMauro Carvalho Chehab * @vidioc_g_dv_timings: pointer to the function that implements 279c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_G_DV_TIMINGS <vidioc_g_dv_timings>` ioctl 280c91661f1SMauro Carvalho Chehab * @vidioc_query_dv_timings: pointer to the function that implements 281c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_QUERY_DV_TIMINGS <vidioc_query_dv_timings>` ioctl 282c91661f1SMauro Carvalho Chehab * @vidioc_enum_dv_timings: pointer to the function that implements 283c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_ENUM_DV_TIMINGS <vidioc_enum_dv_timings>` ioctl 284c91661f1SMauro Carvalho Chehab * @vidioc_dv_timings_cap: pointer to the function that implements 285c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_DV_TIMINGS_CAP <vidioc_dv_timings_cap>` ioctl 286c91661f1SMauro Carvalho Chehab * @vidioc_g_edid: pointer to the function that implements 287c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_G_EDID <vidioc_g_edid>` ioctl 288c91661f1SMauro Carvalho Chehab * @vidioc_s_edid: pointer to the function that implements 289c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_S_EDID <vidioc_g_edid>` ioctl 290c91661f1SMauro Carvalho Chehab * @vidioc_subscribe_event: pointer to the function that implements 291c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_SUBSCRIBE_EVENT <vidioc_subscribe_event>` ioctl 292c91661f1SMauro Carvalho Chehab * @vidioc_unsubscribe_event: pointer to the function that implements 293c91661f1SMauro Carvalho Chehab * :ref:`VIDIOC_UNSUBSCRIBE_EVENT <vidioc_unsubscribe_event>` ioctl 294c91661f1SMauro Carvalho Chehab * @vidioc_default: pointed used to allow other ioctls 295c91661f1SMauro Carvalho Chehab */ 296a399810cSHans Verkuil struct v4l2_ioctl_ops { 297a399810cSHans Verkuil /* ioctl callbacks */ 298a399810cSHans Verkuil 299a399810cSHans Verkuil /* VIDIOC_QUERYCAP handler */ 300bba65c13SMauro Carvalho Chehab int (*vidioc_querycap)(struct file *file, void *fh, 301bba65c13SMauro Carvalho Chehab struct v4l2_capability *cap); 302a399810cSHans Verkuil 303a399810cSHans Verkuil /* VIDIOC_ENUM_FMT handlers */ 304a399810cSHans Verkuil int (*vidioc_enum_fmt_vid_cap)(struct file *file, void *fh, 305a399810cSHans Verkuil struct v4l2_fmtdesc *f); 306a399810cSHans Verkuil int (*vidioc_enum_fmt_vid_overlay)(struct file *file, void *fh, 307a399810cSHans Verkuil struct v4l2_fmtdesc *f); 308a399810cSHans Verkuil int (*vidioc_enum_fmt_vid_out)(struct file *file, void *fh, 309a399810cSHans Verkuil struct v4l2_fmtdesc *f); 310855df1dcSAntti Palosaari int (*vidioc_enum_fmt_sdr_cap)(struct file *file, void *fh, 311855df1dcSAntti Palosaari struct v4l2_fmtdesc *f); 3129effc72fSAntti Palosaari int (*vidioc_enum_fmt_sdr_out)(struct file *file, void *fh, 3139effc72fSAntti Palosaari struct v4l2_fmtdesc *f); 314fb9ffa6aSLaurent Pinchart int (*vidioc_enum_fmt_meta_cap)(struct file *file, void *fh, 315fb9ffa6aSLaurent Pinchart struct v4l2_fmtdesc *f); 31672148d1aSSakari Ailus int (*vidioc_enum_fmt_meta_out)(struct file *file, void *fh, 31772148d1aSSakari Ailus struct v4l2_fmtdesc *f); 318a399810cSHans Verkuil 319a399810cSHans Verkuil /* VIDIOC_G_FMT handlers */ 320a399810cSHans Verkuil int (*vidioc_g_fmt_vid_cap)(struct file *file, void *fh, 321a399810cSHans Verkuil struct v4l2_format *f); 322a399810cSHans Verkuil int (*vidioc_g_fmt_vid_overlay)(struct file *file, void *fh, 323a399810cSHans Verkuil struct v4l2_format *f); 324a399810cSHans Verkuil int (*vidioc_g_fmt_vid_out)(struct file *file, void *fh, 325a399810cSHans Verkuil struct v4l2_format *f); 326a399810cSHans Verkuil int (*vidioc_g_fmt_vid_out_overlay)(struct file *file, void *fh, 327a399810cSHans Verkuil struct v4l2_format *f); 328a399810cSHans Verkuil int (*vidioc_g_fmt_vbi_cap)(struct file *file, void *fh, 329a399810cSHans Verkuil struct v4l2_format *f); 330a399810cSHans Verkuil int (*vidioc_g_fmt_vbi_out)(struct file *file, void *fh, 331a399810cSHans Verkuil struct v4l2_format *f); 332a399810cSHans Verkuil int (*vidioc_g_fmt_sliced_vbi_cap)(struct file *file, void *fh, 333a399810cSHans Verkuil struct v4l2_format *f); 334a399810cSHans Verkuil int (*vidioc_g_fmt_sliced_vbi_out)(struct file *file, void *fh, 335a399810cSHans Verkuil struct v4l2_format *f); 336d14e6d76SPawel Osciak int (*vidioc_g_fmt_vid_cap_mplane)(struct file *file, void *fh, 337d14e6d76SPawel Osciak struct v4l2_format *f); 338d14e6d76SPawel Osciak int (*vidioc_g_fmt_vid_out_mplane)(struct file *file, void *fh, 339d14e6d76SPawel Osciak struct v4l2_format *f); 340855df1dcSAntti Palosaari int (*vidioc_g_fmt_sdr_cap)(struct file *file, void *fh, 341855df1dcSAntti Palosaari struct v4l2_format *f); 3429effc72fSAntti Palosaari int (*vidioc_g_fmt_sdr_out)(struct file *file, void *fh, 3439effc72fSAntti Palosaari struct v4l2_format *f); 344fb9ffa6aSLaurent Pinchart int (*vidioc_g_fmt_meta_cap)(struct file *file, void *fh, 345fb9ffa6aSLaurent Pinchart struct v4l2_format *f); 34672148d1aSSakari Ailus int (*vidioc_g_fmt_meta_out)(struct file *file, void *fh, 34772148d1aSSakari Ailus struct v4l2_format *f); 348a399810cSHans Verkuil 349a399810cSHans Verkuil /* VIDIOC_S_FMT handlers */ 350a399810cSHans Verkuil int (*vidioc_s_fmt_vid_cap)(struct file *file, void *fh, 351a399810cSHans Verkuil struct v4l2_format *f); 352a399810cSHans Verkuil int (*vidioc_s_fmt_vid_overlay)(struct file *file, void *fh, 353a399810cSHans Verkuil struct v4l2_format *f); 354a399810cSHans Verkuil int (*vidioc_s_fmt_vid_out)(struct file *file, void *fh, 355a399810cSHans Verkuil struct v4l2_format *f); 356a399810cSHans Verkuil int (*vidioc_s_fmt_vid_out_overlay)(struct file *file, void *fh, 357a399810cSHans Verkuil struct v4l2_format *f); 358a399810cSHans Verkuil int (*vidioc_s_fmt_vbi_cap)(struct file *file, void *fh, 359a399810cSHans Verkuil struct v4l2_format *f); 360a399810cSHans Verkuil int (*vidioc_s_fmt_vbi_out)(struct file *file, void *fh, 361a399810cSHans Verkuil struct v4l2_format *f); 362a399810cSHans Verkuil int (*vidioc_s_fmt_sliced_vbi_cap)(struct file *file, void *fh, 363a399810cSHans Verkuil struct v4l2_format *f); 364a399810cSHans Verkuil int (*vidioc_s_fmt_sliced_vbi_out)(struct file *file, void *fh, 365a399810cSHans Verkuil struct v4l2_format *f); 366d14e6d76SPawel Osciak int (*vidioc_s_fmt_vid_cap_mplane)(struct file *file, void *fh, 367d14e6d76SPawel Osciak struct v4l2_format *f); 368d14e6d76SPawel Osciak int (*vidioc_s_fmt_vid_out_mplane)(struct file *file, void *fh, 369d14e6d76SPawel Osciak struct v4l2_format *f); 370855df1dcSAntti Palosaari int (*vidioc_s_fmt_sdr_cap)(struct file *file, void *fh, 371855df1dcSAntti Palosaari struct v4l2_format *f); 3729effc72fSAntti Palosaari int (*vidioc_s_fmt_sdr_out)(struct file *file, void *fh, 3739effc72fSAntti Palosaari struct v4l2_format *f); 374fb9ffa6aSLaurent Pinchart int (*vidioc_s_fmt_meta_cap)(struct file *file, void *fh, 375fb9ffa6aSLaurent Pinchart struct v4l2_format *f); 37672148d1aSSakari Ailus int (*vidioc_s_fmt_meta_out)(struct file *file, void *fh, 37772148d1aSSakari Ailus struct v4l2_format *f); 378a399810cSHans Verkuil 379a399810cSHans Verkuil /* VIDIOC_TRY_FMT handlers */ 380a399810cSHans Verkuil int (*vidioc_try_fmt_vid_cap)(struct file *file, void *fh, 381a399810cSHans Verkuil struct v4l2_format *f); 382a399810cSHans Verkuil int (*vidioc_try_fmt_vid_overlay)(struct file *file, void *fh, 383a399810cSHans Verkuil struct v4l2_format *f); 384a399810cSHans Verkuil int (*vidioc_try_fmt_vid_out)(struct file *file, void *fh, 385a399810cSHans Verkuil struct v4l2_format *f); 386a399810cSHans Verkuil int (*vidioc_try_fmt_vid_out_overlay)(struct file *file, void *fh, 387a399810cSHans Verkuil struct v4l2_format *f); 388a399810cSHans Verkuil int (*vidioc_try_fmt_vbi_cap)(struct file *file, void *fh, 389a399810cSHans Verkuil struct v4l2_format *f); 390a399810cSHans Verkuil int (*vidioc_try_fmt_vbi_out)(struct file *file, void *fh, 391a399810cSHans Verkuil struct v4l2_format *f); 392a399810cSHans Verkuil int (*vidioc_try_fmt_sliced_vbi_cap)(struct file *file, void *fh, 393a399810cSHans Verkuil struct v4l2_format *f); 394a399810cSHans Verkuil int (*vidioc_try_fmt_sliced_vbi_out)(struct file *file, void *fh, 395a399810cSHans Verkuil struct v4l2_format *f); 396d14e6d76SPawel Osciak int (*vidioc_try_fmt_vid_cap_mplane)(struct file *file, void *fh, 397d14e6d76SPawel Osciak struct v4l2_format *f); 398d14e6d76SPawel Osciak int (*vidioc_try_fmt_vid_out_mplane)(struct file *file, void *fh, 399d14e6d76SPawel Osciak struct v4l2_format *f); 400855df1dcSAntti Palosaari int (*vidioc_try_fmt_sdr_cap)(struct file *file, void *fh, 401855df1dcSAntti Palosaari struct v4l2_format *f); 4029effc72fSAntti Palosaari int (*vidioc_try_fmt_sdr_out)(struct file *file, void *fh, 4039effc72fSAntti Palosaari struct v4l2_format *f); 404fb9ffa6aSLaurent Pinchart int (*vidioc_try_fmt_meta_cap)(struct file *file, void *fh, 405fb9ffa6aSLaurent Pinchart struct v4l2_format *f); 40672148d1aSSakari Ailus int (*vidioc_try_fmt_meta_out)(struct file *file, void *fh, 40772148d1aSSakari Ailus struct v4l2_format *f); 408a399810cSHans Verkuil 409a399810cSHans Verkuil /* Buffer handlers */ 410bba65c13SMauro Carvalho Chehab int (*vidioc_reqbufs)(struct file *file, void *fh, 411bba65c13SMauro Carvalho Chehab struct v4l2_requestbuffers *b); 412bba65c13SMauro Carvalho Chehab int (*vidioc_querybuf)(struct file *file, void *fh, 413bba65c13SMauro Carvalho Chehab struct v4l2_buffer *b); 414bba65c13SMauro Carvalho Chehab int (*vidioc_qbuf)(struct file *file, void *fh, 415bba65c13SMauro Carvalho Chehab struct v4l2_buffer *b); 416b799d09aSTomasz Stanislawski int (*vidioc_expbuf)(struct file *file, void *fh, 417b799d09aSTomasz Stanislawski struct v4l2_exportbuffer *e); 418bba65c13SMauro Carvalho Chehab int (*vidioc_dqbuf)(struct file *file, void *fh, 419bba65c13SMauro Carvalho Chehab struct v4l2_buffer *b); 420a399810cSHans Verkuil 421bba65c13SMauro Carvalho Chehab int (*vidioc_create_bufs)(struct file *file, void *fh, 422bba65c13SMauro Carvalho Chehab struct v4l2_create_buffers *b); 423bba65c13SMauro Carvalho Chehab int (*vidioc_prepare_buf)(struct file *file, void *fh, 424bba65c13SMauro Carvalho Chehab struct v4l2_buffer *b); 425a399810cSHans Verkuil 426a399810cSHans Verkuil int (*vidioc_overlay)(struct file *file, void *fh, unsigned int i); 427a399810cSHans Verkuil int (*vidioc_g_fbuf)(struct file *file, void *fh, 428a399810cSHans Verkuil struct v4l2_framebuffer *a); 429a399810cSHans Verkuil int (*vidioc_s_fbuf)(struct file *file, void *fh, 430e6eb28c2SHans Verkuil const struct v4l2_framebuffer *a); 431a399810cSHans Verkuil 432a399810cSHans Verkuil /* Stream on/off */ 433bba65c13SMauro Carvalho Chehab int (*vidioc_streamon)(struct file *file, void *fh, 434bba65c13SMauro Carvalho Chehab enum v4l2_buf_type i); 435bba65c13SMauro Carvalho Chehab int (*vidioc_streamoff)(struct file *file, void *fh, 436bba65c13SMauro Carvalho Chehab enum v4l2_buf_type i); 437a399810cSHans Verkuil 438bba65c13SMauro Carvalho Chehab /* 439bba65c13SMauro Carvalho Chehab * Standard handling 440bba65c13SMauro Carvalho Chehab * 441bba65c13SMauro Carvalho Chehab * Note: ENUMSTD is handled by videodev.c 442a399810cSHans Verkuil */ 443a399810cSHans Verkuil int (*vidioc_g_std)(struct file *file, void *fh, v4l2_std_id *norm); 444314527acSHans Verkuil int (*vidioc_s_std)(struct file *file, void *fh, v4l2_std_id norm); 445a399810cSHans Verkuil int (*vidioc_querystd)(struct file *file, void *fh, v4l2_std_id *a); 446a399810cSHans Verkuil 447a399810cSHans Verkuil /* Input handling */ 448a399810cSHans Verkuil int (*vidioc_enum_input)(struct file *file, void *fh, 449a399810cSHans Verkuil struct v4l2_input *inp); 450a399810cSHans Verkuil int (*vidioc_g_input)(struct file *file, void *fh, unsigned int *i); 451a399810cSHans Verkuil int (*vidioc_s_input)(struct file *file, void *fh, unsigned int i); 452a399810cSHans Verkuil 453a399810cSHans Verkuil /* Output handling */ 454a399810cSHans Verkuil int (*vidioc_enum_output)(struct file *file, void *fh, 455a399810cSHans Verkuil struct v4l2_output *a); 456a399810cSHans Verkuil int (*vidioc_g_output)(struct file *file, void *fh, unsigned int *i); 457a399810cSHans Verkuil int (*vidioc_s_output)(struct file *file, void *fh, unsigned int i); 458a399810cSHans Verkuil 459a399810cSHans Verkuil /* Control handling */ 460a399810cSHans Verkuil int (*vidioc_queryctrl)(struct file *file, void *fh, 461a399810cSHans Verkuil struct v4l2_queryctrl *a); 462e6bee368SHans Verkuil int (*vidioc_query_ext_ctrl)(struct file *file, void *fh, 463e6bee368SHans Verkuil struct v4l2_query_ext_ctrl *a); 464a399810cSHans Verkuil int (*vidioc_g_ctrl)(struct file *file, void *fh, 465a399810cSHans Verkuil struct v4l2_control *a); 466a399810cSHans Verkuil int (*vidioc_s_ctrl)(struct file *file, void *fh, 467a399810cSHans Verkuil struct v4l2_control *a); 468a399810cSHans Verkuil int (*vidioc_g_ext_ctrls)(struct file *file, void *fh, 469a399810cSHans Verkuil struct v4l2_ext_controls *a); 470a399810cSHans Verkuil int (*vidioc_s_ext_ctrls)(struct file *file, void *fh, 471a399810cSHans Verkuil struct v4l2_ext_controls *a); 472a399810cSHans Verkuil int (*vidioc_try_ext_ctrls)(struct file *file, void *fh, 473a399810cSHans Verkuil struct v4l2_ext_controls *a); 474a399810cSHans Verkuil int (*vidioc_querymenu)(struct file *file, void *fh, 475a399810cSHans Verkuil struct v4l2_querymenu *a); 476a399810cSHans Verkuil 477a399810cSHans Verkuil /* Audio ioctls */ 478a399810cSHans Verkuil int (*vidioc_enumaudio)(struct file *file, void *fh, 479a399810cSHans Verkuil struct v4l2_audio *a); 480a399810cSHans Verkuil int (*vidioc_g_audio)(struct file *file, void *fh, 481a399810cSHans Verkuil struct v4l2_audio *a); 482a399810cSHans Verkuil int (*vidioc_s_audio)(struct file *file, void *fh, 4830e8025b9SHans Verkuil const struct v4l2_audio *a); 484a399810cSHans Verkuil 485a399810cSHans Verkuil /* Audio out ioctls */ 486a399810cSHans Verkuil int (*vidioc_enumaudout)(struct file *file, void *fh, 487a399810cSHans Verkuil struct v4l2_audioout *a); 488a399810cSHans Verkuil int (*vidioc_g_audout)(struct file *file, void *fh, 489a399810cSHans Verkuil struct v4l2_audioout *a); 490a399810cSHans Verkuil int (*vidioc_s_audout)(struct file *file, void *fh, 491ba9425bcSHans Verkuil const struct v4l2_audioout *a); 492a399810cSHans Verkuil int (*vidioc_g_modulator)(struct file *file, void *fh, 493a399810cSHans Verkuil struct v4l2_modulator *a); 494a399810cSHans Verkuil int (*vidioc_s_modulator)(struct file *file, void *fh, 4953f70e1f5SHans Verkuil const struct v4l2_modulator *a); 496a399810cSHans Verkuil /* Crop ioctls */ 4975200ab6aSHans Verkuil int (*vidioc_g_pixelaspect)(struct file *file, void *fh, 4985200ab6aSHans Verkuil int buf_type, struct v4l2_fract *aspect); 4990e8caaceSTomasz Stanislawski int (*vidioc_g_selection)(struct file *file, void *fh, 5000e8caaceSTomasz Stanislawski struct v4l2_selection *s); 5010e8caaceSTomasz Stanislawski int (*vidioc_s_selection)(struct file *file, void *fh, 5020e8caaceSTomasz Stanislawski struct v4l2_selection *s); 503a399810cSHans Verkuil /* Compression ioctls */ 504a399810cSHans Verkuil int (*vidioc_g_jpegcomp)(struct file *file, void *fh, 505a399810cSHans Verkuil struct v4l2_jpegcompression *a); 506a399810cSHans Verkuil int (*vidioc_s_jpegcomp)(struct file *file, void *fh, 507d88aab53SHans Verkuil const struct v4l2_jpegcompression *a); 508a399810cSHans Verkuil int (*vidioc_g_enc_index)(struct file *file, void *fh, 509a399810cSHans Verkuil struct v4l2_enc_idx *a); 510a399810cSHans Verkuil int (*vidioc_encoder_cmd)(struct file *file, void *fh, 511a399810cSHans Verkuil struct v4l2_encoder_cmd *a); 512a399810cSHans Verkuil int (*vidioc_try_encoder_cmd)(struct file *file, void *fh, 513a399810cSHans Verkuil struct v4l2_encoder_cmd *a); 514a45c0ad5SHans Verkuil int (*vidioc_decoder_cmd)(struct file *file, void *fh, 515a45c0ad5SHans Verkuil struct v4l2_decoder_cmd *a); 516a45c0ad5SHans Verkuil int (*vidioc_try_decoder_cmd)(struct file *file, void *fh, 517a45c0ad5SHans Verkuil struct v4l2_decoder_cmd *a); 518a399810cSHans Verkuil 519a399810cSHans Verkuil /* Stream type-dependent parameter ioctls */ 520a399810cSHans Verkuil int (*vidioc_g_parm)(struct file *file, void *fh, 521a399810cSHans Verkuil struct v4l2_streamparm *a); 522a399810cSHans Verkuil int (*vidioc_s_parm)(struct file *file, void *fh, 523a399810cSHans Verkuil struct v4l2_streamparm *a); 524a399810cSHans Verkuil 525a399810cSHans Verkuil /* Tuner ioctls */ 526a399810cSHans Verkuil int (*vidioc_g_tuner)(struct file *file, void *fh, 527a399810cSHans Verkuil struct v4l2_tuner *a); 528a399810cSHans Verkuil int (*vidioc_s_tuner)(struct file *file, void *fh, 5292f73c7c5SHans Verkuil const struct v4l2_tuner *a); 530a399810cSHans Verkuil int (*vidioc_g_frequency)(struct file *file, void *fh, 531a399810cSHans Verkuil struct v4l2_frequency *a); 532a399810cSHans Verkuil int (*vidioc_s_frequency)(struct file *file, void *fh, 533b530a447SHans Verkuil const struct v4l2_frequency *a); 53482b655bfSHans Verkuil int (*vidioc_enum_freq_bands)(struct file *file, void *fh, 53582b655bfSHans Verkuil struct v4l2_frequency_band *band); 536a399810cSHans Verkuil 537a399810cSHans Verkuil /* Sliced VBI cap */ 538a399810cSHans Verkuil int (*vidioc_g_sliced_vbi_cap)(struct file *file, void *fh, 539a399810cSHans Verkuil struct v4l2_sliced_vbi_cap *a); 540a399810cSHans Verkuil 541a399810cSHans Verkuil /* Log status ioctl */ 542a399810cSHans Verkuil int (*vidioc_log_status)(struct file *file, void *fh); 543a399810cSHans Verkuil 544a399810cSHans Verkuil int (*vidioc_s_hw_freq_seek)(struct file *file, void *fh, 545ec6f4328SHans Verkuil const struct v4l2_hw_freq_seek *a); 546a399810cSHans Verkuil 547a399810cSHans Verkuil /* Debugging ioctls */ 548a399810cSHans Verkuil #ifdef CONFIG_VIDEO_ADV_DEBUG 549a399810cSHans Verkuil int (*vidioc_g_register)(struct file *file, void *fh, 550aecde8b5SHans Verkuil struct v4l2_dbg_register *reg); 551a399810cSHans Verkuil int (*vidioc_s_register)(struct file *file, void *fh, 552977ba3b1SHans Verkuil const struct v4l2_dbg_register *reg); 553a399810cSHans Verkuil 55496b03d2aSHans Verkuil int (*vidioc_g_chip_info)(struct file *file, void *fh, 55596b03d2aSHans Verkuil struct v4l2_dbg_chip_info *chip); 556cd634f1bSHans Verkuil #endif 55779b0c640SHans Verkuil 55874d83fa0SMauro Carvalho Chehab int (*vidioc_enum_framesizes)(struct file *file, void *fh, 55974d83fa0SMauro Carvalho Chehab struct v4l2_frmsizeenum *fsize); 56074d83fa0SMauro Carvalho Chehab 56174d83fa0SMauro Carvalho Chehab int (*vidioc_enum_frameintervals)(struct file *file, void *fh, 56274d83fa0SMauro Carvalho Chehab struct v4l2_frmivalenum *fival); 56374d83fa0SMauro Carvalho Chehab 564b6456c0cSMuralidharan Karicheri /* DV Timings IOCTLs */ 565b6456c0cSMuralidharan Karicheri int (*vidioc_s_dv_timings)(struct file *file, void *fh, 566b6456c0cSMuralidharan Karicheri struct v4l2_dv_timings *timings); 567b6456c0cSMuralidharan Karicheri int (*vidioc_g_dv_timings)(struct file *file, void *fh, 568b6456c0cSMuralidharan Karicheri struct v4l2_dv_timings *timings); 5695d7758eeSHans Verkuil int (*vidioc_query_dv_timings)(struct file *file, void *fh, 5705d7758eeSHans Verkuil struct v4l2_dv_timings *timings); 5715d7758eeSHans Verkuil int (*vidioc_enum_dv_timings)(struct file *file, void *fh, 5725d7758eeSHans Verkuil struct v4l2_enum_dv_timings *timings); 5735d7758eeSHans Verkuil int (*vidioc_dv_timings_cap)(struct file *file, void *fh, 5745d7758eeSHans Verkuil struct v4l2_dv_timings_cap *cap); 575bba65c13SMauro Carvalho Chehab int (*vidioc_g_edid)(struct file *file, void *fh, 576bba65c13SMauro Carvalho Chehab struct v4l2_edid *edid); 577bba65c13SMauro Carvalho Chehab int (*vidioc_s_edid)(struct file *file, void *fh, 578bba65c13SMauro Carvalho Chehab struct v4l2_edid *edid); 579b6456c0cSMuralidharan Karicheri 580d3d7c963SSakari Ailus int (*vidioc_subscribe_event)(struct v4l2_fh *fh, 58185f5fe39SHans Verkuil const struct v4l2_event_subscription *sub); 582d3d7c963SSakari Ailus int (*vidioc_unsubscribe_event)(struct v4l2_fh *fh, 58385f5fe39SHans Verkuil const struct v4l2_event_subscription *sub); 584d3d7c963SSakari Ailus 585a399810cSHans Verkuil /* For other private ioctls */ 586069b7479SHans Verkuil long (*vidioc_default)(struct file *file, void *fh, 5876d43be77SMauro Carvalho Chehab bool valid_prio, unsigned int cmd, void *arg); 588a399810cSHans Verkuil }; 589a399810cSHans Verkuil 590a399810cSHans Verkuil 5912864462eSMauro Carvalho Chehab /* v4l debugging and diagnostics */ 5922864462eSMauro Carvalho Chehab 59317028cdbSHans Verkuil /* Device debug flags to be used with the video device debug attribute */ 59417028cdbSHans Verkuil 59517028cdbSHans Verkuil /* Just log the ioctl name + error code */ 59617028cdbSHans Verkuil #define V4L2_DEV_DEBUG_IOCTL 0x01 59717028cdbSHans Verkuil /* Log the ioctl name arguments + error code */ 59817028cdbSHans Verkuil #define V4L2_DEV_DEBUG_IOCTL_ARG 0x02 59917028cdbSHans Verkuil /* Log the file operations open, release, mmap and get_unmapped_area */ 60017028cdbSHans Verkuil #define V4L2_DEV_DEBUG_FOP 0x04 60117028cdbSHans Verkuil /* Log the read and write file operations and the VIDIOC_(D)QBUF ioctls */ 60217028cdbSHans Verkuil #define V4L2_DEV_DEBUG_STREAMING 0x08 60317028cdbSHans Verkuil /* Log poll() */ 60417028cdbSHans Verkuil #define V4L2_DEV_DEBUG_POLL 0x10 605173f6eacSEzequiel Garcia /* Log controls */ 606173f6eacSEzequiel Garcia #define V4L2_DEV_DEBUG_CTRL 0x20 6072864462eSMauro Carvalho Chehab 60835ea11ffSHans Verkuil /* Video standard functions */ 60935ea11ffSHans Verkuil 610bba65c13SMauro Carvalho Chehab /** 611bba65c13SMauro Carvalho Chehab * v4l2_norm_to_name - Ancillary routine to analog TV standard name from its ID. 612bba65c13SMauro Carvalho Chehab * 613bba65c13SMauro Carvalho Chehab * @id: analog TV standard ID. 614bba65c13SMauro Carvalho Chehab * 615bba65c13SMauro Carvalho Chehab * Return: returns a string with the name of the analog TV standard. 616bba65c13SMauro Carvalho Chehab * If the standard is not found or if @id points to multiple standard, 617bba65c13SMauro Carvalho Chehab * it returns "Unknown". 618bba65c13SMauro Carvalho Chehab */ 619bba65c13SMauro Carvalho Chehab const char *v4l2_norm_to_name(v4l2_std_id id); 620bba65c13SMauro Carvalho Chehab 621bba65c13SMauro Carvalho Chehab /** 622bba65c13SMauro Carvalho Chehab * v4l2_video_std_frame_period - Ancillary routine that fills a 623bba65c13SMauro Carvalho Chehab * struct &v4l2_fract pointer with the default framerate fraction. 624bba65c13SMauro Carvalho Chehab * 625aa2f8871SNiklas Söderlund * @id: analog TV standard ID. 626bba65c13SMauro Carvalho Chehab * @frameperiod: struct &v4l2_fract pointer to be filled 627bba65c13SMauro Carvalho Chehab * 628bba65c13SMauro Carvalho Chehab */ 629bba65c13SMauro Carvalho Chehab void v4l2_video_std_frame_period(int id, struct v4l2_fract *frameperiod); 630bba65c13SMauro Carvalho Chehab 631bba65c13SMauro Carvalho Chehab /** 632bba65c13SMauro Carvalho Chehab * v4l2_video_std_construct - Ancillary routine that fills in the fields of 633bba65c13SMauro Carvalho Chehab * a &v4l2_standard structure according to the @id parameter. 634bba65c13SMauro Carvalho Chehab * 635bba65c13SMauro Carvalho Chehab * @vs: struct &v4l2_standard pointer to be filled 636aa2f8871SNiklas Söderlund * @id: analog TV standard ID. 637bba65c13SMauro Carvalho Chehab * @name: name of the standard to be used 638bba65c13SMauro Carvalho Chehab * 639bba65c13SMauro Carvalho Chehab * .. note:: 640bba65c13SMauro Carvalho Chehab * 641bba65c13SMauro Carvalho Chehab * This ancillary routine is obsolete. Shouldn't be used on newer drivers. 642bba65c13SMauro Carvalho Chehab */ 643bba65c13SMauro Carvalho Chehab int v4l2_video_std_construct(struct v4l2_standard *vs, 644bba65c13SMauro Carvalho Chehab int id, const char *name); 645bba65c13SMauro Carvalho Chehab 646bba65c13SMauro Carvalho Chehab /** 647aa2f8871SNiklas Söderlund * v4l_video_std_enumstd - Ancillary routine that fills in the fields of 648aa2f8871SNiklas Söderlund * a &v4l2_standard structure according to the @id and @vs->index 649aa2f8871SNiklas Söderlund * parameters. 650aa2f8871SNiklas Söderlund * 651aa2f8871SNiklas Söderlund * @vs: struct &v4l2_standard pointer to be filled. 652aa2f8871SNiklas Söderlund * @id: analog TV standard ID. 653aa2f8871SNiklas Söderlund * 654aa2f8871SNiklas Söderlund */ 655aa2f8871SNiklas Söderlund int v4l_video_std_enumstd(struct v4l2_standard *vs, v4l2_std_id id); 656aa2f8871SNiklas Söderlund 657aa2f8871SNiklas Söderlund /** 658bba65c13SMauro Carvalho Chehab * v4l_printk_ioctl - Ancillary routine that prints the ioctl in a 659bba65c13SMauro Carvalho Chehab * human-readable format. 660bba65c13SMauro Carvalho Chehab * 661bba65c13SMauro Carvalho Chehab * @prefix: prefix to be added at the ioctl prints. 662bba65c13SMauro Carvalho Chehab * @cmd: ioctl name 663bba65c13SMauro Carvalho Chehab * 664bba65c13SMauro Carvalho Chehab * .. note:: 665bba65c13SMauro Carvalho Chehab * 666bba65c13SMauro Carvalho Chehab * If prefix != %NULL, then it will issue a 667bba65c13SMauro Carvalho Chehab * ``printk(KERN_DEBUG "%s: ", prefix)`` first. 668bba65c13SMauro Carvalho Chehab */ 669bba65c13SMauro Carvalho Chehab void v4l_printk_ioctl(const char *prefix, unsigned int cmd); 670bba65c13SMauro Carvalho Chehab 6715a5adf6bSHans Verkuil struct video_device; 672bba65c13SMauro Carvalho Chehab 67335ea11ffSHans Verkuil /* names for fancy debug output */ 67435ea11ffSHans Verkuil extern const char *v4l2_field_names[]; 67535ea11ffSHans Verkuil extern const char *v4l2_type_names[]; 67635ea11ffSHans Verkuil 677bec43661SHans Verkuil #ifdef CONFIG_COMPAT 678bba65c13SMauro Carvalho Chehab /** 679bba65c13SMauro Carvalho Chehab * v4l2_compat_ioctl32 -32 Bits compatibility layer for 64 bits processors 680bba65c13SMauro Carvalho Chehab * 681bba65c13SMauro Carvalho Chehab * @file: Pointer to struct &file. 682bba65c13SMauro Carvalho Chehab * @cmd: Ioctl name. 683bba65c13SMauro Carvalho Chehab * @arg: Ioctl argument. 684bba65c13SMauro Carvalho Chehab */ 685bba65c13SMauro Carvalho Chehab long int v4l2_compat_ioctl32(struct file *file, unsigned int cmd, 68635ea11ffSHans Verkuil unsigned long arg); 687bec43661SHans Verkuil #endif 68835ea11ffSHans Verkuil 689*8dbcc3faSArnd Bergmann unsigned int v4l2_compat_translate_cmd(unsigned int cmd); 690*8dbcc3faSArnd Bergmann int v4l2_compat_get_user(void __user *arg, void *parg, unsigned int cmd); 691*8dbcc3faSArnd Bergmann int v4l2_compat_put_user(void __user *arg, void *parg, unsigned int cmd); 692*8dbcc3faSArnd Bergmann int v4l2_compat_get_array_args(struct file *file, void *mbuf, 693*8dbcc3faSArnd Bergmann void __user *user_ptr, size_t array_size, 694*8dbcc3faSArnd Bergmann unsigned int cmd, void *arg); 695*8dbcc3faSArnd Bergmann int v4l2_compat_put_array_args(struct file *file, void __user *user_ptr, 696*8dbcc3faSArnd Bergmann void *mbuf, size_t array_size, 697*8dbcc3faSArnd Bergmann unsigned int cmd, void *arg); 698*8dbcc3faSArnd Bergmann 699bba65c13SMauro Carvalho Chehab /** 700bba65c13SMauro Carvalho Chehab * typedef v4l2_kioctl - Typedef used to pass an ioctl handler. 701bba65c13SMauro Carvalho Chehab * 702bba65c13SMauro Carvalho Chehab * @file: Pointer to struct &file. 703bba65c13SMauro Carvalho Chehab * @cmd: Ioctl name. 704bba65c13SMauro Carvalho Chehab * @arg: Ioctl argument. 705bba65c13SMauro Carvalho Chehab */ 706bba65c13SMauro Carvalho Chehab typedef long (*v4l2_kioctl)(struct file *file, unsigned int cmd, void *arg); 70708af245dSHans Verkuil 708bba65c13SMauro Carvalho Chehab /** 709bba65c13SMauro Carvalho Chehab * video_usercopy - copies data from/to userspace memory when an ioctl is 710bba65c13SMauro Carvalho Chehab * issued. 711bba65c13SMauro Carvalho Chehab * 712bba65c13SMauro Carvalho Chehab * @file: Pointer to struct &file. 713bba65c13SMauro Carvalho Chehab * @cmd: Ioctl name. 714bba65c13SMauro Carvalho Chehab * @arg: Ioctl argument. 715bba65c13SMauro Carvalho Chehab * @func: function that will handle the ioctl 716bba65c13SMauro Carvalho Chehab * 717bba65c13SMauro Carvalho Chehab * .. note:: 718bba65c13SMauro Carvalho Chehab * 719bba65c13SMauro Carvalho Chehab * This routine should be used only inside the V4L2 core. 720bba65c13SMauro Carvalho Chehab */ 721bba65c13SMauro Carvalho Chehab long int video_usercopy(struct file *file, unsigned int cmd, 722bba65c13SMauro Carvalho Chehab unsigned long int arg, v4l2_kioctl func); 72335ea11ffSHans Verkuil 724bba65c13SMauro Carvalho Chehab /** 725bba65c13SMauro Carvalho Chehab * video_ioctl2 - Handles a V4L2 ioctl. 726bba65c13SMauro Carvalho Chehab * 727bba65c13SMauro Carvalho Chehab * @file: Pointer to struct &file. 728bba65c13SMauro Carvalho Chehab * @cmd: Ioctl name. 729bba65c13SMauro Carvalho Chehab * @arg: Ioctl argument. 730bba65c13SMauro Carvalho Chehab * 731bba65c13SMauro Carvalho Chehab * Method used to hancle an ioctl. Should be used to fill the 732bba65c13SMauro Carvalho Chehab * &v4l2_ioctl_ops.unlocked_ioctl on all V4L2 drivers. 733bba65c13SMauro Carvalho Chehab */ 734bba65c13SMauro Carvalho Chehab long int video_ioctl2(struct file *file, 735bba65c13SMauro Carvalho Chehab unsigned int cmd, unsigned long int arg); 7368a522c91SMauro Carvalho Chehab 7371a6c0b36SArnd Bergmann /* 7381a6c0b36SArnd Bergmann * The user space interpretation of the 'v4l2_event' differs 7391a6c0b36SArnd Bergmann * based on the 'time_t' definition on 32-bit architectures, so 7401a6c0b36SArnd Bergmann * the kernel has to handle both. 7411a6c0b36SArnd Bergmann * This is the old version for 32-bit architectures. 7421a6c0b36SArnd Bergmann */ 7431a6c0b36SArnd Bergmann struct v4l2_event_time32 { 7441a6c0b36SArnd Bergmann __u32 type; 7451a6c0b36SArnd Bergmann union { 7461a6c0b36SArnd Bergmann struct v4l2_event_vsync vsync; 7471a6c0b36SArnd Bergmann struct v4l2_event_ctrl ctrl; 7481a6c0b36SArnd Bergmann struct v4l2_event_frame_sync frame_sync; 7491a6c0b36SArnd Bergmann struct v4l2_event_src_change src_change; 7501a6c0b36SArnd Bergmann struct v4l2_event_motion_det motion_det; 7511a6c0b36SArnd Bergmann __u8 data[64]; 7521a6c0b36SArnd Bergmann } u; 7531a6c0b36SArnd Bergmann __u32 pending; 7541a6c0b36SArnd Bergmann __u32 sequence; 7551a6c0b36SArnd Bergmann struct old_timespec32 timestamp; 7561a6c0b36SArnd Bergmann __u32 id; 7571a6c0b36SArnd Bergmann __u32 reserved[8]; 7581a6c0b36SArnd Bergmann }; 7591a6c0b36SArnd Bergmann 7601a6c0b36SArnd Bergmann #define VIDIOC_DQEVENT_TIME32 _IOR('V', 89, struct v4l2_event_time32) 7611a6c0b36SArnd Bergmann 762577c89b0SArnd Bergmann struct v4l2_buffer_time32 { 763577c89b0SArnd Bergmann __u32 index; 764577c89b0SArnd Bergmann __u32 type; 765577c89b0SArnd Bergmann __u32 bytesused; 766577c89b0SArnd Bergmann __u32 flags; 767577c89b0SArnd Bergmann __u32 field; 768577c89b0SArnd Bergmann struct old_timeval32 timestamp; 769577c89b0SArnd Bergmann struct v4l2_timecode timecode; 770577c89b0SArnd Bergmann __u32 sequence; 771577c89b0SArnd Bergmann 772577c89b0SArnd Bergmann /* memory location */ 773577c89b0SArnd Bergmann __u32 memory; 774577c89b0SArnd Bergmann union { 775577c89b0SArnd Bergmann __u32 offset; 776577c89b0SArnd Bergmann unsigned long userptr; 777577c89b0SArnd Bergmann struct v4l2_plane *planes; 778577c89b0SArnd Bergmann __s32 fd; 779577c89b0SArnd Bergmann } m; 780577c89b0SArnd Bergmann __u32 length; 781577c89b0SArnd Bergmann __u32 reserved2; 782577c89b0SArnd Bergmann union { 783577c89b0SArnd Bergmann __s32 request_fd; 784577c89b0SArnd Bergmann __u32 reserved; 785577c89b0SArnd Bergmann }; 786577c89b0SArnd Bergmann }; 787577c89b0SArnd Bergmann #define VIDIOC_QUERYBUF_TIME32 _IOWR('V', 9, struct v4l2_buffer_time32) 788577c89b0SArnd Bergmann #define VIDIOC_QBUF_TIME32 _IOWR('V', 15, struct v4l2_buffer_time32) 789577c89b0SArnd Bergmann #define VIDIOC_DQBUF_TIME32 _IOWR('V', 17, struct v4l2_buffer_time32) 790577c89b0SArnd Bergmann #define VIDIOC_PREPARE_BUF_TIME32 _IOWR('V', 93, struct v4l2_buffer_time32) 791577c89b0SArnd Bergmann 79235ea11ffSHans Verkuil #endif /* _V4L2_IOCTL_H */ 793