# SPDX-License-Identifier: GPL-2.0-only

menuconfig FUSION
	bool "Fusion MPT device support"
	depends on PCI
	help
	Say Y here to get to see options for Fusion Message
	Passing Technology (MPT) 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 FUSION

config FUSION_SPI
	tristate "Fusion MPT ScsiHost drivers for SPI"
	depends on PCI && SCSI
	select SCSI_SPI_ATTRS
	help
	  SCSI HOST support for a parallel SCSI host adapters.

	  List of supported controllers:

	  LSI53C1020
	  LSI53C1020A
	  LSI53C1030
	  LSI53C1035
	  ATTO UL4D

config FUSION_FC
	tristate "Fusion MPT ScsiHost drivers for FC"
	depends on PCI && SCSI
	depends on SCSI_FC_ATTRS
	help
	  SCSI HOST support for a Fiber Channel host adapters.

	  List of supported controllers:

	  LSIFC909
	  LSIFC919
	  LSIFC919X
	  LSIFC929
	  LSIFC929X
	  LSIFC929XL
	  LSIFC949X
	  LSIFC949E
	  Brocade FC 410/420

config FUSION_SAS
	tristate "Fusion MPT ScsiHost drivers for SAS"
	depends on PCI && SCSI
	select SCSI_SAS_ATTRS
	help
	  SCSI HOST support for a SAS host adapters.

	  List of supported controllers:

	  LSISAS1064
	  LSISAS1068
	  LSISAS1064E
	  LSISAS1068E
	  LSISAS1078

config FUSION_MAX_SGE
	int "Maximum number of scatter gather entries (16 - 128)"
	default "128"
	range 16 128
	help
	  This option allows you to specify the maximum number of scatter-
	  gather entries per I/O. The driver default is 128, which matches
	  SCSI_MAX_PHYS_SEGMENTS. However, it may decreased down to 16.
	  Decreasing this parameter will reduce memory requirements
	  on a per controller instance.

config FUSION_CTL
	tristate "Fusion MPT misc device (ioctl) driver"
	depends on FUSION_SPI || FUSION_FC || FUSION_SAS
	help
	  The Fusion MPT misc device driver provides specialized control
	  of MPT adapters via system ioctl calls.  Use of ioctl calls to
	  the MPT driver requires that you create and use a misc device
	  node ala:
	  mknod /dev/mptctl c 10 240

	  One use of this ioctl interface is to perform an upgrade (reflash)
	  of the MPT adapter firmware.  Refer to readme file(s) distributed
	  with the Fusion MPT linux driver for additional details.

	  If enabled by saying M to this, a driver named: mptctl
	  will be compiled.

	  If unsure whether you really want or need this, say N.

config FUSION_LAN
	tristate "Fusion MPT LAN driver"
	depends on FUSION_FC && NET_FC
	help
	  This module supports LAN IP traffic over Fibre Channel port(s)
	  on Fusion MPT compatible hardware (LSIFC9xx chips).
	  The physical interface used is defined in RFC 2625.
	  Please refer to that document for details.

	  Installing this driver requires the knowledge to configure and
	  activate a new network interface, "fc0", using standard Linux tools.

	  If enabled by saying M to this, a driver named: mptlan
	  will be compiled.

	  If unsure whether you really want or need this, say N.

config FUSION_LOGGING
	bool "Fusion MPT logging facility"
	help
	  This turns on a logging facility that can be used to debug a number
	  of Fusion MPT related problems.

	  The debug level can be programmed on the fly via SysFS (hex values)

	  echo [level] > /sys/class/scsi_host/host#/debug_level

	  There are various debug levels that can be found in the source:
	  file:drivers/message/fusion/mptdebug.h

endif # FUSION
