svn commit: r291507 - stable/10/sys/dev/isp
Alexander Motin
mav at FreeBSD.org
Mon Nov 30 21:35:05 UTC 2015
Author: mav
Date: Mon Nov 30 21:35:03 2015
New Revision: 291507
URL: https://svnweb.freebsd.org/changeset/base/291507
Log:
MFC r290978: Add real initial support for RQSTYPE_RPT_ID_ACQ.
Modified:
stable/10/sys/dev/isp/isp.c
stable/10/sys/dev/isp/isp_library.c
stable/10/sys/dev/isp/ispmbox.h
Directory Properties:
stable/10/ (props changed)
Modified: stable/10/sys/dev/isp/isp.c
==============================================================================
--- stable/10/sys/dev/isp/isp.c Mon Nov 30 21:34:17 2015 (r291506)
+++ stable/10/sys/dev/isp/isp.c Mon Nov 30 21:35:03 2015 (r291507)
@@ -6192,6 +6192,9 @@ isp_parse_async_fc(ispsoftc_t *isp, uint
static int
isp_handle_other_response(ispsoftc_t *isp, int type, isphdr_t *hp, uint32_t *optrp)
{
+ isp_ridacq_t rid;
+ int chan, c;
+
switch (type) {
case RQSTYPE_STATUS_CONT:
isp_prt(isp, ISP_LOG_WARN1, "Ignored Continuation Response");
@@ -6199,6 +6202,23 @@ isp_handle_other_response(ispsoftc_t *is
case RQSTYPE_MARKER:
isp_prt(isp, ISP_LOG_WARN1, "Marker Response");
return (1);
+ case RQSTYPE_RPT_ID_ACQ:
+ isp_get_ridacq(isp, (isp_ridacq_t *)hp, &rid);
+ if (rid.ridacq_format == 0) {
+ for (chan = 0; chan < isp->isp_nchan; chan++) {
+ fcparam *fcp = FCPARAM(isp, chan);
+ if (fcp->role == ISP_ROLE_NONE)
+ continue;
+ c = (chan == 0) ? 127 : (chan - 1);
+ if (rid.ridacq_map[c / 16] & (1 << (c % 16)))
+ isp_async(isp, ISPASYNC_CHANGE_NOTIFY,
+ chan, ISPASYNC_CHANGE_OTHER);
+ }
+ } else {
+ isp_async(isp, ISPASYNC_CHANGE_NOTIFY,
+ rid.ridacq_vp_index, ISPASYNC_CHANGE_OTHER);
+ }
+ return (1);
case RQSTYPE_ATIO:
case RQSTYPE_CTIO:
case RQSTYPE_ENABLE_LUN:
@@ -6219,15 +6239,6 @@ isp_handle_other_response(ispsoftc_t *is
}
#endif
/* FALLTHROUGH */
- case RQSTYPE_RPT_ID_ACQ:
- if (IS_24XX(isp)) {
- isp_ridacq_t rid;
- isp_get_ridacq(isp, (isp_ridacq_t *)hp, &rid);
- if (rid.ridacq_format == 0) {
- }
- return (1);
- }
- /* FALLTHROUGH */
case RQSTYPE_REQUEST:
default:
ISP_DELAY(100);
Modified: stable/10/sys/dev/isp/isp_library.c
==============================================================================
--- stable/10/sys/dev/isp/isp_library.c Mon Nov 30 21:34:17 2015 (r291506)
+++ stable/10/sys/dev/isp/isp_library.c Mon Nov 30 21:35:03 2015 (r291507)
@@ -1733,6 +1733,10 @@ isp_get_ridacq(ispsoftc_t *isp, isp_rida
int i;
isp_get_hdr(isp, &src->ridacq_hdr, &dst->ridacq_hdr);
ISP_IOXGET_32(isp, &src->ridacq_handle, dst->ridacq_handle);
+ ISP_IOXGET_8(isp, &src->ridacq_vp_acquired, dst->ridacq_vp_acquired);
+ ISP_IOXGET_8(isp, &src->ridacq_vp_setup, dst->ridacq_vp_setup);
+ ISP_IOXGET_8(isp, &src->ridacq_vp_index, dst->ridacq_vp_index);
+ ISP_IOXGET_8(isp, &src->ridacq_vp_status, dst->ridacq_vp_status);
ISP_IOXGET_16(isp, &src->ridacq_vp_port_lo, dst->ridacq_vp_port_lo);
ISP_IOXGET_8(isp, &src->ridacq_vp_port_hi, dst->ridacq_vp_port_hi);
ISP_IOXGET_8(isp, &src->ridacq_format, dst->ridacq_format);
@@ -1742,17 +1746,6 @@ isp_get_ridacq(ispsoftc_t *isp, isp_rida
for (i = 0; i < sizeof (src->ridacq_reserved1) / sizeof (src->ridacq_reserved1[0]); i++) {
ISP_IOXGET_16(isp, &src->ridacq_reserved1[i], dst->ridacq_reserved1[i]);
}
- if (dst->ridacq_format == 0) {
- ISP_IOXGET_8(isp, &src->un.type0.ridacq_vp_acquired, dst->un.type0.ridacq_vp_acquired);
- ISP_IOXGET_8(isp, &src->un.type0.ridacq_vp_setup, dst->un.type0.ridacq_vp_setup);
- ISP_IOXGET_16(isp, &src->un.type0.ridacq_reserved0, dst->un.type0.ridacq_reserved0);
- } else if (dst->ridacq_format == 1) {
- ISP_IOXGET_16(isp, &src->un.type1.ridacq_vp_count, dst->un.type1.ridacq_vp_count);
- ISP_IOXGET_8(isp, &src->un.type1.ridacq_vp_index, dst->un.type1.ridacq_vp_index);
- ISP_IOXGET_8(isp, &src->un.type1.ridacq_vp_status, dst->un.type1.ridacq_vp_status);
- } else {
- ISP_MEMZERO(&dst->un, sizeof (dst->un));
- }
}
Modified: stable/10/sys/dev/isp/ispmbox.h
==============================================================================
--- stable/10/sys/dev/isp/ispmbox.h Mon Nov 30 21:34:17 2015 (r291506)
+++ stable/10/sys/dev/isp/ispmbox.h Mon Nov 30 21:35:03 2015 (r291507)
@@ -1485,18 +1485,10 @@ typedef struct {
typedef struct {
isphdr_t ridacq_hdr;
uint32_t ridacq_handle;
- union {
- struct {
- uint8_t ridacq_vp_acquired;
- uint8_t ridacq_vp_setup;
- uint16_t ridacq_reserved0;
- } type0; /* type 0 */
- struct {
- uint16_t ridacq_vp_count;
- uint8_t ridacq_vp_index;
- uint8_t ridacq_vp_status;
- } type1; /* type 1 */
- } un;
+ uint8_t ridacq_vp_acquired;
+ uint8_t ridacq_vp_setup;
+ uint8_t ridacq_vp_index;
+ uint8_t ridacq_vp_status;
uint16_t ridacq_vp_port_lo;
uint8_t ridacq_vp_port_hi;
uint8_t ridacq_format; /* 0 or 1 */
@@ -1506,8 +1498,11 @@ typedef struct {
#define RIDACQ_STS_COMPLETE 0
#define RIDACQ_STS_UNACQUIRED 1
-#define RIDACQ_STS_CHANGED 20
-
+#define RIDACQ_STS_CHANGED 2
+#define RIDACQ_STS_SNS_TIMEOUT 3
+#define RIDACQ_STS_SNS_REJECTED 4
+#define RIDACQ_STS_SCR_TIMEOUT 5
+#define RIDACQ_STS_SCR_REJECTED 6
/*
* Simple Name Server Data Structures
More information about the svn-src-stable-10
mailing list