#
# ATM device configuration
#

menuconfig ATM_DRIVERS
	bool "ATM drivers"
	depends on NETDEVICES && ATM
	default y
	---help---
	  Say Y here to get to see options for Asynchronous Transfer Mode
	  device drivers. This option alone does not add any kernel code.

	  If you say N, all options in this submenu will be skipped and disabled.

if ATM_DRIVERS && NETDEVICES && ATM

config ATM_DUMMY
	tristate "Dummy ATM driver"
	help
	  Dummy ATM driver. Useful for proxy signalling, testing,
	  and development.  If unsure, say N.

config ATM_TCP
	tristate "ATM over TCP"
	depends on INET
	help
	  ATM over TCP driver. Useful mainly for development and for
	  experiments. If unsure, say N.

config ATM_LANAI
	tristate "Efficient Networks Speedstream 3010"
	depends on PCI && ATM
	help
	  Supports ATM cards based on the Efficient Networks "Lanai"
	  chipset such as the Speedstream 3010 and the ENI-25p.  The
	  Speedstream 3060 is currently not supported since we don't
	  have the code to drive the on-board Alcatel DSL chipset (yet).

config ATM_ENI
	tristate "Efficient Networks ENI155P"
	depends on PCI
	---help---
	  Driver for the Efficient Networks ENI155p series and SMC ATM
	  Power155 155 Mbps ATM adapters. Both, the versions with 512KB and
	  2MB on-board RAM (Efficient calls them "C" and "S", respectively),
	  and the FPGA and the ASIC Tonga versions of the board are supported.
	  The driver works with MMF (-MF or ...F) and UTP-5 (-U5 or ...D)
	  adapters.

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

config ATM_ENI_DEBUG
	bool "Enable extended debugging"
	depends on ATM_ENI
	help
	  Extended debugging records various events and displays that list
	  when an inconsistency is detected. This mechanism is faster than
	  generally using printks, but still has some impact on performance.
	  Note that extended debugging may create certain race conditions
	  itself. Enable this ONLY if you suspect problems with the driver.

config ATM_ENI_TUNE_BURST
	bool "Fine-tune burst settings"
	depends on ATM_ENI
	---help---
	  In order to obtain good throughput, the ENI NIC can transfer
	  multiple words of data per PCI bus access cycle. Such a multi-word
	  transfer is called a burst.

	  The default settings for the burst sizes are suitable for most PCI
	  chipsets. However, in some cases, large bursts may overrun buffers
	  in the PCI chipset and cause data corruption. In such cases, large
	  bursts must be disabled and only (slower) small bursts can be used.
	  The burst sizes can be set independently in the send (TX) and
	  receive (RX) direction.

	  Note that enabling many different burst sizes in the same direction
	  may increase the cost of setting up a transfer such that the
	  resulting throughput is lower than when using only the largest
	  available burst size.

	  Also, sometimes larger bursts lead to lower throughput, e.g. on an
	  Intel 440FX board, a drop from 135 Mbps to 103 Mbps was observed
	  when going from 8W to 16W bursts.

config ATM_ENI_BURST_TX_16W
	bool "Enable 16W TX bursts (discouraged)"
	depends on ATM_ENI_TUNE_BURST
	help
	  Burst sixteen words at once in the send direction. This may work
	  with recent PCI chipsets, but is known to fail with older chipsets.

config ATM_ENI_BURST_TX_8W
	bool "Enable 8W TX bursts (recommended)"
	depends on ATM_ENI_TUNE_BURST
	help
	  Burst eight words at once in the send direction. This is the default
	  setting.

config ATM_ENI_BURST_TX_4W
	bool "Enable 4W TX bursts (optional)"
	depends on ATM_ENI_TUNE_BURST
	help
	  Burst four words at once in the send direction. You may want to try
	  this if you have disabled 8W bursts. Enabling 4W if 8W is also set
	  may or may not improve throughput.

config ATM_ENI_BURST_TX_2W
	bool "Enable 2W TX bursts (optional)"
	depends on ATM_ENI_TUNE_BURST
	help
	  Burst two words at once in the send direction. You may want to try
	  this if you have disabled 4W and 8W bursts. Enabling 2W if 4W or 8W
	  are also set may or may not improve throughput.

config ATM_ENI_BURST_RX_16W
	bool "Enable 16W RX bursts (discouraged)"
	depends on ATM_ENI_TUNE_BURST
	help
	  Burst sixteen words at once in the receive direction. This may work
	  with recent PCI chipsets, but is known to fail with older chipsets.

config ATM_ENI_BURST_RX_8W
	bool "Enable 8W RX bursts (discouraged)"
	depends on ATM_ENI_TUNE_BURST
	help
	  Burst eight words at once in the receive direction. This may work
	  with recent PCI chipsets, but is known to fail with older chipsets,
	  such as the Intel Neptune series.

