aboutsummaryrefslogtreecommitdiff
path: root/documentation/content/en/books/arch-handbook/usb/_index.po
diff options
context:
space:
mode:
Diffstat (limited to 'documentation/content/en/books/arch-handbook/usb/_index.po')
-rw-r--r--documentation/content/en/books/arch-handbook/usb/_index.po797
1 files changed, 797 insertions, 0 deletions
diff --git a/documentation/content/en/books/arch-handbook/usb/_index.po b/documentation/content/en/books/arch-handbook/usb/_index.po
new file mode 100644
index 0000000000..25408b33b1
--- /dev/null
+++ b/documentation/content/en/books/arch-handbook/usb/_index.po
@@ -0,0 +1,797 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:20-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:1
+#, no-wrap
+msgid "USB Devices in FreeBSD"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:1
+#, no-wrap
+msgid "Chapter 13. USB Devices"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:13
+#, no-wrap
+msgid "USB Devices"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:51
+#, no-wrap
+msgid "Introduction"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:54
+msgid ""
+"The Universal Serial Bus (USB) is a new way of attaching devices to personal "
+"computers. The bus architecture features two-way communication and has been "
+"developed as a response to devices becoming smarter and requiring more "
+"interaction with the host. USB support is included in all current PC "
+"chipsets and is therefore available in all recently built PCs. Apple's "
+"introduction of the USB-only iMac has been a major incentive for hardware "
+"manufacturers to produce USB versions of their devices. The future PC "
+"specifications specify that all legacy connectors on PCs should be replaced "
+"by one or more USB connectors, providing generic plug and play capabilities. "
+"Support for USB hardware was available at a very early stage in NetBSD and "
+"was developed by Lennart Augustsson for the NetBSD project. The code has "
+"been ported to FreeBSD and we are currently maintaining a shared code base. "
+"For the implementation of the USB subsystem a number of features of USB are "
+"important."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:56
+msgid ""
+"_Lennart Augustsson has done most of the implementation of the USB support "
+"for the NetBSD project. Many thanks for this incredible amount of work. Many "
+"thanks also to Ardy and Dirk for their comments and proofreading of this "
+"paper._"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:58
+msgid ""
+"Devices connect to ports on the computer directly or on devices called hubs, "
+"forming a treelike device structure."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:59
+msgid "The devices can be connected and disconnected at run time."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:60
+msgid "Devices can suspend themselves and trigger resumes of the host system"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:61
+msgid ""
+"As the devices can be powered from the bus, the host software has to keep "
+"track of power budgets for each hub."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:62
+msgid ""
+"Different quality of service requirements by the different device types "
+"together with the maximum of 126 devices that can be connected to the same "
+"bus, require proper scheduling of transfers on the shared bus to take full "
+"advantage of the 12Mbps bandwidth available. (over 400Mbps with USB 2.0)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:63
+msgid ""
+"Devices are intelligent and contain easily accessible information about "
+"themselves"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:65
+msgid ""
+"The development of drivers for the USB subsystem and devices connected to it "
+"is supported by the specifications that have been developed and will be "
+"developed. These specifications are publicly available from the USB home "
+"pages. Apple has been very strong in pushing for standards based drivers, by "
+"making drivers for the generic classes available in their operating system "
+"MacOS and discouraging the use of separate drivers for each new device. This "
+"chapter tries to collate essential information for a basic understanding of "
+"the USB 2.0 implementation stack in FreeBSD/NetBSD. It is recommended "
+"however to read it together with the relevant 2.0 specifications and other "
+"developer resources:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:67
+msgid ""
+"USB 2.0 Specification (http://www.usb.org/developers/docs/usb20_docs/[http://"
+"www.usb.org/developers/docs/usb20_docs/])"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:68
+msgid ""
+"Universal Host Controller Interface (UHCI) Specification (link:ftp://ftp."
+"netbsd.org/pub/NetBSD/misc/blymn/uhci11d.pdf[ftp://ftp.netbsd.org/pub/NetBSD/"
+"misc/blymn/uhci11d.pdf)]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:69
+msgid ""
+"Open Host Controller Interface (OHCI) Specification(link:ftp://ftp.compaq."
+"com/pub/supportinformation/papers/hcir1_0a.pdf[ftp://ftp.compaq.com/pub/"
+"supportinformation/papers/hcir1_0a.pdf])"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:70
+msgid ""
+"Developer section of USB home page (http://www.usb.org/developers/[http://"
+"www.usb.org/developers/])"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:71
+#, no-wrap
+msgid "Structure of the USB Stack"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:74
+msgid ""
+"The USB support in FreeBSD can be split into three layers. The lowest layer "
+"contains the host controller driver, providing a generic interface to the "
+"hardware and its scheduling facilities. It supports initialisation of the "
+"hardware, scheduling of transfers and handling of completed and/or failed "
+"transfers. Each host controller driver implements a virtual hub providing "
+"hardware independent access to the registers controlling the root ports on "
+"the back of the machine."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:76
+msgid ""
+"The middle layer handles the device connection and disconnection, basic "
+"initialisation of the device, driver selection, the communication channels "
+"(pipes) and does resource management. This services layer also controls the "
+"default pipes and the device requests transferred over them."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:78
+msgid ""
+"The top layer contains the individual drivers supporting specific (classes "
+"of) devices. These drivers implement the protocol that is used over the "
+"pipes other than the default pipe. They also implement additional "
+"functionality to make the device available to other parts of the kernel or "
+"userland. They use the USB driver interface (USBDI) exposed by the services "
+"layer."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:80
+#, no-wrap
+msgid "Host Controllers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:83
+msgid ""
+"The host controller (HC) controls the transmission of packets on the bus. "
+"Frames of 1 millisecond are used. At the start of each frame the host "
+"controller generates a Start of Frame (SOF) packet."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:85
+msgid ""
+"The SOF packet is used to synchronise to the start of the frame and to keep "
+"track of the frame number. Within each frame packets are transferred, either "
+"from host to device (out) or from device to host (in). Transfers are always "
+"initiated by the host (polled transfers). Therefore there can only be one "
+"host per USB bus. Each transfer of a packet has a status stage in which the "
+"recipient of the data can return either ACK (acknowledge reception), NAK "
+"(retry), STALL (error condition) or nothing (garbled data stage, device not "
+"available or disconnected). Section 8.5 of the USB 2.0 Specification "
+"explains the details of packets in more detail. Four different types of "
+"transfers can occur on a USB bus: control, bulk, interrupt and isochronous. "
+"The types of transfers and their characteristics are described below."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:87
+msgid ""
+"Large transfers between the device on the USB bus and the device driver are "
+"split up into multiple packets by the host controller or the HC driver."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:89
+msgid ""
+"Device requests (control transfers) to the default endpoints are special. "
+"They consist of two or three phases: SETUP, DATA (optional) and STATUS. The "
+"set-up packet is sent to the device. If there is a data phase, the direction "
+"of the data packet(s) is given in the set-up packet. The direction in the "
+"status phase is the opposite of the direction during the data phase, or IN "
+"if there was no data phase. The host controller hardware also provides "
+"registers with the current status of the root ports and the changes that "
+"have occurred since the last reset of the status change register. Access to "
+"these registers is provided through a virtualised hub as suggested in the "
+"USB specification. The virtual hub must comply with the hub device class "
+"given in chapter 11 of that specification. It must provide a default pipe "
+"through which device requests can be sent to it. It returns the standard "
+"andhub class specific set of descriptors. It should also provide an "
+"interrupt pipe that reports changes happening at its ports. There are "
+"currently two specifications for host controllers available: Universal Host "
+"Controller Interface (UHCI) from Intel and Open Host Controller Interface "
+"(OHCI) from Compaq, Microsoft, and National Semiconductor. The UHCI "
+"specification has been designed to reduce hardware complexity by requiring "
+"the host controller driver to supply a complete schedule of the transfers "
+"for each frame. OHCI type controllers are much more independent by providing "
+"a more abstract interface doing a lot of work themselves."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:90
+#, no-wrap
+msgid "UHCI"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:93
+msgid ""
+"The UHCI host controller maintains a framelist with 1024 pointers to per "
+"frame data structures. It understands two different data types: transfer "
+"descriptors (TD) and queue heads (QH). Each TD represents a packet to be "
+"communicated to or from a device endpoint. QHs are a means to groupTDs (and "
+"QHs) together."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:95
+msgid ""
+"Each transfer consists of one or more packets. The UHCI driver splits large "
+"transfers into multiple packets. For every transfer, apart from isochronous "
+"transfers, a QH is allocated. For every type of transfer these QHs are "
+"collected at a QH for that type. Isochronous transfers have to be executed "
+"first because of the fixed latency requirement and are directly referred to "
+"by the pointer in the framelist. The last isochronous TD refers to the QH "
+"for interrupt transfers for that frame. All QHs for interrupt transfers "
+"point at the QH for control transfers, which in turn points at the QH for "
+"bulk transfers. The following diagram gives a graphical overview of this:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:97
+msgid ""
+"This results in the following schedule being run in each frame. After "
+"fetching the pointer for the current frame from the framelist the controller "
+"first executes the TDs for all the isochronous packets in that frame. The "
+"last of these TDs refers to the QH for the interrupt transfers for "
+"thatframe. The host controller will then descend from that QH to the QHs for "
+"the individual interrupt transfers. After finishing that queue, the QH for "
+"the interrupt transfers will refer the controller to the QH for all control "
+"transfers. It will execute all the subqueues scheduled there, followed by "
+"all the transfers queued at the bulk QH. To facilitate the handling of "
+"finished or failed transfers different types of interrupts are generated by "
+"the hardware at the end of each frame. In the last TD for a transfer the "
+"Interrupt-On Completion bit is set by the HC driver to flag an interrupt "
+"when the transfer has completed. An error interrupt is flagged if a TD "
+"reaches its maximum error count. If the short packet detect bit is set in a "
+"TD and less than the set packet length is transferred this interrupt is "
+"flagged to notify the controller driver of the completed transfer. It is the "
+"host controller driver's task to find out which transfer has completed or "
+"produced an error. When called the interrupt service routine will locate all "
+"the finished transfers and call their callbacks."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:99
+msgid "Refer to the UHCI Specification for a more elaborate description."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:100
+#, no-wrap
+msgid "OHCI"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:103
+msgid ""
+"Programming an OHCI host controller is much simpler. The controller assumes "
+"that a set of endpoints is available, and is aware of scheduling priorities "
+"and the ordering of the types of transfers in a frame. The main data "
+"structure used by the host controller is the endpoint descriptor (ED) to "
+"which a queue of transfer descriptors (TDs) is attached. The ED contains the "
+"maximum packet size allowed for an endpoint and the controller hardware does "
+"the splitting into packets. The pointers to the data buffers are updated "
+"after each transfer and when the start and end pointer are equal, the TD is "
+"retired to the done-queue. The four types of endpoints (interrupt, "
+"isochronous, control, and bulk) have their own queues. Control and bulk "
+"endpoints are queued each at their own queue. Interrupt EDs are queued in a "
+"tree, with the level in the tree defining the frequency at which they run."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:105
+msgid ""
+"The schedule being run by the host controller in each frame looks as "
+"follows. The controller will first run the non-periodic control and bulk "
+"queues, up to a time limit set by the HC driver. Then the interrupt "
+"transfers for that frame number are run, by using the lower five bits of the "
+"frame number as an index into level 0 of the tree of interrupts EDs. At the "
+"end of this tree the isochronous EDs are connected and these are traversed "
+"subsequently. The isochronous TDs contain the frame number of the first "
+"frame the transfer should be run in. After all the periodic transfers have "
+"been run, the control and bulk queues are traversed again. Periodically the "
+"interrupt service routine is called to process the done queue and call the "
+"callbacks for each transfer and reschedule interrupt and isochronous "
+"endpoints."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:107
+msgid ""
+"See the UHCI Specification for a more elaborate description. The middle "
+"layer provides access to the device in a controlled way and maintains "
+"resources in use by the different drivers and the services layer. The layer "
+"takes care of the following aspects:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:109
+msgid "The device configuration information"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:110
+msgid "The pipes to communicate with a device"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:111
+msgid "Probing and attaching and detaching form a device."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:113
+#, no-wrap
+msgid "USB Device Information"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:115
+#, no-wrap
+msgid "Device Configuration Information"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:118
+msgid ""
+"Each device provides different levels of configuration information. Each "
+"device has one or more configurations, of which one is selected during probe/"
+"attach. A configuration provides power and bandwidth requirements. Within "
+"each configuration there can be multiple interfaces. A device interface is a "
+"collection of endpoints. For example USB speakers can have an interface for "
+"the audio data (Audio Class) and an interface for the knobs, dials and "
+"buttons (HID Class). All interfaces in a configuration are active at the "
+"same time and can be attached to by different drivers. Each interface can "
+"have alternates, providing different quality of service parameters. In for "
+"example cameras this is used to provide different frame sizes and numbers of "
+"frames per second."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:120
+msgid ""
+"Within each interface, 0 or more endpoints can be specified. Endpoints are "
+"the unidirectional access points for communicating with a device. They "
+"provide buffers to temporarily store incoming or outgoing data from the "
+"device. Each endpoint has a unique address within a configuration, the "
+"endpoint's number plus its direction. The default endpoint, endpoint 0, is "
+"not part of any interface and available in all configurations. It is managed "
+"by the services layer and not directly available to device drivers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:122
+msgid ""
+"This hierarchical configuration information is described in the device by a "
+"standard set of descriptors (see section 9.6 of the USB specification). They "
+"can be requested through the Get Descriptor Request. The services layer "
+"caches these descriptors to avoid unnecessary transfers on the USB bus. "
+"Access to the descriptors is provided through function calls."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:124
+msgid ""
+"Device descriptors: General information about the device, like Vendor, "
+"Product and Revision Id, supported device class, subclass and protocol if "
+"applicable, maximum packet size for the default endpoint, etc."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:125
+msgid ""
+"Configuration descriptors: The number of interfaces in this configuration, "
+"suspend and resume functionality supported and power requirements."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:126
+msgid ""
+"Interface descriptors: interface class, subclass and protocol if applicable, "
+"number of alternate settings for the interface and the number of endpoints."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:127
+msgid ""
+"Endpoint descriptors: Endpoint address, direction and type, maximum packet "
+"size supported and polling frequency if type is interrupt endpoint. There is "
+"no descriptor for the default endpoint (endpoint 0) and it is never counted "
+"in an interface descriptor."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:128
+msgid ""
+"String descriptors: In the other descriptors string indices are supplied for "
+"some fields.These can be used to retrieve descriptive strings, possibly in "
+"multiple languages."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:130
+msgid ""
+"Class specifications can add their own descriptor types that are available "
+"through the GetDescriptor Request."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:132
+msgid ""
+"Pipes Communication to end points on a device flows through so-called pipes. "
+"Drivers submit transfers to endpoints to a pipe and provide a callback to be "
+"called on completion or failure of the transfer (asynchronous transfers) or "
+"wait for completion (synchronous transfer). Transfers to an endpoint are "
+"serialised in the pipe. A transfer can either complete, fail or time-out (if "
+"a time-out has been set). There are two types of time-outs for transfers. "
+"Time-outs can happen due to time-out on the USBbus (milliseconds). These "
+"time-outs are seen as failures and can be due to disconnection of the "
+"device. A second form of time-out is implemented in software and is "
+"triggered when a transfer does not complete within a specified amount of "
+"time (seconds). These are caused by a device acknowledging negatively (NAK) "
+"the transferred packets. The cause for this is the device not being ready to "
+"receive data, buffer under- or overrun or protocol errors."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:134
+msgid ""
+"If a transfer over a pipe is larger than the maximum packet size specified "
+"in the associated endpoint descriptor, the host controller (OHCI) or the HC "
+"driver (UHCI) will split the transfer into packets of maximum packet size, "
+"with the last packet possibly smaller than the maximum packet size."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:136
+msgid ""
+"Sometimes it is not a problem for a device to return less data than "
+"requested. For example abulk-in-transfer to a modem might request 200 bytes "
+"of data, but the modem has only 5 bytes available at that time. The driver "
+"can set the short packet (SPD) flag. It allows the host controller to accept "
+"a packet even if the amount of data transferred is less than requested. This "
+"flag is only valid for in-transfers, as the amount of data to be sent to a "
+"device is always known beforehand. If an unrecoverable error occurs in a "
+"device during a transfer the pipe is stalled. Before any more data is "
+"accepted or sent the driver needs to resolve the cause of the stall and "
+"clear the endpoint stall condition through send the clear endpoint halt "
+"device request over the default pipe. The default endpoint should never "
+"stall."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:138
+msgid ""
+"There are four different types of endpoints and corresponding pipes: - "
+"Control pipe / default pipe: There is one control pipe per device, connected "
+"to the default endpoint (endpoint 0). The pipe carries the device requests "
+"and associated data. The difference between transfers over the default pipe "
+"and other pipes is that the protocol for the transfers is described in the "
+"USB specification. These requests are used to reset and configure the "
+"device. A basic set of commands that must be supported by each device is "
+"provided in chapter 9 of the USB specification. The commands supported on "
+"this pipe can be extended by a device class specification to support "
+"additional functionality."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:140
+msgid "Bulk pipe: This is the USB equivalent to a raw transmission medium."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:141
+msgid ""
+"Interrupt pipe: The host sends a request for data to the device and if the "
+"device has nothing to send, it will NAK the data packet. Interrupt transfers "
+"are scheduled at a frequency specified when creating the pipe."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:142
+msgid ""
+"Isochronous pipe: These pipes are intended for isochronous data, for example "
+"video or audio streams, with fixed latency, but no guaranteed delivery. Some "
+"support for pipes of this type is available in the current implementation. "
+"Packets in control, bulk and interrupt transfers are retried if an error "
+"occurs during transmission or the device acknowledges the packet negatively "
+"(NAK) due to for example lack of buffer space to store the incoming data. "
+"Isochronous packets are however not retried in case of failed delivery or "
+"NAK of a packet as this might violate the timing constraints."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:144
+msgid ""
+"The availability of the necessary bandwidth is calculated during the "
+"creation of the pipe. Transfers are scheduled within frames of 1 "
+"millisecond. The bandwidth allocation within a frame is prescribed by the "
+"USB specification, section 5.6 [ 2]. Isochronous and interrupt transfers are "
+"allowed to consume up to 90% of the bandwidth within a frame. Packets for "
+"control and bulk transfers are scheduled after all isochronous and interrupt "
+"packets and will consume all the remaining bandwidth."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:146
+msgid ""
+"More information on scheduling of transfers and bandwidth reclamation can be "
+"found in chapter 5 of the USB specification, section 1.3 of the UHCI "
+"specification, and section 3.4.2 of the OHCI specification."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:148
+#, no-wrap
+msgid "Device Probe and Attach"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:151
+msgid ""
+"After the notification by the hub that a new device has been connected, the "
+"service layer switches on the port, providing the device with 100 mA of "
+"current. At this point the device is in its default state and listening to "
+"device address 0. The services layer will proceed to retrieve the various "
+"descriptors through the default pipe. After that it will send a Set Address "
+"request to move the device away from the default device address (address 0). "
+"Multiple device drivers might be able to support the device. For example a "
+"modem driver might be able to support an ISDN TA through the AT "
+"compatibility interface. A driver for that specific model of the ISDN "
+"adapter might however be able to provide much better support for this "
+"device. To support this flexibility, the probes return priorities indicating "
+"their level of support. Support for a specific revision of a product ranks "
+"the highest and the generic driver the lowest priority. It might also be "
+"that multiple drivers could attach to one device if there are multiple "
+"interfaces within one configuration. Each driver only needs to support a "
+"subset of the interfaces."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:153
+msgid ""
+"The probing for a driver for a newly attached device checks first for device "
+"specific drivers. If not found, the probe code iterates over all supported "
+"configurations until a driver attaches in a configuration. To support "
+"devices with multiple drivers on different interfaces, the probe iterates "
+"over all interfaces in a configuration that have not yet been claimed by a "
+"driver. Configurations that exceed the power budget for the hub are ignored. "
+"During attach the driver should initialise the device to its proper state, "
+"but not reset it, as this will make the device disconnect itself from the "
+"bus and restart the probing process for it. To avoid consuming unnecessary "
+"bandwidth should not claim the interrupt pipe at attach time, but should "
+"postpone allocating the pipe until the file is opened and the data is "
+"actually used. When the file is closed the pipe should be closed again, even "
+"though the device might still be attached."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:154
+#, no-wrap
+msgid "Device Disconnect and Detach"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:157
+msgid ""
+"A device driver should expect to receive errors during any transaction with "
+"the device. The design of USB supports and encourages the disconnection of "
+"devices at any point in time. Drivers should make sure that they do the "
+"right thing when the device disappears."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:159
+msgid ""
+"Furthermore a device that has been disconnected and reconnected will not be "
+"reattached at the same device instance. This might change in the future when "
+"more devices support serial numbers (see the device descriptor) or other "
+"means of defining an identity for a device have been developed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:161
+msgid ""
+"The disconnection of a device is signaled by a hub in the interrupt packet "
+"delivered to the hub driver. The status change information indicates which "
+"port has seen a connection change. The device detach method for all device "
+"drivers for the device connected on that port are called and the structures "
+"cleaned up. If the port status indicates that in the mean time a device has "
+"been connected to that port, the procedure for probing and attaching the "
+"device will be started. A device reset will produce a disconnect-connect "
+"sequence on the hub and will be handled as described above."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:163
+#, no-wrap
+msgid "USB Drivers Protocol Information"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:166
+msgid ""
+"The protocol used over pipes other than the default pipe is undefined by the "
+"USB specification. Information on this can be found from various sources. "
+"The most accurate source is the developer's section on the USB home pages. "
+"From these pages, a growing number of deviceclass specifications are "
+"available. These specifications specify what a compliant device should look "
+"like from a driver perspective, basic functionality it needs to provide and "
+"the protocol that is to be used over the communication channels. The USB "
+"specification includes the description of the Hub Class. A class "
+"specification for Human Interface Devices (HID) has been created to cater "
+"for keyboards, tablets, bar-code readers, buttons, knobs, switches, etc. A "
+"third example is the class specification for mass storage devices. For a "
+"full list of device classes see the developers section on the USB home pages."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:168
+msgid ""
+"For many devices the protocol information has not yet been published "
+"however. Information on the protocol being used might be available from the "
+"company making the device. Some companies will require you to sign a Non -"
+"Disclosure Agreement (NDA) before giving you the specifications. This in "
+"most cases precludes making the driver open source."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:170
+msgid ""
+"Another good source of information is the Linux driver sources, as a number "
+"of companies have started to provide drivers for Linux for their devices. It "
+"is always a good idea to contact the authors of those drivers for their "
+"source of information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:172
+msgid ""
+"Example: Human Interface Devices The specification for the Human Interface "
+"Devices like keyboards, mice, tablets, buttons, dials,etc. is referred to in "
+"other device class specifications and is used in many devices."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:174
+msgid ""
+"For example audio speakers provide endpoints to the digital to analogue "
+"converters and possibly an extra pipe for a microphone. They also provide a "
+"HID endpoint in a separate interface for the buttons and dials on the front "
+"of the device. The same is true for the monitor control class. It is "
+"straightforward to build support for these interfaces through the available "
+"kernel and userland libraries together with the HID class driver or the "
+"generic driver. Another device that serves as an example for interfaces "
+"within one configuration driven by different device drivers is a cheap "
+"keyboard with built-in legacy mouse port. To avoid having the cost of "
+"including the hardware for a USB hub in the device, manufacturers combined "
+"the mouse data received from the PS/2 port on the back of the keyboard and "
+"the key presses from the keyboard into two separate interfaces in the same "
+"configuration. The mouse and keyboard drivers each attach to the appropriate "
+"interface and allocate the pipes to the two independent endpoints."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:176
+msgid ""
+"Example: Firmware download Many devices that have been developed are based "
+"on a general purpose processor with an additional USB core added to it. "
+"Since the development of drivers and firmware for USB devices is still very "
+"new, many devices require the downloading of the firmware after they have "
+"been connected."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:178
+msgid ""
+"The procedure followed is straightforward. The device identifies itself "
+"through a vendor and product Id. The first driver probes and attaches to it "
+"and downloads the firmware into it. After that the device soft resets itself "
+"and the driver is detached. After a short pause the device announces its "
+"presence on the bus. The device will have changed its vendor/product/"
+"revision Id to reflect the fact that it has been supplied with firmware and "
+"as a consequence a second driver will probe it and attach to it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:180
+msgid ""
+"An example of these types of devices is the ActiveWire I/O board, based on "
+"the EZ-USB chip. For this chip a generic firmware downloader is available. "
+"The firmware downloaded into the ActiveWire board changes the revision Id. "
+"It will then perform a soft reset of the USB part of the EZ-USB chip to "
+"disconnect from the USB bus and again reconnect."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:182
+msgid ""
+"Example: Mass Storage Devices Support for mass storage devices is mainly "
+"built around existing protocols. The Iomega USB Zipdrive is based on the "
+"SCSI version of their drive. The SCSI commands and status messages are "
+"wrapped in blocks and transferred over the bulk pipes to and from the "
+"device, emulating a SCSI controller over the USB wire. ATAPI and UFI "
+"commands are supported in a similar fashion."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:184
+msgid ""
+"The Mass Storage Specification supports 2 different types of wrapping of the "
+"command block.The initial attempt was based on sending the command and "
+"status through the default pipe and using bulk transfers for the data to be "
+"moved between the host and the device. Based on experience a second approach "
+"was designed that was based on wrapping the command and status blocks and "
+"sending them over the bulk out and in endpoint. The specification specifies "
+"exactly what has to happen when and what has to be done in case an error "
+"condition is encountered. The biggest challenge when writing drivers for "
+"these devices is to fit USB based protocol into the existing support for "
+"mass storage devices. CAM provides hooks to do this in a fairly straight "
+"forward way. ATAPI is less simple as historically the IDE interface has "
+"never had many different appearances."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:185
+msgid ""
+"The support for the USB floppy from Y-E Data is again less straightforward "
+"as a new command set has been designed."
+msgstr ""