Specifications

Operating System Routines
IOC$INITIATE
Description
IOC$INITIATE creates the context in which a driver fork process services an I/O
request. IOC$INITIATE creates this context and activates the driver’s start-I/O
routine in the following steps:
Checks the CPU ID of the local processor against the device’s affinity mask
to determine whether the local processor can initiate the I/O operation on the
device. If it cannot, IOC$INITIATE takes steps to initiate the I/O function on
another processor in a multiprocessing system. It then returns to its caller.
Stores the address of the current IRP in UCB$L_IRP.
Copies the transfer parameters contained in the IRP into the UCB:
Copies the address of the system buffer (buffered I/O) or the system
virtual address of the PTE that maps process buffer (direct I/O) from
IRP$L_SVAPTE to UCB$L_SVAPTE
Copies the byte offset within the page from IRP$W_BOFF to UCB$W_
BOFF
Copies the low-order word of the byte count from IRP$L_BCNT to
UCB$W_BCNT
Clears the cancel-I/O and timeout bits in the UCB status longword (UCB$V_
CANCEL and UCB$V_TIMOUT in UCB$L_STS).
If the I/O request specifies a diagnostic buffer, as indicated by IRP$V_
DIAGBUF in IRP$W_STS, stores the system time in the first quadword of
the buffer to which IRP$L_DIAGBUF points (the $QIO system service having
already allocated the buffer).
Transfers control to the drivers start-I/O routine.
3–93