Patrick Georgi has submitted this change and it was merged. ( https://review.coreboot.org/c/coreboot/+/35006 )
Change subject: arch/x86/acpi: Add acpi_device_hid ......................................................................
arch/x86/acpi: Add acpi_device_hid
Allow a driver to return device specific _HID, which will be consumed by acpigen in order to generate proper SSDTs.
Change-Id: Ibb79eb00c008a3c3cdc12ad2a48b88a055a9216f Signed-off-by: Patrick Rudolph patrick.rudolph@9elements.com Reviewed-on: https://review.coreboot.org/c/coreboot/+/35006 Reviewed-by: Philipp Deppenwiese zaolin.daisuki@gmail.com Tested-by: build bot (Jenkins) no-reply@coreboot.org --- M src/arch/x86/acpi_device.c M src/arch/x86/include/arch/acpi_device.h M src/include/device/device.h 3 files changed, 21 insertions(+), 0 deletions(-)
Approvals: build bot (Jenkins): Verified Philipp Deppenwiese: Looks good to me, approved
diff --git a/src/arch/x86/acpi_device.c b/src/arch/x86/acpi_device.c index 47bcc52..57f0649 100644 --- a/src/arch/x86/acpi_device.c +++ b/src/arch/x86/acpi_device.c @@ -81,6 +81,24 @@ return NULL; }
+/* Locate and return the ACPI _HID (Hardware ID) for this device */ +const char *acpi_device_hid(const struct device *dev) +{ + if (!dev) + return NULL; + + /* Check for device specific handler */ + if (dev->ops->acpi_hid) + return dev->ops->acpi_hid(dev); + + /* + * Don't walk up the tree to find any parent that can identify this device, as + * PNP devices are hard to identify. + */ + + return NULL; +} + /* Recursive function to find the root device and print a path from there */ static ssize_t acpi_device_path_fill(const struct device *dev, char *buf, size_t buf_len, size_t cur) diff --git a/src/arch/x86/include/arch/acpi_device.h b/src/arch/x86/include/arch/acpi_device.h index d74af9d..4990df0 100644 --- a/src/arch/x86/include/arch/acpi_device.h +++ b/src/arch/x86/include/arch/acpi_device.h @@ -63,6 +63,7 @@
struct device; const char *acpi_device_name(const struct device *dev); +const char *acpi_device_hid(const struct device *dev); const char *acpi_device_path(const struct device *dev); const char *acpi_device_scope(const struct device *dev); const char *acpi_device_path_join(const struct device *dev, const char *name); diff --git a/src/include/device/device.h b/src/include/device/device.h index ebf8314..b2221cc 100644 --- a/src/include/device/device.h +++ b/src/include/device/device.h @@ -62,6 +62,8 @@ void (*acpi_fill_ssdt_generator)(struct device *dev); void (*acpi_inject_dsdt_generator)(struct device *dev); const char *(*acpi_name)(const struct device *dev); + /* Returns the optional _HID (Hardware ID) */ + const char *(*acpi_hid)(const struct device *dev); #endif const struct pci_operations *ops_pci; const struct i2c_bus_operations *ops_i2c_bus;