Signed-off-by: Boris Ostrovsky
Acked-by: Jan Beulich
---
Changes in v5:
* Dropped include from Makefile
* .gitignore drops all libxl/ssdt* and libxl/ssdt* files from tracking
* Various style adjustments
.gitignore | 11 +-
tools/libacpi/build.c| 6 +-
tools/libacpi/libacpi.h | 6 +-
tools/libxl/Makefile | 17 ++-
tools/libxl/libxl_arch.h | 3 +
tools/libxl/libxl_x86.c | 28 +++--
tools/libxl/libxl_x86_acpi.c | 240 +++
tools/libxl/libxl_x86_acpi.h | 35 +++
8 files changed, 328 insertions(+), 18 deletions(-)
create mode 100644 tools/libxl/libxl_x86_acpi.c
create mode 100644 tools/libxl/libxl_x86_acpi.h
diff --git a/.gitignore b/.gitignore
index 8e30a5d..06bad34 100644
--- a/.gitignore
+++ b/.gitignore
@@ -172,15 +172,18 @@ tools/include/xen/*
tools/include/xen-xsm/*
tools/include/xen-foreign/*.(c|h|size)
tools/include/xen-foreign/checker
-tools/libxl/libxlu_cfg_y.output
+tools/libxl/_libxl.api-for-check
+tools/libxl/*.api-ok
tools/libxl/*.pc
tools/libxl/*.pc.in
-tools/libxl/xl
+tools/libxl/dsdt*
+tools/libxl/libxlu_cfg_y.output
+tools/libxl/mk_dsdt
+tools/libxl/ssdt*
tools/libxl/testenum
tools/libxl/testenum.c
tools/libxl/tmp.*
-tools/libxl/_libxl.api-for-check
-tools/libxl/*.api-ok
+tools/libxl/xl
tools/misc/cpuperf/cpuperf-perfcntr
tools/misc/cpuperf/cpuperf-xen
tools/misc/xc_shadow
diff --git a/tools/libacpi/build.c b/tools/libacpi/build.c
index 6749c9b..47dae01 100644
--- a/tools/libacpi/build.c
+++ b/tools/libacpi/build.c
@@ -497,7 +497,7 @@ static int new_vm_gid(struct acpi_ctxt *ctxt,
return 1;
}
-void acpi_build_tables(struct acpi_ctxt *ctxt, struct acpi_config *config)
+int acpi_build_tables(struct acpi_ctxt *ctxt, struct acpi_config *config)
{
struct acpi_info *acpi_info;
struct acpi_20_rsdp *rsdp;
@@ -632,11 +632,11 @@ void acpi_build_tables(struct acpi_ctxt *ctxt, struct
acpi_config *config)
if ( !new_vm_gid(ctxt, config, acpi_info) )
goto oom;
-return;
+return 0;
oom:
printf("unable to build ACPI tables: out of memory\n");
-
+return -1;
}
/*
diff --git a/tools/libacpi/libacpi.h b/tools/libacpi/libacpi.h
index e386362..1d388f9 100644
--- a/tools/libacpi/libacpi.h
+++ b/tools/libacpi/libacpi.h
@@ -78,10 +78,10 @@ struct acpi_config {
* This must match the OperationRegion(BIOS, SystemMemory, )
* definition in the DSDT
*/
-unsigned int infop;
+unsigned long infop;
/* RSDP address */
-unsigned int rsdp;
+unsigned long rsdp;
/* x86-specific parameters */
uint8_t (*lapic_id)(unsigned cpu);
@@ -91,7 +91,7 @@ struct acpi_config {
uint8_t ioapic_id;
};
-void acpi_build_tables(struct acpi_ctxt *ctxt, struct acpi_config *config);
+int acpi_build_tables(struct acpi_ctxt *ctxt, struct acpi_config *config);
#endif /* __LIBACPI_H__ */
diff --git a/tools/libxl/Makefile b/tools/libxl/Makefile
index 90427ff..3c63bf9 100644
--- a/tools/libxl/Makefile
+++ b/tools/libxl/Makefile
@@ -75,7 +75,20 @@ else
LIBXL_OBJS-y += libxl_no_colo.o
endif
-LIBXL_OBJS-$(CONFIG_X86) += libxl_cpuid.o libxl_x86.o libxl_psr.o
+ACPI_PATH = $(XEN_ROOT)/tools/libacpi
+ACPI_FILES = dsdt_pvh.c
+ACPI_OBJS = $(patsubst %.c,%.o,$(ACPI_FILES)) build.o static_tables.o
+$(ACPI_FILES): acpi
+$(ACPI_OBJS): CFLAGS += -I. -DLIBACPI_STDUTILS=\"$(CURDIR)/libxl_x86_acpi.h\"
+vpath build.c $(ACPI_PATH)/
+vpath static_tables.c $(ACPI_PATH)/
+LIBXL_OBJS-$(CONFIG_X86) += $(ACPI_OBJS)
+
+.PHONY: acpi
+acpi:
+ $(MAKE) -C $(ACPI_PATH) ACPI_BUILD_DIR=$(CURDIR)
+
+LIBXL_OBJS-$(CONFIG_X86) += libxl_cpuid.o libxl_x86.o libxl_psr.o
libxl_x86_acpi.o
LIBXL_OBJS-$(CONFIG_ARM) += libxl_nocpuid.o libxl_arm.o libxl_libfdt_compat.o
ifeq ($(CONFIG_NetBSD),y)
@@ -167,6 +180,7 @@ $(XL_OBJS): CFLAGS += $(CFLAGS_XL)
$(XL_OBJS): CFLAGS += -include $(XEN_ROOT)/tools/config.h # libxl_json.h needs
it.
libxl_dom.o: CFLAGS += -I$(XEN_ROOT)/tools # include libacpi/x86.h
+libxl_x86_acpi.o: CFLAGS += -I$(XEN_ROOT)/tools
SAVE_HELPER_OBJS = libxl_save_helper.o _libxl_save_msgs_helper.o
$(SAVE_HELPER_OBJS): CFLAGS += $(CFLAGS_libxenctrl) $(CFLAGS_libxenevtchn)
@@ -309,6 +323,7 @@ clean:
$(RM) -f testidl.c.new testidl.c *.api-ok
$(RM) -f xenlight.pc
$(RM) -f xlutil.pc
+ $(MAKE) -C $(ACPI_PATH) ACPI_BUILD_DIR=$(CURDIR) clean
distclean: clean
$(RM) -f xenlight.pc.in xlutil.pc.in
diff --git a/tools/libxl/libxl_arch.h b/tools/libxl/libxl_arch.h
index 253a037..b35f7b6 100644
--- a/tools/libxl/libxl_arch.h
+++ b/tools/libxl/libxl_arch.h
@@ -66,6 +66,9 @@ int libxl__arch_domain_construct_memmap(libxl__gc *gc,
#define LAPIC_BASE_ADDRESS 0xfee0
+int libxl__dom_load_acpi(libxl__gc *gc,
+ const libxl_domain_build_info *b_info,
+ struct xc_dom_image *dom);
#endif
#endif
diff --git a/tools/libxl/libxl_x86.c b/tools/libxl/libxl_x8