1.\" Copyright (c) 1997, 1998 2.\" Nick Hibma <n_hibma@FreeBSD.org>. All rights reserved. 3.\" 4.\" Redistribution and use in source and binary forms, with or without 5.\" modification, are permitted provided that the following conditions 6.\" are met: 7.\" 1. Redistributions of source code must retain the above copyright 8.\" notice, this list of conditions and the following disclaimer. 9.\" 2. Redistributions in binary form must reproduce the above copyright 10.\" notice, this list of conditions and the following disclaimer in the 11.\" documentation and/or other materials provided with the distribution. 12.\" 3. Neither the name of the author nor the names of any co-contributors 13.\" may be used to endorse or promote products derived from this software 14.\" without specific prior written permission. 15.\" 16.\" THIS SOFTWARE IS PROVIDED BY NICK HIBMA AND CONTRIBUTORS ``AS IS'' AND 17.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19.\" ARE DISCLAIMED. IN NO EVENT SHALL NICK HIBMA OR THE VOICES IN HIS HEAD 20.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 26.\" THE POSSIBILITY OF SUCH DAMAGE. 27.\" 28.\" $FreeBSD: src/share/man/man4/usb.4,v 1.32 2005/04/20 07:33:09 simon Exp $ 29.\" $DragonFly: src/share/man/man4/usb.4,v 1.7 2008/02/11 19:57:30 swildner Exp $ 30.\" 31.Dd January 26, 2008 32.Dt USB 4 33.Os 34.Sh NAME 35.Nm usb 36.Nd Universal Serial Bus 37.Sh SYNOPSIS 38.Cd "device usb" 39.Pp 40.In bus/usb/usb.h 41.In bus/usb/usbhid.h 42.Sh DESCRIPTION 43.Dx 44provides machine-independent bus support and drivers for 45.Tn USB 46devices. 47.Pp 48The 49.Nm 50driver has three layers: the controller, the bus, and the 51device layer. 52The controller attaches to a physical bus 53(like 54.Xr pci 4 ) . 55The 56.Tn USB 57bus attaches to the controller, and the root hub attaches 58to the controller. 59Any devices attached to the bus will attach to the root hub 60or another hub attached to the 61.Tn USB 62bus. 63.Pp 64The 65.Nm uhub 66device will always be present as it is needed for the 67root hub. 68.Ss Storage devices 69.Bl -tag -width ".Xr snd_uaudio 4" -offset indent -compact 70.\".It Xr natausb 4 71.\"... 72.It Xr umass 4 73Mass Storage Devices, e.g., external disk drives 74.El 75.Ss Wired network interfaces 76.Bl -tag -width ".Xr snd_uaudio 4" -offset indent -compact 77.It Xr aue 4 78ADMtek AN986 Pegasus Ethernet driver 79.It Xr axe 4 80ASIX Electronics AX88172 Ethernet driver 81.It Xr cue 4 82CATC USB-EL1210A Ethernet driver 83.It Xr kue 4 84Kawasaki LSI KL5KUSB101B Ethernet driver 85.It Xr rue 4 86RealTek RTL8150 Ethernet driver 87.El 88.Ss Wireless network interfaces 89.Bl -tag -width ".Xr snd_uaudio 4" -offset indent -compact 90.\".It Xr rum 4 91.\"Ralink Technology RT2501USB/RT2601USB IEEE 802.11 driver 92.It Xr ubt 4 93Bluetooth adapters 94.\".It Xr ural 4 95.\"Ralink Technology RT2500USB IEEE 802.11 driver 96.El 97.Ss Serial and parallel interfaces 98.Bl -tag -width ".Xr snd_uaudio 4" -offset indent -compact 99.It Xr moscom 4 100MosChip Semiconductor MCS7703 based serial adapters 101.It Xr uark 4 102Arkmicro Technologies ARK3116 based serial adapters 103.It Xr ubsa 4 104Belkin serial adapters 105.It Xr uchcom 4 106WinChipHead CH341/CH340 serial adapters 107.It Xr ucom 4 108tty support 109.It Xr uftdi 4 110serial devices based on the FTDI chips 111.It Xr ugensa 4 112generic serial device 113.It Xr ulpt 4 114printer support 115.It Xr umct 4 116Magic Control Technology USB-232 based serial adapters 117.It Xr uplcom 4 118Prolific PL-2303/2303X/2303HX serial adapters 119.It Xr uslcom 4 120Silicon Laboratories CP2101, CP2102 and CP2103 USB to serial bridge 121.It Xr uticom 4 122Texas Instruments TUSB3410 RS232 to USB converter 123.It Xr uvisor 4 124support for the Handspring Visor, a Palmpilot compatible PDA 125.It Xr uvscom 4 126SUNTAC Slipper U VS-10U serial adapters 127.El 128.Ss Audio devices 129.Bl -tag -width ".Xr snd_uaudio 4" -offset indent -compact 130.It Xr snd_uaudio 4 131audio device driver 132.It Xr urio 4 133driver for the Rio500 MP3 player 134.El 135.Ss Radio receiver devices 136.Bl -tag -width ".Xr snd_uaudio 4" -offset indent -compact 137.It Xr ufm 4 138Cypress Semiconductor FM Radio 139.El 140.Ss Human Interface Devices 141.Bl -tag -width ".Xr snd_uaudio 4" -offset indent -compact 142.It Xr uhid 4 143generic driver for Human Interface Devices 144.It Xr uhidev 4 145base driver for all Human Interface Devices 146.It Xr ukbd 4 147keyboards that follow the boot protocol 148.It Xr ums 4 149mouse devices 150.El 151.Ss Miscellaneous devices 152.Bl -tag -width ".Xr snd_uaudio 4" -offset indent -compact 153.It Xr ugen 4 154generic device support 155.It Xr uscanner 4 156scanner support 157.El 158.Sh INTRODUCTION TO USB 159The 160.Tn USB 161is a 12 Mb/s serial bus (1.5 Mb/s for low speed devices). 162Each 163.Tn USB 164has a host controller that is the master of the bus; 165all other devices on the bus only speak when spoken to. 166.Pp 167There can be up to 127 devices (apart from the host controller) 168on a bus, each with its own address. 169The addresses are assigned 170dynamically by the host when each device is attached to the bus. 171.Pp 172Within each device there can be up to 16 endpoints. 173Each endpoint 174is individually addressed and the addresses are static. 175Each of these endpoints will communicate in one of four different modes: 176.Em control , isochronous , bulk , 177or 178.Em interrupt . 179A device always has at least one endpoint. 180This endpoint has address 0 and is a control 181endpoint and is used to give commands to and extract basic data, 182such as descriptors, from the device. 183Each endpoint, except the control endpoint, is unidirectional. 184.Pp 185The endpoints in a device are grouped into interfaces. 186An interface is a logical unit within a device; e.g.\& 187a compound device with both a keyboard and a trackball would present 188one interface for each. 189An interface can sometimes be set into different modes, 190called alternate settings, which affects how it operates. 191Different alternate settings can have different endpoints 192within it. 193.Pp 194A device may operate in different configurations. 195Depending on the 196configuration, the device may present different sets of endpoints 197and interfaces. 198.\".Pp 199.\"Each device located on a hub has several 200.\".Xr config 8 201.\"locators: 202.\".Bl -tag -compact -width xxxxxx 203.\".It Cd port 204.\"this is the number of the port on the closest upstream hub. 205.\".It Cd configuration 206.\"this is the configuration the device must be in for this driver to attach. 207.\"This locator does not set the configuration; it is iterated by the bus 208.\"enumeration. 209.\".It Cd interface 210.\"this is the interface number within a device that an interface driver 211.\"attaches to. 212.\".It Cd vendor 213.\"this is the 16 bit vendor id of the device. 214.\".It Cd product 215.\"this is the 16 bit product id of the device. 216.\".It Cd release 217.\"this is the 16 bit release (revision) number of the device. 218.\".El 219.\"The first locator can be used to pin down a particular device 220.\"according to its physical position in the device tree. 221.\"The last three locators can be used to pin down a particular 222.\"device according to what device it actually is. 223.Pp 224The bus enumeration of the 225.Tn USB 226bus proceeds in several steps: 227.Bl -enum 228.It 229Any device specific driver can attach to the device. 230.It 231If none is found, any device class specific driver can attach. 232.It 233If none is found, all configurations are iterated over. 234For each configuration, all the interfaces are iterated over, and interface 235drivers can attach. 236If any interface driver attached in a certain 237configuration, the iteration over configurations is stopped. 238.It 239If still no drivers have been found, the generic 240.Tn USB 241driver can attach. 242.El 243.Sh USB CONTROLLER INTERFACE 244Use the following to get access to the 245.Tn USB 246specific structures and defines. 247.Pp 248.In bus/usb/usb.h 249.Pp 250The 251.Pa /dev/usb Ns Ar N 252can be opened and a few operations can be performed on it. 253The 254.Xr poll 2 255system call will say that I/O is possible on the controller device when a 256.Tn USB 257device has been connected or disconnected to the bus. 258.Pp 259The following 260.Xr ioctl 2 261commands are supported on the controller device: 262.Bl -tag -width xxxxxx 263.It Dv USB_DISCOVER 264This command will cause a complete bus discovery to be initiated. 265If any devices attached or detached from the bus they will be 266processed during this command. 267This is the only way that new devices are found on the bus. 268.It Dv USB_DEVICEINFO Vt "struct usb_device_info" 269This command can be used to retrieve some information about a device 270on the bus. 271The 272.Va udi_addr 273field should be filled before the call and the other fields will 274be filled by information about the device on that address. 275Should no such device exist, an error is reported. 276.Bd -literal 277#define USB_MAX_DEVNAMES 4 278#define USB_MAX_DEVNAMELEN 16 279struct usb_device_info { 280 u_int8_t udi_bus; 281 u_int8_t udi_addr; /* device address */ 282 usb_event_cookie_t udi_cookie; 283 char udi_product[USB_MAX_STRING_LEN]; 284 char udi_vendor[USB_MAX_STRING_LEN]; 285 char udi_release[8]; 286 u_int16_t udi_productNo; 287 u_int16_t udi_vendorNo; 288 u_int16_t udi_releaseNo; 289 u_int8_t udi_class; 290 u_int8_t udi_subclass; 291 u_int8_t udi_protocol; 292 u_int8_t udi_config; 293 u_int8_t udi_speed; 294#define USB_SPEED_LOW 1 295#define USB_SPEED_FULL 2 296#define USB_SPEED_HIGH 3 297 int udi_power; /* power consumption in mA, 0 if selfpowered */ 298 int udi_nports; 299 char udi_devnames[USB_MAX_DEVNAMES][USB_MAX_DEVNAMELEN]; 300 u_int8_t udi_ports[16];/* hub only: addresses of devices on ports */ 301#define USB_PORT_ENABLED 0xff 302#define USB_PORT_SUSPENDED 0xfe 303#define USB_PORT_POWERED 0xfd 304#define USB_PORT_DISABLED 0xfc 305}; 306.Ed 307.Pp 308.Va udi_bus 309and 310.Va udi_addr 311contain the topological information for the device. 312.Va udi_devnames 313contains the device names of the connected drivers. 314For example, the 315third 316.Tn USB 317Zip drive connected will be 318.Li umass2 . 319The 320.Va udi_product , udi_vendor 321and 322.Va udi_release 323fields contain self-explanatory descriptions of the device. 324.Va udi_productNo , udi_vendorNo , udi_releaseNo , udi_class , udi_subclass 325and 326.Va udi_protocol 327contain the corresponding values from the device descriptors. 328The 329.Va udi_config 330field shows the current configuration of the device. 331.Pp 332.Va udi_speed 333indicates whether the device is at low speed 334.Pq Dv USB_SPEED_LOW , 335full speed 336.Pq Dv USB_SPEED_FULL 337or high speed 338.Pq Dv USB_SPEED_HIGH . 339The 340.Va udi_power 341field shows the power consumption in milli-amps drawn at 5 volts, 342or zero if the device is self powered. 343.Pp 344If the device is a hub, the 345.Va udi_nports 346field is non-zero, and the 347.Va udi_ports 348field contains the addresses of the connected devices. 349If no device is connected to a port, one of the 350.Dv USB_PORT_* 351values indicates its status. 352.It Dv USB_DEVICESTATS Vt "struct usb_device_stats" 353This command retrieves statistics about the controller. 354.Bd -literal 355struct usb_device_stats { 356 u_long uds_requests[4]; 357}; 358.Ed 359.Pp 360The 361.Va uds_requests 362field is indexed by the transfer kind, i.e.\& 363.Dv UE_* , 364and indicates how many transfers of each kind that has been completed 365by the controller. 366.It Dv USB_REQUEST Vt "struct usb_ctl_request" 367This command can be used to execute arbitrary requests on the control pipe. 368This is 369.Em DANGEROUS 370and should be used with great care since it 371can destroy the bus integrity. 372.El 373.Pp 374The include file 375.In bus/usb/usb.h 376contains definitions for the types used by the various 377.Xr ioctl 2 378calls. 379The naming convention of the fields for the various 380.Tn USB 381descriptors exactly follows the naming in the 382.Tn USB 383specification. 384Byte sized fields can be accessed directly, but word (16 bit) 385sized fields must be access by the 386.Fn UGETW field 387and 388.Fn USETW field value 389macros to handle byte order and alignment properly. 390.Pp 391The include file 392.In bus/usb/usbhid.h 393similarly contains the definitions for 394Human Interface Devices 395.Pq Tn HID . 396.Sh USB EVENT INTERFACE 397All 398.Tn USB 399events are reported via the 400.Pa /dev/usb 401device. 402This devices can be opened for reading and each 403.Xr read 2 404will yield an event record (if something has happened). 405The 406.Xr poll 2 407system call can be used to determine if an event record is available 408for reading. 409.Pp 410The event record has the following definition: 411.Bd -literal 412struct usb_event { 413 int ue_type; 414#define USB_EVENT_CTRLR_ATTACH 1 415#define USB_EVENT_CTRLR_DETACH 2 416#define USB_EVENT_DEVICE_ATTACH 3 417#define USB_EVENT_DEVICE_DETACH 4 418#define USB_EVENT_DRIVER_ATTACH 5 419#define USB_EVENT_DRIVER_DETACH 6 420 struct timespec ue_time; 421 union { 422 struct { 423 int ue_bus; 424 } ue_ctrlr; 425 struct usb_device_info ue_device; 426 struct { 427 usb_event_cookie_t ue_cookie; 428 char ue_devname[16]; 429 } ue_driver; 430 } u; 431}; 432.Ed 433The 434.Va ue_type 435field identifies the type of event that is described. 436The possible events are attach/detach of a host controller, 437a device, or a device driver. 438The union contains information 439pertinent to the different types of events. 440Macros, 441.Fn USB_EVENT_IS_ATTACH "ue_type" 442and 443.Fn USB_EVENT_IS_DETACH "ue_type" 444can be used to determine if an event was an 445.Dq attach 446or a 447.Dq detach 448request. 449.Pp 450The 451.Va ue_bus 452contains the number of the 453.Tn USB 454bus for host controller events. 455.Pp 456The 457.Va ue_device 458record contains information about the device in a device event event. 459.Pp 460The 461.Va ue_cookie 462is an opaque value that uniquely determines which 463device a device driver has been attached to (i.e., it equals 464the cookie value in the device that the driver attached to). 465.Pp 466The 467.Va ue_devname 468contains the name of the device (driver) as seen in, e.g., 469kernel messages. 470.Pp 471Note that there is a separation between device and device 472driver events. 473A device event is generated when a physical 474.Tn USB 475device is attached or detached. 476A single 477.Tn USB 478device may 479have zero, one, or many device drivers associated with it. 480.Sh SEE ALSO 481The 482.Tn USB 483specifications can be found at: 484.Pp 485.D1 Pa http://www.usb.org/developers/docs/ 486.Pp 487.Xr ehci 4 , 488.Xr ohci 4 , 489.Xr pci 4 , 490.Xr uhci 4 , 491.Xr usbd 8 , 492.Xr usbdevs 8 493.Sh HISTORY 494The 495.Nm 496driver first appeared in 497.Fx 3.0 . 498.Sh AUTHORS 499The 500.Nm 501driver was written by 502.An Lennart Augustsson Aq augustss@carlstedt.se 503for the 504.Nx 505project. 506