Merge SCSI misc branch into isci-for-3.6 tag
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
# Kernel configuration file for the MPT2SAS
|
||||
#
|
||||
# This code is based on drivers/scsi/mpt2sas/Kconfig
|
||||
# Copyright (C) 2007-2010 LSI Corporation
|
||||
# Copyright (C) 2007-2012 LSI Corporation
|
||||
# (mailto:DL-MPTFusionLinux@lsi.com)
|
||||
|
||||
# This program is free software; you can redistribute it and/or
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000-2011 LSI Corporation.
|
||||
* Copyright (c) 2000-2012 LSI Corporation.
|
||||
*
|
||||
*
|
||||
* Name: mpi2.h
|
||||
@@ -8,7 +8,7 @@
|
||||
* scatter/gather formats.
|
||||
* Creation Date: June 21, 2006
|
||||
*
|
||||
* mpi2.h Version: 02.00.23
|
||||
* mpi2.h Version: 02.00.25
|
||||
*
|
||||
* Version History
|
||||
* ---------------
|
||||
@@ -72,6 +72,9 @@
|
||||
* 05-25-11 02.00.21 Bumped MPI2_HEADER_VERSION_UNIT.
|
||||
* 08-24-11 02.00.22 Bumped MPI2_HEADER_VERSION_UNIT.
|
||||
* 11-18-11 02.00.23 Bumped MPI2_HEADER_VERSION_UNIT.
|
||||
* 02-06-12 02.00.24 Bumped MPI2_HEADER_VERSION_UNIT.
|
||||
* 03-29-12 02.00.25 Bumped MPI2_HEADER_VERSION_UNIT.
|
||||
* Added Hard Reset delay timings.
|
||||
* --------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
@@ -97,7 +100,7 @@
|
||||
#define MPI2_VERSION_02_00 (0x0200)
|
||||
|
||||
/* versioning for this MPI header set */
|
||||
#define MPI2_HEADER_VERSION_UNIT (0x17)
|
||||
#define MPI2_HEADER_VERSION_UNIT (0x19)
|
||||
#define MPI2_HEADER_VERSION_DEV (0x00)
|
||||
#define MPI2_HEADER_VERSION_UNIT_MASK (0xFF00)
|
||||
#define MPI2_HEADER_VERSION_UNIT_SHIFT (8)
|
||||
@@ -275,6 +278,11 @@ typedef volatile struct _MPI2_SYSTEM_INTERFACE_REGS
|
||||
#define MPI2_REQUEST_DESCRIPTOR_POST_HIGH_OFFSET (0x000000C4)
|
||||
|
||||
|
||||
/* Hard Reset delay timings */
|
||||
#define MPI2_HARD_RESET_PCIE_FIRST_READ_DELAY_MICRO_SEC (50000)
|
||||
#define MPI2_HARD_RESET_PCIE_RESET_READ_WINDOW_MICRO_SEC (255000)
|
||||
#define MPI2_HARD_RESET_PCIE_SECOND_READ_DELAY_MICRO_SEC (256000)
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Message Descriptors
|
||||
|
@@ -1,12 +1,12 @@
|
||||
/*
|
||||
* Copyright (c) 2000-2010 LSI Corporation.
|
||||
* Copyright (c) 2000-2012 LSI Corporation.
|
||||
*
|
||||
*
|
||||
* Name: mpi2_init.h
|
||||
* Title: MPI SCSI initiator mode messages and structures
|
||||
* Creation Date: June 23, 2006
|
||||
*
|
||||
* mpi2_init.h Version: 02.00.11
|
||||
* mpi2_init.h Version: 02.00.13
|
||||
*
|
||||
* Version History
|
||||
* ---------------
|
||||
@@ -34,6 +34,8 @@
|
||||
* 02-10-10 02.00.09 Removed unused structure that had "#if 0" around it.
|
||||
* 05-12-10 02.00.10 Added optional vendor-unique region to SCSI IO Request.
|
||||
* 11-10-10 02.00.11 Added MPI2_SCSIIO_NUM_SGLOFFSETS define.
|
||||
* 02-06-12 02.00.13 Added alternate defines for Task Priority / Command
|
||||
* Priority to match SAM-4.
|
||||
* --------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
@@ -194,6 +196,9 @@ typedef struct _MPI2_SCSI_IO_REQUEST
|
||||
|
||||
#define MPI2_SCSIIO_CONTROL_TASKPRI_MASK (0x00007800)
|
||||
#define MPI2_SCSIIO_CONTROL_TASKPRI_SHIFT (11)
|
||||
/* alternate name for the previous field; called Command Priority in SAM-4 */
|
||||
#define MPI2_SCSIIO_CONTROL_CMDPRI_MASK (0x00007800)
|
||||
#define MPI2_SCSIIO_CONTROL_CMDPRI_SHIFT (11)
|
||||
|
||||
#define MPI2_SCSIIO_CONTROL_TASKATTRIBUTE_MASK (0x00000700)
|
||||
#define MPI2_SCSIIO_CONTROL_SIMPLEQ (0x00000000)
|
||||
|
@@ -1,12 +1,12 @@
|
||||
/*
|
||||
* Copyright (c) 2000-2011 LSI Corporation.
|
||||
* Copyright (c) 2000-2012 LSI Corporation.
|
||||
*
|
||||
*
|
||||
* Name: mpi2_ioc.h
|
||||
* Title: MPI IOC, Port, Event, FW Download, and FW Upload messages
|
||||
* Creation Date: October 11, 2006
|
||||
*
|
||||
* mpi2_ioc.h Version: 02.00.19
|
||||
* mpi2_ioc.h Version: 02.00.21
|
||||
*
|
||||
* Version History
|
||||
* ---------------
|
||||
@@ -117,6 +117,7 @@
|
||||
* 08-24-11 02.00.19 Added PhysicalPort field to
|
||||
* MPI2_EVENT_DATA_SAS_DEVICE_STATUS_CHANGE structure.
|
||||
* Marked MPI2_PM_CONTROL_FEATURE_PCIE_LINK as obsolete.
|
||||
* 03-29-12 02.00.21 Added a product specific range to event values.
|
||||
* --------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
@@ -492,7 +493,8 @@ typedef struct _MPI2_EVENT_NOTIFICATION_REPLY
|
||||
#define MPI2_EVENT_SAS_NOTIFY_PRIMITIVE (0x0026)
|
||||
#define MPI2_EVENT_TEMP_THRESHOLD (0x0027)
|
||||
#define MPI2_EVENT_HOST_MESSAGE (0x0028)
|
||||
|
||||
#define MPI2_EVENT_MIN_PRODUCT_SPECIFIC (0x006E)
|
||||
#define MPI2_EVENT_MAX_PRODUCT_SPECIFIC (0x007F)
|
||||
|
||||
/* Log Entry Added Event data */
|
||||
|
||||
|
@@ -1,12 +1,12 @@
|
||||
/*
|
||||
* Copyright (c) 2000-2010 LSI Corporation.
|
||||
* Copyright (c) 2000-2012 LSI Corporation.
|
||||
*
|
||||
*
|
||||
* Name: mpi2_raid.h
|
||||
* Title: MPI Integrated RAID messages and structures
|
||||
* Creation Date: April 26, 2007
|
||||
*
|
||||
* mpi2_raid.h Version: 02.00.06
|
||||
* mpi2_raid.h Version: 02.00.08
|
||||
*
|
||||
* Version History
|
||||
* ---------------
|
||||
@@ -26,7 +26,7 @@
|
||||
* 08-24-10 02.00.06 Added MPI2_RAID_ACTION_COMPATIBILITY_CHECK along with
|
||||
* related structures and defines.
|
||||
* Added product-specific range to RAID Action values.
|
||||
|
||||
* 02-06-12 02.00.08 Added MPI2_RAID_ACTION_PHYSDISK_HIDDEN.
|
||||
* --------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
@@ -181,6 +181,7 @@ typedef struct _MPI2_RAID_ACTION_REQUEST
|
||||
#define MPI2_RAID_ACTION_START_RAID_FUNCTION (0x21)
|
||||
#define MPI2_RAID_ACTION_STOP_RAID_FUNCTION (0x22)
|
||||
#define MPI2_RAID_ACTION_COMPATIBILITY_CHECK (0x23)
|
||||
#define MPI2_RAID_ACTION_PHYSDISK_HIDDEN (0x24)
|
||||
#define MPI2_RAID_ACTION_MIN_PRODUCT_SPECIFIC (0x80)
|
||||
#define MPI2_RAID_ACTION_MAX_PRODUCT_SPECIFIC (0xFF)
|
||||
|
||||
|
@@ -3,7 +3,7 @@
|
||||
* for access to MPT (Message Passing Technology) firmware.
|
||||
*
|
||||
* This code is based on drivers/scsi/mpt2sas/mpt2_base.c
|
||||
* Copyright (C) 2007-2010 LSI Corporation
|
||||
* Copyright (C) 2007-2012 LSI Corporation
|
||||
* (mailto:DL-MPTFusionLinux@lsi.com)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
@@ -1971,9 +1971,9 @@ _base_display_intel_branding(struct MPT2SAS_ADAPTER *ioc)
|
||||
printk(MPT2SAS_INFO_FMT "%s\n", ioc->name,
|
||||
MPT2SAS_INTEL_RMS2LL040_BRANDING);
|
||||
break;
|
||||
case MPT2SAS_INTEL_RAMSDALE_SSDID:
|
||||
case MPT2SAS_INTEL_SSD910_SSDID:
|
||||
printk(MPT2SAS_INFO_FMT "%s\n", ioc->name,
|
||||
MPT2SAS_INTEL_RAMSDALE_BRANDING);
|
||||
MPT2SAS_INTEL_SSD910_BRANDING);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@@ -3,7 +3,7 @@
|
||||
* for access to MPT (Message Passing Technology) firmware.
|
||||
*
|
||||
* This code is based on drivers/scsi/mpt2sas/mpt2_base.h
|
||||
* Copyright (C) 2007-2010 LSI Corporation
|
||||
* Copyright (C) 2007-2012 LSI Corporation
|
||||
* (mailto:DL-MPTFusionLinux@lsi.com)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
@@ -69,8 +69,8 @@
|
||||
#define MPT2SAS_DRIVER_NAME "mpt2sas"
|
||||
#define MPT2SAS_AUTHOR "LSI Corporation <DL-MPTFusionLinux@lsi.com>"
|
||||
#define MPT2SAS_DESCRIPTION "LSI MPT Fusion SAS 2.0 Device Driver"
|
||||
#define MPT2SAS_DRIVER_VERSION "13.100.00.00"
|
||||
#define MPT2SAS_MAJOR_VERSION 13
|
||||
#define MPT2SAS_DRIVER_VERSION "14.100.00.00"
|
||||
#define MPT2SAS_MAJOR_VERSION 14
|
||||
#define MPT2SAS_MINOR_VERSION 100
|
||||
#define MPT2SAS_BUILD_VERSION 00
|
||||
#define MPT2SAS_RELEASE_VERSION 00
|
||||
@@ -171,8 +171,8 @@
|
||||
"Intel Integrated RAID Module RMS2LL040"
|
||||
#define MPT2SAS_INTEL_RS25GB008_BRANDING \
|
||||
"Intel(R) RAID Controller RS25GB008"
|
||||
#define MPT2SAS_INTEL_RAMSDALE_BRANDING \
|
||||
"Intel 720 Series SSD"
|
||||
#define MPT2SAS_INTEL_SSD910_BRANDING \
|
||||
"Intel(R) SSD 910 Series"
|
||||
/*
|
||||
* Intel HBA SSDIDs
|
||||
*/
|
||||
@@ -183,7 +183,7 @@
|
||||
#define MPT2SAS_INTEL_RMS2LL080_SSDID 0x350E
|
||||
#define MPT2SAS_INTEL_RMS2LL040_SSDID 0x350F
|
||||
#define MPT2SAS_INTEL_RS25GB008_SSDID 0x3000
|
||||
#define MPT2SAS_INTEL_RAMSDALE_SSDID 0x3700
|
||||
#define MPT2SAS_INTEL_SSD910_SSDID 0x3700
|
||||
|
||||
/*
|
||||
* HP HBA branding
|
||||
@@ -1096,6 +1096,8 @@ int mpt2sas_config_get_iounit_pg1(struct MPT2SAS_ADAPTER *ioc, Mpi2ConfigReply_t
|
||||
*mpi_reply, Mpi2IOUnitPage1_t *config_page);
|
||||
int mpt2sas_config_set_iounit_pg1(struct MPT2SAS_ADAPTER *ioc, Mpi2ConfigReply_t
|
||||
*mpi_reply, Mpi2IOUnitPage1_t *config_page);
|
||||
int mpt2sas_config_get_iounit_pg3(struct MPT2SAS_ADAPTER *ioc,
|
||||
Mpi2ConfigReply_t *mpi_reply, Mpi2IOUnitPage3_t *config_page, u16 sz);
|
||||
int mpt2sas_config_get_sas_iounit_pg1(struct MPT2SAS_ADAPTER *ioc, Mpi2ConfigReply_t
|
||||
*mpi_reply, Mpi2SasIOUnitPage1_t *config_page, u16 sz);
|
||||
int mpt2sas_config_set_sas_iounit_pg1(struct MPT2SAS_ADAPTER *ioc,
|
||||
|
@@ -2,7 +2,7 @@
|
||||
* This module provides common API for accessing firmware configuration pages
|
||||
*
|
||||
* This code is based on drivers/scsi/mpt2sas/mpt2_base.c
|
||||
* Copyright (C) 2007-2010 LSI Corporation
|
||||
* Copyright (C) 2007-2012 LSI Corporation
|
||||
* (mailto:DL-MPTFusionLinux@lsi.com)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
@@ -682,6 +682,42 @@ mpt2sas_config_set_iounit_pg1(struct MPT2SAS_ADAPTER *ioc,
|
||||
return r;
|
||||
}
|
||||
|
||||
/**
|
||||
* mpt2sas_config_get_iounit_pg3 - obtain iounit page 3
|
||||
* @ioc: per adapter object
|
||||
* @mpi_reply: reply mf payload returned from firmware
|
||||
* @config_page: contents of the config page
|
||||
* @sz: size of buffer passed in config_page
|
||||
* Context: sleep.
|
||||
*
|
||||
* Returns 0 for success, non-zero for failure.
|
||||
*/
|
||||
int
|
||||
mpt2sas_config_get_iounit_pg3(struct MPT2SAS_ADAPTER *ioc,
|
||||
Mpi2ConfigReply_t *mpi_reply, Mpi2IOUnitPage3_t *config_page, u16 sz)
|
||||
{
|
||||
Mpi2ConfigRequest_t mpi_request;
|
||||
int r;
|
||||
|
||||
memset(&mpi_request, 0, sizeof(Mpi2ConfigRequest_t));
|
||||
mpi_request.Function = MPI2_FUNCTION_CONFIG;
|
||||
mpi_request.Action = MPI2_CONFIG_ACTION_PAGE_HEADER;
|
||||
mpi_request.Header.PageType = MPI2_CONFIG_PAGETYPE_IO_UNIT;
|
||||
mpi_request.Header.PageNumber = 3;
|
||||
mpi_request.Header.PageVersion = MPI2_IOUNITPAGE3_PAGEVERSION;
|
||||
mpt2sas_base_build_zero_len_sge(ioc, &mpi_request.PageBufferSGE);
|
||||
r = _config_request(ioc, &mpi_request, mpi_reply,
|
||||
MPT2_CONFIG_PAGE_DEFAULT_TIMEOUT, NULL, 0);
|
||||
if (r)
|
||||
goto out;
|
||||
|
||||
mpi_request.Action = MPI2_CONFIG_ACTION_PAGE_READ_CURRENT;
|
||||
r = _config_request(ioc, &mpi_request, mpi_reply,
|
||||
MPT2_CONFIG_PAGE_DEFAULT_TIMEOUT, config_page, sz);
|
||||
out:
|
||||
return r;
|
||||
}
|
||||
|
||||
/**
|
||||
* mpt2sas_config_get_ioc_pg8 - obtain ioc page 8
|
||||
* @ioc: per adapter object
|
||||
|
@@ -3,7 +3,7 @@
|
||||
* controllers
|
||||
*
|
||||
* This code is based on drivers/scsi/mpt2sas/mpt2_ctl.c
|
||||
* Copyright (C) 2007-2010 LSI Corporation
|
||||
* Copyright (C) 2007-2012 LSI Corporation
|
||||
* (mailto:DL-MPTFusionLinux@lsi.com)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
@@ -2181,10 +2181,12 @@ _ctl_ioctl_main(struct file *file, unsigned int cmd, void __user *arg,
|
||||
return -EAGAIN;
|
||||
|
||||
state = (file->f_flags & O_NONBLOCK) ? NON_BLOCKING : BLOCKING;
|
||||
if (state == NON_BLOCKING && !mutex_trylock(&ioc->ctl_cmds.mutex))
|
||||
return -EAGAIN;
|
||||
else if (mutex_lock_interruptible(&ioc->ctl_cmds.mutex))
|
||||
if (state == NON_BLOCKING) {
|
||||
if (!mutex_trylock(&ioc->ctl_cmds.mutex))
|
||||
return -EAGAIN;
|
||||
} else if (mutex_lock_interruptible(&ioc->ctl_cmds.mutex)) {
|
||||
return -ERESTARTSYS;
|
||||
}
|
||||
|
||||
switch (cmd) {
|
||||
case MPT2IOCINFO:
|
||||
@@ -2690,6 +2692,75 @@ _ctl_ioc_reply_queue_count_show(struct device *cdev,
|
||||
static DEVICE_ATTR(reply_queue_count, S_IRUGO,
|
||||
_ctl_ioc_reply_queue_count_show, NULL);
|
||||
|
||||
/**
|
||||
* _ctl_BRM_status_show - Backup Rail Monitor Status
|
||||
* @cdev - pointer to embedded class device
|
||||
* @buf - the buffer returned
|
||||
*
|
||||
* This is number of reply queues
|
||||
*
|
||||
* A sysfs 'read-only' shost attribute.
|
||||
*/
|
||||
static ssize_t
|
||||
_ctl_BRM_status_show(struct device *cdev, struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
struct Scsi_Host *shost = class_to_shost(cdev);
|
||||
struct MPT2SAS_ADAPTER *ioc = shost_priv(shost);
|
||||
Mpi2IOUnitPage3_t *io_unit_pg3 = NULL;
|
||||
Mpi2ConfigReply_t mpi_reply;
|
||||
u16 backup_rail_monitor_status = 0;
|
||||
u16 ioc_status;
|
||||
int sz;
|
||||
ssize_t rc = 0;
|
||||
|
||||
if (!ioc->is_warpdrive) {
|
||||
printk(MPT2SAS_ERR_FMT "%s: BRM attribute is only for"\
|
||||
"warpdrive\n", ioc->name, __func__);
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* allocate upto GPIOVal 36 entries */
|
||||
sz = offsetof(Mpi2IOUnitPage3_t, GPIOVal) + (sizeof(u16) * 36);
|
||||
io_unit_pg3 = kzalloc(sz, GFP_KERNEL);
|
||||
if (!io_unit_pg3) {
|
||||
printk(MPT2SAS_ERR_FMT "%s: failed allocating memory"\
|
||||
"for iounit_pg3: (%d) bytes\n", ioc->name, __func__, sz);
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (mpt2sas_config_get_iounit_pg3(ioc, &mpi_reply, io_unit_pg3, sz) !=
|
||||
0) {
|
||||
printk(MPT2SAS_ERR_FMT
|
||||
"%s: failed reading iounit_pg3\n", ioc->name,
|
||||
__func__);
|
||||
goto out;
|
||||
}
|
||||
|
||||
ioc_status = le16_to_cpu(mpi_reply.IOCStatus) & MPI2_IOCSTATUS_MASK;
|
||||
if (ioc_status != MPI2_IOCSTATUS_SUCCESS) {
|
||||
printk(MPT2SAS_ERR_FMT "%s: iounit_pg3 failed with"\
|
||||
"ioc_status(0x%04x)\n", ioc->name, __func__, ioc_status);
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (io_unit_pg3->GPIOCount < 25) {
|
||||
printk(MPT2SAS_ERR_FMT "%s: iounit_pg3->GPIOCount less than"\
|
||||
"25 entries, detected (%d) entries\n", ioc->name, __func__,
|
||||
io_unit_pg3->GPIOCount);
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* BRM status is in bit zero of GPIOVal[24] */
|
||||
backup_rail_monitor_status = le16_to_cpu(io_unit_pg3->GPIOVal[24]);
|
||||
rc = snprintf(buf, PAGE_SIZE, "%d\n", (backup_rail_monitor_status & 1));
|
||||
|
||||
out:
|
||||
kfree(io_unit_pg3);
|
||||
return rc;
|
||||
}
|
||||
static DEVICE_ATTR(BRM_status, S_IRUGO, _ctl_BRM_status_show, NULL);
|
||||
|
||||
struct DIAG_BUFFER_START {
|
||||
__le32 Size;
|
||||
__le32 DiagVersion;
|
||||
@@ -2901,6 +2972,7 @@ struct device_attribute *mpt2sas_host_attrs[] = {
|
||||
&dev_attr_host_trace_buffer,
|
||||
&dev_attr_host_trace_buffer_enable,
|
||||
&dev_attr_reply_queue_count,
|
||||
&dev_attr_BRM_status,
|
||||
NULL,
|
||||
};
|
||||
|
||||
|
@@ -3,7 +3,7 @@
|
||||
* controllers
|
||||
*
|
||||
* This code is based on drivers/scsi/mpt2sas/mpt2_ctl.h
|
||||
* Copyright (C) 2007-2010 LSI Corporation
|
||||
* Copyright (C) 2007-2012 LSI Corporation
|
||||
* (mailto:DL-MPTFusionLinux@lsi.com)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
|
@@ -2,7 +2,7 @@
|
||||
* Logging Support for MPT (Message Passing Technology) based controllers
|
||||
*
|
||||
* This code is based on drivers/scsi/mpt2sas/mpt2_debug.c
|
||||
* Copyright (C) 2007-2010 LSI Corporation
|
||||
* Copyright (C) 2007-2012 LSI Corporation
|
||||
* (mailto:DL-MPTFusionLinux@lsi.com)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
|
@@ -2,7 +2,7 @@
|
||||
* Scsi Host Layer for MPT (Message Passing Technology) based controllers
|
||||
*
|
||||
* This code is based on drivers/scsi/mpt2sas/mpt2_scsih.c
|
||||
* Copyright (C) 2007-2010 LSI Corporation
|
||||
* Copyright (C) 2007-2012 LSI Corporation
|
||||
* (mailto:DL-MPTFusionLinux@lsi.com)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
@@ -119,6 +119,15 @@ module_param(diag_buffer_enable, int, 0);
|
||||
MODULE_PARM_DESC(diag_buffer_enable, " post diag buffers "
|
||||
"(TRACE=1/SNAPSHOT=2/EXTENDED=4/default=0)");
|
||||
|
||||
static int disable_discovery = -1;
|
||||
module_param(disable_discovery, int, 0);
|
||||
MODULE_PARM_DESC(disable_discovery, " disable discovery ");
|
||||
|
||||
/* permit overriding the host protection capabilities mask (EEDP/T10 PI) */
|
||||
static int prot_mask = 0;
|
||||
module_param(prot_mask, int, 0);
|
||||
MODULE_PARM_DESC(prot_mask, " host protection capabilities mask, def=7 ");
|
||||
|
||||
/**
|
||||
* struct sense_info - common structure for obtaining sense keys
|
||||
* @skey: sense key
|
||||
@@ -3768,8 +3777,6 @@ static void
|
||||
_scsih_eedp_error_handling(struct scsi_cmnd *scmd, u16 ioc_status)
|
||||
{
|
||||
u8 ascq;
|
||||
u8 sk;
|
||||
u8 host_byte;
|
||||
|
||||
switch (ioc_status) {
|
||||
case MPI2_IOCSTATUS_EEDP_GUARD_ERROR:
|
||||
@@ -3786,16 +3793,8 @@ _scsih_eedp_error_handling(struct scsi_cmnd *scmd, u16 ioc_status)
|
||||
break;
|
||||
}
|
||||
|
||||
if (scmd->sc_data_direction == DMA_TO_DEVICE) {
|
||||
sk = ILLEGAL_REQUEST;
|
||||
host_byte = DID_ABORT;
|
||||
} else {
|
||||
sk = ABORTED_COMMAND;
|
||||
host_byte = DID_OK;
|
||||
}
|
||||
|
||||
scsi_build_sense_buffer(0, scmd->sense_buffer, sk, 0x10, ascq);
|
||||
scmd->result = DRIVER_SENSE << 24 | (host_byte << 16) |
|
||||
scsi_build_sense_buffer(0, scmd->sense_buffer, ILLEGAL_REQUEST, 0x10, ascq);
|
||||
scmd->result = DRIVER_SENSE << 24 | (DID_ABORT << 16) |
|
||||
SAM_STAT_CHECK_CONDITION;
|
||||
}
|
||||
|
||||
@@ -5973,8 +5972,14 @@ _scsih_sas_discovery_event(struct MPT2SAS_ADAPTER *ioc,
|
||||
#endif
|
||||
|
||||
if (event_data->ReasonCode == MPI2_EVENT_SAS_DISC_RC_STARTED &&
|
||||
!ioc->sas_hba.num_phys)
|
||||
!ioc->sas_hba.num_phys) {
|
||||
if (disable_discovery > 0 && ioc->shost_recovery) {
|
||||
/* Wait for the reset to complete */
|
||||
while (ioc->shost_recovery)
|
||||
ssleep(1);
|
||||
}
|
||||
_scsih_sas_host_add(ioc);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -7254,7 +7259,8 @@ mpt2sas_scsih_reset_handler(struct MPT2SAS_ADAPTER *ioc, int reset_phase)
|
||||
_scsih_search_responding_sas_devices(ioc);
|
||||
_scsih_search_responding_raid_devices(ioc);
|
||||
_scsih_search_responding_expanders(ioc);
|
||||
if (!ioc->is_driver_loading) {
|
||||
if ((!ioc->is_driver_loading) && !(disable_discovery > 0 &&
|
||||
!ioc->sas_hba.num_phys)) {
|
||||
_scsih_prep_device_scan(ioc);
|
||||
_scsih_search_responding_sas_devices(ioc);
|
||||
_scsih_search_responding_raid_devices(ioc);
|
||||
@@ -7929,6 +7935,9 @@ _scsih_scan_start(struct Scsi_Host *shost)
|
||||
if (diag_buffer_enable != -1 && diag_buffer_enable != 0)
|
||||
mpt2sas_enable_diag_buffer(ioc, diag_buffer_enable);
|
||||
|
||||
if (disable_discovery > 0)
|
||||
return;
|
||||
|
||||
ioc->start_scan = 1;
|
||||
rc = mpt2sas_port_enable(ioc);
|
||||
|
||||
@@ -7950,6 +7959,12 @@ _scsih_scan_finished(struct Scsi_Host *shost, unsigned long time)
|
||||
{
|
||||
struct MPT2SAS_ADAPTER *ioc = shost_priv(shost);
|
||||
|
||||
if (disable_discovery > 0) {
|
||||
ioc->is_driver_loading = 0;
|
||||
ioc->wait_for_discovery_to_complete = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (time >= (300 * HZ)) {
|
||||
ioc->base_cmds.status = MPT2_CMD_NOT_USED;
|
||||
printk(MPT2SAS_INFO_FMT "port enable: FAILED with timeout "
|
||||
@@ -8055,8 +8070,8 @@ _scsih_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
if (max_sectors != 0xFFFF) {
|
||||
if (max_sectors < 64) {
|
||||
shost->max_sectors = 64;
|
||||
printk(MPT2SAS_WARN_FMT "Invalid value %d passed "
|
||||
"for max_sectors, range is 64 to 8192. Assigning "
|
||||
printk(MPT2SAS_WARN_FMT "Invalid value %d passed "\
|
||||
"for max_sectors, range is 64 to 32767. Assigning "\
|
||||
"value of 64.\n", ioc->name, max_sectors);
|
||||
} else if (max_sectors > 32767) {
|
||||
shost->max_sectors = 32767;
|
||||
@@ -8078,8 +8093,14 @@ _scsih_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
goto out_add_shost_fail;
|
||||
}
|
||||
|
||||
scsi_host_set_prot(shost, SHOST_DIF_TYPE1_PROTECTION
|
||||
| SHOST_DIF_TYPE2_PROTECTION | SHOST_DIF_TYPE3_PROTECTION);
|
||||
/* register EEDP capabilities with SCSI layer */
|
||||
if (prot_mask)
|
||||
scsi_host_set_prot(shost, prot_mask);
|
||||
else
|
||||
scsi_host_set_prot(shost, SHOST_DIF_TYPE1_PROTECTION
|
||||
| SHOST_DIF_TYPE2_PROTECTION
|
||||
| SHOST_DIF_TYPE3_PROTECTION);
|
||||
|
||||
scsi_host_set_guard(shost, SHOST_DIX_GUARD_CRC);
|
||||
|
||||
/* event thread */
|
||||
|
@@ -2,7 +2,7 @@
|
||||
* SAS Transport Layer for MPT (Message Passing Technology) based controllers
|
||||
*
|
||||
* This code is based on drivers/scsi/mpt2sas/mpt2_transport.c
|
||||
* Copyright (C) 2007-2010 LSI Corporation
|
||||
* Copyright (C) 2007-2012 LSI Corporation
|
||||
* (mailto:DL-MPTFusionLinux@lsi.com)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
|
Reference in New Issue
Block a user