Lines Matching refs:xbs
279 xenbusb_enumerate_bus(struct xenbusb_softc *xbs) in xenbusb_enumerate_bus() argument
286 error = xs_directory(XST_NIL, xbs->xbs_node, "", &type_count, &types); in xenbusb_enumerate_bus()
291 XENBUSB_ENUMERATE_TYPE(xbs->xbs_dev, types[type_idx]); in xenbusb_enumerate_bus()
411 xenbusb_release_confighook(struct xenbusb_softc *xbs) in xenbusb_release_confighook() argument
413 mtx_lock(&xbs->xbs_lock); in xenbusb_release_confighook()
414 KASSERT(xbs->xbs_connecting_children > 0, in xenbusb_release_confighook()
416 xbs->xbs_connecting_children--; in xenbusb_release_confighook()
417 if (xbs->xbs_connecting_children == 0 in xenbusb_release_confighook()
418 && (xbs->xbs_flags & XBS_ATTACH_CH_ACTIVE) != 0) { in xenbusb_release_confighook()
419 xbs->xbs_flags &= ~XBS_ATTACH_CH_ACTIVE; in xenbusb_release_confighook()
420 mtx_unlock(&xbs->xbs_lock); in xenbusb_release_confighook()
421 config_intrhook_disestablish(&xbs->xbs_attach_ch); in xenbusb_release_confighook()
423 mtx_unlock(&xbs->xbs_lock); in xenbusb_release_confighook()
456 struct xenbusb_softc *xbs; in xenbusb_probe_children() local
473 xbs = device_get_softc(dev); in xenbusb_probe_children()
474 xenbusb_release_confighook(xbs); in xenbusb_probe_children()
554 struct xenbusb_softc *xbs; in xenbusb_devices_changed() local
562 xbs = (struct xenbusb_softc *)watch->callback_data; in xenbusb_devices_changed()
563 dev = xbs->xbs_dev; in xenbusb_devices_changed()
590 for (component = 0; component < xbs->xbs_id_components; component++) { in xenbusb_devices_changed()
599 if (*id != 0 && component >= xbs->xbs_id_components - 1) { in xenbusb_devices_changed()
600 xenbusb_add_device(xbs->xbs_dev, type, id); in xenbusb_devices_changed()
601 taskqueue_enqueue(taskqueue_thread, &xbs->xbs_probe_children); in xenbusb_devices_changed()
636 struct xenbusb_softc *xbs; in xenbusb_add_device() local
642 xbs = device_get_softc(dev); in xenbusb_add_device()
644 sbuf_printf(devpath_sbuf, "%s/%s/%s", xbs->xbs_node, type, id); in xenbusb_add_device()
714 mtx_lock(&xbs->xbs_lock); in xenbusb_add_device()
715 xbs->xbs_connecting_children++; in xenbusb_add_device()
716 mtx_unlock(&xbs->xbs_lock); in xenbusb_add_device()
734 struct xenbusb_softc *xbs; in xenbusb_attach() local
736 xbs = device_get_softc(dev); in xenbusb_attach()
737 mtx_init(&xbs->xbs_lock, "xenbusb softc lock", NULL, MTX_DEF); in xenbusb_attach()
738 xbs->xbs_node = bus_node; in xenbusb_attach()
739 xbs->xbs_id_components = id_components; in xenbusb_attach()
740 xbs->xbs_dev = dev; in xenbusb_attach()
751 xbs->xbs_attach_ch.ich_func = xenbusb_nop_confighook_cb; in xenbusb_attach()
752 xbs->xbs_attach_ch.ich_arg = dev; in xenbusb_attach()
753 config_intrhook_establish(&xbs->xbs_attach_ch); in xenbusb_attach()
754 xbs->xbs_flags |= XBS_ATTACH_CH_ACTIVE; in xenbusb_attach()
755 xbs->xbs_connecting_children = 1; in xenbusb_attach()
765 (void)xenbusb_enumerate_bus(xbs); in xenbusb_attach()
768 xbs->xbs_device_watch.node = bus_node; in xenbusb_attach()
769 xbs->xbs_device_watch.callback = xenbusb_devices_changed; in xenbusb_attach()
770 xbs->xbs_device_watch.callback_data = (uintptr_t)xbs; in xenbusb_attach()
776 xbs->xbs_device_watch.max_pending = 0; in xenbusb_attach()
778 TASK_INIT(&xbs->xbs_probe_children, 0, xenbusb_probe_children_cb, dev); in xenbusb_attach()
780 xs_register_watch(&xbs->xbs_device_watch); in xenbusb_attach()
782 xenbusb_release_confighook(xbs); in xenbusb_attach()
949 struct xenbusb_softc *xbs; in xenbusb_write_ivar() local
952 xbs = device_get_softc(dev); in xenbusb_write_ivar()
953 xenbusb_release_confighook(xbs); in xenbusb_write_ivar()