Author: mav
Date: Thu Mar 23 06:47:48 2017
New Revision: 315819
URL: https://svnweb.freebsd.org/changeset/base/315819

Log:
  MFC r314967: Add support for XPT_GET_SIM_KNOB in FC mode.

Modified:
  stable/10/sys/dev/mpt/mpt.h
  stable/10/sys/dev/mpt/mpt_cam.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/dev/mpt/mpt.h
==============================================================================
--- stable/10/sys/dev/mpt/mpt.h Thu Mar 23 06:47:08 2017        (r315818)
+++ stable/10/sys/dev/mpt/mpt.h Thu Mar 23 06:47:48 2017        (r315819)
@@ -612,8 +612,8 @@ struct mpt_softc {
                        unsigned int initiator_id;
                } spi;
                struct {
-                       char wwnn[19];
-                       char wwpn[19];
+                       uint64_t wwnn;
+                       uint64_t wwpn;
                        uint32_t portid;
                } fc;
        } scinfo;

Modified: stable/10/sys/dev/mpt/mpt_cam.c
==============================================================================
--- stable/10/sys/dev/mpt/mpt_cam.c     Thu Mar 23 06:47:08 2017        
(r315818)
+++ stable/10/sys/dev/mpt/mpt_cam.c     Thu Mar 23 06:47:48 2017        
(r315819)
@@ -482,31 +482,20 @@ mpt_read_config_info_fc(struct mpt_softc
        mpt->scinfo.fc.portid = mpt->mpt_fcport_page0.PortIdentifier;
 
        mpt_lprt(mpt, MPT_PRT_INFO,
-           "FC Port Page 0: Topology <%s> WWNN 0x%08x%08x WWPN 0x%08x%08x "
+           "FC Port Page 0: Topology <%s> WWNN 0x%16jx WWPN 0x%16jx "
            "Speed %u-Gbit\n", topology,
-           mpt->mpt_fcport_page0.WWNN.High,
-           mpt->mpt_fcport_page0.WWNN.Low,
-           mpt->mpt_fcport_page0.WWPN.High,
-           mpt->mpt_fcport_page0.WWPN.Low,
+           (uintmax_t)mpt->scinfo.fc.wwnn, (uintmax_t)mpt->scinfo.fc.wwpn,
            mpt->mpt_fcport_speed);
        MPT_UNLOCK(mpt);
        ctx = device_get_sysctl_ctx(mpt->dev);
        tree = device_get_sysctl_tree(mpt->dev);
 
-       snprintf(mpt->scinfo.fc.wwnn, sizeof (mpt->scinfo.fc.wwnn),
-           "0x%08x%08x", mpt->mpt_fcport_page0.WWNN.High,
-           mpt->mpt_fcport_page0.WWNN.Low);
-
-       snprintf(mpt->scinfo.fc.wwpn, sizeof (mpt->scinfo.fc.wwpn),
-           "0x%08x%08x", mpt->mpt_fcport_page0.WWPN.High,
-           mpt->mpt_fcport_page0.WWPN.Low);
-
-       SYSCTL_ADD_STRING(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
-           "wwnn", CTLFLAG_RD, mpt->scinfo.fc.wwnn, 0,
+       SYSCTL_ADD_QUAD(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
+           "wwnn", CTLFLAG_RD, &mpt->scinfo.fc.wwnn,
            "World Wide Node Name");
 
-       SYSCTL_ADD_STRING(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
-            "wwpn", CTLFLAG_RD, mpt->scinfo.fc.wwpn, 0,
+       SYSCTL_ADD_QUAD(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
+            "wwpn", CTLFLAG_RD, &mpt->scinfo.fc.wwpn,
             "World Wide Port Name");
 
        MPT_LOCK(mpt);
@@ -3528,6 +3517,36 @@ mpt_action(struct cam_sim *sim, union cc
                KASSERT(ccb->ccb_h.status, ("zero ccb sts at %d", __LINE__));
                break;
        }
+       case XPT_GET_SIM_KNOB:
+       {
+               struct ccb_sim_knob *kp = &ccb->knob;
+
+               if (mpt->is_fc) {
+                       kp->xport_specific.fc.wwnn = mpt->scinfo.fc.wwnn;
+                       kp->xport_specific.fc.wwpn = mpt->scinfo.fc.wwpn;
+                       switch (mpt->role) {
+                       case MPT_ROLE_NONE:
+                               kp->xport_specific.fc.role = KNOB_ROLE_NONE;
+                               break;
+                       case MPT_ROLE_INITIATOR:
+                               kp->xport_specific.fc.role = 
KNOB_ROLE_INITIATOR;
+                               break;
+                       case MPT_ROLE_TARGET:
+                               kp->xport_specific.fc.role = KNOB_ROLE_TARGET;
+                               break;
+                       case MPT_ROLE_BOTH:
+                               kp->xport_specific.fc.role = KNOB_ROLE_BOTH;
+                               break;
+                       }
+                       kp->xport_specific.fc.valid =
+                           KNOB_VALID_ADDRESS | KNOB_VALID_ROLE;
+                       ccb->ccb_h.status = CAM_REQ_CMP;
+               } else {
+                       ccb->ccb_h.status = CAM_REQ_INVALID;
+               }
+               xpt_done(ccb);
+               break;
+       }
        case XPT_PATH_INQ:              /* Path routing inquiry */
        {
                struct ccb_pathinq *cpi = &ccb->cpi;
_______________________________________________
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