Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/dev/ic clean up some f/w revision stuff. clean up some d...



details:   https://anonhg.NetBSD.org/src/rev/d153df884b8e
branches:  trunk
changeset: 479708:d153df884b8e
user:      mjacob <mjacob%NetBSD.org@localhost>
date:      Mon Dec 20 00:39:16 1999 +0000

description:
clean up some f/w revision stuff. clean up some dualbus stuff.

diffstat:

 sys/dev/ic/isp.c |  182 ++++++++++++++++++++++++++++++------------------------
 1 files changed, 102 insertions(+), 80 deletions(-)

diffs (259 lines):

diff -r 5c842c7e3535 -r d153df884b8e sys/dev/ic/isp.c
--- a/sys/dev/ic/isp.c  Mon Dec 20 00:38:21 1999 +0000
+++ b/sys/dev/ic/isp.c  Mon Dec 20 00:39:16 1999 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: isp.c,v 1.44 1999/12/16 05:35:42 mjacob Exp $ */
+/* $NetBSD: isp.c,v 1.45 1999/12/20 00:39:16 mjacob Exp $ */
 /*
  * Copyright (C) 1997, 1998, 1999 National Aeronautics & Space Administration
  * All rights reserved.
@@ -789,25 +789,35 @@
        isp->isp_reqidx = isp->isp_reqodx = 0;
 
        /*
-        *  Turn on Fast Posting, LVD transitions
+        * Turn on Fast Posting, LVD transitions
+        *
+        * Ultra2 F/W always has had fast posting (and LVD transitions)
+        *
+        * Ultra and older (i.e., SBus) cards may not. Assume SBus cards
+        * do not, and only guess that 4.55.0 <= x < 5.0.0 (initiator
+        * only) and x >= 7.55 (initiator/target) has fast posting.
         */
 
-       if (IS_ULTRA2(isp) ||
-           ISP_FW_REVX(isp->isp_fwrev) >= ISP_FW_REV(7, 55, 0)) {
-               mbs.param[0] = MBOX_SET_FW_FEATURES;
+       mbs.param[0] = MBOX_SET_FW_FEATURES;
+       mbs.param[1] = 0;
+       if (IS_ULTRA2(isp))
+               mbs.param[1] |= FW_FEATURE_LVD_NOTIFY;
 #ifndef        ISP_NO_FASTPOST_SCSI
+       if ((ISP_FW_REVX(isp->isp_fwrev) >= ISP_FW_REV(4, 55, 0) &&
+           (ISP_FW_REVX(isp->isp_fwrev) < ISP_FW_REV(5, 0, 0))) ||
+           (ISP_FW_REVX(isp->isp_fwrev) >= ISP_FW_REV(7, 55, 0))) {
                mbs.param[1] |= FW_FEATURE_FAST_POST;
-#else
-               mbs.param[1] = 0;
+       }
 #endif
-               if (IS_ULTRA2(isp))
-                       mbs.param[1] |= FW_FEATURE_LVD_NOTIFY;
-               if (mbs.param[1] != 0) {
-                       isp_mboxcmd(isp, &mbs);
-                       if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-                               PRINTF("%s: unable enable FW features\n",
-                                   isp->isp_name);
-                       }
+       if (mbs.param[1] != 0) {
+               u_int16_t sfeat = mbs.param[1];
+               isp_mboxcmd(isp, &mbs);
+               if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
+                       PRINTF("%s: cannot enable FW features (0x%x)\n",
+                           isp->isp_name, sfeat);
+               } else {
+                       CFGPRINTF("%s: enabled FW features (0x%x)\n",
+                           isp->isp_name, sfeat);
                }
        }
 
@@ -861,13 +871,17 @@
                if (IS_ULTRA2(isp) && sdp->isp_lvdmode) {
                        sdf = DPARM_DEFAULT & ~DPARM_TQING;
                } else {
+                       int rvf = ISP_FW_REVX(isp->isp_fwrev);
                        sdf = DPARM_SAFE_DFLT;
+                       
                        /*
                         * It is not quite clear when this changed over so that
-                        * we could force narrow and async, so assume >= 7.55.
+                        * we could force narrow and async, so assume >= 7.55
+                        * for i/t F/W and = 4.55 for initiator f/w.
                         */
-                       if (ISP_FW_REVX(isp->isp_fwrev) >=
-                           ISP_FW_REV(7, 55, 0)) {
+                       if ((ISP_FW_REV(4, 55, 0) <= rvf &&
+                           (ISP_FW_REV(5, 0, 0) > rvf)) ||
+                           (ISP_FW_REV(7, 55, 0) <= rvf)) {
                                sdf |= DPARM_NARROW | DPARM_ASYNC;
                        }
                }
@@ -917,6 +931,7 @@
                }
                IDPRINTF(3, ("%s: set flags 0x%x got 0x%x back for target %d\n",
                    isp->isp_name, sdf, mbs.param[2], tgt));
