#include <linux/wait.h>
struct v4l2_fh;
+struct v4l2_subscribed_event;
struct video_device;
struct v4l2_kevent {
+ /* list node for the v4l2_fh->available list */
struct list_head list;
+ /* pointer to parent v4l2_subscribed_event */
+ struct v4l2_subscribed_event *sev;
+ /* event itself */
struct v4l2_event event;
};
struct v4l2_subscribed_event {
+ /* list node for the v4l2_fh->subscribed list */
struct list_head list;
+ /* event type */
u32 type;
+ /* associated object ID (e.g. control ID) */
+ u32 id;
+ /* copy of v4l2_event_subscription->flags */
+ u32 flags;
+ /* filehandle that subscribed to this event */
+ struct v4l2_fh *fh;
+ /* list node that hooks into the object's event list (if there is one) */
+ struct list_head node;
+ /* the number of elements in the events array */
+ unsigned elems;
+ /* the index of the events containing the oldest available event */
+ unsigned first;
+ /* the number of queued events */
+ unsigned in_use;
+ /* an array of elems events */
+ struct v4l2_kevent events[];
};
-struct v4l2_events {
- wait_queue_head_t wait;
- struct list_head subscribed; /* Subscribed events */
- struct list_head free; /* Events ready for use */
- struct list_head available; /* Dequeueable event */
- unsigned int navailable;
- unsigned int nallocated; /* Number of allocated events */
- u32 sequence;
-};
-
-int v4l2_event_init(struct v4l2_fh *fh);
-int v4l2_event_alloc(struct v4l2_fh *fh, unsigned int n);
-void v4l2_event_free(struct v4l2_fh *fh);
int v4l2_event_dequeue(struct v4l2_fh *fh, struct v4l2_event *event,
int nonblocking);
void v4l2_event_queue(struct video_device *vdev, const struct v4l2_event *ev);
+void v4l2_event_queue_fh(struct v4l2_fh *fh, const struct v4l2_event *ev);
int v4l2_event_pending(struct v4l2_fh *fh);
int v4l2_event_subscribe(struct v4l2_fh *fh,
- struct v4l2_event_subscription *sub);
+ struct v4l2_event_subscription *sub, unsigned elems);
int v4l2_event_unsubscribe(struct v4l2_fh *fh,
struct v4l2_event_subscription *sub);
+void v4l2_event_unsubscribe_all(struct v4l2_fh *fh);
#endif /* V4L2_EVENT_H */