I think the #U work is just to setup the bus and also to hardwire the endpoints (i.e. to service real usb interrupts as it's doing now, for performance). It should not depend on user programs, although they can for sure setup the endpoints and the like. Usbd is probably where the enumeration belongs, but I'd say that just that. The driver is the one who knows how to configure the device, once it has been started by usbd (which only needs to look at usbdb). So, should we start perhaps by reworking the relationship between usbd and the drivers? I don't really know.