This document assumes that the reader has a general understanding of device drivers in
FreeBSD and of the SCSI protocol. Much of the information in this document was extracted
from the drivers:
-
ncr (/sys/pci/ncr.c) by Wolfgang Stanglmeier and Stefan
Esser
-
sym (/sys/dev/sym/sym_hipd.c) by Gerard Roudier
-
aic7xxx (/sys/dev/aic7xxx/aic7xxx.c) by Justin T. Gibbs
and from the CAM code itself (by Justing T. Gibbs, see /sys/cam/*). When some solution looked the most logical and was
essentially verbatim extracted from the code by Justin Gibbs, I marked it as
``recommended''.
The document is illustrated with examples in pseudo-code. Although sometimes the
examples have many details and look like real code, it is still pseudo-code. It was
written to demonstrate the concepts in an understandable way. For a real driver other
approaches may be more modular and efficient. It also abstracts from the hardware
details, as well as issues that would cloud the demonstrated concepts or that are
supposed to be described in the other chapters of the developers handbook. Such details
are commonly shown as calls to functions with descriptive names, comments or
pseudo-statements. Fortunately real life full-size examples with all the details can be
found in the real drivers.