1 /* 2 * 3 * V 4 L 2 D R I V E R H E L P E R A P I 4 * 5 * Moved from videodev2.h 6 * 7 * Some commonly needed functions for drivers (v4l2-common.o module) 8 */ 9 #ifndef _V4L2_IOCTL_H 10 #define _V4L2_IOCTL_H 11 12 #include <linux/poll.h> 13 #include <linux/fs.h> 14 #include <linux/device.h> 15 #include <linux/mutex.h> 16 #include <linux/compiler.h> /* need __user */ 17 #ifdef CONFIG_VIDEO_V4L1_COMPAT 18 #include <linux/videodev.h> 19 #else 20 #include <linux/videodev2.h> 21 #endif 22 23 struct v4l2_ioctl_ops { 24 /* ioctl callbacks */ 25 26 /* VIDIOC_QUERYCAP handler */ 27 int (*vidioc_querycap)(struct file *file, void *fh, struct v4l2_capability *cap); 28 29 /* Priority handling */ 30 int (*vidioc_g_priority) (struct file *file, void *fh, 31 enum v4l2_priority *p); 32 int (*vidioc_s_priority) (struct file *file, void *fh, 33 enum v4l2_priority p); 34 35 /* VIDIOC_ENUM_FMT handlers */ 36 int (*vidioc_enum_fmt_vid_cap) (struct file *file, void *fh, 37 struct v4l2_fmtdesc *f); 38 int (*vidioc_enum_fmt_vid_overlay) (struct file *file, void *fh, 39 struct v4l2_fmtdesc *f); 40 int (*vidioc_enum_fmt_vid_out) (struct file *file, void *fh, 41 struct v4l2_fmtdesc *f); 42 int (*vidioc_enum_fmt_type_private)(struct file *file, void *fh, 43 struct v4l2_fmtdesc *f); 44 45 /* VIDIOC_G_FMT handlers */ 46 int (*vidioc_g_fmt_vid_cap) (struct file *file, void *fh, 47 struct v4l2_format *f); 48 int (*vidioc_g_fmt_vid_overlay)(struct file *file, void *fh, 49 struct v4l2_format *f); 50 int (*vidioc_g_fmt_vid_out) (struct file *file, void *fh, 51 struct v4l2_format *f); 52 int (*vidioc_g_fmt_vid_out_overlay)(struct file *file, void *fh, 53 struct v4l2_format *f); 54 int (*vidioc_g_fmt_vbi_cap) (struct file *file, void *fh, 55 struct v4l2_format *f); 56 int (*vidioc_g_fmt_vbi_out) (struct file *file, void *fh, 57 struct v4l2_format *f); 58 int (*vidioc_g_fmt_sliced_vbi_cap)(struct file *file, void *fh, 59 struct v4l2_format *f); 60 int (*vidioc_g_fmt_sliced_vbi_out)(struct file *file, void *fh, 61 struct v4l2_format *f); 62 int (*vidioc_g_fmt_type_private)(struct file *file, void *fh, 63 struct v4l2_format *f); 64 65 /* VIDIOC_S_FMT handlers */ 66 int (*vidioc_s_fmt_vid_cap) (struct file *file, void *fh, 67 struct v4l2_format *f); 68 int (*vidioc_s_fmt_vid_overlay)(struct file *file, void *fh, 69 struct v4l2_format *f); 70 int (*vidioc_s_fmt_vid_out) (struct file *file, void *fh, 71 struct v4l2_format *f); 72 int (*vidioc_s_fmt_vid_out_overlay)(struct file *file, void *fh, 73 struct v4l2_format *f); 74 int (*vidioc_s_fmt_vbi_cap) (struct file *file, void *fh, 75 struct v4l2_format *f); 76 int (*vidioc_s_fmt_vbi_out) (struct file *file, void *fh, 77 struct v4l2_format *f); 78 int (*vidioc_s_fmt_sliced_vbi_cap)(struct file *file, void *fh, 79 struct v4l2_format *f); 80 int (*vidioc_s_fmt_sliced_vbi_out)(struct file *file, void *fh, 81 struct v4l2_format *f); 82 int (*vidioc_s_fmt_type_private)(struct file *file, void *fh, 83 struct v4l2_format *f); 84 85 /* VIDIOC_TRY_FMT handlers */ 86 int (*vidioc_try_fmt_vid_cap) (struct file *file, void *fh, 87 struct v4l2_format *f); 88 int (*vidioc_try_fmt_vid_overlay)(struct file *file, void *fh, 89 struct v4l2_format *f); 90 int (*vidioc_try_fmt_vid_out) (struct file *file, void *fh, 91 struct v4l2_format *f); 92 int (*vidioc_try_fmt_vid_out_overlay)(struct file *file, void *fh, 93 struct v4l2_format *f); 94 int (*vidioc_try_fmt_vbi_cap) (struct file *file, void *fh, 95 struct v4l2_format *f); 96 int (*vidioc_try_fmt_vbi_out) (struct file *file, void *fh, 97 struct v4l2_format *f); 98 int (*vidioc_try_fmt_sliced_vbi_cap)(struct file *file, void *fh, 99 struct v4l2_format *f); 100 int (*vidioc_try_fmt_sliced_vbi_out)(struct file *file, void *fh, 101 struct v4l2_format *f); 102 int (*vidioc_try_fmt_type_private)(struct file *file, void *fh, 103 struct v4l2_format *f); 104 105 /* Buffer handlers */ 106 int (*vidioc_reqbufs) (struct file *file, void *fh, struct v4l2_requestbuffers *b); 107 int (*vidioc_querybuf)(struct file *file, void *fh, struct v4l2_buffer *b); 108 int (*vidioc_qbuf) (struct file *file, void *fh, struct v4l2_buffer *b); 109 int (*vidioc_dqbuf) (struct file *file, void *fh, struct v4l2_buffer *b); 110 111 112 int (*vidioc_overlay) (struct file *file, void *fh, unsigned int i); 113 #ifdef CONFIG_VIDEO_V4L1_COMPAT 114 /* buffer type is struct vidio_mbuf * */ 115 int (*vidiocgmbuf) (struct file *file, void *fh, struct video_mbuf *p); 116 #endif 117 int (*vidioc_g_fbuf) (struct file *file, void *fh, 118 struct v4l2_framebuffer *a); 119 int (*vidioc_s_fbuf) (struct file *file, void *fh, 120 struct v4l2_framebuffer *a); 121 122 /* Stream on/off */ 123 int (*vidioc_streamon) (struct file *file, void *fh, enum v4l2_buf_type i); 124 int (*vidioc_streamoff)(struct file *file, void *fh, enum v4l2_buf_type i); 125 126 /* Standard handling 127 ENUMSTD is handled by videodev.c 128 */ 129 int (*vidioc_g_std) (struct file *file, void *fh, v4l2_std_id *norm); 130 int (*vidioc_s_std) (struct file *file, void *fh, v4l2_std_id *norm); 131 int (*vidioc_querystd) (struct file *file, void *fh, v4l2_std_id *a); 132 133 /* Input handling */ 134 int (*vidioc_enum_input)(struct file *file, void *fh, 135 struct v4l2_input *inp); 136 int (*vidioc_g_input) (struct file *file, void *fh, unsigned int *i); 137 int (*vidioc_s_input) (struct file *file, void *fh, unsigned int i); 138 139 /* Output handling */ 140 int (*vidioc_enum_output) (struct file *file, void *fh, 141 struct v4l2_output *a); 142 int (*vidioc_g_output) (struct file *file, void *fh, unsigned int *i); 143 int (*vidioc_s_output) (struct file *file, void *fh, unsigned int i); 144 145 /* Control handling */ 146 int (*vidioc_queryctrl) (struct file *file, void *fh, 147 struct v4l2_queryctrl *a); 148 int (*vidioc_g_ctrl) (struct file *file, void *fh, 149 struct v4l2_control *a); 150 int (*vidioc_s_ctrl) (struct file *file, void *fh, 151 struct v4l2_control *a); 152 int (*vidioc_g_ext_ctrls) (struct file *file, void *fh, 153 struct v4l2_ext_controls *a); 154 int (*vidioc_s_ext_ctrls) (struct file *file, void *fh, 155 struct v4l2_ext_controls *a); 156 int (*vidioc_try_ext_ctrls) (struct file *file, void *fh, 157 struct v4l2_ext_controls *a); 158 int (*vidioc_querymenu) (struct file *file, void *fh, 159 struct v4l2_querymenu *a); 160 161 /* Audio ioctls */ 162 int (*vidioc_enumaudio) (struct file *file, void *fh, 163 struct v4l2_audio *a); 164 int (*vidioc_g_audio) (struct file *file, void *fh, 165 struct v4l2_audio *a); 166 int (*vidioc_s_audio) (struct file *file, void *fh, 167 struct v4l2_audio *a); 168 169 /* Audio out ioctls */ 170 int (*vidioc_enumaudout) (struct file *file, void *fh, 171 struct v4l2_audioout *a); 172 int (*vidioc_g_audout) (struct file *file, void *fh, 173 struct v4l2_audioout *a); 174 int (*vidioc_s_audout) (struct file *file, void *fh, 175 struct v4l2_audioout *a); 176 int (*vidioc_g_modulator) (struct file *file, void *fh, 177 struct v4l2_modulator *a); 178 int (*vidioc_s_modulator) (struct file *file, void *fh, 179 struct v4l2_modulator *a); 180 /* Crop ioctls */ 181 int (*vidioc_cropcap) (struct file *file, void *fh, 182 struct v4l2_cropcap *a); 183 int (*vidioc_g_crop) (struct file *file, void *fh, 184 struct v4l2_crop *a); 185 int (*vidioc_s_crop) (struct file *file, void *fh, 186 struct v4l2_crop *a); 187 /* Compression ioctls */ 188 int (*vidioc_g_jpegcomp) (struct file *file, void *fh, 189 struct v4l2_jpegcompression *a); 190 int (*vidioc_s_jpegcomp) (struct file *file, void *fh, 191 struct v4l2_jpegcompression *a); 192 int (*vidioc_g_enc_index) (struct file *file, void *fh, 193 struct v4l2_enc_idx *a); 194 int (*vidioc_encoder_cmd) (struct file *file, void *fh, 195 struct v4l2_encoder_cmd *a); 196 int (*vidioc_try_encoder_cmd) (struct file *file, void *fh, 197 struct v4l2_encoder_cmd *a); 198 199 /* Stream type-dependent parameter ioctls */ 200 int (*vidioc_g_parm) (struct file *file, void *fh, 201 struct v4l2_streamparm *a); 202 int (*vidioc_s_parm) (struct file *file, void *fh, 203 struct v4l2_streamparm *a); 204 205 /* Tuner ioctls */ 206 int (*vidioc_g_tuner) (struct file *file, void *fh, 207 struct v4l2_tuner *a); 208 int (*vidioc_s_tuner) (struct file *file, void *fh, 209 struct v4l2_tuner *a); 210 int (*vidioc_g_frequency) (struct file *file, void *fh, 211 struct v4l2_frequency *a); 212 int (*vidioc_s_frequency) (struct file *file, void *fh, 213 struct v4l2_frequency *a); 214 215 /* Sliced VBI cap */ 216 int (*vidioc_g_sliced_vbi_cap) (struct file *file, void *fh, 217 struct v4l2_sliced_vbi_cap *a); 218 219 /* Log status ioctl */ 220 int (*vidioc_log_status) (struct file *file, void *fh); 221 222 int (*vidioc_s_hw_freq_seek) (struct file *file, void *fh, 223 struct v4l2_hw_freq_seek *a); 224 225 /* Debugging ioctls */ 226 #ifdef CONFIG_VIDEO_ADV_DEBUG 227 int (*vidioc_g_register) (struct file *file, void *fh, 228 struct v4l2_register *reg); 229 int (*vidioc_s_register) (struct file *file, void *fh, 230 struct v4l2_register *reg); 231 #endif 232 int (*vidioc_g_chip_ident) (struct file *file, void *fh, 233 struct v4l2_chip_ident *chip); 234 235 /* For other private ioctls */ 236 int (*vidioc_default) (struct file *file, void *fh, 237 int cmd, void *arg); 238 }; 239 240 241 /* v4l debugging and diagnostics */ 242 243 /* Debug bitmask flags to be used on V4L2 */ 244 #define V4L2_DEBUG_IOCTL 0x01 245 #define V4L2_DEBUG_IOCTL_ARG 0x02 246 247 /* Use this macro for non-I2C drivers. Pass the driver name as the first arg. */ 248 #define v4l_print_ioctl(name, cmd) \ 249 do { \ 250 printk(KERN_DEBUG "%s: ", name); \ 251 v4l_printk_ioctl(cmd); \ 252 } while (0) 253 254 /* Use this macro in I2C drivers where 'client' is the struct i2c_client 255 pointer */ 256 #define v4l_i2c_print_ioctl(client, cmd) \ 257 do { \ 258 v4l_client_printk(KERN_DEBUG, client, ""); \ 259 v4l_printk_ioctl(cmd); \ 260 } while (0) 261 262 /* Video standard functions */ 263 extern const char *v4l2_norm_to_name(v4l2_std_id id); 264 extern int v4l2_video_std_construct(struct v4l2_standard *vs, 265 int id, const char *name); 266 /* Prints the ioctl in a human-readable format */ 267 extern void v4l_printk_ioctl(unsigned int cmd); 268 269 /* names for fancy debug output */ 270 extern const char *v4l2_field_names[]; 271 extern const char *v4l2_type_names[]; 272 273 /* Compatibility layer interface -- v4l1-compat module */ 274 typedef int (*v4l2_kioctl)(struct file *file, 275 unsigned int cmd, void *arg); 276 #ifdef CONFIG_VIDEO_V4L1_COMPAT 277 int v4l_compat_translate_ioctl(struct file *file, 278 int cmd, void *arg, v4l2_kioctl driver_ioctl); 279 #else 280 #define v4l_compat_translate_ioctl(file, cmd, arg, ioctl) (-EINVAL) 281 #endif 282 283 /* 32 Bits compatibility layer for 64 bits processors */ 284 extern long v4l_compat_ioctl32(struct file *file, unsigned int cmd, 285 unsigned long arg); 286 287 /* Include support for obsoleted stuff */ 288 extern int video_usercopy(struct inode *inode, struct file *file, 289 unsigned int cmd, unsigned long arg, 290 int (*func)(struct inode *inode, struct file *file, 291 unsigned int cmd, void *arg)); 292 293 /* Standard handlers for V4L ioctl's */ 294 295 /* This prototype is used on fops.unlocked_ioctl */ 296 extern int __video_ioctl2(struct file *file, 297 unsigned int cmd, unsigned long arg); 298 299 /* This prototype is used on fops.ioctl 300 * Since fops.ioctl enables Kernel Big Lock, it is preferred 301 * to use __video_ioctl2 instead. 302 * It should be noticed that there's no lock code inside 303 * video_ioctl2(). 304 */ 305 extern int video_ioctl2(struct inode *inode, struct file *file, 306 unsigned int cmd, unsigned long arg); 307 308 #endif /* _V4L2_IOCTL_H */ 309