summaryrefslogtreecommitdiffstats
path: root/sys/dev/isp/isp_freebsd.h
diff options
context:
space:
mode:
authormjacob <mjacob@FreeBSD.org>2002-02-04 21:04:25 +0000
committermjacob <mjacob@FreeBSD.org>2002-02-04 21:04:25 +0000
commit6d2dbc994419de3783c034893bc621f5c5adb66f (patch)
tree6bc5ce3afd87000d0d3bd51b3708bd7ccb43fbc6 /sys/dev/isp/isp_freebsd.h
parent451f832b15e0cbdcd136f1c8cbea2496ca4fa965 (diff)
downloadFreeBSD-src-6d2dbc994419de3783c034893bc621f5c5adb66f.zip
FreeBSD-src-6d2dbc994419de3783c034893bc621f5c5adb66f.tar.gz
+ A variety of 23XX changes:
disable MWI on 2300 based on function code, set an 'isp_port' for the 2312- it's a separate instance, but the NVRAM is shared, and the second port's NVRAM is at offset 256. + Enable RIO operation for LVD SCSI cards. This makes a *big* difference as even under reasonable load we get batched completions of about 30 commands at a time on, say, an ISP1080. + Do 'continuation' mailbox commands- this allows us to specify a work area within the softc and 'continue' repeated mailbox commands. This is more or less on an ad hoc basis and is currently only used for firmware loading (which f/w now loads substantially faster becuase the calling thread is only woken when all the f/w words are loaded- not for each one of the 40000 f/w words that gets loaded). + If we're about to return from isp_intr with a 'bogus interrupt' indication, and we're not a 23XX card, check to see whether the semaphore register is currently *2* (not *1* as it should be) and whether there's an async completion sitting in outgoing mailbox0. This seems to capture cases of lost fast posting and RIO interrupts that the 12160 && 1080 have been known to pump out under extreme load (extreme, as in > 250 active commands). + FC_SCRATCH_ACQUIRE/FC_SCRATCH_RELEASE macros. + Endian correct swizzle/unswizzle of an ATIO2 that has a WWPN in it. MFC after: 1 week
Diffstat (limited to 'sys/dev/isp/isp_freebsd.h')
-rw-r--r--sys/dev/isp/isp_freebsd.h11
1 files changed, 8 insertions, 3 deletions
diff --git a/sys/dev/isp/isp_freebsd.h b/sys/dev/isp/isp_freebsd.h
index fbf9def..1aa6b83 100644
--- a/sys/dev/isp/isp_freebsd.h
+++ b/sys/dev/isp/isp_freebsd.h
@@ -71,7 +71,7 @@
#define HANDLE_LOOPSTATE_IN_OUTER_LAYERS 1
-typedef void ispfwfunc __P((int, int, int, const u_int16_t **));
+typedef void ispfwfunc __P((int, int, int, u_int16_t **));
#ifdef ISP_TARGET_MODE
#define ISP_TARGET_FUNCTIONS 1
@@ -192,6 +192,9 @@ struct isposinfo {
isp->isp_mboxbsy = 0
#define MBOX_RELEASE(isp)
+#define FC_SCRATCH_ACQUIRE(isp)
+#define FC_SCRATCH_RELEASE(isp)
+
#ifndef SCSI_GOOD
#define SCSI_GOOD SCSI_STATUS_OK
#endif
@@ -363,9 +366,10 @@ static INLINE void
isp_mbox_wait_complete(struct ispsoftc *isp)
{
if (isp->isp_osinfo.intsok) {
+ int lim = ((isp->isp_mbxwrk0)? 120 : 20) * hz;
isp->isp_osinfo.mboxwaiting = 1;
(void) msleep(&isp->isp_osinfo.mboxwaiting,
- &isp->isp_lock, PRIBIO, "isp_mboxwaiting", 10 * hz);
+ &isp->isp_lock, PRIBIO, "isp_mboxwaiting", lim);
if (isp->isp_mboxbsy != 0) {
isp_prt(isp, ISP_LOGWARN,
"Interrupting Mailbox Command (0x%x) Timeout",
@@ -374,8 +378,9 @@ isp_mbox_wait_complete(struct ispsoftc *isp)
}
isp->isp_osinfo.mboxwaiting = 0;
} else {
+ int lim = ((isp->isp_mbxwrk0)? 240 : 60) * 10000;
int j;
- for (j = 0; j < 60 * 10000; j++) {
+ for (j = 0; j < lim; j++) {
u_int16_t isr, sema, mbox;
if (isp->isp_mboxbsy == 0) {
break;
OpenPOWER on IntegriCloud