Specifications

1
Data Structures
This chapter provides a condensed description of those data structures referenced
by driver code. It lists their fields in the order in which they appear in the
structures. All data structures discussed in this chapter—with the exception of
the channel control block (CCB)—exist in nonpaged system memory.
Many of these structures—including the adapter control block (ADP), channel
control block (CCB), channel request block (CRB), configuration control block
(ACF), device data block (DDB), driver dispatch table (DDT), driver prologue
table (DPT), object rights block (ORB), I/O request packet (IRP), I/O request
packet extension (IRPE), and unit control block (UCB)—are collectively known as
the I/O database. (See Figure 1–1.) The structures in the I/O database help the
operating system and device drivers monitor the status and control the functions
of the I/O subsystem. They provide the following types of information:
Descriptions of each pending and in-progress I/O request
Characteristics of each device type
Number and type of each device unit
Status of current activity on each device unit
External entry points to all device drivers
Entry points for controller and device unit initialization routines
Code that dispatches interrupts to the appropriate servicing routines
Addresses of device registers
Bit maps describing the allocation of data paths and map registers
Aside from the I/O database structures, this chapter includes descriptions of
those data structures used by the operating system to maintain multiprocessing
synchronization and record processor-specific information: the spinlock data
structure (SPL) and the per-CPU database structure (CPU), respectively. This
chapter also describes the structures that implement the SCSI port interface
that supports the creation of SCSI class driver, as well as those structures used
to access the control registers of a device attached to a remote bus (CRAM and
CRAMH).
1–1