# 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_TAGGED_QUEUE
	bool "Support SCSI 2 Tagged queueing"
	depends on SCSI_ACORNSCSI_3
	help
	  Say Y here to enable tagged queuing support on the Acorn SCSI card.

	  This 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. Some SCSI devices don't
	  implement this properly, so the safe answer is 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.

