#
# Tulip family network device configuration
#

menuconfig NET_TULIP
	bool "\"Tulip\" family network device support"
	depends on PCI || EISA || CARDBUS
	help
	  This selects the "Tulip" family of EISA/PCI network cards.

if NET_TULIP

config DE2104X
	tristate "Early DECchip Tulip (dc2104x) PCI support"
	depends on PCI
	select CRC32
	---help---
	  This driver is developed for the SMC EtherPower series Ethernet
	  cards and also works with cards based on the DECchip
	  21040 (Tulip series) chips.  Some LinkSys PCI cards are
	  of this type.  (If your card is NOT SMC EtherPower 10/100 PCI
	  (smc9332dst), you can also try the driver for "Generic DECchip"
	  cards, below.  However, most people with a network card of this type
	  will say Y here.) Do read the Ethernet-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>.

	  To compile this driver as a module, choose M here. The module will
	  be called de2104x.

config DE2104X_DSL
	int "Descriptor Skip Length in 32 bit longwords"
	depends on DE2104X
	range 0 31
	default 0
	help
	  Setting this value allows to align ring buffer descriptors into their
	  own cache lines. Value of 4 corresponds to the typical 32 byte line
	  (the descriptor is 16 bytes). This is necessary on systems that lack
	  cache coherence, an example is PowerMac 5500. Otherwise 0 is safe.
	  Default is 0, and range is 0 to 31.

config TULIP
	tristate "DECchip Tulip (dc2114x) PCI support"
	depends on PCI
	select CRC32
	---help---
	  This driver is developed for the SMC EtherPower series Ethernet
	  cards and also works with cards based on the DECchip 
	  21140 (Tulip series) chips.  Some LinkSys PCI cards are
	  of this type.  (If your card is NOT SMC EtherPower 10/100 PCI
	  (smc9332dst), you can also try the driver for "Generic DECchip"
	  cards, above.  However, most people with a network card of this type
	  will say Y here.) Do read the Ethernet-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>.

	  To compile this driver as a module, choose M here. The module will
	  be called tulip.

config TULIP_MWI
	bool "New bus configuration (EXPERIMENTAL)"
	depends on TULIP && EXPERIMENTAL
	help
	  This configures your Tulip card specifically for the card and
	  system cache line size type you are using.

	  This is experimental code, not yet tested on many boards.

	  If unsure, say N.

config TULIP_MMIO
	bool "Use PCI shared mem for NIC registers"
	depends on TULIP
	help
	  Use PCI shared memory for the NIC registers, rather than going through
	  the Tulip's PIO (programmed I/O ports).  Faster, but could produce
	  obscure bugs if your mainboard has memory controller timing issues.
	  If in doubt, say N.

config TULIP_NAPI
	bool "Use RX polling (NAPI)"
	depends on TULIP
	help
	  NAPI is a new driver API designed to reduce CPU and interrupt load
	  when the driver is receiving lots of packets from the card. It is
	  still somewhat experimental and thus not yet enabled by default.

	  If your estimated Rx load is 10kpps or more, or if the card will be
	  deployed on potentially unfriendly networks (e.g. in a firewall),
	  then say Y here.

	  If in doubt, say N.

config TULIP_NAPI_HW_MITIGATION
	bool "Use Interrupt Mitigation"
	depends on TULIP_NAPI
	---help---
	  Use HW to reduce RX interrupts. Not strictly necessary since NAPI
	  reduces RX interrupts by itself. Interrupt mitigation reduces RX
	  interrupts even at low levels of traffic at the cost of a small
	  latency.

	  If in doubt, say Y.

config TULIP_DM910X
	def_bool y
	depends on TULIP && SPARC

config DE4X5
	tristate "Generic DECchip & DIGITAL EtherWORKS PCI/EISA"
	depends on PCI || EISA
	select CRC32
	---help---
	  This is support for the DIGITAL series of PCI/EISA Ethernet cards.
	  These include the DE425, DE434, DE435, DE450 and DE500 models.  If
	  you have a network card of this type, say Y and read the
	  Ethernet-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>. More specific
	  information is contained in
	  <file:Documentation/networking/de4x5.txt>.

	  To compile this driver as a module, choose M here. The module will
	  be called de4x5.

config WINBOND_840
	tristate "Winbond W89c840 Ethernet support"
	depends on PCI
	select CRC32
	select MII
	help
	  This driver is for the Winbond W89c840 chip.  It also works with 
	  the TX9882 chip on the Compex RL100-ATX board.
	  More specific information and updates are available from
	  <http://www.scyld.com/network/drivers.html>.

config DM9102
	tristate "Davicom DM910x/DM980x support"
	depends on PCI
	select CRC32
	---help---
	  This driver is for DM9102(A)/DM9132/DM9801 compatible PCI cards from
	  Davicom (<http://www.davicom.com.tw/>).  If you have such a network
	  (Ethernet) card, say Y.  Some information is contained in the file
	  <file:Documentation/networking/dmfe.txt>.

	  To compile this driver as a module, choose M here. The module will
	  be called dmfe.

config ULI526X
	tristate "ULi M526x controller support"
	depends on PCI
	select CRC32
	---help---
	  This driver is for ULi M5261/M5263 10/100M Ethernet Controller
	  (<http://www.nvidia.com/page/uli_drivers.html>).

	  To compile this driver as a module, choose M here. The module will
	  be called uli526x.
	  
config PCMCIA_XIRCOM
	tristate "Xircom CardBus support"
	depends on CARDBUS
	---help---
	  This driver is for the Digital "Tulip" Ethernet CardBus adapters.
	  It should work with most DEC 21*4*-based chips/ethercards, as well
	  as with work-alike chips from Lite-On (PNIC) and Macronix (MXIC) and
	  ASIX.

	  To compile this driver as a module, choose M here. The module will
	  be called xircom_cb.  If unsure, say N.

endif # NET_TULIP
