Specifications

Operating System Routines
IOC$RELALTMAP
Description
A driver fork process calls IOC$RELALTMAP to release a previously allocated
set of Q22–bus alternate map registers (registers 496 to 8191) and update the
alternate map register descriptor arrays in the ADP. IOC$RELMAPREG assumes
that its caller is the current owner of the controller data channel.
IOC$RELALTMAP obtains the location and number of the allocated map registers
from CRB$L_INTD+VEC$W_MAPALT and CRB$L_INTD+VEC$W_NUMALT,
respectively. If VEC$V_ALTLOCK is set in CRB$L_INTD+VEC$W_MAPALT, the
alternate map registers have been permanently allocated to the controller and
IOC$RELALTMAP returns successfully to its caller.
After adjusting the alternate map register descriptor arrays, IOC$RELALTMAP
examines the alternate-map-register wait queue. If the queue is empty,
IOC$RELALTMAP returns successfully to its caller. If the queue contains
waiting fork processes, IOC$RELALTMAP dequeues the first process and calls
IOC$ALOALTMAP to attempt to allocate the set of map registers it requires.
If there are sufficient alternate map registers, IOC$RELALTMAP restores R3
through R5 to the process and reactivates it. When this fork process returns
control to IOC$RELALTMAP, IOC$RELALTMAP attempts to allocate map
registers to the next waiting fork process. IOC$RELALTMAP continues to
allocate map registers in this manner until the alternate-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$RELALTMAP reinserts the fork process’s UCB in
the queue and returns successfully to its caller.
If the VAX system does not support alternate map registers, IOC$RELALTMAP
exits with SS$_SSFAIL status.
3–115