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 
41 static 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 }
48 static DEVICE_ATTR_RO(index);
49 
50 static ssize_t 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->debug);
56 }
57 
58 static ssize_t 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->debug = value;
70 	return len;
71 }
72 static DEVICE_ATTR_RW(debug);
73 
74 static 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 }
81 static DEVICE_ATTR_RO(name);
82 
83 static struct attribute *video_device_attrs[] = {
84 	&dev_attr_name.attr,
85 	&dev_attr_debug.attr,
86 	&dev_attr_index.attr,
87 	NULL,
88 };
89 ATTRIBUTE_GROUPS(video_device);
90 
91 /*
92  *	Active devices
93  */
94 static struct video_device *video_device[VIDEO_NUM_DEVICES];
95 static DEFINE_MUTEX(videodev_lock);
96 static 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. */
105 static 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. */
116 static 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 */
123 static 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 */
129 static 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> */
135 static 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 
140 struct video_device *video_device_alloc(void)
141 {
142 	return kzalloc(sizeof(struct video_device), GFP_KERNEL);
143 }
144 EXPORT_SYMBOL(video_device_alloc);
145 
146 void video_device_release(struct video_device *vdev)
147 {
148 	kfree(vdev);
149 }
150 EXPORT_SYMBOL(video_device_release);
151 
152 void video_device_release_empty(struct video_device *vdev)
153 {
154 	/* Do nothing */
155 	/* Only valid when the video_device struct is a static. */
156 }
157 EXPORT_SYMBOL(video_device_release_empty);
158 
159 static inline void video_get(struct video_device *vdev)
160 {
161 	get_device(&vdev->dev);
162 }
163 
164 static 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. */
170 static 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 
222 static struct class video_class = {
223 	.name = VIDEO_NAME,
224 	.dev_groups = video_device_groups,
225 };
226 
227 struct video_device *video_devdata(struct file *file)
228 {
229 	return video_device[iminor(file_inode(file))];
230 }
231 EXPORT_SYMBOL(video_devdata);
232 
233 
234 /* Priority handling */
235 
236 static 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 
243 void v4l2_prio_init(struct v4l2_prio_state *global)
244 {
245 	memset(global, 0, sizeof(*global));
246 }
247 EXPORT_SYMBOL(v4l2_prio_init);
248 
249 int 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 }
263 EXPORT_SYMBOL(v4l2_prio_change);
264 
265 void v4l2_prio_open(struct v4l2_prio_state *global, enum v4l2_priority *local)
266 {
267 	v4l2_prio_change(global, local, V4L2_PRIORITY_DEFAULT);
268 }
269 EXPORT_SYMBOL(v4l2_prio_open);
270 
271 void 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 }
276 EXPORT_SYMBOL(v4l2_prio_close);
277 
278 enum 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 }
288 EXPORT_SYMBOL(v4l2_prio_max);
289 
290 int v4l2_prio_check(struct v4l2_prio_state *global, enum v4l2_priority local)
291 {
292 	return (local < v4l2_prio_max(global)) ? -EBUSY : 0;
293 }
294 EXPORT_SYMBOL(v4l2_prio_check);
295 
296 
297 static 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->debug)
308 		printk(KERN_DEBUG "%s: read: %zd (%d)\n",
309 			video_device_node_name(vdev), sz, ret);
310 	return ret;
311 }
312 
313 static ssize_t v4l2_write(struct file *filp, const char __user *buf,
314 		size_t sz, loff_t *off)
315 {
316 	struct video_device *vdev = video_devdata(filp);
317 	int ret = -ENODEV;
318 
319 	if (!vdev->fops->write)
320 		return -EINVAL;
321 	if (video_is_registered(vdev))
322 		ret = vdev->fops->write(filp, buf, sz, off);
323 	if (vdev->debug)
324 		printk(KERN_DEBUG "%s: write: %zd (%d)\n",
325 			video_device_node_name(vdev), sz, ret);
326 	return ret;
327 }
328 
329 static unsigned int v4l2_poll(struct file *filp, struct poll_table_struct *poll)
330 {
331 	struct video_device *vdev = video_devdata(filp);
332 	unsigned int res = POLLERR | POLLHUP;
333 
334 	if (!vdev->fops->poll)
335 		return DEFAULT_POLLMASK;
336 	if (video_is_registered(vdev))
337 		res = vdev->fops->poll(filp, poll);
338 	if (vdev->debug > 2)
339 		printk(KERN_DEBUG "%s: poll: %08x\n",
340 			video_device_node_name(vdev), res);
341 	return res;
342 }
343 
344 static long v4l2_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
345 {
346 	struct video_device *vdev = video_devdata(filp);
347 	int ret = -ENODEV;
348 
349 	if (vdev->fops->unlocked_ioctl) {
350 		struct mutex *lock = v4l2_ioctl_get_lock(vdev, cmd);
351 
352 		if (lock && mutex_lock_interruptible(lock))
353 			return -ERESTARTSYS;
354 		if (video_is_registered(vdev))
355 			ret = vdev->fops->unlocked_ioctl(filp, cmd, arg);
356 		if (lock)
357 			mutex_unlock(lock);
358 	} else if (vdev->fops->ioctl) {
359 		/* This code path is a replacement for the BKL. It is a major
360 		 * hack but it will have to do for those drivers that are not
361 		 * yet converted to use unlocked_ioctl.
362 		 *
363 		 * All drivers implement struct v4l2_device, so we use the
364 		 * lock defined there to serialize the ioctls.
365 		 *
366 		 * However, if the driver sleeps, then it blocks all ioctls
367 		 * since the lock is still held. This is very common for
368 		 * VIDIOC_DQBUF since that normally waits for a frame to arrive.
369 		 * As a result any other ioctl calls will proceed very, very
370 		 * slowly since each call will have to wait for the VIDIOC_QBUF
371 		 * to finish. Things that should take 0.01s may now take 10-20
372 		 * seconds.
373 		 *
374 		 * The workaround is to *not* take the lock for VIDIOC_DQBUF.
375 		 * This actually works OK for videobuf-based drivers, since
376 		 * videobuf will take its own internal lock.
377 		 */
378 		struct mutex *m = &vdev->v4l2_dev->ioctl_lock;
379 
380 		if (cmd != VIDIOC_DQBUF && mutex_lock_interruptible(m))
381 			return -ERESTARTSYS;
382 		if (video_is_registered(vdev))
383 			ret = vdev->fops->ioctl(filp, cmd, arg);
384 		if (cmd != VIDIOC_DQBUF)
385 			mutex_unlock(m);
386 	} else
387 		ret = -ENOTTY;
388 
389 	return ret;
390 }
391 
392 #ifdef CONFIG_MMU
393 #define v4l2_get_unmapped_area NULL
394 #else
395 static unsigned long v4l2_get_unmapped_area(struct file *filp,
396 		unsigned long addr, unsigned long len, unsigned long pgoff,
397 		unsigned long flags)
398 {
399 	struct video_device *vdev = video_devdata(filp);
400 	int ret;
401 
402 	if (!vdev->fops->get_unmapped_area)
403 		return -ENOSYS;
404 	if (!video_is_registered(vdev))
405 		return -ENODEV;
406 	ret = vdev->fops->get_unmapped_area(filp, addr, len, pgoff, flags);
407 	if (vdev->debug)
408 		printk(KERN_DEBUG "%s: get_unmapped_area (%d)\n",
409 			video_device_node_name(vdev), ret);
410 	return ret;
411 }
412 #endif
413 
414 static int v4l2_mmap(struct file *filp, struct vm_area_struct *vm)
415 {
416 	struct video_device *vdev = video_devdata(filp);
417 	int ret = -ENODEV;
418 
419 	if (!vdev->fops->mmap)
420 		return -ENODEV;
421 	if (video_is_registered(vdev))
422 		ret = vdev->fops->mmap(filp, vm);
423 	if (vdev->debug)
424 		printk(KERN_DEBUG "%s: mmap (%d)\n",
425 			video_device_node_name(vdev), ret);
426 	return ret;
427 }
428 
429 /* Override for the open function */
430 static int v4l2_open(struct inode *inode, struct file *filp)
431 {
432 	struct video_device *vdev;
433 	int ret = 0;
434 
435 	/* Check if the video device is available */
436 	mutex_lock(&videodev_lock);
437 	vdev = video_devdata(filp);
438 	/* return ENODEV if the video device has already been removed. */
439 	if (vdev == NULL || !video_is_registered(vdev)) {
440 		mutex_unlock(&videodev_lock);
441 		return -ENODEV;
442 	}
443 	/* and increase the device refcount */
444 	video_get(vdev);
445 	mutex_unlock(&videodev_lock);
446 	if (vdev->fops->open) {
447 		if (video_is_registered(vdev))
448 			ret = vdev->fops->open(filp);
449 		else
450 			ret = -ENODEV;
451 	}
452 
453 	if (vdev->debug)
454 		printk(KERN_DEBUG "%s: open (%d)\n",
455 			video_device_node_name(vdev), ret);
456 	/* decrease the refcount in case of an error */
457 	if (ret)
458 		video_put(vdev);
459 	return ret;
460 }
461 
462 /* Override for the release function */
463 static int v4l2_release(struct inode *inode, struct file *filp)
464 {
465 	struct video_device *vdev = video_devdata(filp);
466 	int ret = 0;
467 
468 	if (vdev->fops->release)
469 		ret = vdev->fops->release(filp);
470 	if (vdev->debug)
471 		printk(KERN_DEBUG "%s: release\n",
472 			video_device_node_name(vdev));
473 
474 	/* decrease the refcount unconditionally since the release()
475 	   return value is ignored. */
476 	video_put(vdev);
477 	return ret;
478 }
479 
480 static const struct file_operations v4l2_fops = {
481 	.owner = THIS_MODULE,
482 	.read = v4l2_read,
483 	.write = v4l2_write,
484 	.open = v4l2_open,
485 	.get_unmapped_area = v4l2_get_unmapped_area,
486 	.mmap = v4l2_mmap,
487 	.unlocked_ioctl = v4l2_ioctl,
488 #ifdef CONFIG_COMPAT
489 	.compat_ioctl = v4l2_compat_ioctl32,
490 #endif
491 	.release = v4l2_release,
492 	.poll = v4l2_poll,
493 	.llseek = no_llseek,
494 };
495 
496 /**
497  * get_index - assign stream index number based on v4l2_dev
498  * @vdev: video_device to assign index number to, vdev->v4l2_dev should be assigned
499  *
500  * Note that when this is called the new device has not yet been registered
501  * in the video_device array, but it was able to obtain a minor number.
502  *
503  * This means that we can always obtain a free stream index number since
504  * the worst case scenario is that there are VIDEO_NUM_DEVICES - 1 slots in
505  * use of the video_device array.
506  *
507  * Returns a free index number.
508  */
509 static int get_index(struct video_device *vdev)
510 {
511 	/* This can be static since this function is called with the global
512 	   videodev_lock held. */
513 	static DECLARE_BITMAP(used, VIDEO_NUM_DEVICES);
514 	int i;
515 
516 	bitmap_zero(used, VIDEO_NUM_DEVICES);
517 
518 	for (i = 0; i < VIDEO_NUM_DEVICES; i++) {
519 		if (video_device[i] != NULL &&
520 		    video_device[i]->v4l2_dev == vdev->v4l2_dev) {
521 			set_bit(video_device[i]->index, used);
522 		}
523 	}
524 
525 	return find_first_zero_bit(used, VIDEO_NUM_DEVICES);
526 }
527 
528 #define SET_VALID_IOCTL(ops, cmd, op)			\
529 	if (ops->op)					\
530 		set_bit(_IOC_NR(cmd), valid_ioctls)
531 
532 /* This determines which ioctls are actually implemented in the driver.
533    It's a one-time thing which simplifies video_ioctl2 as it can just do
534    a bit test.
535 
536    Note that drivers can override this by setting bits to 1 in
537    vdev->valid_ioctls. If an ioctl is marked as 1 when this function is
538    called, then that ioctl will actually be marked as unimplemented.
539 
540    It does that by first setting up the local valid_ioctls bitmap, and
541    at the end do a:
542 
543    vdev->valid_ioctls = valid_ioctls & ~(vdev->valid_ioctls)
544  */
545 static void determine_valid_ioctls(struct video_device *vdev)
546 {
547 	DECLARE_BITMAP(valid_ioctls, BASE_VIDIOC_PRIVATE);
548 	const struct v4l2_ioctl_ops *ops = vdev->ioctl_ops;
549 	bool is_vid = vdev->vfl_type == VFL_TYPE_GRABBER;
550 	bool is_vbi = vdev->vfl_type == VFL_TYPE_VBI;
551 	bool is_radio = vdev->vfl_type == VFL_TYPE_RADIO;
552 	bool is_sdr = vdev->vfl_type == VFL_TYPE_SDR;
553 	bool is_rx = vdev->vfl_dir != VFL_DIR_TX;
554 	bool is_tx = vdev->vfl_dir != VFL_DIR_RX;
555 
556 	bitmap_zero(valid_ioctls, BASE_VIDIOC_PRIVATE);
557 
558 	/* vfl_type and vfl_dir independent ioctls */
559 
560 	SET_VALID_IOCTL(ops, VIDIOC_QUERYCAP, vidioc_querycap);
561 	if (ops->vidioc_g_priority)
562 		set_bit(_IOC_NR(VIDIOC_G_PRIORITY), valid_ioctls);
563 	if (ops->vidioc_s_priority)
564 		set_bit(_IOC_NR(VIDIOC_S_PRIORITY), valid_ioctls);
565 	/* Note: the control handler can also be passed through the filehandle,
566 	   and that can't be tested here. If the bit for these control ioctls
567 	   is set, then the ioctl is valid. But if it is 0, then it can still
568 	   be valid if the filehandle passed the control handler. */
569 	if (vdev->ctrl_handler || ops->vidioc_queryctrl)
570 		set_bit(_IOC_NR(VIDIOC_QUERYCTRL), valid_ioctls);
571 	if (vdev->ctrl_handler || ops->vidioc_query_ext_ctrl)
572 		set_bit(_IOC_NR(VIDIOC_QUERY_EXT_CTRL), valid_ioctls);
573 	if (vdev->ctrl_handler || ops->vidioc_g_ctrl || ops->vidioc_g_ext_ctrls)
574 		set_bit(_IOC_NR(VIDIOC_G_CTRL), valid_ioctls);
575 	if (vdev->ctrl_handler || ops->vidioc_s_ctrl || ops->vidioc_s_ext_ctrls)
576 		set_bit(_IOC_NR(VIDIOC_S_CTRL), valid_ioctls);
577 	if (vdev->ctrl_handler || ops->vidioc_g_ext_ctrls)
578 		set_bit(_IOC_NR(VIDIOC_G_EXT_CTRLS), valid_ioctls);
579 	if (vdev->ctrl_handler || ops->vidioc_s_ext_ctrls)
580 		set_bit(_IOC_NR(VIDIOC_S_EXT_CTRLS), valid_ioctls);
581 	if (vdev->ctrl_handler || ops->vidioc_try_ext_ctrls)
582 		set_bit(_IOC_NR(VIDIOC_TRY_EXT_CTRLS), valid_ioctls);
583 	if (vdev->ctrl_handler || ops->vidioc_querymenu)
584 		set_bit(_IOC_NR(VIDIOC_QUERYMENU), valid_ioctls);
585 	SET_VALID_IOCTL(ops, VIDIOC_G_FREQUENCY, vidioc_g_frequency);
586 	SET_VALID_IOCTL(ops, VIDIOC_S_FREQUENCY, vidioc_s_frequency);
587 	SET_VALID_IOCTL(ops, VIDIOC_LOG_STATUS, vidioc_log_status);
588 #ifdef CONFIG_VIDEO_ADV_DEBUG
589 	set_bit(_IOC_NR(VIDIOC_DBG_G_CHIP_INFO), valid_ioctls);
590 	set_bit(_IOC_NR(VIDIOC_DBG_G_REGISTER), valid_ioctls);
591 	set_bit(_IOC_NR(VIDIOC_DBG_S_REGISTER), valid_ioctls);
592 #endif
593 	/* yes, really vidioc_subscribe_event */
594 	SET_VALID_IOCTL(ops, VIDIOC_DQEVENT, vidioc_subscribe_event);
595 	SET_VALID_IOCTL(ops, VIDIOC_SUBSCRIBE_EVENT, vidioc_subscribe_event);
596 	SET_VALID_IOCTL(ops, VIDIOC_UNSUBSCRIBE_EVENT, vidioc_unsubscribe_event);
597 	if (ops->vidioc_enum_freq_bands || ops->vidioc_g_tuner || ops->vidioc_g_modulator)
598 		set_bit(_IOC_NR(VIDIOC_ENUM_FREQ_BANDS), valid_ioctls);
599 
600 	if (is_vid) {
601 		/* video specific ioctls */
602 		if ((is_rx && (ops->vidioc_enum_fmt_vid_cap ||
603 			       ops->vidioc_enum_fmt_vid_cap_mplane ||
604 			       ops->vidioc_enum_fmt_vid_overlay)) ||
605 		    (is_tx && (ops->vidioc_enum_fmt_vid_out ||
606 			       ops->vidioc_enum_fmt_vid_out_mplane)))
607 			set_bit(_IOC_NR(VIDIOC_ENUM_FMT), valid_ioctls);
608 		if ((is_rx && (ops->vidioc_g_fmt_vid_cap ||
609 			       ops->vidioc_g_fmt_vid_cap_mplane ||
610 			       ops->vidioc_g_fmt_vid_overlay)) ||
611 		    (is_tx && (ops->vidioc_g_fmt_vid_out ||
612 			       ops->vidioc_g_fmt_vid_out_mplane ||
613 			       ops->vidioc_g_fmt_vid_out_overlay)))
614 			 set_bit(_IOC_NR(VIDIOC_G_FMT), valid_ioctls);
615 		if ((is_rx && (ops->vidioc_s_fmt_vid_cap ||
616 			       ops->vidioc_s_fmt_vid_cap_mplane ||
617 			       ops->vidioc_s_fmt_vid_overlay)) ||
618 		    (is_tx && (ops->vidioc_s_fmt_vid_out ||
619 			       ops->vidioc_s_fmt_vid_out_mplane ||
620 			       ops->vidioc_s_fmt_vid_out_overlay)))
621 			 set_bit(_IOC_NR(VIDIOC_S_FMT), valid_ioctls);
622 		if ((is_rx && (ops->vidioc_try_fmt_vid_cap ||
623 			       ops->vidioc_try_fmt_vid_cap_mplane ||
624 			       ops->vidioc_try_fmt_vid_overlay)) ||
625 		    (is_tx && (ops->vidioc_try_fmt_vid_out ||
626 			       ops->vidioc_try_fmt_vid_out_mplane ||
627 			       ops->vidioc_try_fmt_vid_out_overlay)))
628 			 set_bit(_IOC_NR(VIDIOC_TRY_FMT), valid_ioctls);
629 		SET_VALID_IOCTL(ops, VIDIOC_OVERLAY, vidioc_overlay);
630 		SET_VALID_IOCTL(ops, VIDIOC_G_FBUF, vidioc_g_fbuf);
631 		SET_VALID_IOCTL(ops, VIDIOC_S_FBUF, vidioc_s_fbuf);
632 		SET_VALID_IOCTL(ops, VIDIOC_G_JPEGCOMP, vidioc_g_jpegcomp);
633 		SET_VALID_IOCTL(ops, VIDIOC_S_JPEGCOMP, vidioc_s_jpegcomp);
634 		SET_VALID_IOCTL(ops, VIDIOC_G_ENC_INDEX, vidioc_g_enc_index);
635 		SET_VALID_IOCTL(ops, VIDIOC_ENCODER_CMD, vidioc_encoder_cmd);
636 		SET_VALID_IOCTL(ops, VIDIOC_TRY_ENCODER_CMD, vidioc_try_encoder_cmd);
637 		SET_VALID_IOCTL(ops, VIDIOC_DECODER_CMD, vidioc_decoder_cmd);
638 		SET_VALID_IOCTL(ops, VIDIOC_TRY_DECODER_CMD, vidioc_try_decoder_cmd);
639 		SET_VALID_IOCTL(ops, VIDIOC_ENUM_FRAMESIZES, vidioc_enum_framesizes);
640 		SET_VALID_IOCTL(ops, VIDIOC_ENUM_FRAMEINTERVALS, vidioc_enum_frameintervals);
641 	} else if (is_vbi) {
642 		/* vbi specific ioctls */
643 		if ((is_rx && (ops->vidioc_g_fmt_vbi_cap ||
644 			       ops->vidioc_g_fmt_sliced_vbi_cap)) ||
645 		    (is_tx && (ops->vidioc_g_fmt_vbi_out ||
646 			       ops->vidioc_g_fmt_sliced_vbi_out)))
647 			set_bit(_IOC_NR(VIDIOC_G_FMT), valid_ioctls);
648 		if ((is_rx && (ops->vidioc_s_fmt_vbi_cap ||
649 			       ops->vidioc_s_fmt_sliced_vbi_cap)) ||
650 		    (is_tx && (ops->vidioc_s_fmt_vbi_out ||
651 			       ops->vidioc_s_fmt_sliced_vbi_out)))
652 			set_bit(_IOC_NR(VIDIOC_S_FMT), valid_ioctls);
653 		if ((is_rx && (ops->vidioc_try_fmt_vbi_cap ||
654 			       ops->vidioc_try_fmt_sliced_vbi_cap)) ||
655 		    (is_tx && (ops->vidioc_try_fmt_vbi_out ||
656 			       ops->vidioc_try_fmt_sliced_vbi_out)))
657 			set_bit(_IOC_NR(VIDIOC_TRY_FMT), valid_ioctls);
658 		SET_VALID_IOCTL(ops, VIDIOC_G_SLICED_VBI_CAP, vidioc_g_sliced_vbi_cap);
659 	} else if (is_sdr) {
660 		/* SDR specific ioctls */
661 		if (ops->vidioc_enum_fmt_sdr_cap)
662 			set_bit(_IOC_NR(VIDIOC_ENUM_FMT), valid_ioctls);
663 		if (ops->vidioc_g_fmt_sdr_cap)
664 			set_bit(_IOC_NR(VIDIOC_G_FMT), valid_ioctls);
665 		if (ops->vidioc_s_fmt_sdr_cap)
666 			set_bit(_IOC_NR(VIDIOC_S_FMT), valid_ioctls);
667 		if (ops->vidioc_try_fmt_sdr_cap)
668 			set_bit(_IOC_NR(VIDIOC_TRY_FMT), valid_ioctls);
669 	}
670 
671 	if (is_vid || is_vbi || is_sdr) {
672 		/* ioctls valid for video, vbi or sdr */
673 		SET_VALID_IOCTL(ops, VIDIOC_REQBUFS, vidioc_reqbufs);
674 		SET_VALID_IOCTL(ops, VIDIOC_QUERYBUF, vidioc_querybuf);
675 		SET_VALID_IOCTL(ops, VIDIOC_QBUF, vidioc_qbuf);
676 		SET_VALID_IOCTL(ops, VIDIOC_EXPBUF, vidioc_expbuf);
677 		SET_VALID_IOCTL(ops, VIDIOC_DQBUF, vidioc_dqbuf);
678 		SET_VALID_IOCTL(ops, VIDIOC_CREATE_BUFS, vidioc_create_bufs);
679 		SET_VALID_IOCTL(ops, VIDIOC_PREPARE_BUF, vidioc_prepare_buf);
680 		SET_VALID_IOCTL(ops, VIDIOC_STREAMON, vidioc_streamon);
681 		SET_VALID_IOCTL(ops, VIDIOC_STREAMOFF, vidioc_streamoff);
682 	}
683 
684 	if (is_vid || is_vbi) {
685 		/* ioctls valid for video or vbi */
686 		if (ops->vidioc_s_std)
687 			set_bit(_IOC_NR(VIDIOC_ENUMSTD), valid_ioctls);
688 		SET_VALID_IOCTL(ops, VIDIOC_S_STD, vidioc_s_std);
689 		SET_VALID_IOCTL(ops, VIDIOC_G_STD, vidioc_g_std);
690 		if (is_rx) {
691 			SET_VALID_IOCTL(ops, VIDIOC_QUERYSTD, vidioc_querystd);
692 			SET_VALID_IOCTL(ops, VIDIOC_ENUMINPUT, vidioc_enum_input);
693 			SET_VALID_IOCTL(ops, VIDIOC_G_INPUT, vidioc_g_input);
694 			SET_VALID_IOCTL(ops, VIDIOC_S_INPUT, vidioc_s_input);
695 			SET_VALID_IOCTL(ops, VIDIOC_ENUMAUDIO, vidioc_enumaudio);
696 			SET_VALID_IOCTL(ops, VIDIOC_G_AUDIO, vidioc_g_audio);
697 			SET_VALID_IOCTL(ops, VIDIOC_S_AUDIO, vidioc_s_audio);
698 			SET_VALID_IOCTL(ops, VIDIOC_QUERY_DV_TIMINGS, vidioc_query_dv_timings);
699 			SET_VALID_IOCTL(ops, VIDIOC_S_EDID, vidioc_s_edid);
700 		}
701 		if (is_tx) {
702 			SET_VALID_IOCTL(ops, VIDIOC_ENUMOUTPUT, vidioc_enum_output);
703 			SET_VALID_IOCTL(ops, VIDIOC_G_OUTPUT, vidioc_g_output);
704 			SET_VALID_IOCTL(ops, VIDIOC_S_OUTPUT, vidioc_s_output);
705 			SET_VALID_IOCTL(ops, VIDIOC_ENUMAUDOUT, vidioc_enumaudout);
706 			SET_VALID_IOCTL(ops, VIDIOC_G_AUDOUT, vidioc_g_audout);
707 			SET_VALID_IOCTL(ops, VIDIOC_S_AUDOUT, vidioc_s_audout);
708 		}
709 		if (ops->vidioc_g_crop || ops->vidioc_g_selection)
710 			set_bit(_IOC_NR(VIDIOC_G_CROP), valid_ioctls);
711 		if (ops->vidioc_s_crop || ops->vidioc_s_selection)
712 			set_bit(_IOC_NR(VIDIOC_S_CROP), valid_ioctls);
713 		SET_VALID_IOCTL(ops, VIDIOC_G_SELECTION, vidioc_g_selection);
714 		SET_VALID_IOCTL(ops, VIDIOC_S_SELECTION, vidioc_s_selection);
715 		if (ops->vidioc_cropcap || ops->vidioc_g_selection)
716 			set_bit(_IOC_NR(VIDIOC_CROPCAP), valid_ioctls);
717 		if (ops->vidioc_g_parm || (vdev->vfl_type == VFL_TYPE_GRABBER &&
718 					ops->vidioc_g_std))
719 			set_bit(_IOC_NR(VIDIOC_G_PARM), valid_ioctls);
720 		SET_VALID_IOCTL(ops, VIDIOC_S_PARM, vidioc_s_parm);
721 		SET_VALID_IOCTL(ops, VIDIOC_S_DV_TIMINGS, vidioc_s_dv_timings);
722 		SET_VALID_IOCTL(ops, VIDIOC_G_DV_TIMINGS, vidioc_g_dv_timings);
723 		SET_VALID_IOCTL(ops, VIDIOC_ENUM_DV_TIMINGS, vidioc_enum_dv_timings);
724 		SET_VALID_IOCTL(ops, VIDIOC_DV_TIMINGS_CAP, vidioc_dv_timings_cap);
725 		SET_VALID_IOCTL(ops, VIDIOC_G_EDID, vidioc_g_edid);
726 	}
727 	if (is_tx && (is_radio || is_sdr)) {
728 		/* radio transmitter only ioctls */
729 		SET_VALID_IOCTL(ops, VIDIOC_G_MODULATOR, vidioc_g_modulator);
730 		SET_VALID_IOCTL(ops, VIDIOC_S_MODULATOR, vidioc_s_modulator);
731 	}
732 	if (is_rx) {
733 		/* receiver only ioctls */
734 		SET_VALID_IOCTL(ops, VIDIOC_G_TUNER, vidioc_g_tuner);
735 		SET_VALID_IOCTL(ops, VIDIOC_S_TUNER, vidioc_s_tuner);
736 		SET_VALID_IOCTL(ops, VIDIOC_S_HW_FREQ_SEEK, vidioc_s_hw_freq_seek);
737 	}
738 
739 	bitmap_andnot(vdev->valid_ioctls, valid_ioctls, vdev->valid_ioctls,
740 			BASE_VIDIOC_PRIVATE);
741 }
742 
743 /**
744  *	__video_register_device - register video4linux devices
745  *	@vdev: video device structure we want to register
746  *	@type: type of device to register
747  *	@nr:   which device node number (0 == /dev/video0, 1 == /dev/video1, ...
748  *             -1 == first free)
749  *	@warn_if_nr_in_use: warn if the desired device node number
750  *	       was already in use and another number was chosen instead.
751  *	@owner: module that owns the video device node
752  *
753  *	The registration code assigns minor numbers and device node numbers
754  *	based on the requested type and registers the new device node with
755  *	the kernel.
756  *
757  *	This function assumes that struct video_device was zeroed when it
758  *	was allocated and does not contain any stale date.
759  *
760  *	An error is returned if no free minor or device node number could be
761  *	found, or if the registration of the device node failed.
762  *
763  *	Zero is returned on success.
764  *
765  *	Valid types are
766  *
767  *	%VFL_TYPE_GRABBER - A frame grabber
768  *
769  *	%VFL_TYPE_VBI - Vertical blank data (undecoded)
770  *
771  *	%VFL_TYPE_RADIO - A radio card
772  *
773  *	%VFL_TYPE_SUBDEV - A subdevice
774  *
775  *	%VFL_TYPE_SDR - Software Defined Radio
776  */
777 int __video_register_device(struct video_device *vdev, int type, int nr,
778 		int warn_if_nr_in_use, struct module *owner)
779 {
780 	int i = 0;
781 	int ret;
782 	int minor_offset = 0;
783 	int minor_cnt = VIDEO_NUM_DEVICES;
784 	const char *name_base;
785 
786 	/* A minor value of -1 marks this video device as never
787 	   having been registered */
788 	vdev->minor = -1;
789 
790 	/* the release callback MUST be present */
791 	if (WARN_ON(!vdev->release))
792 		return -EINVAL;
793 	/* the v4l2_dev pointer MUST be present */
794 	if (WARN_ON(!vdev->v4l2_dev))
795 		return -EINVAL;
796 
797 	/* v4l2_fh support */
798 	spin_lock_init(&vdev->fh_lock);
799 	INIT_LIST_HEAD(&vdev->fh_list);
800 
801 	/* Part 1: check device type */
802 	switch (type) {
803 	case VFL_TYPE_GRABBER:
804 		name_base = "video";
805 		break;
806 	case VFL_TYPE_VBI:
807 		name_base = "vbi";
808 		break;
809 	case VFL_TYPE_RADIO:
810 		name_base = "radio";
811 		break;
812 	case VFL_TYPE_SUBDEV:
813 		name_base = "v4l-subdev";
814 		break;
815 	case VFL_TYPE_SDR:
816 		/* Use device name 'swradio' because 'sdr' was already taken. */
817 		name_base = "swradio";
818 		break;
819 	default:
820 		printk(KERN_ERR "%s called with unknown type: %d\n",
821 		       __func__, type);
822 		return -EINVAL;
823 	}
824 
825 	vdev->vfl_type = type;
826 	vdev->cdev = NULL;
827 	if (vdev->dev_parent == NULL)
828 		vdev->dev_parent = vdev->v4l2_dev->dev;
829 	if (vdev->ctrl_handler == NULL)
830 		vdev->ctrl_handler = vdev->v4l2_dev->ctrl_handler;
831 	/* If the prio state pointer is NULL, then use the v4l2_device
832 	   prio state. */
833 	if (vdev->prio == NULL)
834 		vdev->prio = &vdev->v4l2_dev->prio;
835 
836 	/* Part 2: find a free minor, device node number and device index. */
837 #ifdef CONFIG_VIDEO_FIXED_MINOR_RANGES
838 	/* Keep the ranges for the first four types for historical
839 	 * reasons.
840 	 * Newer devices (not yet in place) should use the range
841 	 * of 128-191 and just pick the first free minor there
842 	 * (new style). */
843 	switch (type) {
844 	case VFL_TYPE_GRABBER:
845 		minor_offset = 0;
846 		minor_cnt = 64;
847 		break;
848 	case VFL_TYPE_RADIO:
849 		minor_offset = 64;
850 		minor_cnt = 64;
851 		break;
852 	case VFL_TYPE_VBI:
853 		minor_offset = 224;
854 		minor_cnt = 32;
855 		break;
856 	default:
857 		minor_offset = 128;
858 		minor_cnt = 64;
859 		break;
860 	}
861 #endif
862 
863 	/* Pick a device node number */
864 	mutex_lock(&videodev_lock);
865 	nr = devnode_find(vdev, nr == -1 ? 0 : nr, minor_cnt);
866 	if (nr == minor_cnt)
867 		nr = devnode_find(vdev, 0, minor_cnt);
868 	if (nr == minor_cnt) {
869 		printk(KERN_ERR "could not get a free device node number\n");
870 		mutex_unlock(&videodev_lock);
871 		return -ENFILE;
872 	}
873 #ifdef CONFIG_VIDEO_FIXED_MINOR_RANGES
874 	/* 1-on-1 mapping of device node number to minor number */
875 	i = nr;
876 #else
877 	/* The device node number and minor numbers are independent, so
878 	   we just find the first free minor number. */
879 	for (i = 0; i < VIDEO_NUM_DEVICES; i++)
880 		if (video_device[i] == NULL)
881 			break;
882 	if (i == VIDEO_NUM_DEVICES) {
883 		mutex_unlock(&videodev_lock);
884 		printk(KERN_ERR "could not get a free minor\n");
885 		return -ENFILE;
886 	}
887 #endif
888 	vdev->minor = i + minor_offset;
889 	vdev->num = nr;
890 	devnode_set(vdev);
891 
892 	/* Should not happen since we thought this minor was free */
893 	WARN_ON(video_device[vdev->minor] != NULL);
894 	vdev->index = get_index(vdev);
895 	video_device[vdev->minor] = vdev;
896 	mutex_unlock(&videodev_lock);
897 
898 	if (vdev->ioctl_ops)
899 		determine_valid_ioctls(vdev);
900 
901 	/* Part 3: Initialize the character device */
902 	vdev->cdev = cdev_alloc();
903 	if (vdev->cdev == NULL) {
904 		ret = -ENOMEM;
905 		goto cleanup;
906 	}
907 	vdev->cdev->ops = &v4l2_fops;
908 	vdev->cdev->owner = owner;
909 	ret = cdev_add(vdev->cdev, MKDEV(VIDEO_MAJOR, vdev->minor), 1);
910 	if (ret < 0) {
911 		printk(KERN_ERR "%s: cdev_add failed\n", __func__);
912 		kfree(vdev->cdev);
913 		vdev->cdev = NULL;
914 		goto cleanup;
915 	}
916 
917 	/* Part 4: register the device with sysfs */
918 	vdev->dev.class = &video_class;
919 	vdev->dev.devt = MKDEV(VIDEO_MAJOR, vdev->minor);
920 	vdev->dev.parent = vdev->dev_parent;
921 	dev_set_name(&vdev->dev, "%s%d", name_base, vdev->num);
922 	ret = device_register(&vdev->dev);
923 	if (ret < 0) {
924 		printk(KERN_ERR "%s: device_register failed\n", __func__);
925 		goto cleanup;
926 	}
927 	/* Register the release callback that will be called when the last
928 	   reference to the device goes away. */
929 	vdev->dev.release = v4l2_device_release;
930 
931 	if (nr != -1 && nr != vdev->num && warn_if_nr_in_use)
932 		printk(KERN_WARNING "%s: requested %s%d, got %s\n", __func__,
933 			name_base, nr, video_device_node_name(vdev));
934 
935 	/* Increase v4l2_device refcount */
936 	v4l2_device_get(vdev->v4l2_dev);
937 
938 #if defined(CONFIG_MEDIA_CONTROLLER)
939 	/* Part 5: Register the entity. */
940 	if (vdev->v4l2_dev->mdev &&
941 	    vdev->vfl_type != VFL_TYPE_SUBDEV) {
942 		vdev->entity.type = MEDIA_ENT_T_DEVNODE_V4L;
943 		vdev->entity.name = vdev->name;
944 		vdev->entity.info.v4l.major = VIDEO_MAJOR;
945 		vdev->entity.info.v4l.minor = vdev->minor;
946 		ret = media_device_register_entity(vdev->v4l2_dev->mdev,
947 			&vdev->entity);
948 		if (ret < 0)
949 			printk(KERN_WARNING
950 			       "%s: media_device_register_entity failed\n",
951 			       __func__);
952 	}
953 #endif
954 	/* Part 6: Activate this minor. The char device can now be used. */
955 	set_bit(V4L2_FL_REGISTERED, &vdev->flags);
956 
957 	return 0;
958 
959 cleanup:
960 	mutex_lock(&videodev_lock);
961 	if (vdev->cdev)
962 		cdev_del(vdev->cdev);
963 	video_device[vdev->minor] = NULL;
964 	devnode_clear(vdev);
965 	mutex_unlock(&videodev_lock);
966 	/* Mark this video device as never having been registered. */
967 	vdev->minor = -1;
968 	return ret;
969 }
970 EXPORT_SYMBOL(__video_register_device);
971 
972 /**
973  *	video_unregister_device - unregister a video4linux device
974  *	@vdev: the device to unregister
975  *
976  *	This unregisters the passed device. Future open calls will
977  *	be met with errors.
978  */
979 void video_unregister_device(struct video_device *vdev)
980 {
981 	/* Check if vdev was ever registered at all */
982 	if (!vdev || !video_is_registered(vdev))
983 		return;
984 
985 	mutex_lock(&videodev_lock);
986 	/* This must be in a critical section to prevent a race with v4l2_open.
987 	 * Once this bit has been cleared video_get may never be called again.
988 	 */
989 	clear_bit(V4L2_FL_REGISTERED, &vdev->flags);
990 	mutex_unlock(&videodev_lock);
991 	device_unregister(&vdev->dev);
992 }
993 EXPORT_SYMBOL(video_unregister_device);
994 
995 /*
996  *	Initialise video for linux
997  */
998 static int __init videodev_init(void)
999 {
1000 	dev_t dev = MKDEV(VIDEO_MAJOR, 0);
1001 	int ret;
1002 
1003 	printk(KERN_INFO "Linux video capture interface: v2.00\n");
1004 	ret = register_chrdev_region(dev, VIDEO_NUM_DEVICES, VIDEO_NAME);
1005 	if (ret < 0) {
1006 		printk(KERN_WARNING "videodev: unable to get major %d\n",
1007 				VIDEO_MAJOR);
1008 		return ret;
1009 	}
1010 
1011 	ret = class_register(&video_class);
1012 	if (ret < 0) {
1013 		unregister_chrdev_region(dev, VIDEO_NUM_DEVICES);
1014 		printk(KERN_WARNING "video_dev: class_register failed\n");
1015 		return -EIO;
1016 	}
1017 
1018 	return 0;
1019 }
1020 
1021 static void __exit videodev_exit(void)
1022 {
1023 	dev_t dev = MKDEV(VIDEO_MAJOR, 0);
1024 
1025 	class_unregister(&video_class);
1026 	unregister_chrdev_region(dev, VIDEO_NUM_DEVICES);
1027 }
1028 
1029 subsys_initcall(videodev_init);
1030 module_exit(videodev_exit)
1031 
1032 MODULE_AUTHOR("Alan Cox, Mauro Carvalho Chehab <mchehab@infradead.org>");
1033 MODULE_DESCRIPTION("Device registrar for Video4Linux drivers v2");
1034 MODULE_LICENSE("GPL");
1035 MODULE_ALIAS_CHARDEV_MAJOR(VIDEO_MAJOR);
1036 
1037 
1038 /*
1039  * Local variables:
1040  * c-basic-offset: 8
1041  * End:
1042  */
1043