KGI Display Hardware Driver Overview

Abstract

As a part of the GGI (General Graphics Interface) Project, a Kernel Graphics Interface (KGI) is being developed to provide the neccessary hardware abstraction to allow efficient sharing and virtualization of graphics hardware in multi-user/multi-processing environments.

This article is intended to give a detailed overview of the KGI portability layer, display hardware abstraction and a basic overview of the modular display driver.

General Overview

The main design goals for KGI (Kernel Graphics Interface) display drivers can be summarized as:

In order to meet these goals, KGI-0.9 is divided into the following key components:

Each of the key components except the environment services mentioned will be explained in more detail in the following sections.

Portability layer

The KGI portability layer defines some basic data types, some host specific macros and definitions to handle endianess and physical I/O services in a platform-independent manner.

So basically the KGI portability layer defines platform independent data types and means how to establish a communication channel between the hardware and the driver.

Detailed data type definitions can be found in file:kgi-0.9/kgi/include/kgi/io.h

Display Hardware Model

KGI employs a operation mode description independent of the underlying hardware and desired application programming interface. This is used to specify the operation mode of a given hardware without assumptions specific to a given API. The concept behind this description is to describe the data flow from a device-internal frame buffer representation to the final visible image.

Modular Display Driver Implementation

The most common graphics card architecture on the PC-market utilizes the following principal design:

Hardware Diagram [11kB JPEG]
KGI therefore defines a modular driver architecture that allows to write and distribute separate drivers for each subsystem (except memory). A fully operational driver is then obtained by linking the sub-system drivers together.

Each driver provides some (specified) driver-global information, such as maximum resolution, vendor and model, AC limits etc.

A meta-language is defined for each subsystem that allows driver initialization, deinitialization, resource export and operation mode negotiation/checking. This way drivers can be passed a partially filled-in operation mode description and auto-negotiate the proper operation mode.

This modular display driver internal interface is defined in kgi-0.9/drv/display/kgi/module.h, but is adopted to allow an easier mapping to the UDI driver model and not yet finalized.

Summary

This article was intended to give a more detailed view of the KGI display hardware abstraction model. It mainly covered (static) operation mode specification, as well as application/driver/hardware interaction.