Some things that need to be done in no particular order: -------------------------------------------------------- Before 1.5: ----------- Port FreeBSD umass driver. ----------- 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. 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_ENDPOINT_STALL centrally. Use splsoftusb() or a thread to deliver callbacks. Add threads to the Ethernet drivers. Change what's done at watchdog timeout inb if_{a,c,k}ue.c; what we have now doesn't work because it's done in an interrupt context. Rewrite HID driver to handle report IDs properly. Perhaps there should be a hiddev to which hid with different IDs can attach? Get rid of hcpriv.