Skip to content
  • Rafael J. Wysocki's avatar
    ACPI / property: Add support for data-only subnodes · 445b0eb0
    Rafael J. Wysocki authored
    In some cases, the information expressed via device properties is
    hierarchical by nature.  For example, the properties of a composite
    device consisting of multiple semi-dependent components may need
    to be represented in the form of a tree of property data sets
    corresponding to specific components of the device.
    
    Unfortunately, using ACPI device objects for this purpose turns out
    to be problematic, mostly due to the assumption made by some operating
    systems (that platform firmware generally needs to work with) that
    each device object in the ACPI namespace represents a device requiring
    a separate driver.  That assumption leads to complications which
    reportedly are impractically difficult to overcome and a different
    approach is needed for the sake of interoperability.
    
    The approach implemented here is based on extending _DSD via pointers
    (links) to additional ACPI objects returning data packages formatted
    in accordance with the _DSD formatting rules defined by Section 6.2.5
    of ACPI 6.  Those additional objects are referred to as data-only
    subnodes of the device object containing the _DSD pointing to them.
    
    The links to them need to be located in a separate section of the
    _DSD data package following UUID dbb8e3e6-5886-4ba6-8795-1319f52a966b
    referred to as the Hierarchical Data Extension UUID as defined in [1].
    Each of them is represented by a package of two strings.  The first
    string in that package (the key) is regarded as the name of the
    data-only subnode pointed to by the link.  The second string in it
    (the target) is expected to hold the ACPI namespace path (possibly
    utilizing the usual ACPI namespace search rules) of an ACPI object
    evaluating to a data package extending the _DSD.
    
    The device properties initialization code follows those links,
    creates a struct acpi_data_node object for each of them to store
    the data returned by the ACPI object pointed to by it and processes
    those data recursively (which may lead to the creation of more
    struct acpi_data_node objects if the returned data package contains
    the Hierarchical Data Extension UUID section with more links in it).
    
    All of the struct acpi_data_node objects are present until the the
    ACPI device object containing the _DSD with links to them is deleted
    and they are deleted along with that object.
    
    [1]: http://www.uefi.org/sites/default/files/resources/_DSD-hierarchical-data-extension-UUID-v1.pdf
    
    
    
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    Tested-by: default avatarMika Westerberg <mika.westerberg@linux.intel.com>
    445b0eb0