--- /dev/null
+DomU ACPI module
+================================
+
+Xen toolstack passes the domU ACPI tables via a reference in the /chosen node of
+the device tree.
+
+Each node contains the following properties:
+
+- compatible
+
+ "xen,guest-acpi", "multiboot,module"
+
+- reg
+
+ Specifies the physical address and the length of the module.
+ RSDP table is always located at the beginning of this region.
+
+Examples
+========
+
+ module@0x20000000 {
+ compatible = "xen,guest-acpi", "multiboot,module";
+ reg = <0x20000000 0x1234>;
+ };
if (res) return res;
}
+ if (libxl_defbool_val(info->acpi)) {
+ const uint64_t acpi_base = GUEST_ACPI_BASE;
+ const char *name = GCSPRINTF("module@%"PRIx64, acpi_base);
+
+ res = fdt_begin_node(fdt, name);
+ if (res) return res;
+
+ res = fdt_property_compat(gc, fdt, 2, "xen,guest-acpi",
+ "multiboot,module");
+ if (res) return res;
+
+ res = fdt_property_regs(gc, fdt, ROOT_ADDRESS_CELLS, ROOT_SIZE_CELLS,
+ 1, 0, 0);
+ if (res) return res;
+
+ res = fdt_end_node(fdt);
+ if (res) return res;
+ }
+
res = fdt_end_node(fdt);
if (res) return res;
finalise_one_node(gc, fdt, "/memory", bankbase[i], size);
}
+ if (dom->acpi_modules[0].data) {
+ finalise_one_node(gc, fdt, "/chosen/module", GUEST_ACPI_BASE,
+ dom->acpi_modules[0].length);
+ }
+
debug_dump_fdt(gc, fdt);
return 0;