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@iki.fi>
  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/fs.h>
  30#include <linux/list.h>
  31#include <linux/videodev2.h>
  32
  33struct video_device;
  34struct v4l2_ctrl_handler;
  35
  36struct v4l2_fh {
  37        struct list_head        list;
  38        struct video_device     *vdev;
  39        struct v4l2_ctrl_handler *ctrl_handler;
  40        enum v4l2_priority      prio;
  41
  42        /* Events */
  43        wait_queue_head_t       wait;
  44        struct list_head        subscribed; /* Subscribed events */
  45        struct list_head        available; /* Dequeueable event */
  46        unsigned int            navailable;
  47        u32                     sequence;
  48
  49#if IS_ENABLED(CONFIG_V4L2_MEM2MEM_DEV)
  50        struct v4l2_m2m_ctx     *m2m_ctx;
  51#endif
  52};
  53
  54/*
  55 * Initialise the file handle. Parts of the V4L2 framework using the
  56 * file handles should be initialised in this function. Must be called
  57 * from driver's v4l2_file_operations->open() handler if the driver
  58 * uses v4l2_fh.
  59 */
  60void v4l2_fh_init(struct v4l2_fh *fh, struct video_device *vdev);
  61/*
  62 * Add the fh to the list of file handles on a video_device. The file
  63 * handle must be initialised first.
  64 */
  65void v4l2_fh_add(struct v4l2_fh *fh);
  66/*
  67 * Can be used as the open() op of v4l2_file_operations.
  68 * It allocates a v4l2_fh and inits and adds it to the video_device associated
  69 * with the file pointer.
  70 */
  71int v4l2_fh_open(struct file *filp);
  72/*
  73 * Remove file handle from the list of file handles. Must be called in
  74 * v4l2_file_operations->release() handler if the driver uses v4l2_fh.
  75 * On error filp->private_data will be NULL, otherwise it will point to
  76 * the v4l2_fh struct.
  77 */
  78void v4l2_fh_del(struct v4l2_fh *fh);
  79/*
  80 * Release resources related to a file handle. Parts of the V4L2
  81 * framework using the v4l2_fh must release their resources here, too.
  82 * Must be called in v4l2_file_operations->release() handler if the
  83 * driver uses v4l2_fh.
  84 */
  85void v4l2_fh_exit(struct v4l2_fh *fh);
  86/*
  87 * Can be used as the release() op of v4l2_file_operations.
  88 * It deletes and exits the v4l2_fh associated with the file pointer and
  89 * frees it. It will do nothing if filp->private_data (the pointer to the
  90 * v4l2_fh struct) is NULL. This function always returns 0.
  91 */
  92int v4l2_fh_release(struct file *filp);
  93/*
  94 * Returns 1 if this filehandle is the only filehandle opened for the
  95 * associated video_device. If fh is NULL, then it returns 0.
  96 */
  97int v4l2_fh_is_singular(struct v4l2_fh *fh);
  98/*
  99 * Helper function with struct file as argument. If filp->private_data is
 100 * NULL, then it will return 0.
 101 */
 102static inline int v4l2_fh_is_singular_file(struct file *filp)
 103{
 104        return v4l2_fh_is_singular(filp->private_data);
 105}
 106
 107#endif /* V4L2_EVENT_H */
 108