#
# USB Network devices configuration
#
comment "Networking support is needed for USB Network Adapter support"
	depends on USB && !NET

menu "USB Network Adapters"
	depends on USB && NET

config USB_CATC
	tristate "USB CATC NetMate-based Ethernet device support"
	select CRC32
	---help---
	  Say Y if you want to use one of the following 10Mbps USB Ethernet
	  device based on the EL1210A chip. Supported devices are:
	  Belkin F5U011
	  Belkin F5U111
	  CATC NetMate
	  CATC NetMate II
	  smartBridges smartNIC

	  This driver makes the adapter appear as a normal Ethernet interface,
	  typically on eth0, if it is the only ethernet device, or perhaps on
	  eth1, if you have a PCI or ISA ethernet card installed.

	  To compile this driver as a module, choose M here: the
	  module will be called catc.

config USB_KAWETH
	tristate "USB KLSI KL5USB101-based ethernet device support"
	---help---
	  Say Y here if you want to use one of the following 10Mbps only
	  USB Ethernet adapters based on the KLSI KL5KUSB101B chipset:
	  3Com 3C19250
	  ADS USB-10BT
	  ATEN USB Ethernet
	  ASANTE USB To Ethernet Adapter
	  AOX Endpoints USB Ethernet
	  Correga K.K.
	  D-Link DSB-650C and DU-E10
	  Entrega / Portgear E45
	  I-O DATA USB-ET/T
	  Jaton USB Ethernet Device Adapter
	  Kingston Technology USB Ethernet Adapter
	  Linksys USB10T
	  Mobility USB-Ethernet Adapter
	  NetGear EA-101
	  Peracom Enet and Enet2
	  Portsmith Express Ethernet Adapter
	  Shark Pocket Adapter
	  SMC 2202USB
	  Sony Vaio port extender

	  This driver is likely to work with most 10Mbps only USB Ethernet
	  adapters, including some "no brand" devices. It does NOT work on
	  SmartBridges smartNIC or on Belkin F5U111 devices - you should use
	  the CATC NetMate driver for those. If you are not sure which one
	  you need, select both, and the correct one should be selected for
	  you.

	  This driver makes the adapter appear as a normal Ethernet interface,
	  typically on eth0, if it is the only ethernet device, or perhaps on
	  eth1, if you have a PCI or ISA ethernet card installed.

	  To compile this driver as a module, choose M here: the
	  module will be called kaweth.

config USB_PEGASUS
	tristate "USB Pegasus/Pegasus-II based ethernet device support"
	select MII
	---help---
	  Say Y here if you know you have Pegasus or Pegasus-II based adapter.
	  If in doubt then look at <file:drivers/net/usb/pegasus.h> for the
	  complete list of supported devices.

	  If your particular adapter is not in the list and you are _sure_ it
	  is Pegasus or Pegasus II based then send me
	  <petkan@users.sourceforge.net> vendor and device IDs.

	  To compile this driver as a module, choose M here: the
	  module will be called pegasus.

config USB_RTL8150
	tristate "USB RTL8150 based ethernet device support"
	select MII
	help
	  Say Y here if you have RTL8150 based usb-ethernet adapter.
	  Send me <petkan@users.sourceforge.net> any comments you may have.
	  You can also check for updates at <http://pegasus2.sourceforge.net/>.

	  To compile this driver as a module, choose M here: the
	  module will be called rtl8150.

config USB_RTL8152
	tristate "Realtek RTL8152/RTL8153 Based USB Ethernet Adapters"
	select MII
	help
	  This option adds support for Realtek RTL8152 based USB 2.0
	  10/100 Ethernet adapters and RTL8153 based USB 3.0 10/100/1000
	  Ethernet adapters.

	  To compile this driver as a module, choose M here: the
	  module will be called r8152.

