Driver manifests

Driver manifests #

Driver manifests are used by the devloader service when loading driver processes to add additional capabilities and services to facilitate driver operations.

The manifest is an INI file which is stored in the driver’s ELF file in a special “.manifest” section.

Following this various INI sections may appear to tune various features of the driver loader.

[capabilities] #

The capabilities section of the driver management is used to request specific capabilities from the driver loader. Each takes the format of:

addr:type = config

The “addr” field specifies the capability address that the capability should be installed into; it may be _ to allocate a capability address. The “type” field is the capability type, and the config is a comma-separated list of configuration options specific to each type, enumerated below.

cspace #

Allocates a CSpace capability.

Options

  • self: creates a copy of the driver’s CSpace

Details

A CAP_CSPACE entry is added to the driver’s auxiliary vector if “self” is specified here.

devmem #

Allocates a device memory capability.

Options

  • min=<paddr>: Minimum physical address (in hex) to allocate (required)
  • max=<paddr>: Maximum physical address (in hex) to allocate (required)

endpoint #

Allocates an endpoint capability.

Options

None

memory #

Allocates a memory capability.

Options

  • pages=<n>: Allocate N pages of memory (required)

Details

A CAP_MEMORY entry is added to the driver’s auxiliary vector.

note #

Allocates a notification capability.

Options

None

vspace #

Allocates a VSpace capability.

Options

  • self: creates a copy of the driver’s VSpace

Details

A CAP_VSPACE entry is added to the driver’s auxiliary vector if “self” is specified here.

x86_64-specific capabilities #

ioport #

Allocates an I/O port capability.

Options

  • min=<value>: Minimum I/O port (in hex) to allocate (required)
  • max=<value>: Maximum I/O port (in hex) to allocate (required)

irq #

Allocates an IRQ capability.

Options

  • irq=<no>: IRQ number to allocate (required)
  • note=<addr>: Capability address of notification to deliver IRQs to (required)

Details

The notification capability must be allocated prior to the IRQ in the list of capabilities.

[services] #

The services lists system services which should be made available to the driver. Each is specified with name=, and no value. The list of services may change depending on the runtime configuration and system policy, but at least the following services will always be available:

Example #

[driver]
name=ps2kb
desc=PS/2 keyboard driver for x86

[capabilities]
0:ioport = min=60, max=64
1:note = 
2:irq = irq=1, note=1
_:cspace = self

[services]
devregistry=