config ATM_ENI_BURST_RX_4W
	bool "Enable 4W RX bursts (recommended)"
	depends on ATM_ENI_TUNE_BURST
	help
	  Burst four words at once in the receive direction. This is the
	  default setting. Enabling 4W if 8W is also set may or may not
	  improve throughput.

config ATM_ENI_BURST_RX_2W
	bool "Enable 2W RX bursts (optional)"
	depends on ATM_ENI_TUNE_BURST
	help
	  Burst two words at once in the receive direction. You may want to
	  try this if you have disabled 4W and 8W bursts. Enabling 2W if 4W or
	  8W are also set may or may not improve throughput.

config ATM_FIRESTREAM
	tristate "Fujitsu FireStream (FS50/FS155) "
	depends on PCI && VIRT_TO_BUS
	help
	  Driver for the Fujitsu FireStream 155 (MB86697) and
	  FireStream 50 (MB86695) ATM PCI chips.

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

config ATM_ZATM
	tristate "ZeitNet ZN1221/ZN1225"
	depends on PCI && VIRT_TO_BUS
	help
	  Driver for the ZeitNet ZN1221 (MMF) and ZN1225 (UTP-5) 155 Mbps ATM
	  adapters.

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

config ATM_ZATM_DEBUG
	bool "Enable extended debugging"
	depends on ATM_ZATM
	help
	  Extended debugging records various events and displays that list
	  when an inconsistency is detected. This mechanism is faster than
	  generally using printks, but still has some impact on performance.
	  Note that extended debugging may create certain race conditions
	  itself. Enable this ONLY if you suspect problems with the driver.

config ATM_NICSTAR
	tristate "IDT 77201 (NICStAR) (ForeRunnerLE)"
	depends on PCI
	help
	  The NICStAR chipset family is used in a large number of ATM NICs for
	  25 and for 155 Mbps, including IDT cards and the Fore ForeRunnerLE
	  series. Say Y if you have one of those.

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

config ATM_NICSTAR_USE_SUNI
	bool "Use suni PHY driver (155Mbps)"
	depends on ATM_NICSTAR
	help
	  Support for the S-UNI and compatible PHYsical layer chips. These are
	  found in most 155Mbps NICStAR based ATM cards, namely in the
	  ForeRunner LE155 cards. This driver provides detection of cable~
	  removal and reinsertion and provides some statistics. This driver
	  doesn't have removal capability when compiled as a module, so if you
	  need that capability don't include S-UNI support (it's not needed to
	  make the card work).

config ATM_NICSTAR_USE_IDT77105
	bool "Use IDT77015 PHY driver (25Mbps)"
	depends on ATM_NICSTAR
	help
	  Support for the PHYsical layer chip in ForeRunner LE25 cards. In
	  addition to cable removal/reinsertion detection, this driver allows
	  you to control the loopback mode of the chip via a dedicated IOCTL.
	  This driver is required for proper handling of temporary carrier
	  loss, so if you have a 25Mbps NICStAR based ATM card you must say Y.

config ATM_IDT77252
	tristate "IDT 77252 (NICStAR II)"
	depends on PCI
	help
	  Driver for the IDT 77252 ATM PCI chips.

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

config ATM_IDT77252_DEBUG
	bool "Enable debugging messages"
	depends on ATM_IDT77252
	help
	  Somewhat useful debugging messages are available. The choice of
	  messages is controlled by a bitmap.  This may be specified as a
	  module argument.  See the file <file:drivers/atm/idt77252.h> for
	  the meanings of the bits in the mask.

	  When active, these messages can have a significant impact on the
	  speed of the driver, and the size of your syslog files! When
	  inactive, they will have only a modest impact on performance.

config ATM_IDT77252_RCV_ALL
	bool "Receive ALL cells in raw queue"
	depends on ATM_IDT77252
	help
	  Enable receiving of all cells on the ATM link, that do not match
	  an open connection in the raw cell queue of the driver.  Useful
	  for debugging or special applications only, so the safe answer is N.

config ATM_IDT77252_USE_SUNI
	bool
	depends on ATM_IDT77252
	default y

config ATM_AMBASSADOR
	tristate "Madge Ambassador (Collage PCI 155 Server)"
	depends on PCI && VIRT_TO_BUS
	select BITREVERSE
	help
	  This is a driver for ATMizer based ATM card produced by Madge
	  Networks Ltd. Say Y (or M to compile as a module named ambassador)
	  here if you have one of these cards.

config ATM_AMBASSADOR_DEBUG
	bool "Enable debugging messages"
	depends on ATM_AMBASSADOR
	---help---
	  Somewhat useful debugging messages are available. The choice of
	  messages is controlled by a bitmap.  This may be specified as a
	  module argument (kernel command line argument as well?), changed
	  dynamically using an ioctl (not yet) or changed by sending the
	  string "Dxxxx" to VCI 1023 (where x is a hex digit).  See the file
	  <file:drivers/atm/ambassador.h> for the meanings of the bits in the
	  mask.

	  When active, these messages can have a significant impact on the
	  speed of the driver, and the size of your syslog files! When
	  inactive, they will have only a modest impact on performance.

