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").
|