3 acpi device path – Intel Extensible Firmware Interface User Manual

Page 227

Advertising
background image

Protocols

— Device Path Protocol

Version 1.10

12/01/02

8-7

8.3.3 ACPI

Device

Path

This Device Path contains ACPI Device IDs that represent a device’s Plug and Play Hardware ID
and its corresponding unique persistent ID. The ACPI IDs are stored in the ACPI _HID, _CID, and
_UID device identification objects that are associated with a device. The ACPI Device Path
contains values that must match exactly the ACPI name space that is provided by the platform
firmware to the operating system. Refer to the ACPI specification for a complete description of the
_HID, _CID, and _UID device identification objects.

The _HID and _CID values are optional device identification objects that appear in the ACPI name
space. If only _HID is present, the _HID must be used to describe any device that will be
enumerated by the ACPI driver. The _CID, if present, contains information that is important for the
OS to attach generic driver (e.g., PCI Bus Driver), while the _HID contains information important
for the OS to attach device-specific driver. The ACPI bus driver only enumerates a device when no
standard bus enumerator exists for a device.

The _UID object provides the OS with a serial number-style ID for a device that does not change
across reboots. The object is optional, but is required when a system contains two devices that
report the same _HID. The _UID only needs to be unique among all device objects with the same
_HID value. If no _UID exists in the APCI name space for a _HID the value of zero must be stored
in the _UID field of the ACPI Device Path.

The ACPI Device Path is only used to describe devices that are not defined by a Hardware Device
Path. An _HID (along with _CID if present) is required to represent a PCI root bridge, since the
PCI specification does not define the programming model for a PCI root bridge. There are two
subtypes of the ACPI Device Path: a simple subtype that only includes the _HID and _UID fields,
and an extended subtype that includes the _HID, _CID, and _UID fields.

The ACPI Device Path node only supports numeric 32-bit values for the _HID and _UID values.
The Expanded ACPI Device Path node supports both numeric and string values for the _HID,
_UID, and _CID values. As a result, the ACPI Device Path node is smaller and should be used if
possible to reduce the size of device paths that may potentially be stored in nonvolatile storage. If a
string value is required for the _HID field, or a string value is required for the _UID field, or a
_CID field is required, then the Expanded ACPI Device Path node must be used. If a string field of
the Expanded ACPI Device Path node is present, then the corresponding numeric field is ignored.

The _HID and _CID fields in the ACPI Device Path node and Expanded ACPI Device Path node
are stored as a 32-bit compressed EISA-type IDs. The following macro can be used to compute
these EISA-type IDs from a Plug and Play Hardware ID. The Plug and Play Hardware IDs used to
compute the _HID and _CID fields in the EFI device path nodes must match the Plug and Play
Hardware IDs used to build the matching entries in the ACPI tables. The compressed EISA-type
IDs produced by this macro differ from the compressed EISA-type IDs stored in ACPI tables. As a
result, the compressed EISA-type IDs from the ACPI Device Path nodes cannot be directly
compared to the compressed EISA-type IDs from the ACPI table.

#define EFI_PNP_ID(ID) (UINT32)(((ID) << 16) | 0x41D0)

#define EISA_PNP_ID(ID) EFI_PNP_ID(ID)

Advertising