[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.