Specifications
Operating System Routines
IOC$RELTCMAP_DMA, IOC$RELTCMAP_DMAN
Description
A driver fork process calls IOC$RELTCMAP_DMA or IOC$RELTCMAP_DMAN
to release a previously allocated set of the TURBOchannel DMA map registers.
IOC$RELTCMAP_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$RELTCMAP_DMAN obtains this same
information from the map register descriptor (TC_MD).
After adjusting the map register descriptor arrays, IOC$RELTCMAP routines
examine the TURBOchannel DMA map register wait queue, located in the ADP
at ADP$L_MRQFL. If the queue is empty, IOC$RELTCMAP returns successfully
to its caller. If the queue contains waiting fork processes, IOC$RELTCMAP
dequeues the first process and calls IOC$ALOTCMAP_DMA to attempt to
allocate the set of map registers it requires.
If IOC$ALOTCMAP is called with sufficient map registers available,
IOC$RELTCMAP restores R3 through R5 to the process and reactivates it. When
this fork process returns control to IOC$RELTCMAP, IOC$RELTCMAP attempts
to allocate map registers to the next waiting fork process. IOC$RELTCMAP
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$RELTCMAP reinserts the fork process UCB
in the queue and returns successfully to its caller.
3–123