#
# 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"
	depends on m
	default USB if USB
	depends on USB && NET

if USB_NET_DRIVERS

config USB_CATC
	depends on n
	tristate "USB CATC NetMate-based Ethernet device support"
	depends on m
	depends on 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
	depends on n
	tristate "USB KLSI KL5USB101-based ethernet device support"
	depends on m
	---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
	depends on n
	tristate "USB Pegasus/Pegasus-II based ethernet device support"
	depends on m
	select BACKPORT_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
	depends on n
	tristate "USB RTL8150 based ethernet device support"
	depends on m
	select BACKPORT_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
	depends on n
	tristate "Realtek RTL8152/RTL8153 Based USB Ethernet Adapters"
	depends on m
	select BACKPORT_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"
	depends on m
	select BACKPORT_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
	depends on n
	tristate "ASIX AX88xxx Based USB 2.0 Ethernet Adapters"
	depends on m
	depends on USB_USBNET
	depends on CRC32
	depends on 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
	depends on n
	tristate "ASIX AX88179/178A USB 3.0/2.0 to Gigabit Ethernet"
	depends on m
	depends on USB_USBNET
	depends on CRC32
	depends on 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 m
	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
	depends on n
	tristate "CDC EEM support"
	depends on m
	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 m
	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
	depends on n
	tristate "Huawei NCM embedded AT channel support"
	depends on m
	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 m
	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
	depends on n
	tristate "Davicom DM96xx based USB 10/100 ethernet devices"
	depends on m
	depends on USB_USBNET
	depends on CRC32
	help
	  This option adds support for Davicom DM9601/DM9620/DM9621A
	  based USB 10/100 Ethernet adapters.

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

config USB_NET_SR9800
	depends on n
	tristate "CoreChip-sz SR9800 based USB 2.0 10/100 ethernet devices"
	depends on m
	depends on USB_USBNET
	depends on 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
	depends on n
	tristate "SMSC LAN75XX based USB 2.0 gigabit ethernet devices"
	depends on m
	depends on USB_USBNET
	depends on BITREVERSE
	depends on CRC16
	depends on CRC32
	help
	  This option adds support for SMSC LAN75XX based USB 2.0
	  Gigabit Ethernet adapters.

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

config USB_NET_GL620A
	depends on n
	tristate "GeneSys GL620USB-A based cables"
	depends on m
	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
	depends on n
	tristate "NetChip 1080 based cables (Laplink, ...)"
	depends on m
	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
	depends on n
	tristate "Prolific PL-2301/2302/25A1 based cables"
	depends on m
	# 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
	depends on n
	tristate "MosChip MCS7830 based Ethernet adapters"
	depends on m
	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 m
	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
	depends on n
	tristate "Simple USB Network Links (CDC Ethernet subset)"
	depends on m
	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
	depends on n
	tristate "Sharp Zaurus (stock ROMs) and compatible"
	depends on m
	depends on USB_USBNET
	select USB_NET_CDCETHER
	depends on 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
	depends on n
	tristate "Conexant CX82310 USB ethernet port"
	depends on m
	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
	depends on n
	tristate "Samsung Kalmia based LTE USB modem"
	depends on m
	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 m
	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
	depends on n
	tristate "Option USB High Speed Mobile Devices"
	depends on m
	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
	depends on n
	tristate "Intellon PLC based usb adapter"
	depends on m
	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
	depends on n
	tristate "CDC Phonet support"
	depends on m
	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
	depends on n
	tristate "Apple iPhone USB Ethernet driver"
	depends on m
	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 m
	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
	depends on n
	tristate "LG VL600 modem dongle"
	depends on m
	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

endif # USB_NET_DRIVERS
