*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->OpenBSD man pages -> uhub (4)              



NAME    [Toc]    [Back]

     usb - introduction to Universal Serial Bus support

SYNOPSIS    [Toc]    [Back]

     ehci*   at pci? dev ? function ?
     uhci*   at pci? dev ? function ?
     ohci*   at pci? dev ? function ?
     usb*    at ehci? flags 0x00
     usb*    at uhci? flags 0x00
     usb*    at ohci? flags 0x00
     uhub*   at usb?
     uhub*   at uhub? port ? configuration ? interface ? vendor ?

     #include <dev/usb/usb.h>
     #include <dev/usb/usbhid.h>

DESCRIPTION    [Toc]    [Back]

     OpenBSD provides machine-independent bus support and drivers
for Universal
 Serial Bus (USB) devices.

     The OpenBSD usb driver has three layers  (like  scsi(4)  and
pcmcia(4)): the
     controller,  the  bus, and the device layer.  The controller
attaches to a
     physical bus (like pci(4)).  The USB  bus  attaches  to  the
controller and
     the  root  hub attaches to the controller.  Further devices,
which may include
 further hubs, attach to other  hubs.   The  attachment
forms the same
     tree  structure  as  the physical USB device tree.  For each
USB device
     there may be additional drivers attached to it.

     The uhub device controls USB hubs and must always be present
since there
     is at least one root hub in any USB system.

     The  flags are used to specify if the devices on the USB bus
should be
     probed early in the boot process.  If the flags  are  specified with a value
 of 1, the USB bus will be probed when the USB host device
is attached
     instead of waiting until  kernel  processes  start  running.
This is useful
     for  USB  console keyboards so that the keyboard is attached
before getting
     the root prompt on ``boot -a''.

SUPPORTED DEVICES    [Toc]    [Back]

     OpenBSD includes machine-independent USB drivers, sorted  by
device type
     and driver name:

   Storage devices    [Toc]    [Back]
        umass(4)       USB  Mass  Storage Devices, e.g., external
disk drives.

   Ethernet adapters    [Toc]    [Back]
        aue(4)        ADMtek AN986 / ADM8511 Pegasus  family  USB
Ethernet interfaces.

        axe(4)         ASIX  Electronics AX88172 USB Ethernet interfaces.
        cdce(4)       USB Host-to-Host (aka  USB-to-USB)  bridges
based on the
                      USB  Communication  Device  Class (CDC) and
Ethernet subclass.

        cue(4)        CATC USB-EL1201A-based Ethernet interfaces.
        kue(4)        Kawasaki LSI KL5KUSB101B-based Ethernet interfaces.
        url(4)        Realtek RTL8150L-based Ethernet interfaces.
        wi(4)          WaveLAN/IEEE,  PRISM  2-3  and  Spectrum24
802.11DS wireless
                      network interfaces.

   Serial and parallel interfaces    [Toc]    [Back]
        ubsa(4)       Belkin serial adapters.
        ucom(4)       Serial port-like devices.
        uftdi(4)      FTDI FT8U100AX-based serial adapters.
        ulpt(4)       USB Printers.
        umct(4)       MCT USB-RS232 serial adapters.
        umodem(4)     USB Modems.
        uplcom(4)     Prolific PL-2303 serial adapters.
        uvscom(4)     SUNTAC Slipper U VS-10U serial adapters.

   Audio devices    [Toc]    [Back]
        uaudio(4)     Audio devices.
        umidi(4)      USB MIDI devices.
        urio(4)       Diamond Multimedia Rio MP3 players.

   Radio receiver devices    [Toc]    [Back]
        udsbr(4)      D-Link DSB-R100 USB radio.

   Human Interface Devices    [Toc]    [Back]
        uhid(4)       Generic driver for Human Interface Devices.
        uhidev(4)      Base  driver  for  all Human Interface Devices.
        ukbd(4)       USB keyboards that follow the  boot  protocol.
        ums(4)        USB mouse devices.

   Miscellaneous devices    [Toc]    [Back]
        ugen(4)       Generic driver for unknown USB devices.
        upl(4)        Prolific based host-to-host adapters.
        uscanner(4)   USB scanners.
        usscanner(4)  SCSI-over-USB scanners.
        uvisor(4)     Handspring Visor.
        uyap(4)       YAP phone firmware loader.

INTRODUCTION TO USB    [Toc]    [Back]

     The  USB is a 12 Mb/s serial bus (1.5 Mb/s for low speed devices).  Each
     USB has a host controller that is the master of the bus; all
other devices
 on the bus only speak when spoken to.

     There  can  be  up  to 127 devices (apart from the host controller) on a bus,
     each with its own address.  The addresses are  assigned  dynamically by the
     host when each device is attached to the bus.

     Within  each  device  there can be up to 16 endpoints.  Each
endpoint is individually
 addressed and the addresses are static.  Each  of
these endpoints
 will communicate in one of four different modes: control,
     isochronous, bulk, or interrupt.  A  device  always  has  at
least one endpoint.
   This is a control endpoint at address 0 and is used
to give commands
 to the device and extract basic data, such as descriptors, from the
     device.  Each endpoint, except the control endpoint, is unidirectional.

     The endpoints in a device are grouped into  interfaces.   An
interface is a
     logical  unit  within a device; e.g., a compound device with
both a keyboard
 and a trackball would present one interface for  each.
An interface
     can  sometimes be set into different modes, called alternate
     which affects how it operates.  Different alternate settings
can have
     different endpoints within it.

     A device may operate in different configurations.  Depending