config USB_USBNET
	tristate "Multi-purpose USB Networking Framework"
	select MII
	---help---
	  This driver supports several kinds of network links over USB,
	  with "minidrivers" built around a common network driver core
	  that supports deep queues for efficient transfers.  (This gives
	  better performance with small packets and at high speeds).

	  The USB host runs "usbnet", and the other end of the link might be:

	  - Another USB host, when using USB "network" or "data transfer"
	    cables.  These are often used to network laptops to PCs, like
	    "Laplink" parallel cables or some motherboards.  These rely
	    on specialized chips from many suppliers.

	  - An intelligent USB gadget, perhaps embedding a Linux system.
	    These include PDAs running Linux (iPaq, Yopy, Zaurus, and
	    others), and devices that interoperate using the standard
	    CDC-Ethernet specification (including many cable modems).

	  - Network adapter hardware (like those for 10/100 Ethernet) which
	    uses this driver framework.

	  The link will appear with a name like "usb0", when the link is
	  a two-node link, or "eth0" for most CDC-Ethernet devices.  Those
	  two-node links are most easily managed with Ethernet Bridging
	  (CONFIG_BRIDGE) instead of routing.

	  For more information see <http://www.linux-usb.org/usbnet/>.

	  To compile this driver as a module, choose M here: the
	  module will be called usbnet.

config USB_NET_AX8817X
	tristate "ASIX AX88xxx Based USB 2.0 Ethernet Adapters"
	depends on USB_USBNET
	select CRC32
	select PHYLIB
	default y
	help
	  This option adds support for ASIX AX88xxx based USB 2.0
	  10/100 Ethernet adapters.

 	  This driver should work with at least the following devices:
	    * Aten UC210T
	    * ASIX AX88172
	    * Billionton Systems, USB2AR
	    * Buffalo LUA-U2-KTX
	    * Corega FEther USB2-TX
	    * D-Link DUB-E100
	    * Hawking UF200
	    * Linksys USB200M
	    * Netgear FA120
	    * Sitecom LN-029
	    * Intellinet USB 2.0 Ethernet
	    * ST Lab USB 2.0 Ethernet
	    * TrendNet TU2-ET100

	  This driver creates an interface named "ethX", where X depends on
	  what other networking devices you have in use.

config USB_NET_AX88179_178A
	tristate "ASIX AX88179/178A USB 3.0/2.0 to Gigabit Ethernet"
	depends on USB_USBNET
	select CRC32
	select PHYLIB
	default y
	help
	  This option adds support for ASIX AX88179 based USB 3.0/2.0
	  to Gigabit Ethernet adapters.

	  This driver should work with at least the following devices:
	    * ASIX AX88179
	    * ASIX AX88178A
	    * Sitcomm LN-032

	  This driver creates an interface named "ethX", where X depends on
	  what other networking devices you have in use.

config USB_NET_CDCETHER
	tristate "CDC Ethernet support (smart devices such as cable modems)"
	depends on USB_USBNET
	default y
	help
	  This option supports devices conforming to the Communication Device
	  Class (CDC) Ethernet Control Model, a specification that's easy to
	  implement in device firmware.  The CDC specifications are available
	  from <http://www.usb.org/>.

	  CDC Ethernet is an implementation option for DOCSIS cable modems
	  that support USB connectivity, used for non-Microsoft USB hosts.
	  The Linux-USB CDC Ethernet Gadget driver is an open implementation.
 	  This driver should work with at least the following devices:

	    * Dell Wireless 5530 HSPA
 	    * Ericsson PipeRider (all variants)
	    * Ericsson Mobile Broadband Module (all variants)
 	    * Motorola (DM100 and SB4100)
 	    * Broadcom Cable Modem (reference design)
	    * Toshiba (PCX1100U and F3507g/F3607gw)
	    * ...

	  This driver creates an interface named "ethX", where X depends on
	  what other networking devices you have in use.  However, if the
	  IEEE 802 "local assignment" bit is set in the address, a "usbX"
	  name is used instead.

config USB_NET_CDC_EEM
	tristate "CDC EEM support"
	depends on USB_USBNET
	help
	  This option supports devices conforming to the Communication Device
	  Class (CDC) Ethernet Emulation Model, a specification that's easy to
	  implement in device firmware.  The CDC EEM specifications are available
	  from <http://www.usb.org/>.

	  This driver creates an interface named "ethX", where X depends on
	  what other networking devices you have in use.  However, if the
	  IEEE 802 "local assignment" bit is set in the address, a "usbX"
	  name is used instead.

