#
# Tulip family network device configuration
#

config NET_TULIP
	bool "DEC - Tulip devices"
	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"
	depends on TULIP
	---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)
	depends on VIRT_TO_BUS || ALPHA || PPC || SPARC
	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
