Introduction

The configuration manager is a device, driver and resource management subsystem for the Linux kernel, and as such, it provides the following facilities:

  • Device & Bus Registry
    The manager keep track of all the known devices on the system. It tries to discover them through protocols such as PCI or Plug'n'Play at boot time, but can also be presented with legacy devices by drivers that know about them. These devices are grouped according to logical buses. Buses will almost certainly reflect real hardware entities, but this is not a necessity.

  • Driver Registry
    The manager also keeps track of all known drivers loaded into the kernel, either as objects compiled into the boot-time kernel, or as objects loaded as modules. Each driver points to a table of device identifiers and classes that it can handle. This is used by the manager to associate devices with drivers.
    This will also be the basis of facilities for hot-plugging since these tables don't go away as long as the driver is present in the system. Also, in future, it my plan that the kernel's module loading system should have knowledge of these tables as stored in modules and should be able to pick an as yet unloaded driver based on a device's identifier or class.

  • Device Management Domains
    Each device belongs to a management domain and can be from one domain to another. There is a domain that represents those devices that the kernel itself manages directly, but there can also be domains for I/O sub-processors such as are defined in the I2O specification.

  • Device Configuration Protocols
    Protocols are defined by which devices can be discovered and their configurations accessed and changed. The protocols currently available are PCI or ISA Plug'n'Play, and Plug'n'Play BIOS, but other protocols like PCMCIA and MCA could be added too.

  • Hardware Resource Management
    The manager takes over the resource management facilities of the kernel (including interrupt line, ISA DMA channel and I/O port handling). It also adds device memory mapping range management which is lacking in current versions of the kernel.

  • Automatic Device (Re-)Configuration
    It provides an algorithm to automatically configure a device where there is a choice available. That algorithm does more, however; it can also rearrange the configurations of devices that have leeway in their configurations to resolve conflicts between devices, should permission be granted by certain kernel objects.

  • Device Pre-Configuration [intended]
    It is intended to provide facilities for pre-configuration. This involves storing a configuration for all possible devices in non-volatile storage for the BIOS or equivalent boot-manager to load onto the devices. Furthermore, it is intended for the subsystem to read back this configuration upon booting. A partial start has been made here in that ESCD data can be read from those motherboards that support it.

  • Power Management Support [possible]
    It would be possible to provide support to a power management driver such that an API is provided to wait for drivers to suspend associated devices in an appropriate manner and resume them later. It would also be possible to provide facilities for storing the device state to permanent storage for resuming after a power down.

The kernel object and hardware management facilities are, however, only part of what the subsystem does. It also provides a userspace interface to view the current state of these facilities, and to some limited extent, interact with them.

This interface takes the form of a special filesystem (much like the proc filesystem). This provides subdirectories representing the objects held in its registries. In the root directory of this filesystem and in all subdirectories there are readable files that provide information and also some writable files that permit interaction.

This interface is intended to take over the functionality of the old /proc files and directories for displaying resource manifests (such as "/proc/ioports"), and those for providing device listings (such as "/proc/pci", "/proc/bus" and "/proc/scsi").