config USB_NET_CDC_NCM
	tristate "CDC NCM support"
	depends on USB_USBNET
	default y
	help
	  This driver provides support for CDC NCM (Network Control Model
	  Device USB Class Specification). The CDC NCM specification is
	  available from <http://www.usb.org/>.

	  Say "y" to link the driver statically, or "m" to build a
	  dynamically linked module.

	  This driver should work with at least the following devices:
	    * ST-Ericsson M700 LTE FDD/TDD Mobile Broadband Modem (ref. design)
	    * ST-Ericsson M5730 HSPA+ Mobile Broadband Modem (reference design)
	    * ST-Ericsson M570 HSPA+ Mobile Broadband Modem (reference design)
	    * ST-Ericsson M343 HSPA Mobile Broadband Modem (reference design)
	    * Ericsson F5521gw Mobile Broadband Module

config USB_NET_HUAWEI_CDC_NCM
	tristate "Huawei NCM embedded AT channel support"
	depends on USB_USBNET
	select USB_WDM
	select USB_NET_CDC_NCM
	help
		This driver supports huawei-style NCM devices, that use NCM as a
		transport for other protocols, usually an embedded AT channel.
		Good examples are:
		* Huawei E3131
		* Huawei E3251

		To compile this driver as a module, choose M here: the module will be
		called huawei_cdc_ncm.ko.

config USB_NET_CDC_MBIM
	tristate "CDC MBIM support"
	depends on USB_USBNET
	select USB_WDM
	select USB_NET_CDC_NCM
	help
	  This driver provides support for CDC MBIM (Mobile Broadband
	  Interface Model) devices. The CDC MBIM specification is
	  available from <http://www.usb.org/>.

	  MBIM devices require configuration using the management
	  protocol defined by the MBIM specification.  This driver
	  provides unfiltered access to the MBIM control channel
	  through the associated /dev/cdc-wdmx character device.

	  To compile this driver as a module, choose M here: the
	  module will be called cdc_mbim.

config USB_NET_DM9601
	tristate "Davicom DM96xx based USB 10/100 ethernet devices"
	depends on USB_USBNET
	select CRC32
	help
	  This option adds support for Davicom DM9601/DM9620/DM9621A
	  based USB 10/100 Ethernet adapters.

config USB_NET_SR9700
	tristate "CoreChip-sz SR9700 based USB 1.1 10/100 ethernet devices"
	depends on USB_USBNET
	select CRC32
	help
	  This option adds support for CoreChip-sz SR9700 based USB 1.1
	  10/100 Ethernet adapters.

config USB_NET_SR9800
	tristate "CoreChip-sz SR9800 based USB 2.0 10/100 ethernet devices"
	depends on USB_USBNET
	select CRC32
	---help---
	  Say Y if you want to use one of the following 100Mbps USB Ethernet
	  device based on the CoreChip-sz SR9800 chip.

	  This driver makes the adapter appear as a normal Ethernet interface,
	  typically on eth0, if it is the only ethernet device, or perhaps on
	  eth1, if you have a PCI or ISA ethernet card installed.

	  To compile this driver as a module, choose M here: the
	  module will be called sr9800.

config USB_NET_SMSC75XX
	tristate "SMSC LAN75XX based USB 2.0 gigabit ethernet devices"
	depends on USB_USBNET
	select BITREVERSE
	select CRC16
	select CRC32
	help
	  This option adds support for SMSC LAN75XX based USB 2.0
	  Gigabit Ethernet adapters.

config USB_NET_SMSC95XX
	tristate "SMSC LAN95XX based USB 2.0 10/100 ethernet devices"
	depends on USB_USBNET
	select BITREVERSE
	select CRC16
	select CRC32
	help
	  This option adds support for SMSC LAN95XX based USB 2.0
	  10/100 Ethernet adapters.

config USB_NET_GL620A
	tristate "GeneSys GL620USB-A based cables"
	depends on USB_USBNET
	help
	  Choose this option if you're using a host-to-host cable,
	  or PC2PC motherboard, with this chip.

	  Note that the half-duplex "GL620USB" is not supported.

config USB_NET_NET1080
	tristate "NetChip 1080 based cables (Laplink, ...)"
	default y
	depends on USB_USBNET
	help
	  Choose this option if you're using a host-to-host cable based
	  on this design:  one NetChip 1080 chip and supporting logic,
	  optionally with LEDs that indicate traffic

