[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 1 of 2] Add the support for Xen to include OVMF UEFI support and directly use it
On 22/02/2012 19:17, "Attilio Rao" <attilio.rao@xxxxxxxxxx> wrote: > when specified in the guest configuration file. > This work is somewhat based on Bei Guan effort during the SoC 2011 and > relies on upstream edk2/ovmf Tianocore ROM to be built separately and > manually copied as: > Build/OvmfX64/DEBUG_GCC44/FV/OVMF.fd -> tools/firmware/ovmf/ovmf-x64.bin > Build/OvmfIa32/DEBUG_GCC44/FV/OVMF.fd -> toolf/firmware/ovmf/ovmf-ia32.bin > > A way to integrate OVMF build directly into XEN has still be discussed > on the mailing list appropriately. I applied this patch but changed CONFIG_OVMF to 'n' so that we don't break the default build while ovmf is not integrated into our build process. I have not applied the other patch (to libxl), but leave that to be reviewed by libxl maintainers. -- Keir > Signed-off-by: Attilio Rao <attilio.rao@xxxxxxxxxx> > > diff -r a88ba599add1 -r 032fea10f8d1 Config.mk > --- a/Config.mk Tue Feb 21 17:45:59 2012 +0000 > +++ b/Config.mk Wed Feb 22 18:54:03 2012 +0000 > @@ -224,6 +224,7 @@ SEABIOS_UPSTREAM_TAG ?= rel-1.6.3.1 > > ETHERBOOT_NICS ?= rtl8139 8086100e > > +CONFIG_OVMF ?= y > CONFIG_ROMBIOS ?= y > CONFIG_SEABIOS ?= y > > diff -r a88ba599add1 -r 032fea10f8d1 tools/firmware/hvmloader/Makefile > --- a/tools/firmware/hvmloader/Makefile Tue Feb 21 17:45:59 2012 +0000 > +++ b/tools/firmware/hvmloader/Makefile Wed Feb 22 18:54:03 2012 +0000 > @@ -37,6 +37,7 @@ endif > > CIRRUSVGA_DEBUG ?= n > > +OVMF_DIR := ../ovmf > ROMBIOS_DIR := ../rombios > SEABIOS_DIR := ../seabios-dir > > @@ -52,6 +53,14 @@ endif > > ROMS := > > +ifeq ($(CONFIG_OVMF),y) > +OBJS += ovmf.o > +CFLAGS += -DENABLE_OVMF32 -DENABLE_OVMF64 > +OVMF32_ROM := $(OVMF_DIR)/ovmf-ia32.bin > +OVMF64_ROM := $(OVMF_DIR)/ovmf-x64.bin > +ROMS += $(OVMF32_ROM) $(OVMF64_ROM) > +endif > + > ifeq ($(CONFIG_ROMBIOS),y) > OBJS += optionroms.o 32bitbios_support.o rombios.o > CFLAGS += -DENABLE_ROMBIOS > @@ -70,7 +79,7 @@ endif > all: subdirs-all > $(MAKE) hvmloader > > -rombios.o seabios.o hvmloader.o: roms.inc > +ovmf.o rombios.o seabios.o hvmloader.o: roms.inc > smbios.o: CFLAGS += -D__SMBIOS_DATE__="\"$(shell date +%m/%d/%Y)\"" > > hvmloader: $(OBJS) acpi/acpi.a > @@ -93,6 +102,18 @@ ifneq ($(SEABIOS_ROM),) > echo "#endif" >> $@.new > endif > > +ifneq ($(OVMF32_ROM),) > + echo "#ifdef ROM_INCLUDE_OVMF32" >> $@.new > + sh ./mkhex ovmf32 $(OVMF32_ROM) >> $@.new > + echo "#endif" >> $@.new > +endif > + > +ifneq ($(OVMF64_ROM),) > + echo "#ifdef ROM_INCLUDE_OVMF64" >> $@.new > + sh ./mkhex ovmf64 $(OVMF64_ROM) >> $@.new > + echo "#endif" >> $@.new > +endif > + > ifneq ($(STDVGA_ROM),) > echo "#ifdef ROM_INCLUDE_VGABIOS" >> $@.new > sh ./mkhex vgabios_stdvga $(STDVGA_ROM) >> $@.new > diff -r a88ba599add1 -r 032fea10f8d1 tools/firmware/hvmloader/config.h > --- a/tools/firmware/hvmloader/config.h Tue Feb 21 17:45:59 2012 +0000 > +++ b/tools/firmware/hvmloader/config.h Wed Feb 22 18:54:03 2012 +0000 > @@ -35,6 +35,8 @@ struct bios_config { > > extern struct bios_config rombios_config; > extern struct bios_config seabios_config; > +extern struct bios_config ovmf32_config; > +extern struct bios_config ovmf64_config; > > #define PAGE_SHIFT 12 > #define PAGE_SIZE (1ul << PAGE_SHIFT) > diff -r a88ba599add1 -r 032fea10f8d1 tools/firmware/hvmloader/hvmloader.c > --- a/tools/firmware/hvmloader/hvmloader.c Tue Feb 21 17:45:59 2012 +0000 > +++ b/tools/firmware/hvmloader/hvmloader.c Wed Feb 22 18:54:03 2012 +0000 > @@ -212,6 +212,12 @@ struct bios_info { > #ifdef ENABLE_SEABIOS > { "seabios", &seabios_config, }, > #endif > +#ifdef ENABLE_OVMF32 > + { "ovmf-ia32", &ovmf32_config, }, > +#endif > +#ifdef ENABLE_OVMF64 > + { "ovmf-x64", &ovmf64_config, }, > +#endif > { NULL, NULL } > }; > > diff -r a88ba599add1 -r 032fea10f8d1 tools/firmware/hvmloader/ovmf.c > --- /dev/null Thu Jan 01 00:00:00 1970 +0000 > +++ b/tools/firmware/hvmloader/ovmf.c Wed Feb 22 18:54:03 2012 +0000 > @@ -0,0 +1,147 @@ > +/* > + * HVM OVMF UEFI support. > + * > + * Bei Guan, gbtju85@xxxxxxxxx > + * Andrei Warkentin, andreiw@xxxxxxxxxxxx > + * Leendert van Doorn, leendert@xxxxxxxxxxxxxx > + * Copyright (c) 2005, International Business Machines Corporation. > + * Copyright (c) 2006, Keir Fraser, XenSource Inc. > + * Copyright (c) 2011, Citrix Inc. > + * > + * This program is free software; you can redistribute it and/or modify it > + * under the terms and conditions of the GNU General Public License, > + * version 2, as published by the Free Software Foundation. > + * > + * This program is distributed in the hope it will be useful, but WITHOUT > + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or > + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for > + * more details. > + * > + * You should have received a copy of the GNU General Public License along > with > + * this program; if not, write to the Free Software Foundation, Inc., 59 > Temple > + * Place - Suite 330, Boston, MA 02111-1307 USA. > + */ > + > +#include "config.h" > +#include "smbios_types.h" > +#include "acpi/acpi2_0.h" > +#include "apic_regs.h" > +#include "../rombios/config.h" > +#include "util.h" > +#include "pci_regs.h" > +#include "hypercall.h" > + > +#include <xen/hvm/params.h> > +#include <xen/hvm/ioreq.h> > +#include <xen/memory.h> > + > +#define ROM_INCLUDE_OVMF32 > +#define ROM_INCLUDE_OVMF64 > +#include "roms.inc" > + > +#define OVMF_BEGIN 0xFFF00000ULL > +#define OVMF_SIZE 0x00100000ULL > +#define OVMF_MAXOFFSET 0x000FFFFFULL > +#define OVMF_END (OVMF_BEGIN + OVMF_SIZE) > +#define LOWCHUNK_BEGIN 0x000F0000 > +#define LOWCHUNK_SIZE 0x00010000 > +#define LOWCHUNK_MAXOFFSET 0x0000FFFF > +#define LOWCHUNK_END (OVMF_BEGIN + OVMF_SIZE) > + > +extern unsigned char dsdt_anycpu[], dsdt_15cpu[]; > +extern int dsdt_anycpu_len, dsdt_15cpu_len; > + > +static void ovmf_load(const struct bios_config *config) > +{ > + xen_pfn_t mfn; > + uint64_t addr = OVMF_BEGIN; > + > + /* Copy low-reset vector portion. */ > + memcpy((void *) LOWCHUNK_BEGIN, (uint8_t *) config->image > + + OVMF_SIZE > + - LOWCHUNK_SIZE, > + LOWCHUNK_SIZE); > + > + /* Ensure we have backing page prior to moving FD. */ > + while ((addr >> PAGE_SHIFT) != (OVMF_END >> PAGE_SHIFT)) { > + mfn = (uint32_t) (addr >> PAGE_SHIFT); > + addr += PAGE_SIZE; > + mem_hole_populate_ram(mfn, 1); > + } > + > + /* Copy FD. */ > + memcpy((void *) OVMF_BEGIN, config->image, OVMF_SIZE); > +} > + > +static void ovmf_acpi_build_tables(void) > +{ > + struct acpi_config config = { > + .dsdt_anycpu = dsdt_anycpu, > + .dsdt_anycpu_len = dsdt_anycpu_len, > + .dsdt_15cpu = dsdt_15cpu, > + .dsdt_15cpu_len = dsdt_15cpu_len, > + }; > + > + acpi_build_tables(&config, ACPI_PHYSICAL_ADDRESS); > +} > + > +static void ovmf_create_smbios_tables(void) > +{ > + hvm_write_smbios_tables(SMBIOS_PHYSICAL_ADDRESS, > + SMBIOS_PHYSICAL_ADDRESS + sizeof(struct > smbios_entry_point), > + SMBIOS_PHYSICAL_END); > +} > + > +struct bios_config ovmf32_config = { > + .name = "OVMF-IA32", > + > + .image = ovmf32, > + .image_size = sizeof(ovmf32), > + > + .bios_address = 0, > + .bios_load = ovmf_load, > + > + .load_roms = 0, > + > + .bios_info_setup = NULL, > + .bios_info_finish = NULL, > + > + .e820_setup = NULL, > + > + .acpi_build_tables = ovmf_acpi_build_tables, > + .create_mp_tables = NULL, > + .create_smbios_tables = ovmf_create_smbios_tables, > + .create_pir_tables = NULL, > +}; > + > +struct bios_config ovmf64_config = { > + .name = "OVMF-X64", > + > + .image = ovmf64, > + .image_size = sizeof(ovmf64), > + > + .bios_address = 0, > + .bios_load = ovmf_load, > + > + .load_roms = 0, > + > + .bios_info_setup = NULL, > + .bios_info_finish = NULL, > + > + .e820_setup = NULL, > + > + .acpi_build_tables = ovmf_acpi_build_tables, > + .create_mp_tables = NULL, > + .create_smbios_tables = ovmf_create_smbios_tables, > + .create_pir_tables = NULL, > +}; > + > +/* > + * Local variables: > + * mode: C > + * c-set-style: "BSD" > + * c-basic-offset: 4 > + * tab-width: 4 > + * indent-tabs-mode: nil > + * End: > + */ > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxx > http://lists.xen.org/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |