# SPDX-License-Identifier: GPL-2.0
#
# 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 IDT77105 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/device_drivers/atm/iphase.rst>
	  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/device_drivers/atm/fore200e.rst> 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