config ATM_HORIZON
	tristate "Madge Horizon [Ultra] (Collage PCI 25 and Collage PCI 155 Client)"
	depends on PCI && VIRT_TO_BUS
	help
	  This is a driver for the Horizon chipset ATM adapter cards once
	  produced by Madge Networks Ltd. Say Y (or M to compile as a module
	  named horizon) here if you have one of these cards.

config ATM_HORIZON_DEBUG
	bool "Enable debugging messages"
	depends on ATM_HORIZON
	---help---
	  Somewhat useful debugging messages are available. The choice of
	  messages is controlled by a bitmap.  This may be specified as a
	  module argument (kernel command line argument as well?), changed
	  dynamically using an ioctl (not yet) or changed by sending the
	  string "Dxxxx" to VCI 1023 (where x is a hex digit).  See the file
	  <file:drivers/atm/horizon.h> for the meanings of the bits in the
	  mask.

	  When active, these messages can have a significant impact on the
	  speed of the driver, and the size of your syslog files! When
	  inactive, they will have only a modest impact on performance.

config ATM_IA
	tristate "Interphase ATM PCI x575/x525/x531"
	depends on PCI
	---help---
	  This is a driver for the Interphase (i)ChipSAR adapter cards
	  which include a variety of variants in term of the size of the
	  control memory (128K-1KVC, 512K-4KVC), the size of the packet
	  memory (128K, 512K, 1M), and the PHY type (Single/Multi mode OC3,
	  UTP155, UTP25, DS3 and E3). Go to:
	  	<http://www.iphase.com/>
	  for more info about the cards. Say Y (or M to compile as a module
	  named iphase) here if you have one of these cards.

	  See the file <file:Documentation/networking/iphase.txt> for further
	  details.

config ATM_IA_DEBUG
	bool "Enable debugging messages"
	depends on ATM_IA
	---help---
	  Somewhat useful debugging messages are available. The choice of
	  messages is controlled by a bitmap. This may be specified as a
	  module argument (kernel command line argument as well?), changed
	  dynamically using an ioctl (Get the debug utility, iadbg, from
	  <ftp://ftp.iphase.com/pub/atm/pci/>).

	  See the file <file:drivers/atm/iphase.h> for the meanings of the
	  bits in the mask.

	  When active, these messages can have a significant impact on the
	  speed of the driver, and the size of your syslog files! When
	  inactive, they will have only a modest impact on performance.

config ATM_FORE200E
	tristate "FORE Systems 200E-series"
	depends on (PCI || SBUS)
	select FW_LOADER
	---help---
	  This is a driver for the FORE Systems 200E-series ATM adapter
	  cards. It simultaneously supports PCA-200E and SBA-200E models
	  on PCI and SBUS hosts. Say Y (or M to compile as a module
	  named fore_200e) here if you have one of these ATM adapters.

	  See the file <file:Documentation/networking/fore200e.txt> for
	  further details.

config ATM_FORE200E_USE_TASKLET
	bool "Defer interrupt work to a tasklet"
	depends on ATM_FORE200E
	default n
	help
	  This defers work to be done by the interrupt handler to a
	  tasklet instead of handling everything at interrupt time.  This
	  may improve the responsive of the host.

config ATM_FORE200E_TX_RETRY
	int "Maximum number of tx retries"
	depends on ATM_FORE200E
	default "16"
	---help---
	  Specifies the number of times the driver attempts to transmit
	  a message before giving up, if the transmit queue of the ATM card
	  is transiently saturated.

	  Saturation of the transmit queue may occur only under extreme
	  conditions, e.g. when a fast host continuously submits very small
	  frames (<64 bytes) or raw AAL0 cells (48 bytes) to the ATM adapter.

	  Note that under common conditions, it is unlikely that you encounter
	  a saturation of the transmit queue, so the retry mechanism never
	  comes into play.

config ATM_FORE200E_DEBUG
	int "Debugging level (0-3)"
	depends on ATM_FORE200E
	default "0"
	help
	  Specifies the level of debugging messages issued by the driver.
	  The verbosity of the driver increases with the value of this
	  parameter.

	  When active, these messages can have a significant impact on
	  the performances of the driver, and the size of your syslog files!
	  Keep the debugging level to 0 during normal operations.

config ATM_HE
	tristate "ForeRunner HE Series"
	depends on PCI
	help
	  This is a driver for the Marconi ForeRunner HE-series ATM adapter
	  cards. It simultaneously supports the 155 and 622 versions.

config ATM_HE_USE_SUNI
	bool "Use S/UNI PHY driver"
	depends on ATM_HE
	help
	  Support for the S/UNI-Ultra and S/UNI-622 found in the ForeRunner
	  HE cards.  This driver provides carrier detection some statistics.

config ATM_SOLOS
	tristate "Solos ADSL2+ PCI Multiport card driver"
	depends on PCI
	select FW_LOADER
	help
	  Support for the Solos multiport ADSL2+ card.

endif # ATM
