PERFORCE change 101438 for review
Kip Macy
kmacy at FreeBSD.org
Thu Jul 13 08:47:41 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=101438
Change 101438 by kmacy at kmacy_storage:sun4v_work_stable on 2006/07/13 08:47:02
Fix endian conversions in event messages, ioc page retrievals, and
zero-data-length commands. This appears to be enough to make
targets attach and do simple I/O.
Affected files ...
.. //depot/projects/kmacy_sun4v_stable/src/sys/dev/mpt/mpt.c#9 edit
.. //depot/projects/kmacy_sun4v_stable/src/sys/dev/mpt/mpt_cam.c#5 edit
.. //depot/projects/kmacy_sun4v_stable/src/sys/sun4v/conf/GENERIC#6 edit
.. //depot/projects/kmacy_sun4v_stable/src/sys/sun4v/include/bus.h#2 edit
.. //depot/projects/kmacy_sun4v_stable/src/sys/sun4v/sun4v/hviommu.c#2 edit
.. //depot/projects/kmacy_sun4v_stable/src/sys/sun4v/sun4v/nexus.c#2 edit
Differences ...
==== //depot/projects/kmacy_sun4v_stable/src/sys/dev/mpt/mpt.c#9 (text+ko) ====
@@ -516,6 +516,10 @@
handled = 0;
msg = (MSG_EVENT_NOTIFY_REPLY *)reply_frame;
+ msg->EventDataLength = le16toh(msg->EventDataLength);
+ msg->IOCStatus = le16toh(msg->IOCStatus);
+ msg->IOCLogInfo = le32toh(msg->IOCLogInfo);
+ msg->Event = le32toh(msg->Event);
MPT_PERS_FOREACH(mpt, pers)
handled += pers->event(mpt, req, msg);
@@ -1539,6 +1543,7 @@
((Action == MPI_CONFIG_ACTION_PAGE_WRITE_CURRENT
|| Action == MPI_CONFIG_ACTION_PAGE_WRITE_NVRAM)
? MPI_SGE_FLAGS_HOST_TO_IOC : MPI_SGE_FLAGS_IOC_TO_HOST)));
+ se->FlagsLength = htole32(se->FlagsLength);
cfgp->MsgContext = htole32(req->index | MPT_REPLY_HANDLER_CONFIG);
mpt_check_doorbell(mpt);
==== //depot/projects/kmacy_sun4v_stable/src/sys/dev/mpt/mpt_cam.c#5 (text+ko) ====
@@ -961,6 +961,7 @@
MPI_pSGE_SET_FLAGS(se1,
(MPI_SGE_FLAGS_LAST_ELEMENT | MPI_SGE_FLAGS_END_OF_BUFFER |
MPI_SGE_FLAGS_SIMPLE_ELEMENT | MPI_SGE_FLAGS_END_OF_LIST));
+ se1->FlagsLength = htole32(se1->FlagsLength);
goto out;
}
@@ -1032,6 +1033,7 @@
MPI_SGE_FLAGS_END_OF_BUFFER;
}
MPI_pSGE_SET_FLAGS(se, tf);
+ se->FlagsLength = htole32(se->FlagsLength);
}
if (seg == nseg) {
@@ -1149,6 +1151,7 @@
MPI_SGE_FLAGS_END_OF_BUFFER;
}
MPI_pSGE_SET_FLAGS(se, tf);
+ se->FlagsLength = htole32(se->FlagsLength);
se++;
seg++;
dm_segs++;
@@ -1362,6 +1365,7 @@
MPI_pSGE_SET_FLAGS(se1,
(MPI_SGE_FLAGS_LAST_ELEMENT | MPI_SGE_FLAGS_END_OF_BUFFER |
MPI_SGE_FLAGS_SIMPLE_ELEMENT | MPI_SGE_FLAGS_END_OF_LIST));
+ se1->FlagsLength = htole32(se1->FlagsLength);
goto out;
}
@@ -1433,6 +1437,7 @@
MPI_SGE_FLAGS_END_OF_BUFFER;
}
MPI_pSGE_SET_FLAGS(se, tf);
+ se->FlagsLength = htole32(se->FlagsLength);
}
if (seg == nseg) {
@@ -1548,6 +1553,7 @@
MPI_SGE_FLAGS_END_OF_BUFFER;
}
MPI_pSGE_SET_FLAGS(se, tf);
+ se->FlagsLength = htole32(se->FlagsLength);
se++;
seg++;
dm_segs++;
@@ -1966,17 +1972,21 @@
mpt_cam_event(struct mpt_softc *mpt, request_t *req,
MSG_EVENT_NOTIFY_REPLY *msg)
{
+ uint32_t data0, data1;
+
+ data0 = le32toh(msg->Data[0]);
+ data1 = le32toh(msg->Data[1]);
printf("%s(%d): msg->Event 0x%x\n",__FUNCTION__,__LINE__,le32toh(msg->Event));
- switch(le32toh(msg->Event) & 0xFF) {
+ switch(msg->Event & 0xFF) {
case MPI_EVENT_UNIT_ATTENTION:
mpt_prt(mpt, "Bus: 0x%02x TargetID: 0x%02x\n",
- (msg->Data[0] >> 8) & 0xff, msg->Data[0] & 0xff);
+ (data0 >> 8) & 0xff, data0 & 0xff);
break;
case MPI_EVENT_IOC_BUS_RESET:
/* We generated a bus reset */
mpt_prt(mpt, "IOC Bus Reset Port: %d\n",
- (msg->Data[0] >> 8) & 0xff);
+ (data0 >> 8) & 0xff);
xpt_async(AC_BUS_RESET, mpt->path, NULL);
break;
@@ -1994,81 +2004,81 @@
/*
* In general this means a device has been added to the loop.
*/
- mpt_prt(mpt, "Rescan Port: %d\n", (msg->Data[0] >> 8) & 0xff);
+ mpt_prt(mpt, "Rescan Port: %d\n", (data0 >> 8) & 0xff);
/* xpt_async(AC_FOUND_DEVICE, path, NULL); */
break;
case MPI_EVENT_LINK_STATUS_CHANGE:
mpt_prt(mpt, "Port %d: LinkState: %s\n",
- (msg->Data[1] >> 8) & 0xff,
- ((msg->Data[0] & 0xff) == 0)? "Failed" : "Active");
+ (data1 >> 8) & 0xff,
+ ((data0 & 0xff) == 0)? "Failed" : "Active");
break;
case MPI_EVENT_LOOP_STATE_CHANGE:
- switch ((msg->Data[0] >> 16) & 0xff) {
+ switch ((data0 >> 16) & 0xff) {
case 0x01:
mpt_prt(mpt,
"Port 0x%x: FC LinkEvent: LIP(%02x,%02x) "
"(Loop Initialization)\n",
- (msg->Data[1] >> 8) & 0xff,
- (msg->Data[0] >> 8) & 0xff,
- (msg->Data[0] ) & 0xff);
- switch ((msg->Data[0] >> 8) & 0xff) {
+ (data1 >> 8) & 0xff,
+ (data0 >> 8) & 0xff,
+ (data0 ) & 0xff);
+ switch ((data0 >> 8) & 0xff) {
case 0xF7:
- if ((msg->Data[0] & 0xff) == 0xF7) {
+ if ((data0 & 0xff) == 0xF7) {
mpt_prt(mpt, "Device needs AL_PA\n");
} else {
mpt_prt(mpt, "Device %02x doesn't like "
"FC performance\n",
- msg->Data[0] & 0xFF);
+ data0 & 0xFF);
}
break;
case 0xF8:
- if ((msg->Data[0] & 0xff) == 0xF7) {
+ if ((data0 & 0xff) == 0xF7) {
mpt_prt(mpt, "Device had loop failure "
"at its receiver prior to acquiring"
" AL_PA\n");
} else {
mpt_prt(mpt, "Device %02x detected loop"
" failure at its receiver\n",
- msg->Data[0] & 0xFF);
+ data0 & 0xFF);
}
break;
default:
mpt_prt(mpt, "Device %02x requests that device "
"%02x reset itself\n",
- msg->Data[0] & 0xFF,
- (msg->Data[0] >> 8) & 0xFF);
+ data0 & 0xFF,
+ (data0 >> 8) & 0xFF);
break;
}
break;
case 0x02:
mpt_prt(mpt, "Port 0x%x: FC LinkEvent: "
"LPE(%02x,%02x) (Loop Port Enable)\n",
- (msg->Data[1] >> 8) & 0xff, /* Port */
- (msg->Data[0] >> 8) & 0xff, /* Character 3 */
- (msg->Data[0] ) & 0xff /* Character 4 */);
+ (data1 >> 8) & 0xff, /* Port */
+ (data0 >> 8) & 0xff, /* Character 3 */
+ (data0 ) & 0xff /* Character 4 */);
break;
case 0x03:
mpt_prt(mpt, "Port 0x%x: FC LinkEvent: "
"LPB(%02x,%02x) (Loop Port Bypass)\n",
- (msg->Data[1] >> 8) & 0xff, /* Port */
- (msg->Data[0] >> 8) & 0xff, /* Character 3 */
- (msg->Data[0] ) & 0xff /* Character 4 */);
+ (data1 >> 8) & 0xff, /* Port */
+ (data0 >> 8) & 0xff, /* Character 3 */
+ (data0 ) & 0xff /* Character 4 */);
break;
default:
mpt_prt(mpt, "Port 0x%x: FC LinkEvent: Unknown "
"FC event (%02x %02x %02x)\n",
- (msg->Data[1] >> 8) & 0xff, /* Port */
- (msg->Data[0] >> 16) & 0xff, /* Event */
- (msg->Data[0] >> 8) & 0xff, /* Character 3 */
- (msg->Data[0] ) & 0xff /* Character 4 */);
+ (data1 >> 8) & 0xff, /* Port */
+ (data0 >> 16) & 0xff, /* Event */
+ (data0 >> 8) & 0xff, /* Character 3 */
+ (data0 ) & 0xff /* Character 4 */);
}
break;
case MPI_EVENT_LOGOUT:
mpt_prt(mpt, "FC Logout Port: %d N_PortID: %02x\n",
- (msg->Data[1] >> 8) & 0xff, msg->Data[0]);
+ (data1 >> 8) & 0xff, data0);
break;
case MPI_EVENT_EVENT_CHANGE:
mpt_lprt(mpt, MPT_PRT_DEBUG,
==== //depot/projects/kmacy_sun4v_stable/src/sys/sun4v/conf/GENERIC#6 (text+ko) ====
@@ -98,7 +98,7 @@
#device ahc # AHA2940 and onboard AIC7xxx devices
#device isp # Qlogic family
#device ispfw # Firmware module for Qlogic host adapters
-#device mpt # LSI-Logic MPT-Fusion (not yet)
+device mpt # LSI-Logic MPT-Fusion (not yet)
#device ncr # NCR/Symbios Logic
#device sym # NCR/Symbios Logic (newer chipsets + those of `ncr')
#device esp # NCR53c9x (FEPS/FAS366)
==== //depot/projects/kmacy_sun4v_stable/src/sys/sun4v/include/bus.h#2 (text+ko) ====
==== //depot/projects/kmacy_sun4v_stable/src/sys/sun4v/sun4v/hviommu.c#2 (text+ko) ====
==== //depot/projects/kmacy_sun4v_stable/src/sys/sun4v/sun4v/nexus.c#2 (text+ko) ====
@@ -329,32 +329,30 @@
goto fail;
}
+ if ((rman_get_flags(res) & RF_SHAREABLE) == 0)
+ flags |= INTR_EXCL;
+
+ /* We depend here on rman_activate_resource() being idempotent. */
+ if ((error = rman_activate_resource(res)))
+ goto fail;
+
+ error = inthand_add(device_get_nameunit(child), ihdl,
+ intr, arg, flags, cookiep);
+
cpuid = 0;
-
if (hvio_intr_settarget(ihdl, cpuid) != H_EOK) {
error = ENXIO;
goto fail;
}
-
if (hvio_intr_setstate(ihdl, HV_INTR_IDLE_STATE) != H_EOK) {
error = ENXIO;
goto fail;
}
-
if (hvio_intr_setvalid(ihdl, HV_INTR_VALID) != H_EOK) {
error = ENXIO;
goto fail;
}
- if ((rman_get_flags(res) & RF_SHAREABLE) == 0)
- flags |= INTR_EXCL;
-
- /* We depend here on rman_activate_resource() being idempotent. */
- if ((error = rman_activate_resource(res)))
- goto fail;
-
- error = inthand_add(device_get_nameunit(child), ihdl,
- intr, arg, flags, cookiep);
fail:
More information about the p4-projects
mailing list