linux/drivers/usb/gadget/Kconfig
<<
>>
Prefs
   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
  17menuconfig 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
  47if USB_GADGET
  48
  49config 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
  63config 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
  77config 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
  88config 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
  99config 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
 116config 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
 132config 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
 138source "drivers/usb/gadget/udc/Kconfig"
 139
 140#
 141# USB Gadget Drivers
 142#
 143
 144# composite based drivers
 145config USB_LIBCOMPOSITE
 146        tristate
 147        select CONFIGFS_FS
 148        depends on USB_GADGET
 149
 150config USB_F_ACM
 151        tristate
 152
 153config USB_F_SS_LB
 154        tristate
 155
 156config USB_U_SERIAL
 157        tristate
 158
 159config USB_U_ETHER
 160        tristate
 161
 162config USB_U_AUDIO
 163        tristate
 164
 165config USB_F_SERIAL
 166        tristate
 167
 168config USB_F_OBEX
 169        tristate
 170
 171config USB_F_NCM
 172        tristate
 173
 174config USB_F_ECM
 175        tristate
 176
 177config USB_F_PHONET
 178        tristate
 179
 180config USB_F_EEM
 181        tristate
 182
 183config USB_F_SUBSET
 184        tristate
 185
 186config USB_F_RNDIS
 187        tristate
 188
 189config USB_F_MASS_STORAGE
 190        tristate
 191
 192config USB_F_FS
 193        tristate
 194
 195config USB_F_UAC1
 196        tristate
 197
 198config USB_F_UAC1_LEGACY
 199        tristate
 200
 201config USB_F_UAC2
 202        tristate
 203
 204config USB_F_UVC
 205        tristate
 206
 207config USB_F_MIDI
 208        tristate
 209
 210config USB_F_HID
 211        tristate
 212
 213config USB_F_PRINTER
 214        tristate
 215
 216config USB_F_TCM
 217        tristate
 218
 219# this first set of drivers all depend on bulk-capable hardware.
 220
 221config USB_CONFIGFS
 222        tristate "USB Gadget functions configurable through configfs"
 223        select USB_LIBCOMPOSITE
 224        help
 225          A Linux USB "gadget" can be set up through configfs.
 226          If this is the case, the USB functions (which from the host's
 227          perspective are seen as interfaces) and configurations are
 228          specified simply by creating appropriate directories in configfs.
 229          Associating functions with configurations is done by creating
 230          appropriate symbolic links.
 231          For more information see Documentation/usb/gadget_configfs.rst.
 232
 233config USB_CONFIGFS_SERIAL
 234        bool "Generic serial bulk in/out"
 235        depends on USB_CONFIGFS
 236        depends on TTY
 237        select USB_U_SERIAL
 238        select USB_F_SERIAL
 239        help
 240          The function talks to the Linux-USB generic serial driver.
 241
 242config USB_CONFIGFS_ACM
 243        bool "Abstract Control Model (CDC ACM)"
 244        depends on USB_CONFIGFS
 245        depends on TTY
 246        select USB_U_SERIAL
 247        select USB_F_ACM
 248        help
 249          ACM serial link.  This function can be used to interoperate with
 250          MS-Windows hosts or with the Linux-USB "cdc-acm" driver.
 251
 252config USB_CONFIGFS_OBEX
 253        bool "Object Exchange Model (CDC OBEX)"
 254        depends on USB_CONFIGFS
 255        depends on TTY
 256        select USB_U_SERIAL
 257        select USB_F_OBEX
 258        help
 259          You will need a user space OBEX server talking to /dev/ttyGS*,
 260          since the kernel itself doesn't implement the OBEX protocol.
 261
 262config USB_CONFIGFS_NCM
 263        bool "Network Control Model (CDC NCM)"
 264        depends on USB_CONFIGFS
 265        depends on NET
 266        select USB_U_ETHER
 267        select USB_F_NCM
 268        select CRC32
 269        help
 270          NCM is an advanced protocol for Ethernet encapsulation, allows
 271          grouping of several ethernet frames into one USB transfer and
 272          different alignment possibilities.
 273
 274config USB_CONFIGFS_ECM
 275        bool "Ethernet Control Model (CDC ECM)"
 276        depends on USB_CONFIGFS
 277        depends on NET
 278        select USB_U_ETHER
 279        select USB_F_ECM
 280        help
 281          The "Communication Device Class" (CDC) Ethernet Control Model.
 282          That protocol is often avoided with pure Ethernet adapters, in
 283          favor of simpler vendor-specific hardware, but is widely
 284          supported by firmware for smart network devices.
 285
 286config USB_CONFIGFS_ECM_SUBSET
 287        bool "Ethernet Control Model (CDC ECM) subset"
 288        depends on USB_CONFIGFS
 289        depends on NET
 290        select USB_U_ETHER
 291        select USB_F_SUBSET
 292        help
 293          On hardware that can't implement the full protocol,
 294          a simple CDC subset is used, placing fewer demands on USB.
 295
 296config USB_CONFIGFS_RNDIS
 297        bool "RNDIS"
 298        depends on USB_CONFIGFS
 299        depends on NET
 300        select USB_U_ETHER
 301        select USB_F_RNDIS
 302        help
 303           Microsoft Windows XP bundles the "Remote NDIS" (RNDIS) protocol,
 304           and Microsoft provides redistributable binary RNDIS drivers for
 305           older versions of Windows.
 306
 307           To make MS-Windows work with this, use Documentation/usb/linux.inf
 308           as the "driver info file".  For versions of MS-Windows older than
 309           XP, you'll need to download drivers from Microsoft's website; a URL
 310           is given in comments found in that info file.
 311
 312config USB_CONFIGFS_EEM
 313        bool "Ethernet Emulation Model (EEM)"
 314        depends on USB_CONFIGFS
 315        depends on NET
 316        select USB_U_ETHER
 317        select USB_F_EEM
 318        select CRC32
 319        help
 320          CDC EEM is a newer USB standard that is somewhat simpler than CDC ECM
 321          and therefore can be supported by more hardware.  Technically ECM and
 322          EEM are designed for different applications.  The ECM model extends
 323          the network interface to the target (e.g. a USB cable modem), and the
 324          EEM model is for mobile devices to communicate with hosts using
 325          ethernet over USB.  For Linux gadgets, however, the interface with
 326          the host is the same (a usbX device), so the differences are minimal.
 327
 328config USB_CONFIGFS_PHONET
 329        bool "Phonet protocol"
 330        depends on USB_CONFIGFS
 331        depends on NET
 332        depends on PHONET
 333        select USB_U_ETHER
 334        select USB_F_PHONET
 335        help
 336          The Phonet protocol implementation for USB device.
 337
 338config USB_CONFIGFS_MASS_STORAGE
 339        bool "Mass storage"
 340        depends on USB_CONFIGFS
 341        depends on BLOCK
 342        select USB_F_MASS_STORAGE
 343        help
 344          The Mass Storage Gadget acts as a USB Mass Storage disk drive.
 345          As its storage repository it can use a regular file or a block
 346          device (in much the same way as the "loop" device driver),
 347          specified as a module parameter or sysfs option.
 348
 349config USB_CONFIGFS_F_LB_SS
 350        bool "Loopback and sourcesink function (for testing)"
 351        depends on USB_CONFIGFS
 352        select USB_F_SS_LB
 353        help
 354          Loopback function loops back a configurable number of transfers.
 355          Sourcesink function either sinks and sources bulk data.
 356          It also implements control requests, for "chapter 9" conformance.
 357          Make this be the first driver you try using on top of any new
 358          USB peripheral controller driver.  Then you can use host-side
 359          test software, like the "usbtest" driver, to put your hardware
 360          and its driver through a basic set of functional tests.
 361
 362config USB_CONFIGFS_F_FS
 363        bool "Function filesystem (FunctionFS)"
 364        depends on USB_CONFIGFS
 365        select USB_F_FS
 366        help
 367          The Function Filesystem (FunctionFS) lets one create USB
 368          composite functions in user space in the same way GadgetFS
 369          lets one create USB gadgets in user space.  This allows creation
 370          of composite gadgets such that some of the functions are
 371          implemented in kernel space (for instance Ethernet, serial or
 372          mass storage) and other are implemented in user space.
 373
 374config USB_CONFIGFS_F_UAC1
 375        bool "Audio Class 1.0"
 376        depends on USB_CONFIGFS
 377        depends on SND
 378        select USB_LIBCOMPOSITE
 379        select SND_PCM
 380        select USB_U_AUDIO
 381        select USB_F_UAC1
 382        help
 383          This Audio function implements 1 AudioControl interface,
 384          1 AudioStreaming Interface each for USB-OUT and USB-IN.
 385          This driver doesn't expect any real Audio codec to be present
 386          on the device - the audio streams are simply sinked to and
 387          sourced from a virtual ALSA sound card created. The user-space
 388          application may choose to do whatever it wants with the data
 389          received from the USB Host and choose to provide whatever it
 390          wants as audio data to the USB Host.
 391
 392config USB_CONFIGFS_F_UAC1_LEGACY
 393        bool "Audio Class 1.0 (legacy implementation)"
 394        depends on USB_CONFIGFS
 395        depends on SND
 396        select USB_LIBCOMPOSITE
 397        select SND_PCM
 398        select USB_F_UAC1_LEGACY
 399        help
 400          This Audio function implements 1 AudioControl interface,
 401          1 AudioStreaming Interface each for USB-OUT and USB-IN.
 402          This is a legacy driver and requires a real Audio codec
 403          to be present on the device.
 404
 405config USB_CONFIGFS_F_UAC2
 406        bool "Audio Class 2.0"
 407        depends on USB_CONFIGFS
 408        depends on SND
 409        select USB_LIBCOMPOSITE
 410        select SND_PCM
 411        select USB_U_AUDIO
 412        select USB_F_UAC2
 413        help
 414          This Audio function is compatible with USB Audio Class
 415          specification 2.0. It implements 1 AudioControl interface,
 416          1 AudioStreaming Interface each for USB-OUT and USB-IN.
 417          This driver doesn't expect any real Audio codec to be present
 418          on the device - the audio streams are simply sinked to and
 419          sourced from a virtual ALSA sound card created. The user-space
 420          application may choose to do whatever it wants with the data
 421          received from the USB Host and choose to provide whatever it
 422          wants as audio data to the USB Host.
 423
 424config USB_CONFIGFS_F_MIDI
 425        bool "MIDI function"
 426        depends on USB_CONFIGFS
 427        depends on SND
 428        select USB_LIBCOMPOSITE
 429        select SND_RAWMIDI
 430        select USB_F_MIDI
 431        help
 432          The MIDI Function acts as a USB Audio device, with one MIDI
 433          input and one MIDI output. These MIDI jacks appear as
 434          a sound "card" in the ALSA sound system. Other MIDI
 435          connections can then be made on the gadget system, using
 436          ALSA's aconnect utility etc.
 437
 438config USB_CONFIGFS_F_HID
 439        bool "HID function"
 440        depends on USB_CONFIGFS
 441        select USB_F_HID
 442        help
 443          The HID function driver provides generic emulation of USB
 444          Human Interface Devices (HID).
 445
 446          For more information, see Documentation/usb/gadget_hid.rst.
 447
 448config USB_CONFIGFS_F_UVC
 449        bool "USB Webcam function"
 450        depends on USB_CONFIGFS
 451        depends on VIDEO_V4L2
 452        depends on VIDEO_DEV
 453        select VIDEOBUF2_VMALLOC
 454        select USB_F_UVC
 455        help
 456          The Webcam function acts as a composite USB Audio and Video Class
 457          device. It provides a userspace API to process UVC control requests
 458          and stream video data to the host.
 459
 460config USB_CONFIGFS_F_PRINTER
 461        bool "Printer function"
 462        select USB_F_PRINTER
 463        depends on USB_CONFIGFS
 464        help
 465          The Printer function channels data between the USB host and a
 466          userspace program driving the print engine. The user space
 467          program reads and writes the device file /dev/g_printer<X> to
 468          receive or send printer data. It can use ioctl calls to
 469          the device file to get or set printer status.
 470
 471          For more information, see Documentation/usb/gadget_printer.rst
 472          which includes sample code for accessing the device file.
 473
 474config USB_CONFIGFS_F_TCM
 475        bool "USB Gadget Target Fabric"
 476        depends on TARGET_CORE
 477        depends on USB_CONFIGFS
 478        select USB_LIBCOMPOSITE
 479        select USB_F_TCM
 480        help
 481          This fabric is a USB gadget component. Two USB protocols are
 482          supported that is BBB or BOT (Bulk Only Transport) and UAS
 483          (USB Attached SCSI). BOT is advertised on alternative
 484          interface 0 (primary) and UAS is on alternative interface 1.
 485          Both protocols can work on USB2.0 and USB3.0.
 486          UAS utilizes the USB 3.0 feature called streams support.
 487
 488source "drivers/usb/gadget/legacy/Kconfig"
 489
 490endif # USB_GADGET
 491