Date: Thu, 27 Feb 1997 19:58:25 -0800 (PST) From: "Justin T. Gibbs" <gibbs> To: CVS-committers, cvs-all, cvs-sys Subject: cvs commit: src/sys/dev/aic7xxx aic7xxx.seq src/sys/i386/scsi aic7xxx.c Message-ID: <199702280358.TAA11960@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
gibbs 97/02/27 19:58:24 Modified: sys/dev/aic7xxx aic7xxx.seq Log: No longer clear all interrupt status when the sequencer is reset. The only time that we really want to do this is when a bus reset causes the sequencer to be reset and the kernel driver now handles this case. Remove some reordering in the select2 routine that wasn't necessary. It was an experimental fix for a race condition I fixed elsewhere, and confused the code flow. Don't bother looping on a parity error in the mesgout loop since we can't see parity errors on out phases. Clean up the mesgin_identify code. In the old days, we "snooped" for tag messages and used this as an indicator of whether or not the target was using tagged transactions. This forced the sequencer to ack the identify before determining if a valid SCB matched the target meaning that an abort message to handle this case might not be seen before the target entered a data phase. Since we can determin the "tagged-ness" of a target by looking it up in the array of busy targets (recently introduced), we can determine this up front simplifying the search code as well as ensuring we can follow the SCSI specs method for rejecting a reselection. When an SCB is placed on the free list, set its SCB_TAG to SCB_LIST_NULL. This makes it much easier for the kernel driver to find active SCBs on the card during error recovery. Revision Changes Path 1.63 +29 -40 src/sys/dev/aic7xxx/aic7xxx.seq Modified: sys/i386/scsi aic7xxx.c Log: Functionalize some code that was repeated throughout the driver. Fix a bug in the initialization of the busreset_args that left the B channel args unitialized and the A channel ones initialized to B's vales. Oops. If we get a NO_IDENT sequencer interrupt (the reconnecting target didn't issue an identify or botched it), reset the bus instead of panicing. We should be able to recover from this error. In the AWAITING_MSG handler, order messages by severity. Since the message we send is based on a flag on the SCB, it is possible, during error recovery, to get more than one flag set. This is fine since any time a new flag is set, it is meant to take us to a more draconian level of recovery. This also ensures that we don't lose any "history" of what the command has gone through. When we reset the bus, reset the "send ordered tag" bitmask. Clear some additional interrupt status when we perform a bus reset. Revision Changes Path 1.104 +78 -51 src/sys/i386/scsi/aic7xxx.c
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199702280358.TAA11960>