How PCI Direct-Mapped
DMA Works Prior to OpenVMS Version 7.2
On all PCI-based
machines, the direct-mapped DMA window begins at (usually) 1 GB
in PCI space and covers physical memory beginning at 0 for 1 GB
as shown in
PCI-Based DMA.
Figure 1 PCI-Based DMA
Typically, drivers compare their buffer addresses against
the length of the window returned by calling IOC$NODE_DATA with
the IOC$K_DIRECT_DMA_SIZE function code. This assumes that the window
on the memory side starts at zero. Another popular method for determining
whether map registers are necessary involves looking at MMG$GL_MAXPFN.
This is also not likely to work correctly in OpenVMS Version 7.3.
For a much better picture and explanation, see the Writing OpenVMS Alpha Device Drivers in C book.