diff options
author | mjacob <mjacob@FreeBSD.org> | 2001-05-28 21:20:43 +0000 |
---|---|---|
committer | mjacob <mjacob@FreeBSD.org> | 2001-05-28 21:20:43 +0000 |
commit | 19b20edd4063454edfe9d46a08ec2249527d1e8b (patch) | |
tree | 2ff029f1c3035ecb1a70ed1b7e80e5a0ed1b794c /sys/dev/isp/isp_tpublic.h | |
parent | f80decdc0cdb69cc9099b1ba2b51651e287082f2 (diff) | |
download | FreeBSD-src-19b20edd4063454edfe9d46a08ec2249527d1e8b.zip FreeBSD-src-19b20edd4063454edfe9d46a08ec2249527d1e8b.tar.gz |
Spring MegaChange #1.
----
Make a device for each ISP- really usable only with devfs and add an ioctl
entry point (this can be used to (re)set debug levels, reset the HBA,
rescan the fabric, issue lips, etc).
----
Add in a kernel thread for Fibre Channel cards. The purpose of this
thread is to be woken up to clean up after Fibre Channel events
block things. Basically, any FC event that casts doubt on the
location or identify of FC devices blocks the queues. When, and
if, we get the PORT DATABASE CHANGED or NAME SERVER DATABASE CHANGED
async event, we activate the kthread which will then, in full thread
context, re-evaluate the local loop and/or the fabric. When it's
satisfied that things are stable, it can then release the blocked
queues and let commands flow again.
The prior mechanism was a lazy evaluation. That is, the next command
to come down the pipe after change events would pay the full price
for re-evaluation. And if this was done off of a softcall, it really
could hang up the system.
These changes brings the FreeBSD port more in line with the Solaris,
Linux and NetBSD ports. It also, more importantly, gets us being
more proactive about topology changes which could then be reflected
upwards to CAM so that the periph driver can be informed sooner
rather than later when things arrive or depart.
---
Add in the (correct) usage of locking macros- we now have lock transition
macros which allow us to transition from holding the CAM lock (Giant)
and grabbing the softc lock and vice versa. Switch over to having this
HBA do real locking. Some folks claim this won't be a win. They're right.
But you have to start somewhere, and this will begin to teach us how
to DTRT for HBAs, etc.
--
Start putting in prototype 2300 support. Add back in LIP
and Loop Reset as async events that each platform will handle.
Add in another int_bogus instrumentation point.
Do some more substantial target mode cleanups.
MFC after: 8 weeks
Diffstat (limited to 'sys/dev/isp/isp_tpublic.h')
-rw-r--r-- | sys/dev/isp/isp_tpublic.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/dev/isp/isp_tpublic.h b/sys/dev/isp/isp_tpublic.h index 03f832d..4a03c99 100644 --- a/sys/dev/isp/isp_tpublic.h +++ b/sys/dev/isp/isp_tpublic.h @@ -223,11 +223,12 @@ typedef struct tmd_cmd { u_int8_t cd_reserved[_TMD_PAD_LEN]; } tmd_cmd_t; -#define CDFL_BUSY 0x01 /* this command is not on a free list */ +#define CDFL_SNSVALID 0x01 /* sense data (from f/w) valid */ #define CDFL_NODISC 0x02 /* disconnects disabled */ #define CDFL_SENTSENSE 0x04 /* last action sent sense data */ #define CDFL_SENTSTATUS 0x08 /* last action sent status */ #define CDFL_ERROR 0x10 /* last action ended in error */ +#define CDFL_BUSY 0x40 /* this command is not on a free list */ #define CDFL_PRIVATE_0 0x80 /* private layer flags */ #define CDFH_SNSVALID 0x01 /* sense data valid */ |