summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith M Wesolowski <wesolows@foobazco.org>2013-09-30 23:36:59 +0000
committerKeith M Wesolowski <wesolows@foobazco.org>2013-09-30 23:36:59 +0000
commit0c652bdabe592e9d27339f4fa59c4a86cc6398b8 (patch)
treef3e3e8d4f15a34b69b4c86242c9b92d8aa7396be
parent09f6bcf727008c2f65e4d692bf54627d4066c247 (diff)
parentaed5247ff899ec457005d93dfbdb4ffd74574695 (diff)
downloadillumos-joyent-0c652bdabe592e9d27339f4fa59c4a86cc6398b8.tar.gz
[illumos-gate merge]
commit aed5247ff899ec457005d93dfbdb4ffd74574695 4018 mpt_sas: allow physical topology enumeration in libtopo 4019 mpt_sas: expose LED controls to libtopo commit 1410cb930a3e26032c59c6835837a28c47366b3c 4016 disk-monitor should activate fault/fail indicators 4017 fmtopo -P flag does not appear to set properties Conflicts: usr/src/uts/common/io/scsi/adapters/mpt_sas/mptsas.c (new content) usr/src/lib/fm/topo/modules/common/fac_prov_mptsas/fac_prov_mptsas.c (OS-2444) usr/src/lib/fm/topo/modules/common/disk/disk_mptsas.c (OS-2444) usr/src/lib/fm/topo/maps/Joyent,Joyent-Compute-Platform-1101/Joyent-Compute-Platform-1101-disk-hc-topology.xmlgenksh (OS-2444) usr/src/cmd/fm/modules/common/disk-lights/disk_lights.c (lint) usr/src/cmd/fm/modules/common/disk-lights/Makefile (lint)
-rw-r--r--usr/src/cmd/fm/modules/common/disk-lights/Makefile1
-rw-r--r--usr/src/cmd/fm/modules/common/disk-lights/disk_lights.c3
-rw-r--r--usr/src/lib/fm/topo/maps/Joyent,Joyent-Compute-Platform-1101/Joyent-Compute-Platform-1101-disk-hc-topology.xml246
-rw-r--r--usr/src/pkg/manifests/service-fault-management.mf6
-rw-r--r--usr/src/uts/common/io/scsi/adapters/mpt_sas/mptsas.c89
5 files changed, 308 insertions, 37 deletions
diff --git a/usr/src/cmd/fm/modules/common/disk-lights/Makefile b/usr/src/cmd/fm/modules/common/disk-lights/Makefile
index d7c3bdadb7..bae6e76362 100644
--- a/usr/src/cmd/fm/modules/common/disk-lights/Makefile
+++ b/usr/src/cmd/fm/modules/common/disk-lights/Makefile
@@ -19,5 +19,6 @@ SRCS = disk_lights.c
include ../../Makefile.plugin
+LINTFLAGS += -L$(ROOT)/usr/lib/fm
LDLIBS += -ltopo
LDFLAGS += -L$(ROOT)/usr/lib/fm -R/usr/lib/fm
diff --git a/usr/src/cmd/fm/modules/common/disk-lights/disk_lights.c b/usr/src/cmd/fm/modules/common/disk-lights/disk_lights.c
index 7eaa421559..636b5a96ce 100644
--- a/usr/src/cmd/fm/modules/common/disk-lights/disk_lights.c
+++ b/usr/src/cmd/fm/modules/common/disk-lights/disk_lights.c
@@ -259,6 +259,7 @@ dl_trigger_enum(disk_lights_t *dl)
dl->dl_coalesce_interval);
}
+/*ARGSUSED*/
static void
disklights_timeout(fmd_hdl_t *hdl, id_t id, void *data)
{
@@ -274,6 +275,7 @@ disklights_timeout(fmd_hdl_t *hdl, id_t id, void *data)
dl->dl_timer = fmd_timer_install(hdl, NULL, NULL, dl->dl_poll_interval);
}
+/*ARGSUSED*/
static void
disklights_topo(fmd_hdl_t *hdl, topo_hdl_t *thp)
{
@@ -282,6 +284,7 @@ disklights_topo(fmd_hdl_t *hdl, topo_hdl_t *thp)
dl_trigger_enum(dl);
}
+/*ARGSUSED*/
static void
disklights_recv(fmd_hdl_t *hdl, fmd_event_t *ep, nvlist_t *nvl,
const char *class)
diff --git a/usr/src/lib/fm/topo/maps/Joyent,Joyent-Compute-Platform-1101/Joyent-Compute-Platform-1101-disk-hc-topology.xml b/usr/src/lib/fm/topo/maps/Joyent,Joyent-Compute-Platform-1101/Joyent-Compute-Platform-1101-disk-hc-topology.xml
new file mode 100644
index 0000000000..8aaba3306a
--- /dev/null
+++ b/usr/src/lib/fm/topo/maps/Joyent,Joyent-Compute-Platform-1101/Joyent-Compute-Platform-1101-disk-hc-topology.xml
@@ -0,0 +1,246 @@
+<?xml version="1.0"?>
+<!DOCTYPE topology SYSTEM "/usr/share/lib/xml/dtd/topology.dtd.1">
+<topology name='disk' scheme='hc'>
+ <range name='bay' min='0' max='15'>
+ <facility name='fail' type='indicator' provider='fac_prov_mptsas' >
+ <propgroup name='facility' version='1' name-stability='Private'
+ data-stability='Private' >
+ <propval name='type' type='uint32' value='0' />
+ <propmethod name='mptsas_led_mode' version='0' propname='mode'
+ proptype='uint32' mutable='1'>
+ </propmethod>
+ </propgroup>
+ </facility>
+ <facility name='ident' type='indicator' provider='fac_prov_mptsas' >
+ <propgroup name='facility' version='1' name-stability='Private'
+ data-stability='Private' >
+ <propval name='type' type='uint32' value='1' />
+ <propmethod name='mptsas_led_mode' version='0' propname='mode'
+ proptype='uint32' mutable='1'>
+ </propmethod>
+ </propgroup>
+ </facility>
+ <facility name='ok2rm' type='indicator' provider='fac_prov_mptsas' >
+ <propgroup name='facility' version='1' name-stability='Private'
+ data-stability='Private' >
+ <propval name='type' type='uint32' value='2' />
+ <propmethod name='mptsas_led_mode' version='0' propname='mode'
+ proptype='uint32' mutable='1'>
+ </propmethod>
+ </propgroup>
+ </facility>
+ <node instance='0'>
+ <propgroup name='protocol' version='1' name-stability='Private'
+ data-stability='Private'>
+ <propval name='label' type='string' value='Front Disk 0' />
+ </propgroup>
+ <propgroup name='binding' version='1' name-stability='Private'
+ data-stability='Private'>
+ <propval name='driver' type='string' value='mpt_sas' />
+ <propval name='devctl' type='string' value='/devices/pci@0,0/pci8086,3c02@1/pci15d9,691@0:devctl' />
+ <propval name='enclosure' type='uint32' value='1' />
+ <propval name='slot' type='uint32' value='0' />
+ </propgroup>
+ </node>
+ <node instance='1'>
+ <propgroup name='protocol' version='1' name-stability='Private'
+ data-stability='Private'>
+ <propval name='label' type='string' value='Front Disk 1' />
+ </propgroup>
+ <propgroup name='binding' version='1' name-stability='Private'
+ data-stability='Private'>
+ <propval name='driver' type='string' value='mpt_sas' />
+ <propval name='devctl' type='string' value='/devices/pci@0,0/pci8086,3c02@1/pci15d9,691@0:devctl' />
+ <propval name='enclosure' type='uint32' value='1' />
+ <propval name='slot' type='uint32' value='1' />
+ </propgroup>
+ </node>
+ <node instance='2'>
+ <propgroup name='protocol' version='1' name-stability='Private'
+ data-stability='Private'>
+ <propval name='label' type='string' value='Front Disk 2' />
+ </propgroup>
+ <propgroup name='binding' version='1' name-stability='Private'
+ data-stability='Private'>
+ <propval name='driver' type='string' value='mpt_sas' />
+ <propval name='devctl' type='string' value='/devices/pci@0,0/pci8086,3c02@1/pci15d9,691@0:devctl' />
+ <propval name='enclosure' type='uint32' value='1' />
+ <propval name='slot' type='uint32' value='2' />
+ </propgroup>
+ </node>
+ <node instance='3'>
+ <propgroup name='protocol' version='1' name-stability='Private'
+ data-stability='Private'>
+ <propval name='label' type='string' value='Front Disk 3' />
+ </propgroup>
+ <propgroup name='binding' version='1' name-stability='Private'
+ data-stability='Private'>
+ <propval name='driver' type='string' value='mpt_sas' />
+ <propval name='devctl' type='string' value='/devices/pci@0,0/pci8086,3c02@1/pci15d9,691@0:devctl' />
+ <propval name='enclosure' type='uint32' value='1' />
+ <propval name='slot' type='uint32' value='3' />
+ </propgroup>
+ </node>
+ <node instance='4'>
+ <propgroup name='protocol' version='1' name-stability='Private'
+ data-stability='Private'>
+ <propval name='label' type='string' value='Front Disk 4' />
+ </propgroup>
+ <propgroup name='binding' version='1' name-stability='Private'
+ data-stability='Private'>
+ <propval name='driver' type='string' value='mpt_sas' />
+ <propval name='devctl' type='string' value='/devices/pci@0,0/pci8086,3c02@1/pci15d9,691@0:devctl' />
+ <propval name='enclosure' type='uint32' value='1' />
+ <propval name='slot' type='uint32' value='4' />
+ </propgroup>
+ </node>
+ <node instance='5'>
+ <propgroup name='protocol' version='1' name-stability='Private'
+ data-stability='Private'>
+ <propval name='label' type='string' value='Front Disk 5' />
+ </propgroup>
+ <propgroup name='binding' version='1' name-stability='Private'
+ data-stability='Private'>
+ <propval name='driver' type='string' value='mpt_sas' />
+ <propval name='devctl' type='string' value='/devices/pci@0,0/pci8086,3c02@1/pci15d9,691@0:devctl' />
+ <propval name='enclosure' type='uint32' value='1' />
+ <propval name='slot' type='uint32' value='5' />
+ </propgroup>
+ </node>
+ <node instance='6'>
+ <propgroup name='protocol' version='1' name-stability='Private'
+ data-stability='Private'>
+ <propval name='label' type='string' value='Front Disk 6' />
+ </propgroup>
+ <propgroup name='binding' version='1' name-stability='Private'
+ data-stability='Private'>
+ <propval name='driver' type='string' value='mpt_sas' />
+ <propval name='devctl' type='string' value='/devices/pci@0,0/pci8086,3c02@1/pci15d9,691@0:devctl' />
+ <propval name='enclosure' type='uint32' value='1' />
+ <propval name='slot' type='uint32' value='6' />
+ </propgroup>
+ </node>
+ <node instance='7'>
+ <propgroup name='protocol' version='1' name-stability='Private'
+ data-stability='Private'>
+ <propval name='label' type='string' value='Front Disk 7' />
+ </propgroup>
+ <propgroup name='binding' version='1' name-stability='Private'
+ data-stability='Private'>
+ <propval name='driver' type='string' value='mpt_sas' />
+ <propval name='devctl' type='string' value='/devices/pci@0,0/pci8086,3c02@1/pci15d9,691@0:devctl' />
+ <propval name='enclosure' type='uint32' value='1' />
+ <propval name='slot' type='uint32' value='7' />
+ </propgroup>
+ </node>
+ <node instance='8'>
+ <propgroup name='protocol' version='1' name-stability='Private'
+ data-stability='Private'>
+ <propval name='label' type='string' value='Front Disk 8' />
+ </propgroup>
+ <propgroup name='binding' version='1' name-stability='Private'
+ data-stability='Private'>
+ <propval name='driver' type='string' value='mpt_sas' />
+ <propval name='devctl' type='string' value='/devices/pci@0,0/pci8086,3c06@2,2/pci15d9,691@0:devctl' />
+ <propval name='enclosure' type='uint32' value='1' />
+ <propval name='slot' type='uint32' value='0' />
+ </propgroup>
+ </node>
+ <node instance='9'>
+ <propgroup name='protocol' version='1' name-stability='Private'
+ data-stability='Private'>
+ <propval name='label' type='string' value='Front Disk 9' />
+ </propgroup>
+ <propgroup name='binding' version='1' name-stability='Private'
+ data-stability='Private'>
+ <propval name='driver' type='string' value='mpt_sas' />
+ <propval name='devctl' type='string' value='/devices/pci@0,0/pci8086,3c06@2,2/pci15d9,691@0:devctl' />
+ <propval name='enclosure' type='uint32' value='1' />
+ <propval name='slot' type='uint32' value='1' />
+ </propgroup>
+ </node>
+ <node instance='10'>
+ <propgroup name='protocol' version='1' name-stability='Private'
+ data-stability='Private'>
+ <propval name='label' type='string' value='Front Disk 10' />
+ </propgroup>
+ <propgroup name='binding' version='1' name-stability='Private'
+ data-stability='Private'>
+ <propval name='driver' type='string' value='mpt_sas' />
+ <propval name='devctl' type='string' value='/devices/pci@0,0/pci8086,3c06@2,2/pci15d9,691@0:devctl' />
+ <propval name='enclosure' type='uint32' value='1' />
+ <propval name='slot' type='uint32' value='2' />
+ </propgroup>
+ </node>
+ <node instance='11'>
+ <propgroup name='protocol' version='1' name-stability='Private'
+ data-stability='Private'>
+ <propval name='label' type='string' value='Front Disk 11' />
+ </propgroup>
+ <propgroup name='binding' version='1' name-stability='Private'
+ data-stability='Private'>
+ <propval name='driver' type='string' value='mpt_sas' />
+ <propval name='devctl' type='string' value='/devices/pci@0,0/pci8086,3c06@2,2/pci15d9,691@0:devctl' />
+ <propval name='enclosure' type='uint32' value='1' />
+ <propval name='slot' type='uint32' value='3' />
+ </propgroup>
+ </node>
+ <node instance='12'>
+ <propgroup name='protocol' version='1' name-stability='Private'
+ data-stability='Private'>
+ <propval name='label' type='string' value='Front Disk 12' />
+ </propgroup>
+ <propgroup name='binding' version='1' name-stability='Private'
+ data-stability='Private'>
+ <propval name='driver' type='string' value='mpt_sas' />
+ <propval name='devctl' type='string' value='/devices/pci@0,0/pci8086,3c06@2,2/pci15d9,691@0:devctl' />
+ <propval name='enclosure' type='uint32' value='1' />
+ <propval name='slot' type='uint32' value='4' />
+ </propgroup>
+ </node>
+ <node instance='13'>
+ <propgroup name='protocol' version='1' name-stability='Private'
+ data-stability='Private'>
+ <propval name='label' type='string' value='Front Disk 13' />
+ </propgroup>
+ <propgroup name='binding' version='1' name-stability='Private'
+ data-stability='Private'>
+ <propval name='driver' type='string' value='mpt_sas' />
+ <propval name='devctl' type='string' value='/devices/pci@0,0/pci8086,3c06@2,2/pci15d9,691@0:devctl' />
+ <propval name='enclosure' type='uint32' value='1' />
+ <propval name='slot' type='uint32' value='5' />
+ </propgroup>
+ </node>
+ <node instance='14'>
+ <propgroup name='protocol' version='1' name-stability='Private'
+ data-stability='Private'>
+ <propval name='label' type='string' value='Front Disk 14' />
+ </propgroup>
+ <propgroup name='binding' version='1' name-stability='Private'
+ data-stability='Private'>
+ <propval name='driver' type='string' value='mpt_sas' />
+ <propval name='devctl' type='string' value='/devices/pci@0,0/pci8086,3c06@2,2/pci15d9,691@0:devctl' />
+ <propval name='enclosure' type='uint32' value='1' />
+ <propval name='slot' type='uint32' value='6' />
+ </propgroup>
+ </node>
+ <node instance='15'>
+ <propgroup name='protocol' version='1' name-stability='Private'
+ data-stability='Private'>
+ <propval name='label' type='string' value='Front Disk 15' />
+ </propgroup>
+ <propgroup name='binding' version='1' name-stability='Private'
+ data-stability='Private'>
+ <propval name='driver' type='string' value='mpt_sas' />
+ <propval name='devctl' type='string' value='/devices/pci@0,0/pci8086,3c06@2,2/pci15d9,691@0:devctl' />
+ <propval name='enclosure' type='uint32' value='1' />
+ <propval name='slot' type='uint32' value='7' />
+ </propgroup>
+ </node>
+ <dependents grouping='children'>
+ <range name='disk' min='0' max='0'>
+ <enum-method name='disk' version='1' />
+ </range>
+ </dependents>
+ </range>
+</topology>
diff --git a/usr/src/pkg/manifests/service-fault-management.mf b/usr/src/pkg/manifests/service-fault-management.mf
index c30ff1be3d..c2dd3890ee 100644
--- a/usr/src/pkg/manifests/service-fault-management.mf
+++ b/usr/src/pkg/manifests/service-fault-management.mf
@@ -424,6 +424,8 @@ file path=usr/lib/fm/fmd/ipmitopo mode=0555
#
file path=usr/lib/fm/fmd/plugins/cpumem-retire.conf
file path=usr/lib/fm/fmd/plugins/cpumem-retire.so mode=0555
+file path=usr/lib/fm/fmd/plugins/disk-lights.conf
+file path=usr/lib/fm/fmd/plugins/disk-lights.so mode=0555
file path=usr/lib/fm/fmd/plugins/disk-monitor.conf
file path=usr/lib/fm/fmd/plugins/disk-monitor.so mode=0555
file path=usr/lib/fm/fmd/plugins/disk-transport.conf
@@ -565,6 +567,7 @@ file path=usr/lib/fm/llib-ltopo.ln variant.opensolaris.zone=__NODEFAULT
file path=usr/lib/fm/topo/maps/xfp-hc-topology.xml mode=0444
file path=usr/lib/fm/topo/plugins/disk.so mode=0555
file path=usr/lib/fm/topo/plugins/fac_prov_ipmi.so mode=0555
+file path=usr/lib/fm/topo/plugins/fac_prov_mptsas.so mode=0555
file path=usr/lib/fm/topo/plugins/ipmi.so mode=0555
file path=usr/lib/fm/topo/plugins/ses.so mode=0555
file path=usr/lib/fm/topo/plugins/xfp.so mode=0555
@@ -726,6 +729,9 @@ $(i386_ONLY)file path=usr/platform/i86pc/lib/fm/eft/gcpu.eft mode=0444
$(i386_ONLY)file path=usr/platform/i86pc/lib/fm/eft/gcpu_amd.eft mode=0444
$(i386_ONLY)file path=usr/platform/i86pc/lib/fm/eft/intel.eft mode=0444
$(i386_ONLY)file \
+ path=usr/platform/i86pc/lib/fm/topo/maps/Joyent-Compute-Platform-1101-disk-hc-topology.xml \
+ mode=0444
+$(i386_ONLY)file \
path=usr/platform/i86pc/lib/fm/topo/maps/Netra-X4200-M2-disk-hc-topology.xml \
mode=0444
$(i386_ONLY)file \
diff --git a/usr/src/uts/common/io/scsi/adapters/mpt_sas/mptsas.c b/usr/src/uts/common/io/scsi/adapters/mpt_sas/mptsas.c
index 632fa5d85a..8103ae938a 100644
--- a/usr/src/uts/common/io/scsi/adapters/mpt_sas/mptsas.c
+++ b/usr/src/uts/common/io/scsi/adapters/mpt_sas/mptsas.c
@@ -6056,10 +6056,7 @@ mptsas_handle_topo_change(mptsas_topo_change_list_t *topo_node,
mutex_enter(&mpt->m_mutex);
ptgt->m_led_status = 0;
- if (mptsas_flush_led_status(mpt, ptgt) != DDI_SUCCESS) {
- NDBG14(("mptsas: clear LED for tgt %x failed",
- ptgt->m_slot_num));
- }
+ (void) mptsas_flush_led_status(mpt, ptgt);
if (rval == DDI_SUCCESS) {
mptsas_tgt_free(&mpt->m_active->m_tgttbl,
ptgt->m_sas_wwn, ptgt->m_phymask);
@@ -11335,8 +11332,8 @@ led_control(mptsas_t *mpt, intptr_t data, int mode)
static int
get_disk_info(mptsas_t *mpt, intptr_t data, int mode)
{
- int i = 0;
- int count = 0;
+ uint16_t i = 0;
+ uint16_t count = 0;
int ret = 0;
mptsas_target_t *ptgt;
mptsas_disk_info_t *di;
@@ -11441,7 +11438,6 @@ mptsas_ioctl(dev_t dev, int cmd, intptr_t data, int mode, cred_t *credp,
dev_info_t *dip = NULL;
mptsas_phymask_t phymask = 0;
struct devctl_iocdata *dcp = NULL;
- uint32_t slotstatus = 0;
char *addr = NULL;
mptsas_target_t *ptgt = NULL;
@@ -11519,10 +11515,7 @@ mptsas_ioctl(dev_t dev, int cmd, intptr_t data, int mode, cred_t *credp,
ptgt->m_led_status &=
~(1 << (MPTSAS_LEDCTL_LED_OK2RM - 1));
}
- if (mptsas_flush_led_status(mpt, ptgt) != DDI_SUCCESS) {
- NDBG14(("mptsas_ioctl: set LED for tgt %s "
- "failed %x", addr, slotstatus));
- }
+ (void) mptsas_flush_led_status(mpt, ptgt);
mutex_exit(&mpt->m_mutex);
ndi_dc_freehdl(dcp);
}
@@ -14246,10 +14239,7 @@ mptsas_create_virt_lun(dev_info_t *pdip, struct scsi_inquiry *inq, char *guid,
if (mdi_rtn == MDI_SUCCESS) {
mutex_enter(&mpt->m_mutex);
ptgt->m_led_status = 0;
- if (mptsas_flush_led_status(mpt, ptgt) != DDI_SUCCESS) {
- NDBG14(("mptsas: clear LED for slot %x "
- "failed", ptgt->m_slot_num));
- }
+ (void) mptsas_flush_led_status(mpt, ptgt);
mutex_exit(&mpt->m_mutex);
}
if (mdi_rtn == MDI_NOT_SUPPORTED) {
@@ -14608,10 +14598,7 @@ phys_create_done:
if (ndi_rtn == NDI_SUCCESS) {
mutex_enter(&mpt->m_mutex);
ptgt->m_led_status = 0;
- if (mptsas_flush_led_status(mpt, ptgt) != DDI_SUCCESS) {
- NDBG14(("mptsas: clear LED for tgt %x "
- "failed", ptgt->m_slot_num));
- }
+ (void) mptsas_flush_led_status(mpt, ptgt);
mutex_exit(&mpt->m_mutex);
}
@@ -15529,7 +15516,8 @@ mptsas_flush_led_status(mptsas_t *mpt, mptsas_target_t *ptgt)
/*
* send sep request, use enclosure/slot addressing
*/
-static int mptsas_send_sep(mptsas_t *mpt, mptsas_target_t *ptgt,
+static int
+mptsas_send_sep(mptsas_t *mpt, mptsas_target_t *ptgt,
uint32_t *status, uint8_t act)
{
Mpi2SepRequest_t req;
@@ -15538,15 +15526,27 @@ static int mptsas_send_sep(mptsas_t *mpt, mptsas_target_t *ptgt,
ASSERT(mutex_owned(&mpt->m_mutex));
+ /*
+ * We only support SEP control of directly-attached targets, in which
+ * case the "SEP" we're talking to is a virtual one contained within
+ * the HBA itself. This is necessary because DA targets typically have
+ * no other mechanism for LED control. Targets for which a separate
+ * enclosure service processor exists should be controlled via ses(7d)
+ * or sgen(7d). Furthermore, since such requests can time out, they
+ * should be made in user context rather than in response to
+ * asynchronous fabric changes.
+ *
+ * In addition, we do not support this operation for RAID volumes,
+ * since there is no slot associated with them.
+ */
+ if (!(ptgt->m_deviceinfo & DEVINFO_DIRECT_ATTACHED) ||
+ ptgt->m_phymask == 0) {
+ return (ENOTTY);
+ }
+
bzero(&req, sizeof (req));
bzero(&rep, sizeof (rep));
- /* Do nothing for RAID volumes */
- if (ptgt->m_phymask == 0) {
- NDBG14(("mptsas_send_sep: Skip RAID volumes"));
- return (DDI_FAILURE);
- }
-
req.Function = MPI2_FUNCTION_SCSI_ENCLOSURE_PROCESSOR;
req.Action = act;
req.Flags = MPI2_SEP_REQ_FLAGS_ENCLOSURE_SLOT_ADDRESS;
@@ -15560,26 +15560,41 @@ static int mptsas_send_sep(mptsas_t *mpt, mptsas_target_t *ptgt,
if (ret != 0) {
mptsas_log(mpt, CE_NOTE, "mptsas_send_sep: passthru SEP "
"Processor Request message error %d", ret);
- return (DDI_FAILURE);
+ return (ret);
}
/* do passthrough success, check the ioc status */
if (LE_16(rep.IOCStatus) != MPI2_IOCSTATUS_SUCCESS) {
- if ((LE_16(rep.IOCStatus) & MPI2_IOCSTATUS_MASK) ==
- MPI2_IOCSTATUS_INVALID_FIELD) {
- mptsas_log(mpt, CE_NOTE, "send sep act %x: Not "
- "supported action, loginfo %x", act,
- LE_32(rep.IOCLogInfo));
- return (DDI_FAILURE);
- }
mptsas_log(mpt, CE_NOTE, "send_sep act %x: ioc "
- "status:%x", act, LE_16(rep.IOCStatus));
- return (DDI_FAILURE);
+ "status:%x loginfo %x", act, LE_16(rep.IOCStatus),
+ LE_32(rep.IOCLogInfo));
+ switch (LE_16(rep.IOCStatus) & MPI2_IOCSTATUS_MASK) {
+ case MPI2_IOCSTATUS_INVALID_FUNCTION:
+ case MPI2_IOCSTATUS_INVALID_VPID:
+ case MPI2_IOCSTATUS_INVALID_FIELD:
+ case MPI2_IOCSTATUS_INVALID_STATE:
+ case MPI2_IOCSTATUS_OP_STATE_NOT_SUPPORTED:
+ case MPI2_IOCSTATUS_CONFIG_INVALID_ACTION:
+ case MPI2_IOCSTATUS_CONFIG_INVALID_TYPE:
+ case MPI2_IOCSTATUS_CONFIG_INVALID_PAGE:
+ case MPI2_IOCSTATUS_CONFIG_INVALID_DATA:
+ case MPI2_IOCSTATUS_CONFIG_NO_DEFAULTS:
+ return (EINVAL);
+ case MPI2_IOCSTATUS_BUSY:
+ return (EBUSY);
+ case MPI2_IOCSTATUS_INSUFFICIENT_RESOURCES:
+ return (EAGAIN);
+ case MPI2_IOCSTATUS_INVALID_SGL:
+ case MPI2_IOCSTATUS_INTERNAL_ERROR:
+ case MPI2_IOCSTATUS_CONFIG_CANT_COMMIT:
+ default:
+ return (EIO);
+ }
}
if (act != MPI2_SEP_REQ_ACTION_WRITE_STATUS) {
*status = LE_32(rep.SlotStatus);
}
- return (DDI_SUCCESS);
+ return (0);
}
int