xref: /netbsd-src/share/man/man4/usb.4 (revision 9ddb6ab554e70fb9bbd90c3d96b812bc57755a14)
1.\" $NetBSD: usb.4,v 1.96 2012/01/22 14:15:43 wiz Exp $
2.\"
3.\" Copyright (c) 1999-2008 The NetBSD Foundation, Inc.
4.\" All rights reserved.
5.\"
6.\" This code is derived from software contributed to The NetBSD Foundation
7.\" by Lennart Augustsson.
8.\"
9.\" Redistribution and use in source and binary forms, with or without
10.\" modification, are permitted provided that the following conditions
11.\" are met:
12.\" 1. Redistributions of source code must retain the above copyright
13.\"    notice, this list of conditions and the following disclaimer.
14.\" 2. Redistributions in binary form must reproduce the above copyright
15.\"    notice, this list of conditions and the following disclaimer in the
16.\"    documentation and/or other materials provided with the distribution.
17.\"
18.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
19.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
20.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
22.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28.\" POSSIBILITY OF SUCH DAMAGE.
29.\"
30.Dd January 22, 2012
31.Dt USB 4
32.Os
33.Sh NAME
34.Nm usb
35.Nd Universal Serial Bus driver
36.Sh SYNOPSIS
37.Cd "ehci*   at cardbus? function ?"
38.Cd "ehci*   at pci? dev ? function ?"
39.Cd "ohci*   at cardbus? function ?"
40.Cd "ohci*   at pci? dev ? function ?"
41.Cd "slhci*  at isa? port ? irq ?"
42.Cd "slhci*  at pcmcia? function ?"
43.Cd "uhci*   at cardbus? function ?"
44.Cd "uhci*   at pci? dev ? function ?"
45.Cd "usb*    at ehci? flags X"
46.Cd "usb*    at ohci? flags X"
47.Cd "usb*    at uhci? flags X"
48.Cd "usb*    at slhci? flags X"
49.Cd "uhub*   at usb?"
50.Cd "uhub*   at uhub? port ? configuration ? interface ? vendor ? product ? release ?"
51.Cd "XX*     at uhub? port ? configuration ? interface ? vendor ? product ? release ?"
52.Pp
53.Cd options USBVERBOSE
54.Pp
55.In dev/usb/usb.h
56.In dev/usb/usbhid.h
57.Sh DESCRIPTION
58.Nx
59provides machine-independent bus support and drivers for
60.Tn USB
61devices.
62.Pp
63The
64.Nx
65.Nm
66driver has three layers (like
67.Xr scsi 4
68and
69.Xr pcmcia 4 ) :
70the controller, the bus, and the device layer.
71The controller attaches to a physical bus (like
72.Xr pci 4 ) .
73The
74.Tn USB
75bus attaches to the controller and the root hub attaches
76to the bus.
77Further devices, which may include further hubs,
78attach to other hubs.
79The attachment forms the same tree structure as the physical
80.Tn USB
81device tree.
82For each
83.Tn USB
84device there may be additional drivers attached to it.
85.Pp
86The
87.Cm uhub
88device controls
89.Tn USB
90hubs and must always be present since there is at least a root hub in any
91.Tn USB
92system.
93.Pp
94The
95.Va flags
96argument to the
97.Va usb
98device affects the order in which the device detection happens
99during cold boot.
100Normally, only the USB host controller and the
101.Va usb
102device are detected during the autoconfiguration when the
103machine is booted.
104The rest of the devices are detected once
105the system becomes functional and the kernel thread for the
106.Va usb
107device is started.
108Sometimes it is desirable to have a device detected early in the
109boot process, e.g., the console keyboard.
110To achieve this use a
111.Va flags
112value of 1.
113.Pp
114.Nx
115supports the following machine-independent
116.Tn USB
117drivers:
118.Ss Storage devices
119.Bl -tag -width 12n -offset ind -compact
120.It Xr umass 4
121.Tn USB
122Mass Storage Devices, e.g., external disk drives
123.El
124.Ss Wired network interfaces
125.Bl -tag -width 12n -offset ind -compact
126.It Xr aue 4
127ADMtek AN986/ADM8511 Pegasus family 10/100 USB Ethernet device
128.It Xr axe 4
129ASIX Electronics AX88172/AX88178/AX88772 10/100/Gigabit USB Ethernet device
130.It Xr cdce 4
131USB Communication Device Class Ethernet device
132.It Xr cue 4
133CATC USB-EL1201A USB Ethernet device
134.It Xr kue 4
135Kawasaki LSI KL5KUSB101B USB Ethernet device
136.It Xr udav 4
137Davicom DM9601 10/100 USB Ethernet device
138.It Xr url 4
139Realtek RTL8150L 10/100 USB Ethernet device
140.El
141.Ss Wireless network interfaces
142.Bl -tag -width 12n -offset ind -compact
143.It Xr atu 4
144Atmel AT76C50x IEEE 802.11b wireless network device
145.It Xr ral 4
146Ralink Technology USB IEEE 802.11b/g wireless network device
147.It Xr rum 4
148Ralink Technology USB IEEE 802.11a/b/g wireless network device
149.It Xr ubt 4
150USB Bluetooth dongles
151.It Xr upgt 4
152Conexant/Intersil PrismGT SoftMAC USB 802.11b/g wireless network device
153.It Xr zyd 4
154ZyDAS ZD1211/ZD1211B USB IEEE 802.11b/g wireless network device
155.El
156.Ss Serial and parallel interfaces
157.Bl -tag -width 12n -offset ind -compact
158.It Xr ubsa 4
159Belkin USB serial adapter
160.It Xr uchcom 4
161WinChipHead CH341/340 based USB serial adapter
162.It Xr ucom 4
163USB tty support
164.It Xr ucycom 4
165Cypress microcontroller based USB serial adapter
166.It Xr uftdi 4
167FT8U100AX USB serial adapter
168.It Xr ugensa 4
169USB generic serial adapter
170.It Xr uhmodem 4
171USB Huawei 3G wireless modem device
172.It Xr uipaq 4
173iPAQ USB units
174.It Xr ukyopon 4
175USB Kyocera AIR-EDGE PHONE device
176.It Xr ulpt 4
177USB printer support
178.It Xr umct 4
179MCT USB-RS232 USB serial adapter
180.It Xr umodem 4
181USB modem support
182.It Xr uplcom 4
183Prolific PL-2303 USB serial adapter
184.It Xr uslsa 4
185Silicon Laboratories CP2101/CP2102 based USB serial adapter
186.It Xr uvisor 4
187USB Handspring Visor
188.It Xr uvscom 4
189SUNTAC Slipper U VS-10U USB serial adapter
190.El
191.Ss Audio devices
192.Bl -tag -width 12n -offset ind -compact
193.It Xr uaudio 4
194USB audio devices
195.It Xr umidi 4
196USB MIDI devices
197.It Xr urio 4
198Diamond Multimedia Rio MP3 players
199.El
200.Ss Radio receiver devices
201.Bl -tag -width 12n -offset ind -compact
202.It Xr udsbr 4
203D-Link DSB-R100 USB radio device
204.El
205.Ss Human Interface Devices
206.Bl -tag -width 12n -offset ind -compact
207.It Xr uhid 4
208Generic driver for Human Interface Devices
209.It Xr uhidev 4
210Base driver for all Human Interface Devices
211.It Xr ukbd 4
212.Tn USB
213keyboards that follow the boot protocol
214.It Xr ums 4
215.Tn USB
216mouse devices
217.El
218.Ss Miscellaneous devices
219.Bl -tag -width 12n -offset ind -compact
220.It Xr stuirda 4
221Sigmaltel 4116/4220 USB-IrDA bridge
222.It Xr uep 4
223USB eGalax touch-panel
224.It Xr ugen 4
225USB generic devices
226.It Xr uirda 4
227USB IrDA bridges
228.It Xr upl 4
229Prolific based host-to-host adapters
230.It Xr uscanner 4
231USB scanner support
232.It Xr usscanner 4
233SCSI-over-USB scanners
234.It Xr ustir 4
235SigmaTel STIr4200 USB IrDA bridges
236.It Xr utoppy 4
237Topfield TF5000PVR range of digital video recorders
238.It Xr uyap 4
239USB YAP phone firmware loader
240.El
241.Sh INTRODUCTION TO USB
242The
243.Tn USB
2441.x is a 12 Mb/s serial bus with 1.5 Mb/s for low speed devices.
245.Tn USB
2462.x handles 480 Mb/s.
247Each
248.Tn USB
249has a host controller that is the master of the bus;
250all other devices on the bus only speak when spoken to.
251.Pp
252There can be up to 127 devices (apart from the host controller)
253on a bus, each with its own address.
254The addresses are assigned
255dynamically by the host when each device is attached to the bus.
256.Pp
257Within each device there can be up to 16 endpoints.
258Each endpoint
259is individually addressed and the addresses are static.
260Each of these endpoints will communicate in one of four different modes:
261control, isochronous, bulk, or interrupt.
262A device always has at least one endpoint.
263This endpoint has address 0 and is a control
264endpoint and is used to give commands to and extract basic data,
265such as descriptors, from the device.
266Each endpoint, except the control endpoint, is unidirectional.
267.Pp
268The endpoints in a device are grouped into interfaces.
269An interface is a logical unit within a device; e.g.,
270a compound device with both a keyboard and a trackball would present
271one interface for each.
272An interface can sometimes be set into different modes,
273called alternate settings, which affects how it operates.
274Different alternate settings can have different endpoints
275within it.
276.Pp
277A device may operate in different configurations.
278Depending on the
279configuration the device may present different sets of endpoints
280and interfaces.
281.Pp
282Each device located on a hub has several
283.Xr config 1
284locators:
285.Bl -tag -compact -width xxxxxxxxx
286.It Cd port
287this is the number of the port on closest upstream hub.
288.It Cd configuration
289this is the configuration the device must be in for this driver to attach.
290This locator does not set the configuration; it is iterated by the bus
291enumeration.
292.It Cd interface
293this is the interface number within a device that an interface driver
294attaches to.
295.It Cd vendor
296this is the 16 bit vendor id of the device.
297.It Cd product
298this is the 16 bit product id of the device.
299.It Cd release
300this is the 16 bit release (revision) number of the device.
301.El
302The first locator can be used to pin down a particular device
303according to its physical position in the device tree.
304The last three locators can be used to pin down a particular
305device according to what device it actually is.
306.Pp
307The bus enumeration of the
308.Tn USB
309bus proceeds in several steps:
310.Bl -enum
311.It
312Any device specific driver can attach to the device.
313.It
314If none is found, any device class specific driver can attach.
315.It
316If none is found, all configurations are iterated over.
317For each configuration all the interface are iterated over and interface
318drivers can attach.
319If any interface driver attached in a certain
320configuration the iteration over configurations is stopped.
321.It
322If still no drivers have been found, the generic
323.Tn USB
324driver can attach.
325.El
326.Sh USB CONTROLLER INTERFACE
327Use the following to get access to the
328.Tn USB
329specific structures and defines.
330.Bd -literal
331#include \*[Lt]dev/usb/usb.h\*[Gt]
332.Ed
333.Pp
334The
335.Pa /dev/usbN
336can be opened and a few operations can be performed on it.
337The
338.Xr poll 2
339system call will say that I/O is possible on the controller device when a
340.Tn USB
341device has been connected or disconnected to the bus.
342.Pp
343The following
344.Xr ioctl 2
345commands are supported on the controller device:
346.Bl -tag -width xxxxxx
347.\" .It Dv USB_DISCOVER
348.\" This command will cause a complete bus discovery to be initiated.
349.\" If any devices attached or detached from the bus they will be
350.\" processed during this command.
351.\" This is the only way that new devices are found on the bus.
352.It Dv USB_DEVICEINFO Fa "struct usb_device_info"
353This command can be used to retrieve some information about a device
354on the bus.
355The
356.Va addr
357field should be filled before the call and the other fields will
358be filled by information about the device on that address.
359Should no such device exist an error is reported.
360.Bd -literal
361struct usb_device_info {
362	uint8_t	udi_bus;
363	uint8_t	udi_addr;
364	usb_event_cookie_t udi_cookie;
365	char		udi_product[USB_MAX_ENCODED_STRING_LEN];
366	char		udi_vendor[USB_MAX_ENCODED_STRING_LEN];
367	char		udi_release[8];
368	char		udi_serial[USB_MAX_ENCODED_STRING_LEN];
369	uint16_t	udi_productNo;
370	uint16_t	udi_vendorNo;
371	uint16_t	udi_releaseNo;
372	uint8_t	udi_class;
373	uint8_t	udi_subclass;
374	uint8_t	udi_protocol;
375	uint8_t	udi_config;
376	uint8_t	udi_speed;
377#define USB_SPEED_LOW  1
378#define USB_SPEED_FULL 2
379#define USB_SPEED_HIGH 3
380	int		udi_power;
381	int		udi_nports;
382	char		udi_devnames[USB_MAX_DEVNAMES][USB_MAX_DEVNAMELEN];
383	uint8_t	udi_ports[16];
384#define USB_PORT_ENABLED 0xff
385#define USB_PORT_SUSPENDED 0xfe
386#define USB_PORT_POWERED 0xfd
387#define USB_PORT_DISABLED 0xfc
388};
389.Ed
390.Pp
391The
392.Va product ,
393.Va vendor ,
394.Va release ,
395and
396.Va serial
397fields contain self-explanatory descriptions of the device.
398.Pp
399The
400.Va class
401field contains the device class.
402.Pp
403The
404.Va config
405field shows the current configuration of the device.
406.Pp
407The
408.Va lowspeed
409field
410is set if the device is a
411.Tn USB
412low speed device.
413.Pp
414The
415.Va power
416field shows the power consumption in milli-amps drawn at 5 volts,
417or zero if the device is self powered.
418.Pp
419If the device is a hub the
420.Va nports
421field is non-zero and the
422.Va ports
423field contains the addresses of the connected devices.
424If no device is connected to a port one of the
425.Va USB_PORT_*
426values indicates its status.
427.It Dv USB_DEVICESTATS Fa "struct usb_device_stats"
428This command retrieves statistics about the controller.
429.Bd -literal
430struct usb_device_stats {
431	u_long	uds_requests[4];
432};
433.Ed
434.Pp
435The
436.Va requests
437field is indexed by the transfer kind, i.e.
438.Va UE_* ,
439and indicates how many transfers of each kind have been completed
440by the controller.
441.It Dv USB_REQUEST Fa "struct usb_ctl_request"
442This command can be used to execute arbitrary requests on the control pipe.
443This is
444.Em DANGEROUS
445and should be used with great care since it
446can destroy the bus integrity.
447.El
448.Pp
449The include file
450.In dev/usb/usb.h
451contains definitions for the types used by the various
452.Xr ioctl 2
453calls.
454The naming convention of the fields for the various
455.Tn USB
456descriptors exactly follows the naming in the
457.Tn USB
458specification.
459Byte sized fields can be accessed directly, but word (16 bit)
460sized fields must be access by the
461.Fn UGETW field
462and
463.Fn USETW field value
464macros to handle byte order and alignment properly.
465.Pp
466The include file
467.In dev/usb/usbhid.h
468similarly contains the definitions for
469Human Interface Devices
470.Pq Tn HID .
471.Sh USB EVENT INTERFACE
472All
473.Tn USB
474events are reported via the
475.Pa /dev/usb
476device.
477This devices can be opened for reading and each
478.Xr read 2
479will yield an event record (if something has happened).
480The
481.Xr poll 2
482system call can be used to determine if an event record is available
483for reading.
484.Pp
485The event record has the following definition:
486.Bd -literal
487struct usb_event {
488        int                                 ue_type;
489#define USB_EVENT_CTRLR_ATTACH 1
490#define USB_EVENT_CTRLR_DETACH 2
491#define USB_EVENT_DEVICE_ATTACH 3
492#define USB_EVENT_DEVICE_DETACH 4
493#define USB_EVENT_DRIVER_ATTACH 5
494#define USB_EVENT_DRIVER_DETACH 6
495        struct timespec                     ue_time;
496        union {
497                struct {
498                        int                 ue_bus;
499                } ue_ctrlr;
500                struct usb_device_info      ue_device;
501                struct {
502                        usb_event_cookie_t  ue_cookie;
503                        char                ue_devname[16];
504                } ue_driver;
505        } u;
506};
507.Ed
508.Pp
509The
510.Va ue_type
511field identifies the type of event that is described.
512The possible events are attach/detach of a host controller,
513a device, or a device driver.
514The union contains information
515pertinent to the different types of events.
516.Pp
517The
518.Va ue_bus
519contains the number of the
520.Tn USB
521bus for host controller events.
522.Pp
523The
524.Va ue_device
525record contains information about the device in a device event event.
526.Pp
527The
528.Va ue_cookie
529is an opaque value that uniquely determines which
530device a device driver has been attached to (i.e., it equals
531the cookie value in the device that the driver attached to).
532The
533.Va ue_devname
534contains the name of the device (driver) as seen in, e.g.,
535kernel messages.
536.Pp
537Note that there is a separation between device and device
538driver events.
539A device event is generated when a physical
540USB device is attached or detached.
541A single USB device may
542have zero, one, or many device drivers associated with it.
543.Sh KERNEL THREADS
544For each USB bus, i.e., for each host controller, there is
545a kernel thread that handles attach and detach of devices on
546that bus.
547The thread is named
548.Va usbN
549where
550.Va N
551is the bus number.
552.Pp
553In addition there is a kernel thread,
554.Va usbtask ,
555which handles various minor tasks that are initiated from
556an interrupt context, but need to sleep, e.g., time-out
557abort of transfers.
558.Sh SEE ALSO
559.Xr usbhidaction 1 ,
560.Xr usbhidctl 1 ,
561.Xr cardbus 4 ,
562.Xr ehci 4 ,
563.Xr isa 4 ,
564.Xr ohci 4 ,
565.Xr pci 4 ,
566.Xr pcmcia 4 ,
567.Xr slhci 4 ,
568.Xr uhci 4 ,
569.Xr usbdevs 8
570.Rs
571.%T Universal Serial Bus Specifications Documents
572.%U http://www.usb.org/developers/docs/
573.Re
574.Sh HISTORY
575The
576.Nm
577driver
578appeared in
579.Nx 1.4 .
580.Sh BUGS
581There should be a serial number locator, but
582.Nx
583does not have string valued locators.
584