Specifications

Operating System Routines
IOC$REQALTMA
ADP$W_MR2NREGAR,
ADP$W_MR2FREGAR,
ADP$L_MR2ACTMDR
Updated
ADP$L_MR2QBL Updated
UCB$L_FR3 R3 of caller
UCB$L_FR4 R4 of caller
UCB$L_FPC 00(SP)
Synchronization
A driver fork process calls IOC$REQALTMAP at fork IPL, holding the
corresponding fork lock in a multiprocessing environment.
Description
A driver fork process calls IOC$REQALTMAP to allocate a contiguous set of
Q22–bus alternate map registers (registers 496 to 8191) to service the DMA
transfer described by UCB$W_BCNT and UCB$W_BOFF. IOC$REQALTMAP
calls IOC$ALOALTMAP.
If alternate map registers have been permanently allocated to the controller,
IOC$REQALTMAP returns successfully to its caller without allocating map
registers. Otherwise, it searches the alternate map register descriptor arrays for
the required number of map registers.
IOC$ALOALTMAP determines the required number of alternate map registers
from the contents of UCB$W_BOFF and UCB$W_BCNT. It allocates one extra
map register; this register is marked invalid when the driver fork process
subsequently calls IOC$LOADALTMAP, thus preventing a transfer overrun. If
an odd number of map registers is required, IOC$ALOALTMAP rounds this value
up to an even multiple.
If sufficient alternate map registers are available, IOC$REQALTMAP assigns
them to its caller, records the allocation in the ADP and CRB, and returns
successfully to its caller.
If IOC$REQALTMAP cannot allocate a sufficient number of contiguous map
registers, it saves process context by placing the contents of R3, R4, and the PC
into the UCB fork block and the UCB into the alternate-map-register wait queue
(ADP$L_MR2QBL). It then returns to its callers caller.
If the VAX system does not support alternate map registers, IOC$REQALTMAP
exits with SS$_SSFAIL status.
3–130