aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorMatt Jacob <mjacob@FreeBSD.org>2002-08-17 17:23:15 +0000
committerMatt Jacob <mjacob@FreeBSD.org>2002-08-17 17:23:15 +0000
commit8a5f89b96d9afd57d1e47251a291040690e5b7cb (patch)
tree7fa14beeb04ddaee6b9382672616c2a4393dd1b3 /sys
parentfc3bbaaa8b1136805cb3868a4f4cd8afb7df7c85 (diff)
Notes
Diffstat (limited to 'sys')
-rw-r--r--sys/dev/isp/isp_freebsd.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/sys/dev/isp/isp_freebsd.c b/sys/dev/isp/isp_freebsd.c
index 25d5976661f2c..b6580dce4f6e0 100644
--- a/sys/dev/isp/isp_freebsd.c
+++ b/sys/dev/isp/isp_freebsd.c
@@ -3040,7 +3040,19 @@ isp_async(struct ispsoftc *isp, ispasync_t cmd, void *arg)
isp_prt(isp, ISP_LOGERR,
"Internal Firmware Error on bus %d @ RISC Address 0x%x",
mbox6, mbox1);
+#ifdef ISP_FW_CRASH_DUMP
+ /*
+ * XXX: really need a thread to do this right.
+ */
+ if (IS_FC(isp)) {
+ FCPARAM(isp)->isp_fwstate = FW_CONFIG_WAIT;
+ FCPARAM(isp)->isp_loopstate = LOOP_NIL;
+ isp_freeze_loopdown(isp, "f/w crash");
+ isp_fw_dump(isp);
+ }
isp_reinit(isp);
+ isp_async(isp, ISPASYNC_FW_RESTARTED, NULL);
+#endif
break;
}
case ISPASYNC_UNHANDLED_RESPONSE: