grub/include/grub/xen_file.h
Juergen Gross 0de3eeb623 xen: add capability to load p2m list outside of kernel mapping
Modern pvops linux kernels support a p2m list not covered by the
kernel mapping. This capability is flagged by an elf-note specifying
the virtual address the kernel is expecting the p2m list to be mapped
to.

In case the elf-note is set by the kernel don't place the p2m list
into the kernel mapping, but map it to the given address. This will
allow to support domains with larger memory, as the kernel mapping is
limited to 2GB and a domain with huge memory in the TB range will have
a p2m list larger than this.

Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2016-10-27 16:22:06 +02:00

57 lines
1.6 KiB
C

/*
* GRUB -- GRand Unified Bootloader
* Copyright (C) 2013 Free Software Foundation, Inc.
*
* GRUB 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 3 of the License, or
* (at your option) any later version.
*
* GRUB 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 GRUB. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef GRUB_XEN_FILE_HEADER
#define GRUB_XEN_FILE_HEADER 1
#include <grub/types.h>
#include <grub/elf.h>
#include <grub/elfload.h>
grub_elf_t grub_xen_file (grub_file_t file);
struct grub_xen_file_info
{
grub_uint64_t kern_start, kern_end;
grub_uint64_t virt_base;
grub_uint64_t entry_point;
grub_uint64_t hypercall_page;
grub_uint64_t paddr_offset;
grub_uint64_t p2m_base;
int has_hypercall_page;
int has_note;
int has_xen_guest;
int has_p2m_base;
int extended_cr3;
int unmapped_initrd;
enum
{
GRUB_XEN_FILE_I386 = 1,
GRUB_XEN_FILE_I386_PAE = 2,
GRUB_XEN_FILE_I386_PAE_BIMODE = 3,
GRUB_XEN_FILE_X86_64 = 4
} arch;
};
grub_err_t
grub_xen_get_info32 (grub_elf_t elf, struct grub_xen_file_info *xi);
grub_err_t
grub_xen_get_info64 (grub_elf_t elf, struct grub_xen_file_info *xi);
grub_err_t grub_xen_get_info (grub_elf_t elf, struct grub_xen_file_info *xi);
#endif