# SPDX-License-Identifier: GPL-2.0-only
menu "SCSI device support"

config SCSI_MOD
       tristate
       default y if SCSI=n || SCSI=y
       default m if SCSI=m

config RAID_ATTRS
	tristate "RAID Transport Class"
	default n
	depends on BLOCK
	depends on SCSI_MOD
	---help---
	  Provides RAID

config SCSI
	tristate "SCSI device support"
	depends on BLOCK
	select SCSI_DMA if HAS_DMA
	select SG_POOL
	select BLK_SCSI_REQUEST
	---help---
	  If you want to use a SCSI hard disk, SCSI tape drive, SCSI CD-ROM or
	  any other SCSI device under Linux, say Y and make sure that you know
	  the name of your SCSI host adapter (the card inside your computer
	  that "speaks" the SCSI protocol, also called SCSI controller),
	  because you will be asked for it.

	  You also need to say Y here if you have a device which speaks
	  the SCSI protocol.  Examples of this include the parallel port
	  version of the IOMEGA ZIP drive, USB storage devices, Fibre
	  Channel, and FireWire storage.

	  To compile this driver as a module, choose M here and read
	  <file:Documentation/scsi/scsi.txt>.
	  The module will be called scsi_mod.

	  However, do not compile this as a module if your root file system
	  (the one containing the directory /) is located on a SCSI device.

config SCSI_DMA
	bool
	default n

config SCSI_ESP_PIO
	bool

config SCSI_NETLINK
	bool
	default	n
	depends on NET

config SCSI_PROC_FS
	bool "legacy /proc/scsi/ support"
	depends on SCSI && PROC_FS
	default y
	---help---
	  This option enables support for the various files in
	  /proc/scsi.  In Linux 2.6 this has been superseded by
	  files in sysfs but many legacy applications rely on this.

	  If unsure say Y.

comment "SCSI support type (disk, tape, CD-ROM)"
	depends on SCSI

config BLK_DEV_SD
	tristate "SCSI disk support"
	depends on SCSI
	---help---
	  If you want to use SCSI hard disks, Fibre Channel disks,
	  Serial ATA (SATA) or Parallel ATA (PATA) hard disks,
	  USB storage or the SCSI or parallel port version of
	  the IOMEGA ZIP drive, say Y and read the SCSI-HOWTO,
	  the Disk-HOWTO and the Multi-Disk-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>. This is NOT for SCSI
	  CD-ROMs.

	  To compile this driver as a module, choose M here and read
	  <file:Documentation/scsi/scsi.txt>.
	  The module will be called sd_mod.

	  Do not compile this driver as a module if your root file system
	  (the one containing the directory /) is located on a SCSI disk.
	  In this case, do not compile the driver for your SCSI host adapter
	  (below) as a module either.

config CHR_DEV_ST
	tristate "SCSI tape support"
	depends on SCSI
	---help---
	  If you want to use a SCSI tape drive under Linux, say Y and read the
	  SCSI-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>, and
	  <file:Documentation/scsi/st.txt> in the kernel source.  This is NOT
	  for SCSI CD-ROMs.

	  To compile this driver as a module, choose M here and read
	  <file:Documentation/scsi/scsi.txt>. The module will be called st.

config CHR_DEV_OSST
	tristate "SCSI OnStream SC-x0 tape support"
	depends on SCSI
	---help---
	  The OnStream SC-x0 SCSI tape drives cannot be driven by the
	  standard st driver, but instead need this special osst driver and
	  use the  /dev/osstX char device nodes (major 206).  Via usb-storage,
	  you may be able to drive the USB-x0 and DI-x0 drives as well.
	  Note that there is also a second generation of OnStream
	  tape drives (ADR-x0) that supports the standard SCSI-2 commands for
	  tapes (QIC-157) and can be driven by the standard driver st.
	  For more information, you may have a look at the SCSI-HOWTO
	  <http://www.tldp.org/docs.html#howto>  and
	  <file:Documentation/scsi/osst.txt>  in the kernel source.
	  More info on the OnStream driver may be found on
	  <http://sourceforge.net/projects/osst/>
	  Please also have a look at the standard st docu, as most of it
	  applies to osst as well.

	  To compile this driver as a module, choose M here and read
	  <file:Documentation/scsi/scsi.txt>. The module will be called osst.

config BLK_DEV_SR
	tristate "SCSI CDROM support"
	depends on SCSI && BLK_DEV
	select CDROM
	---help---
	  If you want to use a CD or DVD drive attached to your computer
	  by SCSI, FireWire, USB or ATAPI, say Y and read the SCSI-HOWTO
	  and the CDROM-HOWTO at <http://www.tldp.org/docs.html#howto>.

	  Make sure to say Y or M to "ISO 9660 CD-ROM file system support".

	  To compile this driver as a module, choose M here and read
	  <file:Documentation/scsi/scsi.txt>.
	  The module will be called sr_mod.

config BLK_DEV_SR_VENDOR
	bool "Enable vendor-specific extensions (for SCSI CDROM)"
	depends on BLK_DEV_SR
	help
	  This enables the usage of vendor specific SCSI commands. This is
	  required to support multisession CDs with old NEC/TOSHIBA cdrom
	  drives (and HP Writers). If you have such a drive and get the first
	  session only, try saying Y here; everybody else says N.

