usb: Avoid use-after-free by flushing endpoints early in usb_set_interface()
[linux/fpc-iii.git] / drivers / usb / gadget / Kconfig
blobf3ee80ece68284551caab11e57ab664a61d0d784
2 # USB Gadget support on a system involves
3 #    (a) a peripheral controller, and
4 #    (b) the gadget driver using it.
6 # NOTE:  Gadget support ** DOES NOT ** depend on host-side CONFIG_USB !!
8 #  - Host systems (like PCs) need CONFIG_USB (with "A" jacks).
9 #  - Peripherals (like PDAs) need CONFIG_USB_GADGET (with "B" jacks).
10 #  - Some systems have both kinds of controllers.
12 # With help from a special transceiver and a "Mini-AB" jack, systems with
13 # both kinds of controller can also support "USB On-the-Go" (CONFIG_USB_OTG).
16 menuconfig USB_GADGET
17         tristate "USB Gadget Support"
18         select USB_COMMON
19         select NLS
20         help
21            USB is a master/slave protocol, organized with one master
22            host (such as a PC) controlling up to 127 peripheral devices.
23            The USB hardware is asymmetric, which makes it easier to set up:
24            you can't connect a "to-the-host" connector to a peripheral.
26            Linux can run in the host, or in the peripheral.  In both cases
27            you need a low level bus controller driver, and some software
28            talking to it.  Peripheral controllers are often discrete silicon,
29            or are integrated with the CPU in a microcontroller.  The more
30            familiar host side controllers have names like "EHCI", "OHCI",
31            or "UHCI", and are usually integrated into southbridges on PC
32            motherboards.
34            Enable this configuration option if you want to run Linux inside
35            a USB peripheral device.  Configure one hardware driver for your
36            peripheral/device side bus controller, and a "gadget driver" for
37            your peripheral protocol.  (If you use modular gadget drivers,
38            you may configure more than one.)
40            If in doubt, say "N" and don't enable these drivers; most people
41            don't have this kind of hardware (except maybe inside Linux PDAs).
43            For more information, see <http://www.linux-usb.org/gadget> and
44            the kernel DocBook documentation for this API.
46 if USB_GADGET
48 config USB_GADGET_DEBUG
49         bool "Debugging messages (DEVELOPMENT)"
50         depends on DEBUG_KERNEL
51         help
52            Many controller and gadget drivers will print some debugging
53            messages if you use this option to ask for those messages.
55            Avoid enabling these messages, even if you're actively
56            debugging such a driver.  Many drivers will emit so many
57            messages that the driver timings are affected, which will
58            either create new failure modes or remove the one you're
59            trying to track down.  Never enable these messages for a
60            production build.
62 config USB_GADGET_VERBOSE
63         bool "Verbose debugging Messages (DEVELOPMENT)"
64         depends on USB_GADGET_DEBUG
65         help
66            Many controller and gadget drivers will print verbose debugging
67            messages if you use this option to ask for those messages.
69            Avoid enabling these messages, even if you're actively
70            debugging such a driver.  Many drivers will emit so many
71            messages that the driver timings are affected, which will
72            either create new failure modes or remove the one you're
73            trying to track down.  Never enable these messages for a
74            production build.
76 config USB_GADGET_DEBUG_FILES
77         bool "Debugging information files (DEVELOPMENT)"
78         depends on PROC_FS
79         help
80            Some of the drivers in the "gadget" framework can expose
81            debugging information in files such as /proc/driver/udc
82            (for a peripheral controller).  The information in these
83            files may help when you're troubleshooting or bringing up a
84            driver on a new board.   Enable these files by choosing "Y"
85            here.  If in doubt, or to conserve kernel memory, say "N".
87 config USB_GADGET_DEBUG_FS
88         bool "Debugging information files in debugfs (DEVELOPMENT)"
89         depends on DEBUG_FS
90         help
91            Some of the drivers in the "gadget" framework can expose
92            debugging information in files under /sys/kernel/debug/.
93            The information in these files may help when you're
94            troubleshooting or bringing up a driver on a new board.
95            Enable these files by choosing "Y" here.  If in doubt, or
96            to conserve kernel memory, say "N".
98 config USB_GADGET_VBUS_DRAW
99         int "Maximum VBUS Power usage (2-500 mA)"
100         range 2 500
101         default 2
102         help
103            Some devices need to draw power from USB when they are
104            configured, perhaps to operate circuitry or to recharge
105            batteries.  This is in addition to any local power supply,
106            such as an AC adapter or batteries.
108            Enter the maximum power your device draws through USB, in
109            milliAmperes.  The permitted range of values is 2 - 500 mA;
110            0 mA would be legal, but can make some hosts misbehave.
112            This value will be used except for system-specific gadget
113            drivers that have more specific information.
115 config USB_GADGET_STORAGE_NUM_BUFFERS
116         int "Number of storage pipeline buffers"
117         range 2 256
118         default 2
119         help
120            Usually 2 buffers are enough to establish a good buffering
121            pipeline. The number may be increased in order to compensate
122            for a bursty VFS behaviour. For instance there may be CPU wake up
123            latencies that makes the VFS to appear bursty in a system with
124            an CPU on-demand governor. Especially if DMA is doing IO to
125            offload the CPU. In this case the CPU will go into power
126            save often and spin up occasionally to move data within VFS.
127            If selecting USB_GADGET_DEBUG_FILES this value may be set by
128            a module parameter as well.
129            If unsure, say 2.
131 config U_SERIAL_CONSOLE
132         bool "Serial gadget console support"
133         depends on USB_G_SERIAL
134         help
135            It supports the serial gadget can be used as a console.
137 source "drivers/usb/gadget/udc/Kconfig"
140 # USB Gadget Drivers
143 # composite based drivers
144 config USB_LIBCOMPOSITE
145         tristate
146         select CONFIGFS_FS
147         depends on USB_GADGET
149 config USB_F_ACM
150         tristate
152 config USB_F_SS_LB
153         tristate
155 config USB_U_SERIAL
156         tristate
158 config USB_U_ETHER
159         tristate
161 config USB_F_SERIAL
162         tristate
164 config USB_F_OBEX
165         tristate
167 config USB_F_NCM
168         tristate
170 config USB_F_ECM
171         tristate
173 config USB_F_PHONET
174         tristate
176 config USB_F_EEM
177         tristate
179 config USB_F_SUBSET
180         tristate
182 config USB_F_RNDIS
183         tristate
185 config USB_F_MASS_STORAGE
186         tristate
188 config USB_F_FS
189         tristate
191 config USB_F_UAC1
192         tristate
194 config USB_F_UAC2
195         tristate
197 config USB_F_UVC
198         tristate
200 config USB_F_MIDI
201         tristate
203 config USB_F_HID
204         tristate
206 config USB_F_PRINTER
207         tristate
209 config USB_F_TCM
210         tristate
212 # this first set of drivers all depend on bulk-capable hardware.
214 config USB_CONFIGFS
215         tristate "USB functions configurable through configfs"
216         select USB_LIBCOMPOSITE
217         help
218           A Linux USB "gadget" can be set up through configfs.
219           If this is the case, the USB functions (which from the host's
220           perspective are seen as interfaces) and configurations are
221           specified simply by creating appropriate directories in configfs.
222           Associating functions with configurations is done by creating
223           appropriate symbolic links.
224           For more information see Documentation/usb/gadget_configfs.txt.
226 config USB_CONFIGFS_SERIAL
227         bool "Generic serial bulk in/out"
228         depends on USB_CONFIGFS
229         depends on TTY
230         select USB_U_SERIAL
231         select USB_F_SERIAL
232         help
233           The function talks to the Linux-USB generic serial driver.
235 config USB_CONFIGFS_ACM
236         bool "Abstract Control Model (CDC ACM)"
237         depends on USB_CONFIGFS
238         depends on TTY
239         select USB_U_SERIAL
240         select USB_F_ACM
241         help
242           ACM serial link.  This function can be used to interoperate with
243           MS-Windows hosts or with the Linux-USB "cdc-acm" driver.
245 config USB_CONFIGFS_OBEX
246         bool "Object Exchange Model (CDC OBEX)"
247         depends on USB_CONFIGFS
248         depends on TTY
249         select USB_U_SERIAL
250         select USB_F_OBEX
251         help
252           You will need a user space OBEX server talking to /dev/ttyGS*,
253           since the kernel itself doesn't implement the OBEX protocol.
255 config USB_CONFIGFS_NCM
256         bool "Network Control Model (CDC NCM)"
257         depends on USB_CONFIGFS
258         depends on NET
259         select USB_U_ETHER
260         select USB_F_NCM
261         help
262           NCM is an advanced protocol for Ethernet encapsulation, allows
263           grouping of several ethernet frames into one USB transfer and
264           different alignment possibilities.
266 config USB_CONFIGFS_ECM
267         bool "Ethernet Control Model (CDC ECM)"
268         depends on USB_CONFIGFS
269         depends on NET
270         select USB_U_ETHER
271         select USB_F_ECM
272         help
273           The "Communication Device Class" (CDC) Ethernet Control Model.
274           That protocol is often avoided with pure Ethernet adapters, in
275           favor of simpler vendor-specific hardware, but is widely
276           supported by firmware for smart network devices.
278 config USB_CONFIGFS_ECM_SUBSET
279         bool "Ethernet Control Model (CDC ECM) subset"
280         depends on USB_CONFIGFS
281         depends on NET
282         select USB_U_ETHER
283         select USB_F_SUBSET
284         help
285           On hardware that can't implement the full protocol,
286           a simple CDC subset is used, placing fewer demands on USB.
288 config USB_CONFIGFS_RNDIS
289         bool "RNDIS"
290         depends on USB_CONFIGFS
291         depends on NET
292         select USB_U_ETHER
293         select USB_F_RNDIS
294         help
295            Microsoft Windows XP bundles the "Remote NDIS" (RNDIS) protocol,
296            and Microsoft provides redistributable binary RNDIS drivers for
297            older versions of Windows.
299            To make MS-Windows work with this, use Documentation/usb/linux.inf
300            as the "driver info file".  For versions of MS-Windows older than
301            XP, you'll need to download drivers from Microsoft's website; a URL
302            is given in comments found in that info file.
304 config USB_CONFIGFS_EEM
305         bool "Ethernet Emulation Model (EEM)"
306         depends on USB_CONFIGFS
307         depends on NET
308         select USB_U_ETHER
309         select USB_F_EEM
310         help
311           CDC EEM is a newer USB standard that is somewhat simpler than CDC ECM
312           and therefore can be supported by more hardware.  Technically ECM and
313           EEM are designed for different applications.  The ECM model extends
314           the network interface to the target (e.g. a USB cable modem), and the
315           EEM model is for mobile devices to communicate with hosts using
316           ethernet over USB.  For Linux gadgets, however, the interface with
317           the host is the same (a usbX device), so the differences are minimal.
319 config USB_CONFIGFS_PHONET
320         bool "Phonet protocol"
321         depends on USB_CONFIGFS
322         depends on NET
323         depends on PHONET
324         select USB_U_ETHER
325         select USB_F_PHONET
326         help
327           The Phonet protocol implementation for USB device.
329 config USB_CONFIGFS_MASS_STORAGE
330         bool "Mass storage"
331         depends on USB_CONFIGFS
332         depends on BLOCK
333         select USB_F_MASS_STORAGE
334         help
335           The Mass Storage Gadget acts as a USB Mass Storage disk drive.
336           As its storage repository it can use a regular file or a block
337           device (in much the same way as the "loop" device driver),
338           specified as a module parameter or sysfs option.
340 config USB_CONFIGFS_F_LB_SS
341         bool "Loopback and sourcesink function (for testing)"
342         depends on USB_CONFIGFS
343         select USB_F_SS_LB
344         help
345           Loopback function loops back a configurable number of transfers.
346           Sourcesink function either sinks and sources bulk data.
347           It also implements control requests, for "chapter 9" conformance.
348           Make this be the first driver you try using on top of any new
349           USB peripheral controller driver.  Then you can use host-side
350           test software, like the "usbtest" driver, to put your hardware
351           and its driver through a basic set of functional tests.
353 config USB_CONFIGFS_F_FS
354         bool "Function filesystem (FunctionFS)"
355         depends on USB_CONFIGFS
356         select USB_F_FS
357         help
358           The Function Filesystem (FunctionFS) lets one create USB
359           composite functions in user space in the same way GadgetFS
360           lets one create USB gadgets in user space.  This allows creation
361           of composite gadgets such that some of the functions are
362           implemented in kernel space (for instance Ethernet, serial or
363           mass storage) and other are implemented in user space.
365 config USB_CONFIGFS_F_UAC1
366         bool "Audio Class 1.0"
367         depends on USB_CONFIGFS
368         depends on SND
369         select USB_LIBCOMPOSITE
370         select SND_PCM
371         select USB_F_UAC1
372         help
373           This Audio function implements 1 AudioControl interface,
374           1 AudioStreaming Interface each for USB-OUT and USB-IN.
375           This driver requires a real Audio codec to be present
376           on the device.
378 config USB_CONFIGFS_F_UAC2
379         bool "Audio Class 2.0"
380         depends on USB_CONFIGFS
381         depends on SND
382         select USB_LIBCOMPOSITE
383         select SND_PCM
384         select USB_F_UAC2
385         help
386           This Audio function is compatible with USB Audio Class
387           specification 2.0. It implements 1 AudioControl interface,
388           1 AudioStreaming Interface each for USB-OUT and USB-IN.
389           This driver doesn't expect any real Audio codec to be present
390           on the device - the audio streams are simply sinked to and
391           sourced from a virtual ALSA sound card created. The user-space
392           application may choose to do whatever it wants with the data
393           received from the USB Host and choose to provide whatever it
394           wants as audio data to the USB Host.
396 config USB_CONFIGFS_F_MIDI
397         bool "MIDI function"
398         depends on USB_CONFIGFS
399         depends on SND
400         select USB_LIBCOMPOSITE
401         select SND_RAWMIDI
402         select USB_F_MIDI
403         help
404           The MIDI Function acts as a USB Audio device, with one MIDI
405           input and one MIDI output. These MIDI jacks appear as
406           a sound "card" in the ALSA sound system. Other MIDI
407           connections can then be made on the gadget system, using
408           ALSA's aconnect utility etc.
410 config USB_CONFIGFS_F_HID
411         bool "HID function"
412         depends on USB_CONFIGFS
413         select USB_F_HID
414         help
415           The HID function driver provides generic emulation of USB
416           Human Interface Devices (HID).
418           For more information, see Documentation/usb/gadget_hid.txt.
420 config USB_CONFIGFS_F_UVC
421         bool "USB Webcam function"
422         depends on USB_CONFIGFS
423         depends on VIDEO_V4L2
424         depends on VIDEO_DEV
425         select VIDEOBUF2_VMALLOC
426         select USB_F_UVC
427         help
428           The Webcam function acts as a composite USB Audio and Video Class
429           device. It provides a userspace API to process UVC control requests
430           and stream video data to the host.
432 config USB_CONFIGFS_F_PRINTER
433         bool "Printer function"
434         select USB_F_PRINTER
435         depends on USB_CONFIGFS
436         help
437           The Printer function channels data between the USB host and a
438           userspace program driving the print engine. The user space
439           program reads and writes the device file /dev/g_printer<X> to
440           receive or send printer data. It can use ioctl calls to
441           the device file to get or set printer status.
443           For more information, see Documentation/usb/gadget_printer.txt
444           which includes sample code for accessing the device file.
446 config USB_CONFIGFS_F_TCM
447         bool "USB Gadget Target Fabric"
448         depends on TARGET_CORE
449         depends on USB_CONFIGFS
450         select USB_LIBCOMPOSITE
451         select USB_F_TCM
452         help
453           This fabric is a USB gadget component. Two USB protocols are
454           supported that is BBB or BOT (Bulk Only Transport) and UAS
455           (USB Attached SCSI). BOT is advertised on alternative
456           interface 0 (primary) and UAS is on alternative interface 1.
457           Both protocols can work on USB2.0 and USB3.0.
458           UAS utilizes the USB 3.0 feature called streams support.
460 choice
461         tristate "USB Gadget Drivers"
462         default USB_ETH
463         optional
464         help
465           A Linux "Gadget Driver" talks to the USB Peripheral Controller
466           driver through the abstract "gadget" API.  Some other operating
467           systems call these "client" drivers, of which "class drivers"
468           are a subset (implementing a USB device class specification).
469           A gadget driver implements one or more USB functions using
470           the peripheral hardware.
472           Gadget drivers are hardware-neutral, or "platform independent",
473           except that they sometimes must understand quirks or limitations
474           of the particular controllers they work with.  For example, when
475           a controller doesn't support alternate configurations or provide
476           enough of the right types of endpoints, the gadget driver might
477           not be able work with that controller, or might need to implement
478           a less common variant of a device class protocol.
480 source "drivers/usb/gadget/legacy/Kconfig"
482 endchoice
484 endif # USB_GADGET