on the configuration
 the device may present  different  sets  of  endpoints and interfaces.

     Each device located on a hub has several config(8) locators:

     port           Number of the port on closest upstream hub.
     configuration  Configuration the device must be in for  this
driver to attach.
  This locator does not set the configuration; it is
                    iterated by the bus enumeration.
     interface      Interface number within a device that an  interface driver
                    attaches to.
     vendor         16-bit vendor ID of the device.
     product        16-bit product ID of the device.
     release         16-bit  release (revision) number of the device.

     The first locator can be used to pin down a  particular  device according
     to its physical position in the device tree.  The last three
locators can
     be used to pin down a particular device  according  to  what
device it actually

     The  bus  enumeration  of  the  USB  bus proceeds in several

     1.   Any device-specific driver can attach to the device.

     2.   If none is found, any device class specific driver  can

     3.   If none is found, all configurations are iterated over.
For each
          configuration all the interfaces are iterated over  and
          drivers  can  attach.  If any interface driver attached
in a certain
          configuration, the  iteration  over  configurations  is

     4.    If  still  no drivers have been found, the generic USB
driver can attach.


     Use the following to get access to the USB  specific  structures and defines.
  #include <dev/usb/usb.h>

     The  /dev/usbN device can be opened and a few operations can
be performed
     on it.  The poll(2) system call will say that I/O is  possible on the controller
  device when a USB device has been connected or disconnected to
     the bus.

     The following ioctl(2) commands are supported  on  the  controller device:

     USB_DEVICEINFO struct usb_device_info
             This  command  can be used to retrieve some information about a device
 on the bus.  The addr field  should  be  filled
before the call
             and  the  other fields will be filled by information
about the device
 on that address.  Should no such  device  exist
an error is

             struct usb_device_info {
                     uByte   addr;           /* device address */
                     char    product[USB_MAX_STRING_LEN];
                     char    vendor[USB_MAX_STRING_LEN];
                     char    release[8];
                     uByte   class;
                     uByte   config;
                     uByte   lowspeed;
                     int     power;
                     int     nports;
                     uByte   ports[16];
             #define USB_PORT_ENABLED 0xff
             #define USB_PORT_SUSPENDED 0xfe
             #define USB_PORT_POWERED 0xfd
             #define USB_PORT_DISABLED 0xfc

             The product,  vendor,  and  release  fields  contain
             descriptions of the device.

             The class field contains the device class.

             The  config field shows the current configuration of
the device.

             The lowspeed field is set if the device is a USB low
speed device.

             The  power field shows the power consumption in milli-amps drawn
             at 5 volts, or zero if the device is self powered.

             If the device is a hub the nports field is  non-zero
and the ports
             field  contains  the  addresses of the connected devices.  If no device
 is connected to a port one  of  the  USB_PORT_*
values indicates
 its status.

     USB_DEVICESTATS struct usb_device_stats
             This  command  retrieves  statistics  about the controller.

             struct usb_device_stats {
                     u_long  requests[4];

             The requests field is indexed by the transfer  kind,
i.e.  UE_*,
             and  indicates  how many transfers of each kind that
has been completed
 by the controller.

     USB_REQUEST struct usb_ctl_request
             This command can be used to  execute  arbitrary  requests on the
             control  pipe.  This is DANGEROUS and should be used
with great
             care since it can destroy the bus integrity.

     The include file <dev/usb/usb.h>  contains  definitions  for
the types used
     by the various ioctl(2) calls.  The naming convention of the
fields for
     the various USB descriptors exactly follows  the  naming  in
the USB specification.
   Byte  sized fields can be accessed directly, but
word (16-bit)
     sized fields  must  be  accessed  by  the  UGETW(field)  and
USETW(field, value)
     macros to handle byte order and alignment properly.

     The  include  file <dev/usb/usbhid.h> similarly contains the
     for Human Interface Devices (HID).

SEE ALSO    [Toc]    [Back]

     usbhidaction(1), usbhidctl(1), aue(4),  axe(4),  cardbus(4),
     cue(4),   eisa(4),   intro(4),  isa(4),  isapnp(4),  kue(4),
pci(4), pcmcia(4),
     uaudio(4), ubsa(4), ucom(4),  udsbr(4),  uftdi(4),  ugen(4),
     uhidev(4),  uhub(4),  ukbd(4),  ulpt(4),  umass(4), umct(4),
     umodem(4), ums(4), upl(4), uplcom(4), urio(4),  url(4),  uscanner(4),
     usscanner(4),  uvisor(4),  uvscom(4), uyap(4), wi(4), usbdevs(8)

     The USB specifications can be found at:


HISTORY    [Toc]    [Back]

     The usb driver appeared in OpenBSD 2.6.

BUGS    [Toc]    [Back]

     There should be a serial number locator,  but  OpenBSD  does
not have string
     valued locators.

OpenBSD      3.6                           July      12,     1998
[ Back ]
 Similar pages
Name OS Title
usb FreeBSD Universal Serial Bus
ubsa OpenBSD USB support for Belkin serial adapters
ubsa FreeBSD USB support for Belkin serial adapters
umct OpenBSD USB support for MCT USB-RS232 serial adapters driver
uftdi OpenBSD USB support for serial adapters based on the FT8U100AX
uftdi FreeBSD USB support for serial adapters based on the FT8U100AX and FT8U232AM
uplcom FreeBSD USB support for Prolific PL-2303 serial adapters driver
uplcom OpenBSD USB support for Prolific PL-2303 serial adapters driver
uvscom FreeBSD USB support for SUNTAC Slipper U VS-10U serial adapters driver
uvscom OpenBSD USB support for SUNTAC Slipper U VS-10U serial adapters driver
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service