2010-03-23 09:25:26 -03:00
/*
* v4l2 - fh . h
*
* V4L2 file handle . Store per file handle data for the V4L2
* framework . Using file handles is optional for the drivers .
*
* Copyright ( C ) 2009 - - 2010 Nokia Corporation .
*
2012-10-28 06:44:17 -03:00
* Contact : Sakari Ailus < sakari . ailus @ iki . fi >
2010-03-23 09:25:26 -03:00
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* version 2 as published by the Free Software Foundation .
*
* This program is distributed in the hope that it will be useful , but
* WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
* General Public License for more details .
*/
# ifndef V4L2_FH_H
# define V4L2_FH_H
2013-10-03 18:55:52 -03:00
# include <linux/fs.h>
2010-03-23 09:25:26 -03:00
# include <linux/list.h>
2013-10-03 18:59:30 -03:00
# include <linux/videodev2.h>
2010-03-23 09:25:26 -03:00
struct video_device ;
2011-03-12 08:54:43 -03:00
struct v4l2_ctrl_handler ;
2010-03-23 09:25:26 -03:00
2016-07-22 09:06:45 -03:00
/**
* struct v4l2_fh - Describes a V4L2 file handler
*
* @ list : list of file handlers
* @ vdev : pointer to & struct video_device
* @ ctrl_handler : pointer to & struct v4l2_ctrl_handler
* @ prio : priority of the file handler , as defined by & enum v4l2_priority
*
* @ wait : event ' s wait queue
* @ subscribed : list of subscribed events
* @ available : list of events waiting to be dequeued
* @ navailable : number of available events at @ available list
* @ sequence : event sequence number
* @ m2m_ctx : pointer to & struct v4l2_m2m_ctx
*/
2010-03-23 09:25:26 -03:00
struct v4l2_fh {
struct list_head list ;
struct video_device * vdev ;
2011-03-12 08:54:43 -03:00
struct v4l2_ctrl_handler * ctrl_handler ;
2010-12-29 13:36:50 -03:00
enum v4l2_priority prio ;
2011-06-13 17:44:42 -03:00
/* Events */
wait_queue_head_t wait ;
2016-07-22 09:06:45 -03:00
struct list_head subscribed ;
struct list_head available ;
2011-06-13 17:44:42 -03:00
unsigned int navailable ;
u32 sequence ;
2013-09-14 18:39:04 -03:00
# if IS_ENABLED(CONFIG_V4L2_MEM2MEM_DEV)
struct v4l2_m2m_ctx * m2m_ctx ;
# endif
2010-03-23 09:25:26 -03:00
} ;
2016-07-22 09:06:45 -03:00
/**
* v4l2_fh_init - Initialise the file handle .
*
* @ fh : pointer to & struct v4l2_fh
* @ vdev : pointer to & struct video_device
*
* Parts of the V4L2 framework using the
2010-03-23 09:25:26 -03:00
* file handles should be initialised in this function . Must be called
2016-07-22 09:06:45 -03:00
* from driver ' s v4l2_file_operations - > open \ ( \ ) handler if the driver
* uses & struct v4l2_fh .
2010-03-23 09:25:26 -03:00
*/
2011-06-13 17:44:42 -03:00
void v4l2_fh_init ( struct v4l2_fh * fh , struct video_device * vdev ) ;
2016-07-22 09:06:45 -03:00
/**
* v4l2_fh_add - Add the fh to the list of file handles on a video_device .
*
* @ fh : pointer to & struct v4l2_fh
*
* . . note : :
* The @ fh file handle must be initialised first .
2010-03-23 09:25:26 -03:00
*/
void v4l2_fh_add ( struct v4l2_fh * fh ) ;
2016-07-22 09:06:45 -03:00
/**
* v4l2_fh_open - Ancillary routine that can be used as the open \ ( \ ) op
* of v4l2_file_operations .
*
* @ filp : pointer to struct file
*
* It allocates a v4l2_fh and inits and adds it to the & struct video_device
* associated with the file pointer .
2011-01-08 09:36:04 -03:00
*/
int v4l2_fh_open ( struct file * filp ) ;
2016-07-22 09:06:45 -03:00
/**
* v4l2_fh_del - Remove file handle from the list of file handles .
*
* @ fh : pointer to & struct v4l2_fh
*
* On error filp - > private_data will be % NULL , otherwise it will point to
* the & struct v4l2_fh .
*
* . . note : :
* Must be called in v4l2_file_operations - > release \ ( \ ) handler if the driver
* uses & struct v4l2_fh .
2010-03-23 09:25:26 -03:00
*/
void v4l2_fh_del ( struct v4l2_fh * fh ) ;
2016-07-22 09:06:45 -03:00
/**
* v4l2_fh_exit - Release resources related to a file handle .
*
* @ fh : pointer to & struct v4l2_fh
*
* Parts of the V4L2 framework using the v4l2_fh must release their
* resources here , too .
*
* . . note : :
* Must be called in v4l2_file_operations - > release \ ( \ ) handler if the
* driver uses & struct v4l2_fh .
2010-03-23 09:25:26 -03:00
*/
void v4l2_fh_exit ( struct v4l2_fh * fh ) ;
2016-07-22 09:06:45 -03:00
/**
* v4l2_fh_release - Ancillary routine that can be used as the release \ ( \ ) op
* of v4l2_file_operations .
*
* @ filp : pointer to struct file
*
2011-01-08 09:36:04 -03:00
* It deletes and exits the v4l2_fh associated with the file pointer and
* frees it . It will do nothing if filp - > private_data ( the pointer to the
2016-07-22 09:06:45 -03:00
* v4l2_fh struct ) is % NULL .
*
* This function always returns 0.
2011-01-08 09:36:04 -03:00
*/
int v4l2_fh_release ( struct file * filp ) ;
2016-07-22 09:06:45 -03:00
/**
* v4l2_fh_is_singular - Returns 1 if this filehandle is the only filehandle
* opened for the associated video_device .
*
* @ fh : pointer to & struct v4l2_fh
*
* If @ fh is NULL , then it returns 0.
2011-01-08 09:38:02 -03:00
*/
int v4l2_fh_is_singular ( struct v4l2_fh * fh ) ;
2016-07-22 09:06:45 -03:00
/**
* v4l2_fh_is_singular_file - Returns 1 if this filehandle is the only
* filehandle opened for the associated video_device .
*
* @ filp : pointer to struct file
*
* This is a helper function variant of v4l2_fh_is_singular ( ) with uses
* struct file as argument .
*
* If filp - > private_data is % NULL , then it will return 0.
2011-01-08 09:38:02 -03:00
*/
static inline int v4l2_fh_is_singular_file ( struct file * filp )
{
return v4l2_fh_is_singular ( filp - > private_data ) ;
}
2010-03-23 09:25:26 -03:00
# endif /* V4L2_EVENT_H */