Subject: USB support added
To: None <current-users@NetBSD.ORG>
From: Lennart Augustsson <augustss@cs.chalmers.se>
List: current-users
Date: 07/12/1998 22:44:32
Hi all!

I've just added USB (Universal Serial Bus) support to NetBSD-current.

At the moment it is only in the i386 port, but it should be
straight-forward to add it to any other port that has PCI.

The USB work is far from finished, but I'd like to get it into current
so it can be tested by more people.  The parts that are finished seem
to be fairly stable.

What we have:
* A UHCI (the Intel standard) host controller driver.
* A OHCI (everyone else's standard) host controller driver.
* A host controller independent framework for handling the
  devices.  This framework presents a mostly USBDI compliant
  interface to the drivers.
+ Support for all kinds of transfers (control, interrupt, bulk,
  and isochronous).
* Power budgeting.
+ Bandwidth budgeting.
* A hub driver.
* A mouse driver.
* A keyboard driver for keyboards supporting the boot protocol.
* A generic HID (Human Interface Device) driver for
  those devices that do not have a special driver.
* A printer driver.
+ A totally generic driver to handle leftover devices.
+ An audio driver.

[The + means work in progress.]

What we don't have:
- Proper handling of devices that are disconnected.  NetBSD lacks
  the functionality for this.
- Suspend/resume handling.  I think this is simply a matter of
  sitting down and writing some code.
- A communication class driver.
- Drivers for a lot of proprietary devices.
- Loadable device drivers.


What you need to do to use USB in NetBSD-current:
* Copy the relevant parts from the GENERIC config file and build a new kernel.
* Run `/dev/MAKEDEV usbs' to make some USB devices.
* If you want to handle handle dynamic attach/detach of devices you
  also need to enable usbd in /etc/rc.conf.

If you want to see the devices that you have connected you can run
the program /usr/sbin/usbdevs.


What can you do with USB?
Well, at the moment the only thing that you can really use without
writing any software of your own is a mouse (I've been running with
a USB mouse for a while now).  The (first) USB mouse is called /dev/ums0
and uses the BusMouse protocol.

When the mouse and keyboard get properly interfaced to wscons and
XFree86 knows about wscons then mouse and keyboard should "just work".

If you have any problems use send-pr or just email me.

	Share and enjoy!

	-- Lennart