+
 #else
                /*
                 * We don't update any information because we need to run
@@ -931,7 +946,9 @@
                 * seen yet.
                 */
                sdp->isp_devparam[tgt].cur_dflags &= ~DPARM_TQING;
-               if (ISP_FW_REVX(isp->isp_fwrev) >= ISP_FW_REV(7, 55, 0))
+               if ((ISP_FW_REV(4, 55, 0) <= ISP_FW_REVX(isp->isp_fwrev) &&
+                   (ISP_FW_REV(5, 0, 0) > ISP_FW_REVX(isp->isp_fwrev))) ||
+                   (ISP_FW_REVX(isp->isp_fwrev) >= ISP_FW_REV(7, 55, 0)))
                        maxlun = 32;
                else
                        maxlun = 8;
@@ -3719,7 +3736,7 @@
 {
        int tgt;
        mbreg_t mbs;
-       sdparam *sdp, *sdp_chan0, *sdp_chan1;
+       sdparam *sdp;
 
        if (IS_FC(isp)) {
                fcparam *fcp = (fcparam *) isp->isp_param;
@@ -3749,9 +3766,8 @@
                return;
        }
 
-       sdp_chan0 = (sdparam *) isp->isp_param;
-       sdp_chan1 = sdp_chan0 + 1;
-       sdp = sdp_chan0 + channel;
+       sdp = (sdparam *) isp->isp_param;
+       sdp += channel;
 
        /*
         * Been there, done that, got the T-shirt...
@@ -3776,27 +3792,29 @@
        /*
         * Now try and see whether we have specific values for them.
         */
-       mbs.param[0] = MBOX_GET_ACT_NEG_STATE;
-       isp_mboxcmd(isp, &mbs);
-       if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-               IDPRINTF(2, ("could not GET ACT NEG STATE\n"));
-               sdp_chan0->isp_req_ack_active_neg = 1;
-               sdp_chan0->isp_data_line_active_neg = 1;
-               if (IS_DUALBUS(isp)) {
-                       sdp_chan1->isp_req_ack_active_neg = 1;
-                       sdp_chan1->isp_data_line_active_neg = 1;
+       if ((isp->isp_confopts & ISP_CFG_NONVRAM) == 0) {
+               mbs.param[0] = MBOX_GET_ACT_NEG_STATE;
+               isp_mboxcmd(isp, &mbs);
+               if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
+                       IDPRINTF(2, ("could not GET ACT NEG STATE\n"));
+                       sdp->isp_req_ack_active_neg = 1;
+                       sdp->isp_data_line_active_neg = 1;
+               } else {
+                       sdp->isp_req_ack_active_neg =
+                           (mbs.param[1+channel] >> 4) & 0x1;
+                       sdp->isp_data_line_active_neg =
+                           (mbs.param[1+channel] >> 5) & 0x1;
                }
        } else {
-               sdp_chan0->isp_req_ack_active_neg = (mbs.param[1] >> 4) & 0x1;
-               sdp_chan0->isp_data_line_active_neg = (mbs.param[1] >> 5) & 0x1;
-               if (IS_DUALBUS(isp)) {
-                       sdp_chan1->isp_req_ack_active_neg =
-                           (mbs.param[2] >> 4) & 0x1;
-                       sdp_chan1->isp_data_line_active_neg =
-                           (mbs.param[2] >> 5) & 0x1;
-               }
+               sdp->isp_req_ack_active_neg = 1;
+               sdp->isp_data_line_active_neg = 1;
        }
 
+       IDPRINTF(3, ("%s: defaulting bus %d REQ/ACK Active Negation is %d\n",
+           isp->isp_name, channel, sdp->isp_req_ack_active_neg));
+       IDPRINTF(3, ("%s: defaulting bus %d DATA Active Negation is %d\n",
+           isp->isp_name, channel, sdp->isp_data_line_active_neg));
+
        /*
         * The trick here is to establish a default for the default (honk!)
         * state (dev_flags). Then try and get the current status from
@@ -3830,47 +3848,51 @@
                 * Don't get current target parameters if we've been
                 * told not to use NVRAM- it's really the same thing.
                 */
-               if (isp->isp_confopts & ISP_CFG_NONVRAM) {
-                       continue;
-               }
-
-               mbs.param[0] = MBOX_GET_TARGET_PARAMS;
-               mbs.param[1] = tgt << 8;
-               isp_mboxcmd(isp, &mbs);
-               if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-                       continue;
+               if ((isp->isp_confopts & ISP_CFG_NONVRAM) == 0) {
+
+                       mbs.param[0] = MBOX_GET_TARGET_PARAMS;
+                       mbs.param[1] = tgt << 8;
+                       isp_mboxcmd(isp, &mbs);
+                       if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
+                               continue;
+                       }
+                       sdp->isp_devparam[tgt].cur_dflags = mbs.param[2];
+                       sdp->isp_devparam[tgt].dev_flags = mbs.param[2];
+                       sdp->isp_devparam[tgt].cur_period = mbs.param[3] & 0xff;
+                       sdp->isp_devparam[tgt].cur_offset = mbs.param[3] >> 8;
+
+                       /*
+                        * The maximum period we can really see
+                        * here is 100 (decimal), or 400 ns.
+                        * For some unknown reason we sometimes
+                        * get back wildass numbers from the
+                        * boot device's parameters (alpha only).
+                        */
+                       if ((mbs.param[3] & 0xff) <= 0x64) {
+                               sdp->isp_devparam[tgt].sync_period =
+                                   mbs.param[3] & 0xff;
+                               sdp->isp_devparam[tgt].sync_offset =
+                                   mbs.param[3] >> 8;
+                       }
+
+                       /*
+                        * It is not safe to run Ultra Mode with a clock < 60.
+                        */
+                       if (((isp->isp_clock && isp->isp_clock < 60) ||
+                           (isp->isp_type < ISP_HA_SCSI_1020A)) &&
+                           (sdp->isp_devparam[tgt].sync_period <=
+                           (ISP_20M_SYNCPARMS & 0xff))) {
+                               sdp->isp_devparam[tgt].sync_offset =
+                                   ISP_10M_SYNCPARMS >> 8;
+                               sdp->isp_devparam[tgt].sync_period =
+                                   ISP_10M_SYNCPARMS & 0xff;
+                       }
                }
