Page MenuHomeFreeBSD

D39319.diff
No OneTemporary

D39319.diff

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
@@ -16,18 +16,22 @@
struct acpi_device;
+struct acpi_device_emul {
+ const char *name;
+ const char *hid;
+};
+
/**
* Creates an ACPI device.
*
* @param[out] new_dev Returns the newly create ACPI device.
* @param[in] vm_ctx VM context the ACPI device is created in.
- * @param[in] name Name of the ACPI device. Should always be a NULL
- * terminated string.
- * @param[in] hid Hardware ID of the ACPI device. Should always be a NULL
- * terminated string.
+ * @param[in] emul Device emulation struct. It contains some information
+ * like the name of the ACPI device and some device specific
+ * functions.
*/
int acpi_device_create(struct acpi_device **new_dev, struct vmctx *vm_ctx,
- const char *name, const char *hid);
+ const struct acpi_device_emul *emul);
void acpi_device_destroy(struct acpi_device *dev);
int acpi_device_add_res_fixed_ioport(struct acpi_device *dev, UINT16 port,
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
@@ -35,24 +35,23 @@
* Holds information about an ACPI device.
*
* @param vm_ctx VM context the ACPI device was created in.
- * @param name Name of the ACPI device.
- * @param hid Hardware ID of the ACPI device.
+ * @param emul Device emulation struct. It contains some information like the
+ name of the ACPI device and some device specific functions.
* @param crs Current resources used by the ACPI device.
*/
struct acpi_device {
struct vmctx *vm_ctx;
- const char *name;
- const char *hid;
+ const struct acpi_device_emul *emul;
SLIST_HEAD(acpi_resource_list, acpi_resource_list_entry) crs;
};
int
acpi_device_create(struct acpi_device **const new_dev,
- struct vmctx *const vm_ctx, const char *const name, const char *const hid)
+ struct vmctx *const vm_ctx, const struct acpi_device_emul *const emul)
{
- if (new_dev == NULL || vm_ctx == NULL || name == NULL || hid == NULL) {
- return (EINVAL);
- }
+ assert(new_dev != NULL);
+ assert(vm_ctx != NULL);
+ assert(emul != NULL);
struct acpi_device *const dev = calloc(1, sizeof(*dev));
if (dev == NULL) {
@@ -60,13 +59,8 @@
}
dev->vm_ctx = vm_ctx;
- dev->name = strdup(name);
- dev->hid = strdup(hid);
+ dev->emul = emul;
SLIST_INIT(&dev->crs);
- if (dev->name == NULL || dev->hid == NULL) {
- acpi_device_destroy(dev);
- return (ENOMEM);
- }
const int error = acpi_tables_add_device(dev);
if (error) {
@@ -92,9 +86,7 @@
SLIST_REMOVE_HEAD(&dev->crs, chain);
free(res);
}
-
- free(__DECONST(void *, dev->hid));
- free(__DECONST(void *, dev->name));
+
free(dev);
}
@@ -174,9 +166,9 @@
dsdt_line("");
dsdt_line(" Scope (\\_SB)");
dsdt_line(" {");
- dsdt_line(" Device (%s)", dev->name);
+ dsdt_line(" Device (%s)", dev->emul->name);
dsdt_line(" {");
- dsdt_line(" Name (_HID, \"%s\")", dev->hid);
+ dsdt_line(" Name (_HID, \"%s\")", dev->emul->hid);
dsdt_line(" Name (_STA, 0x0F)");
dsdt_line(" Name (_CRS, ResourceTemplate ()");
dsdt_line(" {");
diff --git a/usr.sbin/bhyve/qemu_fwcfg.c b/usr.sbin/bhyve/qemu_fwcfg.c
--- a/usr.sbin/bhyve/qemu_fwcfg.c
+++ b/usr.sbin/bhyve/qemu_fwcfg.c
@@ -365,6 +365,11 @@
return (0);
}
+static const struct acpi_device_emul qemu_fwcfg_acpi_device_emul = {
+ .name = QEMU_FWCFG_ACPI_DEVICE_NAME,
+ .hid = QEMU_FWCFG_ACPI_HARDWARE_ID,
+};
+
int
qemu_fwcfg_init(struct vmctx *const ctx)
{
@@ -378,7 +383,7 @@
*/
if (strcmp(lpc_fwcfg(), "qemu") == 0) {
error = acpi_device_create(&fwcfg_sc.acpi_dev, ctx,
- QEMU_FWCFG_ACPI_DEVICE_NAME, QEMU_FWCFG_ACPI_HARDWARE_ID);
+ &qemu_fwcfg_acpi_device_emul);
if (error) {
warnx("%s: failed to create ACPI device for QEMU FwCfg",
__func__);

File Metadata

Mime Type
text/plain
Expires
Thu, Nov 7, 6:30 PM (21 h, 42 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
14518454
Default Alt Text
D39319.diff (3 KB)

Event Timeline