Lines Matching full:bus

40 #include <sys/bus.h>
153 usb_root_mount_rel(struct usb_bus *bus)
155 if (bus->bus_roothold != NULL) {
156 DPRINTF("Releasing root mount hold %p\n", bus->bus_roothold);
157 root_mount_rel(bus->bus_roothold);
158 bus->bus_roothold = NULL;
169 struct usb_bus *bus = device_get_ivars(dev);
173 if (bus == NULL) {
180 /* delay vfs_mountroot until the bus is explored */
181 bus->bus_roothold = root_mount_hold(device_get_nameunit(dev));
184 usb_attach_sub(dev, bus);
195 struct usb_bus *bus = device_get_softc(dev);
199 if (bus == NULL) {
204 usb_callout_drain(&bus->power_wdog);
208 usb_root_mount_rel(bus);
211 USB_BUS_LOCK(bus);
214 usb_proc_msignal(USB_BUS_EXPLORE_PROC(bus),
215 &bus->detach_msg[0], &bus->detach_msg[1]);
218 usb_proc_mwait(USB_BUS_EXPLORE_PROC(bus),
219 &bus->detach_msg[0], &bus->detach_msg[1]);
223 usb_proc_mwait(USB_BUS_EXPLORE_PROC(bus),
224 &bus->cleanup_msg[0], &bus->cleanup_msg[1]);
226 USB_BUS_UNLOCK(bus);
231 usb_proc_free(USB_BUS_GIANT_PROC(bus));
232 usb_proc_free(USB_BUS_NON_GIANT_ISOC_PROC(bus));
233 usb_proc_free(USB_BUS_NON_GIANT_BULK_PROC(bus));
237 usb_proc_free(USB_BUS_EXPLORE_PROC(bus));
241 usb_proc_free(USB_BUS_CONTROL_XFER_PROC(bus));
245 usbpf_detach(bus);
256 struct usb_bus *bus = device_get_softc(dev);
260 if (bus == NULL) {
265 USB_BUS_LOCK(bus);
266 usb_proc_msignal(USB_BUS_EXPLORE_PROC(bus),
267 &bus->suspend_msg[0], &bus->suspend_msg[1]);
270 usb_proc_mwait(USB_BUS_EXPLORE_PROC(bus),
271 &bus->suspend_msg[0], &bus->suspend_msg[1]);
273 USB_BUS_UNLOCK(bus);
284 struct usb_bus *bus = device_get_softc(dev);
288 if (bus == NULL) {
293 USB_BUS_LOCK(bus);
294 usb_proc_msignal(USB_BUS_EXPLORE_PROC(bus),
295 &bus->resume_msg[0], &bus->resume_msg[1]);
296 USB_BUS_UNLOCK(bus);
305 usb_bus_reset_async_locked(struct usb_bus *bus)
307 USB_BUS_LOCK_ASSERT(bus, MA_OWNED);
311 if (bus->reset_msg[0].hdr.pm_qentry.tqe_prev != NULL ||
312 bus->reset_msg[1].hdr.pm_qentry.tqe_prev != NULL) {
317 device_printf(bus->parent, "Resetting controller\n");
319 usb_proc_msignal(USB_BUS_EXPLORE_PROC(bus),
320 &bus->reset_msg[0], &bus->reset_msg[1]);
329 struct usb_bus *bus = device_get_softc(dev);
333 if (bus == NULL) {
338 DPRINTF("%s: Controller shutdown\n", device_get_nameunit(bus->bdev));
340 USB_BUS_LOCK(bus);
341 usb_proc_msignal(USB_BUS_EXPLORE_PROC(bus),
342 &bus->shutdown_msg[0], &bus->shutdown_msg[1]);
345 usb_proc_mwait(USB_BUS_EXPLORE_PROC(bus),
346 &bus->shutdown_msg[0], &bus->shutdown_msg[1]);
348 USB_BUS_UNLOCK(bus);
351 device_get_nameunit(bus->bdev));
364 struct usb_bus *bus;
367 bus = ((struct usb_bus_msg *)pm)->bus;
368 udev = bus->devices[USB_ROOT_HUB_ADDR];
370 if (bus->no_explore != 0)
374 USB_BUS_UNLOCK(bus);
376 USB_BUS_LOCK(bus);
380 if (bus->do_probe) {
381 bus->do_probe = 0;
382 bus->driver_added_refcount++;
384 if (bus->driver_added_refcount == 0) {
386 bus->driver_added_refcount = 1;
394 usb_proc_rewakeup(USB_BUS_CONTROL_XFER_PROC(bus));
395 usb_proc_rewakeup(USB_BUS_GIANT_PROC(bus));
396 usb_proc_rewakeup(USB_BUS_NON_GIANT_ISOC_PROC(bus));
397 usb_proc_rewakeup(USB_BUS_NON_GIANT_BULK_PROC(bus));
400 USB_BUS_UNLOCK(bus);
406 usb_bus_powerd(bus);
410 USB_BUS_LOCK(bus);
413 usb_root_mount_rel(bus);
417 usb_pause_mtx(&bus->bus_mtx, USB_MS_TO_TICKS(usb_enum_nice_time));
428 struct usb_bus *bus;
432 bus = ((struct usb_bus_msg *)pm)->bus;
433 udev = bus->devices[USB_ROOT_HUB_ADDR];
434 dev = bus->bdev;
437 USB_BUS_UNLOCK(bus);
449 USB_BUS_LOCK(bus);
451 bus->bdev = NULL;
462 struct usb_bus *bus;
469 bus = ((struct usb_bus_msg *)pm)->bus;
470 udev = bus->devices[USB_ROOT_HUB_ADDR];
472 if (udev == NULL || bus->bdev == NULL)
475 USB_BUS_UNLOCK(bus);
486 bus_generic_shutdown(bus->bdev);
492 device_printf(bus->bdev, "Could not unconfigure root HUB\n");
494 USB_BUS_LOCK(bus);
495 bus->hw_power_state = 0;
496 bus->no_explore = 1;
497 USB_BUS_UNLOCK(bus);
499 if (bus->methods->set_hw_power != NULL)
500 (bus->methods->set_hw_power) (bus);
502 if (bus->methods->set_hw_power_sleep != NULL)
503 (bus->methods->set_hw_power_sleep) (bus, USB_HW_POWER_SUSPEND);
508 USB_BUS_LOCK(bus);
519 struct usb_bus *bus;
526 bus = ((struct usb_bus_msg *)pm)->bus;
527 udev = bus->devices[USB_ROOT_HUB_ADDR];
529 if (udev == NULL || bus->bdev == NULL)
532 USB_BUS_UNLOCK(bus);
538 USB_TAKE_CONTROLLER(device_get_parent(bus->bdev));
540 USB_BUS_LOCK(bus);
541 bus->hw_power_state =
547 bus->no_explore = 0;
548 USB_BUS_UNLOCK(bus);
550 if (bus->methods->set_hw_power_sleep != NULL)
551 (bus->methods->set_hw_power_sleep) (bus, USB_HW_POWER_RESUME);
553 if (bus->methods->set_hw_power != NULL)
554 (bus->methods->set_hw_power) (bus);
559 device_printf(bus->bdev, "Could not configure root HUB\n");
564 device_printf(bus->bdev, "Could not probe and "
571 USB_BUS_LOCK(bus);
582 struct usb_bus *bus;
586 bus = ((struct usb_bus_msg *)pm)->bus;
588 if (bus->bdev == NULL || bus->no_explore != 0)
604 struct usb_bus *bus;
609 bus = ((struct usb_bus_msg *)pm)->bus;
610 udev = bus->devices[USB_ROOT_HUB_ADDR];
612 if (udev == NULL || bus->bdev == NULL)
615 USB_BUS_UNLOCK(bus);
617 bus_generic_shutdown(bus->bdev);
623 device_printf(bus->bdev, "Could not unconfigure root HUB\n");
625 USB_BUS_LOCK(bus);
626 bus->hw_power_state = 0;
627 bus->no_explore = 1;
628 USB_BUS_UNLOCK(bus);
630 if (bus->methods->set_hw_power != NULL)
631 (bus->methods->set_hw_power) (bus);
633 if (bus->methods->set_hw_power_sleep != NULL)
634 (bus->methods->set_hw_power_sleep) (bus, USB_HW_POWER_SHUTDOWN);
639 USB_BUS_LOCK(bus);
651 struct usb_bus *bus;
654 bus = ((struct usb_bus_msg *)pm)->bus;
656 while ((pd = SLIST_FIRST(&bus->pd_cleanup_list)) != NULL) {
657 SLIST_REMOVE(&bus->pd_cleanup_list, pd, usb_fs_privdata, pd_next);
658 USB_BUS_UNLOCK(bus);
662 USB_BUS_LOCK(bus);
670 struct usb_bus *bus = arg;
672 USB_BUS_LOCK_ASSERT(bus, MA_OWNED);
674 usb_callout_reset(&bus->power_wdog,
682 usb_proc_rewakeup(USB_BUS_EXPLORE_PROC(bus)); /* recover from DDB */
686 USB_BUS_UNLOCK(bus);
688 usb_bus_power_update(bus);
690 USB_BUS_LOCK(bus);
702 struct usb_bus *bus;
708 bus = ((struct usb_bus_msg *)pm)->bus;
709 dev = bus->bdev;
713 switch (bus->usbrev) {
716 device_printf(bus->bdev, "12Mbps Full Speed USB v1.0\n");
721 device_printf(bus->bdev, "12Mbps Full Speed USB v1.1\n");
726 device_printf(bus->bdev, "480Mbps High Speed USB v2.0\n");
731 device_printf(bus->bdev, "480Mbps Wireless USB v2.5\n");
736 device_printf(bus->bdev, "5.0Gbps Super Speed USB v3.0\n");
740 device_printf(bus->bdev, "Unsupported USB revision\n");
742 usb_root_mount_rel(bus);
748 bus->hw_power_state =
755 USB_BUS_UNLOCK(bus);
759 if (bus->methods->set_hw_power != NULL) {
760 (bus->methods->set_hw_power) (bus);
765 child = usb_alloc_device(bus->bdev, bus, NULL, 0, 0, 1,
771 if ((bus->devices[USB_ROOT_HUB_ADDR] == NULL) ||
772 (bus->devices[USB_ROOT_HUB_ADDR]->hub == NULL)) {
780 USB_BUS_LOCK(bus);
783 device_printf(bus->bdev, "Root HUB problem, error=%s\n",
786 usb_root_mount_rel(bus);
791 device_set_softc(dev, bus);
794 usb_power_wdog(bus);
803 usb_attach_sub(device_t dev, struct usb_bus *bus)
811 usbpf_attach(bus);
814 bus->explore_msg[0].hdr.pm_callback = &usb_bus_explore;
815 bus->explore_msg[0].bus = bus;
816 bus->explore_msg[1].hdr.pm_callback = &usb_bus_explore;
817 bus->explore_msg[1].bus = bus;
819 bus->detach_msg[0].hdr.pm_callback = &usb_bus_detach;
820 bus->detach_msg[0].bus = bus;
821 bus->detach_msg[1].hdr.pm_callback = &usb_bus_detach;
822 bus->detach_msg[1].bus = bus;
824 bus->attach_msg[0].hdr.pm_callback = &usb_bus_attach;
825 bus->attach_msg[0].bus = bus;
826 bus->attach_msg[1].hdr.pm_callback = &usb_bus_attach;
827 bus->attach_msg[1].bus = bus;
829 bus->suspend_msg[0].hdr.pm_callback = &usb_bus_suspend;
830 bus->suspend_msg[0].bus = bus;
831 bus->suspend_msg[1].hdr.pm_callback = &usb_bus_suspend;
832 bus->suspend_msg[1].bus = bus;
834 bus->resume_msg[0].hdr.pm_callback = &usb_bus_resume;
835 bus->resume_msg[0].bus = bus;
836 bus->resume_msg[1].hdr.pm_callback = &usb_bus_resume;
837 bus->resume_msg[1].bus = bus;
839 bus->reset_msg[0].hdr.pm_callback = &usb_bus_reset;
840 bus->reset_msg[0].bus = bus;
841 bus->reset_msg[1].hdr.pm_callback = &usb_bus_reset;
842 bus->reset_msg[1].bus = bus;
844 bus->shutdown_msg[0].hdr.pm_callback = &usb_bus_shutdown;
845 bus->shutdown_msg[0].bus = bus;
846 bus->shutdown_msg[1].hdr.pm_callback = &usb_bus_shutdown;
847 bus->shutdown_msg[1].bus = bus;
850 SLIST_INIT(&bus->pd_cleanup_list);
851 bus->cleanup_msg[0].hdr.pm_callback = &usb_bus_cleanup;
852 bus->cleanup_msg[0].bus = bus;
853 bus->cleanup_msg[1].hdr.pm_callback = &usb_bus_cleanup;
854 bus->cleanup_msg[1].bus = bus;
860 if (usb_proc_create(USB_BUS_GIANT_PROC(bus),
861 &bus->bus_mtx, device_get_nameunit(dev), USB_PRI_MED)) {
864 } else if (usb_proc_create(USB_BUS_NON_GIANT_ISOC_PROC(bus),
865 &bus->bus_mtx, device_get_nameunit(dev), USB_PRI_HIGHEST)) {
868 } else if (usb_proc_create(USB_BUS_NON_GIANT_BULK_PROC(bus),
869 &bus->bus_mtx, device_get_nameunit(dev), USB_PRI_HIGH)) {
872 } else if (usb_proc_create(USB_BUS_EXPLORE_PROC(bus),
873 &bus->bus_mtx, device_get_nameunit(dev), USB_PRI_MED)) {
876 } else if (usb_proc_create(USB_BUS_CONTROL_XFER_PROC(bus),
877 &bus->bus_mtx, device_get_nameunit(dev), USB_PRI_MED)) {
884 USB_BUS_LOCK(bus);
885 usb_proc_msignal(USB_BUS_EXPLORE_PROC(bus),
886 &bus->attach_msg[0], &bus->attach_msg[1]);
887 USB_BUS_UNLOCK(bus);
890 usb_needs_explore(bus, 1);
900 usb_bus_mem_flush_all_cb(struct usb_bus *bus, struct usb_page_cache *pc,
912 usb_bus_mem_flush_all(struct usb_bus *bus, usb_bus_mem_cb_t *cb)
915 cb(bus, &usb_bus_mem_flush_all_cb);
925 usb_bus_mem_alloc_all_cb(struct usb_bus *bus, struct usb_page_cache *pc,
929 pc->tag_parent = bus->dma_parent_tag;
932 bus->alloc_failed = 1;
945 usb_bus_mem_alloc_all(struct usb_bus *bus, bus_dma_tag_t dmat,
948 bus->alloc_failed = 0;
950 mtx_init(&bus->bus_mtx, device_get_nameunit(bus->parent),
953 mtx_init(&bus->bus_spin_lock, device_get_nameunit(bus->parent),
956 usb_callout_init_mtx(&bus->power_wdog,
957 &bus->bus_mtx, 0);
959 TAILQ_INIT(&bus->intr_q.head);
962 usb_dma_tag_setup(bus->dma_parent_tag, bus->dma_tags,
963 dmat, &bus->bus_mtx, NULL, bus->dma_bits, USB_BUS_DMA_TAG_MAX);
965 if ((bus->devices_max > USB_MAX_DEVICES) ||
966 (bus->devices_max < USB_MIN_DEVICES) ||
967 (bus->devices == NULL)) {
970 bus->alloc_failed = 1; /* failure */
974 cb(bus, &usb_bus_mem_alloc_all_cb);
977 if (bus->alloc_failed) {
978 usb_bus_mem_free_all(bus, cb);
980 return (bus->alloc_failed);
988 usb_bus_mem_free_all_cb(struct usb_bus *bus, struct usb_page_cache *pc,
999 usb_bus_mem_free_all(struct usb_bus *bus, usb_bus_mem_cb_t *cb)
1003 cb(bus, &usb_bus_mem_free_all_cb);
1005 usb_dma_tag_unsetup(bus->dma_parent_tag);
1008 mtx_destroy(&bus->bus_mtx);
1009 mtx_destroy(&bus->bus_spin_lock);
1016 usb_proc_mwait(USB_BUS_EXPLORE_PROC(udev->bus), pm1, pm2);
1022 return (usb_proc_msignal(USB_BUS_EXPLORE_PROC(udev->bus), pm1, pm2));
1028 USB_BUS_LOCK(udev->bus);
1034 USB_BUS_UNLOCK(udev->bus);