#
# ATM device configuration
#

menu "ATM drivers"
	depends on NETDEVICES && ATM

config ATM_DUMMY
	tristate "Dummy ATM driver"
	depends on ATM
	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 && ATM
	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 && ATM
	---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 && ATM
	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 && ATM
	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.

#   bool 'Rolfs TI TNETA1570' CONFIG_ATM_TNETA1570 y
#   if [ "$CONFIG_ATM_TNETA1570" = "y" ]; then
#      bool '  Enable extended debugging' CONFIG_ATM_TNETA1570_DEBUG n
#   fi
config ATM_NICSTAR
	tristate "IDT 77201 (NICStAR) (ForeRunnerLE)"
	depends on PCI && ATM && !64BIT
	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 && ATM
	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 && ATM
	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 && ATM
	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 && ATM && !64BIT
	---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/products/ClassSheet.cfm?ClassID=ATM>
	  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_MAYBE
	tristate "FORE Systems 200E-series"
	depends on (PCI || SBUS) && ATM
	---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.

	  Note that the driver will actually be compiled only if you
	  additionally enable the support for PCA-200E and/or SBA-200E
	  cards.

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

config ATM_FORE200E_PCA
	bool "PCA-200E support"
	depends on ATM_FORE200E_MAYBE && PCI
	help
	  Say Y here if you want your PCA-200E cards to be probed.

config ATM_FORE200E_PCA_DEFAULT_FW
	bool "Use default PCA-200E firmware (normally enabled)"
	depends on ATM_FORE200E_PCA
	help
	  Use the default PCA-200E firmware data shipped with the driver.

	  Normal users do not have to deal with the firmware stuff, so
	  they should say Y here.

config ATM_FORE200E_PCA_FW
	string "Pathname of user-supplied binary firmware"
	depends on ATM_FORE200E_PCA && !ATM_FORE200E_PCA_DEFAULT_FW
	default ""
	help
	  This defines the pathname of an alternative PCA-200E binary
	  firmware image supplied by the user. This pathname may be
	  absolute or relative to the drivers/atm directory.

	  The driver comes with an adequate firmware image, so normal users do
	  not have to supply an alternative one. They just say Y to "Use
	  default PCA-200E firmware" instead.

config ATM_FORE200E_SBA
	bool "SBA-200E support"
	depends on ATM_FORE200E_MAYBE && SBUS
	help
	  Say Y here if you want your SBA-200E cards to be probed.

config ATM_FORE200E_SBA_DEFAULT_FW
	bool "Use default SBA-200E firmware (normally enabled)"
	depends on ATM_FORE200E_SBA
	help
	  Use the default SBA-200E firmware data shipped with the driver.

	  Normal users do not have to deal with the firmware stuff, so
	  they should say Y here.

config ATM_FORE200E_SBA_FW
	string "Pathname of user-supplied binary firmware"
	depends on ATM_FORE200E_SBA && !ATM_FORE200E_SBA_DEFAULT_FW
	default ""
	help
	  This defines the pathname of an alternative SBA-200E binary
	  firmware image supplied by the user. This pathname may be
	  absolute or relative to the drivers/atm directory.

	  The driver comes with an adequate firmware image, so normal users do
	  not have to supply an alternative one. They just say Y to "Use
	  default SBA-200E firmware", above.

config ATM_FORE200E_USE_TASKLET
	bool "Defer interrupt work to a tasklet"
	depends on (PCI || SBUS) && (ATM_FORE200E_PCA || ATM_FORE200E_SBA)
	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 (PCI || SBUS) && (ATM_FORE200E_PCA || ATM_FORE200E_SBA)
	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 (PCI || SBUS) && (ATM_FORE200E_PCA || ATM_FORE200E_SBA)
	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_FORE200E
	tristate
	depends on (PCI || SBUS) && (ATM_FORE200E_PCA || ATM_FORE200E_SBA)
	default m if ATM_FORE200E_MAYBE!=y
	default y if ATM_FORE200E_MAYBE=y

config ATM_HE
	tristate "ForeRunner HE Series"
	depends on PCI && ATM
	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.

endmenu

