Lines Matching refs:evtchn

2  * evtchn.c
10 * File: drivers/xen/evtchn.c
39 __FBSDID("$FreeBSD: stable/11/sys/dev/xen/evtchn/evtchn_dev.c 362331 2020-06-18 15:44:40Z royger $");
65 #include <xen/evtchn.h>
68 #include <xen/evtchn/evtchnvar.h>
82 /* Notification ring, accessed via /dev/xen/evtchn. */
119 .d_name = "evtchn",
144 struct user_evtchn *evtchn;
146 evtchn = arg;
148 if (!evtchn->enabled && bootverbose) {
151 evtchn->port);
154 evtchn_mask_port(evtchn->port);
155 evtchn->enabled = false;
163 struct user_evtchn *evtchn;
166 evtchn = arg;
167 u = evtchn->user;
175 u->ring[EVTCHN_RING_MASK(u->ring_prod)] = evtchn->port;
221 struct user_evtchn *evtchn, *tmp;
227 RB_FOREACH_SAFE(evtchn, evtchn_tree, &u->evtchns, tmp) {
228 xen_intr_unbind(&evtchn->handle);
230 RB_REMOVE(evtchn_tree, &u->evtchns, evtchn);
231 free(evtchn, M_EVTCHN);
349 struct user_evtchn *evtchn;
351 evtchn = find_evtchn(u, port);
352 if (evtchn && !evtchn->enabled) {
353 evtchn->enabled = true;
354 evtchn_unmask_port(evtchn->port);
367 evtchn_bind_user_port(struct per_user_data *u, struct user_evtchn *evtchn)
371 evtchn->port = xen_intr_port(evtchn->handle);
372 evtchn->user = u;
373 evtchn->enabled = true;
375 RB_INSERT(evtchn_tree, &u->evtchns, evtchn);
378 evtchn_filter, evtchn_interrupt, evtchn,
379 INTR_TYPE_MISC | INTR_MPSAFE, evtchn->handle);
381 xen_intr_unbind(&evtchn->handle);
383 RB_REMOVE(evtchn_tree, &u->evtchns, evtchn);
385 free(evtchn, M_EVTCHN);
404 struct user_evtchn *evtchn;
406 evtchn = malloc(sizeof(*evtchn), M_EVTCHN, M_WAITOK | M_ZERO);
411 NULL, NULL, NULL, 0, &evtchn->handle);
413 free(evtchn, M_EVTCHN);
416 error = evtchn_bind_user_port(u, evtchn);
419 bind->port = evtchn->port;
425 struct user_evtchn *evtchn;
427 evtchn = malloc(sizeof(*evtchn), M_EVTCHN, M_WAITOK | M_ZERO);
433 NULL, NULL, 0, &evtchn->handle);
435 free(evtchn, M_EVTCHN);
438 error = evtchn_bind_user_port(u, evtchn);
441 bind->port = evtchn->port;
447 struct user_evtchn *evtchn;
449 evtchn = malloc(sizeof(*evtchn), M_EVTCHN, M_WAITOK | M_ZERO);
454 bind->remote_domain, NULL, NULL, NULL, 0, &evtchn->handle);
456 free(evtchn, M_EVTCHN);
459 error = evtchn_bind_user_port(u, evtchn);
462 bind->port = evtchn->port;
468 struct user_evtchn *evtchn;
473 evtchn = find_evtchn(u, unbind->port);
474 if (evtchn == NULL) {
479 xen_intr_unbind(&evtchn->handle);
480 RB_REMOVE(evtchn_tree, &u->evtchns, evtchn);
482 free(evtchn, M_EVTCHN);
489 struct user_evtchn *evtchn;
494 evtchn = find_evtchn(u, notify->port);
495 if (evtchn == NULL) {
500 xen_intr_signal(evtchn->handle);
564 ("Trying to attach evtchn device on non Xen domain"));
566 evtchn_dev = BUS_ADD_CHILD(parent, 0, "evtchn", 0);
568 panic("unable to attach evtchn user-space device");
584 GID_WHEEL, 0600, "xen/evtchn");
598 "evtchn",
605 DRIVER_MODULE(evtchn, xenpv, evtchn_driver, evtchn_devclass, 0, 0);
606 MODULE_DEPEND(evtchn, xenpv, 1, 1, 1);