config USB_NET_PLUSB
	tristate "Prolific PL-2301/2302/25A1 based cables"
	# if the handshake/init/reset problems, from original 'plusb',
	# are ever resolved ... then remove "experimental"
	depends on USB_USBNET
	help
	  Choose this option if you're using a host-to-host cable
	  with one of these chips.

config USB_NET_MCS7830
	tristate "MosChip MCS7830 based Ethernet adapters"
	depends on USB_USBNET
	help
	  Choose this option if you're using a 10/100 Ethernet USB2
	  adapter based on the MosChip 7830 controller. This includes
	  adapters marketed under the DeLOCK brand.

config USB_NET_RNDIS_HOST
	tristate "Host for RNDIS and ActiveSync devices"
	depends on USB_USBNET
	select USB_NET_CDCETHER
	help
	  This option enables hosting "Remote NDIS" USB networking links,
	  as encouraged by Microsoft (instead of CDC Ethernet!) for use in
	  various devices that may only support this protocol.  A variant
	  of this protocol (with even less public documentation) seems to
	  be at the root of Microsoft's "ActiveSync" too.

	  Avoid using this protocol unless you have no better options.
	  The protocol specification is incomplete, and is controlled by
	  (and for) Microsoft; it isn't an "Open" ecosystem or market.

config USB_NET_CDC_SUBSET
	tristate "Simple USB Network Links (CDC Ethernet subset)"
	depends on USB_USBNET
	default y
	help
	  This driver module supports USB network devices that can work
	  without any device-specific information.  Select it if you have
	  one of these drivers.

	  Note that while many USB host-to-host cables can work in this mode,
	  that may mean not being able to talk to Win32 systems or more
	  commonly not being able to handle certain events (like replugging
	  the host on the other end) very well.  Also, these devices will
	  not generally have permanently assigned Ethernet addresses.

config USB_ALI_M5632
	boolean "ALi M5632 based 'USB 2.0 Data Link' cables"
	depends on USB_NET_CDC_SUBSET
	help
	  Choose this option if you're using a host-to-host cable
	  based on this design, which supports USB 2.0 high speed.

config USB_AN2720
	boolean "AnchorChips 2720 based cables (Xircom PGUNET, ...)"
	depends on USB_NET_CDC_SUBSET
	help
	  Choose this option if you're using a host-to-host cable
	  based on this design.  Note that AnchorChips is now a
	  Cypress brand.

config USB_BELKIN
	boolean "eTEK based host-to-host cables (Advance, Belkin, ...)"
	depends on USB_NET_CDC_SUBSET
	default y
	help
	  Choose this option if you're using a host-to-host cable
	  based on this design:  two NetChip 2890 chips and an Atmel
	  microcontroller, with LEDs that indicate traffic.

config USB_ARMLINUX
	boolean "Embedded ARM Linux links (iPaq, ...)"
	depends on USB_NET_CDC_SUBSET
	default y
	help
	  Choose this option to support the "usb-eth" networking driver
	  used by most of the ARM Linux community with device controllers
	  such as the SA-11x0 and PXA-25x UDCs, or the tftp capabilities
	  in some PXA versions of the "blob" boot loader.

	  Linux-based "Gumstix" PXA-25x based systems use this protocol
	  to talk with other Linux systems.

	  Although the ROMs shipped with Sharp Zaurus products use a
	  different link level framing protocol, you can have them use
	  this simpler protocol by installing a different kernel.

config USB_EPSON2888
	boolean "Epson 2888 based firmware (DEVELOPMENT)"
	depends on USB_NET_CDC_SUBSET
	help
	  Choose this option to support the usb networking links used
	  by some sample firmware from Epson.

config USB_KC2190
	boolean "KT Technology KC2190 based cables (InstaNet)"
	depends on USB_NET_CDC_SUBSET
	help
	  Choose this option if you're using a host-to-host cable
	  with one of these chips.

