# SPDX-License-Identifier: GPL-2.0-only
#
# SCSI driver configuration for Acorn
#
config SCSI_ACORNSCSI_3
	tristate "Acorn SCSI card (aka30) support"
	depends on ARCH_ACORN && SCSI
	select SCSI_SPI_ATTRS
	help
	  This enables support for the Acorn SCSI card (aka30). If you have an
	  Acorn system with one of these, say Y. If unsure, say N.

config SCSI_ACORNSCSI_SYNC
	bool "Support SCSI 2 Synchronous Transfers"
	depends on SCSI_ACORNSCSI_3
	help
	  Say Y here to enable synchronous transfer negotiation with all
	  targets on the Acorn SCSI card.

	  In general, this improves performance; however some SCSI devices
	  don't implement it properly, so the safe answer is N.

config SCSI_ARXESCSI
	tristate "ARXE SCSI support"
	depends on ARCH_ACORN && SCSI
	help
	  Around 1991, Arxe Systems Limited released a high density floppy
	  disc interface for the Acorn Archimedes range, to allow the use of
	  HD discs from the then new A5000 on earlier models. This interface
	  was either sold on its own or with an integral SCSI controller.
	  Technical details on this NCR53c94-based device are available at
	  <http://www.cryton.demon.co.uk/acornbits/scsi_arxe.html>
	  Say Y here to compile in support for the SCSI controller.

config SCSI_CUMANA_2
	tristate "CumanaSCSI II support"
	depends on ARCH_ACORN && SCSI
	help
	  This enables support for the Cumana SCSI II card. If you have an
	  Acorn system with one of these, say Y. If unsure, say N.

config SCSI_EESOXSCSI
	tristate "EESOX support"
	depends on ARCH_ACORN && SCSI
	help
	  This enables support for the EESOX SCSI card. If you have an Acorn
	  system with one of these, say Y, otherwise say N.

config SCSI_POWERTECSCSI
	tristate "PowerTec support"
	depends on ARCH_ACORN && SCSI
	help
	  This enables support for the Powertec SCSI card on Acorn systems. If
	  you have one of these, say Y. If unsure, say N.

comment "The following drivers are not fully supported"
	depends on ARCH_ACORN

config SCSI_CUMANA_1
	tristate "CumanaSCSI I support"
	depends on ARCH_ACORN && SCSI
	select SCSI_SPI_ATTRS
	help
	  This enables support for the Cumana SCSI I card. If you have an
	  Acorn system with one of these, say Y. If unsure, say N.

config SCSI_OAK1
	tristate "Oak SCSI support"
	depends on ARCH_ACORN && SCSI
	select SCSI_SPI_ATTRS
	help
	  This enables support for the Oak SCSI card. If you have an Acorn
	  system with one of these, say Y. If unsure, say N.

