linux/include/media/v4l2-fh.h
<<
>>
Prefs
   1/*
   2 * v4l2-fh.h
   3 *
   4 * V4L2 file handle. Store per file handle data for the V4L2
   5 * framework. Using file handles is optional for the drivers.
   6 *
   7 * Copyright (C) 2009--2010 Nokia Corporation.
   8 *
   9 * Contact: Sakari Ailus <sakari.ailus@maxwell.research.nokia.com>
  10 *
  11 * This program is free software; you can redistribute it and/or
  12 * modify it under the terms of the GNU General Public License
  13 * version 2 as published by the Free Software Foundation.
  14 *
  15 * This program is distributed in the hope that it will be useful, but
  16 * WITHOUT ANY WARRANTY; without even the implied warranty of
  17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  18 * General Public License for more details.
  19 *
  20 * You should have received a copy of the GNU General Public License
  21 * along with this program; if not, write to the Free Software
  22 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  23 * 02110-1301 USA
  24 */
  25
  26#ifndef V4L2_FH_H
  27#define V4L2_FH_H
  28
  29#include <linux/list.h>
  30
  31struct video_device;
  32struct v4l2_ctrl_handler;
  33
  34struct v4l2_fh {
  35        struct list_head        list;
  36        struct video_device     *vdev;
  37        struct v4l2_ctrl_handler *ctrl_handler;
  38        enum v4l2_priority      prio;
  39
  40        /* Events */
  41        wait_queue_head_t       wait;
  42        struct list_head        subscribed; /* Subscribed events */
  43        struct list_head        available; /* Dequeueable event */
  44        unsigned int            navailable;
  45        u32                     sequence;
  46};
  47
  48/*
  49 * Initialise the file handle. Parts of the V4L2 framework using the
  50 * file handles should be initialised in this function. Must be called
  51 * from driver's v4l2_file_operations->open() handler if the driver
  52 * uses v4l2_fh.
  53 */
  54void v4l2_fh_init(struct v4l2_fh *fh, struct video_device *vdev);
  55/*
  56 * Add the fh to the list of file handles on a video_device. The file
  57 * handle must be initialised first.
  58 */
  59void v4l2_fh_add(struct v4l2_fh *fh);
  60/*
  61 * Can be used as the open() op of v4l2_file_operations.
  62 * It allocates a v4l2_fh and inits and adds it to the video_device associated
  63 * with the file pointer.
  64 */
  65int v4l2_fh_open(struct file *filp);
  66/*
  67 * Remove file handle from the list of file handles. Must be called in
  68 * v4l2_file_operations->release() handler if the driver uses v4l2_fh.
  69 * On error filp->private_data will be NULL, otherwise it will point to
  70 * the v4l2_fh struct.
  71 */
  72void v4l2_fh_del(struct v4l2_fh *fh);
  73/*
  74 * Release resources related to a file handle. Parts of the V4L2
  75 * framework using the v4l2_fh must release their resources here, too.
  76 * Must be called in v4l2_file_operations->release() handler if the
  77 * driver uses v4l2_fh.
  78 */
  79void v4l2_fh_exit(struct v4l2_fh *fh);
  80/*
  81 * Can be used as the release() op of v4l2_file_operations.
  82 * It deletes and exits the v4l2_fh associated with the file pointer and
  83 * frees it. It will do nothing if filp->private_data (the pointer to the
  84 * v4l2_fh struct) is NULL. This function always returns 0.
  85 */
  86int v4l2_fh_release(struct file *filp);
  87/*
  88 * Returns 1 if this filehandle is the only filehandle opened for the
  89 * associated video_device. If fh is NULL, then it returns 0.
  90 */
  91int v4l2_fh_is_singular(struct v4l2_fh *fh);
  92/*
  93 * Helper function with struct file as argument. If filp->private_data is
  94 * NULL, then it will return 0.
  95 */
  96static inline int v4l2_fh_is_singular_file(struct file *filp)
  97{
  98        return v4l2_fh_is_singular(filp->private_data);
  99}
 100
 101#endif /* V4L2_EVENT_H */
 102