#
# 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 || PCMCIA)
	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 PCMCIA_IBMTR
	tristate "IBM PCMCIA tokenring adapter support"
	depends on IBMTR!=y && PCMCIA
	---help---
	  Say Y here if you intend to attach this type of Token Ring PCMCIA
	  card to your computer. You then also need to say Y to "Token Ring
	  driver support".

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

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
