Some things that need to be done in no particular order: -------------------------------------------------------- Find race condition in UHCI driver. Rarely (under heavy USB load) you get a "uhci_idone: ii=0x%x is done!". This "cannot happen". Add lots of bus_dmamap_sync(). Do bandwidth accounting. Use lock manager locks. Use the pool allocator for TDs et al. Throw out more USBDI gunk. Make hub driver notice transition between self and bus powered state. Some hubs change the number of available ports on this transition. :( Handle overcurrent conditions. Make it possible to open any device in a "generic" way, i.e., like ugen. Rewrite mouse and keyboard driver to handle devices which use the report ID. One way would be to attach ums and ukbd to uhid. Rotate the QHs for bulk transport to get fairer scheduling. Change HC drivers to queue multiple request for an endpoint to get better performance. Add isoc to OHCI driver. Do memory deallocation when HC driver is detached. uaudio problems: mixer names are awful, use some heuristics. implement selector units implement input test with more devices Stylistic changes: use usb_ and usbd_ consistently rearrange the contents and names of some files (Nick) Document device driver API. Document HC driver API. Handle CLEAR_ENPOINT_STALL centrally. Use splsoftusb() or a thread to deliver callbacks. Add threads to the Ethernet drivers. Change uses of LE macro to the standard functions. Add events for HC attach/detach and driver attach/detach.