#
# Kernel configuration file for the MPT3SAS
#
# This code is based on drivers/scsi/mpt3sas/Kconfig
# Copyright (C) 2012-2014  LSI Corporation
#  (mailto:DL-MPTFusionLinux@lsi.com)

# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

# NO WARRANTY
# THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
# CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT
# LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
# solely responsible for determining the appropriateness of using and
# distributing the Program and assumes all risks associated with its
# exercise of rights under this Agreement, including but not limited to
# the risks and costs of program errors, damage to or loss of data,
# programs or equipment, and unavailability or interruption of operations.

# DISCLAIMER OF LIABILITY
# NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
# USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
# HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES

# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
# USA.

config SCSI_MPT3SAS
	tristate "LSI MPT Fusion SAS 3.0 & SAS 2.0 Device Driver"
	depends on PCI && SCSI
	select SCSI_SAS_ATTRS
	select RAID_ATTRS
	---help---
	This driver supports PCI-Express SAS 12Gb/s Host Adapters.

config SCSI_MPT2SAS_MAX_SGE
	int "LSI MPT Fusion SAS 2.0 Max number of SG Entries (16 - 256)"
	depends on PCI && SCSI && SCSI_MPT3SAS
	default "128"
	range 16 256
	---help---
	This option allows you to specify the maximum number of scatter-
	gather entries per I/O. The driver default is 128, which matches
	MAX_PHYS_SEGMENTS in most kernels.  However in SuSE kernels this
	can be 256. However, it may decreased down to 16.  Decreasing this
	parameter will reduce memory requirements on a per controller instance.

config SCSI_MPT3SAS_MAX_SGE
	int "LSI MPT Fusion SAS 3.0 Max number of SG Entries (16 - 256)"
	depends on PCI && SCSI && SCSI_MPT3SAS
	default "128"
	range 16 256
	---help---
	This option allows you to specify the maximum number of scatter-
	gather entries per I/O. The driver default is 128, which matches
	MAX_PHYS_SEGMENTS in most kernels.  However in SuSE kernels this
	can be 256. However, it may decreased down to 16.  Decreasing this
	parameter will reduce memory requirements on a per controller instance.

config SCSI_MPT2SAS
	tristate "Legacy MPT2SAS config option"
	default n
	select SCSI_MPT3SAS
	depends on PCI && SCSI
	---help---
	Dummy config option for backwards compatiblity: configure the MPT3SAS
	driver instead.
