# SPDX-License-Identifier: GPL-2.0-only
#
# PCMCIA SCSI adapter configuration
#

menuconfig SCSI_LOWLEVEL_PCMCIA
	bool "PCMCIA SCSI adapter support"
	depends on SCSI!=n && PCMCIA!=n

# drivers have problems when build in, so require modules
if SCSI_LOWLEVEL_PCMCIA && SCSI && PCMCIA && m

config PCMCIA_AHA152X
	tristate "Adaptec AHA152X PCMCIA support"
	select SCSI_SPI_ATTRS
	help
	  Say Y here if you intend to attach this type of PCMCIA SCSI host
	  adapter to your computer.

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

config PCMCIA_FDOMAIN
	tristate "Future Domain PCMCIA support"
	select SCSI_FDOMAIN
	help
	  Say Y here if you intend to attach this type of PCMCIA SCSI host
	  adapter to your computer.

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

config PCMCIA_NINJA_SCSI
	tristate "NinjaSCSI-3 / NinjaSCSI-32Bi (16bit) PCMCIA support"
	depends on !64BIT
	help
	  If you intend to attach this type of PCMCIA SCSI host adapter to
	  your computer, say Y here and read
	  <file:Documentation/scsi/NinjaSCSI.txt>.

	  Supported cards:

	  NinjaSCSI-3: (version string: "WBT","NinjaSCSI-3","R1.0")
	    IO-DATA     PCSC-FP
	    ALPHA DATA  AD-PCS201
	    CyQ've      SFC-201  
	    LOGITECH    LPM-SCSI2E
	    Pioneer PCR-PR24's card
	    I-O DATA CDPS-PX24's card (PCSC-F)
	    Panasonic KXL-RW10AN CD-RW's card
	    etc.

	  NinjaSCSI-32Bit (in 16bit mode):
	    [Workbit (version string: "WORKBIT","UltraNinja-16","1")]
	    Jazz SCP050
	    [I-O DATA (OEM) (version string: "IO DATA","CBSC16       ","1")]
	    I-O DATA CBSC-II
	    [Kyusyu Matsushita Kotobuki (OEM)
               (version string: "KME    ","SCSI-CARD-001","1")]
	    KME KXL-820AN's card
	    HP M820e CDRW's card
	    etc.

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

config PCMCIA_QLOGIC
	tristate "Qlogic PCMCIA support"
	help
	  Say Y here if you intend to attach this type of PCMCIA SCSI host
	  adapter to your computer.

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

config PCMCIA_SYM53C500
	tristate "Symbios 53c500 PCMCIA support"
	help
	  Say Y here if you have a New Media Bus Toaster or other PCMCIA
	  SCSI adapter based on the Symbios 53c500 controller.

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

endif # SCSI_LOWLEVEL_PCMCIA
