freebsd-src/sys/dev/aic7xxx
Justin T. Gibbs 72df3c5621 Sync Perforce IDs, add tranceiver state change support, and correct
numerous error recovery buglets.

Many thanks to Tor Egge for his assistance in diagnosing problems with
the error recovery code.

aic7xxx.c:
	Report missed bus free events using their own sequencer interrupt
	code to avoid confusion with other "bad phase" interrupts.

	Remove a delay used in debugging.  This delay could only be hit
	in certain, very extreme, error recovery scenarios.

	Handle transceiver state changes correctly.  You can now
	plug an SE device into a hot-plug LVD bus without hanging
	the controller.

	When stepping through a critical section, panic if we step
	more than a reasonable number of times.

	After a bus reset, disable bus reset interupts until we either
	our first attempt to (re)select another device, or another device
	attemps to select us.  This removes the need to busy wait in
	kernel for the scsi reset line to fall yet still ensures we
	see any reset events that impact the state of either our initiator
	or target roles.  Before this change, we had the potential of
	servicing a "storm" of reset interrupts if the reset line was
	held for a significant amount of time.

	Indicate the current sequencer address whenever we dump the
	card's state.

aic7xxx.reg:
	Transceiver state change register definitions.

	Add the missed bussfree sequencer interrupt code.

	Re-enable the scsi reset interrupt if it has been
	disabled before every attempt to (re)select a device
	and when we have been selected as a target.

	When being (re)selected, check to see if the selection
	dissappeared just after we enabled our bus free interrupt.
	If the bus has gone free again, go back to the idle loop
	and wait for another selection.

	Note two locations where we should change our behavior
	if ATN is still raised.  If ATN is raised during the
	presentation of a command complete or disconnect message,
	we should ignore the message and expect the target to put
	us in msgout phase.  We don't currently do this as it
	requires some code re-arrangement so that critical sections
	can be properly placed around our handling of these two
	events.  Otherwise, we cannot guarantee that the check of
	ATN is atomic relative to our acking of the message in
	byte (the kernel could assert ATN).

	Only set the IDENTIFY_SEEN flag after we have settled
	on the SCB for this transaction.  The kernel looks at
	this flag before assuming that SCB_TAG is valid.  This
	avoids confusion during certain types of error recovery.

	Add a critical section around findSCB.  We cannot allow
	the kernel to remove an entry from the disconnected
	list while we are traversing it.  Ditto for get_free_or_disc_scb.

aic7xxx_freebsd.c:
	Only assume that SCB_TAG is accurate if IDENTIFY_SEEN is
	set in SEQ_FLAGS.

	Fix a typo that caused us to execute some code for the
	non-SCB paging case when paging SCBs.  This only occurred
	during error recovery.
2000-11-10 20:13:41 +00:00
..
aicasm Sync perforce IDs. 2000-11-10 19:54:17 +00:00
ahc_eisa.c Move aicasm to its own subdirectory. 2000-09-16 20:02:28 +00:00
ahc_pci.c Add Perforce RCSIDs for easy revision correlation to my local tree. 2000-09-22 22:18:05 +00:00
aic7xxx.c Sync Perforce IDs, add tranceiver state change support, and correct 2000-11-10 20:13:41 +00:00
aic7xxx.h Sync Perforce IDs, add tranceiver state change support, and correct 2000-11-10 20:13:41 +00:00
aic7xxx.reg Sync Perforce IDs, add tranceiver state change support, and correct 2000-11-10 20:13:41 +00:00
aic7xxx.seq Sync Perforce IDs, add tranceiver state change support, and correct 2000-11-10 20:13:41 +00:00
aic7xxx_93cx6.c Sync Perforce IDs, add tranceiver state change support, and correct 2000-11-10 20:13:41 +00:00
aic7xxx_93cx6.h Sync Perforce IDs, add tranceiver state change support, and correct 2000-11-10 20:13:41 +00:00
aic7xxx_freebsd.c Sync Perforce IDs, add tranceiver state change support, and correct 2000-11-10 20:13:41 +00:00
aic7xxx_freebsd.h Remove unneeded <stddef.h> #includes. 2000-10-29 16:57:42 +00:00
aic7xxx_inline.h Sync Perforce IDs, add tranceiver state change support, and correct 2000-11-10 20:13:41 +00:00
aic7xxx_osm.c Sync Perforce IDs, add tranceiver state change support, and correct 2000-11-10 20:13:41 +00:00
aic7xxx_osm.h Remove unneeded <stddef.h> #includes. 2000-10-29 16:57:42 +00:00
aic7xxx_pci.c Sync Perforce IDs, add tranceiver state change support, and correct 2000-11-10 20:13:41 +00:00
aic7770.c Move aicasm to its own subdirectory. 2000-09-16 20:02:28 +00:00