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
_______________________________________________
svn-src-stable-10@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-stable-10
To unsubscribe, send any mail to "svn-src-stable-10-unsubscr...@freebsd.org"

Reply via email to