Specifications
Data Structures
1.2 Adapter Control Block (ADP)
Table 1–2 Contents of Adapter Control Block
Field Name Contents
ADP$L_CSR* Virtual address of adapter configuration register. For a generic VAXBI
adapter, this field contains the address of the base of the adapter’s node
space. The system adapter initialization routine writes this field.
The configuration register marks the base of adapter register space, an
area that contains data path registers, map registers, or any other registers
appropriate to the implementation of the adapter.
If the adapter 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 configuration register. The PCA uniquely describes a specific register
of a specific node on a specific bus.
ADP$L_LINK* Address of next ADP. The system adapter initialization routine writes this
field. A value of 0 indicates that this is the last ADP.
ADP$W_SIZE* Size of ADP. The system adapter initialization routine writes this field
when the routine creates the ADP. For nondirect-vector UNIBUS adapters,
ADP$W_SIZE includes the space allocated for the four UNIBUS interrupt
service routines (for BR4 to BR7) and the vector jump table.
ADP$B_TYPE* Type of data structure. The system adapter initialization routine writes the
symbolic constant DYN$C_ADP into this field when the routine creates the
ADP.
ADP$B_NUMBER* Number of this type of adapter (for example, the number for a third
MASSBUS adapter is 2). The system adapter initialization routine writes
this field when the routine creates the ADP.
ADP$W_TR* Nexus number of adapter. The system adapter initialization routine writes
this field when the routine creates the ADP. The driver-loading procedure
compares the nexus number specified in a CONNECT command with this
field of each ADP in the system to determine to which adapter a device is
attached. For a generic VAXBI adapter, this field contains its VAXBI node
ID.
ADP$W_ADPTYPE* Type of adapter. The system adapter initialization routine writes the
symbolic constant AT$_UBA into this field when the routine creates an ADP
for a UNIBUS adapter or Q22–bus; AT$_MBA for a MASSBUS adapter; and
AT$_GENBI for a generic VAXBI adapter.
ADP$L_VECTOR* Address of adapter dispatch table. The table is 512 bytes of longword vectors
that correspond to device interrupt vectors (0
8
–777
8
).
On VAX processors that handle direct-vector interrupts, ADP$L_VECTOR
points to the second (or subsequent) page of the SCB. The CPU uses this
page when it dispatches the device interrupt to the driver interrupt service
routine. Each vector entry that corresponds to a vector in use contains the
address of the controller’s interrupt dispatcher (CRB$L_INTD). (The actual
stored value is CRB$L_INTD+1, the set low bit of the address indicating
that the interrupt stack is to be used in servicing interrupts.)
On VAX processors that handle non-direct-vector interrupts, ADP$L_
VECTOR points to a page allocated from nonpaged pool called the adapter
dispatch table (or vector jump table). Each longword in the page that
corresponds to a vector in use contains the address of the controller’s
interrupt dispatcher (CRB$L_INTD+2). When the UNIBUS adapter
interrupts on behalf of a UNIBUS device, the UNIBUS adapter interrupt
service routine saves R0 through R5, determines the vector address of the
interrupting device, indexes into the vector-jump table, and jumps to the
instruction at CRB$L_INTD+2.
(continued on next page)
1–7