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