Lines Matching defs:xi

586 xen_intsrc_add(struct xen_softc *sc, struct xen_intsrc *xi)
588 refcnt_init(&xi->xi_refcnt);
590 SLIST_INSERT_HEAD(&sc->sc_intrs, xi, xi_entry);
597 struct xen_intsrc *xi = NULL;
600 SLIST_FOREACH(xi, &sc->sc_intrs, xi_entry) {
601 if (xi->xi_port == port) {
602 refcnt_take(&xi->xi_refcnt);
607 return (xi);
611 xen_intsrc_release(struct xen_softc *sc, struct xen_intsrc *xi)
613 refcnt_rele_wake(&xi->xi_refcnt);
619 struct xen_intsrc *xi;
622 SLIST_FOREACH(xi, &sc->sc_intrs, xi_entry) {
623 if (xi->xi_port == port) {
624 SLIST_REMOVE(&sc->sc_intrs, xi, xen_intsrc, xi_entry);
629 if (xi != NULL)
630 refcnt_finalize(&xi->xi_refcnt, "xenisrm");
631 return (xi);
635 xen_intr_mask_acquired(struct xen_softc *sc, struct xen_intsrc *xi)
637 xi->xi_masked = 1;
638 set_bit(xi->xi_port, &sc->sc_ipg->evtchn_mask[0]);
642 xen_intr_unmask_release(struct xen_softc *sc, struct xen_intsrc *xi)
646 xi->xi_masked = 0;
647 if (!test_bit(xi->xi_port, &sc->sc_ipg->evtchn_mask[0])) {
648 xen_intsrc_release(sc, xi);
651 eu.port = xi->xi_port;
652 xen_intsrc_release(sc, xi);
672 struct xen_intsrc *xi;
694 if ((xi = xen_intsrc_acquire(sc, port)) == NULL) {
699 xi->xi_evcnt.ec_count++;
700 xen_intr_mask_acquired(sc, xi);
701 if (!task_add(xi->xi_taskq, &xi->xi_task))
702 xen_intsrc_release(sc, xi);
711 struct xen_intsrc *xi;
713 if ((xi = xen_intsrc_acquire(sc, (evtchn_port_t)xih)) != NULL) {
714 xen_intr_mask_acquired(sc, xi);
715 if (!task_add(xi->xi_taskq, &xi->xi_task))
716 xen_intsrc_release(sc, xi);
733 struct xen_intsrc *xi;
737 if ((xi = xen_intsrc_acquire(sc, (evtchn_port_t)xih)) != NULL) {
738 taskq_barrier(xi->xi_taskq);
739 xen_intsrc_release(sc, xi);
747 struct xen_intsrc *xi;
750 if ((xi = xen_intsrc_acquire(sc, (evtchn_port_t)xih)) != NULL) {
751 es.port = xi->xi_port;
752 xen_intsrc_release(sc, xi);
762 struct xen_intsrc *xi;
771 if (port && (xi = xen_intsrc_acquire(sc, port)) != NULL) {
772 xen_intsrc_release(sc, xi);
778 xi = malloc(sizeof(*xi), M_DEVBUF, M_NOWAIT | M_ZERO);
779 if (xi == NULL)
782 xi->xi_port = (evtchn_port_t)*xih;
784 xi->xi_handler = handler;
785 xi->xi_ctx = arg;
787 xi->xi_taskq = taskq_create(name, 1, IPL_NET, TASKQ_MPSAFE);
788 if (!xi->xi_taskq) {
791 free(xi, M_DEVBUF, sizeof(*xi));
794 task_set(&xi->xi_task, xen_intr_dispatch, xi);
805 free(xi, M_DEVBUF, sizeof(*xi));
808 *xih = xi->xi_port = eau.port;
810 *xih = xi->xi_port = port;
815 xi->xi_noclose = 1;
821 ebv.port = xi->xi_port;
829 evcount_attach(&xi->xi_evcnt, name, &sc->sc_irq);
831 xen_intsrc_add(sc, xi);
834 set_bit(xi->xi_port, &sc->sc_ipg->evtchn_mask[0]);
839 es.port = xi->xi_port;
868 struct xen_intsrc *xi;
870 if ((xi = xen_intsrc_remove(sc, port)) == NULL)
873 evcount_detach(&xi->xi_evcnt);
875 taskq_destroy(xi->xi_taskq);
877 set_bit(xi->xi_port, &sc->sc_ipg->evtchn_mask[0]);
878 clear_bit(xi->xi_port, &sc->sc_ipg->evtchn_pending[0]);
880 if (!xi->xi_noclose) {
881 ec.port = xi->xi_port;
884 sc->sc_dev.dv_xname, xi->xi_port);
888 free(xi, M_DEVBUF, sizeof(*xi));
896 struct xen_intsrc *xi = arg;
898 if (xi->xi_handler)
899 xi->xi_handler(xi->xi_ctx);
901 xen_intr_unmask_release(sc, xi);
908 struct xen_intsrc *xi;
912 SLIST_FOREACH(xi, &sc->sc_intrs, xi_entry) {
913 if (!xi->xi_masked) {
914 eu.port = xi->xi_port;
918 sc->sc_dev.dv_xname, xi->xi_port);
920 if (test_bit(xi->xi_port, &sc->sc_ipg->evtchn_mask[0]))
922 sc->sc_dev.dv_xname, xi->xi_port);
933 struct xen_intsrc *xi;
935 if ((xi = xen_intsrc_acquire(sc, port)) != NULL) {
936 xen_intr_mask_acquired(sc, xi);
937 xen_intsrc_release(sc, xi);
946 struct xen_intsrc *xi;
948 if ((xi = xen_intsrc_acquire(sc, port)) != NULL)
949 return (xen_intr_unmask_release(sc, xi));