Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec
[cascardo/linux.git] / include / media / v4l2-dev.h
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_DEV_H
10 #define _V4L2_DEV_H
11
12 #include <linux/poll.h>
13 #include <linux/fs.h>
14 #include <linux/device.h>
15 #include <linux/cdev.h>
16 #include <linux/mutex.h>
17 #include <linux/videodev2.h>
18
19 #include <media/media-entity.h>
20
21 #define VIDEO_MAJOR     81
22
23 #define VFL_TYPE_GRABBER        0
24 #define VFL_TYPE_VBI            1
25 #define VFL_TYPE_RADIO          2
26 #define VFL_TYPE_SUBDEV         3
27 #define VFL_TYPE_SDR            4
28 #define VFL_TYPE_MAX            5
29
30 /* Is this a receiver, transmitter or mem-to-mem? */
31 /* Ignored for VFL_TYPE_SUBDEV. */
32 #define VFL_DIR_RX              0
33 #define VFL_DIR_TX              1
34 #define VFL_DIR_M2M             2
35
36 struct v4l2_ioctl_callbacks;
37 struct video_device;
38 struct v4l2_device;
39 struct v4l2_ctrl_handler;
40
41 /* Flag to mark the video_device struct as registered.
42    Drivers can clear this flag if they want to block all future
43    device access. It is cleared by video_unregister_device. */
44 #define V4L2_FL_REGISTERED      (0)
45 /* file->private_data points to struct v4l2_fh */
46 #define V4L2_FL_USES_V4L2_FH    (1)
47
48 /* Priority helper functions */
49
50 /**
51  * struct v4l2_prio_state - stores the priority states
52  *
53  * @prios: array with elements to store the array priorities
54  *
55  *
56  * .. note::
57  *    The size of @prios array matches the number of priority types defined
58  *    by :ref:`enum v4l2_priority <v4l2-priority>`.
59  */
60 struct v4l2_prio_state {
61         atomic_t prios[4];
62 };
63
64 /**
65  * v4l2_prio_init - initializes a struct v4l2_prio_state
66  *
67  * @global: pointer to &struct v4l2_prio_state
68  */
69 void v4l2_prio_init(struct v4l2_prio_state *global);
70
71 /**
72  * v4l2_prio_change - changes the v4l2 file handler priority
73  *
74  * @global: pointer to the &struct v4l2_prio_state of the device node.
75  * @local: pointer to the desired priority, as defined by :ref:`enum v4l2_priority <v4l2-priority>`
76  * @new: Priority type requested, as defined by :ref:`enum v4l2_priority <v4l2-priority>`.
77  *
78  * .. note::
79  *      This function should be used only by the V4L2 core.
80  */
81 int v4l2_prio_change(struct v4l2_prio_state *global, enum v4l2_priority *local,
82                      enum v4l2_priority new);
83
84 /**
85  * v4l2_prio_open - Implements the priority logic for a file handler open
86  *
87  * @global: pointer to the &struct v4l2_prio_state of the device node.
88  * @local: pointer to the desired priority, as defined by :ref:`enum v4l2_priority <v4l2-priority>`
89  *
90  * .. note::
91  *      This function should be used only by the V4L2 core.
92  */
93 void v4l2_prio_open(struct v4l2_prio_state *global, enum v4l2_priority *local);
94
95 /**
96  * v4l2_prio_close - Implements the priority logic for a file handler close
97  *
98  * @global: pointer to the &struct v4l2_prio_state of the device node.
99  * @local: priority to be released, as defined by :ref:`enum v4l2_priority <v4l2-priority>`
100  *
101  * .. note::
102  *      This function should be used only by the V4L2 core.
103  */
104 void v4l2_prio_close(struct v4l2_prio_state *global, enum v4l2_priority local);
105
106 /**
107  * v4l2_prio_max - Return the maximum priority, as stored at the @global array.
108  *
109  * @global: pointer to the &struct v4l2_prio_state of the device node.
110  *
111  * .. note::
112  *      This function should be used only by the V4L2 core.
113  */
114 enum v4l2_priority v4l2_prio_max(struct v4l2_prio_state *global);
115
116 /**
117  * v4l2_prio_close - Implements the priority logic for a file handler close
118  *
119  * @global: pointer to the &struct v4l2_prio_state of the device node.
120  * @local: desired priority, as defined by :ref:`enum v4l2_priority <v4l2-priority>` local
121  *
122  * .. note::
123  *      This function should be used only by the V4L2 core.
124  */
125 int v4l2_prio_check(struct v4l2_prio_state *global, enum v4l2_priority local);
126
127 /**
128  * struct v4l2_file_operations - fs operations used by a V4L2 device
129  *
130  * @owner: pointer to struct module
131  * @read: operations needed to implement the read() syscall
132  * @write: operations needed to implement the write() syscall
133  * @poll: operations needed to implement the poll() syscall
134  * @unlocked_ioctl: operations needed to implement the ioctl() syscall
135  * @compat_ioctl32: operations needed to implement the ioctl() syscall for
136  *      the special case where the Kernel uses 64 bits instructions, but
137  *      the userspace uses 32 bits.
138  * @get_unmapped_area: called by the mmap() syscall, used when %!CONFIG_MMU
139  * @mmap: operations needed to implement the mmap() syscall
140  * @open: operations needed to implement the open() syscall
141  * @release: operations needed to implement the release() syscall
142  *
143  * .. note::
144  *
145  *      Those operations are used to implemente the fs struct file_operations
146  *      at the V4L2 drivers. The V4L2 core overrides the fs ops with some
147  *      extra logic needed by the subsystem.
148  */
149 struct v4l2_file_operations {
150         struct module *owner;
151         ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
152         ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
153         unsigned int (*poll) (struct file *, struct poll_table_struct *);
154         long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
155 #ifdef CONFIG_COMPAT
156         long (*compat_ioctl32) (struct file *, unsigned int, unsigned long);
157 #endif
158         unsigned long (*get_unmapped_area) (struct file *, unsigned long,
159                                 unsigned long, unsigned long, unsigned long);
160         int (*mmap) (struct file *, struct vm_area_struct *);
161         int (*open) (struct file *);
162         int (*release) (struct file *);
163 };
164
165 /*
166  * Newer version of video_device, handled by videodev2.c
167  *      This version moves redundant code from video device code to
168  *      the common handler
169  */
170
171 /**
172  * struct video_device - Structure used to create and manage the V4L2 device
173  *      nodes.
174  *
175  * @entity: &struct media_entity
176  * @intf_devnode: pointer to &struct media_intf_devnode
177  * @pipe: &struct media_pipeline
178  * @fops: pointer to &struct v4l2_file_operations for the video device
179  * @device_caps: device capabilities as used in v4l2_capabilities
180  * @dev: &struct device for the video device
181  * @cdev: character device
182  * @v4l2_dev: pointer to &struct v4l2_device parent
183  * @dev_parent: pointer to &struct device parent
184  * @ctrl_handler: Control handler associated with this device node.
185  *       May be NULL.
186  * @queue: &struct vb2_queue associated with this device node. May be NULL.
187  * @prio: pointer to &struct v4l2_prio_state with device's Priority state.
188  *       If NULL, then v4l2_dev->prio will be used.
189  * @name: video device name
190  * @vfl_type: V4L device type
191  * @vfl_dir: V4L receiver, transmitter or m2m
192  * @minor: device node 'minor'. It is set to -1 if the registration failed
193  * @num: number of the video device node
194  * @flags: video device flags. Use bitops to set/clear/test flags
195  * @index: attribute to differentiate multiple indices on one physical device
196  * @fh_lock: Lock for all v4l2_fhs
197  * @fh_list: List of &struct v4l2_fh
198  * @dev_debug: Internal device debug flags, not for use by drivers
199  * @tvnorms: Supported tv norms
200  *
201  * @release: video device release() callback
202  * @ioctl_ops: pointer to &struct v4l2_ioctl_ops with ioctl callbacks
203  *
204  * @valid_ioctls: bitmap with the valid ioctls for this device
205  * @disable_locking: bitmap with the ioctls that don't require locking
206  * @lock: pointer to &struct mutex serialization lock
207  *
208  * .. note::
209  *      Only set @dev_parent if that can't be deduced from @v4l2_dev.
210  */
211
212 struct video_device
213 {
214 #if defined(CONFIG_MEDIA_CONTROLLER)
215         struct media_entity entity;
216         struct media_intf_devnode *intf_devnode;
217         struct media_pipeline pipe;
218 #endif
219         const struct v4l2_file_operations *fops;
220
221         u32 device_caps;
222
223         /* sysfs */
224         struct device dev;
225         struct cdev *cdev;
226
227         struct v4l2_device *v4l2_dev;
228         struct device *dev_parent;
229
230         struct v4l2_ctrl_handler *ctrl_handler;
231
232         struct vb2_queue *queue;
233
234         struct v4l2_prio_state *prio;
235
236         /* device info */
237         char name[32];
238         int vfl_type;
239         int vfl_dir;
240         int minor;
241         u16 num;
242         unsigned long flags;
243         int index;
244
245         /* V4L2 file handles */
246         spinlock_t              fh_lock;
247         struct list_head        fh_list;
248
249         int dev_debug;
250
251         v4l2_std_id tvnorms;
252
253         /* callbacks */
254         void (*release)(struct video_device *vdev);
255         const struct v4l2_ioctl_ops *ioctl_ops;
256         DECLARE_BITMAP(valid_ioctls, BASE_VIDIOC_PRIVATE);
257
258         DECLARE_BITMAP(disable_locking, BASE_VIDIOC_PRIVATE);
259         struct mutex *lock;
260 };
261
262 #define media_entity_to_video_device(__e) \
263         container_of(__e, struct video_device, entity)
264 /* dev to video-device */
265 #define to_video_device(cd) container_of(cd, struct video_device, dev)
266
267 /**
268  * __video_register_device - register video4linux devices
269  *
270  * @vdev: struct video_device to register
271  * @type: type of device to register
272  * @nr:   which device node number is desired:
273  *      (0 == /dev/video0, 1 == /dev/video1, ..., -1 == first free)
274  * @warn_if_nr_in_use: warn if the desired device node number
275  *        was already in use and another number was chosen instead.
276  * @owner: module that owns the video device node
277  *
278  * The registration code assigns minor numbers and device node numbers
279  * based on the requested type and registers the new device node with
280  * the kernel.
281  *
282  * This function assumes that struct video_device was zeroed when it
283  * was allocated and does not contain any stale date.
284  *
285  * An error is returned if no free minor or device node number could be
286  * found, or if the registration of the device node failed.
287  *
288  * Returns 0 on success.
289  *
290  * Valid values for @type are:
291  *
292  *      - %VFL_TYPE_GRABBER - A frame grabber
293  *      - %VFL_TYPE_VBI - Vertical blank data (undecoded)
294  *      - %VFL_TYPE_RADIO - A radio card
295  *      - %VFL_TYPE_SUBDEV - A subdevice
296  *      - %VFL_TYPE_SDR - Software Defined Radio
297  *
298  * .. note::
299  *
300  *      This function is meant to be used only inside the V4L2 core.
301  *      Drivers should use video_register_device() or
302  *      video_register_device_no_warn().
303  */
304 int __must_check __video_register_device(struct video_device *vdev, int type,
305                 int nr, int warn_if_nr_in_use, struct module *owner);
306
307 /**
308  *  video_register_device - register video4linux devices
309  *
310  * @vdev: struct video_device to register
311  * @type: type of device to register
312  * @nr:   which device node number is desired:
313  *      (0 == /dev/video0, 1 == /dev/video1, ..., -1 == first free)
314  *
315  * Internally, it calls __video_register_device(). Please see its
316  * documentation for more details.
317  *
318  * .. note::
319  *      if video_register_device fails, the release() callback of
320  *      &struct video_device structure is *not* called, so the caller
321  *      is responsible for freeing any data. Usually that means that
322  *      you video_device_release() should be called on failure.
323  */
324 static inline int __must_check video_register_device(struct video_device *vdev,
325                 int type, int nr)
326 {
327         return __video_register_device(vdev, type, nr, 1, vdev->fops->owner);
328 }
329
330 /**
331  *  video_register_device_no_warn - register video4linux devices
332  *
333  * @vdev: struct video_device to register
334  * @type: type of device to register
335  * @nr:   which device node number is desired:
336  *      (0 == /dev/video0, 1 == /dev/video1, ..., -1 == first free)
337  *
338  * This function is identical to video_register_device() except that no
339  * warning is issued if the desired device node number was already in use.
340  *
341  * Internally, it calls __video_register_device(). Please see its
342  * documentation for more details.
343  *
344  * .. note::
345  *      if video_register_device fails, the release() callback of
346  *      &struct video_device structure is *not* called, so the caller
347  *      is responsible for freeing any data. Usually that means that
348  *      you video_device_release() should be called on failure.
349  */
350 static inline int __must_check video_register_device_no_warn(
351                 struct video_device *vdev, int type, int nr)
352 {
353         return __video_register_device(vdev, type, nr, 0, vdev->fops->owner);
354 }
355
356 /**
357  * video_unregister_device - Unregister video devices.
358  *
359  * @vdev: &struct video_device to register
360  *
361  * Does nothing if vdev == NULL or if video_is_registered() returns false.
362  */
363 void video_unregister_device(struct video_device *vdev);
364
365 /**
366  * video_device_alloc - helper function to alloc &struct video_device
367  *
368  * Returns NULL if %-ENOMEM or a &struct video_device on success.
369  */
370 struct video_device * __must_check video_device_alloc(void);
371
372 /**
373  * video_device_release - helper function to release &struct video_device
374  *
375  * @vdev: pointer to &struct video_device
376  *
377  * Can also be used for video_device->release\(\).
378  */
379 void video_device_release(struct video_device *vdev);
380
381 /**
382  * video_device_release_empty - helper function to implement the
383  *      video_device->release\(\) callback.
384  *
385  * @vdev: pointer to &struct video_device
386  *
387  * This release function does nothing.
388  *
389  * It should be used when the video_device is a static global struct.
390  *
391  * .. note::
392  *      Having a static video_device is a dubious construction at best.
393  */
394 void video_device_release_empty(struct video_device *vdev);
395
396 /**
397  * v4l2_is_known_ioctl - Checks if a given cmd is a known V4L ioctl
398  *
399  * @cmd: ioctl command
400  *
401  * returns true if cmd is a known V4L2 ioctl
402  */
403 bool v4l2_is_known_ioctl(unsigned int cmd);
404
405 /** v4l2_disable_ioctl_locking - mark that a given command
406  *      shouldn't use core locking
407  *
408  * @vdev: pointer to &struct video_device
409  * @cmd: ioctl command
410  */
411 static inline void v4l2_disable_ioctl_locking(struct video_device *vdev,
412                                               unsigned int cmd)
413 {
414         if (_IOC_NR(cmd) < BASE_VIDIOC_PRIVATE)
415                 set_bit(_IOC_NR(cmd), vdev->disable_locking);
416 }
417
418 /**
419  * v4l2_disable_ioctl- mark that a given command isn't implemented.
420  *      shouldn't use core locking
421  *
422  * @vdev: pointer to &struct video_device
423  * @cmd: ioctl command
424  *
425  * This function allows drivers to provide just one v4l2_ioctl_ops struct, but
426  * disable ioctls based on the specific card that is actually found.
427  *
428  * .. note::
429  *
430  *    This must be called before video_register_device.
431  *    See also the comments for determine_valid_ioctls().
432  */
433 static inline void v4l2_disable_ioctl(struct video_device *vdev,
434                                       unsigned int cmd)
435 {
436         if (_IOC_NR(cmd) < BASE_VIDIOC_PRIVATE)
437                 set_bit(_IOC_NR(cmd), vdev->valid_ioctls);
438 }
439
440 /**
441  * video_get_drvdata - gets private data from &struct video_device.
442  *
443  * @vdev: pointer to &struct video_device
444  *
445  * returns a pointer to the private data
446  */
447 static inline void *video_get_drvdata(struct video_device *vdev)
448 {
449         return dev_get_drvdata(&vdev->dev);
450 }
451
452 /**
453  * video_set_drvdata - sets private data from &struct video_device.
454  *
455  * @vdev: pointer to &struct video_device
456  * @data: private data pointer
457  */
458 static inline void video_set_drvdata(struct video_device *vdev, void *data)
459 {
460         dev_set_drvdata(&vdev->dev, data);
461 }
462
463 /**
464  * video_devdata - gets &struct video_device from struct file.
465  *
466  * @file: pointer to struct file
467  */
468 struct video_device *video_devdata(struct file *file);
469
470 /**
471  * video_drvdata - gets private data from &struct video_device using the
472  *      struct file.
473  *
474  * @file: pointer to struct file
475  *
476  * This is function combines both video_get_drvdata() and video_devdata()
477  * as this is used very often.
478  */
479 static inline void *video_drvdata(struct file *file)
480 {
481         return video_get_drvdata(video_devdata(file));
482 }
483
484 /**
485  * video_device_node_name - returns the video device name
486  *
487  * @vdev: pointer to &struct video_device
488  *
489  * Returns the device name string
490  */
491 static inline const char *video_device_node_name(struct video_device *vdev)
492 {
493         return dev_name(&vdev->dev);
494 }
495
496 /**
497  * video_is_registered - returns true if the &struct video_device is registered.
498  *
499  *
500  * @vdev: pointer to &struct video_device
501  */
502 static inline int video_is_registered(struct video_device *vdev)
503 {
504         return test_bit(V4L2_FL_REGISTERED, &vdev->flags);
505 }
506
507 #endif /* _V4L2_DEV_H */