# 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.rst>.
	  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
	select BLK_DEV_INTEGRITY_T10 if BLK_DEV_INTEGRITY
	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.rst>.
	  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.rst> 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.rst>. The module will be called st.

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.rst>.
	  The module will be called sr_mod.

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://cdrtools.sourceforge.net/>)
	  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.rst> for more information.

	  To compile this driver as a module, choose M here and read
	  <file:Documentation/scsi/scsi.rst>. 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.rst> 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.rst> and
	  <file:Documentation/scsi/scsi.rst>. 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.rst>.

	  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.rst>.

	  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.rst>.

	  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.rst> and
	  <file:Documentation/scsi/FlashPoint.rst> 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.rst>.
	  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.rst>.
	  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_FDOMAIN
	tristate
	depends on SCSI

config SCSI_FDOMAIN_PCI
	tristate "Future Domain TMC-3260/AHA-2920A PCI SCSI support"
	depends on PCI && SCSI
	select SCSI_FDOMAIN
	help
	  This is support for Future Domain's PCI SCSI host adapters (TMC-3260)
	  and other adapters with PCI bus based on the Future Domain chipsets
	  (Adaptec AHA-2920A).

	  NOTE: Newer Adaptec AHA-2920C boards use the Adaptec AIC-7850 chip
	  and should use the aic7xxx driver ("Adaptec AIC7xxx chipset SCSI
	  controller support"). This Future Domain driver works with the older
	  Adaptec AHA-2920A boards with a Future Domain chip on them.

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

config SCSI_FDOMAIN_ISA
	tristate "Future Domain 16xx ISA SCSI support"
	depends on ISA && SCSI
	select CHECK_SIGNATURE
	select SCSI_FDOMAIN
	help
	  This is support for Future Domain's 16-bit SCSI host adapters
	  (TMC-1660/1680, TMC-1650/1670, TMC-1610M/MER/MEX) and other adapters
	  with ISA bus based on the Future Domain chipsets (Quantum ISA-200S,
	  ISA-250MG; and at least one IBM board).

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

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.rst>.  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.rst>.  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 || SCSI_SNI_53C710
	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.rst> 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 SATA_HOST
	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.rst>.  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 CPU_FREQ
	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.rst>.

	  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 mainframes"
	depends on S390 && QDIO && SCSI
	depends on SCSI_FC_ATTRS
	help
	  If you want to access SCSI devices attached to your IBM mainframe by
	  means of Fibre Channel Protocol host bus adapters say Y.

	  Supported HBAs include different models of the FICON Express and FCP
	  Express I/O cards.

	  For a more complete list, and for more details about setup and
	  operation refer to the IBM publication "Device Drivers, Features, and
	  Commands", SC33-8411.

          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.rst>.

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"

source "drivers/scsi/pcmcia/Kconfig"

endif # SCSI_LOWLEVEL

source "drivers/scsi/device_handler/Kconfig"

endmenu
