Q: Our SCSI driver asserts the SCSI bus protocol directly (per the SCSI bus
specs), using the low-memory global SCSIBase as the SCSI base address. Our code
works properly on systems using the NCR 5380, but it hangs with the SCSI NCR
53C96. Should I add a NOP somewhere because the 53C96 is faster?
A: Although SCSIBase is exactly where a SCSI device driver should look to find the
base address of a SCSI chip in the Macintosh, the NCR 53C96 is physically
different from the NCR 5380. In addition to having its registers in different
locations of the address map and a slightly different register set, the chip
takes on much more of the burden (and control) of accessing the SCSI bus. The
major difference is that, with the 5380, the chip controller (drvr ) needs to
actively respond to the phases of the SCSI bus as the target changes them, and
it has to be ready to correctly react to any unexpected changes in state. For
continued compatibility with the Macintosh product lines, your driver must use
the SCSI Manager rather than write directly to the chip. With 5396, the chip
controller needs to set up all information for the entire command sequence
(Arbitration through Message In) and then tell the chip to execute it. The
"controller" is not in direct control of the SCSI bus. With the 5380, the
Target is always in control -- not your driver, but the 5380's interaction
model gives the impression that your driver is in control.
Your best course of action is to ensure your SCSI driver uses the SCSI Manager
so that it automatically works on all Macintosh platforms in case Apple changes
chips again in the future. If there is something odd about your SCSI device
that cannot be accommodated by the SCSI Manager (this is rare), you should get
the documentation for the NCR 5396 from NCR and rewrite your driver to use this
new "setup and go" interaction model.
|