summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormjacob <mjacob@FreeBSD.org>2001-06-05 17:11:06 +0000
committermjacob <mjacob@FreeBSD.org>2001-06-05 17:11:06 +0000
commitdeca6805ae57c5d64b52905f2a0064c54881550f (patch)
tree33f732ef0e9949e66d65e87895c8494aa1e99a8b
parentcc3f2849e93f52ab35e5f1913ee718488fb90751 (diff)
downloadFreeBSD-src-deca6805ae57c5d64b52905f2a0064c54881550f.zip
FreeBSD-src-deca6805ae57c5d64b52905f2a0064c54881550f.tar.gz
Fix botch for state levels. Role minor release. Start adding code for a
'force logout' path. MFC after: 4 weeks
-rw-r--r--sys/dev/isp/isp.c7
-rw-r--r--sys/dev/isp/isp_freebsd.h4
-rw-r--r--sys/dev/isp/ispvar.h13
3 files changed, 14 insertions, 10 deletions
diff --git a/sys/dev/isp/isp.c b/sys/dev/isp/isp.c
index 7797a97..6680fc4 100644
--- a/sys/dev/isp/isp.c
+++ b/sys/dev/isp/isp.c
@@ -1685,7 +1685,7 @@ isp_pdb_sync(struct ispsoftc *isp)
if (pdb.pdb_loopid == lp->loopid && lp->portid ==
(u_int32_t) BITS2WORD(pdb.pdb_portid_bits) &&
nwwnn == lp->node_wwn && nwwpn == lp->port_wwn &&
- lp->roles == nrole) {
+ lp->roles == nrole && lp->force_logout == 0) {
lp->loggedin = lp->valid = 1;
isp_prt(isp, ISP_LOGINFO, lretained,
(int) (lp - fcp->portdb),
@@ -1694,6 +1694,8 @@ isp_pdb_sync(struct ispsoftc *isp)
}
}
+ lp->force_logout = 0;
+
if (fcp->isp_fwstate != FW_READY ||
fcp->isp_loopstate != LOOP_SYNCING_PDB) {
return (-1);
@@ -2075,6 +2077,8 @@ isp_scan_loop(struct ispsoftc *isp)
* No need to notify anyone- go for the next one.
*/
if (i < hival) {
+ isp_prt(isp, ISP_LOGINFO, retained,
+ fcp->portdb[i].loopid, i, fcp->portdb[i].portid);
continue;
}
@@ -3791,7 +3795,6 @@ isp_parse_status(struct ispsoftc *isp, ispstatusreq_t *sp, XS_T *xs)
XS_SETERR(xs, HBA_SELTIMEOUT);
}
return;
-
case RQCS_PORT_LOGGED_OUT:
/*
* It was there (maybe)- treat as a selection timeout.
diff --git a/sys/dev/isp/isp_freebsd.h b/sys/dev/isp/isp_freebsd.h
index 0e25d91..46b5235 100644
--- a/sys/dev/isp/isp_freebsd.h
+++ b/sys/dev/isp/isp_freebsd.h
@@ -1,7 +1,7 @@
/* $FreeBSD$ */
/*
* Qlogic ISP SCSI Host Adapter FreeBSD Wrapper Definitions (CAM version)
- * Copyright (c) 1997, 1998, 1999, 2000 by Matthew Jacob
+ * Copyright (c) 1997, 1998, 1999, 2000, 2001 by Matthew Jacob
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -28,7 +28,7 @@
#define _ISP_FREEBSD_H
#define ISP_PLATFORM_VERSION_MAJOR 5
-#define ISP_PLATFORM_VERSION_MINOR 7
+#define ISP_PLATFORM_VERSION_MINOR 8
/*
* We're not ready for primetime yet
diff --git a/sys/dev/isp/ispvar.h b/sys/dev/isp/ispvar.h
index 35c778a..1621519 100644
--- a/sys/dev/isp/ispvar.h
+++ b/sys/dev/isp/ispvar.h
@@ -230,10 +230,10 @@ typedef struct {
typedef struct {
u_int32_t isp_fwoptions : 16,
- : 3,
+ : 2,
isp_iid_set : 1,
loop_seen_once : 1,
- isp_loopstate : 3, /* Current Loop State */
+ isp_loopstate : 4, /* Current Loop State */
isp_fwstate : 3, /* ISP F/W state */
isp_gotdparms : 1,
isp_topo : 3,
@@ -264,7 +264,8 @@ typedef struct {
struct lportdb {
u_int
loopid : 8,
- : 2,
+ : 1,
+ force_logout : 1,
was_fabric_dev : 1,
fabric_dev : 1,
loggedin : 1,
@@ -297,9 +298,9 @@ typedef struct {
#define LOOP_SCANNING_FABRIC 3
#define LOOP_FSCAN_DONE 4
#define LOOP_SCANNING_LOOP 5
-#define LOOP_LSCAN_DONE 4
-#define LOOP_SYNCING_PDB 6
-#define LOOP_READY 7
+#define LOOP_LSCAN_DONE 6
+#define LOOP_SYNCING_PDB 7
+#define LOOP_READY 8
#define TOPO_NL_PORT 0
#define TOPO_FL_PORT 1
OpenPOWER on IntegriCloud