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 master/slave protocol, organized with one master
  23           host (such as a 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        help
 269          NCM is an advanced protocol for Ethernet encapsulation, allows
 270          grouping of several ethernet frames into one USB transfer and
 271          different alignment possibilities.
 272
 273config USB_CONFIGFS_ECM
 274        bool "Ethernet Control Model (CDC ECM)"
 275        depends on USB_CONFIGFS
 276        depends on NET
 277        select USB_U_ETHER
 278        select USB_F_ECM
 279        help
 280          The "Communication Device Class" (CDC) Ethernet Control Model.
 281          That protocol is often avoided with pure Ethernet adapters, in
 282          favor of simpler vendor-specific hardware, but is widely
 283          supported by firmware for smart network devices.
 284
 285config USB_CONFIGFS_ECM_SUBSET
 286        bool "Ethernet Control Model (CDC ECM) subset"
 287        depends on USB_CONFIGFS
 288        depends on NET
 289        select USB_U_ETHER
 290        select USB_F_SUBSET
 291        help
 292          On hardware that can't implement the full protocol,
 293          a simple CDC subset is used, placing fewer demands on USB.
 294
 295config USB_CONFIGFS_RNDIS
 296        bool "RNDIS"
 297        depends on USB_CONFIGFS
 298        depends on NET
 299        select USB_U_ETHER
 300        select USB_F_RNDIS
 301        help
 302           Microsoft Windows XP bundles the "Remote NDIS" (RNDIS) protocol,
 303           and Microsoft provides redistributable binary RNDIS drivers for
 304           older versions of Windows.
 305
 306           To make MS-Windows work with this, use Documentation/usb/linux.inf
 307           as the "driver info file".  For versions of MS-Windows older than
 308           XP, you'll need to download drivers from Microsoft's website; a URL
 309           is given in comments found in that info file.
 310
 311config USB_CONFIGFS_EEM
 312        bool "Ethernet Emulation Model (EEM)"
 313        depends on USB_CONFIGFS
 314        depends on NET
 315        select USB_U_ETHER
 316        select USB_F_EEM
 317        help
 318          CDC EEM is a newer USB standard that is somewhat simpler than CDC ECM
 319          and therefore can be supported by more hardware.  Technically ECM and
 320          EEM are designed for different applications.  The ECM model extends
 321          the network interface to the target (e.g. a USB cable modem), and the
 322          EEM model is for mobile devices to communicate with hosts using
 323          ethernet over USB.  For Linux gadgets, however, the interface with
 324          the host is the same (a usbX device), so the differences are minimal.
 325
 326config USB_CONFIGFS_PHONET
 327        bool "Phonet protocol"
 328        depends on USB_CONFIGFS
 329        depends on NET
 330        depends on PHONET
 331        select USB_U_ETHER
 332        select USB_F_PHONET
 333        help
 334          The Phonet protocol implementation for USB device.
 335
 336config USB_CONFIGFS_MASS_STORAGE
 337        bool "Mass storage"
 338        depends on USB_CONFIGFS
 339        depends on BLOCK
 340        select USB_F_MASS_STORAGE
 341        help
 342          The Mass Storage Gadget acts as a USB Mass Storage disk drive.
 343          As its storage repository it can use a regular file or a block
 344          device (in much the same way as the "loop" device driver),
 345          specified as a module parameter or sysfs option.
 346
 347config USB_CONFIGFS_F_LB_SS
 348        bool "Loopback and sourcesink function (for testing)"
 349        depends on USB_CONFIGFS
 350        select USB_F_SS_LB
 351        help
 352          Loopback function loops back a configurable number of transfers.
 353          Sourcesink function either sinks and sources bulk data.
 354          It also implements control requests, for "chapter 9" conformance.
 355          Make this be the first driver you try using on top of any new
 356          USB peripheral controller driver.  Then you can use host-side
 357          test software, like the "usbtest" driver, to put your hardware
 358          and its driver through a basic set of functional tests.
 359
 360config USB_CONFIGFS_F_FS
 361        bool "Function filesystem (FunctionFS)"
 362        depends on USB_CONFIGFS
 363        select USB_F_FS
 364        help
 365          The Function Filesystem (FunctionFS) lets one create USB
 366          composite functions in user space in the same way GadgetFS
 367          lets one create USB gadgets in user space.  This allows creation
 368          of composite gadgets such that some of the functions are
 369          implemented in kernel space (for instance Ethernet, serial or
 370          mass storage) and other are implemented in user space.
 371
 372config USB_CONFIGFS_F_UAC1
 373        bool "Audio Class 1.0"
 374        depends on USB_CONFIGFS
 375        depends on SND
 376        select USB_LIBCOMPOSITE
 377        select SND_PCM
 378        select USB_U_AUDIO
 379        select USB_F_UAC1
 380        help
 381          This Audio function implements 1 AudioControl interface,
 382          1 AudioStreaming Interface each for USB-OUT and USB-IN.
 383          This driver doesn't expect any real Audio codec to be present
 384          on the device - the audio streams are simply sinked to and
 385          sourced from a virtual ALSA sound card created. The user-space
 386          application may choose to do whatever it wants with the data
 387          received from the USB Host and choose to provide whatever it
 388          wants as audio data to the USB Host.
 389
 390config USB_CONFIGFS_F_UAC1_LEGACY
 391        bool "Audio Class 1.0 (legacy implementation)"
 392        depends on USB_CONFIGFS
 393        depends on SND
 394        select USB_LIBCOMPOSITE
 395        select SND_PCM
 396        select USB_F_UAC1_LEGACY
 397        help
 398          This Audio function implements 1 AudioControl interface,
 399          1 AudioStreaming Interface each for USB-OUT and USB-IN.
 400          This is a legacy driver and requires a real Audio codec
 401          to be present on the device.
 402
 403config USB_CONFIGFS_F_UAC2
 404        bool "Audio Class 2.0"
 405        depends on USB_CONFIGFS
 406        depends on SND
 407        select USB_LIBCOMPOSITE
 408        select SND_PCM
 409        select USB_U_AUDIO
 410        select USB_F_UAC2
 411        help
 412          This Audio function is compatible with USB Audio Class
 413          specification 2.0. It implements 1 AudioControl interface,
 414          1 AudioStreaming Interface each for USB-OUT and USB-IN.
 415          This driver doesn't expect any real Audio codec to be present
 416          on the device - the audio streams are simply sinked to and
 417          sourced from a virtual ALSA sound card created. The user-space
 418          application may choose to do whatever it wants with the data
 419          received from the USB Host and choose to provide whatever it
 420          wants as audio data to the USB Host.
 421
 422config USB_CONFIGFS_F_MIDI
 423        bool "MIDI function"
 424        depends on USB_CONFIGFS
 425        depends on SND
 426        select USB_LIBCOMPOSITE
 427        select SND_RAWMIDI
 428        select USB_F_MIDI
 429        help
 430          The MIDI Function acts as a USB Audio device, with one MIDI
 431          input and one MIDI output. These MIDI jacks appear as
 432          a sound "card" in the ALSA sound system. Other MIDI
 433          connections can then be made on the gadget system, using
 434          ALSA's aconnect utility etc.
 435
 436config USB_CONFIGFS_F_HID
 437        bool "HID function"
 438        depends on USB_CONFIGFS
 439        select USB_F_HID
 440        help
 441          The HID function driver provides generic emulation of USB
 442          Human Interface Devices (HID).
 443
 444          For more information, see Documentation/usb/gadget_hid.rst.
 445
 446config USB_CONFIGFS_F_UVC
 447        bool "USB Webcam function"
 448        depends on USB_CONFIGFS
 449        depends on VIDEO_V4L2
 450        depends on VIDEO_DEV
 451        select VIDEOBUF2_VMALLOC
 452        select USB_F_UVC
 453        help
 454          The Webcam function acts as a composite USB Audio and Video Class
 455          device. It provides a userspace API to process UVC control requests
 456          and stream video data to the host.
 457
 458config USB_CONFIGFS_F_PRINTER
 459        bool "Printer function"
 460        select USB_F_PRINTER
 461        depends on USB_CONFIGFS
 462        help
 463          The Printer function channels data between the USB host and a
 464          userspace program driving the print engine. The user space
 465          program reads and writes the device file /dev/g_printer<X> to
 466          receive or send printer data. It can use ioctl calls to
 467          the device file to get or set printer status.
 468
 469          For more information, see Documentation/usb/gadget_printer.rst
 470          which includes sample code for accessing the device file.
 471
 472config USB_CONFIGFS_F_TCM
 473        bool "USB Gadget Target Fabric"
 474        depends on TARGET_CORE
 475        depends on USB_CONFIGFS
 476        select USB_LIBCOMPOSITE
 477        select USB_F_TCM
 478        help
 479          This fabric is a USB gadget component. Two USB protocols are
 480          supported that is BBB or BOT (Bulk Only Transport) and UAS
 481          (USB Attached SCSI). BOT is advertised on alternative
 482          interface 0 (primary) and UAS is on alternative interface 1.
 483          Both protocols can work on USB2.0 and USB3.0.
 484          UAS utilizes the USB 3.0 feature called streams support.
 485
 486source "drivers/usb/gadget/legacy/Kconfig"
 487
 488endif # USB_GADGET
 489