Specifications

Data Structures
1.9 Driver Dispatch Table (DDT)
Table 1–11 Contents of Driver Dispatch Table
Field Name Contents
DDT$L_START Entry point to the driver’s start-I/O routine. Every driver must specify this
address in the start argument to the DDTAB macro.
When a device unit is idle and an I/O request is pending for that unit,
IOC$INITIATE transfers control to the address contained in this field.
DDT$L_UNSOLINT Entry point to a MASSBUS drivers unsolicited-interrupt service routine.
The driver specifies this address in the unsolic argument to the DDTAB
macro.
This field contains the address of a routine that analyzes unexpected
interrupts from a device. The standard interrupt service routine, the
address of which is stored in the CRB, determines whether an interrupt
was solicited by a driver. If the interrupt is unsolicited, the interrupt
service routine can call the unsolicited-interrupt service routine.
DDT$L_FDT Address of the driver’s FDT. Every driver must specify this address in the
functb argument to the DDTAB macro.
EXE$QIO refers to the FDT to validate I/O function codes, decide which
functions are buffered, and call FDT routines associated with function
codes.
DDT$L_CANCEL Entry point to the drivers cancel-I/O routine. The driver specifies this
address in the cancel argument to the DDTAB macro.
Some devices require special cleanup processing when a process or a
system routine cancels an I/O request before the I/O operation completes
or when the last channel is deassigned. The $DASSGN, $DALLOC, and
$CANCEL system services cancel I/O requests.
DDT$L_REGDUMP Entry point to the drivers register dumping routine. The driver specifies
this address in the regdmp argument to the DDTAB macro.
IOC$DIAGBUFILL, ERL$DEVICERR, and ERL$DEVICTMO call the
address contained in this field to write device register contents into a
diagnostic buffer or error message buffer.
DDT$W_DIAGBUF Size of diagnostic buffer. The driver specifies this value in the diagbf
argument to the DDTAB macro. The value is the size in bytes of a
diagnostic buffer for the device.
When EXE$QIO preprocesses an I/O request, it allocates a system buffer of
the size recorded in this field (if it contains a nonzero value) if the process
requesting the I/O has DIAGNOSE privilege and specifies a diagnostic
buffer in the I/O request. IOC$DIAGBUFILL fills the buffer after the I/O
operation completes.
DDT$W_ERRORBUF Size of error message buffer. The driver specifies this value in the erlgbf
argument to the DDTAB macro. The value is the size in bytes of an error
message buffer for the device.
If error logging is enabled and an error occurs during an I/O operation,
the driver calls ERL$DEVICERR or ERL$DEVICTMO to allocate and
write error-logging data into the error message buffer. IOC$INITIATE and
IOC$REQCOM write values into the buffer if an error has occurred.
DDT$L_UNITINIT Address of the device’s unit initialization routine, if one exists. Drivers
for MASSBUS devices use this field rather than CRB$L_INTD+VEC$L_
UNITINIT. Drivers for UNIBUS, VAXBI, and Q22–bus devices can use
either field.
DDT$L_ALTSTART Address of a driver’s alternate start-I/O routine. The EXE$ALTQUEPKT
routine transfers control to the alternate start-I/O routine at this address.
(continued on next page)
1–37