summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Rudolph <patrick.rudolph@9elements.com>2019-08-20 08:20:01 +0200
committerPatrick Georgi <pgeorgi@google.com>2019-08-23 08:16:21 +0000
commiteeb8e74944488ffbb7aa9a16fb28cc84beb6c353 (patch)
tree24df14db8c2033cb49b384844241f09ce053dc02
parent3d0df83133642350dc716ab67f77021d47e27d95 (diff)
downloadcoreboot-eeb8e74944488ffbb7aa9a16fb28cc84beb6c353.tar.xz
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>
-rw-r--r--src/arch/x86/acpi_device.c18
-rw-r--r--src/arch/x86/include/arch/acpi_device.h1
-rw-r--r--src/include/device/device.h2
3 files changed, 21 insertions, 0 deletions
diff --git a/src/arch/x86/acpi_device.c b/src/arch/x86/acpi_device.c
index 47bcc52c1e..57f06498c8 100644
--- a/src/arch/x86/acpi_device.c
+++ b/src/arch/x86/acpi_device.c
@@ -81,6 +81,24 @@ const char *acpi_device_name(const struct device *dev)
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 d74af9da74..4990df091a 100644
--- a/src/arch/x86/include/arch/acpi_device.h
+++ b/src/arch/x86/include/arch/acpi_device.h
@@ -63,6 +63,7 @@ struct acpi_dp {
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 ebf8314096..b2221ccea2 100644
--- a/src/include/device/device.h
+++ b/src/include/device/device.h
@@ -62,6 +62,8 @@ struct device_operations {
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;