MONOLITHIC AND LAYERED DRIVER MODELS
As previously discussed, a driver can be constructed from a software perspective as a single entity or as a number of software layers. The driver interface to the OS is called the Device Driver Interface (DDI), as shown in Figure 30-11. With layered drivers, the interface between layers is called a Device Driver Service Interface (DDSI).
A monolithic driver implements both the DDI and the hardware interface. There are no DDSIs because the driver implements everything from the DDI down to the hardware. At the top, the device driver implements all the required and optional DDI functions so that it can be loaded into the OS and function correctly. The hardware interface at the bottom can directly interface to device hardware ports and memory. The device hardware interrupts are handled indirectly. These interrupts would normally connect to the target system’s interrupt system so the device driver interrupt handler must be configured to trap interrupts from its device and maps them into the operating system’s interrupts. In between the DDI and hardware are everything including initialization, de-initialization, configuration, state management, power management, and management of buffers and implementation interrupt handlers.
A monolithic driver is used when there is not a shared source for the required DDI functions. ...