#
# Token Ring driver configuration
#

# So far, we only have PCI, ISA, and MCA token ring devices
menuconfig TR
	bool "Token Ring driver support"
	depends on NETDEVICES && !UML
	depends on (PCI || ISA || MCA || CCW)
	select LLC
	help
	  Token Ring is IBM's way of communication on a local network; the
	  rest of the world uses Ethernet. To participate on a Token Ring
	  network, you need a special Token ring network card. If you are
	  connected to such a Token Ring network and want to use your Token
	  Ring card under Linux, say Y here and to the driver for your
	  particular card below and read the Token-Ring mini-HOWTO, available
	  from <http://www.tldp.org/docs.html#howto>. Most people can
	  say N here.

if TR

config IBMTR
	tristate "IBM Tropic chipset based adapter support"
	depends on ISA || MCA
	---help---
	  This is support for all IBM Token Ring cards that don't use DMA. If
	  you have such a beast, say Y and read the Token-Ring mini-HOWTO,
	  available from <http://www.tldp.org/docs.html#howto>.

	  Warning: this driver will almost definitely fail if more than one
	  active Token Ring card is present.

	  To compile this driver as a module, choose M here: the module will be
	  called ibmtr.

config IBMOL
	tristate "IBM Olympic chipset PCI adapter support"
	depends on PCI
	---help---
	  This is support for all non-Lanstreamer IBM PCI Token Ring Cards.
	  Specifically this is all IBM PCI, PCI Wake On Lan, PCI II, PCI II
	  Wake On Lan, and PCI 100/16/4 adapters.

	  If you have such an adapter, say Y and read the Token-Ring
	  mini-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 olympic.

	  Also read <file:Documentation/networking/olympic.txt> or check the
	  Linux Token Ring Project site for the latest information at
	  <http://www.linuxtr.net/>.

config IBMLS
	tristate "IBM Lanstreamer chipset PCI adapter support"
	depends on PCI && !64BIT
	help
	  This is support for IBM Lanstreamer PCI Token Ring Cards.

	  If you have such an adapter, say Y and read the Token-Ring
	  mini-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 lanstreamer.

config 3C359
	tristate "3Com 3C359 Token Link Velocity XL adapter support"
	depends on PCI
	---help---
	  This is support for the 3Com PCI Velocity XL cards, specifically
	  the 3Com 3C359, please note this is not for the 3C339 cards, you
	  should use the tms380 driver instead.

	  If you have such an adapter, say Y and read the Token-Ring
	  mini-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 3c359.

	  Also read the file <file:Documentation/networking/3c359.txt> or check the 
	  Linux Token Ring Project site for the latest information at
	  <http://www.linuxtr.net>

config TMS380TR
	tristate "Generic TMS380 Token Ring ISA/PCI adapter support"
	depends on PCI || ISA && ISA_DMA_API || MCA
	select FW_LOADER
	---help---
	  This driver provides generic support for token ring adapters
	  based on the Texas Instruments TMS380 series chipsets.  This
	  includes the SysKonnect TR4/16(+) ISA (SK-4190), SysKonnect
	  TR4/16(+) PCI (SK-4590), SysKonnect TR4/16 PCI (SK-4591),
	  Compaq 4/16 PCI, Thomas-Conrad TC4048 4/16 PCI, and several
	  Madge adapters.  If you say Y here, you will be asked to select
	  which cards to support below.  If you're using modules, each
	  class of card will be supported by a separate module.

	  If you have such an adapter and would like to use it, say Y and
	  read the Token-Ring mini-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>.

	  Also read the file <file:Documentation/networking/tms380tr.txt> or
	  check <http://www.auk.cx/tms380tr/>.

	  To compile this driver as a module, choose M here: the module will be
	  called tms380tr.

config TMSPCI
	tristate "Generic TMS380 PCI support"
	depends on TMS380TR && PCI
	---help---
	  This tms380 module supports generic TMS380-based PCI cards.

	  These cards are known to work:
	  - Compaq 4/16 TR PCI
	  - SysKonnect TR4/16 PCI (SK-4590/SK-4591)
	  - Thomas-Conrad TC4048 PCI 4/16
	  - 3Com Token Link Velocity

	  To compile this driver as a module, choose M here: the module will be
	  called tmspci.

config SKISA
	tristate "SysKonnect TR4/16 ISA support"
	depends on TMS380TR && ISA
	help
	  This tms380 module supports SysKonnect TR4/16 ISA cards.

	  These cards are known to work:
	  - SysKonnect TR4/16 ISA (SK-4190)

	  To compile this driver as a module, choose M here: the module will be
	  called skisa.

config PROTEON
	tristate "Proteon ISA support"
	depends on TMS380TR && ISA
	help
	  This tms380 module supports Proteon ISA cards.

	  These cards are known to work:
	  - Proteon 1392
	  - Proteon 1392 plus

	  To compile this driver as a module, choose M here: the module will be
	  called proteon.

config ABYSS
	tristate "Madge Smart 16/4 PCI Mk2 support"
	depends on TMS380TR && PCI
	help
	  This tms380 module supports the Madge Smart 16/4 PCI Mk2
	  cards (51-02).

	  To compile this driver as a module, choose M here: the module will be
	  called abyss.

config MADGEMC
	tristate "Madge Smart 16/4 Ringnode MicroChannel"
	depends on TMS380TR && MCA
	help
	  This tms380 module supports the Madge Smart 16/4 MC16 and MC32
	  MicroChannel adapters.

	  To compile this driver as a module, choose M here: the module will be
	  called madgemc.

config SMCTR
	tristate "SMC ISA/MCA adapter support"
	depends on (ISA || MCA_LEGACY) && (BROKEN || !64BIT)
	---help---
	  This is support for the ISA and MCA SMC Token Ring cards,
	  specifically SMC TokenCard Elite (8115T) and SMC TokenCard Elite/A
	  (8115T/A) adapters.

	  If you have such an adapter and would like to use it, say Y or M and
	  read the Token-Ring mini-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto> and the file
	  <file:Documentation/networking/smctr.txt>.

	  To compile this driver as a module, choose M here: the module will be
	  called smctr.

endif # TR
