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.
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).
- split softc size and match/attach out from cfdriver into
a new struct cfattach.
- new "attach" directive for files.*. May specify the name of
the cfattach structure, so that devices may be easily attached
to parents with different autoconfiguration semantics.
Apparently, some early 4/100 DMA controllers do illegal memory access on
large ( >= NBPG ) transfers at the end of the transfer. This appears
as SI_CSR_DMA_BUS_ERR in the csr. To work around this, we simply
transfer the (up to 3) missing bytes from the bpr. We were doing this
anyway, so the work-around is to ignore the bus error.
BUT! I goofed when I implemented the "left-over byte" code for the sw!
It *should* be correct now. Keep metrics (acceeible via DDB) on the number
of 1, 2, and 3 byte clean-ups, as well as the number of "clean" transfers,
just so we can get a clearer picture.
Thanks to Andrew Gillham <gillham@whirlpool.com> for noticing this!
only get these during autoconfiguration and during crash dumps. During
autoconfiguration, the transfers are small enough that DVMA won't be used
anyway. However, using DVMA during a crash dump can be dangerous,
depending on the nature of the panic, so we avoid it.
Correct the DMA transfer count when the target disconnects before
the whole transfer is completed. (Affects VME writes)
Reselect now works on the VME si board!
utilizing David Jones' new MI NCR 5380 code. Ported from the sun3 ncr_si.c
and "sw" DMA code written by me.
This driver contains user-configurable "options", which can be set via the
"flags" directive in the kernel configuration file. By default, only
DMA is enabled. DMA completion interrupts and reselection may be enabled
by setting the appropriate bits with "flags". See si.c for details.
Note that DMA completion interrupts and reselection don't yet work on the
4/100 controller. I don't know why, and it's unlikely that I'll have
the opportunity to find out any time soon. DMA does work, and results
in a considerable performance increase.
DMA, DMA completion interrupts, and reslection all work on my 4/260 (VME)
system with modern SCSI-II disks.