summaryrefslogtreecommitdiffstats
path: root/sys/dev/isp/ispvar.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/ispvar.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/ispvar.h')
-rw-r--r--sys/dev/isp/ispvar.h11
1 files changed, 9 insertions, 2 deletions
diff --git a/sys/dev/isp/ispvar.h b/sys/dev/isp/ispvar.h
index b0b694d..40d82d1 100644
--- a/sys/dev/isp/ispvar.h
+++ b/sys/dev/isp/ispvar.h
@@ -73,7 +73,7 @@ struct ispmdvec {
void (*dv_reset0) (struct ispsoftc *);
void (*dv_reset1) (struct ispsoftc *);
void (*dv_dregs) (struct ispsoftc *, const char *);
- const u_int16_t *dv_ispfw; /* ptr to f/w */
+ u_int16_t *dv_ispfw; /* ptr to f/w */
u_int16_t dv_conf1;
u_int16_t dv_clock; /* clock frequency */
};
@@ -350,7 +350,8 @@ typedef struct ispsoftc {
u_int32_t isp_maxluns; /* maximum luns supported */
u_int32_t isp_clock : 8, /* input clock */
- : 5,
+ : 4,
+ isp_port : 1, /* 23XX only */
isp_failed : 1, /* board failed */
isp_open : 1, /* opened (ioctl) */
isp_touched : 1, /* board ever seen? */
@@ -395,6 +396,10 @@ typedef struct ispsoftc {
volatile u_int16_t isp_lasthdls; /* last handle seed */
volatile u_int16_t isp_mboxtmp[MAX_MAILBOX];
volatile u_int16_t isp_lastmbxcmd; /* last mbox command sent */
+ volatile u_int16_t isp_mbxwrk0;
+ volatile u_int16_t isp_mbxwrk1;
+ volatile u_int16_t isp_mbxwrk2;
+ void * isp_mbxworkp;
/*
* Active commands are stored here, indexed by handle functions.
@@ -772,6 +777,8 @@ void isp_prt(struct ispsoftc *, int level, const char *, ...);
* MBOX_NOTIFY_COMPLETE(struct ispsoftc *) notification of mbox cmd donee
* MBOX_RELEASE(struct ispsoftc *) release lock on mailbox regs
*
+ * FC_SCRATCH_ACQUIRE(struct ispsoftc *) acquire lock on FC scratch area
+ * FC_SCRATCH_RELEASE(struct ispsoftc *) acquire lock on FC scratch area
*
* SCSI_GOOD SCSI 'Good' Status
* SCSI_CHECK SCSI 'Check Condition' Status
OpenPOWER on IntegriCloud