-               sdp->isp_devparam[tgt].cur_dflags = mbs.param[2];
-               sdp->isp_devparam[tgt].dev_flags = mbs.param[2];
-               sdp->isp_devparam[tgt].cur_period = mbs.param[3] & 0xff;
-               sdp->isp_devparam[tgt].cur_offset = mbs.param[3] >> 8;
-
-               /*
-                * The maximum period we can really see
-                * here is 100 (decimal), or 400 ns.
-                * For some unknown reason we sometimes
-                * get back wildass numbers from the
-                * boot device's parameters (alpha only).
-                */
-               if ((mbs.param[3] & 0xff) <= 0x64) {
-                       sdp->isp_devparam[tgt].sync_period =
-                           mbs.param[3] & 0xff;
-                       sdp->isp_devparam[tgt].sync_offset =
-                           mbs.param[3] >> 8;
-               }
-
-               /*
-                * It is not safe to run Ultra Mode with a clock < 60.
-                */
-               if (((isp->isp_clock && isp->isp_clock < 60) ||
-                   (isp->isp_type < ISP_HA_SCSI_1020A)) &&
-                   (sdp->isp_devparam[tgt].sync_period <=
-                   (ISP_20M_SYNCPARMS & 0xff))) {
-                       sdp->isp_devparam[tgt].sync_offset =
-                           ISP_10M_SYNCPARMS >> 8;
-                       sdp->isp_devparam[tgt].sync_period =
-                           ISP_10M_SYNCPARMS & 0xff;
-               }
+               IDPRINTF(3, ("%s: bus %d tgt %d flags %x offset %x period %x\n",
+                   isp->isp_name, channel, tgt,
+                   sdp->isp_devparam[tgt].dev_flags,
+                   sdp->isp_devparam[tgt].sync_period,
+                   sdp->isp_devparam[tgt].sync_period));
        }
 
        /*



Home | Main Index | Thread Index | Old Index