Lines Matching refs:evtchnl

25 	struct xen_drm_front_evtchnl *evtchnl = dev_id;  in evtchnl_interrupt_ctrl()  local
26 struct xen_drm_front_info *front_info = evtchnl->front_info; in evtchnl_interrupt_ctrl()
31 if (unlikely(evtchnl->state != EVTCHNL_STATE_CONNECTED)) in evtchnl_interrupt_ctrl()
37 rp = evtchnl->u.req.ring.sring->rsp_prod; in evtchnl_interrupt_ctrl()
41 for (i = evtchnl->u.req.ring.rsp_cons; i != rp; i++) { in evtchnl_interrupt_ctrl()
42 resp = RING_GET_RESPONSE(&evtchnl->u.req.ring, i); in evtchnl_interrupt_ctrl()
43 if (unlikely(resp->id != evtchnl->evt_id)) in evtchnl_interrupt_ctrl()
53 evtchnl->u.req.resp_status = resp->status; in evtchnl_interrupt_ctrl()
54 complete(&evtchnl->u.req.completion); in evtchnl_interrupt_ctrl()
64 evtchnl->u.req.ring.rsp_cons = i; in evtchnl_interrupt_ctrl()
66 if (i != evtchnl->u.req.ring.req_prod_pvt) { in evtchnl_interrupt_ctrl()
69 RING_FINAL_CHECK_FOR_RESPONSES(&evtchnl->u.req.ring, in evtchnl_interrupt_ctrl()
74 evtchnl->u.req.ring.sring->rsp_event = i + 1; in evtchnl_interrupt_ctrl()
83 struct xen_drm_front_evtchnl *evtchnl = dev_id; in evtchnl_interrupt_evt() local
84 struct xen_drm_front_info *front_info = evtchnl->front_info; in evtchnl_interrupt_evt()
85 struct xendispl_event_page *page = evtchnl->u.evt.page; in evtchnl_interrupt_evt()
89 if (unlikely(evtchnl->state != EVTCHNL_STATE_CONNECTED)) in evtchnl_interrupt_evt()
104 if (unlikely(event->id != evtchnl->evt_id++)) in evtchnl_interrupt_evt()
109 xen_drm_front_on_frame_done(front_info, evtchnl->index, in evtchnl_interrupt_evt()
124 struct xen_drm_front_evtchnl *evtchnl) in evtchnl_free() argument
128 if (evtchnl->type == EVTCHNL_TYPE_REQ) in evtchnl_free()
129 page = evtchnl->u.req.ring.sring; in evtchnl_free()
130 else if (evtchnl->type == EVTCHNL_TYPE_EVT) in evtchnl_free()
131 page = evtchnl->u.evt.page; in evtchnl_free()
135 evtchnl->state = EVTCHNL_STATE_DISCONNECTED; in evtchnl_free()
137 if (evtchnl->type == EVTCHNL_TYPE_REQ) { in evtchnl_free()
139 evtchnl->u.req.resp_status = -EIO; in evtchnl_free()
140 complete_all(&evtchnl->u.req.completion); in evtchnl_free()
143 if (evtchnl->irq) in evtchnl_free()
144 unbind_from_irqhandler(evtchnl->irq, evtchnl); in evtchnl_free()
146 if (evtchnl->port) in evtchnl_free()
147 xenbus_free_evtchn(front_info->xb_dev, evtchnl->port); in evtchnl_free()
150 xenbus_teardown_ring(&page, 1, &evtchnl->gref); in evtchnl_free()
152 memset(evtchnl, 0, sizeof(*evtchnl)); in evtchnl_free()
156 struct xen_drm_front_evtchnl *evtchnl, in evtchnl_alloc() argument
164 memset(evtchnl, 0, sizeof(*evtchnl)); in evtchnl_alloc()
165 evtchnl->type = type; in evtchnl_alloc()
166 evtchnl->index = index; in evtchnl_alloc()
167 evtchnl->front_info = front_info; in evtchnl_alloc()
168 evtchnl->state = EVTCHNL_STATE_DISCONNECTED; in evtchnl_alloc()
171 1, &evtchnl->gref); in evtchnl_alloc()
178 init_completion(&evtchnl->u.req.completion); in evtchnl_alloc()
179 mutex_init(&evtchnl->u.req.req_io_lock); in evtchnl_alloc()
181 XEN_FRONT_RING_INIT(&evtchnl->u.req.ring, sring, XEN_PAGE_SIZE); in evtchnl_alloc()
185 evtchnl->u.evt.page = page; in evtchnl_alloc()
189 ret = xenbus_alloc_evtchn(xb_dev, &evtchnl->port); in evtchnl_alloc()
193 ret = bind_evtchn_to_irqhandler(evtchnl->port, in evtchnl_alloc()
195 evtchnl); in evtchnl_alloc()
199 evtchnl->irq = ret; in evtchnl_alloc()
249 struct xen_drm_front_evtchnl *evtchnl, in evtchnl_publish() argument
253 struct xenbus_device *xb_dev = evtchnl->front_info->xb_dev; in evtchnl_publish()
257 ret = xenbus_printf(xbt, path, node_ring, "%u", evtchnl->gref); in evtchnl_publish()
264 ret = xenbus_printf(xbt, path, node_chnl, "%u", evtchnl->port); in evtchnl_publish()
325 void xen_drm_front_evtchnl_flush(struct xen_drm_front_evtchnl *evtchnl) in xen_drm_front_evtchnl_flush() argument
329 evtchnl->u.req.ring.req_prod_pvt++; in xen_drm_front_evtchnl_flush()
330 RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&evtchnl->u.req.ring, notify); in xen_drm_front_evtchnl_flush()
332 notify_remote_via_irq(evtchnl->irq); in xen_drm_front_evtchnl_flush()