#
# 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 (EXPERIMENTAL)"
	depends on EXPERIMENTAL
	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/usb/net/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 (EXPERIMENTAL)"
	depends on EXPERIMENTAL
	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_USBNET_MII
	tristate
	default n

config USB_USBNET
	tristate "Multi-purpose USB Networking Framework"
	select MII if USBNET_MII != n
	---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 && NET_ETHERNET
	select CRC32
	select USB_USBNET_MII
	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_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:

 	    * Ericsson PipeRider (all variants)
 	    * Motorola (DM100 and SB4100)
 	    * Broadcom Cable Modem (reference design)
 	    * Toshiba PCX1100U
	    * ...

	  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_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 based cables"
	# if the handshake/init/reset problems, from original 'plusb',
	# are ever resolved ... then remove "experimental"
	depends on USB_USBNET && EXPERIMENTAL
	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
	select USB_USBNET_MII
	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 (EXPERIMENTAL)"
	depends on USB_USBNET && EXPERIMENTAL
	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
	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_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".


endmenu
