Specifications

Data Structures
1.7 Channel Request Block (CRB)
Table 1–8 (Cont.) Contents of Channel Request Block
Field Name Contents
CRB$L_WQBL* Controller channel wait queue backward link. IOC$REQxCHANy and
IOC$RELxCHAN read and write this field.
CRB$B_TT_TYPE* Type of controller (for instance, DZ11 or DZ32) for terminals. A terminal
port driver fills in this field.
CRB$W_REFC* UCB reference count. The driver-loading procedure increases the value in
this field each time it creates a UCB for a device attached to the controller.
CRB$B_MASK* Mask that describes controller status.
The following fields are defined in CRB$B_MASK:
CRB$V_BSY Busy bit. IOC$REQxCHANy reads the busy bit to
determine whether the controller is free and sets this
bit when it allocates the controller data channel to a
driver. IOC$RELxCHAN clears the busy bit if no driver
is waiting to acquire the channel.
CRB$V_UNINIT Indication, when set, that the system adapter
initialization routine has created a CRB for a generic
VAXBI device, but has not yet called its controller
initialization routine. SYSGEN reads this bit to
determine whether to call the controller initialization
routine and clears it when the initialization routine
completes. This facilitates SYSGEN’s processing of
multiunit generic VAXBI devices.
CRB$B_UNIT_BRK* Break bits for terminal lines. Used by the terminal port drivers.
CRB$L_AUXSTRUC Address of auxiliary data structure used by device driver to store special
controller information. A device driver requiring such a structure generally
allocates a block of nonpaged dynamic memory in its controller initialization
routine and places a pointer to it in this field.
CRB$L_TIMELINK* Forward link in queue of CRBs waiting for periodic wakeups. This field
points to the CRB$L_TIMELINK field of the next CRB in the list. The
CRB$L_TIMELINK field of the last CRB in the list contains zero. The
listhead for this queue is IOC$GL_CRBTMOUT. Use of this field is reserved
to Digital.
CRB$L_DUETIME* Time in seconds, relative to EXE$GL_ABSTIM, at which next periodic
wakeup associated with the CRB is to be delivered. Compute this value by
raising IPL to IPL$_POWER, adding the desired number of seconds to the
contents of EXE$GL_ABSTIM, and storing the result in this field. Use of
this field is reserved to Digital.
CRB$L_TOUTROUT* Address of routine to be called at fork IPL (holding a corresponding fork lock
if necessary) when a periodic wakeup associated with CRB becomes due. The
routine must compute and reset the value in CRB$L_DUETIME if another
periodic wakeup request is desired. Use of this field is reserved to Digital.
CRB$L_LINK* Address of secondary CRB (for MASSBUS devices only). This field is
written by the driver-loading procedure and read by IOC$REQSCHANx
and IOC$RELSCHAN.
CRB$L_DLCK* Address of controllers device lock. The driver-loading procedure initializes
this field and propagates it to each UCB it creates for the device units
associated with the controller.
CRB$L_BUGCHECK* Bugcheck data used to issue an ILLQBUSCFG bugcheck when the multilevel
interrupt dispatching code (at CRB$L_RTINTD) determines that a Q22–bus
is illegally configured.
(continued on next page)
1–28