123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534 |
- .EQ
- delim $$
- .EN
- .TH USB 3
- .SH NAME
- usb \- USB Host Controller Interface
- .SH SYNOPSIS
- .nf
- .B bind -a #u /dev
- .PP
- .nf
- .B /dev/usb
- .B /dev/usb/ctl
- .BI /dev/usb/ep N . M
- .BI /dev/usb/ep N . M /data
- .BI /dev/usb/ep N . M /ctl
- \&...
- .fi
- .SH DESCRIPTION
- The Universal Serial Bus is a complex yet popular bus
- for connecting all kind of devices to a computer.
- It is a four-wire tree-shaped bus that provides both communication and (limited)
- power to devices.
- Branching points in the tree are provided by devices called
- .IR hubs .
- Hubs provide ports where USB devices (also hubs) can be attached.
- .PP
- Most PCs have one or more USB controllers called
- .I host
- controllers.
- Each one has a built-in hub called a
- .I "root hub"
- providing several ports.
- In some cases, more hubs are built-in
- and attached to a root hub port.
- The topology of the network is a tree with at most
- 127 nodes, counting both internal and leaf nodes.
- .PP
- Host controllers come in four flavours:
- UHCI and OHCI for USB 1 (up to 12 Mb/s),
- EHCI for USB 2 (up to 480 Mb/s)
- and
- XHCI for USB 3 (up to 5 Gb/s).
- We currently support all but XHCI, which is still quite new.
- .PP
- The USB bus is fully controlled by the host; all devices are polled.
- Hubs are passive in the sense that they do not poll the devices attached
- to them.
- The host polls those devices and the hubs merely route the messages.
- .PP
- Devices may be added to or removed from the bus at any time.
- When a device is attached, the host queries it to determine its type and speed.
- The querying process is standardized.
- The first level of querying is the same for all devices,
- the next is somewhat specialized
- for particular classes of devices (such as mice, keyboards, or audio devices).
- Specialization continues as subclasses and subsubclasses are explored.
- .PP
- Enumeration of the bus and initial configuration of devices is done
- by a user level program,
- .IR usbd (4).
- Device drivers are implemented by separate user programs, although
- some of them may be statically linked into
- .IR usbd .
- .PP
- The kernel device described in this page is responsible for providing
- I/O for using the devices through so called
- .IR endpoints .
- Access to the host controller is hidden from user programs, which see
- just a set of endpoints.
- After system initialization, some endpoints
- are created by the device to permit I/O to root hubs.
- All other devices must be configured by
- .IR usbd .
- .SS Devices and Endpoints
- A device includes one or more functions (e.g., audio output,
- volume control buttons, mouse input, etc.)
- Communication with device functions is performed
- by some combination of
- issuing control requests to, sending data to, and receiving data from
- device
- .IR endpoints .
- Endpoints can be understood as addresses in the bus.
- There are several types:
- .TF "\fIIsochronous
- .TP
- .I Control
- Their main use is to configure devices.
- Writing a message with a specific format
- (specified in the USB specification)
- issues a request to the device.
- If the request implies a reply,
- a read can be made next to retrieve the requested data (if the write succeeded).
- .TP
- .I Interrupt
- Used to send and receive messages to or from a specific device function
- (e.g., to read events from a mouse).
- .TP
- .I Bulk
- Used to send and receive larger amounts of data through streams
- (e.g., to write blocks to a disk).
- .TP
- .I Isochronous
- Used to send and receive data in a timely manner
- (e.g., to write audio samples to a speaker).
- .PD
- .PP
- All USB devices include at least
- a control endpoint to perform device configuration.
- This is called the
- .I setup
- endpoint or
- .IR "endpoint zero" .
- After configuring a device, other endpoints may be created
- as dictated by the device to perform actual I/O.
- .SS Operation
- Bus enumeration and device configuration is performed by
- .IR usbd (8)
- and not by this driver.
- The driver provides an interface
- to access existing endpoints (initially those for the built-in root hubs),
- to create and configure other ones, and to perform I/O through them.
- .PP
- Each directory
- .BI /dev/usb/ep N . M
- represents an endpoint, where
- .I N
- is a number identifying a device and
- .I M
- is a number identifying one of its endpoints.
- .PP
- For each device attached to the bus, and configured by
- .IR usbd (8),
- an endpoint zero (a
- .I setup
- endpoint)
- is provided at
- .BI /dev/usb/ep N .0
- for configuring the device.
- This is always a control endpoint and represents the device itself.
- .PP
- The device driver may use the setup endpoint
- to issue control requests and perhaps to create more endpoints for the device.
- Each new endpoint created has its own directory as said above.
- For example, if the driver for the device
- .BI /dev/usb/ep N . 0
- creates the endpoint number 3 for that device, a directory
- .BI /dev/usb/ep N .3
- will be available to access that endpoint.
- .PP
- All endpoint directories contain two files:
- .B data
- and
- .BR ctl .
- The former has mode bit
- .B DMEXCL
- set and can be open by only one process at a time.
- .SS data
- .PP
- The
- .B data
- file is used to perform actual I/O.
- In general, reading from it retrieves
- data from the endpoint and writing into it sends data to the endpoint.
- For control endpoints, writing to this file issues a control request
- (which may include data); if the request retrieves data from the device,
- a following read on the file will provide such data.
- .PP
- USB errors reported by the endpoint upon I/O failures
- are passed to the user process through the error string.
- I/O stalls not resulting from an error, usually
- an indication from the device, are reported by indicating that the
- number of bytes transferred has been zero.
- In most cases, the correct course of action after noticing the stall
- is for the device driver to issue a `clear halt' request (see
- .I unstall
- in
- .IR usb (2))
- to resume I/O.
- The most common error is
- .L crc/timeout
- indicating problems in communication with the device (eg., a physical
- detach of the device or a wiring problem).
- .PP
- For control and isochronous transfers, there is an implicit
- timeout performed by the kernel and it is not necessary for applications
- to place their own timers.
- For other transfer types, the kernel will not time out any operation
- by default
- (but see the
- .L timeout
- control request).
- .SS "ctl and status"
- .PP
- The
- .B ctl
- file can be read to learn about the endpoint.
- It contains information that can be used
- to locate a particular device (or endpoint).
- It also accepts writes with textual control requests described later.
- .PP
- This may result from the read of an endpoint control file:
- .IP
- .EX
- .I "(the first line is wrapped to make it fit here)"
- .ft L
- enabled control rw speed full maxpkt 64 pollival 0
- samplesz 0 hz 0 hub 1 port 3 busy
- storage csp 0x500608 vid 0x951 did 0x1613 Kingston 'DT 101 II'
- .ft
- .EE
- .LP
- The first line contains status information.
- The rest is information supplied by
- .IR usbd(8)
- as an aid to locate devices.
- The status information includes:
- .TF "\fREndpoint mode
- .PD
- .TP
- Device state
- One of
- .BR config ,
- .BR enabled ,
- and
- .BR detached .
- An endpoint starts in the
- .B config
- state, and accepts control commands written to its
- .B ctl
- file to configure the endpoint.
- When configured, the
- state is
- .B enabled
- and the
- .B data
- file is used as described above (several control requests can still
- be issued to its
- .B ctl
- file, but most will not be accepted from now on).
- Upon severe errors, perhaps a physical
- detachment from the bus, the endpoint enters the
- .B detached
- state and no further I/O is accepted on it.
- Files for an endpoint (including its directory)
- vanish when the device is detached and its files are no longer open.
- Root hubs may not be detached.
- .TP
- Endpoint type
- .BR control ,
- .BR iso ,
- .BR interrupt ,
- or
- .BR bulk ,
- indicating the type of transfer supported by the endpoint.
- .TP
- Endpoint mode
- One of
- .BR r ,
- .BR w ,
- or
- .BR rw ,
- depending on the direction of the endpoint (in, out, or inout).
- .TP
- Speed
- .BR low
- (1.5 Mb/s),
- .BR full
- (12 Mb/s),
- or
- .BR high
- (480 Mb/s).
- .TP
- Maximum packet size
- Used when performing I/O on the data file.
- .TP
- Polling interval
- The polling period expressed as a number of µframes
- (for high-speed endpoints) or frames (for low- and full-speed endpoints).
- Note that a µframe takes 125 µs while a frame takes 1 ms.
- This is only of relevance for interrupt and isochronous endpoints.
- This value determines how often I/O happens.
- Note that the control request adjusting the polling interval does
- .I not
- use these units, to make things easier for USB device drivers.
- .TP
- Sample size
- Number of bytes per I/O sample (isochronous endpoints only).
- .TP
- Frequency
- Number of samples per second (Hertz).
- .TP
- Hub address
- Device address of the hub where the device is attached.
- .TP
- Port number
- Port number (in the hub) where the device is attached.
- .TP
- Usage
- .L busy
- while the data file is open and
- .L idle
- otherwise.
- This is useful to avoid disturbing endpoints already run
- by a device driver.
- .LP
- The second line contains information describing the device:
- .TF "\fRDevice strings
- .PD
- .TP
- Class name
- As provided by the device itself.
- .TP
- CSP
- Class, Subclass, and Protocol for the device.
- If the device contains different functions and has more CSPs,
- all of them will be listed.
- The first one is that of the device itself.
- For example,
- a mouse and keyboard combo may identify itself as a keyboard but
- then include two CSPs, one for the keyboard and another one for the mouse.
- .TP
- Vid and Did
- Vendor and device identifiers.
- .TP
- Device strings
- Provided by the device and identifying the manufacturer and type of device.
- .LP
- For example, to find a mouse not yet in use by a driver, scan the
- .B ctl
- files for
- .BR enabled ,
- .BR idle ,
- and
- .BR "csp 0x020103" .
- A mouse belongs to class 3 (in the least significant byte),
- .IR "human interface device" ,
- subclass 1,
- .IR boot ,
- protocol 2,
- .I mouse
- (protocol 1 would be the keyboard).
- USB class, subclass and proto codes can be found at
- .BR http://www.usb.org .
- .SS Control requests
- Endpoint control files accept the following requests.
- In most cases
- the driver does not issue them, leaving the task to either
- .IR usbd (8)
- or the usb driver library documented in
- .IR usb (2).
- .TF "\fLsamplehz\fI n
- .TP
- .B detach
- Prevent further I/O on the device (delete the endpoint)
- and remove its file interface as soon as no process is using their files.
- .TP
- .BI maxpkt " n"
- Set the maximum packet size to
- .I n
- bytes.
- .TP
- .BI pollival " n"
- Only for interrupt and isochronous endpoints.
- Set the polling interval as a function of the value
- .I n
- given by the endpoint descriptor.
- The interval value used is the period
- .I n
- in bus time units for low- and full-speed interrupt endpoints.
- Otherwise, the actual interval is
- $2 sup n$
- and not
- .IR n .
- Bus time units are 1 ms for low- and full-speed endpoints and 125 µs for
- high-speed endpoints.
- In most cases, the device driver may ignore
- all this and issue the control request supplying the
- polling interval value as found
- in the endpoint descriptor.
- The kernel adjusts the value according
- to the endpoint configuration and converts it into the number of
- frames or µframes between two consecutive polls.
- .TP
- .BI samplesz " n"
- Use
- .I n
- as the number of bytes per sample.
- .TP
- .BI hz " n"
- Use
- .I n
- as the number of samples per second.
- .TP
- .BI ntds " n"
- Use
- .I n
- as the number of transactions per frame (or µframe), as reported
- by the descriptor.
- .TP
- .B clrhalt
- Clear the halt condition for an endpoint.
- Used to recover from a stall caused by a device to signal its driver
- (usually due to an unknown request or a failure to complete one).
- .TP
- .BI info " string"
- Replaces description information in
- .B ctl
- with
- .IR string .
- .IR Usbd (8)
- uses this to add device descriptions.
- .TP
- .B address
- Tell this driver that the device has been given an address,
- which causes the device to enter the
- .I enabled
- state.
- .TP
- .BI name " str"
- Generates an additional file name,
- .I str ,
- for the
- .B data
- file of the endpoint.
- This file name appears in the root directory of the
- .L #u
- tree.
- For example, this is used by the audio device
- driver to make the
- .B data
- file also available as
- .BR /dev/audio .
- .TP
- .BI debug " n"
- Enable debugging of the endpoint.
- .I N
- is an integer;
- larger values make diagnostics more verbose.
- .L 0
- stops debugging diagnostics.
- .L 1
- causes just problem reports.
- Bigger values report almost everything.
- .TP
- .BI timeout " n"
- Enable time-outs for the endpoint.
- Transfers are timed out by the kernel after
- .I n
- ms.
- This should not be used for control and isochronous endpoints,
- which are always timed out.
- .PD
- .LP
- Setup endpoints
- (those represented by
- .BI ep N .0
- directories)
- also accept the following requests:
- .TP
- .BI new " n type mode"
- Creates a new endpoint with number
- .I n
- of the given
- .IR type
- (\c
- .BR ctl ,
- .BR bulk ,
- .BR intr ,
- or
- .BR iso ).
- .I Mode
- may be
- .BR r ,
- .BR w ,
- or
- .BR rw ,
- which creates, respectively, an input, output, or input/output endpoint.
- .TP
- .B "speed {low|full|high}
- Set the endpoint speed to full, low, or high, respectively.
- .TP
- .B hub
- Tell this driver that the endpoint corresponds to a hub device.
- .PD
- .PP
- Setup endpoints for hub devices also accept his request:
- .TP
- .B "newdev {low|full|high} \fIport\fP
- Create a new setup endpoint to represent a new device.
- The first argument is the device speed.
- .I Port
- is the port number where the device is attached
- (the hub is implied by the endpoint where the control request is issued).
- .PD
- .PP
- The file
- .B /dev/usb/ctl
- provides all the information provided by the various
- .B ctl
- files when read.
- It accepts several requests that refer to
- the entire driver and not to particular endpoints:
- .TF "\fLdebug \fIn"
- .TP
- .B "debug \fIn\fP
- Sets the global debug flag to
- .IR n .
- .TP
- .B dump
- Dumps data structures for inspection.
- .SH FILES
- .TF #u/usb
- .TP
- .B #u/usb
- root of the USB interface
- .SH SOURCE
- .B /sys/src/9/pc/usb.h
- .br
- .B /sys/src/9/pc/devusb.c
- .br
- .B /sys/src/9/pc/usb?hci.c
- .SH "SEE ALSO"
- .IR usb (2),
- .IR usb (4),
- .IR usbd (4),
- .IR plan9.ini (8)
- .SH BUGS
- Isochronous input streams are not implemented for OHCI.
- .PP
- Some EHCI controllers drop completion interrupts and so must
- be polled, which hurts throughput.
- .PP
- Not heavily exercised yet.
|