Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / drivers / usb / gadget / Kconfig
diff --git a/kernel/drivers/usb/gadget/Kconfig b/kernel/drivers/usb/gadget/Kconfig
new file mode 100644 (file)
index 0000000..bcf83c0
--- /dev/null
@@ -0,0 +1,458 @@
+#
+# USB Gadget support on a system involves
+#    (a) a peripheral controller, and
+#    (b) the gadget driver using it.
+#
+# NOTE:  Gadget support ** DOES NOT ** depend on host-side CONFIG_USB !!
+#
+#  - Host systems (like PCs) need CONFIG_USB (with "A" jacks).
+#  - Peripherals (like PDAs) need CONFIG_USB_GADGET (with "B" jacks).
+#  - Some systems have both kinds of controllers.
+#
+# With help from a special transceiver and a "Mini-AB" jack, systems with
+# both kinds of controller can also support "USB On-the-Go" (CONFIG_USB_OTG).
+#
+
+menuconfig USB_GADGET
+       tristate "USB Gadget Support"
+       select NLS
+       help
+          USB is a master/slave protocol, organized with one master
+          host (such as a PC) controlling up to 127 peripheral devices.
+          The USB hardware is asymmetric, which makes it easier to set up:
+          you can't connect a "to-the-host" connector to a peripheral.
+
+          Linux can run in the host, or in the peripheral.  In both cases
+          you need a low level bus controller driver, and some software
+          talking to it.  Peripheral controllers are often discrete silicon,
+          or are integrated with the CPU in a microcontroller.  The more
+          familiar host side controllers have names like "EHCI", "OHCI",
+          or "UHCI", and are usually integrated into southbridges on PC
+          motherboards.
+
+          Enable this configuration option if you want to run Linux inside
+          a USB peripheral device.  Configure one hardware driver for your
+          peripheral/device side bus controller, and a "gadget driver" for
+          your peripheral protocol.  (If you use modular gadget drivers,
+          you may configure more than one.)
+
+          If in doubt, say "N" and don't enable these drivers; most people
+          don't have this kind of hardware (except maybe inside Linux PDAs).
+
+          For more information, see <http://www.linux-usb.org/gadget> and
+          the kernel DocBook documentation for this API.
+
+if USB_GADGET
+
+config USB_GADGET_DEBUG
+       bool "Debugging messages (DEVELOPMENT)"
+       depends on DEBUG_KERNEL
+       help
+          Many controller and gadget drivers will print some debugging
+          messages if you use this option to ask for those messages.
+
+          Avoid enabling these messages, even if you're actively
+          debugging such a driver.  Many drivers will emit so many
+          messages that the driver timings are affected, which will
+          either create new failure modes or remove the one you're
+          trying to track down.  Never enable these messages for a
+          production build.
+
+config USB_GADGET_VERBOSE
+       bool "Verbose debugging Messages (DEVELOPMENT)"
+       depends on USB_GADGET_DEBUG
+       help
+          Many controller and gadget drivers will print verbose debugging
+          messages if you use this option to ask for those messages.
+
+          Avoid enabling these messages, even if you're actively
+          debugging such a driver.  Many drivers will emit so many
+          messages that the driver timings are affected, which will
+          either create new failure modes or remove the one you're
+          trying to track down.  Never enable these messages for a
+          production build.
+
+config USB_GADGET_DEBUG_FILES
+       bool "Debugging information files (DEVELOPMENT)"
+       depends on PROC_FS
+       help
+          Some of the drivers in the "gadget" framework can expose
+          debugging information in files such as /proc/driver/udc
+          (for a peripheral controller).  The information in these
+          files may help when you're troubleshooting or bringing up a
+          driver on a new board.   Enable these files by choosing "Y"
+          here.  If in doubt, or to conserve kernel memory, say "N".
+
+config USB_GADGET_DEBUG_FS
+       bool "Debugging information files in debugfs (DEVELOPMENT)"
+       depends on DEBUG_FS
+       help
+          Some of the drivers in the "gadget" framework can expose
+          debugging information in files under /sys/kernel/debug/.
+          The information in these files may help when you're
+          troubleshooting or bringing up a driver on a new board.
+          Enable these files by choosing "Y" here.  If in doubt, or
+          to conserve kernel memory, say "N".
+
+config USB_GADGET_VBUS_DRAW
+       int "Maximum VBUS Power usage (2-500 mA)"
+       range 2 500
+       default 2
+       help
+          Some devices need to draw power from USB when they are
+          configured, perhaps to operate circuitry or to recharge
+          batteries.  This is in addition to any local power supply,
+          such as an AC adapter or batteries.
+
+          Enter the maximum power your device draws through USB, in
+          milliAmperes.  The permitted range of values is 2 - 500 mA;
+          0 mA would be legal, but can make some hosts misbehave.
+
+          This value will be used except for system-specific gadget
+          drivers that have more specific information.
+
+config USB_GADGET_STORAGE_NUM_BUFFERS
+       int "Number of storage pipeline buffers"
+       range 2 4
+       default 2
+       help
+          Usually 2 buffers are enough to establish a good buffering
+          pipeline. The number may be increased in order to compensate
+          for a bursty VFS behaviour. For instance there may be CPU wake up
+          latencies that makes the VFS to appear bursty in a system with
+          an CPU on-demand governor. Especially if DMA is doing IO to
+          offload the CPU. In this case the CPU will go into power
+          save often and spin up occasionally to move data within VFS.
+          If selecting USB_GADGET_DEBUG_FILES this value may be set by
+          a module parameter as well.
+          If unsure, say 2.
+
+source "drivers/usb/gadget/udc/Kconfig"
+
+#
+# USB Gadget Drivers
+#
+
+# composite based drivers
+config USB_LIBCOMPOSITE
+       tristate
+       select CONFIGFS_FS
+       depends on USB_GADGET
+
+config USB_F_ACM
+       tristate
+
+config USB_F_SS_LB
+       tristate
+
+config USB_U_SERIAL
+       tristate
+
+config USB_U_ETHER
+       tristate
+
+config USB_F_SERIAL
+       tristate
+
+config USB_F_OBEX
+       tristate
+
+config USB_F_NCM
+       tristate
+
+config USB_F_ECM
+       tristate
+
+config USB_F_PHONET
+       tristate
+
+config USB_F_EEM
+       tristate
+
+config USB_F_SUBSET
+       tristate
+
+config USB_F_RNDIS
+       tristate
+
+config USB_F_MASS_STORAGE
+       tristate
+
+config USB_F_FS
+       tristate
+
+config USB_F_UAC1
+       tristate
+
+config USB_F_UAC2
+       tristate
+
+config USB_F_UVC
+       tristate
+
+config USB_F_MIDI
+       tristate
+
+config USB_F_HID
+       tristate
+
+config USB_F_PRINTER
+       tristate
+
+choice
+       tristate "USB Gadget Drivers"
+       default USB_ETH
+       help
+         A Linux "Gadget Driver" talks to the USB Peripheral Controller
+         driver through the abstract "gadget" API.  Some other operating
+         systems call these "client" drivers, of which "class drivers"
+         are a subset (implementing a USB device class specification).
+         A gadget driver implements one or more USB functions using
+         the peripheral hardware.
+
+         Gadget drivers are hardware-neutral, or "platform independent",
+         except that they sometimes must understand quirks or limitations
+         of the particular controllers they work with.  For example, when
+         a controller doesn't support alternate configurations or provide
+         enough of the right types of endpoints, the gadget driver might
+         not be able work with that controller, or might need to implement
+         a less common variant of a device class protocol.
+
+# this first set of drivers all depend on bulk-capable hardware.
+
+config USB_CONFIGFS
+       tristate "USB functions configurable through configfs"
+       select USB_LIBCOMPOSITE
+       help
+         A Linux USB "gadget" can be set up through configfs.
+         If this is the case, the USB functions (which from the host's
+         perspective are seen as interfaces) and configurations are
+         specified simply by creating appropriate directories in configfs.
+         Associating functions with configurations is done by creating
+         appropriate symbolic links.
+         For more information see Documentation/usb/gadget_configfs.txt.
+
+config USB_CONFIGFS_SERIAL
+       bool "Generic serial bulk in/out"
+       depends on USB_CONFIGFS
+       depends on TTY
+       select USB_U_SERIAL
+       select USB_F_SERIAL
+       help
+         The function talks to the Linux-USB generic serial driver.
+
+config USB_CONFIGFS_ACM
+       bool "Abstract Control Model (CDC ACM)"
+       depends on USB_CONFIGFS
+       depends on TTY
+       select USB_U_SERIAL
+       select USB_F_ACM
+       help
+         ACM serial link.  This function can be used to interoperate with
+         MS-Windows hosts or with the Linux-USB "cdc-acm" driver.
+
+config USB_CONFIGFS_OBEX
+       bool "Object Exchange Model (CDC OBEX)"
+       depends on USB_CONFIGFS
+       depends on TTY
+       select USB_U_SERIAL
+       select USB_F_OBEX
+       help
+         You will need a user space OBEX server talking to /dev/ttyGS*,
+         since the kernel itself doesn't implement the OBEX protocol.
+
+config USB_CONFIGFS_NCM
+       bool "Network Control Model (CDC NCM)"
+       depends on USB_CONFIGFS
+       depends on NET
+       select USB_U_ETHER
+       select USB_F_NCM
+       help
+         NCM is an advanced protocol for Ethernet encapsulation, allows
+         grouping of several ethernet frames into one USB transfer and
+         different alignment possibilities.
+
+config USB_CONFIGFS_ECM
+       bool "Ethernet Control Model (CDC ECM)"
+       depends on USB_CONFIGFS
+       depends on NET
+       select USB_U_ETHER
+       select USB_F_ECM
+       help
+         The "Communication Device Class" (CDC) Ethernet Control Model.
+         That protocol is often avoided with pure Ethernet adapters, in
+         favor of simpler vendor-specific hardware, but is widely
+         supported by firmware for smart network devices.
+
+config USB_CONFIGFS_ECM_SUBSET
+       bool "Ethernet Control Model (CDC ECM) subset"
+       depends on USB_CONFIGFS
+       depends on NET
+       select USB_U_ETHER
+       select USB_F_SUBSET
+       help
+         On hardware that can't implement the full protocol,
+         a simple CDC subset is used, placing fewer demands on USB.
+
+config USB_CONFIGFS_RNDIS
+       bool "RNDIS"
+       depends on USB_CONFIGFS
+       depends on NET
+       select USB_U_ETHER
+       select USB_F_RNDIS
+       help
+          Microsoft Windows XP bundles the "Remote NDIS" (RNDIS) protocol,
+          and Microsoft provides redistributable binary RNDIS drivers for
+          older versions of Windows.
+
+          To make MS-Windows work with this, use Documentation/usb/linux.inf
+          as the "driver info file".  For versions of MS-Windows older than
+          XP, you'll need to download drivers from Microsoft's website; a URL
+          is given in comments found in that info file.
+
+config USB_CONFIGFS_EEM
+       bool "Ethernet Emulation Model (EEM)"
+       depends on USB_CONFIGFS
+       depends on NET
+       select USB_U_ETHER
+       select USB_F_EEM
+       help
+         CDC EEM is a newer USB standard that is somewhat simpler than CDC ECM
+         and therefore can be supported by more hardware.  Technically ECM and
+         EEM are designed for different applications.  The ECM model extends
+         the network interface to the target (e.g. a USB cable modem), and the
+         EEM model is for mobile devices to communicate with hosts using
+         ethernet over USB.  For Linux gadgets, however, the interface with
+         the host is the same (a usbX device), so the differences are minimal.
+
+config USB_CONFIGFS_PHONET
+       bool "Phonet protocol"
+       depends on USB_CONFIGFS
+       depends on NET
+       depends on PHONET
+       select USB_U_ETHER
+       select USB_F_PHONET
+       help
+         The Phonet protocol implementation for USB device.
+
+config USB_CONFIGFS_MASS_STORAGE
+       bool "Mass storage"
+       depends on USB_CONFIGFS
+       depends on BLOCK
+       select USB_F_MASS_STORAGE
+       help
+         The Mass Storage Gadget acts as a USB Mass Storage disk drive.
+         As its storage repository it can use a regular file or a block
+         device (in much the same way as the "loop" device driver),
+         specified as a module parameter or sysfs option.
+
+config USB_CONFIGFS_F_LB_SS
+       bool "Loopback and sourcesink function (for testing)"
+       depends on USB_CONFIGFS
+       select USB_F_SS_LB
+       help
+         Loopback function loops back a configurable number of transfers.
+         Sourcesink function either sinks and sources bulk data.
+         It also implements control requests, for "chapter 9" conformance.
+         Make this be the first driver you try using on top of any new
+         USB peripheral controller driver.  Then you can use host-side
+         test software, like the "usbtest" driver, to put your hardware
+         and its driver through a basic set of functional tests.
+
+config USB_CONFIGFS_F_FS
+       bool "Function filesystem (FunctionFS)"
+       depends on USB_CONFIGFS
+       select USB_F_FS
+       help
+         The Function Filesystem (FunctionFS) lets one create USB
+         composite functions in user space in the same way GadgetFS
+         lets one create USB gadgets in user space.  This allows creation
+         of composite gadgets such that some of the functions are
+         implemented in kernel space (for instance Ethernet, serial or
+         mass storage) and other are implemented in user space.
+
+config USB_CONFIGFS_F_UAC1
+       bool "Audio Class 1.0"
+       depends on USB_CONFIGFS
+       depends on SND
+       select USB_LIBCOMPOSITE
+       select SND_PCM
+       select USB_F_UAC1
+       help
+         This Audio function implements 1 AudioControl interface,
+         1 AudioStreaming Interface each for USB-OUT and USB-IN.
+         This driver requires a real Audio codec to be present
+         on the device.
+
+config USB_CONFIGFS_F_UAC2
+       bool "Audio Class 2.0"
+       depends on USB_CONFIGFS
+       depends on SND
+       select USB_LIBCOMPOSITE
+       select SND_PCM
+       select USB_F_UAC2
+       help
+         This Audio function is compatible with USB Audio Class
+         specification 2.0. It implements 1 AudioControl interface,
+         1 AudioStreaming Interface each for USB-OUT and USB-IN.
+         This driver doesn't expect any real Audio codec to be present
+         on the device - the audio streams are simply sinked to and
+         sourced from a virtual ALSA sound card created. The user-space
+         application may choose to do whatever it wants with the data
+         received from the USB Host and choose to provide whatever it
+         wants as audio data to the USB Host.
+
+config USB_CONFIGFS_F_MIDI
+       bool "MIDI function"
+       depends on USB_CONFIGFS
+       depends on SND
+       select USB_LIBCOMPOSITE
+       select SND_RAWMIDI
+       select USB_F_MIDI
+       help
+         The MIDI Function acts as a USB Audio device, with one MIDI
+         input and one MIDI output. These MIDI jacks appear as
+         a sound "card" in the ALSA sound system. Other MIDI
+         connections can then be made on the gadget system, using
+         ALSA's aconnect utility etc.
+
+config USB_CONFIGFS_F_HID
+       bool "HID function"
+       depends on USB_CONFIGFS
+       select USB_F_HID
+       help
+         The HID function driver provides generic emulation of USB
+         Human Interface Devices (HID).
+
+         For more information, see Documentation/usb/gadget_hid.txt.
+
+config USB_CONFIGFS_F_UVC
+       bool "USB Webcam function"
+       depends on USB_CONFIGFS
+       depends on VIDEO_DEV
+       select VIDEOBUF2_VMALLOC
+       select USB_F_UVC
+       help
+         The Webcam function acts as a composite USB Audio and Video Class
+         device. It provides a userspace API to process UVC control requests
+         and stream video data to the host.
+
+config USB_CONFIGFS_F_PRINTER
+       bool "Printer function"
+       select USB_F_PRINTER
+       depends on USB_CONFIGFS
+       help
+         The Printer function channels data between the USB host and a
+         userspace program driving the print engine. The user space
+         program reads and writes the device file /dev/g_printer<X> to
+         receive or send printer data. It can use ioctl calls to
+         the device file to get or set printer status.
+
+         For more information, see Documentation/usb/gadget_printer.txt
+         which includes sample code for accessing the device file.
+
+source "drivers/usb/gadget/legacy/Kconfig"
+
+endchoice
+
+endif # USB_GADGET