Message ID | 1457072152-16128-2-git-send-email-zhaoshenglong@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
>>> On 04.03.16 at 07:15, <zhaoshenglong@huawei.com> wrote: > From: Shannon Zhao <shannon.zhao@linaro.org> > > Estimate the memory required for loading acpi/efi tables in Dom0. Make > the length of each table aligned with 64bit. Alloc the pages to store > the new created EFI and ACPI tables and free these pages when > destroying domain. > > Cc: Jan Beulich <jbeulich@suse.com> > Signed-off-by: Parth Dixit <parth.dixit@linaro.org> > Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org> Since the pattern repeats I finally have to ask: Who is the author of a patch with such a set of tag? You (From:) or Parth (first S-o-b)? > --- a/xen/common/efi/boot.c > +++ b/xen/common/efi/boot.c > @@ -1151,6 +1151,13 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) > for( ; ; ); /* not reached */ > } > > +#if defined (CONFIG_ACPI) && defined (CONFIG_ARM) > +struct meminfo __init *get_acpi_meminfo(void) > +{ > + return &acpi_mem; > +} > +#endif No such hackery in common code please, if at all avoidable. If ARM maintainers are fine with this in their code, it could be put into ARM's efi-boot.h. > --- a/xen/common/efi/efi.h > +++ b/xen/common/efi/efi.h > @@ -39,3 +39,7 @@ extern UINT64 efi_boot_max_var_store_size, efi_boot_remain_var_store_size, > > unsigned long efi_rs_enter(void); > void efi_rs_leave(unsigned long); > + > +#ifdef CONFIG_ARM > +struct meminfo *get_acpi_meminfo(void); > +#endif Similarly this should be put in an ARM specific header, which efi-boot.h then should include (if it doesn't already). Jan
On Fri, 4 Mar 2016, Jan Beulich wrote: > >>> On 04.03.16 at 07:15, <zhaoshenglong@huawei.com> wrote: > > From: Shannon Zhao <shannon.zhao@linaro.org> > > > > Estimate the memory required for loading acpi/efi tables in Dom0. Make > > the length of each table aligned with 64bit. Alloc the pages to store > > the new created EFI and ACPI tables and free these pages when > > destroying domain. > > > > Cc: Jan Beulich <jbeulich@suse.com> > > Signed-off-by: Parth Dixit <parth.dixit@linaro.org> > > Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org> > > Since the pattern repeats I finally have to ask: Who is the author > of a patch with such a set of tag? You (From:) or Parth (first S-o-b)? > > > --- a/xen/common/efi/boot.c > > +++ b/xen/common/efi/boot.c > > @@ -1151,6 +1151,13 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) > > for( ; ; ); /* not reached */ > > } > > > > +#if defined (CONFIG_ACPI) && defined (CONFIG_ARM) > > +struct meminfo __init *get_acpi_meminfo(void) > > +{ > > + return &acpi_mem; > > +} > > +#endif > > No such hackery in common code please, if at all avoidable. If ARM > maintainers are fine with this in their code, it could be put into > ARM's efi-boot.h. I am OK with that. If you move it under arch/arm, then drop the ifdef CONFIG_ARM. > > --- a/xen/common/efi/efi.h > > +++ b/xen/common/efi/efi.h > > @@ -39,3 +39,7 @@ extern UINT64 efi_boot_max_var_store_size, efi_boot_remain_var_store_size, > > > > unsigned long efi_rs_enter(void); > > void efi_rs_leave(unsigned long); > > + > > +#ifdef CONFIG_ARM > > +struct meminfo *get_acpi_meminfo(void); > > +#endif > > Similarly this should be put in an ARM specific header, which > efi-boot.h then should include (if it doesn't already).
On 2016?03?04? 18:55, Stefano Stabellini wrote: > On Fri, 4 Mar 2016, Jan Beulich wrote: >>>>> > >>> On 04.03.16 at 07:15, <zhaoshenglong@huawei.com> wrote: >>> > > From: Shannon Zhao <shannon.zhao@linaro.org> >>> > > >>> > > Estimate the memory required for loading acpi/efi tables in Dom0. Make >>> > > the length of each table aligned with 64bit. Alloc the pages to store >>> > > the new created EFI and ACPI tables and free these pages when >>> > > destroying domain. >>> > > >>> > > Cc: Jan Beulich <jbeulich@suse.com> >>> > > Signed-off-by: Parth Dixit <parth.dixit@linaro.org> >>> > > Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org> >> > >> > Since the pattern repeats I finally have to ask: Who is the author >> > of a patch with such a set of tag? You (From:) or Parth (first S-o-b)? >> > >>> > > --- a/xen/common/efi/boot.c >>> > > +++ b/xen/common/efi/boot.c >>> > > @@ -1151,6 +1151,13 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) >>> > > for( ; ; ); /* not reached */ >>> > > } >>> > > >>> > > +#if defined (CONFIG_ACPI) && defined (CONFIG_ARM) >>> > > +struct meminfo __init *get_acpi_meminfo(void) >>> > > +{ >>> > > + return &acpi_mem; >>> > > +} >>> > > +#endif >> > >> > No such hackery in common code please, if at all avoidable. If ARM >> > maintainers are fine with this in their code, it could be put into >> > ARM's efi-boot.h. > I am OK with that. If you move it under arch/arm, then drop the ifdef > CONFIG_ARM. > While I want to include efi-boot.h in efi-dom.c firstly, but there are many defined-but-not-used errors because there are some of functions in efi-boot.h which are not used in efi-dom0.c. So how could we solve such a problem? Thanks, -- Shannon
On Fri, 4 Mar 2016, Shannon Zhao wrote: > On 2016?03?04? 18:55, Stefano Stabellini wrote: > > On Fri, 4 Mar 2016, Jan Beulich wrote: > >>>>> > >>> On 04.03.16 at 07:15, <zhaoshenglong@huawei.com> wrote: > >>> > > From: Shannon Zhao <shannon.zhao@linaro.org> > >>> > > > >>> > > Estimate the memory required for loading acpi/efi tables in Dom0. Make > >>> > > the length of each table aligned with 64bit. Alloc the pages to store > >>> > > the new created EFI and ACPI tables and free these pages when > >>> > > destroying domain. > >>> > > > >>> > > Cc: Jan Beulich <jbeulich@suse.com> > >>> > > Signed-off-by: Parth Dixit <parth.dixit@linaro.org> > >>> > > Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org> > >> > > >> > Since the pattern repeats I finally have to ask: Who is the author > >> > of a patch with such a set of tag? You (From:) or Parth (first S-o-b)? > >> > > >>> > > --- a/xen/common/efi/boot.c > >>> > > +++ b/xen/common/efi/boot.c > >>> > > @@ -1151,6 +1151,13 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) > >>> > > for( ; ; ); /* not reached */ > >>> > > } > >>> > > > >>> > > +#if defined (CONFIG_ACPI) && defined (CONFIG_ARM) > >>> > > +struct meminfo __init *get_acpi_meminfo(void) > >>> > > +{ > >>> > > + return &acpi_mem; > >>> > > +} > >>> > > +#endif > >> > > >> > No such hackery in common code please, if at all avoidable. If ARM > >> > maintainers are fine with this in their code, it could be put into > >> > ARM's efi-boot.h. > > I am OK with that. If you move it under arch/arm, then drop the ifdef > > CONFIG_ARM. > > > While I want to include efi-boot.h in efi-dom.c firstly, but there are > many defined-but-not-used errors because there are some of functions in > efi-boot.h which are not used in efi-dom0.c. > So how could we solve such a problem? It is probably not a good idea to include efi-boot.h in efi-dom.c. Why are you trying to do that?
>>> On 04.03.16 at 16:03, <shannon.zhao@linaro.org> wrote: > On 2016?03?04? 18:55, Stefano Stabellini wrote: >> On Fri, 4 Mar 2016, Jan Beulich wrote: >>>>>> > >>> On 04.03.16 at 07:15, <zhaoshenglong@huawei.com> wrote: >>>> > > From: Shannon Zhao <shannon.zhao@linaro.org> >>>> > > >>>> > > Estimate the memory required for loading acpi/efi tables in Dom0. Make >>>> > > the length of each table aligned with 64bit. Alloc the pages to store >>>> > > the new created EFI and ACPI tables and free these pages when >>>> > > destroying domain. >>>> > > >>>> > > Cc: Jan Beulich <jbeulich@suse.com> >>>> > > Signed-off-by: Parth Dixit <parth.dixit@linaro.org> >>>> > > Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org> >>> > >>> > Since the pattern repeats I finally have to ask: Who is the author >>> > of a patch with such a set of tag? You (From:) or Parth (first S-o-b)? >>> > >>>> > > --- a/xen/common/efi/boot.c >>>> > > +++ b/xen/common/efi/boot.c >>>> > > @@ -1151,6 +1151,13 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE > *SystemTable) >>>> > > for( ; ; ); /* not reached */ >>>> > > } >>>> > > >>>> > > +#if defined (CONFIG_ACPI) && defined (CONFIG_ARM) >>>> > > +struct meminfo __init *get_acpi_meminfo(void) >>>> > > +{ >>>> > > + return &acpi_mem; >>>> > > +} >>>> > > +#endif >>> > >>> > No such hackery in common code please, if at all avoidable. If ARM >>> > maintainers are fine with this in their code, it could be put into >>> > ARM's efi-boot.h. >> I am OK with that. If you move it under arch/arm, then drop the ifdef >> CONFIG_ARM. >> > While I want to include efi-boot.h in efi-dom.c firstly, but there are > many defined-but-not-used errors because there are some of functions in > efi-boot.h which are not used in efi-dom0.c. > So how could we solve such a problem? efi-boot.h is not a normal header, and should not be included by other than efi/boot.c. Just put the declaration in some header under asm-arm/. Jan
On 2016/3/4 23:23, Stefano Stabellini wrote: > On Fri, 4 Mar 2016, Shannon Zhao wrote: >> >On 2016?03?04? 18:55, Stefano Stabellini wrote: >>> > >On Fri, 4 Mar 2016, Jan Beulich wrote: >>>>>>>>>>> > >>>>> > >>>On 04.03.16 at 07:15,<zhaoshenglong@huawei.com> wrote: >>>>>>> > >>> > >From: Shannon Zhao<shannon.zhao@linaro.org> >>>>>>> > >>> > > >>>>>>> > >>> > >Estimate the memory required for loading acpi/efi tables in Dom0. Make >>>>>>> > >>> > >the length of each table aligned with 64bit. Alloc the pages to store >>>>>>> > >>> > >the new created EFI and ACPI tables and free these pages when >>>>>>> > >>> > >destroying domain. >>>>>>> > >>> > > >>>>>>> > >>> > >Cc: Jan Beulich<jbeulich@suse.com> >>>>>>> > >>> > >Signed-off-by: Parth Dixit<parth.dixit@linaro.org> >>>>>>> > >>> > >Signed-off-by: Shannon Zhao<shannon.zhao@linaro.org> >>>>> > >> > >>>>> > >> >Since the pattern repeats I finally have to ask: Who is the author >>>>> > >> >of a patch with such a set of tag? You (From:) or Parth (first S-o-b)? >>>>> > >> > >>>>>>> > >>> > >--- a/xen/common/efi/boot.c >>>>>>> > >>> > >+++ b/xen/common/efi/boot.c >>>>>>> > >>> > >@@ -1151,6 +1151,13 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) >>>>>>> > >>> > > for( ; ; ); /* not reached */ >>>>>>> > >>> > > } >>>>>>> > >>> > > >>>>>>> > >>> > >+#if defined (CONFIG_ACPI) && defined (CONFIG_ARM) >>>>>>> > >>> > >+struct meminfo __init *get_acpi_meminfo(void) >>>>>>> > >>> > >+{ >>>>>>> > >>> > >+ return &acpi_mem; >>>>>>> > >>> > >+} >>>>>>> > >>> > >+#endif >>>>> > >> > >>>>> > >> >No such hackery in common code please, if at all avoidable. If ARM >>>>> > >> >maintainers are fine with this in their code, it could be put into >>>>> > >> >ARM's efi-boot.h. >>> > >I am OK with that. If you move it under arch/arm, then drop the ifdef >>> > >CONFIG_ARM. >>> > > >> >While I want to include efi-boot.h in efi-dom.c firstly, but there are >> >many defined-but-not-used errors because there are some of functions in >> >efi-boot.h which are not used in efi-dom0.c. >> >So how could we solve such a problem? > > It is probably not a good idea to include efi-boot.h in efi-dom.c. Why > are you trying to do that? Use acpi_mem which is defined in efi-boot.h. Maybe as Jan suggested I should add a new header under asm-arm to extern acpi_mem then include this new header to efi-dom0.c. How about this? Thanks,
On Fri, 4 Mar 2016, Shannon Zhao wrote: > On 2016/3/4 23:23, Stefano Stabellini wrote: > > On Fri, 4 Mar 2016, Shannon Zhao wrote: > > > >On 2016?03?04? 18:55, Stefano Stabellini wrote: > > > > > >On Fri, 4 Mar 2016, Jan Beulich wrote: > > > > > > > > > > > > > >>>>> > >>>On 04.03.16 at > > > > > > > > > > > > 07:15,<zhaoshenglong@huawei.com> wrote: > > > > > > > > > >>> > >From: Shannon Zhao<shannon.zhao@linaro.org> > > > > > > > > > >>> > > > > > > > > > > > >>> > >Estimate the memory required for loading acpi/efi > > > > > > > > tables in Dom0. Make > > > > > > > > > >>> > >the length of each table aligned with 64bit. Alloc the > > > > > > > > pages to store > > > > > > > > > >>> > >the new created EFI and ACPI tables and free these > > > > > > > > pages when > > > > > > > > > >>> > >destroying domain. > > > > > > > > > >>> > > > > > > > > > > > >>> > >Cc: Jan Beulich<jbeulich@suse.com> > > > > > > > > > >>> > >Signed-off-by: Parth Dixit<parth.dixit@linaro.org> > > > > > > > > > >>> > >Signed-off-by: Shannon Zhao<shannon.zhao@linaro.org> > > > > > > > >> > > > > > > > > >> >Since the pattern repeats I finally have to ask: Who is the > > > > > > author > > > > > > > >> >of a patch with such a set of tag? You (From:) or Parth (first > > > > > > S-o-b)? > > > > > > > >> > > > > > > > > > > >>> > >--- a/xen/common/efi/boot.c > > > > > > > > > >>> > >+++ b/xen/common/efi/boot.c > > > > > > > > > >>> > >@@ -1151,6 +1151,13 @@ efi_start(EFI_HANDLE > > > > > > > > ImageHandle, EFI_SYSTEM_TABLE *SystemTable) > > > > > > > > > >>> > > for( ; ; ); /* not reached */ > > > > > > > > > >>> > > } > > > > > > > > > >>> > > > > > > > > > > > >>> > >+#if defined (CONFIG_ACPI) && defined (CONFIG_ARM) > > > > > > > > > >>> > >+struct meminfo __init *get_acpi_meminfo(void) > > > > > > > > > >>> > >+{ > > > > > > > > > >>> > >+ return &acpi_mem; > > > > > > > > > >>> > >+} > > > > > > > > > >>> > >+#endif > > > > > > > >> > > > > > > > > >> >No such hackery in common code please, if at all avoidable. If > > > > > > ARM > > > > > > > >> >maintainers are fine with this in their code, it could be put > > > > > > into > > > > > > > >> >ARM's efi-boot.h. > > > > > >I am OK with that. If you move it under arch/arm, then drop the ifdef > > > > > >CONFIG_ARM. > > > > > > > > > >While I want to include efi-boot.h in efi-dom.c firstly, but there are > > > >many defined-but-not-used errors because there are some of functions in > > > >efi-boot.h which are not used in efi-dom0.c. > > > >So how could we solve such a problem? > > > > It is probably not a good idea to include efi-boot.h in efi-dom.c. Why > > are you trying to do that? > Use acpi_mem which is defined in efi-boot.h. Maybe as Jan suggested I should > add a new header under asm-arm to extern acpi_mem then include this new header > to efi-dom0.c. How about this? Yes, that's how I think it should be done.
diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c index 3d274ae..1365b4a 100644 --- a/xen/arch/arm/domain.c +++ b/xen/arch/arm/domain.c @@ -640,6 +640,10 @@ void arch_domain_destroy(struct domain *d) domain_vgic_free(d); domain_vuart_free(d); free_xenheap_page(d->shared_info); +#ifdef CONFIG_ACPI + free_xenheap_pages(d->arch.efi_acpi_table, + get_order_from_bytes(d->arch.efi_acpi_len)); +#endif } void arch_domain_shutdown(struct domain *d) diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c index 83676e4..4e20499 100644 --- a/xen/arch/arm/domain_build.c +++ b/xen/arch/arm/domain_build.c @@ -12,6 +12,8 @@ #include <xen/libfdt/libfdt.h> #include <xen/guest_access.h> #include <xen/iocap.h> +#include <xen/acpi.h> +#include <acpi/actables.h> #include <asm/device.h> #include <asm/setup.h> #include <asm/platform.h> @@ -1354,6 +1356,79 @@ static int prepare_dtb(struct domain *d, struct kernel_info *kinfo) return -EINVAL; } +#ifdef CONFIG_ACPI +static int estimate_acpi_efi_size(struct domain *d, struct kernel_info *kinfo) +{ + size_t efi_size, acpi_size, madt_size; + u64 addr; + struct acpi_table_rsdp *rsdp_tbl; + struct acpi_table_header *table; + + efi_size = estimate_efi_size(kinfo->mem.nr_banks); + + acpi_size = ROUNDUP(sizeof(struct acpi_table_fadt), 8); + acpi_size += ROUNDUP(sizeof(struct acpi_table_stao), 8); + + madt_size = sizeof(struct acpi_table_madt) + + sizeof(struct acpi_madt_generic_interrupt) * d->max_vcpus + + sizeof(struct acpi_madt_generic_distributor); + if ( d->arch.vgic.version == GIC_V3 ) + madt_size += sizeof(struct acpi_madt_generic_redistributor) + * d->arch.vgic.nr_regions; + acpi_size += ROUNDUP(madt_size, 8); + + addr = acpi_os_get_root_pointer(); + if ( !addr ) + { + printk("Unable to get acpi root pointer\n"); + return -EINVAL; + } + rsdp_tbl = acpi_os_map_memory(addr, sizeof(struct acpi_table_rsdp)); + table = acpi_os_map_memory(rsdp_tbl->xsdt_physical_address, + sizeof(struct acpi_table_header)); + /* Add place for STAO table in XSDT table */ + acpi_size += ROUNDUP(table->length + sizeof(u64), 8); + acpi_os_unmap_memory(table, sizeof(struct acpi_table_header)); + acpi_os_unmap_memory(rsdp_tbl, sizeof(struct acpi_table_rsdp)); + + acpi_size += ROUNDUP(sizeof(struct acpi_table_rsdp), 8); + d->arch.efi_acpi_len = ROUNDUP(efi_size, 8) + ROUNDUP(acpi_size, 8); + + return 0; +} + +static int prepare_acpi(struct domain *d, struct kernel_info *kinfo) +{ + int rc = 0; + int order; + + rc = estimate_acpi_efi_size(d, kinfo); + if ( rc != 0 ) + return rc; + + order = get_order_from_bytes(d->arch.efi_acpi_len); + d->arch.efi_acpi_table = alloc_xenheap_pages(order, 0); + if ( d->arch.efi_acpi_table == NULL ) + { + printk("unable to allocate memory!\n"); + return -ENOMEM; + } + memset(d->arch.efi_acpi_table, 0, d->arch.efi_acpi_len); + + /* For ACPI, Dom0 doesn't use kinfo->gnttab_start to get the grant table + * region. So we use it as the ACPI table mapped address. */ + d->arch.efi_acpi_gpa = kinfo->gnttab_start; + + return 0; +} +#else +static int prepare_acpi(struct domain *d, struct kernel_info *kinfo) +{ + /* Only booting with ACPI will hit here */ + BUG_ON(1); + return -EINVAL; +} +#endif static void dtb_load(struct kernel_info *kinfo) { void * __user dtb_virt = (void * __user)(register_t)kinfo->dtb_paddr; @@ -1540,7 +1615,11 @@ int construct_dom0(struct domain *d) allocate_memory(d, &kinfo); find_gnttab_region(d, &kinfo); - rc = prepare_dtb(d, &kinfo); + if ( acpi_disabled ) + rc = prepare_dtb(d, &kinfo); + else + rc = prepare_acpi(d, &kinfo); + if ( rc < 0 ) return rc; diff --git a/xen/arch/arm/efi/Makefile b/xen/arch/arm/efi/Makefile index 729e53e..b38a0c9 100644 --- a/xen/arch/arm/efi/Makefile +++ b/xen/arch/arm/efi/Makefile @@ -1,3 +1,3 @@ CFLAGS += -fshort-wchar -obj-y += boot.init.o runtime.o +obj-y += boot.init.o runtime.o efi-dom0.init.o diff --git a/xen/arch/arm/efi/efi-dom0.c b/xen/arch/arm/efi/efi-dom0.c new file mode 100644 index 0000000..d54c38f --- /dev/null +++ b/xen/arch/arm/efi/efi-dom0.c @@ -0,0 +1,48 @@ +/* + * efi-dom0.c - Domain0 EFI Boot Support + * + * Copyright (C) 2016 Shannon Zhao <shannon.zhao@linaro.org> + * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that 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, see <http://www.gnu.org/licenses/>. + * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + */ + +#include "efi.h" +#include <asm/setup.h> +#include <asm/acpi.h> + +/* Constant to indicate "Xen" in unicode u16 format */ +static const CHAR16 xen_efi_fw_vendor[] = {0x0058, 0x0065, 0x006E, 0x0000}; + +size_t __init estimate_efi_size(int mem_nr_banks) +{ + size_t size; + size_t est_size = sizeof(EFI_SYSTEM_TABLE); + size_t ect_size = sizeof(EFI_CONFIGURATION_TABLE); + size_t emd_size = sizeof(EFI_MEMORY_DESCRIPTOR); + size_t fw_vendor_size = sizeof(xen_efi_fw_vendor); + int acpi_mem_nr_banks = 0; + + if ( !acpi_disabled ) + acpi_mem_nr_banks = get_acpi_meminfo()->nr_banks; + + size = ROUNDUP(est_size + ect_size + fw_vendor_size, 8); + /* plus 1 for new created tables */ + size += ROUNDUP(emd_size * (mem_nr_banks + acpi_mem_nr_banks + 1), 8); + + return size; +} diff --git a/xen/common/efi/boot.c b/xen/common/efi/boot.c index 125c9ce..f4f436f 100644 --- a/xen/common/efi/boot.c +++ b/xen/common/efi/boot.c @@ -1151,6 +1151,13 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) for( ; ; ); /* not reached */ } +#if defined (CONFIG_ACPI) && defined (CONFIG_ARM) +struct meminfo __init *get_acpi_meminfo(void) +{ + return &acpi_mem; +} +#endif + #ifndef CONFIG_ARM /* TODO - runtime service support */ static bool_t __initdata efi_rs_enable = 1; diff --git a/xen/common/efi/efi.h b/xen/common/efi/efi.h index c557104..d7b1018 100644 --- a/xen/common/efi/efi.h +++ b/xen/common/efi/efi.h @@ -39,3 +39,7 @@ extern UINT64 efi_boot_max_var_store_size, efi_boot_remain_var_store_size, unsigned long efi_rs_enter(void); void efi_rs_leave(unsigned long); + +#ifdef CONFIG_ARM +struct meminfo *get_acpi_meminfo(void); +#endif diff --git a/xen/include/asm-arm/setup.h b/xen/include/asm-arm/setup.h index 30ac53b..7f233a1 100644 --- a/xen/include/asm-arm/setup.h +++ b/xen/include/asm-arm/setup.h @@ -51,6 +51,8 @@ void arch_init_memory(void); void copy_from_paddr(void *dst, paddr_t paddr, unsigned long len); +size_t estimate_efi_size(int mem_nr_banks); + int construct_dom0(struct domain *d); void discard_initial_modules(void);