Sun Java Solaris Communities My SDN Account Join SDN
 
Documentation

Device Configuration Assistant Design Overview

5. Bus Enumerators

Bus enumerators determine all devices attached to all the buses of a particular type. For instance,  the PCI enumerator will identify all devices(actually "functions" in PCI terminology) on all PCI buses. There are a few enumerators that do not quite fit this definition, but were made enumerators because they find a set or class of devices; for example, the VGA, BIOS memory, and PnP BIOS enumerators described later in this document.

Each enumerator adds the device to the chain of devices. For programmable devices (currently only ISA PnP), another chain is used. When these devices are programmed, they are added to the main chain.


 

5.1 ISA PnP Enumerator

This enumerator determines the devices attached to an ISA bus that conforms to the Plug and Play ISA Specification, Version 1.0a, May 5, 1994, by Intel Corporation and Microsoft Corporation. These devices fall into two sets: boot participant and non-boot participant. Boot participant devices are treated as self-identifying ISA devices. They cannot be disabled from the bus or have their resources reprogrammed (for example, to control the booted disk) because they may be in use.

Non-boot participant devices are programmable devices. Their device IDs and resource requirements can be determined, and they can be individually enabled and disabled on the ISA bus. If a PnP BIOS is in the system (all new systems have one), then the ISA PnP devices will have been programmed and enabled on the bus. However, after identification they are disabled from the bus (and finally after all ISA devices have been identified, they are reprogrammed with leftover resources and enabled on the bus). Individual cards can have multiple logical devices (like PCI). Each device has an ID and a set of resource requirements and a possibly empty set of compatible device IDs. The enumerator first looks in the master file for the entry that corresponds directly to the device's ID. If that ID is not in the master file, then the master file is rechecked for an entry with a compatible ID. Thus a new PnP modem card (serial controller) need not have its ID in the device database if the manufacturer has trouble marking it as compatible with the serial controller.

5.2 EISA Enumerator

The EISA enumerator uses the system BIOS calls to interrogate the EISA slots and read the EISA NVRAM to get the resource information. This information comes from the .cfg files and thus may be incorrect.

The Device Configuration Assistant assumes that only boards containing one function are supported. Multifunction boards do exist. In particular, boards containing standard devices (for example, serial and parallel ports) are handled because these devices are already found by the probe-always BEFs, thus causing the EISA ones to be discarded. However, it isn't envisioned that multifunction EISA boards will need to be supported, given the expected demise of EISA, caused by PCI.

5.3 PCI Enumerator

This enumerator reads the PCI configuration space of each function of each device on each bus to get the set of PCI devices and their resources. The device ID used to map the device to a driver is the subvendor/subdevice ID combination or, if not present, the vendor/device; if this isn't in the master file, the PCI class code is used.

An assumption that the BIOS has configured PCI devices (functions) is made. No reconfiguration (reassignment of resources) is done. Some new system BIOSes have been discovered that have "PnP OS - Y/N" options. When enabled, the BIOSes do not configure PCI devices. This might confuse the user as Solaris 8 is now a "PnP OS." The Device Configuration Assistant does not perform PCI configuration. PCI bridges restrict the range of I/O and memory that can be passed through, and this may require reconfiguration. Hot-plug PCI requires reconfiguration, but this is done in the kernel, as hot-plug events will not be supported during boot.

5.4 VGA Enumerator

This isn't so much of an enumerator as some code that looks for an existing VGA/8514 node and, if not present, creates one. It also adds numerous properties on the VGA node to help the kdmconfig program identify the controller. The VGA enumerator locates the video display device by looking through the device tree for a device that has the video frame buffer as one of its resources. The enumerator issues various BIOS calls to extract information about the attached video display device that the BIOS will supply if the attempted call is supported. This includes several VESA BIOS calls. For details on VESA BIOS calls, see the VESA BIOS Extension Core Functions document, Version 2.0. The types of information that may be attached to the tree under various property names include: VESA identifying strings, supported graphics modes, the first 512 bytes of the video BIOS itself, video memory size, and device type (VGA or SVGA). Also, if a Plug and Play monitor is attached, the enumerator attempts to retrieve the EDIF information from the monitor and attaches a property containing that to the device node to aid kdmconfig with monitor identification.

5.5 PnP BIOS Enumerator

The PnP BIOS NVRAM contains details about the embedded (regular) ISA devices. In particular, it gives the device ID and resources consumed by the device. It does not contain PnP ISA devices. For instance, a typical PnP BIOS would show the keyboard, serial and parallel controllers, diskette, and so on.

This enumerator is run near the end of the enumeration phase because in many cases the device details have been found to be incorrect. It checks to see if any resources have already been claimed and will only create a fully fledged device if all the resources are available. Otherwise, it will create a partial (disabled) device with leftover resources. This ensures that programmable devices are not assigned resources that are already used.

The one exception to this is that the system BIOS may allow the user to specify the IRQ assigned to serial and parallel controllers. It saves the IRQ assigned in the PnP BIOS NVRAM. As this can't be determined from a BEF, the enumerator is run twice: once before running the probe-always BEFs to pick up these devices, and once at the end of the enumeration phase to pick up the rest.

For more details, see the Plug and Play BIOS Specification, Version 1.0A, May 5,1994, by Compaq Computer Corporation, Phoenix Technologies Ltd., and Intel Corporation.

5.6 BIOS Memory Enumerator

This enumerator is run after all the others. It creates a BIOS memory device for any BIOS memory that hasn't been claimed by the other enumerators. BIOSes are in a fixed range and at fixed offsets, so this BIOS is extremely simple. It handles nothing more than BIOS memory.

<< Previous | Contents | Next >>