#
# FC4 device configuration
#

menu "Fibre Channel support"

config FC4
	tristate "Fibre Channel and FC4 SCSI support"
	---help---
	  Fibre Channel is a high speed serial protocol mainly used to
	  connect large storage devices to the computer; it is compatible with
	  and intended to replace SCSI.

	  This is an experimental support for storage arrays connected to your
	  computer using optical fibre cables and the "X3.269-199X Fibre
	  Channel Protocol for SCSI" specification. If you want to use this,
	  you need to say Y here and to "SCSI support" as well as to the
	  drivers for the storage array itself and for the interface adapter
	  such as SOC or SOC+. This subsystem could even serve for IP
	  networking, with some code extensions.

	  If unsure, say N.

comment "FC4 drivers"
	depends on FC4

config FC4_SOC
	tristate "Sun SOC/Sbus"
	depends on FC4!=n && SPARC
	help
	  Serial Optical Channel is an interface card with one or two Fibre
	  Optic ports, each of which can be connected to a disk array. Note
	  that if you have older firmware in the card, you'll need the
	  microcode from the Solaris driver to make it work.

	  To compile this support as a module, choose M here: the module will
	  be called soc.

config FC4_SOCAL
	tristate "Sun SOC+ (aka SOCAL)"
	depends on FC4!=n && SPARC
	---help---
	  Serial Optical Channel Plus is an interface card with up to two
	  Fibre Optic ports. This card supports FC Arbitrated Loop (usually
	  A5000 or internal FC disks in E[3-6]000 machines through the
	  Interface Board). You'll probably need the microcode from the
	  Solaris driver to make it work.

	  To compile this support as a module, choose M here: the module will
	  be called socal.

comment "FC4 targets"
	depends on FC4

config SCSI_PLUTO
	tristate "SparcSTORAGE Array 100 and 200 series"
	depends on FC4!=n && SCSI
	help
	  If you never bought a disk array made by Sun, go with N.

	  To compile this support as a module, choose M here: the module will
	  be called pluto.

config SCSI_FCAL
	tristate "Sun Enterprise Network Array (A5000 and EX500)" if SPARC
	depends on FC4!=n && SCSI
	help
	  This driver drives FC-AL disks connected through a Fibre Channel
	  card using the drivers/fc4 layer (currently only SOCAL). The most
	  common is either A5000 array or internal disks in E[3-6]000
	  machines.

	  To compile this support as a module, choose M here: the module will
	  be called fcal.

config SCSI_FCAL
	prompt "Generic FC-AL disk driver"
	depends on FC4!=n && SCSI && !SPARC

endmenu

