#
# 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 && !64BIT && VIRT_TO_BUS
	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 && !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
	---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
	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.

endif # ATM
