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

menuconfig USB_NET_DRIVERS
	tristate "USB Network Adapters"
	default USB if USB
	depends on USB && NET

if USB_NET_DRIVERS

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
	select CRC32
	select CRYPTO
	select CRYPTO_HASH
	select CRYPTO_SHA256
	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_LAN78XX
	tristate "Microchip LAN78XX Based USB Ethernet Adapters"
	select MII
	select PHYLIB
	select MICROCHIP_PHY
	select FIXED_PHY
	select CRC32
	help
	  This option adds support for Microchip LAN78XX based USB 2
	  & USB 3 10/100/1000 Ethernet adapters.
	  LAN7800 : USB 3 to 10/100/1000 Ethernet adapter
	  LAN7850 : USB 2 to 10/100/1000 Ethernet adapter
	  LAN7801 : USB 3 to 10/100/1000 Ethernet adapter (MAC only)

	  Proper PHY driver is required for LAN7801.

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

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
	    * Billionton Systems, GUSB2AM-1G-B
	    * Buffalo LUA-U2-KTX
	    * Corega FEther USB2-TX
	    * D-Link DUB-E100
	    * Hawking UF200
	    * Linksys USB200M
	    * Netgear FA120
	    * Sitecom LN-029
	    * Sitecom LN-028
	    * 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/27A1 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_ENABLE
	tristate
	depends on USB_NET_CDC_SUBSET

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
	bool "ALi M5632 based 'USB 2.0 Data Link' cables"
	depends on USB_NET_CDC_SUBSET
	select USB_NET_CDC_SUBSET_ENABLE
	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
	bool "AnchorChips 2720 based cables (Xircom PGUNET, ...)"
	depends on USB_NET_CDC_SUBSET
	select USB_NET_CDC_SUBSET_ENABLE
	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
	bool "eTEK based host-to-host cables (Advance, Belkin, ...)"
	depends on USB_NET_CDC_SUBSET
	select USB_NET_CDC_SUBSET_ENABLE
	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
	bool "Embedded ARM Linux links (iPaq, ...)"
	depends on USB_NET_CDC_SUBSET
	select USB_NET_CDC_SUBSET_ENABLE
	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
	bool "Epson 2888 based firmware (DEVELOPMENT)"
	depends on USB_NET_CDC_SUBSET
	select USB_NET_CDC_SUBSET_ENABLE
	help
	  Choose this option to support the usb networking links used
	  by some sample firmware from Epson.

config USB_KC2190
	bool "KT Technology KC2190 based cables (InstaNet)"
	depends on USB_NET_CDC_SUBSET
	select USB_NET_CDC_SUBSET_ENABLE
	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 && USB_USBNET
	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

config USB_NET_CH9200
	tristate "QingHeng CH9200 USB ethernet support"
	depends on USB_USBNET
	select MII
	help
	  Choose this option if you have a USB ethernet adapter with a QinHeng
	  CH9200 chipset.

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

endif # USB_NET_DRIVERS