config USB_NET_ZAURUS
	tristate "Sharp Zaurus (stock ROMs) and compatible"
	depends on USB_USBNET
	select USB_NET_CDCETHER
	select CRC32
	default y
	help
	  Choose this option to support the usb networking links used by
	  Zaurus models like the SL-5000D, SL-5500, SL-5600, A-300, B-500.
	  This also supports some related device firmware, as used in some
	  PDAs from Olympus and some cell phones from Motorola.

	  If you install an alternate image, such as the Linux 2.6 based
	  versions of OpenZaurus, you should no longer need to support this
	  protocol.  Only the "eth-fd" or "net_fd" drivers in these devices
	  really need this non-conformant variant of CDC Ethernet (or in
	  some cases CDC MDLM) protocol, not "g_ether".

config USB_NET_CX82310_ETH
	tristate "Conexant CX82310 USB ethernet port"
	depends on USB_USBNET
	help
	  Choose this option if you're using a Conexant CX82310-based ADSL
	  router with USB ethernet port. This driver is for routers only,
	  it will not work with ADSL modems (use cxacru driver instead).

config USB_NET_KALMIA
	tristate "Samsung Kalmia based LTE USB modem"
	depends on USB_USBNET
	help
	  Choose this option if you have a Samsung Kalmia based USB modem
	  as Samsung GT-B3730.

	  To compile this driver as a module, choose M here: the
	  module will be called kalmia.

config USB_NET_QMI_WWAN
	tristate "QMI WWAN driver for Qualcomm MSM based 3G and LTE modems"
	depends on USB_USBNET
	select USB_WDM
	help
	  Support WWAN LTE/3G devices based on Qualcomm Mobile Data Modem
	  (MDM) chipsets.  Examples of such devices are
	    * Huawei E392/E398

	  This driver will only drive the ethernet part of the chips.
	  The devices require additional configuration to be usable.
	  Multiple management interfaces with linux drivers are
	  available:

	    * option: AT commands on /dev/ttyUSBx
	    * cdc-wdm: Qualcomm MSM Interface (QMI) protocol on /dev/cdc-wdmx

	  A modem manager with support for QMI is recommended.

	  To compile this driver as a module, choose M here: the
	  module will be called qmi_wwan.

config USB_HSO
	tristate "Option USB High Speed Mobile Devices"
	depends on USB && RFKILL && TTY
	default n
	help
	  Choose this option if you have an Option HSDPA/HSUPA card.
	  These cards support downlink speeds of 7.2Mbps or greater.

	  To compile this driver as a module, choose M here: the
	  module will be called hso.

config USB_NET_INT51X1
	tristate "Intellon PLC based usb adapter"
	depends on USB_USBNET
	help
	  Choose this option if you're using a 14Mb USB-based PLC
	  (Powerline Communications) solution with an Intellon
	  INT51x1/INT5200 chip, like the "devolo dLan duo".

config USB_CDC_PHONET
	tristate "CDC Phonet support"
	depends on PHONET
	help
	  Choose this option to support the Phonet interface to a Nokia
	  cellular modem, as found on most Nokia handsets with the
	  "PC suite" USB profile.

config USB_IPHETH
	tristate "Apple iPhone USB Ethernet driver"
	default n
	---help---
	  Module used to share Internet connection (tethering) from your
	  iPhone (Original, 3G and 3GS) to your system.
	  Note that you need userspace libraries and programs that are needed
	  to pair your device with your system and that understand the iPhone
	  protocol.

	  For more information: http://giagio.com/wiki/moin.cgi/iPhoneEthernetDriver

config USB_SIERRA_NET
	tristate "USB-to-WWAN Driver for Sierra Wireless modems"
	depends on USB_USBNET
	help
	  Choose this option if you have a Sierra Wireless USB-to-WWAN device.

	  To compile this driver as a module, choose M here: the
	  module will be called sierra_net.

config USB_VL600
	tristate "LG VL600 modem dongle"
	depends on USB_NET_CDCETHER && TTY
	select USB_ACM
	help
	  Select this if you want to use an LG Electronics 4G/LTE usb modem
	  called VL600.  This driver only handles the ethernet
	  interface exposed by the modem firmware.  To establish a connection
	  you will first need a userspace program that sends the right
	  command to the modem through its CDC ACM port, and most
	  likely also a DHCP client.  See this thread about using the
	  4G modem from Verizon:

	  http://ubuntuforums.org/showpost.php?p=10589647&postcount=17


endmenu
