diff options
author | mjacob <mjacob@FreeBSD.org> | 2002-02-04 21:04:25 +0000 |
---|---|---|
committer | mjacob <mjacob@FreeBSD.org> | 2002-02-04 21:04:25 +0000 |
commit | 6d2dbc994419de3783c034893bc621f5c5adb66f (patch) | |
tree | 6bc5ce3afd87000d0d3bd51b3708bd7ccb43fbc6 /sys/dev/isp/isp_freebsd.h | |
parent | 451f832b15e0cbdcd136f1c8cbea2496ca4fa965 (diff) | |
download | FreeBSD-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.h | 11 |
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; |