config CHR_DEV_SG
	tristate "SCSI generic support"
	depends on SCSI
	---help---
	  If you want to use SCSI scanners, synthesizers or CD-writers or just
	  about anything having "SCSI" in its name other than hard disks,
	  CD-ROMs or tapes, say Y here. These won't be supported by the kernel
	  directly, so you need some additional software which knows how to
	  talk to these devices using the SCSI protocol:

	  For scanners, look at SANE (<http://www.sane-project.org/>). For CD
	  writer software look at Cdrtools
	  (<http://cdrecord.berlios.de/private/cdrecord.html>)
	  and for burning a "disk at once": CDRDAO
	  (<http://cdrdao.sourceforge.net/>). Cdparanoia is a high
	  quality digital reader of audio CDs (<http://www.xiph.org/paranoia/>).
	  For other devices, it's possible that you'll have to write the
	  driver software yourself. Please read the file
	  <file:Documentation/scsi/scsi-generic.txt> for more information.

	  To compile this driver as a module, choose M here and read
	  <file:Documentation/scsi/scsi.txt>. The module will be called sg.

	  If unsure, say N.

config CHR_DEV_SCH
	tristate "SCSI media changer support"
	depends on SCSI
	---help---
	  This is a driver for SCSI media changers.  Most common devices are
	  tape libraries and MOD/CDROM jukeboxes.  *Real* jukeboxes, you
	  don't need this for those tiny 6-slot cdrom changers.  Media
	  changers are listed as "Type: Medium Changer" in /proc/scsi/scsi.
	  If you have such hardware and want to use it with linux, say Y
	  here.  Check <file:Documentation/scsi/scsi-changer.txt> for details.
	
	  If you want to compile this as a module ( = code which can be
	  inserted in and removed from the running kernel whenever you want),
	  say M here and read <file:Documentation/kbuild/modules.txt> and
	  <file:Documentation/scsi/scsi.txt>. The module will be called ch.o.
	  If unsure, say N.

config SCSI_ENCLOSURE
	tristate "SCSI Enclosure Support"
	depends on SCSI && ENCLOSURE_SERVICES
	depends on m || SCSI_SAS_ATTRS != m
	help
	  Enclosures are devices sitting on or in SCSI backplanes that
	  manage devices.  If you have a disk cage, the chances are that
	  it has an enclosure device.  Selecting this option will just allow
	  certain enclosure conditions to be reported and is not required.

config SCSI_CONSTANTS
	bool "Verbose SCSI error reporting (kernel size += 36K)"
	depends on SCSI
	help
	  The error messages regarding your SCSI hardware will be easier to
	  understand if you say Y here; it will enlarge your kernel by about
	  36 KB. If in doubt, say Y.

config SCSI_LOGGING
	bool "SCSI logging facility"
	depends on SCSI
	---help---
	  This turns on a logging facility that can be used to debug a number
	  of SCSI related problems.

	  If you say Y here, no logging output will appear by default, but you
	  can enable logging by saying Y to "/proc file system support" and
	  "Sysctl support" below and executing the command

	  echo <bitmask> > /proc/sys/dev/scsi/logging_level

	  where <bitmask> is a four byte value representing the logging type
	  and logging level for each type of logging selected.

	  There are a number of logging types and you can find them in the
	  source at <file:drivers/scsi/scsi_logging.h>. The logging levels
	  are also described in that file and they determine the verbosity of
	  the logging for each logging type.

	  If you say N here, it may be harder to track down some types of SCSI
	  problems. If you say Y here your kernel will be somewhat larger, but
	  there should be no noticeable performance impact as long as you have
	  logging turned off.

config SCSI_SCAN_ASYNC
	bool "Asynchronous SCSI scanning"
	depends on SCSI
	help
	  The SCSI subsystem can probe for devices while the rest of the
	  system continues booting, and even probe devices on different
	  busses in parallel, leading to a significant speed-up.

	  You can override this choice by specifying "scsi_mod.scan=sync"
	  or async on the kernel's command line.

	  Note that this setting also affects whether resuming from
	  system suspend will be performed asynchronously.

menu "SCSI Transports"
	depends on SCSI

config SCSI_SPI_ATTRS
	tristate "Parallel SCSI (SPI) Transport Attributes"
	depends on SCSI
	help
	  If you wish to export transport-specific information about
	  each attached SCSI device to sysfs, say Y.  Otherwise, say N.

config SCSI_FC_ATTRS
	tristate "FiberChannel Transport Attributes"
	depends on SCSI && NET
	select BLK_DEV_BSGLIB
	select SCSI_NETLINK
	help
	  If you wish to export transport-specific information about
	  each attached FiberChannel device to sysfs, say Y.
	  Otherwise, say N.

config SCSI_ISCSI_ATTRS
	tristate "iSCSI Transport Attributes"
	depends on SCSI && NET
	select BLK_DEV_BSGLIB
	help
	  If you wish to export transport-specific information about
	  each attached iSCSI device to sysfs, say Y.
	  Otherwise, say N.

config SCSI_SAS_ATTRS
	tristate "SAS Transport Attributes"
	depends on SCSI
	select BLK_DEV_BSGLIB
	help
	  If you wish to export transport-specific information about
	  each attached SAS device to sysfs, say Y.

source "drivers/scsi/libsas/Kconfig"

config SCSI_SRP_ATTRS
	tristate "SRP Transport Attributes"
	depends on SCSI
	help
	  If you wish to export transport-specific information about
	  each attached SRP device to sysfs, say Y.

endmenu

menuconfig SCSI_LOWLEVEL
	bool "SCSI low-level drivers"
	depends on SCSI!=n
	default y

if SCSI_LOWLEVEL && SCSI

config ISCSI_TCP
	tristate "iSCSI Initiator over TCP/IP"
	depends on SCSI && INET
	select CRYPTO
	select CRYPTO_MD5
	select CRYPTO_CRC32C
	select SCSI_ISCSI_ATTRS
	help
	 The iSCSI Driver provides a host with the ability to access storage
	 through an IP network. The driver uses the iSCSI protocol to transport
	 SCSI requests and responses over a TCP/IP network between the host
	 (the "initiator") and "targets".  Architecturally, the iSCSI driver
	 combines with the host's TCP/IP stack, network drivers, and Network
	 Interface Card (NIC) to provide the same functions as a SCSI or a
	 Fibre Channel (FC) adapter driver with a Host Bus Adapter (HBA).

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

	 The userspace component needed to initialize the driver, documentation,
	 and sample configuration files can be found here:

	 http://open-iscsi.org

config ISCSI_BOOT_SYSFS
	tristate "iSCSI Boot Sysfs Interface"
	default	n
	help
	  This option enables support for exposing iSCSI boot information
	  via sysfs to userspace. If you wish to export this information,
	  say Y. Otherwise, say N.

source "drivers/scsi/cxgbi/Kconfig"
source "drivers/scsi/bnx2i/Kconfig"
source "drivers/scsi/bnx2fc/Kconfig"
source "drivers/scsi/be2iscsi/Kconfig"
source "drivers/scsi/cxlflash/Kconfig"

config SGIWD93_SCSI
	tristate "SGI WD93C93 SCSI Driver"
	depends on SGI_HAS_WD93 && SCSI
  	help
	  If you have a Western Digital WD93 SCSI controller on
	  an SGI MIPS system, say Y.  Otherwise, say N.

config BLK_DEV_3W_XXXX_RAID
	tristate "3ware 5/6/7/8xxx ATA-RAID support"
	depends on PCI && SCSI
	help
	  3ware is the only hardware ATA-Raid product in Linux to date.
	  This card is 2,4, or 8 channel master mode support only.
	  SCSI support required!!!

	  <http://www.3ware.com/>

	  Please read the comments at the top of
	  <file:drivers/scsi/3w-xxxx.c>.

config SCSI_HPSA
	tristate "HP Smart Array SCSI driver"
	depends on PCI && SCSI
	select CHECK_SIGNATURE
	select SCSI_SAS_ATTRS
	help
	  This driver supports HP Smart Array Controllers (circa 2009).
	  It is a SCSI alternative to the cciss driver, which is a block
	  driver.  Anyone wishing to use HP Smart Array controllers who
	  would prefer the devices be presented to linux as SCSI devices,
	  rather than as generic block devices should say Y here.

config SCSI_3W_9XXX
	tristate "3ware 9xxx SATA-RAID support"
	depends on PCI && SCSI
	help
	  This driver supports the 9000 series 3ware SATA-RAID cards.

	  <http://www.amcc.com>

	  Please read the comments at the top of
	  <file:drivers/scsi/3w-9xxx.c>.

config SCSI_3W_SAS
	tristate "3ware 97xx SAS/SATA-RAID support"
	depends on PCI && SCSI
	help
	  This driver supports the LSI 3ware 9750 6Gb/s SAS/SATA-RAID cards.

	  <http://www.lsi.com>

	  Please read the comments at the top of
	  <file:drivers/scsi/3w-sas.c>.

config SCSI_ACARD
	tristate "ACARD SCSI support"
	depends on PCI && SCSI
	help
	  This driver supports the ACARD SCSI host adapter.
	  Support Chip <ATP870 ATP876 ATP880 ATP885>
	  To compile this driver as a module, choose M here: the
	  module will be called atp870u.

config SCSI_AHA152X
	tristate "Adaptec AHA152X/2825 support"
	depends on ISA && SCSI
	select SCSI_SPI_ATTRS
	select CHECK_SIGNATURE
	---help---
	  This is a driver for the AHA-1510, AHA-1520, AHA-1522, and AHA-2825
	  SCSI host adapters. It also works for the AVA-1505, but the IRQ etc.
	  must be manually specified in this case.

	  It is explained in section 3.3 of the SCSI-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>. You might also want to
	  read the file <file:Documentation/scsi/aha152x.txt>.

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

config SCSI_AHA1542
	tristate "Adaptec AHA1542 support"
	depends on ISA && SCSI && ISA_DMA_API
	---help---
	  This is support for a SCSI host adapter.  It is explained in section
	  3.4 of the SCSI-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>.  Note that Trantor was
	  purchased by Adaptec, and some former Trantor products are being
	  sold under the Adaptec name.  If it doesn't work out of the box, you
	  may have to change some settings in <file:drivers/scsi/aha1542.h>.

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

config SCSI_AHA1740
	tristate "Adaptec AHA1740 support"
	depends on EISA && SCSI
	---help---
	  This is support for a SCSI host adapter.  It is explained in section
	  3.5 of the SCSI-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>.  If it doesn't work out
	  of the box, you may have to change some settings in
	  <file:drivers/scsi/aha1740.h>.

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

config SCSI_AACRAID
	tristate "Adaptec AACRAID support"
	depends on SCSI && PCI
	help
	  This driver supports a variety of Dell, HP, Adaptec, IBM and
	  ICP storage products. For a list of supported products, refer
	  to <file:Documentation/scsi/aacraid.txt>.

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


source "drivers/scsi/aic7xxx/Kconfig.aic7xxx"
source "drivers/scsi/aic7xxx/Kconfig.aic79xx"
source "drivers/scsi/aic94xx/Kconfig"
source "drivers/scsi/hisi_sas/Kconfig"
source "drivers/scsi/mvsas/Kconfig"

config SCSI_MVUMI
	tristate "Marvell UMI driver"
	depends on SCSI && PCI
	help
	  Module for Marvell Universal Message Interface(UMI) driver

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

config SCSI_DPT_I2O
	tristate "Adaptec I2O RAID support "
	depends on SCSI && PCI && VIRT_TO_BUS
	help
	  This driver supports all of Adaptec's I2O based RAID controllers as 
	  well as the DPT SmartRaid V cards.  This is an Adaptec maintained
	  driver by Deanna Bonds.  See <file:Documentation/scsi/dpti.txt>.

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

config SCSI_ADVANSYS
	tristate "AdvanSys SCSI support"
	depends on SCSI
	depends on ISA || EISA || PCI
	depends on ISA_DMA_API || !ISA
	help
	  This is a driver for all SCSI host adapters manufactured by
	  AdvanSys. It is documented in the kernel source in
	  <file:drivers/scsi/advansys.c>.

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

config SCSI_ARCMSR
	tristate "ARECA (ARC11xx/12xx/13xx/16xx) SATA/SAS RAID Host Adapter"
	depends on PCI && SCSI
	help
	  This driver supports all of ARECA's SATA/SAS RAID controller cards.
	  This is an ARECA-maintained driver by Erich Chen.
	  If you have any problems, please mail to: <erich@areca.com.tw>.
	  Areca supports Linux RAID config tools.
	  Please link <http://www.areca.com.tw>

	  To compile this driver as a module, choose M here: the
	  module will be called arcmsr (modprobe arcmsr).

source "drivers/scsi/esas2r/Kconfig"
source "drivers/scsi/megaraid/Kconfig.megaraid"
source "drivers/scsi/mpt3sas/Kconfig"
source "drivers/scsi/smartpqi/Kconfig"
source "drivers/scsi/ufs/Kconfig"

config SCSI_HPTIOP
	tristate "HighPoint RocketRAID 3xxx/4xxx Controller support"
	depends on SCSI && PCI
	help
	  This option enables support for HighPoint RocketRAID 3xxx/4xxx
	  controllers.

	  To compile this driver as a module, choose M here; the module
	  will be called hptiop. If unsure, say N.

config SCSI_BUSLOGIC
	tristate "BusLogic SCSI support"
	depends on (PCI || ISA) && SCSI && ISA_DMA_API && VIRT_TO_BUS
	---help---
	  This is support for BusLogic MultiMaster and FlashPoint SCSI Host
	  Adapters. Consult the SCSI-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>, and the files
	  <file:Documentation/scsi/BusLogic.txt> and
	  <file:Documentation/scsi/FlashPoint.txt> for more information.
	  Note that support for FlashPoint is only available for 32-bit
	  x86 configurations.

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

config SCSI_FLASHPOINT
	bool "FlashPoint support"
	depends on SCSI_BUSLOGIC && PCI
	help
	  This option allows you to add FlashPoint support to the
	  BusLogic SCSI driver. The FlashPoint SCCB Manager code is
	  substantial, so users of MultiMaster Host Adapters may not
	  wish to include it.

config SCSI_MYRB
	tristate "Mylex DAC960/DAC1100 PCI RAID Controller (Block Interface)"
	depends on PCI
	select RAID_ATTRS
	help
	  This driver adds support for the Mylex DAC960, AcceleRAID, and
	  eXtremeRAID PCI RAID controllers. This driver supports the
	  older, block based interface.
	  This driver is a reimplementation of the original DAC960
	  driver. If you have used the DAC960 driver you should enable
	  this module.

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

config SCSI_MYRS
	tristate "Mylex DAC960/DAC1100 PCI RAID Controller (SCSI Interface)"
	depends on PCI
	depends on !CPU_BIG_ENDIAN || COMPILE_TEST
	select RAID_ATTRS
	help
	  This driver adds support for the Mylex DAC960, AcceleRAID, and
	  eXtremeRAID PCI RAID controllers.  This driver supports the
	  newer, SCSI-based interface only.
	  This driver is a reimplementation of the original DAC960
	  driver. If you have used the DAC960 driver you should enable
	  this module.

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

config VMWARE_PVSCSI
	tristate "VMware PVSCSI driver support"
	depends on PCI && SCSI && X86
	help
	  This driver supports VMware's para virtualized SCSI HBA.
	  To compile this driver as a module, choose M here: the
	  module will be called vmw_pvscsi.

config XEN_SCSI_FRONTEND
	tristate "XEN SCSI frontend driver"
	depends on SCSI && XEN
	select XEN_XENBUS_FRONTEND
	help
	  The XEN SCSI frontend driver allows the kernel to access SCSI Devices
	  within another guest OS (usually Dom0).
	  Only needed if the kernel is running in a XEN guest and generic
	  SCSI access to a device is needed.

config HYPERV_STORAGE
	tristate "Microsoft Hyper-V virtual storage driver"
	depends on SCSI && HYPERV
	depends on m || SCSI_FC_ATTRS != m
	default HYPERV
	help
	  Select this option to enable the Hyper-V virtual storage driver.

config LIBFC
	tristate "LibFC module"
	depends on SCSI_FC_ATTRS
	select CRC32
	---help---
	  Fibre Channel library module

config LIBFCOE
	tristate "LibFCoE module"
	depends on LIBFC
	---help---
	  Library for Fibre Channel over Ethernet module

config FCOE
	tristate "FCoE module"
	depends on PCI
	depends on LIBFCOE
	---help---
	  Fibre Channel over Ethernet module

config FCOE_FNIC
	tristate "Cisco FNIC Driver"
	depends on PCI && X86
	depends on LIBFCOE
	help
	  This is support for the Cisco PCI-Express FCoE HBA.

	  To compile this driver as a module, choose M here and read
	  <file:Documentation/scsi/scsi.txt>.
	  The module will be called fnic.

config SCSI_SNIC
	tristate "Cisco SNIC Driver"
	depends on PCI && SCSI
	help
	  This is support for the Cisco PCI-Express SCSI HBA.

	  To compile this driver as a module, choose M here and read
	  <file:Documentation/scsi/scsi.txt>.
	  The module will be called snic.

config SCSI_SNIC_DEBUG_FS
	bool "Cisco SNIC Driver Debugfs Support"
	depends on SCSI_SNIC && DEBUG_FS
	help
	  This enables to list debugging information from SNIC Driver
	  available via debugfs file system

config SCSI_DMX3191D
	tristate "DMX3191D SCSI support"
	depends on PCI && SCSI
	select SCSI_SPI_ATTRS
	help
	  This is support for Domex DMX3191D SCSI Host Adapters.

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

config SCSI_GDTH
	tristate "Intel/ICP (former GDT SCSI Disk Array) RAID Controller support"
	depends on PCI && SCSI
	---help---
	  Formerly called GDT SCSI Disk Array Controller Support.

	  This is a driver for RAID/SCSI Disk Array Controllers (EISA/ISA/PCI) 
	  manufactured by Intel Corporation/ICP vortex GmbH. It is documented
	  in the kernel source in <file:drivers/scsi/gdth.c> and
	  <file:drivers/scsi/gdth.h>.

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

config SCSI_ISCI
	tristate "Intel(R) C600 Series Chipset SAS Controller"
	depends on PCI && SCSI
	depends on X86
	select SCSI_SAS_LIBSAS
	---help---
	  This driver supports the 6Gb/s SAS capabilities of the storage
	  control unit found in the Intel(R) C600 series chipset.

config SCSI_GENERIC_NCR5380
	tristate "Generic NCR5380/53c400 SCSI ISA card support"
	depends on ISA && SCSI && HAS_IOPORT_MAP
	select SCSI_SPI_ATTRS
	---help---
	  This is a driver for old ISA card SCSI controllers based on a
	  NCR 5380, 53C80, 53C400, 53C400A, or DTC 436 device.
	  Most boards such as the Trantor T130 fit this category, as do
	  various 8-bit and 16-bit ISA cards bundled with SCSI scanners.

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

config SCSI_IPS
	tristate "IBM ServeRAID support"
	depends on PCI && SCSI
	---help---
	  This is support for the IBM ServeRAID hardware RAID controllers.
	  See <http://www.developer.ibm.com/welcome/netfinity/serveraid.html>
	  and <http://www-947.ibm.com/support/entry/portal/docdisplay?brand=5000008&lndocid=SERV-RAID>
	  for more information.  If this driver does not work correctly
	  without modification please contact the author by email at
	  <ipslinux@adaptec.com>.

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

config SCSI_IBMVSCSI
	tristate "IBM Virtual SCSI support"
	depends on PPC_PSERIES
	select SCSI_SRP_ATTRS
	help
	  This is the IBM POWER Virtual SCSI Client

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

config SCSI_IBMVSCSIS
	tristate "IBM Virtual SCSI Server support"
	depends on PPC_PSERIES && TARGET_CORE && SCSI && PCI
	help
	  This is the IBM POWER Virtual SCSI Target Server
	  This driver uses the SRP protocol for communication between servers
	  guest and/or the host that run on the same server.
	  More information on VSCSI protocol can be found at www.power.org

	  The userspace configuration needed to initialize the driver can be
	  be found here:

	  https://github.com/powervm/ibmvscsis/wiki/Configuration

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

config SCSI_IBMVFC
	tristate "IBM Virtual FC support"
	depends on PPC_PSERIES && SCSI
	depends on SCSI_FC_ATTRS
	help
	  This is the IBM POWER Virtual FC Client

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

config SCSI_IBMVFC_TRACE
	bool "enable driver internal trace"
	depends on SCSI_IBMVFC
	default y
	help
	  If you say Y here, the driver will trace all commands issued
	  to the adapter. Performance impact is minimal. Trace can be
	  dumped using /sys/class/scsi_host/hostXX/trace.

config SCSI_INITIO
	tristate "Initio 9100U(W) support"
	depends on PCI && SCSI
	help
	  This is support for the Initio 91XXU(W) SCSI host adapter.  Please
	  read the SCSI-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>.

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

config SCSI_INIA100
	tristate "Initio INI-A100U2W support"
	depends on PCI && SCSI
	help
	  This is support for the Initio INI-A100U2W SCSI host adapter.
	  Please read the SCSI-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>.

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

config SCSI_PPA
	tristate "IOMEGA parallel port (ppa - older drives)"
	depends on SCSI && PARPORT_PC
	---help---
	  This driver supports older versions of IOMEGA's parallel port ZIP
	  drive (a 100 MB removable media device).

	  Note that you can say N here if you have the SCSI version of the ZIP
	  drive: it will be supported automatically if you said Y to the
	  generic "SCSI disk support", above.

	  If you have the ZIP Plus drive or a more recent parallel port ZIP
	  drive (if the supplied cable with the drive is labeled "AutoDetect")
	  then you should say N here and Y to "IOMEGA parallel port (imm -
	  newer drives)", below.

	  For more information about this driver and how to use it you should
	  read the file <file:Documentation/scsi/ppa.txt>.  You should also read
	  the SCSI-HOWTO, which is available from
	  <http://www.tldp.org/docs.html#howto>.  If you use this driver,
	  you will still be able to use the parallel port for other tasks,
	  such as a printer; it is safe to compile both drivers into the
	  kernel.

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

config SCSI_IMM
	tristate "IOMEGA parallel port (imm - newer drives)"
	depends on SCSI && PARPORT_PC
	---help---
	  This driver supports newer versions of IOMEGA's parallel port ZIP
	  drive (a 100 MB removable media device).

	  Note that you can say N here if you have the SCSI version of the ZIP
	  drive: it will be supported automatically if you said Y to the
	  generic "SCSI disk support", above.

	  If you have the ZIP Plus drive or a more recent parallel port ZIP
	  drive (if the supplied cable with the drive is labeled "AutoDetect")
	  then you should say Y here; if you have an older ZIP drive, say N
	  here and Y to "IOMEGA Parallel Port (ppa - older drives)", above.

	  For more information about this driver and how to use it you should
	  read the file <file:Documentation/scsi/ppa.txt>.  You should also read
	  the SCSI-HOWTO, which is available from
	  <http://www.tldp.org/docs.html#howto>.  If you use this driver,
	  you will still be able to use the parallel port for other tasks,
	  such as a printer; it is safe to compile both drivers into the
	  kernel.

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

config SCSI_IZIP_EPP16
	bool "ppa/imm option - Use slow (but safe) EPP-16"
	depends on SCSI_PPA || SCSI_IMM
	---help---
	  EPP (Enhanced Parallel Port) is a standard for parallel ports which
	  allows them to act as expansion buses that can handle up to 64
	  peripheral devices.

	  Some parallel port chipsets are slower than their motherboard, and
	  so we have to control the state of the chipset's FIFO queue every
	  now and then to avoid data loss. This will be done if you say Y
	  here.

	  Generally, saying Y is the safe option and slows things down a bit.

config SCSI_IZIP_SLOW_CTR
	bool "ppa/imm option - Assume slow parport control register"
	depends on SCSI_PPA || SCSI_IMM
	help
	  Some parallel ports are known to have excessive delays between
	  changing the parallel port control register and good data being
	  available on the parallel port data/status register. This option
	  forces a small delay (1.0 usec to be exact) after changing the
	  control register to let things settle out. Enabling this option may
	  result in a big drop in performance but some very old parallel ports
	  (found in 386 vintage machines) will not work properly.

	  Generally, saying N is fine.

config SCSI_LASI700
	tristate "HP Lasi SCSI support for 53c700/710"
	depends on GSC && SCSI
	select SCSI_SPI_ATTRS
	help
	  This is a driver for the SCSI controller in the Lasi chip found in
	  many PA-RISC workstations & servers.  If you do not know whether you
	  have a Lasi chip, it is safe to say "Y" here.

config SCSI_SNI_53C710
	tristate "SNI RM SCSI support for 53c710"
	depends on SNI_RM && SCSI
	select SCSI_SPI_ATTRS
	select 53C700_LE_ON_BE
	help
	  This is a driver for the onboard SCSI controller found in older
	  SNI RM workstations & servers.

config 53C700_LE_ON_BE
	bool
	depends on SCSI_LASI700
	default y

config SCSI_STEX
	tristate "Promise SuperTrak EX Series support"
	depends on PCI && SCSI
	---help---
	  This driver supports Promise SuperTrak EX series storage controllers.

	  Promise provides Linux RAID configuration utility for these
	  controllers. Please visit <http://www.promise.com> to download.

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

config 53C700_BE_BUS
	bool
	depends on SCSI_A4000T || SCSI_ZORRO7XX || MVME16x_SCSI || BVME6000_SCSI
	default y

config SCSI_SYM53C8XX_2
	tristate "SYM53C8XX Version 2 SCSI support"
	depends on PCI && SCSI
	select SCSI_SPI_ATTRS
	---help---
	  This driver supports the whole NCR53C8XX/SYM53C8XX family of
	  PCI-SCSI controllers.  It also supports the subset of LSI53C10XX
	  Ultra-160 controllers that are based on the SYM53C8XX SCRIPTS
	  language.  It does not support LSI53C10XX Ultra-320 PCI-X SCSI
	  controllers; you need to use the Fusion MPT driver for that.

	  Please read <file:Documentation/scsi/sym53c8xx_2.txt> for more
	  information.

config SCSI_SYM53C8XX_DMA_ADDRESSING_MODE
	int "DMA addressing mode"
	depends on SCSI_SYM53C8XX_2
	default "1"
	---help---
	  This option only applies to PCI-SCSI chips that are PCI DAC
	  capable (875A, 895A, 896, 1010-33, 1010-66, 1000).

	  When set to 0, the driver will program the chip to only perform
	  32-bit DMA.  When set to 1, the chip will be able to perform DMA
	  to addresses up to 1TB.  When set to 2, the driver supports the
	  full 64-bit DMA address range, but can only address 16 segments
	  of 4 GB each.  This limits the total addressable range to 64 GB.

	  Most machines with less than 4GB of memory should use a setting
	  of 0 for best performance.  If your machine has 4GB of memory
	  or more, you should set this option to 1 (the default).

	  The still experimental value 2 (64 bit DMA addressing with 16
	  x 4GB segments limitation) can be used on systems that require
	  PCI address bits past bit 39 to be set for the addressing of
	  memory using PCI DAC cycles.

config SCSI_SYM53C8XX_DEFAULT_TAGS
	int "Default tagged command queue depth"
	depends on SCSI_SYM53C8XX_2
	default "16"
	help
	  This is the default value of the command queue depth the
	  driver will announce to the generic SCSI layer for devices
	  that support tagged command queueing. This value can be changed
	  from the boot command line.  This is a soft limit that cannot
	  exceed CONFIG_SCSI_SYM53C8XX_MAX_TAGS.

config SCSI_SYM53C8XX_MAX_TAGS
	int "Maximum number of queued commands"
	depends on SCSI_SYM53C8XX_2
	default "64"
	help
	  This option allows you to specify the maximum number of commands
	  that can be queued to any device, when tagged command queuing is
	  possible. The driver supports up to 256 queued commands per device.
	  This value is used as a compiled-in hard limit.

config SCSI_SYM53C8XX_MMIO
	bool "Use memory mapped IO"
	depends on SCSI_SYM53C8XX_2
	default y
	help
	  Memory mapped IO is faster than Port IO.  Most people should
	  answer Y here, but some machines may have problems.  If you have
	  to answer N here, please report the problem to the maintainer.

config SCSI_IPR
	tristate "IBM Power Linux RAID adapter support"
	depends on PCI && SCSI && ATA
	select FW_LOADER
	select IRQ_POLL
	select SGL_ALLOC
	---help---
	  This driver supports the IBM Power Linux family RAID adapters.
	  This includes IBM pSeries 5712, 5703, 5709, and 570A, as well
	  as IBM iSeries 5702, 5703, 5709, and 570A.

config SCSI_IPR_TRACE
	bool "enable driver internal trace"
	depends on SCSI_IPR
	default y
	help
	  If you say Y here, the driver will trace all commands issued
	  to the adapter. Performance impact is minimal. Trace can be
	  dumped using /sys/bus/class/scsi_host/hostXX/trace.

config SCSI_IPR_DUMP
	bool "enable adapter dump support"
	depends on SCSI_IPR
	default y
	help
	  If you say Y here, the driver will support adapter crash dump.
	  If you enable this support, the iprdump daemon can be used
	  to capture adapter failure analysis information.

config SCSI_ZALON
	tristate "Zalon SCSI support"
	depends on GSC && SCSI
	select SCSI_SPI_ATTRS
	help
	  The Zalon is a GSC/HSC bus interface chip that sits between the
	  PA-RISC processor and the NCR 53c720 SCSI controller on C100,
	  C110, J200, J210 and some D, K & R-class machines.  It's also
	  used on the add-in Bluefish, Barracuda & Shrike SCSI cards.
	  Say Y here if you have one of these machines or cards.

config SCSI_NCR53C8XX_DEFAULT_TAGS
	int "default tagged command queue depth"
	depends on SCSI_ZALON
	default "8"
	---help---
	  "Tagged command queuing" is a feature of SCSI-2 which improves
	  performance: the host adapter can send several SCSI commands to a
	  device's queue even if previous commands haven't finished yet.
	  Because the device is intelligent, it can optimize its operations
	  (like head positioning) based on its own request queue. Some SCSI
	  devices don't implement this properly; if you want to disable this
	  feature, enter 0 or 1 here (it doesn't matter which).

	  The default value is 8 and should be supported by most hard disks.
	  This value can be overridden from the boot command line using the
	  'tags' option as follows (example):
	  'ncr53c8xx=tags:4/t2t3q16/t0u2q10' will set default queue depth to
	  4, set queue depth to 16 for target 2 and target 3 on controller 0
	  and set queue depth to 10 for target 0 / lun 2 on controller 1.

	  The normal answer therefore is to go with the default 8 and to use
	  a boot command line option for devices that need to use a different
	  command queue depth.

	  There is no safe option other than using good SCSI devices.

config SCSI_NCR53C8XX_MAX_TAGS
	int "maximum number of queued commands"
	depends on SCSI_ZALON
	default "32"
	---help---
	  This option allows you to specify the maximum number of commands
	  that can be queued to any device, when tagged command queuing is
	  possible. The default value is 32. Minimum is 2, maximum is 64.
	  Modern hard disks are able to support 64 tags and even more, but
	  do not seem to be faster when more than 32 tags are being used.

	  So, the normal answer here is to go with the default value 32 unless
	  you are using very large hard disks with large cache (>= 1 MB) that
	  are able to take advantage of more than 32 tagged commands.

	  There is no safe option and the default answer is recommended.

config SCSI_NCR53C8XX_SYNC
	int "synchronous transfers frequency in MHz"
	depends on SCSI_ZALON
	default "20"
	---help---
	  The SCSI Parallel Interface-2 Standard defines 5 classes of transfer
	  rates: FAST-5, FAST-10, FAST-20, FAST-40 and FAST-80.  The numbers
	  are respectively the maximum data transfer rates in mega-transfers
	  per second for each class.  For example, a FAST-20 Wide 16 device is
	  able to transfer data at 20 million 16 bit packets per second for a
	  total rate of 40 MB/s.

	  You may specify 0 if you want to only use asynchronous data
	  transfers. This is the safest and slowest option. Otherwise, specify
	  a value between 5 and 80, depending on the capability of your SCSI
	  controller.  The higher the number, the faster the data transfer.
	  Note that 80 should normally be ok since the driver decreases the
	  value automatically according to the controller's capabilities.

	  Your answer to this question is ignored for controllers with NVRAM,
	  since the driver will get this information from the user set-up.  It
	  also can be overridden using a boot setup option, as follows
	  (example): 'ncr53c8xx=sync:12' will allow the driver to negotiate
	  for FAST-20 synchronous data transfer (20 mega-transfers per
	  second).

	  The normal answer therefore is not to go with the default but to
	  select the maximum value 80 allowing the driver to use the maximum
	  value supported by each controller. If this causes problems with
	  your SCSI devices, you should come back and decrease the value.

	  There is no safe option other than using good cabling, right
	  terminations and SCSI conformant devices.

config SCSI_NCR53C8XX_NO_DISCONNECT
	bool "not allow targets to disconnect"
	depends on SCSI_ZALON && SCSI_NCR53C8XX_DEFAULT_TAGS=0
	help
	  This option is only provided for safety if you suspect some SCSI
	  device of yours to not support properly the target-disconnect
	  feature. In that case, you would say Y here. In general however, to
	  not allow targets to disconnect is not reasonable if there is more
	  than 1 device on a SCSI bus. The normal answer therefore is N.

config SCSI_QLOGIC_FAS
	tristate "Qlogic FAS SCSI support"
	depends on ISA && SCSI
	---help---
	  This is a driver for the ISA, VLB, and PCMCIA versions of the Qlogic
	  FastSCSI! cards as well as any other card based on the FASXX chip
	  (including the Control Concepts SCSI/IDE/SIO/PIO/FDC cards).

	  This driver does NOT support the PCI versions of these cards. The
	  PCI versions are supported by the Qlogic ISP driver ("Qlogic ISP
	  SCSI support"), below.

	  Information about this driver is contained in
	  <file:Documentation/scsi/qlogicfas.txt>.  You should also read the
	  SCSI-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>.

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

config SCSI_QLOGIC_1280
	tristate "Qlogic QLA 1240/1x80/1x160 SCSI support"
	depends on PCI && SCSI
	help
	  Say Y if you have a QLogic ISP1240/1x80/1x160 SCSI host adapter.

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

config SCSI_QLOGICPTI
	tristate "PTI Qlogic, ISP Driver"
	depends on SBUS && SCSI
	help
	  This driver supports SBUS SCSI controllers from PTI or QLogic. These
	  controllers are known under Solaris as qpti and in the openprom as
	  PTI,ptisp or QLGC,isp. Note that PCI QLogic SCSI controllers are
	  driven by a different driver.

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

source "drivers/scsi/qla2xxx/Kconfig"
source "drivers/scsi/qla4xxx/Kconfig"
source "drivers/scsi/qedi/Kconfig"
source "drivers/scsi/qedf/Kconfig"

config SCSI_LPFC
	tristate "Emulex LightPulse Fibre Channel Support"
	depends on PCI && SCSI
	depends on SCSI_FC_ATTRS
	depends on NVME_TARGET_FC || NVME_TARGET_FC=n
	depends on NVME_FC || NVME_FC=n
	select CRC_T10DIF
	---help---
          This lpfc driver supports the Emulex LightPulse
          Family of Fibre Channel PCI host adapters.

config SCSI_LPFC_DEBUG_FS
	bool "Emulex LightPulse Fibre Channel debugfs Support"
	depends on SCSI_LPFC && DEBUG_FS
	---help---
	  This makes debugging information from the lpfc driver
	  available via the debugfs filesystem.

config SCSI_SIM710
	tristate "Simple 53c710 SCSI support (Compaq, NCR machines)"
	depends on EISA && SCSI
	select SCSI_SPI_ATTRS
	---help---
	  This driver is for NCR53c710 based SCSI host adapters.

	  It currently supports Compaq EISA cards.

config SCSI_DC395x
	tristate "Tekram DC395(U/UW/F) and DC315(U) SCSI support"
	depends on PCI && SCSI
	---help---
	  This driver supports PCI SCSI host adapters based on the ASIC
	  TRM-S1040 chip, e.g Tekram DC395(U/UW/F) and DC315(U) variants.

	  This driver works, but is still in experimental status. So better
	  have a bootable disk and a backup in case of emergency.

	  Documentation can be found in <file:Documentation/scsi/dc395x.txt>.

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

config SCSI_AM53C974
	tristate "Tekram DC390(T) and Am53/79C974 SCSI support (new driver)"
	depends on PCI && SCSI
	select SCSI_SPI_ATTRS
	---help---
	  This driver supports PCI SCSI host adapters based on the Am53C974A
	  chip, e.g. Tekram DC390(T), DawiControl 2974 and some onboard
	  PCscsi/PCnet (Am53/79C974) solutions.
	  This is a new implementation base on the generic esp_scsi driver.

	  Note that this driver does NOT support Tekram DC390W/U/F, which are
	  based on NCR/Symbios chips. Use "NCR53C8XX SCSI support" for those.

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

config SCSI_NSP32
	tristate "Workbit NinjaSCSI-32Bi/UDE support"
	depends on PCI && SCSI && !64BIT
	help
	  This is support for the Workbit NinjaSCSI-32Bi/UDE PCI/Cardbus
	  SCSI host adapter. Please read the SCSI-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>.

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

config SCSI_WD719X
	tristate "Western Digital WD7193/7197/7296 support"
	depends on PCI && SCSI
	select EEPROM_93CX6
	---help---
	  This is a driver for Western Digital WD7193, WD7197 and WD7296 PCI
	  SCSI controllers (based on WD33C296A chip).

config SCSI_DEBUG
	tristate "SCSI debugging host and device simulator"
	depends on SCSI
	select CRC_T10DIF
	help
	  This pseudo driver simulates one or more hosts (SCSI initiators),
	  each with one or more targets, each with one or more logical units.
	  Defaults to one of each, creating a small RAM disk device. Many
	  parameters found in the /sys/bus/pseudo/drivers/scsi_debug
	  directory can be tweaked at run time.
	  See <http://sg.danny.cz/sg/sdebug26.html> for more information.
	  Mainly used for testing and best as a module. If unsure, say N.

config SCSI_MESH
	tristate "MESH (Power Mac internal SCSI) support"
	depends on PPC32 && PPC_PMAC && SCSI
	help
	  Many Power Macintoshes and clones have a MESH (Macintosh Enhanced
	  SCSI Hardware) SCSI bus adaptor (the 7200 doesn't, but all of the
	  other Power Macintoshes do). Say Y to include support for this SCSI
	  adaptor.

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

config SCSI_MESH_SYNC_RATE
	int "maximum synchronous transfer rate (MB/s) (0 = async)"
	depends on SCSI_MESH
	default "5"
	help
	  On Power Macintoshes (and clones) where the MESH SCSI bus adaptor
	  drives a bus which is entirely internal to the machine (such as the
	  7500, 7600, 8500, etc.), the MESH is capable of synchronous
	  operation at up to 10 MB/s. On machines where the SCSI bus
	  controlled by the MESH can have external devices connected, it is
	  usually rated at 5 MB/s. 5 is a safe value here unless you know the
	  MESH SCSI bus is internal only; in that case you can say 10. Say 0
	  to disable synchronous operation.

config SCSI_MESH_RESET_DELAY_MS
	int "initial bus reset delay (ms) (0 = no reset)"
	depends on SCSI_MESH
	default "4000"

config SCSI_MAC53C94
	tristate "53C94 (Power Mac external SCSI) support"
	depends on PPC32 && PPC_PMAC && SCSI
	help
	  On Power Macintoshes (and clones) with two SCSI buses, the external
	  SCSI bus is usually controlled by a 53C94 SCSI bus adaptor. Older
	  machines which only have one SCSI bus, such as the 7200, also use
	  the 53C94. Say Y to include support for the 53C94.

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

source "drivers/scsi/arm/Kconfig"

config JAZZ_ESP
	bool "MIPS JAZZ FAS216 SCSI support"
	depends on MACH_JAZZ && SCSI
	select SCSI_SPI_ATTRS
	help
	  This is the driver for the onboard SCSI host adapter of MIPS Magnum
	  4000, Acer PICA, Olivetti M700-10 and a few other identical OEM
	  systems.

config A3000_SCSI
	tristate "A3000 WD33C93A support"
	depends on AMIGA && SCSI
	help
	  If you have an Amiga 3000 and have SCSI devices connected to the
	  built-in SCSI controller, say Y. Otherwise, say N.

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

config A2091_SCSI
	tristate "A2091/A590 WD33C93A support"
	depends on ZORRO && SCSI
	help
	  If you have a Commodore A2091 SCSI controller, say Y. Otherwise,
	  say N.

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

config GVP11_SCSI
	tristate "GVP Series II WD33C93A support"
	depends on ZORRO && SCSI
	---help---
	  If you have a Great Valley Products Series II SCSI controller,
	  answer Y. Also say Y if you have a later model of GVP SCSI
	  controller (such as the GVP A4008 or a Combo board). Otherwise,
	  answer N. This driver does NOT work for the T-Rex series of
	  accelerators from TekMagic and GVP-M.

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

config SCSI_A4000T
	tristate "A4000T NCR53c710 SCSI support"
	depends on AMIGA && SCSI
	select SCSI_SPI_ATTRS
	help
	  If you have an Amiga 4000T and have SCSI devices connected to the
	  built-in SCSI controller, say Y. Otherwise, say N.

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

config SCSI_ZORRO7XX
	tristate "Zorro NCR53c710 SCSI support"
	depends on ZORRO && SCSI
	select SCSI_SPI_ATTRS
	help
	  Support for various NCR53c710-based SCSI controllers on Zorro
	  expansion boards for the Amiga.
	  This includes:
	    - the Amiga 4091 Zorro III SCSI-2 controller,
	    - the MacroSystem Development's WarpEngine Amiga SCSI-2 controller
	      (info at
	      <http://www.lysator.liu.se/amiga/ar/guide/ar310.guide?FEATURE5>),
	    - the SCSI controller on the Phase5 Blizzard PowerUP 603e+
	      accelerator card for the Amiga 1200,
	    - the SCSI controller on the GVP Turbo 040/060 accelerator.

config SCSI_ZORRO_ESP
	tristate "Zorro ESP SCSI support"
	depends on ZORRO && SCSI
	select SCSI_SPI_ATTRS
	select SCSI_ESP_PIO
	help
	  Support for various NCR53C9x (ESP) based SCSI controllers on Zorro
	  expansion boards for the Amiga.
	  This includes:
	    - the Phase5 Blizzard 1230 II and IV SCSI controllers,
	    - the Phase5 Blizzard 2060 SCSI controller,
	    - the Phase5 Blizzard Cyberstorm and Cyberstorm II SCSI
	      controllers,
	    - the Fastlane Zorro III SCSI controller.

config ATARI_SCSI
	tristate "Atari native SCSI support"
	depends on ATARI && SCSI
	select SCSI_SPI_ATTRS
	---help---
	  If you have an Atari with built-in NCR5380 SCSI controller (TT,
	  Falcon, ...) say Y to get it supported. Of course also, if you have
	  a compatible SCSI controller (e.g. for Medusa).

	  To compile this driver as a module, choose M here: the module will
	  be called atari_scsi. If you also enable NVRAM support, the SCSI
	  host's ID is taken from the setting in TT RTC NVRAM.

	  This driver supports both styles of NCR integration into the
	  system: the TT style (separate DMA), and the Falcon style (via
	  ST-DMA, replacing ACSI).  It does NOT support other schemes, like
	  in the Hades (without DMA).

config MAC_SCSI
	tristate "Macintosh NCR5380 SCSI"
	depends on MAC && SCSI
	select SCSI_SPI_ATTRS
	help
	  This is the NCR 5380 SCSI controller included on most of the 68030
	  based Macintoshes.  If you have one of these say Y and read the
	  SCSI-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>.

config SCSI_MAC_ESP
	tristate "Macintosh NCR53c9[46] SCSI"
	depends on MAC && SCSI
	select SCSI_SPI_ATTRS
	select SCSI_ESP_PIO
	help
	  This is the NCR 53c9x SCSI controller found on most of the 68040
	  based Macintoshes.

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

config MVME147_SCSI
	bool "WD33C93 SCSI driver for MVME147"
	depends on MVME147 && SCSI=y
	select SCSI_SPI_ATTRS
	help
	  Support for the on-board SCSI controller on the Motorola MVME147
	  single-board computer.

config MVME16x_SCSI
	tristate "NCR53C710 SCSI driver for MVME16x"
	depends on MVME16x && SCSI
	select SCSI_SPI_ATTRS
	help
	  The Motorola MVME162, 166, 167, 172 and 177 boards use the NCR53C710
	  SCSI controller chip.  Almost everyone using one of these boards
	  will want to say Y to this question.

config BVME6000_SCSI
	tristate "NCR53C710 SCSI driver for BVME6000"
	depends on BVME6000 && SCSI
	select SCSI_SPI_ATTRS
	help
	  The BVME4000 and BVME6000 boards from BVM Ltd use the NCR53C710
	  SCSI controller chip.  Almost everyone using one of these boards
	  will want to say Y to this question.

config SUN3_SCSI
	tristate "Sun3 NCR5380 SCSI"
	depends on SUN3 && SCSI
	select SCSI_SPI_ATTRS
	help
	  This option will enable support for the OBIO (onboard io) NCR5380
	  SCSI controller found in the Sun 3/50 and 3/60, as well as for
	  "Sun3" type VME scsi controllers also based on the NCR5380.
	  General Linux information on the Sun 3 series (now discontinued)
	  is at <http://www.angelfire.com/ca2/tech68k/sun3.html>.

config SUN3X_ESP
	bool "Sun3x ESP SCSI"
	depends on SUN3X && SCSI=y
	select SCSI_SPI_ATTRS
	help
	  The ESP was an on-board SCSI controller used on Sun 3/80
	  machines.  Say Y here to compile in support for it.

config SCSI_SUNESP
	tristate "Sparc ESP Scsi Driver"
	depends on SBUS && SCSI
	select SCSI_SPI_ATTRS
	help
	  This is the driver for the Sun ESP SCSI host adapter. The ESP
	  chipset is present in most SPARC SBUS-based computers and
	  supports the Emulex family of ESP SCSI chips (esp100, esp100A,
	  esp236, fas101, fas236) as well as the Qlogic fas366 SCSI chip.

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

config ZFCP
	tristate "FCP host bus adapter driver for IBM eServer zSeries"
	depends on S390 && QDIO && SCSI
	depends on SCSI_FC_ATTRS
	help
          If you want to access SCSI devices attached to your IBM eServer
          zSeries by means of Fibre Channel interfaces say Y.
          For details please refer to the documentation provided by IBM at
          <http://oss.software.ibm.com/developerworks/opensource/linux390>

          This driver is also available as a module. This module will be
          called zfcp. If you want to compile it as a module, say M here
          and read <file:Documentation/kbuild/modules.txt>.

config SCSI_PMCRAID
	tristate "PMC SIERRA Linux MaxRAID adapter support"
	depends on PCI && SCSI && NET
	select SGL_ALLOC
	---help---
	  This driver supports the PMC SIERRA MaxRAID adapters.

config SCSI_PM8001
	tristate "PMC-Sierra SPC 8001 SAS/SATA Based Host Adapter driver"
	depends on PCI && SCSI
	select SCSI_SAS_LIBSAS
	help
	  This driver supports PMC-Sierra PCIE SAS/SATA 8x6G SPC 8001 chip
	  based host adapters.

config SCSI_BFA_FC
	tristate "Brocade BFA Fibre Channel Support"
	depends on PCI && SCSI
	depends on SCSI_FC_ATTRS
	help
	  This bfa driver supports all Brocade PCIe FC/FCOE host adapters.

	  To compile this driver as a module, choose M here. The module will
	  be called bfa.

config SCSI_VIRTIO
	tristate "virtio-scsi support"
	depends on VIRTIO
	help
          This is the virtual HBA driver for virtio.  If the kernel will
          be used in a virtual machine, say Y or M.

source "drivers/scsi/csiostor/Kconfig"

endif # SCSI_LOWLEVEL

source "drivers/scsi/pcmcia/Kconfig"

source "drivers/scsi/device_handler/Kconfig"

endmenu
