#
# 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.

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

