1
2
3
4
5
6
7
8
9#ifndef _V4L2_DEV_H
10#define _V4L2_DEV_H
11
12#define OBSOLETE_OWNER 1
13#define OBSOLETE_DEVDATA 1
14
15#include <linux/poll.h>
16#include <linux/fs.h>
17#include <linux/device.h>
18#include <linux/mutex.h>
19#include <linux/compiler.h>
20#ifdef CONFIG_VIDEO_V4L1_COMPAT
21#include <linux/videodev.h>
22#else
23#include <linux/videodev2.h>
24#endif
25
26#define VIDEO_MAJOR 81
27
28#define MINOR_VFL_TYPE_GRABBER_MIN 0
29#define MINOR_VFL_TYPE_GRABBER_MAX 63
30#define MINOR_VFL_TYPE_RADIO_MIN 64
31#define MINOR_VFL_TYPE_RADIO_MAX 127
32#define MINOR_VFL_TYPE_VTX_MIN 192
33#define MINOR_VFL_TYPE_VTX_MAX 223
34#define MINOR_VFL_TYPE_VBI_MIN 224
35#define MINOR_VFL_TYPE_VBI_MAX 255
36
37#define VFL_TYPE_GRABBER 0
38#define VFL_TYPE_VBI 1
39#define VFL_TYPE_RADIO 2
40#define VFL_TYPE_VTX 3
41
42
43extern unsigned int v4l2_video_std_fps(struct v4l2_standard *vs);
44extern char *v4l2_norm_to_name(v4l2_std_id id);
45extern int v4l2_video_std_construct(struct v4l2_standard *vs,
46 int id, char *name);
47
48
49struct v4l2_prio_state {
50 atomic_t prios[4];
51};
52int v4l2_prio_init(struct v4l2_prio_state *global);
53int v4l2_prio_change(struct v4l2_prio_state *global, enum v4l2_priority *local,
54 enum v4l2_priority new);
55int v4l2_prio_open(struct v4l2_prio_state *global, enum v4l2_priority *local);
56int v4l2_prio_close(struct v4l2_prio_state *global, enum v4l2_priority *local);
57enum v4l2_priority v4l2_prio_max(struct v4l2_prio_state *global);
58int v4l2_prio_check(struct v4l2_prio_state *global, enum v4l2_priority *local);
59
60
61extern char *v4l2_field_names[];
62extern char *v4l2_type_names[];
63
64
65typedef int (*v4l2_kioctl)(struct inode *inode, struct file *file,
66 unsigned int cmd, void *arg);
67#ifdef CONFIG_VIDEO_V4L1_COMPAT
68int v4l_compat_translate_ioctl(struct inode *inode, struct file *file,
69 int cmd, void *arg, v4l2_kioctl driver_ioctl);
70#else
71#define v4l_compat_translate_ioctl(inode,file,cmd,arg,ioctl) -EINVAL
72#endif
73
74
75extern long v4l_compat_ioctl32(struct file *file, unsigned int cmd,
76 unsigned long arg);
77
78
79
80
81
82
83
84struct video_device
85{
86
87 const struct file_operations *fops;
88
89
90 struct device class_dev;
91 struct device *dev;
92
93
94 char name[32];
95 int type;
96 int type2;
97 int minor;
98
99 int debug;
100
101
102 v4l2_std_id tvnorms;
103 v4l2_std_id current_norm;
104
105
106 void (*release)(struct video_device *vfd);
107
108
109
110
111 int (*vidioc_querycap)(struct file *file, void *fh, struct v4l2_capability *cap);
112
113
114 int (*vidioc_g_priority) (struct file *file, void *fh,
115 enum v4l2_priority *p);
116 int (*vidioc_s_priority) (struct file *file, void *fh,
117 enum v4l2_priority p);
118
119
120 int (*vidioc_enum_fmt_cap) (struct file *file, void *fh,
121 struct v4l2_fmtdesc *f);
122 int (*vidioc_enum_fmt_overlay) (struct file *file, void *fh,
123 struct v4l2_fmtdesc *f);
124 int (*vidioc_enum_fmt_vbi) (struct file *file, void *fh,
125 struct v4l2_fmtdesc *f);
126 int (*vidioc_enum_fmt_vbi_capture) (struct file *file, void *fh,
127 struct v4l2_fmtdesc *f);
128 int (*vidioc_enum_fmt_video_output)(struct file *file, void *fh,
129 struct v4l2_fmtdesc *f);
130 int (*vidioc_enum_fmt_output_overlay) (struct file *file, void *fh,
131 struct v4l2_fmtdesc *f);
132 int (*vidioc_enum_fmt_vbi_output) (struct file *file, void *fh,
133 struct v4l2_fmtdesc *f);
134 int (*vidioc_enum_fmt_type_private)(struct file *file, void *fh,
135 struct v4l2_fmtdesc *f);
136
137
138 int (*vidioc_g_fmt_cap) (struct file *file, void *fh,
139 struct v4l2_format *f);
140 int (*vidioc_g_fmt_overlay) (struct file *file, void *fh,
141 struct v4l2_format *f);
142 int (*vidioc_g_fmt_vbi) (struct file *file, void *fh,
143 struct v4l2_format *f);
144 int (*vidioc_g_fmt_vbi_output) (struct file *file, void *fh,
145 struct v4l2_format *f);
146 int (*vidioc_g_fmt_vbi_capture)(struct file *file, void *fh,
147 struct v4l2_format *f);
148 int (*vidioc_g_fmt_video_output)(struct file *file, void *fh,
149 struct v4l2_format *f);
150 int (*vidioc_g_fmt_output_overlay) (struct file *file, void *fh,
151 struct v4l2_format *f);
152 int (*vidioc_g_fmt_type_private)(struct file *file, void *fh,
153 struct v4l2_format *f);
154
155
156 int (*vidioc_s_fmt_cap) (struct file *file, void *fh,
157 struct v4l2_format *f);
158
159 int (*vidioc_s_fmt_overlay) (struct file *file, void *fh,
160 struct v4l2_format *f);
161 int (*vidioc_s_fmt_vbi) (struct file *file, void *fh,
162 struct v4l2_format *f);
163 int (*vidioc_s_fmt_vbi_output) (struct file *file, void *fh,
164 struct v4l2_format *f);
165 int (*vidioc_s_fmt_vbi_capture)(struct file *file, void *fh,
166 struct v4l2_format *f);
167 int (*vidioc_s_fmt_video_output)(struct file *file, void *fh,
168 struct v4l2_format *f);
169 int (*vidioc_s_fmt_output_overlay) (struct file *file, void *fh,
170 struct v4l2_format *f);
171 int (*vidioc_s_fmt_type_private)(struct file *file, void *fh,
172 struct v4l2_format *f);
173
174
175 int (*vidioc_try_fmt_cap) (struct file *file, void *fh,
176 struct v4l2_format *f);
177 int (*vidioc_try_fmt_overlay) (struct file *file, void *fh,
178 struct v4l2_format *f);
179 int (*vidioc_try_fmt_vbi) (struct file *file, void *fh,
180 struct v4l2_format *f);
181 int (*vidioc_try_fmt_vbi_output) (struct file *file, void *fh,
182 struct v4l2_format *f);
183 int (*vidioc_try_fmt_vbi_capture)(struct file *file, void *fh,
184 struct v4l2_format *f);
185 int (*vidioc_try_fmt_video_output)(struct file *file, void *fh,
186 struct v4l2_format *f);
187 int (*vidioc_try_fmt_output_overlay)(struct file *file, void *fh,
188 struct v4l2_format *f);
189 int (*vidioc_try_fmt_type_private)(struct file *file, void *fh,
190 struct v4l2_format *f);
191
192
193 int (*vidioc_reqbufs) (struct file *file, void *fh, struct v4l2_requestbuffers *b);
194 int (*vidioc_querybuf)(struct file *file, void *fh, struct v4l2_buffer *b);
195 int (*vidioc_qbuf) (struct file *file, void *fh, struct v4l2_buffer *b);
196 int (*vidioc_dqbuf) (struct file *file, void *fh, struct v4l2_buffer *b);
197
198
199 int (*vidioc_overlay) (struct file *file, void *fh, unsigned int i);
200#ifdef CONFIG_VIDEO_V4L1_COMPAT
201
202 int (*vidiocgmbuf) (struct file *file, void *fh, struct video_mbuf *p);
203#endif
204 int (*vidioc_g_fbuf) (struct file *file, void *fh,
205 struct v4l2_framebuffer *a);
206 int (*vidioc_s_fbuf) (struct file *file, void *fh,
207 struct v4l2_framebuffer *a);
208
209
210 int (*vidioc_streamon) (struct file *file, void *fh, enum v4l2_buf_type i);
211 int (*vidioc_streamoff)(struct file *file, void *fh, enum v4l2_buf_type i);
212
213
214
215
216 int (*vidioc_s_std) (struct file *file, void *fh, v4l2_std_id *norm);
217 int (*vidioc_querystd) (struct file *file, void *fh, v4l2_std_id *a);
218
219
220 int (*vidioc_enum_input)(struct file *file, void *fh,
221 struct v4l2_input *inp);
222 int (*vidioc_g_input) (struct file *file, void *fh, unsigned int *i);
223 int (*vidioc_s_input) (struct file *file, void *fh, unsigned int i);
224
225
226 int (*vidioc_enumoutput) (struct file *file, void *fh,
227 struct v4l2_output *a);
228 int (*vidioc_g_output) (struct file *file, void *fh, unsigned int *i);
229 int (*vidioc_s_output) (struct file *file, void *fh, unsigned int i);
230
231
232 int (*vidioc_queryctrl) (struct file *file, void *fh,
233 struct v4l2_queryctrl *a);
234 int (*vidioc_g_ctrl) (struct file *file, void *fh,
235 struct v4l2_control *a);
236 int (*vidioc_s_ctrl) (struct file *file, void *fh,
237 struct v4l2_control *a);
238 int (*vidioc_g_ext_ctrls) (struct file *file, void *fh,
239 struct v4l2_ext_controls *a);
240 int (*vidioc_s_ext_ctrls) (struct file *file, void *fh,
241 struct v4l2_ext_controls *a);
242 int (*vidioc_try_ext_ctrls) (struct file *file, void *fh,
243 struct v4l2_ext_controls *a);
244 int (*vidioc_querymenu) (struct file *file, void *fh,
245 struct v4l2_querymenu *a);
246
247
248 int (*vidioc_enumaudio) (struct file *file, void *fh,
249 struct v4l2_audio *a);
250 int (*vidioc_g_audio) (struct file *file, void *fh,
251 struct v4l2_audio *a);
252 int (*vidioc_s_audio) (struct file *file, void *fh,
253 struct v4l2_audio *a);
254
255
256 int (*vidioc_enumaudout) (struct file *file, void *fh,
257 struct v4l2_audioout *a);
258 int (*vidioc_g_audout) (struct file *file, void *fh,
259 struct v4l2_audioout *a);
260 int (*vidioc_s_audout) (struct file *file, void *fh,
261 struct v4l2_audioout *a);
262 int (*vidioc_g_modulator) (struct file *file, void *fh,
263 struct v4l2_modulator *a);
264 int (*vidioc_s_modulator) (struct file *file, void *fh,
265 struct v4l2_modulator *a);
266
267 int (*vidioc_cropcap) (struct file *file, void *fh,
268 struct v4l2_cropcap *a);
269 int (*vidioc_g_crop) (struct file *file, void *fh,
270 struct v4l2_crop *a);
271 int (*vidioc_s_crop) (struct file *file, void *fh,
272 struct v4l2_crop *a);
273
274 int (*vidioc_g_jpegcomp) (struct file *file, void *fh,
275 struct v4l2_jpegcompression *a);
276 int (*vidioc_s_jpegcomp) (struct file *file, void *fh,
277 struct v4l2_jpegcompression *a);
278 int (*vidioc_g_enc_index) (struct file *file, void *fh,
279 struct v4l2_enc_idx *a);
280 int (*vidioc_encoder_cmd) (struct file *file, void *fh,
281 struct v4l2_encoder_cmd *a);
282 int (*vidioc_try_encoder_cmd) (struct file *file, void *fh,
283 struct v4l2_encoder_cmd *a);
284
285
286 int (*vidioc_g_parm) (struct file *file, void *fh,
287 struct v4l2_streamparm *a);
288 int (*vidioc_s_parm) (struct file *file, void *fh,
289 struct v4l2_streamparm *a);
290
291
292 int (*vidioc_g_tuner) (struct file *file, void *fh,
293 struct v4l2_tuner *a);
294 int (*vidioc_s_tuner) (struct file *file, void *fh,
295 struct v4l2_tuner *a);
296 int (*vidioc_g_frequency) (struct file *file, void *fh,
297 struct v4l2_frequency *a);
298 int (*vidioc_s_frequency) (struct file *file, void *fh,
299 struct v4l2_frequency *a);
300
301
302 int (*vidioc_g_sliced_vbi_cap) (struct file *file, void *fh,
303 struct v4l2_sliced_vbi_cap *a);
304
305
306 int (*vidioc_log_status) (struct file *file, void *fh);
307
308
309
310#ifdef CONFIG_VIDEO_ADV_DEBUG
311 int (*vidioc_g_register) (struct file *file, void *fh,
312 struct v4l2_register *reg);
313 int (*vidioc_s_register) (struct file *file, void *fh,
314 struct v4l2_register *reg);
315#endif
316 int (*vidioc_g_chip_ident) (struct file *file, void *fh,
317 struct v4l2_chip_ident *chip);
318
319
320#ifdef OBSOLETE_OWNER
321
322struct module *owner;
323
324
325
326
327void *priv;
328#endif
329
330
331 int users;
332 struct mutex lock;
333};
334
335
336#define to_video_device(cd) container_of(cd, struct video_device, class_dev)
337
338
339extern int video_register_device(struct video_device *vfd, int type, int nr);
340void video_unregister_device(struct video_device *);
341extern int video_ioctl2(struct inode *inode, struct file *file,
342 unsigned int cmd, unsigned long arg);
343
344
345
346struct video_device *video_device_alloc(void);
347void video_device_release(struct video_device *vfd);
348
349
350extern int video_usercopy(struct inode *inode, struct file *file,
351 unsigned int cmd, unsigned long arg,
352 int (*func)(struct inode *inode, struct file *file,
353 unsigned int cmd, void *arg));
354
355#ifdef CONFIG_VIDEO_V4L1_COMPAT
356#include <linux/mm.h>
357
358static inline int __must_check
359video_device_create_file(struct video_device *vfd,
360 struct device_attribute *attr)
361{
362 int ret = device_create_file(&vfd->class_dev, attr);
363 if (ret < 0)
364 printk(KERN_WARNING "%s error: %d\n", __FUNCTION__, ret);
365 return ret;
366}
367static inline void
368video_device_remove_file(struct video_device *vfd,
369 struct device_attribute *attr)
370{
371 device_remove_file(&vfd->class_dev, attr);
372}
373
374#endif
375
376#ifdef OBSOLETE_OWNER
377
378static inline void *video_get_drvdata(struct video_device *dev)
379{
380 return dev->priv;
381}
382
383static inline void video_set_drvdata(struct video_device *dev, void *data)
384{
385 dev->priv = data;
386}
387
388#endif
389
390#ifdef OBSOLETE_DEVDATA
391
392extern struct video_device* video_devdata(struct file*);
393extern int video_exclusive_open(struct inode *inode, struct file *file);
394extern int video_exclusive_release(struct inode *inode, struct file *file);
395#endif
396
397#endif
398