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