1b2c1f437SNick Hibma.\" Copyright (c) 1997, 1998 2eddc45e7SJeroen Ruigrok van der Werven.\" Nick Hibma <n_hibma@FreeBSD.org>. All rights reserved. 3b2c1f437SNick Hibma.\" 4b2c1f437SNick Hibma.\" Redistribution and use in source and binary forms, with or without 5b2c1f437SNick Hibma.\" modification, are permitted provided that the following conditions 6b2c1f437SNick Hibma.\" are met: 7b2c1f437SNick Hibma.\" 1. Redistributions of source code must retain the above copyright 8b2c1f437SNick Hibma.\" notice, this list of conditions and the following disclaimer. 9b2c1f437SNick Hibma.\" 2. Redistributions in binary form must reproduce the above copyright 10b2c1f437SNick Hibma.\" notice, this list of conditions and the following disclaimer in the 11b2c1f437SNick Hibma.\" documentation and/or other materials provided with the distribution. 1217b1e1dfSThomas Quinot.\" 3. Neither the name of the author nor the names of any co-contributors 13b2c1f437SNick Hibma.\" may be used to endorse or promote products derived from this software 14b2c1f437SNick Hibma.\" without specific prior written permission. 15b2c1f437SNick Hibma.\" 16b2c1f437SNick Hibma.\" THIS SOFTWARE IS PROVIDED BY NICK HIBMA AND CONTRIBUTORS ``AS IS'' AND 17b2c1f437SNick Hibma.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18b2c1f437SNick Hibma.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19b2c1f437SNick Hibma.\" ARE DISCLAIMED. IN NO EVENT SHALL NICK HIBMA OR THE VOICES IN HIS HEAD 20b2c1f437SNick Hibma.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21b2c1f437SNick Hibma.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22b2c1f437SNick Hibma.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23b2c1f437SNick Hibma.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24b2c1f437SNick Hibma.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25b2c1f437SNick Hibma.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 26b2c1f437SNick Hibma.\" THE POSSIBILITY OF SUCH DAMAGE. 27b2c1f437SNick Hibma.\" 287f3dea24SPeter Wemm.\" $FreeBSD$ 29b2c1f437SNick Hibma.\" 30b2c1f437SNick Hibma.Dd February 21, 1999 31474fc32bSAlexey Zelkin.Dt USB 4 323d45e180SRuslan Ermilov.Os 33b2c1f437SNick Hibma.Sh NAME 34b2c1f437SNick Hibma.Nm usb 35b2c1f437SNick Hibma.Nd Universal Serial Bus 36b2c1f437SNick Hibma.Sh SYNOPSIS 37b9781e20SJeroen Ruigrok van der Werven.Cd "device usb" 38a31999caSJosef Karthauser.Pp 3990305461SRuslan Ermilov.In dev/usb/usb.h 4090305461SRuslan Ermilov.In dev/usb/usbhid.h 41b2c1f437SNick Hibma.Sh DESCRIPTION 42d4be94a1SChris Costello.Fx 43b2c1f437SNick Hibmaprovides machine-independent bus support and drivers for 44b2c1f437SNick Hibma.Tn USB 45b2c1f437SNick Hibmadevices. 46b2c1f437SNick Hibma.Pp 47b2c1f437SNick HibmaThe 48b2c1f437SNick Hibma.Nm 49b2c1f437SNick Hibmadriver has three layers: the controller, the bus, and the 506d249eeeSSheldon Hearndevice layer. 516d249eeeSSheldon HearnThe controller attaches to a physical bus 52b2c1f437SNick Hibma(like 53b2c1f437SNick Hibma.Xr pci 4 ) . 54b2c1f437SNick HibmaThe 55b2c1f437SNick Hibma.Tn USB 5690305461SRuslan Ermilovbus attaches to the controller, and the root hub attaches 57b2c1f437SNick Hibmato the controller. 58b2c1f437SNick HibmaAny devices attached to the bus will attach to the root hub 5990305461SRuslan Ermilovor another hub attached to the 6090305461SRuslan Ermilov.Tn USB 6190305461SRuslan Ermilovbus. 62b2c1f437SNick Hibma.Pp 63b2c1f437SNick HibmaThe 64b2c1f437SNick Hibma.Nm uhub 65b2c1f437SNick Hibmadevice will always be present as it is needed for the 66b2c1f437SNick Hibmaroot hub. 67b2c1f437SNick Hibma.Sh INTRODUCTION TO USB 68b2c1f437SNick HibmaThe 69b2c1f437SNick Hibma.Tn USB 70b2c1f437SNick Hibmais a 12 Mb/s serial bus (1.5 Mb/s for low speed devices). 71b2c1f437SNick HibmaEach 72b2c1f437SNick Hibma.Tn USB 73b2c1f437SNick Hibmahas a host controller that is the master of the bus; 74b2c1f437SNick Hibmaall other devices on the bus only speak when spoken to. 75b2c1f437SNick Hibma.Pp 76b2c1f437SNick HibmaThere can be up to 127 devices (apart from the host controller) 77b2c1f437SNick Hibmaon a bus, each with its own address. 78b2c1f437SNick HibmaThe addresses are assigned 79b2c1f437SNick Hibmadynamically by the host when each device is attached to the bus. 80b2c1f437SNick Hibma.Pp 81b2c1f437SNick HibmaWithin each device there can be up to 16 endpoints. 82b2c1f437SNick HibmaEach endpoint 83b2c1f437SNick Hibmais individually addressed and the addresses are static. 84b2c1f437SNick HibmaEach of these endpoints will communicate in one of four different modes: 8590305461SRuslan Ermilov.Em control , isochronous , bulk , 8690305461SRuslan Ermilovor 8790305461SRuslan Ermilov.Em interrupt . 88b2c1f437SNick HibmaA device always has at least one endpoint. 89b2c1f437SNick HibmaThis endpoint has address 0 and is a control 90b2c1f437SNick Hibmaendpoint and is used to give commands to and extract basic data, 91b2c1f437SNick Hibmasuch as descriptors, from the device. 92b2c1f437SNick HibmaEach endpoint, except the control endpoint, is unidirectional. 93b2c1f437SNick Hibma.Pp 94b2c1f437SNick HibmaThe endpoints in a device are grouped into interfaces. 9557e4378bSRuslan ErmilovAn interface is a logical unit within a device; e.g.\& 96b2c1f437SNick Hibmaa compound device with both a keyboard and a trackball would present 97b2c1f437SNick Hibmaone interface for each. 98b2c1f437SNick HibmaAn interface can sometimes be set into different modes, 99b2c1f437SNick Hibmacalled alternate settings, which affects how it operates. 100b2c1f437SNick HibmaDifferent alternate settings can have different endpoints 101b2c1f437SNick Hibmawithin it. 102b2c1f437SNick Hibma.Pp 103b2c1f437SNick HibmaA device may operate in different configurations. 104b2c1f437SNick HibmaDepending on the 10590305461SRuslan Ermilovconfiguration, the device may present different sets of endpoints 106b2c1f437SNick Hibmaand interfaces. 107d962d52aSRuslan Ermilov.\" .Pp 108d962d52aSRuslan Ermilov.\" Each device located on a hub has several 109d962d52aSRuslan Ermilov.\" .Xr config 8 110d962d52aSRuslan Ermilov.\" locators: 111d962d52aSRuslan Ermilov.\" .Bl -tag -compact -width xxxxxx 112d962d52aSRuslan Ermilov.\" .It Cd port 113d962d52aSRuslan Ermilov.\" this is the number of the port on the closest upstream hub. 114d962d52aSRuslan Ermilov.\" .It Cd configuration 115d962d52aSRuslan Ermilov.\" this is the configuration the device must be in for this driver to attach. 116d962d52aSRuslan Ermilov.\" This locator does not set the configuration; it is iterated by the bus 117d962d52aSRuslan Ermilov.\" enumeration. 118d962d52aSRuslan Ermilov.\" .It Cd interface 119d962d52aSRuslan Ermilov.\" this is the interface number within a device that an interface driver 120d962d52aSRuslan Ermilov.\" attaches to. 121d962d52aSRuslan Ermilov.\" .It Cd vendor 122d962d52aSRuslan Ermilov.\" this is the 16 bit vendor id of the device. 123d962d52aSRuslan Ermilov.\" .It Cd product 124d962d52aSRuslan Ermilov.\" this is the 16 bit product id of the device. 125d962d52aSRuslan Ermilov.\" .It Cd release 126d962d52aSRuslan Ermilov.\" this is the 16 bit release (revision) number of the device. 127d962d52aSRuslan Ermilov.\" .El 128d962d52aSRuslan Ermilov.\" The first locator can be used to pin down a particular device 129d962d52aSRuslan Ermilov.\" according to its physical position in the device tree. 130d962d52aSRuslan Ermilov.\" The last three locators can be used to pin down a particular 131d962d52aSRuslan Ermilov.\" device according to what device it actually is. 132b2c1f437SNick Hibma.Pp 133b2c1f437SNick HibmaThe bus enumeration of the 134b2c1f437SNick Hibma.Tn USB 135b2c1f437SNick Hibmabus proceeds in several steps: 136b2c1f437SNick Hibma.Bl -enum 137b2c1f437SNick Hibma.It 13890305461SRuslan ErmilovAny device specific driver can attach to the device. 139b2c1f437SNick Hibma.It 140b2c1f437SNick HibmaIf none is found, any device class specific driver can attach. 141b2c1f437SNick Hibma.It 142b2c1f437SNick HibmaIf none is found, all configurations are iterated over. 14390305461SRuslan ErmilovFor each configuration, all the interfaces are iterated over, and interface 144b2c1f437SNick Hibmadrivers can attach. 145b2c1f437SNick HibmaIf any interface driver attached in a certain 14690305461SRuslan Ermilovconfiguration, the iteration over configurations is stopped. 147b2c1f437SNick Hibma.It 148b2c1f437SNick HibmaIf still no drivers have been found, the generic 149b2c1f437SNick Hibma.Tn USB 150b2c1f437SNick Hibmadriver can attach. 151b2c1f437SNick Hibma.El 152b2c1f437SNick Hibma.Sh USB CONTROLLER INTERFACE 153b2c1f437SNick HibmaUse the following to get access to the 154b2c1f437SNick Hibma.Tn USB 155f87717faSMike Pritchardspecific structures and defines. 15690305461SRuslan Ermilov.Pp 15790305461SRuslan Ermilov.In dev/usb/usb.h 158b2c1f437SNick Hibma.Pp 159b2c1f437SNick HibmaThe 16090305461SRuslan Ermilov.Pa /dev/usb Ns Ar N 161b2c1f437SNick Hibmacan be opened and a few operations can be performed on it. 162b2c1f437SNick HibmaThe 163b2c1f437SNick Hibma.Xr poll 2 164b2c1f437SNick Hibmasystem call will say that I/O is possible on the controller device when a 165b2c1f437SNick Hibma.Tn USB 166b2c1f437SNick Hibmadevice has been connected or disconnected to the bus. 167b2c1f437SNick Hibma.Pp 168b2c1f437SNick HibmaThe following 169b2c1f437SNick Hibma.Xr ioctl 2 170b2c1f437SNick Hibmacommands are supported on the controller device: 171b2c1f437SNick Hibma.Bl -tag -width xxxxxx 172b2c1f437SNick Hibma.It Dv USB_DISCOVER 173b2c1f437SNick HibmaThis command will cause a complete bus discovery to be initiated. 174b2c1f437SNick HibmaIf any devices attached or detached from the bus they will be 175b2c1f437SNick Hibmaprocessed during this command. 176b2c1f437SNick HibmaThis is the only way that new devices are found on the bus. 17790305461SRuslan Ermilov.It Dv USB_DEVICEINFO Vt "struct usb_device_info" 178b2c1f437SNick HibmaThis command can be used to retrieve some information about a device 179b2c1f437SNick Hibmaon the bus. 180b2c1f437SNick HibmaThe 181b2c1f437SNick Hibma.Va addr 182b2c1f437SNick Hibmafield should be filled before the call and the other fields will 183b2c1f437SNick Hibmabe filled by information about the device on that address. 18490305461SRuslan ErmilovShould no such device exist, an error is reported. 185b2c1f437SNick Hibma.Bd -literal 186b2c1f437SNick Hibmastruct usb_device_info { 1874239682eSNick Hibma u_int8_t bus; 1884239682eSNick Hibma u_int8_t addr; 189a31999caSJosef Karthauser usb_event_cookie_t cookie; 190b2c1f437SNick Hibma char product[USB_MAX_STRING_LEN]; 191b2c1f437SNick Hibma char vendor[USB_MAX_STRING_LEN]; 1924239682eSNick Hibma char release[8]; 1934239682eSNick Hibma u_int16_t productNo; 1944239682eSNick Hibma u_int16_t vendorNo; 1954239682eSNick Hibma u_int16_t releaseNo; 1964239682eSNick Hibma u_int8_t class; 1974239682eSNick Hibma u_int8_t subclass; 1984239682eSNick Hibma u_int8_t protocol; 1994239682eSNick Hibma u_int8_t config; 2004239682eSNick Hibma u_int8_t lowspeed; 201b2c1f437SNick Hibma int power; 202b2c1f437SNick Hibma int nports; 203a31999caSJosef Karthauser char devnames[USB_MAX_DEVNAMES][USB_MAX_DEVNAMELEN]; 2044239682eSNick Hibma u_int8_t ports[16]; 205b2c1f437SNick Hibma#define USB_PORT_ENABLED 0xff 206b2c1f437SNick Hibma#define USB_PORT_SUSPENDED 0xfe 207b2c1f437SNick Hibma#define USB_PORT_POWERED 0xfd 208b2c1f437SNick Hibma#define USB_PORT_DISABLED 0xfc 209b2c1f437SNick Hibma}; 210b2c1f437SNick Hibma.Ed 211b2c1f437SNick Hibma.Pp 2124239682eSNick Hibma.Va bus 213b2c1f437SNick Hibmaand 2144239682eSNick Hibma.Va addr 2154239682eSNick Hibmacontain the topological information for the device. 2164239682eSNick Hibma.Va devnames 2176d249eeeSSheldon Hearncontains the device names of the connected drivers. 21890305461SRuslan ErmilovFor example, the 21990305461SRuslan Ermilovthird 22090305461SRuslan Ermilov.Tn USB 22190305461SRuslan ErmilovZip drive connected will be 2224239682eSNick Hibma.Li umass2 . 223b2c1f437SNick HibmaThe 2244239682eSNick Hibma.Va product , vendor 2254239682eSNick Hibmaand 2264239682eSNick Hibma.Va release 2274239682eSNick Hibmafields contain self-explanatory descriptions of the device. 2284239682eSNick Hibma.Va productNo , vendorNo , releaseNo , class , subclass 2294239682eSNick Hibmaand 2304239682eSNick Hibma.Va protocol 2314239682eSNick Hibmacontain the corresponding values from the device descriptors. 232b2c1f437SNick HibmaThe 233b2c1f437SNick Hibma.Va config 234b2c1f437SNick Hibmafield shows the current configuration of the device. 235b2c1f437SNick Hibma.Pp 236b2c1f437SNick Hibma.Va lowspeed 2374239682eSNick Hibmaindicates whether the device is a full speed (0) or low speed (1) 2386d249eeeSSheldon Hearndevice. 2396d249eeeSSheldon HearnThe 240b2c1f437SNick Hibma.Va power 241b2c1f437SNick Hibmafield shows the power consumption in milli-amps drawn at 5 volts, 242b2c1f437SNick Hibmaor zero if the device is self powered. 243b2c1f437SNick Hibma.Pp 24490305461SRuslan ErmilovIf the device is a hub, the 245b2c1f437SNick Hibma.Va nports 24690305461SRuslan Ermilovfield is non-zero, and the 247b2c1f437SNick Hibma.Va ports 248b2c1f437SNick Hibmafield contains the addresses of the connected devices. 24990305461SRuslan ErmilovIf no device is connected to a port, one of the 25090305461SRuslan Ermilov.Dv USB_PORT_* 251b2c1f437SNick Hibmavalues indicates its status. 25290305461SRuslan Ermilov.It Dv USB_DEVICESTATS Vt "struct usb_device_stats" 253b2c1f437SNick HibmaThis command retrieves statistics about the controller. 254b2c1f437SNick Hibma.Bd -literal 255b2c1f437SNick Hibmastruct usb_device_stats { 256b2c1f437SNick Hibma u_long requests[4]; 257b2c1f437SNick Hibma}; 258b2c1f437SNick Hibma.Ed 259b2c1f437SNick Hibma.Pp 260b2c1f437SNick HibmaThe 261b2c1f437SNick Hibma.Va requests 26257e4378bSRuslan Ermilovfield is indexed by the transfer kind, i.e.\& 26390305461SRuslan Ermilov.Dv UE_* , 264b2c1f437SNick Hibmaand indicates how many transfers of each kind that has been completed 265b2c1f437SNick Hibmaby the controller. 26690305461SRuslan Ermilov.It Dv USB_REQUEST Vt "struct usb_ctl_request" 267b2c1f437SNick HibmaThis command can be used to execute arbitrary requests on the control pipe. 268b2c1f437SNick HibmaThis is 269b2c1f437SNick Hibma.Em DANGEROUS 270b2c1f437SNick Hibmaand should be used with great care since it 271b2c1f437SNick Hibmacan destroy the bus integrity. 272b2c1f437SNick Hibma.El 273b2c1f437SNick Hibma.Pp 274b2c1f437SNick HibmaThe include file 275b2c1f437SNick Hibma.Aq Pa dev/usb/usb.h 276b2c1f437SNick Hibmacontains definitions for the types used by the various 277b2c1f437SNick Hibma.Xr ioctl 2 278b2c1f437SNick Hibmacalls. 279b2c1f437SNick HibmaThe naming convention of the fields for the various 280b2c1f437SNick Hibma.Tn USB 281b2c1f437SNick Hibmadescriptors exactly follows the naming in the 282b2c1f437SNick Hibma.Tn USB 283b2c1f437SNick Hibmaspecification. 284b2c1f437SNick HibmaByte sized fields can be accessed directly, but word (16 bit) 285b2c1f437SNick Hibmasized fields must be access by the 286b2c1f437SNick Hibma.Fn UGETW field 287b2c1f437SNick Hibmaand 288b2c1f437SNick Hibma.Fn USETW field value 289b2c1f437SNick Hibmamacros to handle byte order and alignment properly. 290b2c1f437SNick Hibma.Pp 291b2c1f437SNick HibmaThe include file 292b2c1f437SNick Hibma.Aq Pa dev/usb/usbhid.h 293b2c1f437SNick Hibmasimilarly contains the definitions for 294b2c1f437SNick HibmaHuman Interface Devices 295b2c1f437SNick Hibma.Pq Tn HID . 296a07e9d4aSJosef Karthauser.Sh USB EVENT INTERFACE 297a07e9d4aSJosef KarthauserAll 298a07e9d4aSJosef Karthauser.Tn USB 299a07e9d4aSJosef Karthauserevents are reported via the 300a07e9d4aSJosef Karthauser.Pa /dev/usb 30190305461SRuslan Ermilovdevice. 30290305461SRuslan ErmilovThis devices can be opened for reading and each 303a07e9d4aSJosef Karthauser.Xr read 2 304a07e9d4aSJosef Karthauserwill yield an event record (if something has happened). 305a07e9d4aSJosef KarthauserThe 306a07e9d4aSJosef Karthauser.Xr poll 2 307a07e9d4aSJosef Karthausersystem call can be used to determine if an event record is available 308a07e9d4aSJosef Karthauserfor reading. 309a07e9d4aSJosef Karthauser.Pp 310a07e9d4aSJosef KarthauserThe event record has the following definition: 311a07e9d4aSJosef Karthauser.Bd -literal 312a07e9d4aSJosef Karthauserstruct usb_event { 313a07e9d4aSJosef Karthauser int ue_type; 314a07e9d4aSJosef Karthauser#define USB_EVENT_CTRLR_ATTACH 1 315a07e9d4aSJosef Karthauser#define USB_EVENT_CTRLR_DETACH 2 316a07e9d4aSJosef Karthauser#define USB_EVENT_DEVICE_ATTACH 3 317a07e9d4aSJosef Karthauser#define USB_EVENT_DEVICE_DETACH 4 318a07e9d4aSJosef Karthauser#define USB_EVENT_DRIVER_ATTACH 5 319a07e9d4aSJosef Karthauser#define USB_EVENT_DRIVER_DETACH 6 320a07e9d4aSJosef Karthauser struct timespec ue_time; 321a07e9d4aSJosef Karthauser union { 322a07e9d4aSJosef Karthauser struct { 323a07e9d4aSJosef Karthauser int ue_bus; 324a07e9d4aSJosef Karthauser } ue_ctrlr; 325a07e9d4aSJosef Karthauser struct usb_device_info ue_device; 326a07e9d4aSJosef Karthauser struct { 327a07e9d4aSJosef Karthauser usb_event_cookie_t ue_cookie; 328a07e9d4aSJosef Karthauser char ue_devname[16]; 329a07e9d4aSJosef Karthauser } ue_driver; 330a07e9d4aSJosef Karthauser } u; 331a07e9d4aSJosef Karthauser}; 332a07e9d4aSJosef Karthauser.Ed 333a07e9d4aSJosef KarthauserThe 334a07e9d4aSJosef Karthauser.Va ue_type 335a07e9d4aSJosef Karthauserfield identifies the type of event that is described. 336a07e9d4aSJosef KarthauserThe possible events are attach/detach of a host controller, 33790305461SRuslan Ermilova device, or a device driver. 33890305461SRuslan ErmilovThe union contains information 339a07e9d4aSJosef Karthauserpertinent to the different types of events. 34090305461SRuslan Ermilov.Pp 341a07e9d4aSJosef KarthauserThe 342a07e9d4aSJosef Karthauser.Va ue_bus 343a07e9d4aSJosef Karthausercontains the number of the 344a07e9d4aSJosef Karthauser.Tn USB 345a07e9d4aSJosef Karthauserbus for host controller events. 34690305461SRuslan Ermilov.Pp 347a07e9d4aSJosef KarthauserThe 348a07e9d4aSJosef Karthauser.Va ue_device 349a07e9d4aSJosef Karthauserrecord contains information about the device in a device event event. 35090305461SRuslan Ermilov.Pp 351a07e9d4aSJosef KarthauserThe 352a07e9d4aSJosef Karthauser.Va ue_cookie 353a07e9d4aSJosef Karthauseris an opaque value that uniquely determines which which 354a07e9d4aSJosef Karthauserdevice a device driver has been attached to (i.e., it equals 355a07e9d4aSJosef Karthauserthe cookie value in the device that the driver attached to). 35690305461SRuslan Ermilov.Pp 357a07e9d4aSJosef KarthauserThe 358a07e9d4aSJosef Karthauser.Va ue_devname 359a07e9d4aSJosef Karthausercontains the name of the device (driver) as seen in, e.g., 360a07e9d4aSJosef Karthauserkernel messages. 361a07e9d4aSJosef Karthauser.Pp 36290305461SRuslan ErmilovNote that there is a separation between device and device 36390305461SRuslan Ermilovdriver events. 36490305461SRuslan ErmilovA device event is generated when a physical 36590305461SRuslan Ermilov.Tn USB 36690305461SRuslan Ermilovdevice is attached or detached. 36790305461SRuslan ErmilovA single 36890305461SRuslan Ermilov.Tn USB 36990305461SRuslan Ermilovdevice may 370a07e9d4aSJosef Karthauserhave zero, one, or many device drivers associated with it. 371b2c1f437SNick Hibma.Sh SEE ALSO 372b2c1f437SNick HibmaThe 373b2c1f437SNick Hibma.Tn USB 374a31999caSJosef Karthauserspecifications can be found at: 37590305461SRuslan Ermilov.Pp 37690305461SRuslan Ermilov.D1 Pa http://www.usb.org/developers/docs.html 377b2c1f437SNick Hibma.Pp 378a31999caSJosef Karthauser.Xr aue 4 , 379a31999caSJosef Karthauser.Xr cue 4 , 380a31999caSJosef Karthauser.Xr kue 4 , 381b2c1f437SNick Hibma.Xr ohci 4 , 3825521ff5aSRuslan Ermilov.Xr pci 4 , 38302ea0857SJosef Karthauser.Xr ucom 4 , 384a31999caSJosef Karthauser.Xr ugen 4 , 385def37e7cSMike Pritchard.Xr uhci 4 , 386b2c1f437SNick Hibma.Xr uhid 4 , 387b2c1f437SNick Hibma.Xr ukbd 4 , 3886b9ba891STom Rhodes.Xr ulpt 4 , 389a31999caSJosef Karthauser.Xr umass 4 , 390b2c1f437SNick Hibma.Xr ums 4 , 3918140bbcaSTom Rhodes.Xr uplcom 4 , 392a31999caSJosef Karthauser.Xr urio 4 , 393a31999caSJosef Karthauser.Xr uscanner 4 , 3948140bbcaSTom Rhodes.Xr uvscom 4 , 39590305461SRuslan Ermilov.Xr usbd 8 , 396b2c1f437SNick Hibma.Xr usbdevs 8 397b2c1f437SNick Hibma.Sh HISTORY 398b2c1f437SNick HibmaThe 399b2c1f437SNick Hibma.Nm 400b2c1f437SNick Hibmadriver first appeared in 401b2c1f437SNick Hibma.Fx 3.0 . 402def37e7cSMike Pritchard.Sh AUTHORS 403b2c1f437SNick HibmaThe 404b2c1f437SNick Hibma.Nm 405b2c1f437SNick Hibmadriver was written by 406def37e7cSMike Pritchard.An Lennart Augustsson Aq augustss@carlstedt.se 407def37e7cSMike Pritchardfor the 408b2c1f437SNick Hibma.Nx 409b2c1f437SNick Hibmaproject. 410