]>
Commit | Line | Data |
---|---|---|
1babcb46 SA |
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 | * | |
8c5dff90 | 9 | * Contact: Sakari Ailus <sakari.ailus@iki.fi> |
1babcb46 SA |
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. | |
1babcb46 SA |
19 | */ |
20 | ||
21 | #ifndef V4L2_FH_H | |
22 | #define V4L2_FH_H | |
23 | ||
4f1af2a3 | 24 | #include <linux/fs.h> |
1babcb46 | 25 | #include <linux/list.h> |
c8d185ce | 26 | #include <linux/videodev2.h> |
1babcb46 SA |
27 | |
28 | struct video_device; | |
2d28b686 | 29 | struct v4l2_ctrl_handler; |
1babcb46 | 30 | |
4ada120e MCC |
31 | /** |
32 | * struct v4l2_fh - Describes a V4L2 file handler | |
33 | * | |
34 | * @list: list of file handlers | |
35 | * @vdev: pointer to &struct video_device | |
36 | * @ctrl_handler: pointer to &struct v4l2_ctrl_handler | |
37 | * @prio: priority of the file handler, as defined by &enum v4l2_priority | |
38 | * | |
39 | * @wait: event' s wait queue | |
40 | * @subscribed: list of subscribed events | |
41 | * @available: list of events waiting to be dequeued | |
42 | * @navailable: number of available events at @available list | |
43 | * @sequence: event sequence number | |
44 | * @m2m_ctx: pointer to &struct v4l2_m2m_ctx | |
45 | */ | |
1babcb46 SA |
46 | struct v4l2_fh { |
47 | struct list_head list; | |
48 | struct video_device *vdev; | |
2d28b686 | 49 | struct v4l2_ctrl_handler *ctrl_handler; |
fc5602be | 50 | enum v4l2_priority prio; |
523f46d6 HV |
51 | |
52 | /* Events */ | |
53 | wait_queue_head_t wait; | |
4ada120e MCC |
54 | struct list_head subscribed; |
55 | struct list_head available; | |
523f46d6 | 56 | unsigned int navailable; |
523f46d6 | 57 | u32 sequence; |
8e6e8f93 SN |
58 | |
59 | #if IS_ENABLED(CONFIG_V4L2_MEM2MEM_DEV) | |
60 | struct v4l2_m2m_ctx *m2m_ctx; | |
61 | #endif | |
1babcb46 SA |
62 | }; |
63 | ||
4ada120e MCC |
64 | /** |
65 | * v4l2_fh_init - Initialise the file handle. | |
66 | * | |
67 | * @fh: pointer to &struct v4l2_fh | |
68 | * @vdev: pointer to &struct video_device | |
69 | * | |
70 | * Parts of the V4L2 framework using the | |
1babcb46 | 71 | * file handles should be initialised in this function. Must be called |
4ada120e MCC |
72 | * from driver's v4l2_file_operations->open\(\) handler if the driver |
73 | * uses &struct v4l2_fh. | |
1babcb46 | 74 | */ |
523f46d6 | 75 | void v4l2_fh_init(struct v4l2_fh *fh, struct video_device *vdev); |
4ada120e MCC |
76 | |
77 | /** | |
78 | * v4l2_fh_add - Add the fh to the list of file handles on a video_device. | |
79 | * | |
80 | * @fh: pointer to &struct v4l2_fh | |
81 | * | |
82 | * .. note:: | |
83 | * The @fh file handle must be initialised first. | |
1babcb46 SA |
84 | */ |
85 | void v4l2_fh_add(struct v4l2_fh *fh); | |
4ada120e MCC |
86 | |
87 | /** | |
88 | * v4l2_fh_open - Ancillary routine that can be used as the open\(\) op | |
89 | * of v4l2_file_operations. | |
90 | * | |
91 | * @filp: pointer to struct file | |
92 | * | |
93 | * It allocates a v4l2_fh and inits and adds it to the &struct video_device | |
94 | * associated with the file pointer. | |
73cb4206 HV |
95 | */ |
96 | int v4l2_fh_open(struct file *filp); | |
4ada120e MCC |
97 | |
98 | /** | |
99 | * v4l2_fh_del - Remove file handle from the list of file handles. | |
100 | * | |
101 | * @fh: pointer to &struct v4l2_fh | |
102 | * | |
103 | * On error filp->private_data will be %NULL, otherwise it will point to | |
104 | * the &struct v4l2_fh. | |
105 | * | |
106 | * .. note:: | |
107 | * Must be called in v4l2_file_operations->release\(\) handler if the driver | |
108 | * uses &struct v4l2_fh. | |
1babcb46 SA |
109 | */ |
110 | void v4l2_fh_del(struct v4l2_fh *fh); | |
4ada120e MCC |
111 | |
112 | /** | |
113 | * v4l2_fh_exit - Release resources related to a file handle. | |
114 | * | |
115 | * @fh: pointer to &struct v4l2_fh | |
116 | * | |
117 | * Parts of the V4L2 framework using the v4l2_fh must release their | |
118 | * resources here, too. | |
119 | * | |
120 | * .. note:: | |
121 | * Must be called in v4l2_file_operations->release\(\) handler if the | |
122 | * driver uses &struct v4l2_fh. | |
1babcb46 SA |
123 | */ |
124 | void v4l2_fh_exit(struct v4l2_fh *fh); | |
4ada120e MCC |
125 | |
126 | /** | |
127 | * v4l2_fh_release - Ancillary routine that can be used as the release\(\) op | |
128 | * of v4l2_file_operations. | |
129 | * | |
130 | * @filp: pointer to struct file | |
131 | * | |
73cb4206 HV |
132 | * It deletes and exits the v4l2_fh associated with the file pointer and |
133 | * frees it. It will do nothing if filp->private_data (the pointer to the | |
4ada120e MCC |
134 | * v4l2_fh struct) is %NULL. |
135 | * | |
136 | * This function always returns 0. | |
73cb4206 HV |
137 | */ |
138 | int v4l2_fh_release(struct file *filp); | |
4ada120e MCC |
139 | |
140 | /** | |
141 | * v4l2_fh_is_singular - Returns 1 if this filehandle is the only filehandle | |
142 | * opened for the associated video_device. | |
143 | * | |
144 | * @fh: pointer to &struct v4l2_fh | |
145 | * | |
146 | * If @fh is NULL, then it returns 0. | |
dfddb244 HV |
147 | */ |
148 | int v4l2_fh_is_singular(struct v4l2_fh *fh); | |
4ada120e MCC |
149 | |
150 | /** | |
151 | * v4l2_fh_is_singular_file - Returns 1 if this filehandle is the only | |
152 | * filehandle opened for the associated video_device. | |
153 | * | |
154 | * @filp: pointer to struct file | |
155 | * | |
156 | * This is a helper function variant of v4l2_fh_is_singular() with uses | |
157 | * struct file as argument. | |
158 | * | |
159 | * If filp->private_data is %NULL, then it will return 0. | |
dfddb244 HV |
160 | */ |
161 | static inline int v4l2_fh_is_singular_file(struct file *filp) | |
162 | { | |
163 | return v4l2_fh_is_singular(filp->private_data); | |
164 | } | |
1babcb46 SA |
165 | |
166 | #endif /* V4L2_EVENT_H */ |