#
# 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
	default y
	---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
