1/*
2 * Video capture interface for Linux version 2
3 *
4 *	A generic video device interface for the LINUX operating system
5 *	using a set of device structures/vectors for low level operations.
6 *
7 *	This program is free software; you can redistribute it and/or
8 *	modify it under the terms of the GNU General Public License
9 *	as published by the Free Software Foundation; either version
10 *	2 of the License, or (at your option) any later version.
11 *
12 * Authors:	Alan Cox, <alan@lxorguk.ukuu.org.uk> (version 1)
13 *              Mauro Carvalho Chehab <mchehab@infradead.org> (version 2)
14 *
15 * Fixes:	20000516  Claudio Matsuoka <claudio@conectiva.com>
16 *		- Added procfs support
17 */
18
19#include <linux/module.h>
20#include <linux/types.h>
21#include <linux/kernel.h>
22#include <linux/mm.h>
23#include <linux/string.h>
24#include <linux/errno.h>
25#include <linux/init.h>
26#include <linux/kmod.h>
27#include <linux/slab.h>
28#include <asm/uaccess.h>
29
30#include <media/v4l2-common.h>
31#include <media/v4l2-device.h>
32#include <media/v4l2-ioctl.h>
33
34#define VIDEO_NUM_DEVICES	256
35#define VIDEO_NAME              "video4linux"
36
37/*
38 *	sysfs stuff
39 */
40
41static ssize_t index_show(struct device *cd,
42			  struct device_attribute *attr, char *buf)
43{
44	struct video_device *vdev = to_video_device(cd);
45
46	return sprintf(buf, "%i\n", vdev->index);
47}
48static DEVICE_ATTR_RO(index);
49
50static ssize_t dev_debug_show(struct device *cd,
51			  struct device_attribute *attr, char *buf)
52{
53	struct video_device *vdev = to_video_device(cd);
54
55	return sprintf(buf, "%i\n", vdev->dev_debug);
56}
57
58static ssize_t dev_debug_store(struct device *cd, struct device_attribute *attr,
59			  const char *buf, size_t len)
60{
61	struct video_device *vdev = to_video_device(cd);
62	int res = 0;
63	u16 value;
64
65	res = kstrtou16(buf, 0, &value);
66	if (res)
67		return res;
68
69	vdev->dev_debug = value;
70	return len;
71}
72static DEVICE_ATTR_RW(dev_debug);
73
74static ssize_t name_show(struct device *cd,
75			 struct device_attribute *attr, char *buf)
76{
77	struct video_device *vdev = to_video_device(cd);
78
79	return sprintf(buf, "%.*s\n", (int)sizeof(vdev->name), vdev->name);
80}
81static DEVICE_ATTR_RO(name);
82
83static struct attribute *video_device_attrs[] = {
84	&dev_attr_name.attr,
85	&dev_attr_dev_debug.attr,
86	&dev_attr_index.attr,
87	NULL,
88};
89ATTRIBUTE_GROUPS(video_device);
90
91/*
92 *	Active devices
93 */
94static struct video_device *video_device[VIDEO_NUM_DEVICES];
95static DEFINE_MUTEX(videodev_lock);
96static DECLARE_BITMAP(devnode_nums[VFL_TYPE_MAX], VIDEO_NUM_DEVICES);
97
98/* Device node utility functions */
99
100/* Note: these utility functions all assume that vfl_type is in the range
101   [0, VFL_TYPE_MAX-1]. */
102
103#ifdef CONFIG_VIDEO_FIXED_MINOR_RANGES
104/* Return the bitmap corresponding to vfl_type. */
105static inline unsigned long *devnode_bits(int vfl_type)
106{
107	/* Any types not assigned to fixed minor ranges must be mapped to
108	   one single bitmap for the purposes of finding a free node number
109	   since all those unassigned types use the same minor range. */
110	int idx = (vfl_type > VFL_TYPE_RADIO) ? VFL_TYPE_MAX - 1 : vfl_type;
111
112	return devnode_nums[idx];
113}
114#else
115/* Return the bitmap corresponding to vfl_type. */
116static inline unsigned long *devnode_bits(int vfl_type)
117{
118	return devnode_nums[vfl_type];
119}
120#endif
121
122/* Mark device node number vdev->num as used */
123static inline void devnode_set(struct video_device *vdev)
124{
125	set_bit(vdev->num, devnode_bits(vdev->vfl_type));
126}
127
128/* Mark device node number vdev->num as unused */
129static inline void devnode_clear(struct video_device *vdev)
130{
131	clear_bit(vdev->num, devnode_bits(vdev->vfl_type));
132}
133
134/* Try to find a free device node number in the range [from, to> */
135static inline int devnode_find(struct video_device *vdev, int from, int to)
136{
137	return find_next_zero_bit(devnode_bits(vdev->vfl_type), to, from);
138}
139
140struct video_device *video_device_alloc(void)
141{
142	return kzalloc(sizeof(struct video_device), GFP_KERNEL);
143}
144EXPORT_SYMBOL(video_device_alloc);
145
146void video_device_release(struct video_device *vdev)
147{
148	kfree(vdev);
149}
150EXPORT_SYMBOL(video_device_release);
151
152void video_device_release_empty(struct video_device *vdev)
153{
154	/* Do nothing */
155	/* Only valid when the video_device struct is a static. */
156}
157EXPORT_SYMBOL(video_device_release_empty);
158
159static inline void video_get(struct video_device *vdev)
160{
161	get_device(&vdev->dev);
162}
163
164static inline void video_put(struct video_device *vdev)
165{
166	put_device(&vdev->dev);
167}
168
169/* Called when the last user of the video device exits. */
170static void v4l2_device_release(struct device *cd)
171{
172	struct video_device *vdev = to_video_device(cd);
173	struct v4l2_device *v4l2_dev = vdev->v4l2_dev;
174
175	mutex_lock(&videodev_lock);
176	if (WARN_ON(video_device[vdev->minor] != vdev)) {
177		/* should not happen */
178		mutex_unlock(&videodev_lock);
179		return;
180	}
181
182	/* Free up this device for reuse */
183	video_device[vdev->minor] = NULL;
184
185	/* Delete the cdev on this minor as well */
186	cdev_del(vdev->cdev);
187	/* Just in case some driver tries to access this from
188	   the release() callback. */
189	vdev->cdev = NULL;
190
191	/* Mark device node number as free */
192	devnode_clear(vdev);
193
194	mutex_unlock(&videodev_lock);
195
196#if defined(CONFIG_MEDIA_CONTROLLER)
197	if (v4l2_dev->mdev &&
198	    vdev->vfl_type != VFL_TYPE_SUBDEV)
199		media_device_unregister_entity(&vdev->entity);
200#endif
201
202	/* Do not call v4l2_device_put if there is no release callback set.
203	 * Drivers that have no v4l2_device release callback might free the
204	 * v4l2_dev instance in the video_device release callback below, so we
205	 * must perform this check here.
206	 *
207	 * TODO: In the long run all drivers that use v4l2_device should use the
208	 * v4l2_device release callback. This check will then be unnecessary.
209	 */
210	if (v4l2_dev->release == NULL)
211		v4l2_dev = NULL;
212
213	/* Release video_device and perform other
214	   cleanups as needed. */
215	vdev->release(vdev);
216
217	/* Decrease v4l2_device refcount */
218	if (v4l2_dev)
219		v4l2_device_put(v4l2_dev);
220}
221
222static struct class video_class = {
223	.name = VIDEO_NAME,
224	.dev_groups = video_device_groups,
225};
226
227struct video_device *video_devdata(struct file *file)
228{
229	return video_device[iminor(file_inode(file))];
230}
231EXPORT_SYMBOL(video_devdata);
232
233
234/* Priority handling */
235
236static inline bool prio_is_valid(enum v4l2_priority prio)
237{
238	return prio == V4L2_PRIORITY_BACKGROUND ||
239	       prio == V4L2_PRIORITY_INTERACTIVE ||
240	       prio == V4L2_PRIORITY_RECORD;
241}
242
243void v4l2_prio_init(struct v4l2_prio_state *global)
244{
245	memset(global, 0, sizeof(*global));
246}
247EXPORT_SYMBOL(v4l2_prio_init);
248
249int v4l2_prio_change(struct v4l2_prio_state *global, enum v4l2_priority *local,
250		     enum v4l2_priority new)
251{
252	if (!prio_is_valid(new))
253		return -EINVAL;
254	if (*local == new)
255		return 0;
256
257	atomic_inc(&global->prios[new]);
258	if (prio_is_valid(*local))
259		atomic_dec(&global->prios[*local]);
260	*local = new;
261	return 0;
262}
263EXPORT_SYMBOL(v4l2_prio_change);
264
265void v4l2_prio_open(struct v4l2_prio_state *global, enum v4l2_priority *local)
266{
267	v4l2_prio_change(global, local, V4L2_PRIORITY_DEFAULT);
268}
269EXPORT_SYMBOL(v4l2_prio_open);
270
271void v4l2_prio_close(struct v4l2_prio_state *global, enum v4l2_priority local)
272{
273	if (prio_is_valid(local))
274		atomic_dec(&global->prios[local]);
275}
276EXPORT_SYMBOL(v4l2_prio_close);
277
278enum v4l2_priority v4l2_prio_max(struct v4l2_prio_state *global)
279{
280	if (atomic_read(&global->prios[V4L2_PRIORITY_RECORD]) > 0)
281		return V4L2_PRIORITY_RECORD;
282	if (atomic_read(&global->prios[V4L2_PRIORITY_INTERACTIVE]) > 0)
283		return V4L2_PRIORITY_INTERACTIVE;
284	if (atomic_read(&global->prios[V4L2_PRIORITY_BACKGROUND]) > 0)
285		return V4L2_PRIORITY_BACKGROUND;
286	return V4L2_PRIORITY_UNSET;
287}
288EXPORT_SYMBOL(v4l2_prio_max);
289
290int v4l2_prio_check(struct v4l2_prio_state *global, enum v4l2_priority local)
291{
292	return (local < v4l2_prio_max(global)) ? -EBUSY : 0;
293}
294EXPORT_SYMBOL(v4l2_prio_check);
295
296
297static ssize_t v4l2_read(struct file *filp, char __user *buf,
298		size_t sz, loff_t *off)
299{
300	struct video_device *vdev = video_devdata(filp);
301	int ret = -ENODEV;
302
303	if (!vdev->fops->read)
304		return -EINVAL;
305	if (video_is_registered(vdev))
306		ret = vdev->fops->read(filp, buf, sz, off);
307	if ((vdev->dev_debug & V4L2_DEV_DEBUG_FOP) &&
308	    (vdev->dev_debug & V4L2_DEV_DEBUG_STREAMING))
309		printk(KERN_DEBUG "%s: read: %zd (%d)\n",
310			video_device_node_name(vdev), sz, ret);
311	return ret;
312}
313
314static ssize_t v4l2_write(struct file *filp, const char __user *buf,
315		size_t sz, loff_t *off)
316{
317	struct video_device *vdev = video_devdata(filp);
318	int ret = -ENODEV;
319
320	if (!vdev->fops->write)
321		return -EINVAL;
322	if (video_is_registered(vdev))
323		ret = vdev->fops->write(filp, buf, sz, off);
324	if ((vdev->dev_debug & V4L2_DEV_DEBUG_FOP) &&
325	    (vdev->dev_debug & V4L2_DEV_DEBUG_STREAMING))
326		printk(KERN_DEBUG "%s: write: %zd (%d)\n",
327			video_device_node_name(vdev), sz, ret);
328	return ret;
329}
330
331static unsigned int v4l2_poll(struct file *filp, struct poll_table_struct *poll)
332{
333	struct video_device *vdev = video_devdata(filp);
334	unsigned int res = POLLERR | POLLHUP;
335
336	if (!vdev->fops->poll)
337		return DEFAULT_POLLMASK;
338	if (video_is_registered(vdev))
339		res = vdev->fops->poll(filp, poll);
340	if (vdev->dev_debug & V4L2_DEV_DEBUG_POLL)
341		printk(KERN_DEBUG "%s: poll: %08x\n",
342			video_device_node_name(vdev), res);
343	return res;
344}
345
346static long v4l2_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
347{
348	struct video_device *vdev = video_devdata(filp);
349	int ret = -ENODEV;
350
351	if (vdev->fops->unlocked_ioctl) {
352		struct mutex *lock = v4l2_ioctl_get_lock(vdev, cmd);
353
354		if (lock && mutex_lock_interruptible(lock))
355			return -ERESTARTSYS;
356		if (video_is_registered(vdev))
357			ret = vdev->fops->unlocked_ioctl(filp, cmd, arg);
358		if (lock)
359			mutex_unlock(lock);
360	} else
361		ret = -ENOTTY;
362
363	return ret;
364}
365
366#ifdef CONFIG_MMU
367#define v4l2_get_unmapped_area NULL
368#else
369static unsigned long v4l2_get_unmapped_area(struct file *filp,
370		unsigned long addr, unsigned long len, unsigned long pgoff,
371		unsigned long flags)
372{
373	struct video_device *vdev = video_devdata(filp);
374	int ret;
375
376	if (!vdev->fops->get_unmapped_area)
377		return -ENOSYS;
378	if (!video_is_registered(vdev))
379		return -ENODEV;
380	ret = vdev->fops->get_unmapped_area(filp, addr, len, pgoff, flags);
381	if (vdev->dev_debug & V4L2_DEV_DEBUG_FOP)
382		printk(KERN_DEBUG "%s: get_unmapped_area (%d)\n",
383			video_device_node_name(vdev), ret);
384	return ret;
385}
386#endif
387
388static int v4l2_mmap(struct file *filp, struct vm_area_struct *vm)
389{
390	struct video_device *vdev = video_devdata(filp);
391	int ret = -ENODEV;
392
393	if (!vdev->fops->mmap)
394		return -ENODEV;
395	if (video_is_registered(vdev))
396		ret = vdev->fops->mmap(filp, vm);
397	if (vdev->dev_debug & V4L2_DEV_DEBUG_FOP)
398		printk(KERN_DEBUG "%s: mmap (%d)\n",
399			video_device_node_name(vdev), ret);
400	return ret;
401}
402
403/* Override for the open function */
404static int v4l2_open(struct inode *inode, struct file *filp)
405{
406	struct video_device *vdev;
407	int ret = 0;
408
409	/* Check if the video device is available */
410	mutex_lock(&videodev_lock);
411	vdev = video_devdata(filp);
412	/* return ENODEV if the video device has already been removed. */
413	if (vdev == NULL || !video_is_registered(vdev)) {
414		mutex_unlock(&videodev_lock);
415		return -ENODEV;
416	}
417	/* and increase the device refcount */
418	video_get(vdev);
419	mutex_unlock(&videodev_lock);
420	if (vdev->fops->open) {
421		if (video_is_registered(vdev))
422			ret = vdev->fops->open(filp);
423		else
424			ret = -ENODEV;
425	}
426
427	if (vdev->dev_debug & V4L2_DEV_DEBUG_FOP)
428		printk(KERN_DEBUG "%s: open (%d)\n",
429			video_device_node_name(vdev), ret);
430	/* decrease the refcount in case of an error */
431	if (ret)
432		video_put(vdev);
433	return ret;
434}
435
436/* Override for the release function */
437static int v4l2_release(struct inode *inode, struct file *filp)
438{
439	struct video_device *vdev = video_devdata(filp);
440	int ret = 0;
441
442	if (vdev->fops->release)
443		ret = vdev->fops->release(filp);
444	if (vdev->dev_debug & V4L2_DEV_DEBUG_FOP)
445		printk(KERN_DEBUG "%s: release\n",
446			video_device_node_name(vdev));
447
448	/* decrease the refcount unconditionally since the release()
449	   return value is ignored. */
450	video_put(vdev);
451	return ret;
452}
453
454static const struct file_operations v4l2_fops = {
455	.owner = THIS_MODULE,
456	.read = v4l2_read,
457	.write = v4l2_write,
458	.open = v4l2_open,
459	.get_unmapped_area = v4l2_get_unmapped_area,
460	.mmap = v4l2_mmap,
461	.unlocked_ioctl = v4l2_ioctl,
462#ifdef CONFIG_COMPAT
463	.compat_ioctl = v4l2_compat_ioctl32,
464#endif
465	.release = v4l2_release,
466	.poll = v4l2_poll,
467	.llseek = no_llseek,
468};
469
470/**
471 * get_index - assign stream index number based on v4l2_dev
472 * @vdev: video_device to assign index number to, vdev->v4l2_dev should be assigned
473 *
474 * Note that when this is called the new device has not yet been registered
475 * in the video_device array, but it was able to obtain a minor number.
476 *
477 * This means that we can always obtain a free stream index number since
478 * the worst case scenario is that there are VIDEO_NUM_DEVICES - 1 slots in
479 * use of the video_device array.
480 *
481 * Returns a free index number.
482 */
483static int get_index(struct video_device *vdev)
484{
485	/* This can be static since this function is called with the global
486	   videodev_lock held. */
487	static DECLARE_BITMAP(used, VIDEO_NUM_DEVICES);
488	int i;
489
490	bitmap_zero(used, VIDEO_NUM_DEVICES);
491
492	for (i = 0; i < VIDEO_NUM_DEVICES; i++) {
493		if (video_device[i] != NULL &&
494		    video_device[i]->v4l2_dev == vdev->v4l2_dev) {
495			set_bit(video_device[i]->index, used);
496		}
497	}
498
499	return find_first_zero_bit(used, VIDEO_NUM_DEVICES);
500}
501
502#define SET_VALID_IOCTL(ops, cmd, op)			\
503	if (ops->op)					\
504		set_bit(_IOC_NR(cmd), valid_ioctls)
505
506/* This determines which ioctls are actually implemented in the driver.
507   It's a one-time thing which simplifies video_ioctl2 as it can just do
508   a bit test.
509
510   Note that drivers can override this by setting bits to 1 in
511   vdev->valid_ioctls. If an ioctl is marked as 1 when this function is
512   called, then that ioctl will actually be marked as unimplemented.
513
514   It does that by first setting up the local valid_ioctls bitmap, and
515   at the end do a:
516
517   vdev->valid_ioctls = valid_ioctls & ~(vdev->valid_ioctls)
518 */
519static void determine_valid_ioctls(struct video_device *vdev)
520{
521	DECLARE_BITMAP(valid_ioctls, BASE_VIDIOC_PRIVATE);
522	const struct v4l2_ioctl_ops *ops = vdev->ioctl_ops;
523	bool is_vid = vdev->vfl_type == VFL_TYPE_GRABBER;
524	bool is_vbi = vdev->vfl_type == VFL_TYPE_VBI;
525	bool is_radio = vdev->vfl_type == VFL_TYPE_RADIO;
526	bool is_sdr = vdev->vfl_type == VFL_TYPE_SDR;
527	bool is_rx = vdev->vfl_dir != VFL_DIR_TX;
528	bool is_tx = vdev->vfl_dir != VFL_DIR_RX;
529
530	bitmap_zero(valid_ioctls, BASE_VIDIOC_PRIVATE);
531
532	/* vfl_type and vfl_dir independent ioctls */
533
534	SET_VALID_IOCTL(ops, VIDIOC_QUERYCAP, vidioc_querycap);
535	set_bit(_IOC_NR(VIDIOC_G_PRIORITY), valid_ioctls);
536	set_bit(_IOC_NR(VIDIOC_S_PRIORITY), valid_ioctls);
537
538	/* Note: the control handler can also be passed through the filehandle,
539	   and that can't be tested here. If the bit for these control ioctls
540	   is set, then the ioctl is valid. But if it is 0, then it can still
541	   be valid if the filehandle passed the control handler. */
542	if (vdev->ctrl_handler || ops->vidioc_queryctrl)
543		set_bit(_IOC_NR(VIDIOC_QUERYCTRL), valid_ioctls);
544	if (vdev->ctrl_handler || ops->vidioc_query_ext_ctrl)
545		set_bit(_IOC_NR(VIDIOC_QUERY_EXT_CTRL), valid_ioctls);
546	if (vdev->ctrl_handler || ops->vidioc_g_ctrl || ops->vidioc_g_ext_ctrls)
547		set_bit(_IOC_NR(VIDIOC_G_CTRL), valid_ioctls);
548	if (vdev->ctrl_handler || ops->vidioc_s_ctrl || ops->vidioc_s_ext_ctrls)
549		set_bit(_IOC_NR(VIDIOC_S_CTRL), valid_ioctls);
550	if (vdev->ctrl_handler || ops->vidioc_g_ext_ctrls)
551		set_bit(_IOC_NR(VIDIOC_G_EXT_CTRLS), valid_ioctls);
552	if (vdev->ctrl_handler || ops->vidioc_s_ext_ctrls)
553		set_bit(_IOC_NR(VIDIOC_S_EXT_CTRLS), valid_ioctls);
554	if (vdev->ctrl_handler || ops->vidioc_try_ext_ctrls)
555		set_bit(_IOC_NR(VIDIOC_TRY_EXT_CTRLS), valid_ioctls);
556	if (vdev->ctrl_handler || ops->vidioc_querymenu)
557		set_bit(_IOC_NR(VIDIOC_QUERYMENU), valid_ioctls);
558	SET_VALID_IOCTL(ops, VIDIOC_G_FREQUENCY, vidioc_g_frequency);
559	SET_VALID_IOCTL(ops, VIDIOC_S_FREQUENCY, vidioc_s_frequency);
560	SET_VALID_IOCTL(ops, VIDIOC_LOG_STATUS, vidioc_log_status);
561#ifdef CONFIG_VIDEO_ADV_DEBUG
562	set_bit(_IOC_NR(VIDIOC_DBG_G_CHIP_INFO), valid_ioctls);
563	set_bit(_IOC_NR(VIDIOC_DBG_G_REGISTER), valid_ioctls);
564	set_bit(_IOC_NR(VIDIOC_DBG_S_REGISTER), valid_ioctls);
565#endif
566	/* yes, really vidioc_subscribe_event */
567	SET_VALID_IOCTL(ops, VIDIOC_DQEVENT, vidioc_subscribe_event);
568	SET_VALID_IOCTL(ops, VIDIOC_SUBSCRIBE_EVENT, vidioc_subscribe_event);
569	SET_VALID_IOCTL(ops, VIDIOC_UNSUBSCRIBE_EVENT, vidioc_unsubscribe_event);
570	if (ops->vidioc_enum_freq_bands || ops->vidioc_g_tuner || ops->vidioc_g_modulator)
571		set_bit(_IOC_NR(VIDIOC_ENUM_FREQ_BANDS), valid_ioctls);
572
573	if (is_vid) {
574		/* video specific ioctls */
575		if ((is_rx && (ops->vidioc_enum_fmt_vid_cap ||
576			       ops->vidioc_enum_fmt_vid_cap_mplane ||
577			       ops->vidioc_enum_fmt_vid_overlay)) ||
578		    (is_tx && (ops->vidioc_enum_fmt_vid_out ||
579			       ops->vidioc_enum_fmt_vid_out_mplane)))
580			set_bit(_IOC_NR(VIDIOC_ENUM_FMT), valid_ioctls);
581		if ((is_rx && (ops->vidioc_g_fmt_vid_cap ||
582			       ops->vidioc_g_fmt_vid_cap_mplane ||
583			       ops->vidioc_g_fmt_vid_overlay)) ||
584		    (is_tx && (ops->vidioc_g_fmt_vid_out ||
585			       ops->vidioc_g_fmt_vid_out_mplane ||
586			       ops->vidioc_g_fmt_vid_out_overlay)))
587			 set_bit(_IOC_NR(VIDIOC_G_FMT), valid_ioctls);
588		if ((is_rx && (ops->vidioc_s_fmt_vid_cap ||
589			       ops->vidioc_s_fmt_vid_cap_mplane ||
590			       ops->vidioc_s_fmt_vid_overlay)) ||
591		    (is_tx && (ops->vidioc_s_fmt_vid_out ||
592			       ops->vidioc_s_fmt_vid_out_mplane ||
593			       ops->vidioc_s_fmt_vid_out_overlay)))
594			 set_bit(_IOC_NR(VIDIOC_S_FMT), valid_ioctls);
595		if ((is_rx && (ops->vidioc_try_fmt_vid_cap ||
596			       ops->vidioc_try_fmt_vid_cap_mplane ||
597			       ops->vidioc_try_fmt_vid_overlay)) ||
598		    (is_tx && (ops->vidioc_try_fmt_vid_out ||
599			       ops->vidioc_try_fmt_vid_out_mplane ||
600			       ops->vidioc_try_fmt_vid_out_overlay)))
601			 set_bit(_IOC_NR(VIDIOC_TRY_FMT), valid_ioctls);
602		SET_VALID_IOCTL(ops, VIDIOC_OVERLAY, vidioc_overlay);
603		SET_VALID_IOCTL(ops, VIDIOC_G_FBUF, vidioc_g_fbuf);
604		SET_VALID_IOCTL(ops, VIDIOC_S_FBUF, vidioc_s_fbuf);
605		SET_VALID_IOCTL(ops, VIDIOC_G_JPEGCOMP, vidioc_g_jpegcomp);
606		SET_VALID_IOCTL(ops, VIDIOC_S_JPEGCOMP, vidioc_s_jpegcomp);
607		SET_VALID_IOCTL(ops, VIDIOC_G_ENC_INDEX, vidioc_g_enc_index);
608		SET_VALID_IOCTL(ops, VIDIOC_ENCODER_CMD, vidioc_encoder_cmd);
609		SET_VALID_IOCTL(ops, VIDIOC_TRY_ENCODER_CMD, vidioc_try_encoder_cmd);
610		SET_VALID_IOCTL(ops, VIDIOC_DECODER_CMD, vidioc_decoder_cmd);
611		SET_VALID_IOCTL(ops, VIDIOC_TRY_DECODER_CMD, vidioc_try_decoder_cmd);
612		SET_VALID_IOCTL(ops, VIDIOC_ENUM_FRAMESIZES, vidioc_enum_framesizes);
613		SET_VALID_IOCTL(ops, VIDIOC_ENUM_FRAMEINTERVALS, vidioc_enum_frameintervals);
614		if (ops->vidioc_g_crop || ops->vidioc_g_selection)
615			set_bit(_IOC_NR(VIDIOC_G_CROP), valid_ioctls);
616		if (ops->vidioc_s_crop || ops->vidioc_s_selection)
617			set_bit(_IOC_NR(VIDIOC_S_CROP), valid_ioctls);
618		SET_VALID_IOCTL(ops, VIDIOC_G_SELECTION, vidioc_g_selection);
619		SET_VALID_IOCTL(ops, VIDIOC_S_SELECTION, vidioc_s_selection);
620		if (ops->vidioc_cropcap || ops->vidioc_g_selection)
621			set_bit(_IOC_NR(VIDIOC_CROPCAP), valid_ioctls);
622	} else if (is_vbi) {
623		/* vbi specific ioctls */
624		if ((is_rx && (ops->vidioc_g_fmt_vbi_cap ||
625			       ops->vidioc_g_fmt_sliced_vbi_cap)) ||
626		    (is_tx && (ops->vidioc_g_fmt_vbi_out ||
627			       ops->vidioc_g_fmt_sliced_vbi_out)))
628			set_bit(_IOC_NR(VIDIOC_G_FMT), valid_ioctls);
629		if ((is_rx && (ops->vidioc_s_fmt_vbi_cap ||
630			       ops->vidioc_s_fmt_sliced_vbi_cap)) ||
631		    (is_tx && (ops->vidioc_s_fmt_vbi_out ||
632			       ops->vidioc_s_fmt_sliced_vbi_out)))
633			set_bit(_IOC_NR(VIDIOC_S_FMT), valid_ioctls);
634		if ((is_rx && (ops->vidioc_try_fmt_vbi_cap ||
635			       ops->vidioc_try_fmt_sliced_vbi_cap)) ||
636		    (is_tx && (ops->vidioc_try_fmt_vbi_out ||
637			       ops->vidioc_try_fmt_sliced_vbi_out)))
638			set_bit(_IOC_NR(VIDIOC_TRY_FMT), valid_ioctls);
639		SET_VALID_IOCTL(ops, VIDIOC_G_SLICED_VBI_CAP, vidioc_g_sliced_vbi_cap);
640	} else if (is_sdr) {
641		/* SDR specific ioctls */
642		if (ops->vidioc_enum_fmt_sdr_cap)
643			set_bit(_IOC_NR(VIDIOC_ENUM_FMT), valid_ioctls);
644		if (ops->vidioc_g_fmt_sdr_cap)
645			set_bit(_IOC_NR(VIDIOC_G_FMT), valid_ioctls);
646		if (ops->vidioc_s_fmt_sdr_cap)
647			set_bit(_IOC_NR(VIDIOC_S_FMT), valid_ioctls);
648		if (ops->vidioc_try_fmt_sdr_cap)
649			set_bit(_IOC_NR(VIDIOC_TRY_FMT), valid_ioctls);
650	}
651
652	if (is_vid || is_vbi || is_sdr) {
653		/* ioctls valid for video, vbi or sdr */
654		SET_VALID_IOCTL(ops, VIDIOC_REQBUFS, vidioc_reqbufs);
655		SET_VALID_IOCTL(ops, VIDIOC_QUERYBUF, vidioc_querybuf);
656		SET_VALID_IOCTL(ops, VIDIOC_QBUF, vidioc_qbuf);
657		SET_VALID_IOCTL(ops, VIDIOC_EXPBUF, vidioc_expbuf);
658		SET_VALID_IOCTL(ops, VIDIOC_DQBUF, vidioc_dqbuf);
659		SET_VALID_IOCTL(ops, VIDIOC_CREATE_BUFS, vidioc_create_bufs);
660		SET_VALID_IOCTL(ops, VIDIOC_PREPARE_BUF, vidioc_prepare_buf);
661		SET_VALID_IOCTL(ops, VIDIOC_STREAMON, vidioc_streamon);
662		SET_VALID_IOCTL(ops, VIDIOC_STREAMOFF, vidioc_streamoff);
663	}
664
665	if (is_vid || is_vbi) {
666		/* ioctls valid for video or vbi */
667		if (ops->vidioc_s_std)
668			set_bit(_IOC_NR(VIDIOC_ENUMSTD), valid_ioctls);
669		SET_VALID_IOCTL(ops, VIDIOC_S_STD, vidioc_s_std);
670		SET_VALID_IOCTL(ops, VIDIOC_G_STD, vidioc_g_std);
671		if (is_rx) {
672			SET_VALID_IOCTL(ops, VIDIOC_QUERYSTD, vidioc_querystd);
673			SET_VALID_IOCTL(ops, VIDIOC_ENUMINPUT, vidioc_enum_input);
674			SET_VALID_IOCTL(ops, VIDIOC_G_INPUT, vidioc_g_input);
675			SET_VALID_IOCTL(ops, VIDIOC_S_INPUT, vidioc_s_input);
676			SET_VALID_IOCTL(ops, VIDIOC_ENUMAUDIO, vidioc_enumaudio);
677			SET_VALID_IOCTL(ops, VIDIOC_G_AUDIO, vidioc_g_audio);
678			SET_VALID_IOCTL(ops, VIDIOC_S_AUDIO, vidioc_s_audio);
679			SET_VALID_IOCTL(ops, VIDIOC_QUERY_DV_TIMINGS, vidioc_query_dv_timings);
680			SET_VALID_IOCTL(ops, VIDIOC_S_EDID, vidioc_s_edid);
681		}
682		if (is_tx) {
683			SET_VALID_IOCTL(ops, VIDIOC_ENUMOUTPUT, vidioc_enum_output);
684			SET_VALID_IOCTL(ops, VIDIOC_G_OUTPUT, vidioc_g_output);
685			SET_VALID_IOCTL(ops, VIDIOC_S_OUTPUT, vidioc_s_output);
686			SET_VALID_IOCTL(ops, VIDIOC_ENUMAUDOUT, vidioc_enumaudout);
687			SET_VALID_IOCTL(ops, VIDIOC_G_AUDOUT, vidioc_g_audout);
688			SET_VALID_IOCTL(ops, VIDIOC_S_AUDOUT, vidioc_s_audout);
689		}
690		if (ops->vidioc_g_parm || (vdev->vfl_type == VFL_TYPE_GRABBER &&
691					ops->vidioc_g_std))
692			set_bit(_IOC_NR(VIDIOC_G_PARM), valid_ioctls);
693		SET_VALID_IOCTL(ops, VIDIOC_S_PARM, vidioc_s_parm);
694		SET_VALID_IOCTL(ops, VIDIOC_S_DV_TIMINGS, vidioc_s_dv_timings);
695		SET_VALID_IOCTL(ops, VIDIOC_G_DV_TIMINGS, vidioc_g_dv_timings);
696		SET_VALID_IOCTL(ops, VIDIOC_ENUM_DV_TIMINGS, vidioc_enum_dv_timings);
697		SET_VALID_IOCTL(ops, VIDIOC_DV_TIMINGS_CAP, vidioc_dv_timings_cap);
698		SET_VALID_IOCTL(ops, VIDIOC_G_EDID, vidioc_g_edid);
699	}
700	if (is_tx && (is_radio || is_sdr)) {
701		/* radio transmitter only ioctls */
702		SET_VALID_IOCTL(ops, VIDIOC_G_MODULATOR, vidioc_g_modulator);
703		SET_VALID_IOCTL(ops, VIDIOC_S_MODULATOR, vidioc_s_modulator);
704	}
705	if (is_rx) {
706		/* receiver only ioctls */
707		SET_VALID_IOCTL(ops, VIDIOC_G_TUNER, vidioc_g_tuner);
708		SET_VALID_IOCTL(ops, VIDIOC_S_TUNER, vidioc_s_tuner);
709		SET_VALID_IOCTL(ops, VIDIOC_S_HW_FREQ_SEEK, vidioc_s_hw_freq_seek);
710	}
711
712	bitmap_andnot(vdev->valid_ioctls, valid_ioctls, vdev->valid_ioctls,
713			BASE_VIDIOC_PRIVATE);
714}
715
716/**
717 *	__video_register_device - register video4linux devices
718 *	@vdev: video device structure we want to register
719 *	@type: type of device to register
720 *	@nr:   which device node number (0 == /dev/video0, 1 == /dev/video1, ...
721 *             -1 == first free)
722 *	@warn_if_nr_in_use: warn if the desired device node number
723 *	       was already in use and another number was chosen instead.
724 *	@owner: module that owns the video device node
725 *
726 *	The registration code assigns minor numbers and device node numbers
727 *	based on the requested type and registers the new device node with
728 *	the kernel.
729 *
730 *	This function assumes that struct video_device was zeroed when it
731 *	was allocated and does not contain any stale date.
732 *
733 *	An error is returned if no free minor or device node number could be
734 *	found, or if the registration of the device node failed.
735 *
736 *	Zero is returned on success.
737 *
738 *	Valid types are
739 *
740 *	%VFL_TYPE_GRABBER - A frame grabber
741 *
742 *	%VFL_TYPE_VBI - Vertical blank data (undecoded)
743 *
744 *	%VFL_TYPE_RADIO - A radio card
745 *
746 *	%VFL_TYPE_SUBDEV - A subdevice
747 *
748 *	%VFL_TYPE_SDR - Software Defined Radio
749 */
750int __video_register_device(struct video_device *vdev, int type, int nr,
751		int warn_if_nr_in_use, struct module *owner)
752{
753	int i = 0;
754	int ret;
755	int minor_offset = 0;
756	int minor_cnt = VIDEO_NUM_DEVICES;
757	const char *name_base;
758
759	/* A minor value of -1 marks this video device as never
760	   having been registered */
761	vdev->minor = -1;
762
763	/* the release callback MUST be present */
764	if (WARN_ON(!vdev->release))
765		return -EINVAL;
766	/* the v4l2_dev pointer MUST be present */
767	if (WARN_ON(!vdev->v4l2_dev))
768		return -EINVAL;
769
770	/* v4l2_fh support */
771	spin_lock_init(&vdev->fh_lock);
772	INIT_LIST_HEAD(&vdev->fh_list);
773
774	/* Part 1: check device type */
775	switch (type) {
776	case VFL_TYPE_GRABBER:
777		name_base = "video";
778		break;
779	case VFL_TYPE_VBI:
780		name_base = "vbi";
781		break;
782	case VFL_TYPE_RADIO:
783		name_base = "radio";
784		break;
785	case VFL_TYPE_SUBDEV:
786		name_base = "v4l-subdev";
787		break;
788	case VFL_TYPE_SDR:
789		/* Use device name 'swradio' because 'sdr' was already taken. */
790		name_base = "swradio";
791		break;
792	default:
793		printk(KERN_ERR "%s called with unknown type: %d\n",
794		       __func__, type);
795		return -EINVAL;
796	}
797
798	vdev->vfl_type = type;
799	vdev->cdev = NULL;
800	if (vdev->dev_parent == NULL)
801		vdev->dev_parent = vdev->v4l2_dev->dev;
802	if (vdev->ctrl_handler == NULL)
803		vdev->ctrl_handler = vdev->v4l2_dev->ctrl_handler;
804	/* If the prio state pointer is NULL, then use the v4l2_device
805	   prio state. */
806	if (vdev->prio == NULL)
807		vdev->prio = &vdev->v4l2_dev->prio;
808
809	/* Part 2: find a free minor, device node number and device index. */
810#ifdef CONFIG_VIDEO_FIXED_MINOR_RANGES
811	/* Keep the ranges for the first four types for historical
812	 * reasons.
813	 * Newer devices (not yet in place) should use the range
814	 * of 128-191 and just pick the first free minor there
815	 * (new style). */
816	switch (type) {
817	case VFL_TYPE_GRABBER:
818		minor_offset = 0;
819		minor_cnt = 64;
820		break;
821	case VFL_TYPE_RADIO:
822		minor_offset = 64;
823		minor_cnt = 64;
824		break;
825	case VFL_TYPE_VBI:
826		minor_offset = 224;
827		minor_cnt = 32;
828		break;
829	default:
830		minor_offset = 128;
831		minor_cnt = 64;
832		break;
833	}
834#endif
835
836	/* Pick a device node number */
837	mutex_lock(&videodev_lock);
838	nr = devnode_find(vdev, nr == -1 ? 0 : nr, minor_cnt);
839	if (nr == minor_cnt)
840		nr = devnode_find(vdev, 0, minor_cnt);
841	if (nr == minor_cnt) {
842		printk(KERN_ERR "could not get a free device node number\n");
843		mutex_unlock(&videodev_lock);
844		return -ENFILE;
845	}
846#ifdef CONFIG_VIDEO_FIXED_MINOR_RANGES
847	/* 1-on-1 mapping of device node number to minor number */
848	i = nr;
849#else
850	/* The device node number and minor numbers are independent, so
851	   we just find the first free minor number. */
852	for (i = 0; i < VIDEO_NUM_DEVICES; i++)
853		if (video_device[i] == NULL)
854			break;
855	if (i == VIDEO_NUM_DEVICES) {
856		mutex_unlock(&videodev_lock);
857		printk(KERN_ERR "could not get a free minor\n");
858		return -ENFILE;
859	}
860#endif
861	vdev->minor = i + minor_offset;
862	vdev->num = nr;
863	devnode_set(vdev);
864
865	/* Should not happen since we thought this minor was free */
866	WARN_ON(video_device[vdev->minor] != NULL);
867	vdev->index = get_index(vdev);
868	video_device[vdev->minor] = vdev;
869	mutex_unlock(&videodev_lock);
870
871	if (vdev->ioctl_ops)
872		determine_valid_ioctls(vdev);
873
874	/* Part 3: Initialize the character device */
875	vdev->cdev = cdev_alloc();
876	if (vdev->cdev == NULL) {
877		ret = -ENOMEM;
878		goto cleanup;
879	}
880	vdev->cdev->ops = &v4l2_fops;
881	vdev->cdev->owner = owner;
882	ret = cdev_add(vdev->cdev, MKDEV(VIDEO_MAJOR, vdev->minor), 1);
883	if (ret < 0) {
884		printk(KERN_ERR "%s: cdev_add failed\n", __func__);
885		kfree(vdev->cdev);
886		vdev->cdev = NULL;
887		goto cleanup;
888	}
889
890	/* Part 4: register the device with sysfs */
891	vdev->dev.class = &video_class;
892	vdev->dev.devt = MKDEV(VIDEO_MAJOR, vdev->minor);
893	vdev->dev.parent = vdev->dev_parent;
894	dev_set_name(&vdev->dev, "%s%d", name_base, vdev->num);
895	ret = device_register(&vdev->dev);
896	if (ret < 0) {
897		printk(KERN_ERR "%s: device_register failed\n", __func__);
898		goto cleanup;
899	}
900	/* Register the release callback that will be called when the last
901	   reference to the device goes away. */
902	vdev->dev.release = v4l2_device_release;
903
904	if (nr != -1 && nr != vdev->num && warn_if_nr_in_use)
905		printk(KERN_WARNING "%s: requested %s%d, got %s\n", __func__,
906			name_base, nr, video_device_node_name(vdev));
907
908	/* Increase v4l2_device refcount */
909	v4l2_device_get(vdev->v4l2_dev);
910
911#if defined(CONFIG_MEDIA_CONTROLLER)
912	/* Part 5: Register the entity. */
913	if (vdev->v4l2_dev->mdev &&
914	    vdev->vfl_type != VFL_TYPE_SUBDEV) {
915		vdev->entity.type = MEDIA_ENT_T_DEVNODE_V4L;
916		vdev->entity.name = vdev->name;
917		vdev->entity.info.dev.major = VIDEO_MAJOR;
918		vdev->entity.info.dev.minor = vdev->minor;
919		ret = media_device_register_entity(vdev->v4l2_dev->mdev,
920			&vdev->entity);
921		if (ret < 0)
922			printk(KERN_WARNING
923			       "%s: media_device_register_entity failed\n",
924			       __func__);
925	}
926#endif
927	/* Part 6: Activate this minor. The char device can now be used. */
928	set_bit(V4L2_FL_REGISTERED, &vdev->flags);
929
930	return 0;
931
932cleanup:
933	mutex_lock(&videodev_lock);
934	if (vdev->cdev)
935		cdev_del(vdev->cdev);
936	video_device[vdev->minor] = NULL;
937	devnode_clear(vdev);
938	mutex_unlock(&videodev_lock);
939	/* Mark this video device as never having been registered. */
940	vdev->minor = -1;
941	return ret;
942}
943EXPORT_SYMBOL(__video_register_device);
944
945/**
946 *	video_unregister_device - unregister a video4linux device
947 *	@vdev: the device to unregister
948 *
949 *	This unregisters the passed device. Future open calls will
950 *	be met with errors.
951 */
952void video_unregister_device(struct video_device *vdev)
953{
954	/* Check if vdev was ever registered at all */
955	if (!vdev || !video_is_registered(vdev))
956		return;
957
958	mutex_lock(&videodev_lock);
959	/* This must be in a critical section to prevent a race with v4l2_open.
960	 * Once this bit has been cleared video_get may never be called again.
961	 */
962	clear_bit(V4L2_FL_REGISTERED, &vdev->flags);
963	mutex_unlock(&videodev_lock);
964	device_unregister(&vdev->dev);
965}
966EXPORT_SYMBOL(video_unregister_device);
967
968/*
969 *	Initialise video for linux
970 */
971static int __init videodev_init(void)
972{
973	dev_t dev = MKDEV(VIDEO_MAJOR, 0);
974	int ret;
975
976	printk(KERN_INFO "Linux video capture interface: v2.00\n");
977	ret = register_chrdev_region(dev, VIDEO_NUM_DEVICES, VIDEO_NAME);
978	if (ret < 0) {
979		printk(KERN_WARNING "videodev: unable to get major %d\n",
980				VIDEO_MAJOR);
981		return ret;
982	}
983
984	ret = class_register(&video_class);
985	if (ret < 0) {
986		unregister_chrdev_region(dev, VIDEO_NUM_DEVICES);
987		printk(KERN_WARNING "video_dev: class_register failed\n");
988		return -EIO;
989	}
990
991	return 0;
992}
993
994static void __exit videodev_exit(void)
995{
996	dev_t dev = MKDEV(VIDEO_MAJOR, 0);
997
998	class_unregister(&video_class);
999	unregister_chrdev_region(dev, VIDEO_NUM_DEVICES);
1000}
1001
1002subsys_initcall(videodev_init);
1003module_exit(videodev_exit)
1004
1005MODULE_AUTHOR("Alan Cox, Mauro Carvalho Chehab <mchehab@infradead.org>");
1006MODULE_DESCRIPTION("Device registrar for Video4Linux drivers v2");
1007MODULE_LICENSE("GPL");
1008MODULE_ALIAS_CHARDEV_MAJOR(VIDEO_MAJOR);
1009