Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 2 Jul 1999 16:06:40 -0700 (PDT)
From:      Matt Jacob <mjacob@FreeBSD.org>
To:        cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   cvs commit: src/sys/dev/isp isp.c
Message-ID:  <199907022306.QAA09306@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
mjacob      1999/07/02 16:06:40 PDT

  Modified files:
    sys/dev/isp          isp.c 
  Log:
  Roll revision levels. Add support for the Qlogic 2200 (warn about
  not having SCSI_ISP_SCCLUN config defined if we don't have f/w for
  the 2200- it's resident firmware uses SCCLUN (65535 luns)). Change
  the way the default LoopID is gathered (it's now a platform specific
  define so that some attempt at a synthetic WWN can be made in case
  NVRAM isn't readable).
  
  Change initialization of options a bit- don't use ADISC. Set
  FullDuplex mode if config options tells us to do so. Do not use
  FULL_LOGIN after LIP- it's the right thing to do but it causes too
  much loop disruption (Loop Resets). Sanity check some default
  values. Redo construction of port and node WWNs based upon what we
  have- if we have 2 in the top nibble, we can have distinct port
  and node WWNs. Clean up some SCCLUN related code that we obviously
  had never compiled (:-(). Audit commands coming int ispscsicmd and
  don't throw commands at Fibre devices that do not have Class 3
  service parameters TARGET ROLE defined.
  
  Clean up f/w initialization a bit. Add Fabric support (or at least
  the first blush of it). Whew - way too much to describe here.
  Basically, after a LIP, hang out until we see a Loop Up or a Port
  DataBase Change async event, then see if we're on a Fabric
  (GET_PORT_NAME of FL_PORT_ID). If we are, try and scan the fabric
  controller for fabric devices using the GetAllNext SNS subcommand.
  As we find devices, announce them to the outer layer. Try and do
  some guard code for broken (Brocade) SNS servers (that get stuck
  in loops- gotta maybe do this a different way using the GP_ID3 cmd
  instead).  Then do a scan of the lower (local loop) ids using a
  GET_PORT_NAME to see if the f/w has logged into anything at that
  loop id. If so, then do a GET_PORT_DATABASE command.  Do this scan
  into a local database. At this point we can say the loop is 'Ready'.
  After this, we merge our local loop port database with our stored
  port database- in a as yet to be really fully exercised fashion we
  try and follow the logic of something having moved around. The
  first time we see something at a Loop ID, we fix it, for the purpose
  of this system instance, at that Loop ID. If things shift around
  so it ends up somewhere else, we still keep it at this Loop ID (our
  'Target') but use the new (moved) Loop ID when we actually throw
  commands at it. Check for insane cases of different Loop IDs both
  claiming to have the same WWN- if that happens, invalidate both.
  Notify the outer layer of devices that have arrived and devices
  that have gone away. *Finally*, when this is done, search the
  softc's database of Fabric devices and perform logout/login actions.
  The Qlogic f/w maintains logout/login for all local loop devices.
  We have to maintain logout/login for fabric devices- total PITA.
  Expect to see this area undergo more change over time.
  
  Revision  Changes    Path
  1.21      +707 -130  src/sys/dev/isp/isp.c



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199907022306.QAA09306>