3.3 Adapter Objects and DMA

An NT device driver must use a system-created adapter object if it sets up its device objects for direct I/O and its device uses DMA, as already mentioned in Section 3.2.4.2.

Two kinds of lowest-level NT drivers must use adapter objects:

·Drivers whose devices use the system DMA controller (also called slave devices)

Such a device is said to "use system DMA."

·Drivers whose devices are busmaster adapters

Such a device, which arbitrates with the system for use of the I/O bus, is said to "use busmaster DMA."

When these kinds of device drivers initialize, they call the platform-specific NT HAL to create a set of adapter objects, representing DMA controller channels or ports and busmaster devices. Each HAL, like the NT SCSI port driver described in Chapter 2, is implemented as a dynamic-link library so that NT drivers can link themselves against each HAL (or SCSI miniport drivers against the NT SCSI port driver) and call the same support routines on every NT platform.

For any machine running Windows NT, the set of HAL-created adapter objects usually includes the following:

·An adapter object for each system DMA controller channel or port to which a slave device is attached

·An adapter object for each busmaster DMA device in the machine

Note that the NT SCSI port driver is responsible for creating and managing adapter objects for SCSI HBAs. An HBA-specific miniport driver supplies the necessary data for the NT SCSI port driver to create a corresponding adapter object when the miniport driver's HwScsiGetConfigInfo routine executes. For more information about SCSI miniport drivers, see Appendix A.