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()
212 struct v4l2_subscribed_event *sev, *found_ev; in v4l2_event_subscribe() local
222 sev = kzalloc(sizeof(*sev) + sizeof(struct v4l2_kevent) * elems, GFP_KERNEL); in v4l2_event_subscribe()
223 if (!sev) in v4l2_event_subscribe()
226 sev->events[i].sev = sev; in v4l2_event_subscribe()
227 sev->type = sub->type; in v4l2_event_subscribe()
228 sev->id = sub->id; in v4l2_event_subscribe()
229 sev->flags = sub->flags; in v4l2_event_subscribe()
230 sev->fh = fh; in v4l2_event_subscribe()
231 sev->ops = ops; in v4l2_event_subscribe()
236 list_add(&sev->list, &fh->subscribed); in v4l2_event_subscribe()
240 kfree(sev); in v4l2_event_subscribe()
244 if (sev->ops && sev->ops->add) { in v4l2_event_subscribe()
245 int ret = sev->ops->add(sev, elems); in v4l2_event_subscribe()
247 sev->ops = NULL; in v4l2_event_subscribe()
254 sev->elems = elems; in v4l2_event_subscribe()
263 struct v4l2_subscribed_event *sev; in v4l2_event_unsubscribe_all() local
267 sev = NULL; in v4l2_event_unsubscribe_all()
271 sev = list_first_entry(&fh->subscribed, in v4l2_event_unsubscribe_all()
273 sub.type = sev->type; in v4l2_event_unsubscribe_all()
274 sub.id = sev->id; in v4l2_event_unsubscribe_all()
277 if (sev) in v4l2_event_unsubscribe_all()
279 } while (sev); in v4l2_event_unsubscribe_all()
286 struct v4l2_subscribed_event *sev; in v4l2_event_unsubscribe() local
297 sev = v4l2_event_subscribed(fh, sub->type, sub->id); in v4l2_event_unsubscribe()
298 if (sev != NULL) { in v4l2_event_unsubscribe()
300 for (i = 0; i < sev->in_use; i++) { in v4l2_event_unsubscribe()
301 list_del(&sev->events[sev_pos(sev, i)].list); in v4l2_event_unsubscribe()
304 list_del(&sev->list); in v4l2_event_unsubscribe()
309 if (sev && sev->ops && sev->ops->del) in v4l2_event_unsubscribe()
310 sev->ops->del(sev); in v4l2_event_unsubscribe()
312 kfree(sev); in v4l2_event_unsubscribe()