]>
Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | <?xml version="1.0" encoding="UTF-8"?> |
2 | <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" | |
3 | "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" []> | |
4 | ||
5 | <book id="USB-Gadget-API"> | |
6 | <bookinfo> | |
7 | <title>USB Gadget API for Linux</title> | |
8 | <date>20 August 2004</date> | |
9 | <edition>20 August 2004</edition> | |
10 | ||
11 | <legalnotice> | |
12 | <para> | |
13 | This documentation is free software; you can redistribute | |
14 | it and/or modify it under the terms of the GNU General Public | |
15 | License as published by the Free Software Foundation; either | |
16 | version 2 of the License, or (at your option) any later | |
17 | version. | |
18 | </para> | |
19 | ||
20 | <para> | |
21 | This program is distributed in the hope that it will be | |
22 | useful, but WITHOUT ANY WARRANTY; without even the implied | |
23 | warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |
24 | See the GNU General Public License for more details. | |
25 | </para> | |
26 | ||
27 | <para> | |
28 | You should have received a copy of the GNU General Public | |
29 | License along with this program; if not, write to the Free | |
30 | Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, | |
31 | MA 02111-1307 USA | |
32 | </para> | |
33 | ||
34 | <para> | |
35 | For more details see the file COPYING in the source | |
36 | distribution of Linux. | |
37 | </para> | |
38 | </legalnotice> | |
39 | <copyright> | |
40 | <year>2003-2004</year> | |
41 | <holder>David Brownell</holder> | |
42 | </copyright> | |
43 | ||
44 | <author> | |
45 | <firstname>David</firstname> | |
46 | <surname>Brownell</surname> | |
47 | <affiliation> | |
48 | <address><email>[email protected]</email></address> | |
49 | </affiliation> | |
50 | </author> | |
51 | </bookinfo> | |
52 | ||
53 | <toc></toc> | |
54 | ||
741ec4e6 | 55 | <chapter id="intro"><title>Introduction</title> |
1da177e4 LT |
56 | |
57 | <para>This document presents a Linux-USB "Gadget" | |
58 | kernel mode | |
59 | API, for use within peripherals and other USB devices | |
60 | that embed Linux. | |
61 | It provides an overview of the API structure, | |
62 | and shows how that fits into a system development project. | |
63 | This is the first such API released on Linux to address | |
64 | a number of important problems, including: </para> | |
65 | ||
66 | <itemizedlist> | |
67 | <listitem><para>Supports USB 2.0, for high speed devices which | |
68 | can stream data at several dozen megabytes per second. | |
69 | </para></listitem> | |
70 | <listitem><para>Handles devices with dozens of endpoints just as | |
71 | well as ones with just two fixed-function ones. Gadget drivers | |
72 | can be written so they're easy to port to new hardware. | |
73 | </para></listitem> | |
74 | <listitem><para>Flexible enough to expose more complex USB device | |
75 | capabilities such as multiple configurations, multiple interfaces, | |
76 | composite devices, | |
77 | and alternate interface settings. | |
78 | </para></listitem> | |
79 | <listitem><para>USB "On-The-Go" (OTG) support, in conjunction | |
80 | with updates to the Linux-USB host side. | |
81 | </para></listitem> | |
82 | <listitem><para>Sharing data structures and API models with the | |
83 | Linux-USB host side API. This helps the OTG support, and | |
84 | looks forward to more-symmetric frameworks (where the same | |
85 | I/O model is used by both host and device side drivers). | |
86 | </para></listitem> | |
87 | <listitem><para>Minimalist, so it's easier to support new device | |
88 | controller hardware. I/O processing doesn't imply large | |
89 | demands for memory or CPU resources. | |
90 | </para></listitem> | |
91 | </itemizedlist> | |
92 | ||
93 | ||
94 | <para>Most Linux developers will not be able to use this API, since they | |
95 | have USB "host" hardware in a PC, workstation, or server. | |
96 | Linux users with embedded systems are more likely to | |
97 | have USB peripheral hardware. | |
98 | To distinguish drivers running inside such hardware from the | |
99 | more familiar Linux "USB device drivers", | |
100 | which are host side proxies for the real USB devices, | |
101 | a different term is used: | |
102 | the drivers inside the peripherals are "USB gadget drivers". | |
103 | In USB protocol interactions, the device driver is the master | |
104 | (or "client driver") | |
105 | and the gadget driver is the slave (or "function driver"). | |
106 | </para> | |
107 | ||
108 | <para>The gadget API resembles the host side Linux-USB API in that both | |
109 | use queues of request objects to package I/O buffers, and those requests | |
110 | may be submitted or canceled. | |
111 | They share common definitions for the standard USB | |
112 | <emphasis>Chapter 9</emphasis> messages, structures, and constants. | |
113 | Also, both APIs bind and unbind drivers to devices. | |
114 | The APIs differ in detail, since the host side's current | |
115 | URB framework exposes a number of implementation details | |
116 | and assumptions that are inappropriate for a gadget API. | |
117 | While the model for control transfers and configuration | |
118 | management is necessarily different (one side is a hardware-neutral master, | |
119 | the other is a hardware-aware slave), the endpoint I/0 API used here | |
120 | should also be usable for an overhead-reduced host side API. | |
121 | </para> | |
122 | ||
123 | </chapter> | |
124 | ||
125 | <chapter id="structure"><title>Structure of Gadget Drivers</title> | |
126 | ||
127 | <para>A system running inside a USB peripheral | |
128 | normally has at least three layers inside the kernel to handle | |
129 | USB protocol processing, and may have additional layers in | |
130 | user space code. | |
131 | The "gadget" API is used by the middle layer to interact | |
132 | with the lowest level (which directly handles hardware). | |
133 | </para> | |
134 | ||
135 | <para>In Linux, from the bottom up, these layers are: | |
136 | </para> | |
137 | ||
138 | <variablelist> | |
139 | ||
140 | <varlistentry> | |
141 | <term><emphasis>USB Controller Driver</emphasis></term> | |
142 | ||
143 | <listitem> | |
144 | <para>This is the lowest software level. | |
145 | It is the only layer that talks to hardware, | |
146 | through registers, fifos, dma, irqs, and the like. | |
3f51bed3 | 147 | The <filename><linux/usb/gadget.h></filename> API abstracts |
1da177e4 LT |
148 | the peripheral controller endpoint hardware. |
149 | That hardware is exposed through endpoint objects, which accept | |
150 | streams of IN/OUT buffers, and through callbacks that interact | |
151 | with gadget drivers. | |
152 | Since normal USB devices only have one upstream | |
153 | port, they only have one of these drivers. | |
154 | The controller driver can support any number of different | |
155 | gadget drivers, but only one of them can be used at a time. | |
156 | </para> | |
157 | ||
158 | <para>Examples of such controller hardware include | |
159 | the PCI-based NetChip 2280 USB 2.0 high speed controller, | |
160 | the SA-11x0 or PXA-25x UDC (found within many PDAs), | |
161 | and a variety of other products. | |
162 | </para> | |
163 | ||
164 | </listitem></varlistentry> | |
165 | ||
166 | <varlistentry> | |
167 | <term><emphasis>Gadget Driver</emphasis></term> | |
168 | ||
169 | <listitem> | |
170 | <para>The lower boundary of this driver implements hardware-neutral | |
171 | USB functions, using calls to the controller driver. | |
172 | Because such hardware varies widely in capabilities and restrictions, | |
173 | and is used in embedded environments where space is at a premium, | |
174 | the gadget driver is often configured at compile time | |
175 | to work with endpoints supported by one particular controller. | |
176 | Gadget drivers may be portable to several different controllers, | |
177 | using conditional compilation. | |
178 | (Recent kernels substantially simplify the work involved in | |
179 | supporting new hardware, by <emphasis>autoconfiguring</emphasis> | |
180 | endpoints automatically for many bulk-oriented drivers.) | |
181 | Gadget driver responsibilities include: | |
182 | </para> | |
183 | <itemizedlist> | |
184 | <listitem><para>handling setup requests (ep0 protocol responses) | |
185 | possibly including class-specific functionality | |
186 | </para></listitem> | |
187 | <listitem><para>returning configuration and string descriptors | |
188 | </para></listitem> | |
189 | <listitem><para>(re)setting configurations and interface | |
190 | altsettings, including enabling and configuring endpoints | |
191 | </para></listitem> | |
192 | <listitem><para>handling life cycle events, such as managing | |
193 | bindings to hardware, | |
194 | USB suspend/resume, remote wakeup, | |
195 | and disconnection from the USB host. | |
196 | </para></listitem> | |
197 | <listitem><para>managing IN and OUT transfers on all currently | |
198 | enabled endpoints | |
199 | </para></listitem> | |
200 | </itemizedlist> | |
201 | ||
202 | <para> | |
203 | Such drivers may be modules of proprietary code, although | |
204 | that approach is discouraged in the Linux community. | |
205 | </para> | |
206 | </listitem></varlistentry> | |
207 | ||
208 | <varlistentry> | |
209 | <term><emphasis>Upper Level</emphasis></term> | |
210 | ||
211 | <listitem> | |
212 | <para>Most gadget drivers have an upper boundary that connects | |
213 | to some Linux driver or framework in Linux. | |
214 | Through that boundary flows the data which the gadget driver | |
215 | produces and/or consumes through protocol transfers over USB. | |
216 | Examples include: | |
217 | </para> | |
218 | <itemizedlist> | |
219 | <listitem><para>user mode code, using generic (gadgetfs) | |
220 | or application specific files in | |
221 | <filename>/dev</filename> | |
222 | </para></listitem> | |
223 | <listitem><para>networking subsystem (for network gadgets, | |
224 | like the CDC Ethernet Model gadget driver) | |
225 | </para></listitem> | |
226 | <listitem><para>data capture drivers, perhaps video4Linux or | |
227 | a scanner driver; or test and measurement hardware. | |
228 | </para></listitem> | |
229 | <listitem><para>input subsystem (for HID gadgets) | |
230 | </para></listitem> | |
231 | <listitem><para>sound subsystem (for audio gadgets) | |
232 | </para></listitem> | |
233 | <listitem><para>file system (for PTP gadgets) | |
234 | </para></listitem> | |
235 | <listitem><para>block i/o subsystem (for usb-storage gadgets) | |
236 | </para></listitem> | |
237 | <listitem><para>... and more </para></listitem> | |
238 | </itemizedlist> | |
239 | </listitem></varlistentry> | |
240 | ||
241 | <varlistentry> | |
242 | <term><emphasis>Additional Layers</emphasis></term> | |
243 | ||
244 | <listitem> | |
245 | <para>Other layers may exist. | |
246 | These could include kernel layers, such as network protocol stacks, | |
247 | as well as user mode applications building on standard POSIX | |
248 | system call APIs such as | |
249 | <emphasis>open()</emphasis>, <emphasis>close()</emphasis>, | |
250 | <emphasis>read()</emphasis> and <emphasis>write()</emphasis>. | |
251 | On newer systems, POSIX Async I/O calls may be an option. | |
252 | Such user mode code will not necessarily be subject to | |
253 | the GNU General Public License (GPL). | |
254 | </para> | |
255 | </listitem></varlistentry> | |
256 | ||
257 | ||
258 | </variablelist> | |
259 | ||
260 | <para>OTG-capable systems will also need to include a standard Linux-USB | |
261 | host side stack, | |
262 | with <emphasis>usbcore</emphasis>, | |
263 | one or more <emphasis>Host Controller Drivers</emphasis> (HCDs), | |
264 | <emphasis>USB Device Drivers</emphasis> to support | |
265 | the OTG "Targeted Peripheral List", | |
266 | and so forth. | |
267 | There will also be an <emphasis>OTG Controller Driver</emphasis>, | |
268 | which is visible to gadget and device driver developers only indirectly. | |
269 | That helps the host and device side USB controllers implement the | |
270 | two new OTG protocols (HNP and SRP). | |
271 | Roles switch (host to peripheral, or vice versa) using HNP | |
272 | during USB suspend processing, and SRP can be viewed as a | |
273 | more battery-friendly kind of device wakeup protocol. | |
274 | </para> | |
275 | ||
276 | <para>Over time, reusable utilities are evolving to help make some | |
277 | gadget driver tasks simpler. | |
278 | For example, building configuration descriptors from vectors of | |
279 | descriptors for the configurations interfaces and endpoints is | |
280 | now automated, and many drivers now use autoconfiguration to | |
281 | choose hardware endpoints and initialize their descriptors. | |
282 | ||
283 | A potential example of particular interest | |
284 | is code implementing standard USB-IF protocols for | |
285 | HID, networking, storage, or audio classes. | |
286 | Some developers are interested in KDB or KGDB hooks, to let | |
287 | target hardware be remotely debugged. | |
288 | Most such USB protocol code doesn't need to be hardware-specific, | |
289 | any more than network protocols like X11, HTTP, or NFS are. | |
290 | Such gadget-side interface drivers should eventually be combined, | |
291 | to implement composite devices. | |
292 | </para> | |
293 | ||
294 | </chapter> | |
295 | ||
296 | ||
297 | <chapter id="api"><title>Kernel Mode Gadget API</title> | |
298 | ||
299 | <para>Gadget drivers declare themselves through a | |
300 | <emphasis>struct usb_gadget_driver</emphasis>, which is responsible for | |
301 | most parts of enumeration for a <emphasis>struct usb_gadget</emphasis>. | |
302 | The response to a set_configuration usually involves | |
303 | enabling one or more of the <emphasis>struct usb_ep</emphasis> objects | |
304 | exposed by the gadget, and submitting one or more | |
305 | <emphasis>struct usb_request</emphasis> buffers to transfer data. | |
306 | Understand those four data types, and their operations, and | |
307 | you will understand how this API works. | |
308 | </para> | |
309 | ||
310 | <note><title>Incomplete Data Type Descriptions</title> | |
311 | ||
312 | <para>This documentation was prepared using the standard Linux | |
313 | kernel <filename>docproc</filename> tool, which turns text | |
314 | and in-code comments into SGML DocBook and then into usable | |
315 | formats such as HTML or PDF. | |
316 | Other than the "Chapter 9" data types, most of the significant | |
317 | data types and functions are described here. | |
318 | </para> | |
319 | ||
320 | <para>However, docproc does not understand all the C constructs | |
321 | that are used, so some relevant information is likely omitted from | |
322 | what you are reading. | |
323 | One example of such information is endpoint autoconfiguration. | |
324 | You'll have to read the header file, and use example source | |
325 | code (such as that for "Gadget Zero"), to fully understand the API. | |
326 | </para> | |
327 | ||
328 | <para>The part of the API implementing some basic | |
329 | driver capabilities is specific to the version of the | |
330 | Linux kernel that's in use. | |
331 | The 2.6 kernel includes a <emphasis>driver model</emphasis> | |
332 | framework that has no analogue on earlier kernels; | |
333 | so those parts of the gadget API are not fully portable. | |
334 | (They are implemented on 2.4 kernels, but in a different way.) | |
335 | The driver model state is another part of this API that is | |
336 | ignored by the kerneldoc tools. | |
337 | </para> | |
338 | </note> | |
339 | ||
340 | <para>The core API does not expose | |
341 | every possible hardware feature, only the most widely available ones. | |
342 | There are significant hardware features, such as device-to-device DMA | |
343 | (without temporary storage in a memory buffer) | |
344 | that would be added using hardware-specific APIs. | |
345 | </para> | |
346 | ||
347 | <para>This API allows drivers to use conditional compilation to handle | |
348 | endpoint capabilities of different hardware, but doesn't require that. | |
349 | Hardware tends to have arbitrary restrictions, relating to | |
350 | transfer types, addressing, packet sizes, buffering, and availability. | |
351 | As a rule, such differences only matter for "endpoint zero" logic | |
352 | that handles device configuration and management. | |
353 | The API supports limited run-time | |
354 | detection of capabilities, through naming conventions for endpoints. | |
355 | Many drivers will be able to at least partially autoconfigure | |
356 | themselves. | |
357 | In particular, driver init sections will often have endpoint | |
358 | autoconfiguration logic that scans the hardware's list of endpoints | |
359 | to find ones matching the driver requirements | |
360 | (relying on those conventions), to eliminate some of the most | |
361 | common reasons for conditional compilation. | |
362 | </para> | |
363 | ||
364 | <para>Like the Linux-USB host side API, this API exposes | |
365 | the "chunky" nature of USB messages: I/O requests are in terms | |
366 | of one or more "packets", and packet boundaries are visible to drivers. | |
367 | Compared to RS-232 serial protocols, USB resembles | |
368 | synchronous protocols like HDLC | |
369 | (N bytes per frame, multipoint addressing, host as the primary | |
370 | station and devices as secondary stations) | |
371 | more than asynchronous ones | |
372 | (tty style: 8 data bits per frame, no parity, one stop bit). | |
373 | So for example the controller drivers won't buffer | |
374 | two single byte writes into a single two-byte USB IN packet, | |
375 | although gadget drivers may do so when they implement | |
376 | protocols where packet boundaries (and "short packets") | |
377 | are not significant. | |
378 | </para> | |
379 | ||
380 | <sect1 id="lifecycle"><title>Driver Life Cycle</title> | |
381 | ||
382 | <para>Gadget drivers make endpoint I/O requests to hardware without | |
383 | needing to know many details of the hardware, but driver | |
384 | setup/configuration code needs to handle some differences. | |
385 | Use the API like this: | |
386 | </para> | |
387 | ||
388 | <orderedlist numeration='arabic'> | |
389 | ||
390 | <listitem><para>Register a driver for the particular device side | |
391 | usb controller hardware, | |
392 | such as the net2280 on PCI (USB 2.0), | |
393 | sa11x0 or pxa25x as found in Linux PDAs, | |
394 | and so on. | |
395 | At this point the device is logically in the USB ch9 initial state | |
396 | ("attached"), drawing no power and not usable | |
397 | (since it does not yet support enumeration). | |
398 | Any host should not see the device, since it's not | |
399 | activated the data line pullup used by the host to | |
400 | detect a device, even if VBUS power is available. | |
401 | </para></listitem> | |
402 | ||
403 | <listitem><para>Register a gadget driver that implements some higher level | |
404 | device function. That will then bind() to a usb_gadget, which | |
405 | activates the data line pullup sometime after detecting VBUS. | |
406 | </para></listitem> | |
407 | ||
408 | <listitem><para>The hardware driver can now start enumerating. | |
409 | The steps it handles are to accept USB power and set_address requests. | |
410 | Other steps are handled by the gadget driver. | |
411 | If the gadget driver module is unloaded before the host starts to | |
412 | enumerate, steps before step 7 are skipped. | |
413 | </para></listitem> | |
414 | ||
415 | <listitem><para>The gadget driver's setup() call returns usb descriptors, | |
416 | based both on what the bus interface hardware provides and on the | |
417 | functionality being implemented. | |
418 | That can involve alternate settings or configurations, | |
419 | unless the hardware prevents such operation. | |
420 | For OTG devices, each configuration descriptor includes | |
421 | an OTG descriptor. | |
422 | </para></listitem> | |
423 | ||
424 | <listitem><para>The gadget driver handles the last step of enumeration, | |
425 | when the USB host issues a set_configuration call. | |
426 | It enables all endpoints used in that configuration, | |
427 | with all interfaces in their default settings. | |
428 | That involves using a list of the hardware's endpoints, enabling each | |
429 | endpoint according to its descriptor. | |
430 | It may also involve using <function>usb_gadget_vbus_draw</function> | |
431 | to let more power be drawn from VBUS, as allowed by that configuration. | |
432 | For OTG devices, setting a configuration may also involve reporting | |
433 | HNP capabilities through a user interface. | |
434 | </para></listitem> | |
435 | ||
436 | <listitem><para>Do real work and perform data transfers, possibly involving | |
437 | changes to interface settings or switching to new configurations, until the | |
438 | device is disconnect()ed from the host. | |
439 | Queue any number of transfer requests to each endpoint. | |
440 | It may be suspended and resumed several times before being disconnected. | |
441 | On disconnect, the drivers go back to step 3 (above). | |
442 | </para></listitem> | |
443 | ||
444 | <listitem><para>When the gadget driver module is being unloaded, | |
445 | the driver unbind() callback is issued. That lets the controller | |
446 | driver be unloaded. | |
447 | </para></listitem> | |
448 | ||
449 | </orderedlist> | |
450 | ||
451 | <para>Drivers will normally be arranged so that just loading the | |
452 | gadget driver module (or statically linking it into a Linux kernel) | |
453 | allows the peripheral device to be enumerated, but some drivers | |
454 | will defer enumeration until some higher level component (like | |
455 | a user mode daemon) enables it. | |
456 | Note that at this lowest level there are no policies about how | |
457 | ep0 configuration logic is implemented, | |
458 | except that it should obey USB specifications. | |
459 | Such issues are in the domain of gadget drivers, | |
460 | including knowing about implementation constraints | |
461 | imposed by some USB controllers | |
462 | or understanding that composite devices might happen to | |
463 | be built by integrating reusable components. | |
464 | </para> | |
465 | ||
466 | <para>Note that the lifecycle above can be slightly different | |
467 | for OTG devices. | |
468 | Other than providing an additional OTG descriptor in each | |
469 | configuration, only the HNP-related differences are particularly | |
470 | visible to driver code. | |
471 | They involve reporting requirements during the SET_CONFIGURATION | |
472 | request, and the option to invoke HNP during some suspend callbacks. | |
473 | Also, SRP changes the semantics of | |
474 | <function>usb_gadget_wakeup</function> | |
475 | slightly. | |
476 | </para> | |
477 | ||
478 | </sect1> | |
479 | ||
480 | <sect1 id="ch9"><title>USB 2.0 Chapter 9 Types and Constants</title> | |
481 | ||
482 | <para>Gadget drivers | |
483 | rely on common USB structures and constants | |
484 | defined in the | |
c67687f3 | 485 | <filename><linux/usb/ch9.h></filename> |
1da177e4 LT |
486 | header file, which is standard in Linux 2.6 kernels. |
487 | These are the same types and constants used by host | |
488 | side drivers (and usbcore). | |
489 | </para> | |
490 | ||
c67687f3 | 491 | !Iinclude/linux/usb/ch9.h |
1da177e4 LT |
492 | </sect1> |
493 | ||
494 | <sect1 id="core"><title>Core Objects and Methods</title> | |
495 | ||
496 | <para>These are declared in | |
3f51bed3 | 497 | <filename><linux/usb/gadget.h></filename>, |
1da177e4 LT |
498 | and are used by gadget drivers to interact with |
499 | USB peripheral controller drivers. | |
500 | </para> | |
501 | ||
502 | <!-- yeech, this is ugly in nsgmls PDF output. | |
503 | ||
504 | the PDF bookmark and refentry output nesting is wrong, | |
505 | and the member/argument documentation indents ugly. | |
506 | ||
507 | plus something (docproc?) adds whitespace before the | |
508 | descriptive paragraph text, so it can't line up right | |
509 | unless the explanations are trivial. | |
510 | --> | |
511 | ||
3f51bed3 | 512 | !Iinclude/linux/usb/gadget.h |
1da177e4 LT |
513 | </sect1> |
514 | ||
515 | <sect1 id="utils"><title>Optional Utilities</title> | |
516 | ||
517 | <para>The core API is sufficient for writing a USB Gadget Driver, | |
518 | but some optional utilities are provided to simplify common tasks. | |
519 | These utilities include endpoint autoconfiguration. | |
520 | </para> | |
521 | ||
522 | !Edrivers/usb/gadget/usbstring.c | |
523 | !Edrivers/usb/gadget/config.c | |
524 | <!-- !Edrivers/usb/gadget/epautoconf.c --> | |
525 | </sect1> | |
526 | ||
40982be5 DB |
527 | <sect1 id="composite"><title>Composite Device Framework</title> |
528 | ||
529 | <para>The core API is sufficient for writing drivers for composite | |
530 | USB devices (with more than one function in a given configuration), | |
531 | and also multi-configuration devices (also more than one function, | |
532 | but not necessarily sharing a given configuration). | |
533 | There is however an optional framework which makes it easier to | |
534 | reuse and combine functions. | |
535 | </para> | |
536 | ||
537 | <para>Devices using this framework provide a <emphasis>struct | |
538 | usb_composite_driver</emphasis>, which in turn provides one or | |
539 | more <emphasis>struct usb_configuration</emphasis> instances. | |
540 | Each such configuration includes at least one | |
541 | <emphasis>struct usb_function</emphasis>, which packages a user | |
542 | visible role such as "network link" or "mass storage device". | |
543 | Management functions may also exist, such as "Device Firmware | |
544 | Upgrade". | |
545 | </para> | |
546 | ||
547 | !Iinclude/linux/usb/composite.h | |
548 | !Edrivers/usb/gadget/composite.c | |
549 | ||
550 | </sect1> | |
551 | ||
552 | <sect1 id="functions"><title>Composite Device Functions</title> | |
553 | ||
554 | <para>At this writing, a few of the current gadget drivers have | |
555 | been converted to this framework. | |
556 | Near-term plans include converting all of them, except for "gadgetfs". | |
557 | </para> | |
558 | ||
8346b33f AP |
559 | !Edrivers/usb/gadget/function/f_acm.c |
560 | !Edrivers/usb/gadget/function/f_ecm.c | |
561 | !Edrivers/usb/gadget/function/f_subset.c | |
562 | !Edrivers/usb/gadget/function/f_obex.c | |
563 | !Edrivers/usb/gadget/function/f_serial.c | |
4d5a73dc | 564 | |
40982be5 DB |
565 | </sect1> |
566 | ||
567 | ||
1da177e4 LT |
568 | </chapter> |
569 | ||
570 | <chapter id="controllers"><title>Peripheral Controller Drivers</title> | |
571 | ||
572 | <para>The first hardware supporting this API was the NetChip 2280 | |
573 | controller, which supports USB 2.0 high speed and is based on PCI. | |
574 | This is the <filename>net2280</filename> driver module. | |
575 | The driver supports Linux kernel versions 2.4 and 2.6; | |
576 | contact NetChip Technologies for development boards and product | |
577 | information. | |
578 | </para> | |
579 | ||
580 | <para>Other hardware working in the "gadget" framework includes: | |
581 | Intel's PXA 25x and IXP42x series processors | |
582 | (<filename>pxa2xx_udc</filename>), | |
583 | Toshiba TC86c001 "Goku-S" (<filename>goku_udc</filename>), | |
584 | Renesas SH7705/7727 (<filename>sh_udc</filename>), | |
585 | MediaQ 11xx (<filename>mq11xx_udc</filename>), | |
586 | Hynix HMS30C7202 (<filename>h7202_udc</filename>), | |
587 | National 9303/4 (<filename>n9604_udc</filename>), | |
588 | Texas Instruments OMAP (<filename>omap_udc</filename>), | |
589 | Sharp LH7A40x (<filename>lh7a40x_udc</filename>), | |
590 | and more. | |
591 | Most of those are full speed controllers. | |
592 | </para> | |
593 | ||
594 | <para>At this writing, there are people at work on drivers in | |
595 | this framework for several other USB device controllers, | |
596 | with plans to make many of them be widely available. | |
597 | </para> | |
598 | ||
599 | <!-- !Edrivers/usb/gadget/net2280.c --> | |
600 | ||
601 | <para>A partial USB simulator, | |
602 | the <filename>dummy_hcd</filename> driver, is available. | |
603 | It can act like a net2280, a pxa25x, or an sa11x0 in terms | |
604 | of available endpoints and device speeds; and it simulates | |
605 | control, bulk, and to some extent interrupt transfers. | |
606 | That lets you develop some parts of a gadget driver on a normal PC, | |
607 | without any special hardware, and perhaps with the assistance | |
608 | of tools such as GDB running with User Mode Linux. | |
609 | At least one person has expressed interest in adapting that | |
610 | approach, hooking it up to a simulator for a microcontroller. | |
611 | Such simulators can help debug subsystems where the runtime hardware | |
612 | is unfriendly to software development, or is not yet available. | |
613 | </para> | |
614 | ||
615 | <para>Support for other controllers is expected to be developed | |
616 | and contributed | |
617 | over time, as this driver framework evolves. | |
618 | </para> | |
619 | ||
620 | </chapter> | |
621 | ||
622 | <chapter id="gadget"><title>Gadget Drivers</title> | |
623 | ||
624 | <para>In addition to <emphasis>Gadget Zero</emphasis> | |
625 | (used primarily for testing and development with drivers | |
626 | for usb controller hardware), other gadget drivers exist. | |
627 | </para> | |
628 | ||
629 | <para>There's an <emphasis>ethernet</emphasis> gadget | |
630 | driver, which implements one of the most useful | |
631 | <emphasis>Communications Device Class</emphasis> (CDC) models. | |
632 | One of the standards for cable modem interoperability even | |
633 | specifies the use of this ethernet model as one of two | |
634 | mandatory options. | |
635 | Gadgets using this code look to a USB host as if they're | |
636 | an Ethernet adapter. | |
637 | It provides access to a network where the gadget's CPU is one host, | |
638 | which could easily be bridging, routing, or firewalling | |
639 | access to other networks. | |
640 | Since some hardware can't fully implement the CDC Ethernet | |
641 | requirements, this driver also implements a "good parts only" | |
642 | subset of CDC Ethernet. | |
643 | (That subset doesn't advertise itself as CDC Ethernet, | |
644 | to avoid creating problems.) | |
645 | </para> | |
646 | ||
647 | <para>Support for Microsoft's <emphasis>RNDIS</emphasis> | |
648 | protocol has been contributed by Pengutronix and Auerswald GmbH. | |
649 | This is like CDC Ethernet, but it runs on more slightly USB hardware | |
650 | (but less than the CDC subset). | |
651 | However, its main claim to fame is being able to connect directly to | |
652 | recent versions of Windows, using drivers that Microsoft bundles | |
653 | and supports, making it much simpler to network with Windows. | |
654 | </para> | |
655 | ||
656 | <para>There is also support for user mode gadget drivers, | |
657 | using <emphasis>gadgetfs</emphasis>. | |
658 | This provides a <emphasis>User Mode API</emphasis> that presents | |
659 | each endpoint as a single file descriptor. I/O is done using | |
660 | normal <emphasis>read()</emphasis> and <emphasis>read()</emphasis> calls. | |
661 | Familiar tools like GDB and pthreads can be used to | |
662 | develop and debug user mode drivers, so that once a robust | |
663 | controller driver is available many applications for it | |
664 | won't require new kernel mode software. | |
665 | Linux 2.6 <emphasis>Async I/O (AIO)</emphasis> | |
666 | support is available, so that user mode software | |
667 | can stream data with only slightly more overhead | |
668 | than a kernel driver. | |
669 | </para> | |
670 | ||
671 | <para>There's a USB Mass Storage class driver, which provides | |
672 | a different solution for interoperability with systems such | |
673 | as MS-Windows and MacOS. | |
fa06920a | 674 | That <emphasis>Mass Storage</emphasis> driver uses a |
1da177e4 LT |
675 | file or block device as backing store for a drive, |
676 | like the <filename>loop</filename> driver. | |
677 | The USB host uses the BBB, CB, or CBI versions of the mass | |
678 | storage class specification, using transparent SCSI commands | |
679 | to access the data from the backing store. | |
680 | </para> | |
681 | ||
682 | <para>There's a "serial line" driver, useful for TTY style | |
683 | operation over USB. | |
684 | The latest version of that driver supports CDC ACM style | |
685 | operation, like a USB modem, and so on most hardware it can | |
686 | interoperate easily with MS-Windows. | |
687 | One interesting use of that driver is in boot firmware (like a BIOS), | |
688 | which can sometimes use that model with very small systems without | |
689 | real serial lines. | |
690 | </para> | |
691 | ||
692 | <para>Support for other kinds of gadget is expected to | |
693 | be developed and contributed | |
694 | over time, as this driver framework evolves. | |
695 | </para> | |
696 | ||
697 | </chapter> | |
698 | ||
699 | <chapter id="otg"><title>USB On-The-GO (OTG)</title> | |
700 | ||
701 | <para>USB OTG support on Linux 2.6 was initially developed | |
702 | by Texas Instruments for | |
703 | <ulink url="http://www.omap.com">OMAP</ulink> 16xx and 17xx | |
704 | series processors. | |
705 | Other OTG systems should work in similar ways, but the | |
706 | hardware level details could be very different. | |
707 | </para> | |
708 | ||
709 | <para>Systems need specialized hardware support to implement OTG, | |
710 | notably including a special <emphasis>Mini-AB</emphasis> jack | |
0ba4f6e4 | 711 | and associated transceiver to support <emphasis>Dual-Role</emphasis> |
1da177e4 LT |
712 | operation: |
713 | they can act either as a host, using the standard | |
714 | Linux-USB host side driver stack, | |
715 | or as a peripheral, using this "gadget" framework. | |
716 | To do that, the system software relies on small additions | |
717 | to those programming interfaces, | |
718 | and on a new internal component (here called an "OTG Controller") | |
719 | affecting which driver stack connects to the OTG port. | |
720 | In each role, the system can re-use the existing pool of | |
721 | hardware-neutral drivers, layered on top of the controller | |
722 | driver interfaces (<emphasis>usb_bus</emphasis> or | |
723 | <emphasis>usb_gadget</emphasis>). | |
724 | Such drivers need at most minor changes, and most of the calls | |
725 | added to support OTG can also benefit non-OTG products. | |
726 | </para> | |
727 | ||
728 | <itemizedlist> | |
729 | <listitem><para>Gadget drivers test the <emphasis>is_otg</emphasis> | |
730 | flag, and use it to determine whether or not to include | |
731 | an OTG descriptor in each of their configurations. | |
732 | </para></listitem> | |
733 | <listitem><para>Gadget drivers may need changes to support the | |
734 | two new OTG protocols, exposed in new gadget attributes | |
735 | such as <emphasis>b_hnp_enable</emphasis> flag. | |
736 | HNP support should be reported through a user interface | |
737 | (two LEDs could suffice), and is triggered in some cases | |
738 | when the host suspends the peripheral. | |
739 | SRP support can be user-initiated just like remote wakeup, | |
740 | probably by pressing the same button. | |
741 | </para></listitem> | |
742 | <listitem><para>On the host side, USB device drivers need | |
743 | to be taught to trigger HNP at appropriate moments, using | |
744 | <function>usb_suspend_device()</function>. | |
745 | That also conserves battery power, which is useful even | |
746 | for non-OTG configurations. | |
747 | </para></listitem> | |
748 | <listitem><para>Also on the host side, a driver must support the | |
749 | OTG "Targeted Peripheral List". That's just a whitelist, | |
750 | used to reject peripherals not supported with a given | |
751 | Linux OTG host. | |
752 | <emphasis>This whitelist is product-specific; | |
753 | each product must modify <filename>otg_whitelist.h</filename> | |
754 | to match its interoperability specification. | |
755 | </emphasis> | |
756 | </para> | |
757 | <para>Non-OTG Linux hosts, like PCs and workstations, | |
758 | normally have some solution for adding drivers, so that | |
759 | peripherals that aren't recognized can eventually be supported. | |
760 | That approach is unreasonable for consumer products that may | |
761 | never have their firmware upgraded, and where it's usually | |
762 | unrealistic to expect traditional PC/workstation/server kinds | |
763 | of support model to work. | |
764 | For example, it's often impractical to change device firmware | |
765 | once the product has been distributed, so driver bugs can't | |
766 | normally be fixed if they're found after shipment. | |
767 | </para></listitem> | |
768 | </itemizedlist> | |
769 | ||
770 | <para> | |
771 | Additional changes are needed below those hardware-neutral | |
772 | <emphasis>usb_bus</emphasis> and <emphasis>usb_gadget</emphasis> | |
773 | driver interfaces; those aren't discussed here in any detail. | |
774 | Those affect the hardware-specific code for each USB Host or Peripheral | |
775 | controller, and how the HCD initializes (since OTG can be active only | |
776 | on a single port). | |
777 | They also involve what may be called an <emphasis>OTG Controller | |
778 | Driver</emphasis>, managing the OTG transceiver and the OTG state | |
779 | machine logic as well as much of the root hub behavior for the | |
780 | OTG port. | |
781 | The OTG controller driver needs to activate and deactivate USB | |
782 | controllers depending on the relevant device role. | |
783 | Some related changes were needed inside usbcore, so that it | |
784 | can identify OTG-capable devices and respond appropriately | |
785 | to HNP or SRP protocols. | |
786 | </para> | |
787 | ||
788 | </chapter> | |
789 | ||
790 | </book> | |
791 | <!-- | |
792 | vim:syntax=sgml:sw=4 | |
793 | --> |