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