#
# AIC79XX 2.5.X Kernel configuration File.
# $Id: //depot/linux-aic79xx-2.5.0/drivers/scsi/aic7xxx/Kconfig.aic79xx#4 $
#
config SCSI_AIC79XX
	tristate "Adaptec AIC79xx U320 support"
	depends on PCI && SCSI
	select SCSI_SPI_ATTRS
	help
	This driver supports all of Adaptec's Ultra 320 PCI-X
	based SCSI controllers.

config AIC79XX_CMDS_PER_DEVICE
	int "Maximum number of TCQ commands per device"
	depends on SCSI_AIC79XX
	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 indicating 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 higher 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 Documentation/scsi/aic79xx.txt for details.

config AIC79XX_RESET_DELAY_MS
	int "Initial bus reset delay in milli-seconds"
	depends on SCSI_AIC79XX
	default "5000"
	---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: 5000 (5 seconds)

config AIC79XX_BUILD_FIRMWARE
	bool "Build Adapter Firmware with Kernel Build"
	depends on SCSI_AIC79XX && !PREVENT_FIRMWARE_BUILD
	help
	This option should only be enabled if you are modifying the firmware
	source to the aic79xx 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 AIC79XX_DEBUG_ENABLE
	bool "Compile in Debugging Code"
	depends on SCSI_AIC79XX
	default y
	help
	Compile in aic79xx debugging code that can be useful in diagnosing
	driver errors.

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

config AIC79XX_REG_PRETTY_PRINT
	bool "Decode registers during diagnostics"
	depends on SCSI_AIC79XX
	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.
