diff --git a/usr.sbin/bhyve/acpi_device.h b/usr.sbin/bhyve/acpi_device.h --- a/usr.sbin/bhyve/acpi_device.h +++ b/usr.sbin/bhyve/acpi_device.h @@ -23,12 +23,15 @@ * @param hid Used as _HID in the DSDT. * @param build_table Called to build a device specific ACPI table like the TPM2 * table. + * @param write_dsdt Called to append the DSDT with device specific + * information. */ struct acpi_device_emul { const char *name; const char *hid; int (*build_table)(const struct acpi_device *dev); + int (*write_dsdt)(const struct acpi_device *dev); }; /** diff --git a/usr.sbin/bhyve/acpi_device.c b/usr.sbin/bhyve/acpi_device.c --- a/usr.sbin/bhyve/acpi_device.c +++ b/usr.sbin/bhyve/acpi_device.c @@ -190,6 +190,11 @@ BASL_EXEC(acpi_device_write_dsdt_crs(dev)); dsdt_unindent(4); dsdt_line(" })"); + if (dev->emul->write_dsdt != NULL) { + dsdt_indent(3); + BASL_EXEC(dev->emul->write_dsdt(dev)); + dsdt_unindent(3); + } dsdt_line(" }"); dsdt_line(" }");