XFree86 server 4.x Design (DRAFT) : Driver Interface
Previous: The XF86Config File
Next: Resource Access Control Introduction

## 3. Driver Interface

The driver interface consists of a minimal set of entry points that are required based on the external events that the driver must react to. No non-essential structure is imposed on the way they are used beyond that. This is a significant difference compared with the old design.

The entry points for drawing operations are already taken care of by the framebuffer code (including, XAA). Extensions and enhancements to framebuffer code are outside the scope of this document.

This approach to the driver interface provides good flexibility, but does increase the complexity of drivers. To help address this, the XFree86 common layer provides a set of ``helper'' functions to take care of things that most drivers need. These helpers help minimise the amount of code duplication between drivers. The use of helper functions by drivers is however optional, though encouraged. The basic philosophy behind the helper functions is that they should be useful to many drivers, that they should balance this against the complexity of their interface. It is inevitable that some drivers may find some helpers unsuitable and need to provide their own code.

Events that a driver needs to react to are:

ScreenInit

  An initialisation function is called from the DIX layer for each screen at the start of each server generation.

Enter VT

  The server takes control of the console.

Leave VT

  The server releases control of the console.

Mode Switch

  Change video mode.

ViewPort change

  Change the origin of the physical view port.

ScreenSaver state change

  Screen saver activation/deactivation.

CloseScreen

  A close screen function is called from the DIX layer for each screen at the end of each server generation.

In addition to these events, the following functions are required by the XFree86 common layer:

Identify

  Print a driver identifying message.

Probe

  This is how a driver identifies if there is any hardware present that it knows how to drive.

PreInit

  Process information from the XF86Config file, determine the full characteristics of the hardware, and determine if a valid configuration is present.

The VidMode extension also requires:

ValidMode

  Identify if a new mode is usable with the current configuration. The PreInit function (and/or helpers it calls) may also make use of the ValidMode function or something similar.

Other extensions may require other entry points. The drivers will inform the common layer of these in such cases.

XFree86 server 4.x Design (DRAFT) : Driver Interface
Previous: The XF86Config File
Next: Resource Access Control Introduction