Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 20 Jan 2003 12:17:35 -0800 (PST)
From:      "Justin T. Gibbs" <gibbs@FreeBSD.org>
To:        cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   cvs commit: src/sys/dev/aic7xxx aic79xx.c aic79xx.h aic79xx.reg aic79xx.seq aic79xx_inline.h aic79xx_osm.c aic79xx_pci.c
Message-ID:  <200301202017.h0KKHZRF022658@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
gibbs       2003/01/20 12:17:35 PST

  Modified files:
    sys/dev/aic7xxx      aic79xx.c aic79xx.h aic79xx.reg 
                         aic79xx.seq aic79xx_inline.h 
                         aic79xx_osm.c aic79xx_pci.c 
  Log:
  aic79xx.c:
          Implement the SCB_SILENT flag.  This is useful for
          hushing up the driver during DV or other operations
          that we expect to cause transmission errors.  The
          messages will still print if the SHOW_MASKED_ERRORS
          debug option is enabled.
  
          Save and restore the NEGOADDR address when setting
          new transfer settings.  The sequencer performs lookups
          in the negotiation table too and it expects NEGOADDR
          to remain consistent across pause/unpause sessions.
  
          Consistently use "offset" instead of "period" to determine
          if we are running sync or not.
  
          Add a SHOW_MESSAGES diagnostic for when we assert ATN
          during message processing.
  
          Print out IU, QAS, and RTI features when showing transfer options.
  
          Limit the syncrate after all option conformance
          changes have taken place in ahd_devlimited_syncrate.
          Changes in options may change the final syncrate we
          accept.
  
          Keep a copy of the hs_mailbox in our softc so that
          we can perform read/modify/write operations on the
          hs_mailbox without having to pause the sequencer to
          read the last written value.  Use the ENINT_COALESS
          flag in the hs_mailbox to toggle interrupt coalessing.
  
          Add entrypoints for enabling interrupt coalessing and
          setting both a timeout (how long to wait for commands
          to be coalessed) and a maximum commands to coaless value.
          Add a statistics timer that decides when to enable or
          disable interrupt coalessing based on load.
  
          Add a routine, ahd_reset_cmds_pending() which is used
          to update the CMDS_PENDING sequencer variable whenever
          error recovery compeltes SCBs without notifying the
          sequencer.  Since ahd_reset_cmds_pending is called
          during ahd_unpause() only if we've aborted SCBs, its
          call to ahd_flush_qoutfifo should not cause recursion
          through ahd_run_qoutfifo().  A panic has been added to
          ensure that this recursion does not occur.
  
          In ahd_search_qinfifo, update the CMDS_PENDING sequencer
          variable directly.  ahd_search_qinififo can be called
          in situations where using ahd_reset_cmds_pending() might
          cause recursion.  Since we can safely determine the
          exact number to reduce CMDS_PENDING by in this scenario
          without running the qoutfifo, the manual update is sufficient.
  
          Clean up diagnostics.
          Add ahd_flush_qoutfifo() which will run the qoutfifo
          as well as complete any commands sitting on the
          sequencer's COMPLETE_SCB lists or the good status FIFO.
          Use this routine in several places that did similar
          things in an add-hoc, but incomplete, fashion.  A call
          to this routine was also added to ahd_abort_scbs() to
          close a race.
  
          In ahd_pause_and_flushwork() only return once selections
          are safely disabled.  Flush all completed commands via
          ahd_flush_qoutfifo().
  
          Remove "Now packetized" diagnostic now that this
          information is incorperated into the actual negotiation
          messages that are displayed.
  
          When forcing renegotiation, don't clober the current
          ppr_options.  Much of the driver uses this information
          to determine if we are currently packetized or not.
  
          Remove some stray spaces at column 1 in ahd_set_tags.
  
          When complaining about getting a host message loop
          request with no pending messages, print out the
          SCB_CONTROL register down on the card.
  
          Modify the ahd_sent_msg() routine to handle a search
          for an outgoing identify message.  Use this to detect
          a msg reject on an identify message which typically
          indicates that the target thought we were packetized.
          Force a renegotiation in this case.
  
          In ahd_search_qinfifo(), wait more effectively for SCB
          DMA activities to cease.  We also disable SCB fetch
          operations since we are about to change the qinfifo
          and any fetch in progress will likely be invalidated.
  
          In ahd_qinfifo_count(), fix the qinfifo empty case.
  
          In ahd_dump_card_state(), print out CCSCBCTL in the
          correct mode.
  
          If we are a narrow controller, don't set the current
          width to unknown when forcing a future negotiation.
          This just confuses the code into attempting a wide
          negotiation on a narrow bus.
  
          Add support for task management function completions.
  
          Modify ahd_handle_devreset so that it can handle
          lun resets in addition to target resets.  Use
          ahd_handle_devreset for lun and target reset task
          management functions.
  
          Handle the abort task TMF race case better.  We now
          wait until any current selections are over and then
          set the TMF back to zero.  This should cause the sequencer
          to ignore the abort TMF completion should it occur.
  
          Correct a bug in the illegal phase handler that
          caused us to drop down to narrow when handling the
          unexpected command phase case after 3rd party
          reset of a packetized device.
  
          Indicate the features, bugs, and flags set in the softc
          that are used to control firmware patch download when
          booting verbose.
  
  aic79xx.h:
          Add coalessing and HS_MAILBOX fields.
  
          Add per-softc variables for the stats "daemon".
  
          Add a debug option for interrupt coalessing activities.
  
          Add two new softc flags:
          o AHD_UPDATE_PEND_CMDS
            Run ahd_reset_cmds_pending() on the next unpause.
  
          o AHD_RUNNING_QOUTFIFO
            Used to catch recursion through ahd_run_qoutfifo().
  
  aic79xx.reg:
          Correct register addresses related to the software timer
          and the DFDBCTL register.
  
          Add constants paramaterizing the software timer.
  
          Add scratch ram locations for storing interrupt coalessing
          tunables.
  
          Break INTMASK in SEQITNCTL out into INTMASK1 and INTMASK2.
          In at least the REV A, these are writable bits.  We make
          use of that for a swtimer workaround in the sequencer.
  
          Since HS_MAILBOX autoclears, provide a sequencer variable
          to store its contents.
  
          Add SEQINT codes for handling task management completions.
  
  aic79xx.seq:
          Correct ignore wide residue processing check for
          a wide negotiation being in effect.  We must be
          in the SCSI register window in order to access the
          negotiation table.
  
          Use the software timer and a commands completed count to
          implement interrupt coalessing.  The command complete is
          deferred until either the maximum command threshold or a
          the expiration of a command deferral timer.  If we have
          more SCBs to complete to the host (sitting in COMPLETE_SCB
          lists), always try to coaless them up to our coalessing limit.
          If coalessing is enabled, but we have fewer commands oustanting
          than the host's min coalessing limit, complete the command
          immediately.
  
          Add code to track the number of commands outstanding.
          Commands are outstanding from the time they are placed
          into the execution queue until the DMA to post completion
          is setup.
  
          Add a workaround for intvec_2 interrupts on the H2A4.
          In H2A4, the mode pointer is not saved for intvec2, but
          is restored on iret.  This can lead to the restoration
          of a bogus mode ptr.  Manually clear the intmask bits and
          do a normal return to compensate.  We use intvec_2 to
          track interrupt coalessing timeouts.
  
          Since we cannot disable the swtimer's countdown, simply
          mask its interrupt once we no longer care about it firing.
  
          In idle_loop_cchan, update LOCAL_HS_MAILBOX everytime
          we are notified of an HS_MAILBOX update via the
          HS_MAILBOX_ACT bit in QOFF_CTLSTA.  We have to use a
          local copy of persistant portions of the HS_MAILBOX as
          the mailbox auto-clears on any read.
  
          Move the test for the cfg4istat interrupt up an instruction
          to hopefully close a race between the next outgoing selection
          and our disabling of selections.
  
          Add a missing ret to the last instruction in load_overrun_buf.
  
          Add notifications to the host of task management
          completions as well as the completions for commands
          that completed successfully before their corresponding
          TMF could be sent.
  
          Hold a critical section during select-out processing
          until we have a fully identified connection.  This
          removes a race condition with the legacy abort handler.
  
          Correct a few spelling errors in some comments.
  
  aic79xx_inline.h:
          Call ahd_reset_cmds_pending() in ahd_unpause if required.
  
          Update cmdcmplt interrupt statistics in our interrupt
          handler.
  
          Allow callers to ahd_send_scb() to set the task management
          function.
  
  aic79xx_pci.c:
          Disable SERR and pause the controller prior to performing
          our mmapped I/O test.  The U320 controllers do not support
          "auto-access-pause".
  
  aic79xx_osm.c:
          Set the task management function now that
          ahd_send_scb() doesn't do it for us.  We
          also perform a lun reset in response to BDR
          requests to packetized devices.
  
  Revision  Changes    Path
  1.8       +545 -95   src/sys/dev/aic7xxx/aic79xx.c
  1.7       +62 -6     src/sys/dev/aic7xxx/aic79xx.h
  1.6       +94 -21    src/sys/dev/aic7xxx/aic79xx.reg
  1.6       +110 -17   src/sys/dev/aic7xxx/aic79xx.seq
  1.6       +8 -4      src/sys/dev/aic7xxx/aic79xx_inline.h
  1.7       +7 -2      src/sys/dev/aic7xxx/aic79xx_osm.c
  1.7       +18 -7     src/sys/dev/aic7xxx/aic79xx_pci.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?200301202017.h0KKHZRF022658>