Lines Matching refs:sev
33 static unsigned sev_pos(const struct v4l2_subscribed_event *sev, unsigned idx) in sev_pos() argument
35 idx += sev->first; in sev_pos()
36 return idx >= sev->elems ? idx - sev->elems : idx; in sev_pos()
59 kev->sev->first = sev_pos(kev->sev, 1); in __v4l2_event_dequeue()
60 kev->sev->in_use--; in __v4l2_event_dequeue()
99 struct v4l2_subscribed_event *sev; in v4l2_event_subscribed() local
103 list_for_each_entry(sev, &fh->subscribed, list) in v4l2_event_subscribed()
104 if (sev->type == type && sev->id == id) in v4l2_event_subscribed()
105 return sev; in v4l2_event_subscribed()
113 struct v4l2_subscribed_event *sev; in __v4l2_event_queue_fh() local
118 sev = v4l2_event_subscribed(fh, ev->type, ev->id); in __v4l2_event_queue_fh()
119 if (sev == NULL) in __v4l2_event_queue_fh()
126 if (sev->in_use == sev->elems) { in __v4l2_event_queue_fh()
128 kev = sev->events + sev_pos(sev, 0); in __v4l2_event_queue_fh()
130 sev->in_use--; in __v4l2_event_queue_fh()
131 sev->first = sev_pos(sev, 1); in __v4l2_event_queue_fh()
133 if (sev->elems == 1) { in __v4l2_event_queue_fh()
134 if (sev->ops && sev->ops->replace) { in __v4l2_event_queue_fh()
135 sev->ops->replace(&kev->event, ev); in __v4l2_event_queue_fh()
138 } else if (sev->ops && sev->ops->merge) { in __v4l2_event_queue_fh()
140 sev->events + sev_pos(sev, 0); in __v4l2_event_queue_fh()
141 sev->ops->merge(&kev->event, &second_oldest->event); in __v4l2_event_queue_fh()
146 kev = sev->events + sev_pos(sev, sev->in_use); in __v4l2_event_queue_fh()
153 sev->in_use++; in __v4l2_event_queue_fh()
200 static void __v4l2_event_unsubscribe(struct v4l2_subscribed_event *sev) in __v4l2_event_unsubscribe() argument
202 struct v4l2_fh *fh = sev->fh; in __v4l2_event_unsubscribe()
209 for (i = 0; i < sev->in_use; i++) { in __v4l2_event_unsubscribe()
210 list_del(&sev->events[sev_pos(sev, i)].list); in __v4l2_event_unsubscribe()
213 list_del(&sev->list); in __v4l2_event_unsubscribe()
220 struct v4l2_subscribed_event *sev, *found_ev; in v4l2_event_subscribe() local
231 sev = kzalloc(sizeof(*sev) + sizeof(struct v4l2_kevent) * elems, GFP_KERNEL); in v4l2_event_subscribe()
232 if (!sev) in v4l2_event_subscribe()
235 sev->events[i].sev = sev; in v4l2_event_subscribe()
236 sev->type = sub->type; in v4l2_event_subscribe()
237 sev->id = sub->id; in v4l2_event_subscribe()
238 sev->flags = sub->flags; in v4l2_event_subscribe()
239 sev->fh = fh; in v4l2_event_subscribe()
240 sev->ops = ops; in v4l2_event_subscribe()
241 sev->elems = elems; in v4l2_event_subscribe()
248 list_add(&sev->list, &fh->subscribed); in v4l2_event_subscribe()
253 kfree(sev); in v4l2_event_subscribe()
254 } else if (sev->ops && sev->ops->add) { in v4l2_event_subscribe()
255 ret = sev->ops->add(sev, elems); in v4l2_event_subscribe()
258 __v4l2_event_unsubscribe(sev); in v4l2_event_subscribe()
260 kfree(sev); in v4l2_event_subscribe()
273 struct v4l2_subscribed_event *sev; in v4l2_event_unsubscribe_all() local
277 sev = NULL; in v4l2_event_unsubscribe_all()
281 sev = list_first_entry(&fh->subscribed, in v4l2_event_unsubscribe_all()
283 sub.type = sev->type; in v4l2_event_unsubscribe_all()
284 sub.id = sev->id; in v4l2_event_unsubscribe_all()
287 if (sev) in v4l2_event_unsubscribe_all()
289 } while (sev); in v4l2_event_unsubscribe_all()
296 struct v4l2_subscribed_event *sev; in v4l2_event_unsubscribe() local
308 sev = v4l2_event_subscribed(fh, sub->type, sub->id); in v4l2_event_unsubscribe()
309 if (sev != NULL) in v4l2_event_unsubscribe()
310 __v4l2_event_unsubscribe(sev); in v4l2_event_unsubscribe()
314 if (sev && sev->ops && sev->ops->del) in v4l2_event_unsubscribe()
315 sev->ops->del(sev); in v4l2_event_unsubscribe()
317 kfree(sev); in v4l2_event_unsubscribe()