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()
127 if (!sev->elems) in __v4l2_event_queue_fh()
134 if (sev->in_use == sev->elems) { in __v4l2_event_queue_fh()
136 kev = sev->events + sev_pos(sev, 0); in __v4l2_event_queue_fh()
138 sev->in_use--; in __v4l2_event_queue_fh()
139 sev->first = sev_pos(sev, 1); in __v4l2_event_queue_fh()
141 if (sev->elems == 1) { in __v4l2_event_queue_fh()
142 if (sev->ops && sev->ops->replace) { in __v4l2_event_queue_fh()
143 sev->ops->replace(&kev->event, ev); in __v4l2_event_queue_fh()
146 } else if (sev->ops && sev->ops->merge) { in __v4l2_event_queue_fh()
148 sev->events + sev_pos(sev, 0); in __v4l2_event_queue_fh()
149 sev->ops->merge(&kev->event, &second_oldest->event); in __v4l2_event_queue_fh()
154 kev = sev->events + sev_pos(sev, sev->in_use); in __v4l2_event_queue_fh()
161 sev->in_use++; in __v4l2_event_queue_fh()
209 struct v4l2_subscribed_event *sev, *found_ev; in v4l2_event_subscribe() local
219 sev = kzalloc(sizeof(*sev) + sizeof(struct v4l2_kevent) * elems, GFP_KERNEL); in v4l2_event_subscribe()
220 if (!sev) in v4l2_event_subscribe()
223 sev->events[i].sev = sev; in v4l2_event_subscribe()
224 sev->type = sub->type; in v4l2_event_subscribe()
225 sev->id = sub->id; in v4l2_event_subscribe()
226 sev->flags = sub->flags; in v4l2_event_subscribe()
227 sev->fh = fh; in v4l2_event_subscribe()
228 sev->ops = ops; in v4l2_event_subscribe()
233 list_add(&sev->list, &fh->subscribed); in v4l2_event_subscribe()
237 kfree(sev); in v4l2_event_subscribe()
241 if (sev->ops && sev->ops->add) { in v4l2_event_subscribe()
242 int ret = sev->ops->add(sev, elems); in v4l2_event_subscribe()
244 sev->ops = NULL; in v4l2_event_subscribe()
251 sev->elems = elems; in v4l2_event_subscribe()
260 struct v4l2_subscribed_event *sev; in v4l2_event_unsubscribe_all() local
264 sev = NULL; in v4l2_event_unsubscribe_all()
268 sev = list_first_entry(&fh->subscribed, in v4l2_event_unsubscribe_all()
270 sub.type = sev->type; in v4l2_event_unsubscribe_all()
271 sub.id = sev->id; in v4l2_event_unsubscribe_all()
274 if (sev) in v4l2_event_unsubscribe_all()
276 } while (sev); in v4l2_event_unsubscribe_all()
283 struct v4l2_subscribed_event *sev; in v4l2_event_unsubscribe() local
294 sev = v4l2_event_subscribed(fh, sub->type, sub->id); in v4l2_event_unsubscribe()
295 if (sev != NULL) { in v4l2_event_unsubscribe()
297 for (i = 0; i < sev->in_use; i++) { in v4l2_event_unsubscribe()
298 list_del(&sev->events[sev_pos(sev, i)].list); in v4l2_event_unsubscribe()
301 list_del(&sev->list); in v4l2_event_unsubscribe()
306 if (sev && sev->ops && sev->ops->del) in v4l2_event_unsubscribe()
307 sev->ops->del(sev); in v4l2_event_unsubscribe()
309 kfree(sev); in v4l2_event_unsubscribe()