Specifications
Operating System Routines
IOC$LOADUBAMAP, IOC$LOADUBAMAPA
Description
A driver fork process calls IOC$LOADUBAMAP or IOC$LOADUBAMAPA to load
a previously allocated set of map registers with page-frame numbers (PFNs). This
enables a device DMA transfer to or from the buffer indicated by the contents of
UCB$L_SVAPTE, UCB$W_BCNT, and UCB$W_BOFF.
Either IOC$LOADUBAMAP or IOC$LOADUBAMAPA confirms that sufficient
map registers have been previously allocated. If not, it issues a UBMAPEXCED
bugcheck. Otherwise, it loads into each map register the appropriate PFN and
data-path number. It sets the map register valid bit and, if VEC$V_LWAE is set
in VEC$B_DATAPATH, the longword-access-enable bit.
IOC$LOADUBAMAP checks the low bit of UCB$W_BOFF to determine whether
the transfer is byte-aligned or word-aligned. If the low bit is set, it sets the
byte-offset bit in each map register. Drivers for byte-aligned UNIBUS devices
that must never set the byte-offset bit call IOC$LOADUBAMAPA. Drivers for
Q22–bus only devices also call IOC$LOADUBAMAPA as there is no byte-offset
bit in a Q22–bus map register.
Both IOC$LOADUBAMAP and IOC$LOADUBAMAPA clear the last map register.
This last invalid register prevents a transfer overrun.
3–102