dev/microcode/aic7xxx_seq.h,
dev/ic/aic7xxxreg.h:
Remove intrinsic knowledge about SDTR and WDTR messages and replace it
with a generic message system that allows the kernel driver to handle
SDTR, WDTR and any other type of extended message it chooses too. This
makes the sequencer code much simpler, makes extended message handling
debuggable since the bulk of the work is in the kernel driver, and saves
lots of instruction space.
Regen microcode header file.
dev/ic/aic7xxx.c, dev/ic/aic7xxxvar.h:
Add code to handle WDTR and SDTR negotiation in light of the changes in
the message interface to the sequencer. Don't reject targets that
negotiate async by sending an SDTR with a 0 offset. Use an sdtr message
with 0,0 to negotiate async when a target suggests a period that is too
long for us to handle. Some tape and cdrom drives don't like us doing
the message reject that we did in the past.
Fix a problem with handing the QUEUE FULL condition.
Fix a race condition (most likely the cause of the SCB paging problems) that
might allow the sequencer to get unpaused before the condition that caused
it to be paused (a SEQINT) was handled.
Race condition pointed out by Doug Ledford <dledford@dialnet.net> and
by "Dan Willis" <dan@plutotech.com>.
dev/pci/ahc_pci.c:
Add support for the 2940AU, an aic7860 based controller.
dev/pci/pcidevs.h, dev/pci/pcidevs_data.h:
Add product IDs for the 2940AU, aic7860 and aic7855.
Regen data file.
scsi/scsi_message.h:
Add MSG_EXT_SDTR_LEN and MSG_EXT_WDTR_LEN - the length of bytes in these
extended messages.
Thanks to Chuck Cranor <chuck@maria.wustl.edu> for testing these changes
out for me.
* When we are transferring in DATA (in asc_dma_in) and the target
is an async device, there is sometimes an extra byte in the FIFO.
If so, we need to drain that byte out of the fifo, but if and only
if the target is async. See also the comments in asc_dma_in()
in the related Mach mk84 asc driver (scsi_53C94_hdw.c), which
has an identical fix but applied in more restrictive conditions
than we need, with async *disk* targets, as well as async tapes.
* Add a watchdog and timeout active SCSI requests, to eliminate any
potential for deadlock due to applying the fix above on newer
silicon versions of the 53c94 which may not have the above problem.
Should use the MI scsi per-target timeout instead, when available.
cfattach code for TC SCSI option cards and ioasic 53c94 baseboard SCSI.
ascvar.h: shared softc declarations
asc_ioasic.c: ioasic front-end code.
asc_tc.c: Turbochannel option (and 5000/200 basebard) front-end code.
* ioasic_attach meeds more work to eliminate pmax_type dependency
and to verify the clocks speed passed to 53c94.
* Add prototypes for asc script entry points; should compile with
-Wstrict-prototypes -Wmissing-prototypes.
* Use tcvar.h interface. The usage of tc_syncbus() and tc_mb() may
not be quite stylistically on an Alhpa, but it apparently makes no
difference on the eerly-generation Alpha CPUs in TC Alphas.
if the version is <= SCSI-2. This should help some older SCSI
devices that previously needed the "NOLUNS" quirk. While this is
not strictly necessary on SCSI-2 devices, the spec allows it,
so we set it for SCSI-2 devices "just in case". See section 7.2.2 of
Draft X3T9.2 Rev 10L for details.
multi-channel driver), or to SCSI_CHANNEL_ONLY_ONE if a
single-channel driver.
(2) use scsiprint() rather than a locally-defined autoconfig print
function, and kill any locally-defined print function.
(2) in scsibusmatch, match channel as appropriate.
(3) add a scsiprint() function, to do the "scsibus at..."
and channel (if not SCSI_CHANNEL_ONLY_ONE) printing,
i.e. the common functionality that all SCSI drivers currently
should be doing.
a char *, because that's what was really intended, and because
if the print function modifies the string, various things could become
unhappy (so the string should _not_ be modified).
Fix so that resource wait queueing works.
Changed all functions to take a pointer to uba_softc instead of unit
number, except for ubareset(). This must be done later.
the lowest bit set. This isn't any more or less valid according to the PCI
spec, but it deals with lame devices that don't implement all of the top
bits.
a boot string for firmware that can do this, such as the SPARC and
the sun3 models. It is currently silently ignored on all other
hardware now, however. The MD function "boot()" has been changed to
also take a char *.
values, i.e. 0xfffffffe and 0xffffffff respectively. The changed
definitions were incorrect, according to the PCI Local Bus Specification
(Revision 2.0). Further rationale and a workaround for the broken
devices that instigated the change provided in a message to
current-users@netbsd.org, dated Mon, 05 Aug 1996 22:06:58 -0400,
message ID 16773.839297218@ux2.sp.cs.cmu.edu>.
- In egstart(), if the Send Packet command fails, m_freem()
the mbuf chain before dequeueing another one (memory leak).
- In egintr(), return 1 if a known interrupt was processed.
Would manifest itself as spurious interrupts.