19.2 How PCI Direct DMA Works Prior to OpenVMS V7.2
On all PCI based machines, the direct DMA window begins
at (usually) 1Gb in PCI space, and covers physical memory
beginning at 0 for 1Gb :
Memory: PCI
__________-\
0 | | \ | |
| | \ | |
| | \ | |
| | \---------------- |------ |1Gb (IOC$K_DIRECT_DMA_BASE)
1Gb |------- |-\ | | \
| | \ | | \
| | \ | | IOC$K_DIRECT_DMA_SIZE
. | | \ | | /
. | | \---------------- |_______|2Gb-1
.
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 pop-
ular 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.2-EFT3.
For a much better picture and explanation
See the Writing OpenVMS Device Alpha Drivers in C
book.