#
# 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
	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
	help
	  This option adds support for Microchip LAN78XX based USB 2
	  & USB 3 10/100/1000 Ethernet adapters.

	  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
