diff --git a/sys/dev/acpi/acpi_util.c b/sys/dev/acpi/acpi_util.c index b81a1143b0f3..fd26d656a161 100644 --- a/sys/dev/acpi/acpi_util.c +++ b/sys/dev/acpi/acpi_util.c @@ -763,6 +763,25 @@ acpi_dsd_integer(ACPI_HANDLE handle, const char *prop, ACPI_INTEGER *val) return rv; } +ACPI_STATUS +acpi_dsd_package(ACPI_HANDLE handle, const char *prop, ACPI_PACKAGE *pkg) +{ + ACPI_OBJECT *propval; + ACPI_STATUS rv; + ACPI_BUFFER buf; + + buf.Pointer = NULL; + buf.Length = ACPI_ALLOCATE_BUFFER; + + rv = acpi_dsd_property(handle, prop, &buf, ACPI_TYPE_PACKAGE, &propval); + // create copy of propval into pkg + + if (buf.Pointer != NULL) + ACPI_FREE(buf.Pointer); + + return rv; +} + ACPI_STATUS acpi_dsd_string(ACPI_HANDLE handle, const char *prop, char **val) { diff --git a/sys/dev/acpi/acpi_util.h b/sys/dev/acpi/acpi_util.h index 9157d5af8aca..e89f69b5fd85 100644 --- a/sys/dev/acpi/acpi_util.h +++ b/sys/dev/acpi/acpi_util.h @@ -91,6 +91,7 @@ struct cpu_info *acpi_match_cpu_handle(ACPI_HANDLE); char *acpi_pack_compat_list(ACPI_DEVICE_INFO *, size_t *); ACPI_STATUS acpi_dsd_integer(ACPI_HANDLE, const char *, ACPI_INTEGER *); +ACPI_STATUS acpi_dsd_package(ACPI_HANDLE, const char *, ACPI_PACKAGE *); ACPI_STATUS acpi_dsd_string(ACPI_HANDLE, const char *, char **); ACPI_STATUS acpi_dsm(ACPI_HANDLE, uint8_t *, ACPI_INTEGER,