Specifications

Operating System Routines
IOC$RELVMEMAP_DMA, IOC$RELVMEMAP_DMAN
Description
A driver fork process calls IOC$RELVMEMAP_DMA or IOC$RELVMEMAP_
DMAN to release a previously allocated set of VME DMA map registers.
IOC$RELVMEMAP_DMA obtains the location and number of the allocated map
registers from CRB$L_INTED+VEC$W_MAPREG and CRB$L_INTED+VEC$B_
NUMREG, respectively, while IOC$RELVMEMAP_DMAN obtains this same
information from the map register descriptor (VME_MD).
After adjusting the map register descriptor arrays, IOC$RELVMEMAP_DMA
examines the VME DMA map register wait queue, located in the ADP at ADP$L_
MRQFL. If the queue is empty, IOC$RELVMEMAP_DMA returns successfully to
its caller. If the queue contains waiting fork processes, IOC$RELVMEMAP_DMA
dequeues the first process and calls IOC$ALOVMEMAP_DMA to attempt to
allocate the set of map registers it requires.
If IOC$ALOVMEMAP is called with sufficient map registers available,
IOC$RELVMEMAP restores R3 through R5 to the process and reactivates it.
When this fork process returns control to IOC$RELVMEMAP, IOC$RELVMEMAP
attempts to allocate map registers to the next waiting fork process.
IOC$RELVMEMAP continues to allocate map registers in this manner until
the map-register wait queue is empty or it cannot satisfy the requirements of
the process at the head of the queue. In the latter event, IOC$RELVMEMAP
reinserts the fork process UCB in the queue and returns successfully to its caller.
3–125