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