Specifications

Data Structures
1.11 Interrupt Dispatch Block (IDB)
Table 1–13 Contents of Interrupt Dispatch Block
Field Name Contents
IDB$L_CSR* Address of CSR. The SYSGEN command CONNECT specifies the address
of a device’s CSR. The driver-loading procedure writes the system virtual
equivalent of this address into the IDB$L_CSR field. Device drivers set
and clear bits in device registers by referencing all device registers at fixed
offsets from the CSR address.
If the controller resides on a remote bus connected to a VAX 7000-series or
VAX 10000-series system, this field contains the pseudo CSR address (PCA)
of the base register. The PCA uniquely describes a specific register of a
specific node on a specific bus.
The driver-loading procedure tests the value of this field. If the value is
not a CSR address or a PCA, it sets IDB$V_NO_CSR in IDB$B_FLAGS
and places the device offline by clearing UCB$V_ONLINE in UCB$L_STS.
In this event, it does not call the drivers controller and unit initialization
routines.
IDB$L_OWNER Address of UCB of device that owns controller data channel. IOC$REQ x
CHANy writes a UCB address into this field when the routine allocates
a controller data channel to a driver. IOC$RELx CHAN confirms that
the proper driver fork process is releasing a channel by comparing the
driver’s UCB with the UCB stored in the IDB$L_OWNER field. If the
UCB addresses are the same, IOC$RELx CHAN allocates the channel to a
waiting driver by writing a new UCB address into the field. If no driver fork
processes are waiting for the channel, IOC$RELxCHAN clears the field.
If the controller is a single-unit controller, the unit or controller initialization
routine should write the UCB address of the single device into this field.
IDB$W_SIZE* Size of IDB. The driver-loading procedure writes the constant IDB$K_
LENGTH into this field when the procedure creates the IDB.
IDB$B_TYPE* Type of data structure. The driver-loading procedure writes the symbolic
constant DYN$C_IDB into this field when the procedure creates the IDB.
IDB$B_VECTOR* Interrupt vector number of the device, right-shifted by two bits. SYSGEN
writes a value into this field using either the autoconfiguration database or
the value specified in the /VECTOR qualifier to the CONNECT command.
Drivers for devices that define the interrupt vector address through a device
register must use this field to load that register during unit initialization
and reinitialization after a power failure.
IDB$W_UNITS* Maximum number of units connected to the controller. The maximum
number of units is specified in the DPT and can be overridden at driver-
loading time.
IDB$B_TT_ENABLE* Reserved for use by the terminal driver.
IDB$B_COMBO_CSR* Address of the start of CSRs for a multicontroller device such as the DMF32.
(The name of this field is IDB$B_COMBO_CSR_OFFSET.)
IDB$B_COMBO_VEC* Address of the start of interrupt vectors for a multicontroller device. (The
name of this field is IDB$B_COMBO_VECTOR_OFFSET.)
IDB$B_FLAGS* Flags associated with the IDB. The only flag currently defined is IDB$V_
NO_CSR. The driver loading procedure sets this flag if IDB$L_CSR does not
contain the address of a CSR.
IDB$L_SPL* Address of the device lock that—in a multiprocessing environment—
synchronizes access to device registers and those fields in the UCB accessed
at device IPL.
(continued on next page)
1–43