Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
v4l2-dev.c
Go to the documentation of this file.
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, <[email protected]> (version 1)
13  * Mauro Carvalho Chehab <[email protected]> (version 2)
14  *
15  * Fixes: 20000516 Claudio Matsuoka <[email protected]>
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 show_index(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 
49 static ssize_t show_debug(struct device *cd,
50  struct device_attribute *attr, char *buf)
51 {
52  struct video_device *vdev = to_video_device(cd);
53 
54  return sprintf(buf, "%i\n", vdev->debug);
55 }
56 
57 static ssize_t set_debug(struct device *cd, struct device_attribute *attr,
58  const char *buf, size_t len)
59 {
60  struct video_device *vdev = to_video_device(cd);
61  int res = 0;
62  u16 value;
63 
64  res = kstrtou16(buf, 0, &value);
65  if (res)
66  return res;
67 
68  vdev->debug = value;
69  return len;
70 }
71 
72 static ssize_t show_name(struct device *cd,
73  struct device_attribute *attr, char *buf)
74 {
75  struct video_device *vdev = to_video_device(cd);
76 
77  return sprintf(buf, "%.*s\n", (int)sizeof(vdev->name), vdev->name);
78 }
79 
80 static struct device_attribute video_device_attrs[] = {
81  __ATTR(name, S_IRUGO, show_name, NULL),
82  __ATTR(debug, 0644, show_debug, set_debug),
83  __ATTR(index, S_IRUGO, show_index, NULL),
85 };
86 
87 /*
88  * Active devices
89  */
91 static DEFINE_MUTEX(videodev_lock);
92 static DECLARE_BITMAP(devnode_nums[VFL_TYPE_MAX], VIDEO_NUM_DEVICES);
93 
94 /* Device node utility functions */
95 
96 /* Note: these utility functions all assume that vfl_type is in the range
97  [0, VFL_TYPE_MAX-1]. */
98 
99 #ifdef CONFIG_VIDEO_FIXED_MINOR_RANGES
100 /* Return the bitmap corresponding to vfl_type. */
101 static inline unsigned long *devnode_bits(int vfl_type)
102 {
103  /* Any types not assigned to fixed minor ranges must be mapped to
104  one single bitmap for the purposes of finding a free node number
105  since all those unassigned types use the same minor range. */
106  int idx = (vfl_type > VFL_TYPE_RADIO) ? VFL_TYPE_MAX - 1 : vfl_type;
107 
108  return devnode_nums[idx];
109 }
110 #else
111 /* Return the bitmap corresponding to vfl_type. */
112 static inline unsigned long *devnode_bits(int vfl_type)
113 {
114  return devnode_nums[vfl_type];
115 }
116 #endif
117 
118 /* Mark device node number vdev->num as used */
119 static inline void devnode_set(struct video_device *vdev)
120 {
121  set_bit(vdev->num, devnode_bits(vdev->vfl_type));
122 }
123 
124 /* Mark device node number vdev->num as unused */
125 static inline void devnode_clear(struct video_device *vdev)
126 {
127  clear_bit(vdev->num, devnode_bits(vdev->vfl_type));
128 }
129 
130 /* Try to find a free device node number in the range [from, to> */
131 static inline int devnode_find(struct video_device *vdev, int from, int to)
132 {
133  return find_next_zero_bit(devnode_bits(vdev->vfl_type), to, from);
134 }
135 
136 struct video_device *video_device_alloc(void)
137 {
138  return kzalloc(sizeof(struct video_device), GFP_KERNEL);
139 }
141 
142 void video_device_release(struct video_device *vdev)
143 {
144  kfree(vdev);
145 }
147 
148 void video_device_release_empty(struct video_device *vdev)
149 {
150  /* Do nothing */
151  /* Only valid when the video_device struct is a static. */
152 }
154 
155 static inline void video_get(struct video_device *vdev)
156 {
157  get_device(&vdev->dev);
158 }
159 
160 static inline void video_put(struct video_device *vdev)
161 {
162  put_device(&vdev->dev);
163 }
164 
165 /* Called when the last user of the video device exits. */
166 static void v4l2_device_release(struct device *cd)
167 {
168  struct video_device *vdev = to_video_device(cd);
169  struct v4l2_device *v4l2_dev = vdev->v4l2_dev;
170 
171  mutex_lock(&videodev_lock);
172  if (WARN_ON(video_device[vdev->minor] != vdev)) {
173  /* should not happen */
174  mutex_unlock(&videodev_lock);
175  return;
176  }
177 
178  /* Free up this device for reuse */
179  video_device[vdev->minor] = NULL;
180 
181  /* Delete the cdev on this minor as well */
182  cdev_del(vdev->cdev);
183  /* Just in case some driver tries to access this from
184  the release() callback. */
185  vdev->cdev = NULL;
186 
187  /* Mark device node number as free */
188  devnode_clear(vdev);
189 
190  mutex_unlock(&videodev_lock);
191 
192 #if defined(CONFIG_MEDIA_CONTROLLER)
193  if (v4l2_dev && v4l2_dev->mdev &&
194  vdev->vfl_type != VFL_TYPE_SUBDEV)
195  media_device_unregister_entity(&vdev->entity);
196 #endif
197 
198  /* Do not call v4l2_device_put if there is no release callback set.
199  * Drivers that have no v4l2_device release callback might free the
200  * v4l2_dev instance in the video_device release callback below, so we
201  * must perform this check here.
202  *
203  * TODO: In the long run all drivers that use v4l2_device should use the
204  * v4l2_device release callback. This check will then be unnecessary.
205  */
206  if (v4l2_dev && v4l2_dev->release == NULL)
207  v4l2_dev = NULL;
208 
209  /* Release video_device and perform other
210  cleanups as needed. */
211  vdev->release(vdev);
212 
213  /* Decrease v4l2_device refcount */
214  if (v4l2_dev)
215  v4l2_device_put(v4l2_dev);
216 }
217 
218 static struct class video_class = {
219  .name = VIDEO_NAME,
220  .dev_attrs = video_device_attrs,
221 };
222 
223 struct video_device *video_devdata(struct file *file)
224 {
225  return video_device[iminor(file->f_path.dentry->d_inode)];
226 }
228 
229 
230 /* Priority handling */
231 
232 static inline bool prio_is_valid(enum v4l2_priority prio)
233 {
234  return prio == V4L2_PRIORITY_BACKGROUND ||
235  prio == V4L2_PRIORITY_INTERACTIVE ||
236  prio == V4L2_PRIORITY_RECORD;
237 }
238 
239 void v4l2_prio_init(struct v4l2_prio_state *global)
240 {
241  memset(global, 0, sizeof(*global));
242 }
244 
245 int v4l2_prio_change(struct v4l2_prio_state *global, enum v4l2_priority *local,
246  enum v4l2_priority new)
247 {
248  if (!prio_is_valid(new))
249  return -EINVAL;
250  if (*local == new)
251  return 0;
252 
253  atomic_inc(&global->prios[new]);
254  if (prio_is_valid(*local))
255  atomic_dec(&global->prios[*local]);
256  *local = new;
257  return 0;
258 }
260 
261 void v4l2_prio_open(struct v4l2_prio_state *global, enum v4l2_priority *local)
262 {
263  v4l2_prio_change(global, local, V4L2_PRIORITY_DEFAULT);
264 }
266 
267 void v4l2_prio_close(struct v4l2_prio_state *global, enum v4l2_priority local)
268 {
269  if (prio_is_valid(local))
270  atomic_dec(&global->prios[local]);
271 }
273 
275 {
276  if (atomic_read(&global->prios[V4L2_PRIORITY_RECORD]) > 0)
277  return V4L2_PRIORITY_RECORD;
278  if (atomic_read(&global->prios[V4L2_PRIORITY_INTERACTIVE]) > 0)
280  if (atomic_read(&global->prios[V4L2_PRIORITY_BACKGROUND]) > 0)
282  return V4L2_PRIORITY_UNSET;
283 }
285 
286 int v4l2_prio_check(struct v4l2_prio_state *global, enum v4l2_priority local)
287 {
288  return (local < v4l2_prio_max(global)) ? -EBUSY : 0;
289 }
291 
292 
293 static ssize_t v4l2_read(struct file *filp, char __user *buf,
294  size_t sz, loff_t *off)
295 {
296  struct video_device *vdev = video_devdata(filp);
297  int ret = -ENODEV;
298 
299  if (!vdev->fops->read)
300  return -EINVAL;
301  if (video_is_registered(vdev))
302  ret = vdev->fops->read(filp, buf, sz, off);
303  if (vdev->debug)
304  printk(KERN_DEBUG "%s: read: %zd (%d)\n",
305  video_device_node_name(vdev), sz, ret);
306  return ret;
307 }
308 
309 static ssize_t v4l2_write(struct file *filp, const char __user *buf,
310  size_t sz, loff_t *off)
311 {
312  struct video_device *vdev = video_devdata(filp);
313  int ret = -ENODEV;
314 
315  if (!vdev->fops->write)
316  return -EINVAL;
317  if (video_is_registered(vdev))
318  ret = vdev->fops->write(filp, buf, sz, off);
319  if (vdev->debug)
320  printk(KERN_DEBUG "%s: write: %zd (%d)\n",
321  video_device_node_name(vdev), sz, ret);
322  return ret;
323 }
324 
325 static unsigned int v4l2_poll(struct file *filp, struct poll_table_struct *poll)
326 {
327  struct video_device *vdev = video_devdata(filp);
328  unsigned int res = POLLERR | POLLHUP;
329 
330  if (!vdev->fops->poll)
331  return DEFAULT_POLLMASK;
332  if (video_is_registered(vdev))
333  res = vdev->fops->poll(filp, poll);
334  if (vdev->debug)
335  printk(KERN_DEBUG "%s: poll: %08x\n",
336  video_device_node_name(vdev), res);
337  return res;
338 }
339 
340 static long v4l2_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
341 {
342  struct video_device *vdev = video_devdata(filp);
343  int ret = -ENODEV;
344 
345  if (vdev->fops->unlocked_ioctl) {
346  struct mutex *lock = v4l2_ioctl_get_lock(vdev, cmd);
347 
348  if (lock && mutex_lock_interruptible(lock))
349  return -ERESTARTSYS;
350  if (video_is_registered(vdev))
351  ret = vdev->fops->unlocked_ioctl(filp, cmd, arg);
352  if (lock)
353  mutex_unlock(lock);
354  } else if (vdev->fops->ioctl) {
355  /* This code path is a replacement for the BKL. It is a major
356  * hack but it will have to do for those drivers that are not
357  * yet converted to use unlocked_ioctl.
358  *
359  * There are two options: if the driver implements struct
360  * v4l2_device, then the lock defined there is used to
361  * serialize the ioctls. Otherwise the v4l2 core lock defined
362  * below is used. This lock is really bad since it serializes
363  * completely independent devices.
364  *
365  * Both variants suffer from the same problem: if the driver
366  * sleeps, then it blocks all ioctls since the lock is still
367  * held. This is very common for VIDIOC_DQBUF since that
368  * normally waits for a frame to arrive. As a result any other
369  * ioctl calls will proceed very, very slowly since each call
370  * will have to wait for the VIDIOC_QBUF to finish. Things that
371  * should take 0.01s may now take 10-20 seconds.
372  *
373  * The workaround is to *not* take the lock for VIDIOC_DQBUF.
374  * This actually works OK for videobuf-based drivers, since
375  * videobuf will take its own internal lock.
376  */
377  static DEFINE_MUTEX(v4l2_ioctl_mutex);
378  struct mutex *m = vdev->v4l2_dev ?
379  &vdev->v4l2_dev->ioctl_lock : &v4l2_ioctl_mutex;
380 
381  if (cmd != VIDIOC_DQBUF && mutex_lock_interruptible(m))
382  return -ERESTARTSYS;
383  if (video_is_registered(vdev))
384  ret = vdev->fops->ioctl(filp, cmd, arg);
385  if (cmd != VIDIOC_DQBUF)
386  mutex_unlock(m);
387  } else
388  ret = -ENOTTY;
389 
390  return ret;
391 }
392 
393 #ifdef CONFIG_MMU
394 #define v4l2_get_unmapped_area NULL
395 #else
396 static unsigned long v4l2_get_unmapped_area(struct file *filp,
397  unsigned long addr, unsigned long len, unsigned long pgoff,
398  unsigned long flags)
399 {
400  struct video_device *vdev = video_devdata(filp);
401  int ret;
402 
403  if (!vdev->fops->get_unmapped_area)
404  return -ENOSYS;
405  if (!video_is_registered(vdev))
406  return -ENODEV;
407  ret = vdev->fops->get_unmapped_area(filp, addr, len, pgoff, flags);
408  if (vdev->debug)
409  printk(KERN_DEBUG "%s: get_unmapped_area (%d)\n",
410  video_device_node_name(vdev), ret);
411  return ret;
412 }
413 #endif
414 
415 static int v4l2_mmap(struct file *filp, struct vm_area_struct *vm)
416 {
417  struct video_device *vdev = video_devdata(filp);
418  int ret = -ENODEV;
419 
420  if (!vdev->fops->mmap)
421  return -ENODEV;
422  if (video_is_registered(vdev))
423  ret = vdev->fops->mmap(filp, vm);
424  if (vdev->debug)
425  printk(KERN_DEBUG "%s: mmap (%d)\n",
426  video_device_node_name(vdev), ret);
427  return ret;
428 }
429 
430 /* Override for the open function */
431 static int v4l2_open(struct inode *inode, struct file *filp)
432 {
433  struct video_device *vdev;
434  int ret = 0;
435 
436  /* Check if the video device is available */
437  mutex_lock(&videodev_lock);
438  vdev = video_devdata(filp);
439  /* return ENODEV if the video device has already been removed. */
440  if (vdev == NULL || !video_is_registered(vdev)) {
441  mutex_unlock(&videodev_lock);
442  return -ENODEV;
443  }
444  /* and increase the device refcount */
445  video_get(vdev);
446  mutex_unlock(&videodev_lock);
447  if (vdev->fops->open) {
448  if (video_is_registered(vdev))
449  ret = vdev->fops->open(filp);
450  else
451  ret = -ENODEV;
452  }
453 
454  if (vdev->debug)
455  printk(KERN_DEBUG "%s: open (%d)\n",
456  video_device_node_name(vdev), ret);
457  /* decrease the refcount in case of an error */
458  if (ret)
459  video_put(vdev);
460  return ret;
461 }
462 
463 /* Override for the release function */
464 static int v4l2_release(struct inode *inode, struct file *filp)
465 {
466  struct video_device *vdev = video_devdata(filp);
467  int ret = 0;
468 
469  if (vdev->fops->release)
470  ret = vdev->fops->release(filp);
471  if (vdev->debug)
472  printk(KERN_DEBUG "%s: release\n",
473  video_device_node_name(vdev));
474 
475  /* decrease the refcount unconditionally since the release()
476  return value is ignored. */
477  video_put(vdev);
478  return ret;
479 }
480 
481 static const struct file_operations v4l2_fops = {
482  .owner = THIS_MODULE,
483  .read = v4l2_read,
484  .write = v4l2_write,
485  .open = v4l2_open,
486  .get_unmapped_area = v4l2_get_unmapped_area,
487  .mmap = v4l2_mmap,
488  .unlocked_ioctl = v4l2_ioctl,
489 #ifdef CONFIG_COMPAT
490  .compat_ioctl = v4l2_compat_ioctl32,
491 #endif
492  .release = v4l2_release,
493  .poll = v4l2_poll,
494  .llseek = no_llseek,
495 };
496 
510 static int get_index(struct video_device *vdev)
511 {
512  /* This can be static since this function is called with the global
513  videodev_lock held. */
515  int i;
516 
517  /* Some drivers do not set the parent. In that case always return 0. */
518  if (vdev->parent == NULL)
519  return 0;
520 
521  bitmap_zero(used, VIDEO_NUM_DEVICES);
522 
523  for (i = 0; i < VIDEO_NUM_DEVICES; i++) {
524  if (video_device[i] != NULL &&
525  video_device[i]->parent == vdev->parent) {
526  set_bit(video_device[i]->index, used);
527  }
528  }
529 
530  return find_first_zero_bit(used, VIDEO_NUM_DEVICES);
531 }
532 
533 #define SET_VALID_IOCTL(ops, cmd, op) \
534  if (ops->op) \
535  set_bit(_IOC_NR(cmd), valid_ioctls)
536 
537 /* This determines which ioctls are actually implemented in the driver.
538  It's a one-time thing which simplifies video_ioctl2 as it can just do
539  a bit test.
540 
541  Note that drivers can override this by setting bits to 1 in
542  vdev->valid_ioctls. If an ioctl is marked as 1 when this function is
543  called, then that ioctl will actually be marked as unimplemented.
544 
545  It does that by first setting up the local valid_ioctls bitmap, and
546  at the end do a:
547 
548  vdev->valid_ioctls = valid_ioctls & ~(vdev->valid_ioctls)
549  */
550 static void determine_valid_ioctls(struct video_device *vdev)
551 {
552  DECLARE_BITMAP(valid_ioctls, BASE_VIDIOC_PRIVATE);
553  const struct v4l2_ioctl_ops *ops = vdev->ioctl_ops;
554  bool is_vid = vdev->vfl_type == VFL_TYPE_GRABBER;
555  bool is_vbi = vdev->vfl_type == VFL_TYPE_VBI;
556  bool is_radio = vdev->vfl_type == VFL_TYPE_RADIO;
557  bool is_rx = vdev->vfl_dir != VFL_DIR_TX;
558  bool is_tx = vdev->vfl_dir != VFL_DIR_RX;
559 
560  bitmap_zero(valid_ioctls, BASE_VIDIOC_PRIVATE);
561 
562  /* vfl_type and vfl_dir independent ioctls */
563 
565  if (ops->vidioc_g_priority ||
567  set_bit(_IOC_NR(VIDIOC_G_PRIORITY), valid_ioctls);
568  if (ops->vidioc_s_priority ||
570  set_bit(_IOC_NR(VIDIOC_S_PRIORITY), valid_ioctls);
577  /* Note: the control handler can also be passed through the filehandle,
578  and that can't be tested here. If the bit for these control ioctls
579  is set, then the ioctl is valid. But if it is 0, then it can still
580  be valid if the filehandle passed the control handler. */
581  if (vdev->ctrl_handler || ops->vidioc_queryctrl)
582  set_bit(_IOC_NR(VIDIOC_QUERYCTRL), valid_ioctls);
583  if (vdev->ctrl_handler || ops->vidioc_g_ctrl || ops->vidioc_g_ext_ctrls)
584  set_bit(_IOC_NR(VIDIOC_G_CTRL), valid_ioctls);
585  if (vdev->ctrl_handler || ops->vidioc_s_ctrl || ops->vidioc_s_ext_ctrls)
586  set_bit(_IOC_NR(VIDIOC_S_CTRL), valid_ioctls);
587  if (vdev->ctrl_handler || ops->vidioc_g_ext_ctrls)
588  set_bit(_IOC_NR(VIDIOC_G_EXT_CTRLS), valid_ioctls);
589  if (vdev->ctrl_handler || ops->vidioc_s_ext_ctrls)
590  set_bit(_IOC_NR(VIDIOC_S_EXT_CTRLS), valid_ioctls);
591  if (vdev->ctrl_handler || ops->vidioc_try_ext_ctrls)
592  set_bit(_IOC_NR(VIDIOC_TRY_EXT_CTRLS), valid_ioctls);
593  if (vdev->ctrl_handler || ops->vidioc_querymenu)
594  set_bit(_IOC_NR(VIDIOC_QUERYMENU), valid_ioctls);
598 #ifdef CONFIG_VIDEO_ADV_DEBUG
599  SET_VALID_IOCTL(ops, VIDIOC_DBG_G_REGISTER, vidioc_g_register);
600  SET_VALID_IOCTL(ops, VIDIOC_DBG_S_REGISTER, vidioc_s_register);
601 #endif
603  /* yes, really vidioc_subscribe_event */
610  set_bit(_IOC_NR(VIDIOC_ENUM_FREQ_BANDS), valid_ioctls);
611 
612  if (is_vid) {
613  /* video specific ioctls */
614  if ((is_rx && (ops->vidioc_enum_fmt_vid_cap ||
617  (is_tx && (ops->vidioc_enum_fmt_vid_out ||
619  set_bit(_IOC_NR(VIDIOC_ENUM_FMT), valid_ioctls);
620  if ((is_rx && (ops->vidioc_g_fmt_vid_cap ||
622  ops->vidioc_g_fmt_vid_overlay)) ||
623  (is_tx && (ops->vidioc_g_fmt_vid_out ||
626  set_bit(_IOC_NR(VIDIOC_G_FMT), valid_ioctls);
627  if ((is_rx && (ops->vidioc_s_fmt_vid_cap ||
629  ops->vidioc_s_fmt_vid_overlay)) ||
630  (is_tx && (ops->vidioc_s_fmt_vid_out ||
633  set_bit(_IOC_NR(VIDIOC_S_FMT), valid_ioctls);
634  if ((is_rx && (ops->vidioc_try_fmt_vid_cap ||
637  (is_tx && (ops->vidioc_try_fmt_vid_out ||
640  set_bit(_IOC_NR(VIDIOC_TRY_FMT), valid_ioctls);
653  } else if (is_vbi) {
654  /* vbi specific ioctls */
655  if ((is_rx && (ops->vidioc_g_fmt_vbi_cap ||
657  (is_tx && (ops->vidioc_g_fmt_vbi_out ||
659  set_bit(_IOC_NR(VIDIOC_G_FMT), valid_ioctls);
660  if ((is_rx && (ops->vidioc_s_fmt_vbi_cap ||
662  (is_tx && (ops->vidioc_s_fmt_vbi_out ||
664  set_bit(_IOC_NR(VIDIOC_S_FMT), valid_ioctls);
665  if ((is_rx && (ops->vidioc_try_fmt_vbi_cap ||
667  (is_tx && (ops->vidioc_try_fmt_vbi_out ||
669  set_bit(_IOC_NR(VIDIOC_TRY_FMT), valid_ioctls);
671  }
672  if (!is_radio) {
673  /* ioctls valid for video or vbi */
674  if (ops->vidioc_s_std)
675  set_bit(_IOC_NR(VIDIOC_ENUMSTD), valid_ioctls);
676  if (ops->vidioc_g_std || vdev->current_norm)
677  set_bit(_IOC_NR(VIDIOC_G_STD), valid_ioctls);
679  if (is_rx) {
689  }
690  if (is_tx) {
697  }
698  if (ops->vidioc_g_crop || ops->vidioc_g_selection)
699  set_bit(_IOC_NR(VIDIOC_G_CROP), valid_ioctls);
700  if (ops->vidioc_s_crop || ops->vidioc_s_selection)
701  set_bit(_IOC_NR(VIDIOC_S_CROP), valid_ioctls);
704  if (ops->vidioc_cropcap || ops->vidioc_g_selection)
705  set_bit(_IOC_NR(VIDIOC_CROPCAP), valid_ioctls);
706  if (ops->vidioc_g_parm || (vdev->vfl_type == VFL_TYPE_GRABBER &&
707  (ops->vidioc_g_std || vdev->current_norm)))
708  set_bit(_IOC_NR(VIDIOC_G_PARM), valid_ioctls);
717  }
718  if (is_tx) {
719  /* transmitter only ioctls */
722  }
723  if (is_rx) {
724  /* receiver only ioctls */
728  }
729 
730  bitmap_andnot(vdev->valid_ioctls, valid_ioctls, vdev->valid_ioctls,
732 }
733 
766 int __video_register_device(struct video_device *vdev, int type, int nr,
767  int warn_if_nr_in_use, struct module *owner)
768 {
769  int i = 0;
770  int ret;
771  int minor_offset = 0;
772  int minor_cnt = VIDEO_NUM_DEVICES;
773  const char *name_base;
774 
775  /* A minor value of -1 marks this video device as never
776  having been registered */
777  vdev->minor = -1;
778 
779  /* the release callback MUST be present */
780  if (WARN_ON(!vdev->release))
781  return -EINVAL;
782 
783  /* v4l2_fh support */
784  spin_lock_init(&vdev->fh_lock);
785  INIT_LIST_HEAD(&vdev->fh_list);
786 
787  /* Part 1: check device type */
788  switch (type) {
789  case VFL_TYPE_GRABBER:
790  name_base = "video";
791  break;
792  case VFL_TYPE_VBI:
793  name_base = "vbi";
794  break;
795  case VFL_TYPE_RADIO:
796  name_base = "radio";
797  break;
798  case VFL_TYPE_SUBDEV:
799  name_base = "v4l-subdev";
800  break;
801  default:
802  printk(KERN_ERR "%s called with unknown type: %d\n",
803  __func__, type);
804  return -EINVAL;
805  }
806 
807  vdev->vfl_type = type;
808  vdev->cdev = NULL;
809  if (vdev->v4l2_dev) {
810  if (vdev->v4l2_dev->dev)
811  vdev->parent = vdev->v4l2_dev->dev;
812  if (vdev->ctrl_handler == NULL)
813  vdev->ctrl_handler = vdev->v4l2_dev->ctrl_handler;
814  /* If the prio state pointer is NULL, then use the v4l2_device
815  prio state. */
816  if (vdev->prio == NULL)
817  vdev->prio = &vdev->v4l2_dev->prio;
818  }
819 
820  /* Part 2: find a free minor, device node number and device index. */
821 #ifdef CONFIG_VIDEO_FIXED_MINOR_RANGES
822  /* Keep the ranges for the first four types for historical
823  * reasons.
824  * Newer devices (not yet in place) should use the range
825  * of 128-191 and just pick the first free minor there
826  * (new style). */
827  switch (type) {
828  case VFL_TYPE_GRABBER:
829  minor_offset = 0;
830  minor_cnt = 64;
831  break;
832  case VFL_TYPE_RADIO:
833  minor_offset = 64;
834  minor_cnt = 64;
835  break;
836  case VFL_TYPE_VBI:
837  minor_offset = 224;
838  minor_cnt = 32;
839  break;
840  default:
841  minor_offset = 128;
842  minor_cnt = 64;
843  break;
844  }
845 #endif
846 
847  /* Pick a device node number */
848  mutex_lock(&videodev_lock);
849  nr = devnode_find(vdev, nr == -1 ? 0 : nr, minor_cnt);
850  if (nr == minor_cnt)
851  nr = devnode_find(vdev, 0, minor_cnt);
852  if (nr == minor_cnt) {
853  printk(KERN_ERR "could not get a free device node number\n");
854  mutex_unlock(&videodev_lock);
855  return -ENFILE;
856  }
857 #ifdef CONFIG_VIDEO_FIXED_MINOR_RANGES
858  /* 1-on-1 mapping of device node number to minor number */
859  i = nr;
860 #else
861  /* The device node number and minor numbers are independent, so
862  we just find the first free minor number. */
863  for (i = 0; i < VIDEO_NUM_DEVICES; i++)
864  if (video_device[i] == NULL)
865  break;
866  if (i == VIDEO_NUM_DEVICES) {
867  mutex_unlock(&videodev_lock);
868  printk(KERN_ERR "could not get a free minor\n");
869  return -ENFILE;
870  }
871 #endif
872  vdev->minor = i + minor_offset;
873  vdev->num = nr;
874  devnode_set(vdev);
875 
876  /* Should not happen since we thought this minor was free */
877  WARN_ON(video_device[vdev->minor] != NULL);
878  vdev->index = get_index(vdev);
879  mutex_unlock(&videodev_lock);
880 
881  if (vdev->ioctl_ops)
882  determine_valid_ioctls(vdev);
883 
884  /* Part 3: Initialize the character device */
885  vdev->cdev = cdev_alloc();
886  if (vdev->cdev == NULL) {
887  ret = -ENOMEM;
888  goto cleanup;
889  }
890  vdev->cdev->ops = &v4l2_fops;
891  vdev->cdev->owner = owner;
892  ret = cdev_add(vdev->cdev, MKDEV(VIDEO_MAJOR, vdev->minor), 1);
893  if (ret < 0) {
894  printk(KERN_ERR "%s: cdev_add failed\n", __func__);
895  kfree(vdev->cdev);
896  vdev->cdev = NULL;
897  goto cleanup;
898  }
899 
900  /* Part 4: register the device with sysfs */
901  vdev->dev.class = &video_class;
902  vdev->dev.devt = MKDEV(VIDEO_MAJOR, vdev->minor);
903  if (vdev->parent)
904  vdev->dev.parent = vdev->parent;
905  dev_set_name(&vdev->dev, "%s%d", name_base, vdev->num);
906  ret = device_register(&vdev->dev);
907  if (ret < 0) {
908  printk(KERN_ERR "%s: device_register failed\n", __func__);
909  goto cleanup;
910  }
911  /* Register the release callback that will be called when the last
912  reference to the device goes away. */
913  vdev->dev.release = v4l2_device_release;
914 
915  if (nr != -1 && nr != vdev->num && warn_if_nr_in_use)
916  printk(KERN_WARNING "%s: requested %s%d, got %s\n", __func__,
917  name_base, nr, video_device_node_name(vdev));
918 
919  /* Increase v4l2_device refcount */
920  if (vdev->v4l2_dev)
921  v4l2_device_get(vdev->v4l2_dev);
922 
923 #if defined(CONFIG_MEDIA_CONTROLLER)
924  /* Part 5: Register the entity. */
925  if (vdev->v4l2_dev && vdev->v4l2_dev->mdev &&
926  vdev->vfl_type != VFL_TYPE_SUBDEV) {
927  vdev->entity.type = MEDIA_ENT_T_DEVNODE_V4L;
928  vdev->entity.name = vdev->name;
929  vdev->entity.info.v4l.major = VIDEO_MAJOR;
930  vdev->entity.info.v4l.minor = vdev->minor;
931  ret = media_device_register_entity(vdev->v4l2_dev->mdev,
932  &vdev->entity);
933  if (ret < 0)
935  "%s: media_device_register_entity failed\n",
936  __func__);
937  }
938 #endif
939  /* Part 6: Activate this minor. The char device can now be used. */
941  mutex_lock(&videodev_lock);
942  video_device[vdev->minor] = vdev;
943  mutex_unlock(&videodev_lock);
944 
945  return 0;
946 
947 cleanup:
948  mutex_lock(&videodev_lock);
949  if (vdev->cdev)
950  cdev_del(vdev->cdev);
951  devnode_clear(vdev);
952  mutex_unlock(&videodev_lock);
953  /* Mark this video device as never having been registered. */
954  vdev->minor = -1;
955  return ret;
956 }
958 
966 void video_unregister_device(struct video_device *vdev)
967 {
968  /* Check if vdev was ever registered at all */
969  if (!vdev || !video_is_registered(vdev))
970  return;
971 
972  mutex_lock(&videodev_lock);
973  /* This must be in a critical section to prevent a race with v4l2_open.
974  * Once this bit has been cleared video_get may never be called again.
975  */
977  mutex_unlock(&videodev_lock);
978  device_unregister(&vdev->dev);
979 }
981 
982 /*
983  * Initialise video for linux
984  */
985 static int __init videodev_init(void)
986 {
987  dev_t dev = MKDEV(VIDEO_MAJOR, 0);
988  int ret;
989 
990  printk(KERN_INFO "Linux video capture interface: v2.00\n");
991  ret = register_chrdev_region(dev, VIDEO_NUM_DEVICES, VIDEO_NAME);
992  if (ret < 0) {
993  printk(KERN_WARNING "videodev: unable to get major %d\n",
994  VIDEO_MAJOR);
995  return ret;
996  }
997 
998  ret = class_register(&video_class);
999  if (ret < 0) {
1000  unregister_chrdev_region(dev, VIDEO_NUM_DEVICES);
1001  printk(KERN_WARNING "video_dev: class_register failed\n");
1002  return -EIO;
1003  }
1004 
1005  return 0;
1006 }
1007 
1008 static void __exit videodev_exit(void)
1009 {
1010  dev_t dev = MKDEV(VIDEO_MAJOR, 0);
1011 
1012  class_unregister(&video_class);
1013  unregister_chrdev_region(dev, VIDEO_NUM_DEVICES);
1014 }
1015 
1016 subsys_initcall(videodev_init);
1017 module_exit(videodev_exit)
1018 
1019 MODULE_AUTHOR("Alan Cox, Mauro Carvalho Chehab <[email protected]>");
1020 MODULE_DESCRIPTION("Device registrar for Video4Linux drivers v2");
1021 MODULE_LICENSE("GPL");
1023 
1024 
1025 /*
1026  * Local variables:
1027  * c-basic-offset: 8
1028  * End:
1029  */