#
# AIC7XXX and AIC79XX 2.5.X Kernel configuration File.
# $Id: //depot/linux-aic79xx-2.5.0/drivers/scsi/aic7xxx/Kconfig.aic7xxx#7 $
#
config SCSI_AIC7XXX
	tristate "Adaptec AIC7xxx Fast -> U160 support (New Driver)"
	depends on (PCI || EISA) && SCSI
	select SCSI_SPI_ATTRS
	---help---
	This driver supports all of Adaptec's Fast through Ultra 160 PCI
	based SCSI controllers as well as the aic7770 based EISA and VLB
	SCSI controllers (the 274x and 284x series).  For AAA and ARO based
	configurations, only SCSI functionality is provided.

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

config AIC7XXX_CMDS_PER_DEVICE
	int "Maximum number of TCQ commands per device"
	depends on SCSI_AIC7XXX
	default "32"
	---help---
	Specify the number of commands you would like to allocate per SCSI
	device when Tagged Command Queueing (TCQ) is enabled on that device.

	This is an upper bound value for the number of tagged transactions
	to be used for any device.  The aic7xxx driver will automatically
	vary this number based on device behavior.  For devices with a
	fixed maximum, the driver will eventually lock to this maximum
	and display a console message inidicating this value.

	Due to resource allocation issues in the Linux SCSI mid-layer, using
	a high number of commands per device may result in memory allocation
	failures when many devices are attached to the system.  For this reason,
	the default is set to 32.  Higher values may result in higer performance
	on some devices.  The upper bound is 253.  0 disables tagged queueing.

	Per device tag depth can be controlled via the kernel command line
	"tag_info" option.  See drivers/scsi/aic7xxx/README.aic7xxx
	for details.

config AIC7XXX_RESET_DELAY_MS
	int "Initial bus reset delay in milli-seconds"
	depends on SCSI_AIC7XXX
	default "15000"
	---help---
	The number of milliseconds to delay after an initial bus reset.
	The bus settle delay following all error recovery actions is
	dictated by the SCSI layer and is not affected by this value.

	Default: 15000 (15 seconds)

config AIC7XXX_PROBE_EISA_VL
	bool "Probe for EISA and VL AIC7XXX Adapters"
	depends on SCSI_AIC7XXX && EISA
	help
	Probe for EISA and VLB Aic7xxx controllers.  In many newer systems,
	the invasive probes necessary to detect these controllers can cause
	other devices to fail.  For this reason, the non-PCI probe code is
	disabled by default.  The current value of this option can be "toggled"
	via the no_probe kernel command line option.

config AIC7XXX_BUILD_FIRMWARE
	bool "Build Adapter Firmware with Kernel Build"
	depends on SCSI_AIC7XXX && !PREVENT_FIRMWARE_BUILD
	help
	This option should only be enabled if you are modifying the firmware
	source to the aic7xxx driver and wish to have the generated firmware
	include files updated during a normal kernel build.  The assembler
	for the firmware requires lex and yacc or their equivalents, as well
	as the db v1 library.  You may have to install additional packages
	or modify the assembler Makefile or the files it includes if your
	build environment is different than that of the author.

config AIC7XXX_DEBUG_ENABLE
	bool "Compile in Debugging Code"
	depends on SCSI_AIC7XXX
	default y
	help
	Compile in aic7xxx debugging code that can be useful in diagnosing
	driver errors.

config AIC7XXX_DEBUG_MASK
        int "Debug code enable mask (2047 for all debugging)"
        depends on SCSI_AIC7XXX
        default "0"
        help
	Bit mask of debug options that is only valid if the
	CONFIG_AIC7XXX_DEBUG_ENBLE option is enabled.  The bits in this mask
	are defined in the drivers/scsi/aic7xxx/aic7xxx.h - search for the
	variable ahc_debug in that file to find them.

config AIC7XXX_REG_PRETTY_PRINT
        bool "Decode registers during diagnostics"
        depends on SCSI_AIC7XXX
	default y
        help
	Compile in register value tables for the output of expanded register
	contents in diagnostics.  This make it much easier to understand debug
	output without having to refer to a data book and/or the aic7xxx.reg
	file.
