linux/include/media/v4l2-ioctl.h
<<
>>
Prefs
   1/*
   2 *
   3 *      V 4 L 2   D R I V E R   H E L P E R   A P I
   4 *
   5 * Moved from videodev2.h
   6 *
   7 *      Some commonly needed functions for drivers (v4l2-common.o module)
   8 */
   9#ifndef _V4L2_IOCTL_H
  10#define _V4L2_IOCTL_H
  11
  12#include <linux/poll.h>
  13#include <linux/fs.h>
  14#include <linux/mutex.h>
  15#include <linux/compiler.h> /* need __user */
  16#include <linux/videodev2.h>
  17
  18struct v4l2_fh;
  19
  20/**
  21 * struct v4l2_ioctl_ops - describe operations for each V4L2 ioctl
  22 *
  23 * @vidioc_querycap: pointer to the function that implements
  24 *      :ref:`VIDIOC_QUERYCAP <vidioc_querycap>` ioctl
  25 * @vidioc_enum_fmt_vid_cap: pointer to the function that implements
  26 *      :ref:`VIDIOC_ENUM_FMT <vidioc_enum_fmt>` ioctl logic
  27 *      for video capture in single plane mode
  28 * @vidioc_enum_fmt_vid_overlay: pointer to the function that implements
  29 *      :ref:`VIDIOC_ENUM_FMT <vidioc_enum_fmt>` ioctl logic
  30 *      for video overlay
  31 * @vidioc_enum_fmt_vid_out: pointer to the function that implements
  32 *      :ref:`VIDIOC_ENUM_FMT <vidioc_enum_fmt>` ioctl logic
  33 *      for video output in single plane mode
  34 * @vidioc_enum_fmt_vid_cap_mplane: pointer to the function that implements
  35 *      :ref:`VIDIOC_ENUM_FMT <vidioc_enum_fmt>` ioctl logic
  36 *      for video capture in multiplane mode
  37 * @vidioc_enum_fmt_vid_out_mplane: pointer to the function that implements
  38 *      :ref:`VIDIOC_ENUM_FMT <vidioc_enum_fmt>` ioctl logic
  39 *      for video output in multiplane mode
  40 * @vidioc_enum_fmt_sdr_cap: pointer to the function that implements
  41 *      :ref:`VIDIOC_ENUM_FMT <vidioc_enum_fmt>` ioctl logic
  42 *      for Software Defined Radio capture
  43 * @vidioc_enum_fmt_sdr_out: pointer to the function that implements
  44 *      :ref:`VIDIOC_ENUM_FMT <vidioc_enum_fmt>` ioctl logic
  45 *      for Software Defined Radio output
  46 * @vidioc_g_fmt_vid_cap: pointer to the function that implements
  47 *      :ref:`VIDIOC_G_FMT <vidioc_g_fmt>` ioctl logic for video capture
  48 *      in single plane mode
  49 * @vidioc_g_fmt_vid_overlay: pointer to the function that implements
  50 *      :ref:`VIDIOC_G_FMT <vidioc_g_fmt>` ioctl logic for video overlay
  51 * @vidioc_g_fmt_vid_out: pointer to the function that implements
  52 *      :ref:`VIDIOC_G_FMT <vidioc_g_fmt>` ioctl logic for video out
  53 *      in single plane mode
  54 * @vidioc_g_fmt_vid_out_overlay: pointer to the function that implements
  55 *      :ref:`VIDIOC_G_FMT <vidioc_g_fmt>` ioctl logic for video overlay output
  56 * @vidioc_g_fmt_vbi_cap: pointer to the function that implements
  57 *      :ref:`VIDIOC_G_FMT <vidioc_g_fmt>` ioctl logic for raw VBI capture
  58 * @vidioc_g_fmt_vbi_out: pointer to the function that implements
  59 *      :ref:`VIDIOC_G_FMT <vidioc_g_fmt>` ioctl logic for raw VBI output
  60 * @vidioc_g_fmt_sliced_vbi_cap: pointer to the function that implements
  61 *      :ref:`VIDIOC_G_FMT <vidioc_g_fmt>` ioctl logic for sliced VBI capture
  62 * @vidioc_g_fmt_sliced_vbi_out: pointer to the function that implements
  63 *      :ref:`VIDIOC_G_FMT <vidioc_g_fmt>` ioctl logic for sliced VBI output
  64 * @vidioc_g_fmt_vid_cap_mplane: pointer to the function that implements
  65 *      :ref:`VIDIOC_G_FMT <vidioc_g_fmt>` ioctl logic for video capture
  66 *      in multiple plane mode
  67 * @vidioc_g_fmt_vid_out_mplane: pointer to the function that implements
  68 *      :ref:`VIDIOC_G_FMT <vidioc_g_fmt>` ioctl logic for video out
  69 *      in multiplane plane mode
  70 * @vidioc_g_fmt_sdr_cap: pointer to the function that implements
  71 *      :ref:`VIDIOC_G_FMT <vidioc_g_fmt>` ioctl logic for Software Defined
  72 *      Radio capture
  73 * @vidioc_g_fmt_sdr_out: pointer to the function that implements
  74 *      :ref:`VIDIOC_G_FMT <vidioc_g_fmt>` ioctl logic for Software Defined
  75 *      Radio output
  76 * @vidioc_s_fmt_vid_cap: pointer to the function that implements
  77 *      :ref:`VIDIOC_S_FMT <vidioc_g_fmt>` ioctl logic for video capture
  78 *      in single plane mode
  79 * @vidioc_s_fmt_vid_overlay: pointer to the function that implements
  80 *      :ref:`VIDIOC_S_FMT <vidioc_g_fmt>` ioctl logic for video overlay
  81 * @vidioc_s_fmt_vid_out: pointer to the function that implements
  82 *      :ref:`VIDIOC_S_FMT <vidioc_g_fmt>` ioctl logic for video out
  83 *      in single plane mode
  84 * @vidioc_s_fmt_vid_out_overlay: pointer to the function that implements
  85 *      :ref:`VIDIOC_S_FMT <vidioc_g_fmt>` ioctl logic for video overlay output
  86 * @vidioc_s_fmt_vbi_cap: pointer to the function that implements
  87 *      :ref:`VIDIOC_S_FMT <vidioc_g_fmt>` ioctl logic for raw VBI capture
  88 * @vidioc_s_fmt_vbi_out: pointer to the function that implements
  89 *      :ref:`VIDIOC_S_FMT <vidioc_g_fmt>` ioctl logic for raw VBI output
  90 * @vidioc_s_fmt_sliced_vbi_cap: pointer to the function that implements
  91 *      :ref:`VIDIOC_S_FMT <vidioc_g_fmt>` ioctl logic for sliced VBI capture
  92 * @vidioc_s_fmt_sliced_vbi_out: pointer to the function that implements
  93 *      :ref:`VIDIOC_S_FMT <vidioc_g_fmt>` ioctl logic for sliced VBI output
  94 * @vidioc_s_fmt_vid_cap_mplane: pointer to the function that implements
  95 *      :ref:`VIDIOC_S_FMT <vidioc_g_fmt>` ioctl logic for video capture
  96 *      in multiple plane mode
  97 * @vidioc_s_fmt_vid_out_mplane: pointer to the function that implements
  98 *      :ref:`VIDIOC_S_FMT <vidioc_g_fmt>` ioctl logic for video out
  99 *      in multiplane plane mode
 100 * @vidioc_s_fmt_sdr_cap: pointer to the function that implements
 101 *      :ref:`VIDIOC_S_FMT <vidioc_g_fmt>` ioctl logic for Software Defined
 102 *      Radio capture
 103 * @vidioc_s_fmt_sdr_out: pointer to the function that implements
 104 *      :ref:`VIDIOC_S_FMT <vidioc_g_fmt>` ioctl logic for Software Defined
 105 *      Radio output
 106 * @vidioc_try_fmt_vid_cap: pointer to the function that implements
 107 *      :ref:`VIDIOC_TRY_FMT <vidioc_g_fmt>` ioctl logic for video capture
 108 *      in single plane mode
 109 * @vidioc_try_fmt_vid_overlay: pointer to the function that implements
 110 *      :ref:`VIDIOC_TRY_FMT <vidioc_g_fmt>` ioctl logic for video overlay
 111 * @vidioc_try_fmt_vid_out: pointer to the function that implements
 112 *      :ref:`VIDIOC_TRY_FMT <vidioc_g_fmt>` ioctl logic for video out
 113 *      in single plane mode
 114 * @vidioc_try_fmt_vid_out_overlay: pointer to the function that implements
 115 *      :ref:`VIDIOC_TRY_FMT <vidioc_g_fmt>` ioctl logic for video overlay
 116 *      output
 117 * @vidioc_try_fmt_vbi_cap: pointer to the function that implements
 118 *      :ref:`VIDIOC_TRY_FMT <vidioc_g_fmt>` ioctl logic for raw VBI capture
 119 * @vidioc_try_fmt_vbi_out: pointer to the function that implements
 120 *      :ref:`VIDIOC_TRY_FMT <vidioc_g_fmt>` ioctl logic for raw VBI output
 121 * @vidioc_try_fmt_sliced_vbi_cap: pointer to the function that implements
 122 *      :ref:`VIDIOC_TRY_FMT <vidioc_g_fmt>` ioctl logic for sliced VBI
 123 *      capture
 124 * @vidioc_try_fmt_sliced_vbi_out: pointer to the function that implements
 125 *      :ref:`VIDIOC_TRY_FMT <vidioc_g_fmt>` ioctl logic for sliced VBI output
 126 * @vidioc_try_fmt_vid_cap_mplane: pointer to the function that implements
 127 *      :ref:`VIDIOC_TRY_FMT <vidioc_g_fmt>` ioctl logic for video capture
 128 *      in multiple plane mode
 129 * @vidioc_try_fmt_vid_out_mplane: pointer to the function that implements
 130 *      :ref:`VIDIOC_TRY_FMT <vidioc_g_fmt>` ioctl logic for video out
 131 *      in multiplane plane mode
 132 * @vidioc_try_fmt_sdr_cap: pointer to the function that implements
 133 *      :ref:`VIDIOC_TRY_FMT <vidioc_g_fmt>` ioctl logic for Software Defined
 134 *      Radio capture
 135 * @vidioc_try_fmt_sdr_out: pointer to the function that implements
 136 *      :ref:`VIDIOC_TRY_FMT <vidioc_g_fmt>` ioctl logic for Software Defined
 137 *      Radio output
 138 * @vidioc_reqbufs: pointer to the function that implements
 139 *      :ref:`VIDIOC_REQBUFS <vidioc_reqbufs>` ioctl
 140 * @vidioc_querybuf: pointer to the function that implements
 141 *      :ref:`VIDIOC_QUERYBUF <vidioc_querybuf>` ioctl
 142 * @vidioc_qbuf: pointer to the function that implements
 143 *      :ref:`VIDIOC_QBUF <vidioc_qbuf>` ioctl
 144 * @vidioc_expbuf: pointer to the function that implements
 145 *      :ref:`VIDIOC_EXPBUF <vidioc_expbuf>` ioctl
 146 * @vidioc_dqbuf: pointer to the function that implements
 147 *      :ref:`VIDIOC_DQBUF <vidioc_qbuf>` ioctl
 148 * @vidioc_create_bufs: pointer to the function that implements
 149 *      :ref:`VIDIOC_CREATE_BUFS <vidioc_create_bufs>` ioctl
 150 * @vidioc_prepare_buf: pointer to the function that implements
 151 *      :ref:`VIDIOC_PREPARE_BUF <vidioc_prepare_buf>` ioctl
 152 * @vidioc_overlay: pointer to the function that implements
 153 *      :ref:`VIDIOC_OVERLAY <vidioc_overlay>` ioctl
 154 * @vidioc_g_fbuf: pointer to the function that implements
 155 *      :ref:`VIDIOC_G_FBUF <vidioc_g_fbuf>` ioctl
 156 * @vidioc_s_fbuf: pointer to the function that implements
 157 *      :ref:`VIDIOC_S_FBUF <vidioc_g_fbuf>` ioctl
 158 * @vidioc_streamon: pointer to the function that implements
 159 *      :ref:`VIDIOC_STREAMON <vidioc_streamon>` ioctl
 160 * @vidioc_streamoff: pointer to the function that implements
 161 *      :ref:`VIDIOC_STREAMOFF <vidioc_streamon>` ioctl
 162 * @vidioc_g_std: pointer to the function that implements
 163 *      :ref:`VIDIOC_G_STD <vidioc_g_std>` ioctl
 164 * @vidioc_s_std: pointer to the function that implements
 165 *      :ref:`VIDIOC_S_STD <vidioc_g_std>` ioctl
 166 * @vidioc_querystd: pointer to the function that implements
 167 *      :ref:`VIDIOC_QUERYSTD <vidioc_querystd>` ioctl
 168 * @vidioc_enum_input: pointer to the function that implements
 169 *      :ref:`VIDIOC_ENUM_INPUT <vidioc_g_input>` ioctl
 170 * @vidioc_g_input: pointer to the function that implements
 171 *      :ref:`VIDIOC_G_INPUT <vidioc_g_input>` ioctl
 172 * @vidioc_s_input: pointer to the function that implements
 173 *      :ref:`VIDIOC_S_INPUT <vidioc_g_input>` ioctl
 174 * @vidioc_enum_output: pointer to the function that implements
 175 *      :ref:`VIDIOC_ENUM_OUTPUT <vidioc_g_output>` ioctl
 176 * @vidioc_g_output: pointer to the function that implements
 177 *      :ref:`VIDIOC_G_OUTPUT <vidioc_g_output>` ioctl
 178 * @vidioc_s_output: pointer to the function that implements
 179 *      :ref:`VIDIOC_S_OUTPUT <vidioc_g_output>` ioctl
 180 * @vidioc_queryctrl: pointer to the function that implements
 181 *      :ref:`VIDIOC_QUERYCTRL <vidioc_queryctrl>` ioctl
 182 * @vidioc_query_ext_ctrl: pointer to the function that implements
 183 *      :ref:`VIDIOC_QUERY_EXT_CTRL <vidioc_queryctrl>` ioctl
 184 * @vidioc_g_ctrl: pointer to the function that implements
 185 *      :ref:`VIDIOC_G_CTRL <vidioc_g_ctrl>` ioctl
 186 * @vidioc_s_ctrl: pointer to the function that implements
 187 *      :ref:`VIDIOC_S_CTRL <vidioc_g_ctrl>` ioctl
 188 * @vidioc_g_ext_ctrls: pointer to the function that implements
 189 *      :ref:`VIDIOC_G_EXT_CTRLS <vidioc_g_ext_ctrls>` ioctl
 190 * @vidioc_s_ext_ctrls: pointer to the function that implements
 191 *      :ref:`VIDIOC_S_EXT_CTRLS <vidioc_g_ext_ctrls>` ioctl
 192 * @vidioc_try_ext_ctrls: pointer to the function that implements
 193 *      :ref:`VIDIOC_TRY_EXT_CTRLS <vidioc_g_ext_ctrls>` ioctl
 194 * @vidioc_querymenu: pointer to the function that implements
 195 *      :ref:`VIDIOC_QUERYMENU <vidioc_queryctrl>` ioctl
 196 * @vidioc_enumaudio: pointer to the function that implements
 197 *      :ref:`VIDIOC_ENUMAUDIO <vidioc_enumaudio>` ioctl
 198 * @vidioc_g_audio: pointer to the function that implements
 199 *      :ref:`VIDIOC_G_AUDIO <vidioc_g_audio>` ioctl
 200 * @vidioc_s_audio: pointer to the function that implements
 201 *      :ref:`VIDIOC_S_AUDIO <vidioc_g_audio>` ioctl
 202 * @vidioc_enumaudout: pointer to the function that implements
 203 *      :ref:`VIDIOC_ENUMAUDOUT <vidioc_enumaudout>` ioctl
 204 * @vidioc_g_audout: pointer to the function that implements
 205 *      :ref:`VIDIOC_G_AUDOUT <vidioc_g_audout>` ioctl
 206 * @vidioc_s_audout: pointer to the function that implements
 207 *      :ref:`VIDIOC_S_AUDOUT <vidioc_g_audout>` ioctl
 208 * @vidioc_g_modulator: pointer to the function that implements
 209 *      :ref:`VIDIOC_G_MODULATOR <vidioc_g_modulator>` ioctl
 210 * @vidioc_s_modulator: pointer to the function that implements
 211 *      :ref:`VIDIOC_S_MODULATOR <vidioc_g_modulator>` ioctl
 212 * @vidioc_cropcap: pointer to the function that implements
 213 *      :ref:`VIDIOC_CROPCAP <vidioc_cropcap>` ioctl
 214 * @vidioc_g_crop: pointer to the function that implements
 215 *      :ref:`VIDIOC_G_CROP <vidioc_g_crop>` ioctl
 216 * @vidioc_s_crop: pointer to the function that implements
 217 *      :ref:`VIDIOC_S_CROP <vidioc_g_crop>` ioctl
 218 * @vidioc_g_selection: pointer to the function that implements
 219 *      :ref:`VIDIOC_G_SELECTION <vidioc_g_selection>` ioctl
 220 * @vidioc_s_selection: pointer to the function that implements
 221 *      :ref:`VIDIOC_S_SELECTION <vidioc_g_selection>` ioctl
 222 * @vidioc_g_jpegcomp: pointer to the function that implements
 223 *      :ref:`VIDIOC_G_JPEGCOMP <vidioc_g_jpegcomp>` ioctl
 224 * @vidioc_s_jpegcomp: pointer to the function that implements
 225 *      :ref:`VIDIOC_S_JPEGCOMP <vidioc_g_jpegcomp>` ioctl
 226 * @vidioc_g_enc_index: pointer to the function that implements
 227 *      :ref:`VIDIOC_G_ENC_INDEX <vidioc_g_enc_index>` ioctl
 228 * @vidioc_encoder_cmd: pointer to the function that implements
 229 *      :ref:`VIDIOC_ENCODER_CMD <vidioc_encoder_cmd>` ioctl
 230 * @vidioc_try_encoder_cmd: pointer to the function that implements
 231 *      :ref:`VIDIOC_TRY_ENCODER_CMD <vidioc_encoder_cmd>` ioctl
 232 * @vidioc_decoder_cmd: pointer to the function that implements
 233 *      :ref:`VIDIOC_DECODER_CMD <vidioc_decoder_cmd>` ioctl
 234 * @vidioc_try_decoder_cmd: pointer to the function that implements
 235 *      :ref:`VIDIOC_TRY_DECODER_CMD <vidioc_decoder_cmd>` ioctl
 236 * @vidioc_g_parm: pointer to the function that implements
 237 *      :ref:`VIDIOC_G_PARM <vidioc_g_parm>` ioctl
 238 * @vidioc_s_parm: pointer to the function that implements
 239 *      :ref:`VIDIOC_S_PARM <vidioc_g_parm>` ioctl
 240 * @vidioc_g_tuner: pointer to the function that implements
 241 *      :ref:`VIDIOC_G_TUNER <vidioc_g_tuner>` ioctl
 242 * @vidioc_s_tuner: pointer to the function that implements
 243 *      :ref:`VIDIOC_S_TUNER <vidioc_g_tuner>` ioctl
 244 * @vidioc_g_frequency: pointer to the function that implements
 245 *      :ref:`VIDIOC_G_FREQUENCY <vidioc_g_frequency>` ioctl
 246 * @vidioc_s_frequency: pointer to the function that implements
 247 *      :ref:`VIDIOC_S_FREQUENCY <vidioc_g_frequency>` ioctl
 248 * @vidioc_enum_freq_bands: pointer to the function that implements
 249 *      :ref:`VIDIOC_ENUM_FREQ_BANDS <vidioc_enum_freq_bands>` ioctl
 250 * @vidioc_g_sliced_vbi_cap: pointer to the function that implements
 251 *      :ref:`VIDIOC_G_SLICED_VBI_CAP <vidioc_g_sliced_vbi_cap>` ioctl
 252 * @vidioc_log_status: pointer to the function that implements
 253 *      :ref:`VIDIOC_LOG_STATUS <vidioc_log_status>` ioctl
 254 * @vidioc_s_hw_freq_seek: pointer to the function that implements
 255 *      :ref:`VIDIOC_S_HW_FREQ_SEEK <vidioc_s_hw_freq_seek>` ioctl
 256 * @vidioc_g_register: pointer to the function that implements
 257 *      :ref:`VIDIOC_DBG_G_REGISTER <vidioc_dbg_g_register>` ioctl
 258 * @vidioc_s_register: pointer to the function that implements
 259 *      :ref:`VIDIOC_DBG_S_REGISTER <vidioc_dbg_g_register>` ioctl
 260 * @vidioc_g_chip_info: pointer to the function that implements
 261 *      :ref:`VIDIOC_DBG_G_CHIP_INFO <vidioc_dbg_g_chip_info>` ioctl
 262 * @vidioc_enum_framesizes: pointer to the function that implements
 263 *      :ref:`VIDIOC_ENUM_FRAMESIZES <vidioc_enum_framesizes>` ioctl
 264 * @vidioc_enum_frameintervals: pointer to the function that implements
 265 *      :ref:`VIDIOC_ENUM_FRAMEINTERVALS <vidioc_enum_frameintervals>` ioctl
 266 * @vidioc_s_dv_timings: pointer to the function that implements
 267 *      :ref:`VIDIOC_S_DV_TIMINGS <vidioc_g_dv_timings>` ioctl
 268 * @vidioc_g_dv_timings: pointer to the function that implements
 269 *      :ref:`VIDIOC_G_DV_TIMINGS <vidioc_g_dv_timings>` ioctl
 270 * @vidioc_query_dv_timings: pointer to the function that implements
 271 *      :ref:`VIDIOC_QUERY_DV_TIMINGS <vidioc_query_dv_timings>` ioctl
 272 * @vidioc_enum_dv_timings: pointer to the function that implements
 273 *      :ref:`VIDIOC_ENUM_DV_TIMINGS <vidioc_enum_dv_timings>` ioctl
 274 * @vidioc_dv_timings_cap: pointer to the function that implements
 275 *      :ref:`VIDIOC_DV_TIMINGS_CAP <vidioc_dv_timings_cap>` ioctl
 276 * @vidioc_g_edid: pointer to the function that implements
 277 *      :ref:`VIDIOC_G_EDID <vidioc_g_edid>` ioctl
 278 * @vidioc_s_edid: pointer to the function that implements
 279 *      :ref:`VIDIOC_S_EDID <vidioc_g_edid>` ioctl
 280 * @vidioc_subscribe_event: pointer to the function that implements
 281 *      :ref:`VIDIOC_SUBSCRIBE_EVENT <vidioc_subscribe_event>` ioctl
 282 * @vidioc_unsubscribe_event: pointer to the function that implements
 283 *      :ref:`VIDIOC_UNSUBSCRIBE_EVENT <vidioc_unsubscribe_event>` ioctl
 284 * @vidioc_default: pointed used to allow other ioctls
 285 */
 286struct v4l2_ioctl_ops {
 287        /* ioctl callbacks */
 288
 289        /* VIDIOC_QUERYCAP handler */
 290        int (*vidioc_querycap)(struct file *file, void *fh,
 291                               struct v4l2_capability *cap);
 292
 293        /* VIDIOC_ENUM_FMT handlers */
 294        int (*vidioc_enum_fmt_vid_cap)(struct file *file, void *fh,
 295                                       struct v4l2_fmtdesc *f);
 296        int (*vidioc_enum_fmt_vid_overlay)(struct file *file, void *fh,
 297                                           struct v4l2_fmtdesc *f);
 298        int (*vidioc_enum_fmt_vid_out)(struct file *file, void *fh,
 299                                       struct v4l2_fmtdesc *f);
 300        int (*vidioc_enum_fmt_vid_cap_mplane)(struct file *file, void *fh,
 301                                              struct v4l2_fmtdesc *f);
 302        int (*vidioc_enum_fmt_vid_out_mplane)(struct file *file, void *fh,
 303                                              struct v4l2_fmtdesc *f);
 304        int (*vidioc_enum_fmt_sdr_cap)(struct file *file, void *fh,
 305                                       struct v4l2_fmtdesc *f);
 306        int (*vidioc_enum_fmt_sdr_out)(struct file *file, void *fh,
 307                                       struct v4l2_fmtdesc *f);
 308
 309        /* VIDIOC_G_FMT handlers */
 310        int (*vidioc_g_fmt_vid_cap)(struct file *file, void *fh,
 311                                    struct v4l2_format *f);
 312        int (*vidioc_g_fmt_vid_overlay)(struct file *file, void *fh,
 313                                        struct v4l2_format *f);
 314        int (*vidioc_g_fmt_vid_out)(struct file *file, void *fh,
 315                                    struct v4l2_format *f);
 316        int (*vidioc_g_fmt_vid_out_overlay)(struct file *file, void *fh,
 317                                            struct v4l2_format *f);
 318        int (*vidioc_g_fmt_vbi_cap)(struct file *file, void *fh,
 319                                    struct v4l2_format *f);
 320        int (*vidioc_g_fmt_vbi_out)(struct file *file, void *fh,
 321                                    struct v4l2_format *f);
 322        int (*vidioc_g_fmt_sliced_vbi_cap)(struct file *file, void *fh,
 323                                           struct v4l2_format *f);
 324        int (*vidioc_g_fmt_sliced_vbi_out)(struct file *file, void *fh,
 325                                           struct v4l2_format *f);
 326        int (*vidioc_g_fmt_vid_cap_mplane)(struct file *file, void *fh,
 327                                           struct v4l2_format *f);
 328        int (*vidioc_g_fmt_vid_out_mplane)(struct file *file, void *fh,
 329                                           struct v4l2_format *f);
 330        int (*vidioc_g_fmt_sdr_cap)(struct file *file, void *fh,
 331                                    struct v4l2_format *f);
 332        int (*vidioc_g_fmt_sdr_out)(struct file *file, void *fh,
 333                                    struct v4l2_format *f);
 334
 335        /* VIDIOC_S_FMT handlers */
 336        int (*vidioc_s_fmt_vid_cap)(struct file *file, void *fh,
 337                                    struct v4l2_format *f);
 338        int (*vidioc_s_fmt_vid_overlay)(struct file *file, void *fh,
 339                                        struct v4l2_format *f);
 340        int (*vidioc_s_fmt_vid_out)(struct file *file, void *fh,
 341                                    struct v4l2_format *f);
 342        int (*vidioc_s_fmt_vid_out_overlay)(struct file *file, void *fh,
 343                                            struct v4l2_format *f);
 344        int (*vidioc_s_fmt_vbi_cap)(struct file *file, void *fh,
 345                                    struct v4l2_format *f);
 346        int (*vidioc_s_fmt_vbi_out)(struct file *file, void *fh,
 347                                    struct v4l2_format *f);
 348        int (*vidioc_s_fmt_sliced_vbi_cap)(struct file *file, void *fh,
 349                                           struct v4l2_format *f);
 350        int (*vidioc_s_fmt_sliced_vbi_out)(struct file *file, void *fh,
 351                                           struct v4l2_format *f);
 352        int (*vidioc_s_fmt_vid_cap_mplane)(struct file *file, void *fh,
 353                                           struct v4l2_format *f);
 354        int (*vidioc_s_fmt_vid_out_mplane)(struct file *file, void *fh,
 355                                           struct v4l2_format *f);
 356        int (*vidioc_s_fmt_sdr_cap)(struct file *file, void *fh,
 357                                    struct v4l2_format *f);
 358        int (*vidioc_s_fmt_sdr_out)(struct file *file, void *fh,
 359                                    struct v4l2_format *f);
 360
 361        /* VIDIOC_TRY_FMT handlers */
 362        int (*vidioc_try_fmt_vid_cap)(struct file *file, void *fh,
 363                                      struct v4l2_format *f);
 364        int (*vidioc_try_fmt_vid_overlay)(struct file *file, void *fh,
 365                                          struct v4l2_format *f);
 366        int (*vidioc_try_fmt_vid_out)(struct file *file, void *fh,
 367                                      struct v4l2_format *f);
 368        int (*vidioc_try_fmt_vid_out_overlay)(struct file *file, void *fh,
 369                                             struct v4l2_format *f);
 370        int (*vidioc_try_fmt_vbi_cap)(struct file *file, void *fh,
 371                                      struct v4l2_format *f);
 372        int (*vidioc_try_fmt_vbi_out)(struct file *file, void *fh,
 373                                      struct v4l2_format *f);
 374        int (*vidioc_try_fmt_sliced_vbi_cap)(struct file *file, void *fh,
 375                                             struct v4l2_format *f);
 376        int (*vidioc_try_fmt_sliced_vbi_out)(struct file *file, void *fh,
 377                                             struct v4l2_format *f);
 378        int (*vidioc_try_fmt_vid_cap_mplane)(struct file *file, void *fh,
 379                                             struct v4l2_format *f);
 380        int (*vidioc_try_fmt_vid_out_mplane)(struct file *file, void *fh,
 381                                             struct v4l2_format *f);
 382        int (*vidioc_try_fmt_sdr_cap)(struct file *file, void *fh,
 383                                      struct v4l2_format *f);
 384        int (*vidioc_try_fmt_sdr_out)(struct file *file, void *fh,
 385                                      struct v4l2_format *f);
 386
 387        /* Buffer handlers */
 388        int (*vidioc_reqbufs)(struct file *file, void *fh,
 389                              struct v4l2_requestbuffers *b);
 390        int (*vidioc_querybuf)(struct file *file, void *fh,
 391                               struct v4l2_buffer *b);
 392        int (*vidioc_qbuf)(struct file *file, void *fh,
 393                           struct v4l2_buffer *b);
 394        int (*vidioc_expbuf)(struct file *file, void *fh,
 395                             struct v4l2_exportbuffer *e);
 396        int (*vidioc_dqbuf)(struct file *file, void *fh,
 397                            struct v4l2_buffer *b);
 398
 399        int (*vidioc_create_bufs)(struct file *file, void *fh,
 400                                  struct v4l2_create_buffers *b);
 401        int (*vidioc_prepare_buf)(struct file *file, void *fh,
 402                                  struct v4l2_buffer *b);
 403
 404        int (*vidioc_overlay)(struct file *file, void *fh, unsigned int i);
 405        int (*vidioc_g_fbuf)(struct file *file, void *fh,
 406                             struct v4l2_framebuffer *a);
 407        int (*vidioc_s_fbuf)(struct file *file, void *fh,
 408                             const struct v4l2_framebuffer *a);
 409
 410                /* Stream on/off */
 411        int (*vidioc_streamon)(struct file *file, void *fh,
 412                               enum v4l2_buf_type i);
 413        int (*vidioc_streamoff)(struct file *file, void *fh,
 414                                enum v4l2_buf_type i);
 415
 416                /*
 417                 * Standard handling
 418                 *
 419                 * Note: ENUMSTD is handled by videodev.c
 420                 */
 421        int (*vidioc_g_std)(struct file *file, void *fh, v4l2_std_id *norm);
 422        int (*vidioc_s_std)(struct file *file, void *fh, v4l2_std_id norm);
 423        int (*vidioc_querystd)(struct file *file, void *fh, v4l2_std_id *a);
 424
 425                /* Input handling */
 426        int (*vidioc_enum_input)(struct file *file, void *fh,
 427                                 struct v4l2_input *inp);
 428        int (*vidioc_g_input)(struct file *file, void *fh, unsigned int *i);
 429        int (*vidioc_s_input)(struct file *file, void *fh, unsigned int i);
 430
 431                /* Output handling */
 432        int (*vidioc_enum_output)(struct file *file, void *fh,
 433                                  struct v4l2_output *a);
 434        int (*vidioc_g_output)(struct file *file, void *fh, unsigned int *i);
 435        int (*vidioc_s_output)(struct file *file, void *fh, unsigned int i);
 436
 437                /* Control handling */
 438        int (*vidioc_queryctrl)(struct file *file, void *fh,
 439                                struct v4l2_queryctrl *a);
 440        int (*vidioc_query_ext_ctrl)(struct file *file, void *fh,
 441                                     struct v4l2_query_ext_ctrl *a);
 442        int (*vidioc_g_ctrl)(struct file *file, void *fh,
 443                             struct v4l2_control *a);
 444        int (*vidioc_s_ctrl)(struct file *file, void *fh,
 445                             struct v4l2_control *a);
 446        int (*vidioc_g_ext_ctrls)(struct file *file, void *fh,
 447                                  struct v4l2_ext_controls *a);
 448        int (*vidioc_s_ext_ctrls)(struct file *file, void *fh,
 449                                  struct v4l2_ext_controls *a);
 450        int (*vidioc_try_ext_ctrls)(struct file *file, void *fh,
 451                                    struct v4l2_ext_controls *a);
 452        int (*vidioc_querymenu)(struct file *file, void *fh,
 453                                struct v4l2_querymenu *a);
 454
 455        /* Audio ioctls */
 456        int (*vidioc_enumaudio)(struct file *file, void *fh,
 457                                struct v4l2_audio *a);
 458        int (*vidioc_g_audio)(struct file *file, void *fh,
 459                              struct v4l2_audio *a);
 460        int (*vidioc_s_audio)(struct file *file, void *fh,
 461                              const struct v4l2_audio *a);
 462
 463        /* Audio out ioctls */
 464        int (*vidioc_enumaudout)(struct file *file, void *fh,
 465                                 struct v4l2_audioout *a);
 466        int (*vidioc_g_audout)(struct file *file, void *fh,
 467                               struct v4l2_audioout *a);
 468        int (*vidioc_s_audout)(struct file *file, void *fh,
 469                               const struct v4l2_audioout *a);
 470        int (*vidioc_g_modulator)(struct file *file, void *fh,
 471                                  struct v4l2_modulator *a);
 472        int (*vidioc_s_modulator)(struct file *file, void *fh,
 473                                  const struct v4l2_modulator *a);
 474        /* Crop ioctls */
 475        int (*vidioc_cropcap)(struct file *file, void *fh,
 476                              struct v4l2_cropcap *a);
 477        int (*vidioc_g_crop)(struct file *file, void *fh,
 478                             struct v4l2_crop *a);
 479        int (*vidioc_s_crop)(struct file *file, void *fh,
 480                             const struct v4l2_crop *a);
 481        int (*vidioc_g_selection)(struct file *file, void *fh,
 482                                  struct v4l2_selection *s);
 483        int (*vidioc_s_selection)(struct file *file, void *fh,
 484                                  struct v4l2_selection *s);
 485        /* Compression ioctls */
 486        int (*vidioc_g_jpegcomp)(struct file *file, void *fh,
 487                                 struct v4l2_jpegcompression *a);
 488        int (*vidioc_s_jpegcomp)(struct file *file, void *fh,
 489                                 const struct v4l2_jpegcompression *a);
 490        int (*vidioc_g_enc_index)(struct file *file, void *fh,
 491                                  struct v4l2_enc_idx *a);
 492        int (*vidioc_encoder_cmd)(struct file *file, void *fh,
 493                                  struct v4l2_encoder_cmd *a);
 494        int (*vidioc_try_encoder_cmd)(struct file *file, void *fh,
 495                                      struct v4l2_encoder_cmd *a);
 496        int (*vidioc_decoder_cmd)(struct file *file, void *fh,
 497                                  struct v4l2_decoder_cmd *a);
 498        int (*vidioc_try_decoder_cmd)(struct file *file, void *fh,
 499                                      struct v4l2_decoder_cmd *a);
 500
 501        /* Stream type-dependent parameter ioctls */
 502        int (*vidioc_g_parm)(struct file *file, void *fh,
 503                             struct v4l2_streamparm *a);
 504        int (*vidioc_s_parm)(struct file *file, void *fh,
 505                             struct v4l2_streamparm *a);
 506
 507        /* Tuner ioctls */
 508        int (*vidioc_g_tuner)(struct file *file, void *fh,
 509                              struct v4l2_tuner *a);
 510        int (*vidioc_s_tuner)(struct file *file, void *fh,
 511                              const struct v4l2_tuner *a);
 512        int (*vidioc_g_frequency)(struct file *file, void *fh,
 513                                  struct v4l2_frequency *a);
 514        int (*vidioc_s_frequency)(struct file *file, void *fh,
 515                                  const struct v4l2_frequency *a);
 516        int (*vidioc_enum_freq_bands)(struct file *file, void *fh,
 517                                      struct v4l2_frequency_band *band);
 518
 519        /* Sliced VBI cap */
 520        int (*vidioc_g_sliced_vbi_cap)(struct file *file, void *fh,
 521                                       struct v4l2_sliced_vbi_cap *a);
 522
 523        /* Log status ioctl */
 524        int (*vidioc_log_status)(struct file *file, void *fh);
 525
 526        int (*vidioc_s_hw_freq_seek)(struct file *file, void *fh,
 527                                     const struct v4l2_hw_freq_seek *a);
 528
 529        /* Debugging ioctls */
 530#ifdef CONFIG_VIDEO_ADV_DEBUG
 531        int (*vidioc_g_register)(struct file *file, void *fh,
 532                                 struct v4l2_dbg_register *reg);
 533        int (*vidioc_s_register)(struct file *file, void *fh,
 534                                 const struct v4l2_dbg_register *reg);
 535
 536        int (*vidioc_g_chip_info)(struct file *file, void *fh,
 537                                  struct v4l2_dbg_chip_info *chip);
 538#endif
 539
 540        int (*vidioc_enum_framesizes)(struct file *file, void *fh,
 541                                      struct v4l2_frmsizeenum *fsize);
 542
 543        int (*vidioc_enum_frameintervals)(struct file *file, void *fh,
 544                                          struct v4l2_frmivalenum *fival);
 545
 546        /* DV Timings IOCTLs */
 547        int (*vidioc_s_dv_timings)(struct file *file, void *fh,
 548                                   struct v4l2_dv_timings *timings);
 549        int (*vidioc_g_dv_timings)(struct file *file, void *fh,
 550                                   struct v4l2_dv_timings *timings);
 551        int (*vidioc_query_dv_timings)(struct file *file, void *fh,
 552                                       struct v4l2_dv_timings *timings);
 553        int (*vidioc_enum_dv_timings)(struct file *file, void *fh,
 554                                      struct v4l2_enum_dv_timings *timings);
 555        int (*vidioc_dv_timings_cap)(struct file *file, void *fh,
 556                                     struct v4l2_dv_timings_cap *cap);
 557        int (*vidioc_g_edid)(struct file *file, void *fh,
 558                             struct v4l2_edid *edid);
 559        int (*vidioc_s_edid)(struct file *file, void *fh,
 560                             struct v4l2_edid *edid);
 561
 562        int (*vidioc_subscribe_event)(struct v4l2_fh *fh,
 563                                      const struct v4l2_event_subscription *sub);
 564        int (*vidioc_unsubscribe_event)(struct v4l2_fh *fh,
 565                                        const struct v4l2_event_subscription *sub);
 566
 567        /* For other private ioctls */
 568        long (*vidioc_default)(struct file *file, void *fh,
 569                               bool valid_prio, unsigned int cmd, void *arg);
 570};
 571
 572
 573/* v4l debugging and diagnostics */
 574
 575/* Device debug flags to be used with the video device debug attribute */
 576
 577/* Just log the ioctl name + error code */
 578#define V4L2_DEV_DEBUG_IOCTL            0x01
 579/* Log the ioctl name arguments + error code */
 580#define V4L2_DEV_DEBUG_IOCTL_ARG        0x02
 581/* Log the file operations open, release, mmap and get_unmapped_area */
 582#define V4L2_DEV_DEBUG_FOP              0x04
 583/* Log the read and write file operations and the VIDIOC_(D)QBUF ioctls */
 584#define V4L2_DEV_DEBUG_STREAMING        0x08
 585/* Log poll() */
 586#define V4L2_DEV_DEBUG_POLL             0x10
 587
 588/*  Video standard functions  */
 589
 590/**
 591 * v4l2_norm_to_name - Ancillary routine to analog TV standard name from its ID.
 592 *
 593 * @id: analog TV standard ID.
 594 *
 595 * Return: returns a string with the name of the analog TV standard.
 596 * If the standard is not found or if @id points to multiple standard,
 597 * it returns "Unknown".
 598 */
 599const char *v4l2_norm_to_name(v4l2_std_id id);
 600
 601/**
 602 * v4l2_video_std_frame_period - Ancillary routine that fills a
 603 *      struct &v4l2_fract pointer with the default framerate fraction.
 604 *
 605 * @id: analog TV sdandard ID.
 606 * @frameperiod: struct &v4l2_fract pointer to be filled
 607 *
 608 */
 609void v4l2_video_std_frame_period(int id, struct v4l2_fract *frameperiod);
 610
 611/**
 612 * v4l2_video_std_construct - Ancillary routine that fills in the fields of
 613 *      a &v4l2_standard structure according to the @id parameter.
 614 *
 615 * @vs: struct &v4l2_standard pointer to be filled
 616 * @id: analog TV sdandard ID.
 617 * @name: name of the standard to be used
 618 *
 619 * .. note::
 620 *
 621 *    This ancillary routine is obsolete. Shouldn't be used on newer drivers.
 622 */
 623int v4l2_video_std_construct(struct v4l2_standard *vs,
 624                                    int id, const char *name);
 625
 626/**
 627 * v4l_printk_ioctl - Ancillary routine that prints the ioctl in a
 628 *      human-readable format.
 629 *
 630 * @prefix: prefix to be added at the ioctl prints.
 631 * @cmd: ioctl name
 632 *
 633 * .. note::
 634 *
 635 *    If prefix != %NULL, then it will issue a
 636 *    ``printk(KERN_DEBUG "%s: ", prefix)`` first.
 637 */
 638void v4l_printk_ioctl(const char *prefix, unsigned int cmd);
 639
 640struct video_device;
 641
 642
 643/**
 644 * v4l2_ioctl_get_lock - get the mutex (if any) that it is need to lock for
 645 *      a given command.
 646 *
 647 * @vdev: Pointer to struct &video_device.
 648 * @cmd: Ioctl name.
 649 *
 650 * .. note:: Internal use only. Should not be used outside V4L2 core.
 651 */
 652struct mutex *v4l2_ioctl_get_lock(struct video_device *vdev, unsigned int cmd);
 653
 654/* names for fancy debug output */
 655extern const char *v4l2_field_names[];
 656extern const char *v4l2_type_names[];
 657
 658#ifdef CONFIG_COMPAT
 659/**
 660 * v4l2_compat_ioctl32 -32 Bits compatibility layer for 64 bits processors
 661 *
 662 * @file: Pointer to struct &file.
 663 * @cmd: Ioctl name.
 664 * @arg: Ioctl argument.
 665 */
 666long int v4l2_compat_ioctl32(struct file *file, unsigned int cmd,
 667                             unsigned long arg);
 668#endif
 669
 670/**
 671 * typedef v4l2_kioctl - Typedef used to pass an ioctl handler.
 672 *
 673 * @file: Pointer to struct &file.
 674 * @cmd: Ioctl name.
 675 * @arg: Ioctl argument.
 676 */
 677typedef long (*v4l2_kioctl)(struct file *file, unsigned int cmd, void *arg);
 678
 679/**
 680 * video_usercopy - copies data from/to userspace memory when an ioctl is
 681 *      issued.
 682 *
 683 * @file: Pointer to struct &file.
 684 * @cmd: Ioctl name.
 685 * @arg: Ioctl argument.
 686 * @func: function that will handle the ioctl
 687 *
 688 * .. note::
 689 *
 690 *    This routine should be used only inside the V4L2 core.
 691 */
 692long int video_usercopy(struct file *file, unsigned int cmd,
 693                        unsigned long int arg, v4l2_kioctl func);
 694
 695/**
 696 * video_ioctl2 - Handles a V4L2 ioctl.
 697 *
 698 * @file: Pointer to struct &file.
 699 * @cmd: Ioctl name.
 700 * @arg: Ioctl argument.
 701 *
 702 * Method used to hancle an ioctl. Should be used to fill the
 703 * &v4l2_ioctl_ops.unlocked_ioctl on all V4L2 drivers.
 704 */
 705long int video_ioctl2(struct file *file,
 706                      unsigned int cmd, unsigned long int arg);
 707
 708#endif /* _V4L2_IOCTL_H */
 709