diff options
Diffstat (limited to 'Documentation/DocBook')
-rw-r--r-- | Documentation/DocBook/usb.tmpl | 98 |
1 files changed, 44 insertions, 54 deletions
diff --git a/Documentation/DocBook/usb.tmpl b/Documentation/DocBook/usb.tmpl index 320af25de3a2..8a28f76b9359 100644 --- a/Documentation/DocBook/usb.tmpl +++ b/Documentation/DocBook/usb.tmpl | |||
@@ -43,59 +43,52 @@ | |||
43 | 43 | ||
44 | <para>A Universal Serial Bus (USB) is used to connect a host, | 44 | <para>A Universal Serial Bus (USB) is used to connect a host, |
45 | such as a PC or workstation, to a number of peripheral | 45 | such as a PC or workstation, to a number of peripheral |
46 | devices. USB uses a tree structure, with the host at the | 46 | devices. USB uses a tree structure, with the host as the |
47 | root (the system's master), hubs as interior nodes, and | 47 | root (the system's master), hubs as interior nodes, and |
48 | peripheral devices as leaves (and slaves). | 48 | peripherals as leaves (and slaves). |
49 | Modern PCs support several such trees of USB devices, usually | 49 | Modern PCs support several such trees of USB devices, usually |
50 | one USB 2.0 tree (480 Mbit/sec each) with | 50 | one USB 2.0 tree (480 Mbit/sec each) with |
51 | a few USB 1.1 trees (12 Mbit/sec each) that are used when you | 51 | a few USB 1.1 trees (12 Mbit/sec each) that are used when you |
52 | connect a USB 1.1 device directly to the machine's "root hub". | 52 | connect a USB 1.1 device directly to the machine's "root hub". |
53 | </para> | 53 | </para> |
54 | 54 | ||
55 | <para>That master/slave asymmetry was designed in part for | 55 | <para>That master/slave asymmetry was designed-in for a number of |
56 | ease of use. It is not physically possible to assemble | 56 | reasons, one being ease of use. It is not physically possible to |
57 | (legal) USB cables incorrectly: all upstream "to-the-host" | 57 | assemble (legal) USB cables incorrectly: all upstream "to the host" |
58 | connectors are the rectangular type, matching the sockets on | 58 | connectors are the rectangular type (matching the sockets on |
59 | root hubs, and the downstream type are the squarish type | 59 | root hubs), and all downstream connectors are the squarish type |
60 | (or they are built in to the peripheral). | 60 | (or they are built into the peripheral). |
61 | Software doesn't need to deal with distributed autoconfiguration | 61 | Also, the host software doesn't need to deal with distributed |
62 | since the pre-designated master node manages all that. | 62 | auto-configuration since the pre-designated master node manages all that. |
63 | At the electrical level, bus protocol overhead is reduced by | 63 | And finally, at the electrical level, bus protocol overhead is reduced by |
64 | eliminating arbitration and moving scheduling into host software. | 64 | eliminating arbitration and moving scheduling into the host software. |
65 | </para> | 65 | </para> |
66 | 66 | ||
67 | <para>USB 1.0 was announced in January 1996, and was revised | 67 | <para>USB 1.0 was announced in January 1996 and was revised |
68 | as USB 1.1 (with improvements in hub specification and | 68 | as USB 1.1 (with improvements in hub specification and |
69 | support for interrupt-out transfers) in September 1998. | 69 | support for interrupt-out transfers) in September 1998. |
70 | USB 2.0 was released in April 2000, including high speed | 70 | USB 2.0 was released in April 2000, adding high-speed |
71 | transfers and transaction translating hubs (used for USB 1.1 | 71 | transfers and transaction-translating hubs (used for USB 1.1 |
72 | and 1.0 backward compatibility). | 72 | and 1.0 backward compatibility). |
73 | </para> | 73 | </para> |
74 | 74 | ||
75 | <para>USB support was added to Linux early in the 2.2 kernel series | 75 | <para>Kernel developers added USB support to Linux early in the 2.2 kernel |
76 | shortly before the 2.3 development forked off. Updates | 76 | series, shortly before 2.3 development forked. Updates from 2.3 were |
77 | from 2.3 were regularly folded back into 2.2 releases, bringing | 77 | regularly folded back into 2.2 releases, which improved reliability and |
78 | new features such as <filename>/sbin/hotplug</filename> support, | 78 | brought <filename>/sbin/hotplug</filename> support as well more drivers. |
79 | more drivers, and more robustness. | 79 | Such improvements were continued in the 2.5 kernel series, where they added |
80 | The 2.5 kernel series continued such improvements, and also | 80 | USB 2.0 support, improved performance, and made the host controller drivers |
81 | worked on USB 2.0 support, | 81 | (HCDs) more consistent. They also simplified the API (to make bugs less |
82 | higher performance, | 82 | likely) and added internal "kerneldoc" documentation. |
83 | better consistency between host controller drivers, | ||
84 | API simplification (to make bugs less likely), | ||
85 | and providing internal "kerneldoc" documentation. | ||
86 | </para> | 83 | </para> |
87 | 84 | ||
88 | <para>Linux can run inside USB devices as well as on | 85 | <para>Linux can run inside USB devices as well as on |
89 | the hosts that control the devices. | 86 | the hosts that control the devices. |
90 | Because the Linux 2.x USB support evolved to support mass market | 87 | But USB device drivers running inside those peripherals |
91 | platforms such as Apple Macintosh or PC-compatible systems, | ||
92 | it didn't address design concerns for those types of USB systems. | ||
93 | So it can't be used inside mass-market PDAs, or other peripherals. | ||
94 | USB device drivers running inside those Linux peripherals | ||
95 | don't do the same things as the ones running inside hosts, | 88 | don't do the same things as the ones running inside hosts, |
96 | and so they've been given a different name: | 89 | so they've been given a different name: |
97 | they're called <emphasis>gadget drivers</emphasis>. | 90 | <emphasis>gadget drivers</emphasis>. |
98 | This document does not present gadget drivers. | 91 | This document does not cover gadget drivers. |
99 | </para> | 92 | </para> |
100 | 93 | ||
101 | </chapter> | 94 | </chapter> |
@@ -103,17 +96,14 @@ | |||
103 | <chapter id="host"> | 96 | <chapter id="host"> |
104 | <title>USB Host-Side API Model</title> | 97 | <title>USB Host-Side API Model</title> |
105 | 98 | ||
106 | <para>Within the kernel, | 99 | <para>Host-side drivers for USB devices talk to the "usbcore" APIs. |
107 | host-side drivers for USB devices talk to the "usbcore" APIs. | 100 | There are two. One is intended for |
108 | There are two types of public "usbcore" APIs, targetted at two different | 101 | <emphasis>general-purpose</emphasis> drivers (exposed through |
109 | layers of USB driver. Those are | 102 | driver frameworks), and the other is for drivers that are |
110 | <emphasis>general purpose</emphasis> drivers, exposed through | 103 | <emphasis>part of the core</emphasis>. |
111 | driver frameworks such as block, character, or network devices; | 104 | Such core drivers include the <emphasis>hub</emphasis> driver |
112 | and drivers that are <emphasis>part of the core</emphasis>, | 105 | (which manages trees of USB devices) and several different kinds |
113 | which are involved in managing a USB bus. | 106 | of <emphasis>host controller drivers</emphasis>, |
114 | Such core drivers include the <emphasis>hub</emphasis> driver, | ||
115 | which manages trees of USB devices, and several different kinds | ||
116 | of <emphasis>host controller driver (HCD)</emphasis>, | ||
117 | which control individual busses. | 107 | which control individual busses. |
118 | </para> | 108 | </para> |
119 | 109 | ||
@@ -122,21 +112,21 @@ | |||
122 | 112 | ||
123 | <itemizedlist> | 113 | <itemizedlist> |
124 | 114 | ||
125 | <listitem><para>USB supports four kinds of data transfer | 115 | <listitem><para>USB supports four kinds of data transfers |
126 | (control, bulk, interrupt, and isochronous). Two transfer | 116 | (control, bulk, interrupt, and isochronous). Two of them (control |
127 | types use bandwidth as it's available (control and bulk), | 117 | and bulk) use bandwidth as it's available, |
128 | while the other two types of transfer (interrupt and isochronous) | 118 | while the other two (interrupt and isochronous) |
129 | are scheduled to provide guaranteed bandwidth. | 119 | are scheduled to provide guaranteed bandwidth. |
130 | </para></listitem> | 120 | </para></listitem> |
131 | 121 | ||
132 | <listitem><para>The device description model includes one or more | 122 | <listitem><para>The device description model includes one or more |
133 | "configurations" per device, only one of which is active at a time. | 123 | "configurations" per device, only one of which is active at a time. |
134 | Devices that are capable of high speed operation must also support | 124 | Devices that are capable of high-speed operation must also support |
135 | full speed configurations, along with a way to ask about the | 125 | full-speed configurations, along with a way to ask about the |
136 | "other speed" configurations that might be used. | 126 | "other speed" configurations which might be used. |
137 | </para></listitem> | 127 | </para></listitem> |
138 | 128 | ||
139 | <listitem><para>Configurations have one or more "interface", each | 129 | <listitem><para>Configurations have one or more "interfaces", each |
140 | of which may have "alternate settings". Interfaces may be | 130 | of which may have "alternate settings". Interfaces may be |
141 | standardized by USB "Class" specifications, or may be specific to | 131 | standardized by USB "Class" specifications, or may be specific to |
142 | a vendor or device.</para> | 132 | a vendor or device.</para> |
@@ -162,7 +152,7 @@ | |||
162 | </para></listitem> | 152 | </para></listitem> |
163 | 153 | ||
164 | <listitem><para>The Linux USB API supports synchronous calls for | 154 | <listitem><para>The Linux USB API supports synchronous calls for |
165 | control and bulk messaging. | 155 | control and bulk messages. |
166 | It also supports asynchnous calls for all kinds of data transfer, | 156 | It also supports asynchnous calls for all kinds of data transfer, |
167 | using request structures called "URBs" (USB Request Blocks). | 157 | using request structures called "URBs" (USB Request Blocks). |
168 | </para></listitem> | 158 | </para></listitem> |