Specifications
Operating System Routines
IOC$LOADVMEMAP_DMA, IOC$LOADVMEMAP_DMAN
Output
Location Contents
R0, R1, R2 Destroyed
Synchronization
A driver fork process calls IOC$LOADVMEMAP_DMA or IOC$LOADVMEMAP_
DMAN at fork IPL, holding the corresponding fork lock (typically IOLOCK8) in
a multiprocessing environment. Either routine returns control to its caller at the
caller’s IPL. The caller retains any spinlocks it held at the time of the call.
Description
A driver fork process calls IOC$LOADVMEMAP_DMA or IOC$LOADVMEMAP_
DMAN to load a previously allocated set of DMA map registers with page-
frame numbers (PFNs). This enables a device to perform DMA transfer to
or from the buffer indicated by the contents of UCB$L_SVAPTE, UCB$W_
BCNT, and UCB$W_BOFF (or the contents of R3, R4, and R5 when using
IOC$LOADVMEMAP_DMAN).
IOC$LOADVMEMAP_DMA or IOC$LOADVMEMAP_DMAN checks whether
sufficient map registers were allocated. If there are insufficient map registers,
the routine issues a UBMAPEXCED bugcheck. Otherwise, the routine loads the
appropriate PFN into each map register.
IOC$LOADVMEMAP_DMA and IOC$LOADVMEMAP_DMAN check the VMEbus
control-flags register and set the appropriate bits in each map register.
The IOC$ALOVMEMAP routines load and set the mapping register valid for the
number of mapping registers needed for the length of the DMA request. Both
routines also clear the last map register. This last invalid register prevents a
transfer overrun.
The routines also set the byte swapping requested and the type of access for the
VME bus. Access type is whether VME read-modify-writes are translated into
XMI interlocked accesses or not.
3–104