[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v1 17/20] libacpi: Build DSDT for PVH guests
PVH guests require DSDT with only ACPI INFO (Xen-specific) and Processor objects. We separate ASL's ACPI INFO definition into dsdt_acpi_info.asl so that it can be included in ASLs for both HVM and PVH2. Signed-off-by: Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx> --- New patch tools/libacpi/Makefile | 24 ++++++++++++++++++++---- tools/libacpi/dsdt.asl | 20 -------------------- tools/libacpi/dsdt_acpi_info.asl | 23 +++++++++++++++++++++++ tools/libacpi/mk_dsdt.c | 10 ++++++++++ 4 files changed, 53 insertions(+), 24 deletions(-) create mode 100644 tools/libacpi/dsdt_acpi_info.asl diff --git a/tools/libacpi/Makefile b/tools/libacpi/Makefile index cc0dc31..4068d9a 100644 --- a/tools/libacpi/Makefile +++ b/tools/libacpi/Makefile @@ -20,7 +20,8 @@ include $(XEN_ROOT)/tools/firmware/Rules.mk MK_DSDT = $(ACPI_BUILD_DIR)/mk_dsdt # Sources to be generated -C_SRC = $(ACPI_BUILD_DIR)/dsdt_anycpu.c $(ACPI_BUILD_DIR)/dsdt_15cpu.c $(ACPI_BUILD_DIR)/dsdt_anycpu_qemu_xen.c +C_SRC = $(ACPI_BUILD_DIR)/dsdt_anycpu.c $(ACPI_BUILD_DIR)/dsdt_15cpu.c +C_SRC += $(ACPI_BUILD_DIR)/dsdt_anycpu_qemu_xen.c $(ACPI_BUILD_DIR)/dsdt_pvh.c H_SRC = $(ACPI_BUILD_DIR)/ssdt_s3.h $(ACPI_BUILD_DIR)/ssdt_s4.h $(ACPI_BUILD_DIR)/ssdt_pm.h $(ACPI_BUILD_DIR)/ssdt_tpm.h vpath iasl $(PATH) @@ -36,13 +37,15 @@ $(H_SRC): $(ACPI_BUILD_DIR)/%.h: %.asl iasl $(MK_DSDT): mk_dsdt.c $(HOSTCC) $(HOSTCFLAGS) $(CFLAGS_xeninclude) -o $@ mk_dsdt.c -$(ACPI_BUILD_DIR)/dsdt_anycpu_qemu_xen.asl: dsdt.asl $(MK_DSDT) +$(ACPI_BUILD_DIR)/dsdt_anycpu_qemu_xen.asl: dsdt.asl dsdt_acpi_info.asl $(MK_DSDT) awk 'NR > 1 {print s} {s=$$0}' $< > $@ + cat dsdt_acpi_info.asl >> $@ $(MK_DSDT) --debug=$(debug) --dm-version qemu-xen >> $@ # NB. awk invocation is a portable alternative to 'head -n -1' -$(ACPI_BUILD_DIR)/dsdt_%cpu.asl: dsdt.asl $(MK_DSDT) +$(ACPI_BUILD_DIR)/dsdt_%cpu.asl: dsdt.asl dsdt_acpi_info.asl $(MK_DSDT) awk 'NR > 1 {print s} {s=$$0}' $< > $@ + cat dsdt_acpi_info.asl >> $@ $(MK_DSDT) --debug=$(debug) --maxcpu $* >> $@ $(C_SRC): $(ACPI_BUILD_DIR)/%.c: iasl $(ACPI_BUILD_DIR)/%.asl @@ -53,6 +56,19 @@ $(C_SRC): $(ACPI_BUILD_DIR)/%.c: iasl $(ACPI_BUILD_DIR)/%.asl rm -f $*.aml $*.hex cd $(CURDIR) +$(ACPI_BUILD_DIR)/dsdt_pvh.asl: dsdt_acpi_info.asl $(MK_DSDT) + printf "DefinitionBlock (\"DSDT.aml\", \"DSDT\", 2, \"Xen\", \"HVM\", 0)\n{" > $@ + cat dsdt_acpi_info.asl >> $@ + $(MK_DSDT) --debug=$(debug) --maxcpu any --no-dm >> $@ + +$(ACPI_BUILD_DIR)/dsdt_pvh.c: iasl $(ACPI_BUILD_DIR)/dsdt_pvh.asl + cd $(ACPI_BUILD_DIR) + iasl -vs -p $* -tc $(ACPI_BUILD_DIR)/dsdt_pvh.asl + sed -e 's/AmlCode/dsdt_pvh/g' $*.hex >$@ + echo "int dsdt_pvh_len=sizeof(dsdt_pvh);" >>$@ + rm -f $*.aml $*.hex + cd $(CURDIR) + iasl: @echo @echo "ACPI ASL compiler (iasl) is needed" @@ -62,7 +78,7 @@ iasl: @exit 1 clean: - rm -fr $(C_SRC) $(H_SRC) $(MK_DSDT) $(patsubst %.c,%.asl,$(C_SRC)) + rm -fr $(C_SRC) $(H_SRC) $(MK_DSDT) $(patsubst %.c,%.asl,$(C_SRC)) $(ACPI_BUILD_DIR)/dsdt_pvh.c distclean: clean diff --git a/tools/libacpi/dsdt.asl b/tools/libacpi/dsdt.asl index bd65823..b14f5d0 100644 --- a/tools/libacpi/dsdt.asl +++ b/tools/libacpi/dsdt.asl @@ -43,26 +43,6 @@ DefinitionBlock ("DSDT.aml", "DSDT", 2, "Xen", "HVM", 0) Scope (\_SB) { - /* ACPI_INFO_PHYSICAL_ADDRESS == 0xFC000000 */ - OperationRegion(BIOS, SystemMemory, 0xFC000000, 40) - Field(BIOS, ByteAcc, NoLock, Preserve) { - UAR1, 1, - UAR2, 1, - LTP1, 1, - HPET, 1, - Offset(2), - NCPU, 16, - PMIN, 32, - PLEN, 32, - MSUA, 32, /* MADT checksum address */ - MAPA, 32, /* MADT LAPIC0 address */ - VGIA, 32, /* VM generation id address */ - LMIN, 32, - HMIN, 32, - LLEN, 32, - HLEN, 32 - } - /* Fix HCT test for 0x400 pci memory: * - need to report low 640 MB mem as motherboard resource */ diff --git a/tools/libacpi/dsdt_acpi_info.asl b/tools/libacpi/dsdt_acpi_info.asl new file mode 100644 index 0000000..eeecd49 --- /dev/null +++ b/tools/libacpi/dsdt_acpi_info.asl @@ -0,0 +1,23 @@ + + Scope (\_SB) + { + /* ACPI_INFO_PHYSICAL_ADDRESS == 0xFC000000 */ + OperationRegion(BIOS, SystemMemory, 0xFC000000, 40) + Field(BIOS, ByteAcc, NoLock, Preserve) { + UAR1, 1, + UAR2, 1, + LTP1, 1, + HPET, 1, + Offset(2), + NCPU, 16, + PMIN, 32, + PLEN, 32, + MSUA, 32, /* MADT checksum address */ + MAPA, 32, /* MADT LAPIC0 address */ + VGIA, 32, /* VM generation id address */ + LMIN, 32, + HMIN, 32, + LLEN, 32, + HLEN, 32 + } + } diff --git a/tools/libacpi/mk_dsdt.c b/tools/libacpi/mk_dsdt.c index b2ade89..1322510 100644 --- a/tools/libacpi/mk_dsdt.c +++ b/tools/libacpi/mk_dsdt.c @@ -86,6 +86,7 @@ static struct option options[] = { { "maxcpu", 1, 0, 'c' }, { "dm-version", 1, 0, 'q' }, { "debug", 1, 0, 'd' }, + { "no-dm", 0, 0, 'n' }, { 0, 0, 0, 0 } }; @@ -93,6 +94,7 @@ int main(int argc, char **argv) { unsigned int slot, dev, intx, link, cpu, max_cpus = HVM_MAX_VCPUS; dm_version dm_version = QEMU_XEN_TRADITIONAL; + bool no_dm = 0; for ( ; ; ) { @@ -128,6 +130,9 @@ int main(int argc, char **argv) return -1; } break; + case 'n': + no_dm = 1; + break; case 'd': if (*optarg == 'y') debug = true; @@ -240,6 +245,11 @@ int main(int argc, char **argv) pop_block(); + if (no_dm) { + pop_block(); + return 0; + } + /* Define GPE control method. */ push_block("Scope", "\\_GPE"); push_block("Method", -- 1.7.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |