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 17choice 18 tristate "USB Gadget precomposed configurations" 19 default USB_ETH 20 optional 21 help 22 A Linux "Gadget Driver" talks to the USB Peripheral Controller 23 driver through the abstract "gadget" API. Some other operating 24 systems call these "client" drivers, of which "class drivers" 25 are a subset (implementing a USB device class specification). 26 A gadget driver implements one or more USB functions using 27 the peripheral hardware. 28 29 Gadget drivers are hardware-neutral, or "platform independent", 30 except that they sometimes must understand quirks or limitations 31 of the particular controllers they work with. For example, when 32 a controller doesn't support alternate configurations or provide 33 enough of the right types of endpoints, the gadget driver might 34 not be able work with that controller, or might need to implement 35 a less common variant of a device class protocol. 36 37 The available choices each represent a single precomposed USB 38 gadget configuration. In the device model, each option contains 39 both the device instantiation as a child for a USB gadget 40 controller, and the relevant drivers for each function declared 41 by the device. 42 43config USB_ZERO 44 tristate "Gadget Zero (DEVELOPMENT)" 45 select USB_LIBCOMPOSITE 46 select USB_F_SS_LB 47 help 48 Gadget Zero is a two-configuration device. It either sinks and 49 sources bulk data; or it loops back a configurable number of 50 transfers. It also implements control requests, for "chapter 9" 51 conformance. The driver needs only two bulk-capable endpoints, so 52 it can work on top of most device-side usb controllers. It's 53 useful for testing, and is also a working example showing how 54 USB "gadget drivers" can be written. 55 56 Make this be the first driver you try using on top of any new 57 USB peripheral controller driver. Then you can use host-side 58 test software, like the "usbtest" driver, to put your hardware 59 and its driver through a basic set of functional tests. 60 61 Gadget Zero also works with the host-side "usb-skeleton" driver, 62 and with many kinds of host-side test software. You may need 63 to tweak product and vendor IDs before host software knows about 64 this device, and arrange to select an appropriate configuration. 65 66 Say "y" to link the driver statically, or "m" to build a 67 dynamically linked module called "g_zero". 68 69config USB_ZERO_HNPTEST 70 bool "HNP Test Device" 71 depends on USB_ZERO && USB_OTG 72 help 73 You can configure this device to enumerate using the device 74 identifiers of the USB-OTG test device. That means that when 75 this gadget connects to another OTG device, with this one using 76 the "B-Peripheral" role, that device will use HNP to let this 77 one serve as the USB host instead (in the "B-Host" role). 78 79config USB_AUDIO 80 tristate "Audio Gadget" 81 depends on SND 82 select USB_LIBCOMPOSITE 83 select SND_PCM 84 select USB_F_UAC1 if (GADGET_UAC1 && !GADGET_UAC1_LEGACY) 85 select USB_F_UAC1_LEGACY if (GADGET_UAC1 && GADGET_UAC1_LEGACY) 86 select USB_F_UAC2 if !GADGET_UAC1 87 select USB_U_AUDIO if (USB_F_UAC2 || USB_F_UAC1) 88 help 89 This Gadget Audio driver is compatible with USB Audio Class 90 specification 2.0. It implements 1 AudioControl interface, 91 1 AudioStreaming Interface each for USB-OUT and USB-IN. 92 Number of channels, sample rate and sample size can be 93 specified as module parameters. 94 This driver doesn't expect any real Audio codec to be present 95 on the device - the audio streams are simply sinked to and 96 sourced from a virtual ALSA sound card created. The user-space 97 application may choose to do whatever it wants with the data 98 received from the USB Host and choose to provide whatever it 99 wants as audio data to the USB Host. 100 101 Say "y" to link the driver statically, or "m" to build a 102 dynamically linked module called "g_audio". 103 104config GADGET_UAC1 105 bool "UAC 1.0" 106 depends on USB_AUDIO 107 help 108 If you instead want older USB Audio Class specification 1.0 support 109 with similar driver capabilities. 110 111config GADGET_UAC1_LEGACY 112 bool "UAC 1.0 (Legacy)" 113 depends on GADGET_UAC1 114 help 115 If you instead want legacy UAC Spec-1.0 driver that also has audio 116 paths hardwired to the Audio codec chip on-board and doesn't work 117 without one. 118 119config USB_ETH 120 tristate "Ethernet Gadget (with CDC Ethernet support)" 121 depends on NET 122 select USB_LIBCOMPOSITE 123 select USB_U_ETHER 124 select USB_F_ECM 125 select USB_F_SUBSET 126 select CRC32 127 help 128 This driver implements Ethernet style communication, in one of 129 several ways: 130 131 - The "Communication Device Class" (CDC) Ethernet Control Model. 132 That protocol is often avoided with pure Ethernet adapters, in 133 favor of simpler vendor-specific hardware, but is widely 134 supported by firmware for smart network devices. 135 136 - On hardware can't implement that protocol, a simple CDC subset 137 is used, placing fewer demands on USB. 138 139 - CDC Ethernet Emulation Model (EEM) is a newer standard that has 140 a simpler interface that can be used by more USB hardware. 141 142 RNDIS support is an additional option, more demanding than subset. 143 144 Within the USB device, this gadget driver exposes a network device 145 "usbX", where X depends on what other networking devices you have. 146 Treat it like a two-node Ethernet link: host, and gadget. 147 148 The Linux-USB host-side "usbnet" driver interoperates with this 149 driver, so that deep I/O queues can be supported. On 2.4 kernels, 150 use "CDCEther" instead, if you're using the CDC option. That CDC 151 mode should also interoperate with standard CDC Ethernet class 152 drivers on other host operating systems. 153 154 Say "y" to link the driver statically, or "m" to build a 155 dynamically linked module called "g_ether". 156 157config USB_ETH_RNDIS 158 bool "RNDIS support" 159 depends on USB_ETH 160 select USB_LIBCOMPOSITE 161 select USB_F_RNDIS 162 default y 163 help 164 Microsoft Windows XP bundles the "Remote NDIS" (RNDIS) protocol, 165 and Microsoft provides redistributable binary RNDIS drivers for 166 older versions of Windows. 167 168 If you say "y" here, the Ethernet gadget driver will try to provide 169 a second device configuration, supporting RNDIS to talk to such 170 Microsoft USB hosts. 171 172 To make MS-Windows work with this, use Documentation/usb/linux.inf 173 as the "driver info file". For versions of MS-Windows older than 174 XP, you'll need to download drivers from Microsoft's website; a URL 175 is given in comments found in that info file. 176 177config USB_ETH_EEM 178 bool "Ethernet Emulation Model (EEM) support" 179 depends on USB_ETH 180 select USB_LIBCOMPOSITE 181 select USB_F_EEM 182 help 183 CDC EEM is a newer USB standard that is somewhat simpler than CDC ECM 184 and therefore can be supported by more hardware. Technically ECM and 185 EEM are designed for different applications. The ECM model extends 186 the network interface to the target (e.g. a USB cable modem), and the 187 EEM model is for mobile devices to communicate with hosts using 188 ethernet over USB. For Linux gadgets, however, the interface with 189 the host is the same (a usbX device), so the differences are minimal. 190 191 If you say "y" here, the Ethernet gadget driver will use the EEM 192 protocol rather than ECM. If unsure, say "n". 193 194config USB_G_NCM 195 tristate "Network Control Model (NCM) support" 196 depends on NET 197 select USB_LIBCOMPOSITE 198 select USB_U_ETHER 199 select USB_F_NCM 200 select CRC32 201 help 202 This driver implements USB CDC NCM subclass standard. NCM is 203 an advanced protocol for Ethernet encapsulation, allows grouping 204 of several ethernet frames into one USB transfer and different 205 alignment possibilities. 206 207 Say "y" to link the driver statically, or "m" to build a 208 dynamically linked module called "g_ncm". 209 210config USB_GADGETFS 211 tristate "Gadget Filesystem" 212 help 213 This driver provides a filesystem based API that lets user mode 214 programs implement a single-configuration USB device, including 215 endpoint I/O and control requests that don't relate to enumeration. 216 All endpoints, transfer speeds, and transfer types supported by 217 the hardware are available, through read() and write() calls. 218 219 Say "y" to link the driver statically, or "m" to build a 220 dynamically linked module called "gadgetfs". 221 222config USB_FUNCTIONFS 223 tristate "Function Filesystem" 224 select USB_LIBCOMPOSITE 225 select USB_F_FS 226 select USB_FUNCTIONFS_GENERIC if !(USB_FUNCTIONFS_ETH || USB_FUNCTIONFS_RNDIS) 227 help 228 The Function Filesystem (FunctionFS) lets one create USB 229 composite functions in user space in the same way GadgetFS 230 lets one create USB gadgets in user space. This allows creation 231 of composite gadgets such that some of the functions are 232 implemented in kernel space (for instance Ethernet, serial or 233 mass storage) and other are implemented in user space. 234 235 If you say "y" or "m" here you will be able what kind of 236 configurations the gadget will provide. 237 238 Say "y" to link the driver statically, or "m" to build 239 a dynamically linked module called "g_ffs". 240 241config USB_FUNCTIONFS_ETH 242 bool "Include configuration with CDC ECM (Ethernet)" 243 depends on USB_FUNCTIONFS && NET 244 select USB_U_ETHER 245 select USB_F_ECM 246 select USB_F_SUBSET 247 help 248 Include a configuration with CDC ECM function (Ethernet) and the 249 Function Filesystem. 250 251config USB_FUNCTIONFS_RNDIS 252 bool "Include configuration with RNDIS (Ethernet)" 253 depends on USB_FUNCTIONFS && NET 254 select USB_U_ETHER 255 select USB_F_RNDIS 256 help 257 Include a configuration with RNDIS function (Ethernet) and the Filesystem. 258 259config USB_FUNCTIONFS_GENERIC 260 bool "Include 'pure' configuration" 261 depends on USB_FUNCTIONFS 262 help 263 Include a configuration with the Function Filesystem alone with 264 no Ethernet interface. 265 266config USB_MASS_STORAGE 267 tristate "Mass Storage Gadget" 268 depends on BLOCK 269 select USB_LIBCOMPOSITE 270 select USB_F_MASS_STORAGE 271 help 272 The Mass Storage Gadget acts as a USB Mass Storage disk drive. 273 As its storage repository it can use a regular file or a block 274 device (in much the same way as the "loop" device driver), 275 specified as a module parameter or sysfs option. 276 277 This driver is a replacement for now removed File-backed 278 Storage Gadget (g_file_storage). 279 280 Say "y" to link the driver statically, or "m" to build 281 a dynamically linked module called "g_mass_storage". 282 283config USB_GADGET_TARGET 284 tristate "USB Gadget Target Fabric Module" 285 depends on TARGET_CORE 286 select USB_LIBCOMPOSITE 287 select USB_F_TCM 288 help 289 This fabric is an USB gadget. Two USB protocols are supported that is 290 BBB or BOT (Bulk Only Transport) and UAS (USB Attached SCSI). BOT is 291 advertised on alternative interface 0 (primary) and UAS is on 292 alternative interface 1. Both protocols can work on USB2.0 and USB3.0. 293 UAS utilizes the USB 3.0 feature called streams support. 294 295config USB_G_SERIAL 296 tristate "Serial Gadget (with CDC ACM and CDC OBEX support)" 297 depends on TTY 298 select USB_U_SERIAL 299 select USB_F_ACM 300 select USB_F_SERIAL 301 select USB_F_OBEX 302 select USB_LIBCOMPOSITE 303 help 304 The Serial Gadget talks to the Linux-USB generic serial driver. 305 This driver supports a CDC-ACM module option, which can be used 306 to interoperate with MS-Windows hosts or with the Linux-USB 307 "cdc-acm" driver. 308 309 This driver also supports a CDC-OBEX option. You will need a 310 user space OBEX server talking to /dev/ttyGS*, since the kernel 311 itself doesn't implement the OBEX protocol. 312 313 Say "y" to link the driver statically, or "m" to build a 314 dynamically linked module called "g_serial". 315 316 For more information, see Documentation/usb/gadget_serial.rst 317 which includes instructions and a "driver info file" needed to 318 make MS-Windows work with CDC ACM. 319 320config USB_MIDI_GADGET 321 tristate "MIDI Gadget" 322 depends on SND 323 select USB_LIBCOMPOSITE 324 select SND_RAWMIDI 325 select USB_F_MIDI 326 help 327 The MIDI Gadget acts as a USB Audio device, with one MIDI 328 input and one MIDI output. These MIDI jacks appear as 329 a sound "card" in the ALSA sound system. Other MIDI 330 connections can then be made on the gadget system, using 331 ALSA's aconnect utility etc. 332 333 Say "y" to link the driver statically, or "m" to build a 334 dynamically linked module called "g_midi". 335 336config USB_G_PRINTER 337 tristate "Printer Gadget" 338 select USB_LIBCOMPOSITE 339 select USB_F_PRINTER 340 help 341 The Printer Gadget channels data between the USB host and a 342 userspace program driving the print engine. The user space 343 program reads and writes the device file /dev/g_printer to 344 receive or send printer data. It can use ioctl calls to 345 the device file to get or set printer status. 346 347 Say "y" to link the driver statically, or "m" to build a 348 dynamically linked module called "g_printer". 349 350 For more information, see Documentation/usb/gadget_printer.rst 351 which includes sample code for accessing the device file. 352 353if TTY 354 355config USB_CDC_COMPOSITE 356 tristate "CDC Composite Device (Ethernet and ACM)" 357 depends on NET 358 select USB_LIBCOMPOSITE 359 select USB_U_SERIAL 360 select USB_U_ETHER 361 select USB_F_ACM 362 select USB_F_ECM 363 help 364 This driver provides two functions in one configuration: 365 a CDC Ethernet (ECM) link, and a CDC ACM (serial port) link. 366 367 This driver requires four bulk and two interrupt endpoints, 368 plus the ability to handle altsettings. Not all peripheral 369 controllers are that capable. 370 371 Say "y" to link the driver statically, or "m" to build a 372 dynamically linked module. 373 374config USB_G_NOKIA 375 tristate "Nokia composite gadget" 376 depends on PHONET 377 depends on BLOCK 378 select USB_LIBCOMPOSITE 379 select USB_U_SERIAL 380 select USB_U_ETHER 381 select USB_F_ACM 382 select USB_F_OBEX 383 select USB_F_PHONET 384 select USB_F_ECM 385 select USB_F_MASS_STORAGE 386 help 387 The Nokia composite gadget provides support for acm, obex 388 and phonet in only one composite gadget driver. 389 390 It's only really useful for N900 hardware. If you're building 391 a kernel for N900, say Y or M here. If unsure, say N. 392 393config USB_G_ACM_MS 394 tristate "CDC Composite Device (ACM and mass storage)" 395 depends on BLOCK 396 select USB_LIBCOMPOSITE 397 select USB_U_SERIAL 398 select USB_F_ACM 399 select USB_F_MASS_STORAGE 400 help 401 This driver provides two functions in one configuration: 402 a mass storage, and a CDC ACM (serial port) link. 403 404 Say "y" to link the driver statically, or "m" to build a 405 dynamically linked module called "g_acm_ms". 406 407config USB_G_MULTI 408 tristate "Multifunction Composite Gadget" 409 depends on BLOCK && NET 410 select USB_G_MULTI_CDC if !USB_G_MULTI_RNDIS 411 select USB_LIBCOMPOSITE 412 select USB_U_SERIAL 413 select USB_U_ETHER 414 select USB_F_ACM 415 select USB_F_MASS_STORAGE 416 help 417 The Multifunction Composite Gadget provides Ethernet (RNDIS 418 and/or CDC Ethernet), mass storage and ACM serial link 419 interfaces. 420 421 You will be asked to choose which of the two configurations is 422 to be available in the gadget. At least one configuration must 423 be chosen to make the gadget usable. Selecting more than one 424 configuration will prevent Windows from automatically detecting 425 the gadget as a composite gadget, so an INF file will be needed to 426 use the gadget. 427 428 Say "y" to link the driver statically, or "m" to build a 429 dynamically linked module called "g_multi". 430 431config USB_G_MULTI_RNDIS 432 bool "RNDIS + CDC Serial + Storage configuration" 433 depends on USB_G_MULTI 434 select USB_F_RNDIS 435 default y 436 help 437 This option enables a configuration with RNDIS, CDC Serial and 438 Mass Storage functions available in the Multifunction Composite 439 Gadget. This is the configuration dedicated for Windows since RNDIS 440 is Microsoft's protocol. 441 442 If unsure, say "y". 443 444config USB_G_MULTI_CDC 445 bool "CDC Ethernet + CDC Serial + Storage configuration" 446 depends on USB_G_MULTI 447 select USB_F_ECM 448 help 449 This option enables a configuration with CDC Ethernet (ECM), CDC 450 Serial and Mass Storage functions available in the Multifunction 451 Composite Gadget. 452 453 If unsure, say "y". 454 455endif # TTY 456 457config USB_G_HID 458 tristate "HID Gadget" 459 select USB_LIBCOMPOSITE 460 select USB_F_HID 461 help 462 The HID gadget driver provides generic emulation of USB 463 Human Interface Devices (HID). 464 465 For more information, see Documentation/usb/gadget_hid.rst which 466 includes sample code for accessing the device files. 467 468 Say "y" to link the driver statically, or "m" to build a 469 dynamically linked module called "g_hid". 470 471# Standalone / single function gadgets 472config USB_G_DBGP 473 tristate "EHCI Debug Device Gadget" 474 depends on TTY 475 select USB_LIBCOMPOSITE 476 help 477 This gadget emulates an EHCI Debug device. This is useful when you want 478 to interact with an EHCI Debug Port. 479 480 Say "y" to link the driver statically, or "m" to build a 481 dynamically linked module called "g_dbgp". 482 483if USB_G_DBGP 484choice 485 prompt "EHCI Debug Device mode" 486 default USB_G_DBGP_SERIAL 487 488config USB_G_DBGP_PRINTK 489 depends on USB_G_DBGP 490 bool "printk" 491 help 492 Directly printk() received data. No interaction. 493 494config USB_G_DBGP_SERIAL 495 depends on USB_G_DBGP 496 select USB_U_SERIAL 497 bool "serial" 498 help 499 Userland can interact using /dev/ttyGSxxx. 500endchoice 501endif 502 503# put drivers that need isochronous transfer support (for audio 504# or video class gadget drivers), or specific hardware, here. 505config USB_G_WEBCAM 506 tristate "USB Webcam Gadget" 507 depends on VIDEO_V4L2 508 select USB_LIBCOMPOSITE 509 select VIDEOBUF2_VMALLOC 510 select USB_F_UVC 511 help 512 The Webcam Gadget acts as a composite USB Audio and Video Class 513 device. It provides a userspace API to process UVC control requests 514 and stream video data to the host. 515 516 Say "y" to link the driver statically, or "m" to build a 517 dynamically linked module called "g_webcam". 518 519endchoice 520