32#include <sys/condvar.h>
34#include <dev/fdt/fdt_common.h>
35#include <dev/ofw/ofw_bus_subr.h>
36#include <dev/ofw/openfirm.h>
54#define MAX_UDEV_NEST (MAX(USB_HUB_MAX_DEPTH, USB_SS_HUB_DEPTH_MAX) + 1)
71 snprintf(compat,
sizeof(compat),
"usb%x,%x",
74 if (!ofw_bus_node_is_compatible(
child, compat))
76 proplen = OF_getencprop(
child,
"reg", &port,
sizeof(port));
77 if (proplen !=
sizeof(port))
106 static const char *properties[] = {
113 for (i = 0; i < nitems(properties); ++i) {
114 proplen = OF_getprop(node, properties[i], mac,
sizeof(mac));
128 phandle_t controller_node, node;
136 if ((controller_node = ofw_bus_get_node(udev->
bus->
parent)) == -1)
146 KASSERT(idx < nitems(udev_stack), (
"Too many hubs"));
147 udev_stack[idx++] = ud;
162 for (node = controller_node;;) {
164 if (idx == 0 || node == -1)
struct usb_device_descriptor ddesc
struct usb_device * parent_hub
struct usb_device * ue_udev
uint8_t ue_eaddr[ETHER_ADDR_LEN]
int usb_fdt_get_mac_addr(device_t dev, struct usb_ether *ue)
static phandle_t find_udev_in_children(phandle_t parent, struct usb_device *udev)
static bool is_valid_mac_addr(uint8_t *addr)
phandle_t usb_fdt_get_node(device_t dev, struct usb_device *udev)