diff options
Diffstat (limited to 'main/grub/0004-xen-Prepare-common-code-for-Xen-PVH-support.patch')
-rw-r--r-- | main/grub/0004-xen-Prepare-common-code-for-Xen-PVH-support.patch | 245 |
1 files changed, 245 insertions, 0 deletions
diff --git a/main/grub/0004-xen-Prepare-common-code-for-Xen-PVH-support.patch b/main/grub/0004-xen-Prepare-common-code-for-Xen-PVH-support.patch new file mode 100644 index 0000000000..f5d42d8829 --- /dev/null +++ b/main/grub/0004-xen-Prepare-common-code-for-Xen-PVH-support.patch @@ -0,0 +1,245 @@ +From 49a68b2a338cd55490c776d15b0b399303a08df5 Mon Sep 17 00:00:00 2001 +From: Juergen Gross <jgross@suse.com> +Date: Fri, 7 Dec 2018 13:11:32 +0100 +Subject: [PATCH 04/20] xen: Prepare common code for Xen PVH support + +Some common code needs to be special cased for Xen PVH mode. This hits +mostly Xen PV mode specific areas. + +Split include/grub/i386/pc/int_types.h off from +include/grub/i386/pc/int.h to support including this file later from +xen_pvh code without the grub_bios_interrupt definition. + +Move definition of struct grub_e820_mmap_entry from +grub-core/mmap/i386/pc/mmap.c to include/grub/i386/memory.h in order +to make it usable from xen_pvh code. + +Signed-off-by: Juergen Gross <jgross@suse.com> +Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com> +Tested-by: Hans van Kranenburg <hans@knorrie.org> +(cherry picked from commit fc9d47ead56365c3335bb42cf651008c9ac1f494) +--- + grub-core/kern/i386/tsc.c | 2 +- + grub-core/mmap/i386/pc/mmap.c | 8 ----- + include/grub/i386/memory.h | 7 ++++ + include/grub/i386/pc/int.h | 36 +------------------ + include/grub/i386/pc/int_types.h | 59 +++++++++++++++++++++++++++++++ + include/grub/i386/tsc.h | 2 +- + include/grub/i386/xen/hypercall.h | 5 ++- + include/grub/kernel.h | 4 ++- + 8 files changed, 76 insertions(+), 47 deletions(-) + create mode 100644 include/grub/i386/pc/int_types.h + +diff --git a/grub-core/kern/i386/tsc.c b/grub-core/kern/i386/tsc.c +index 2e85289d8..b50831bfc 100644 +--- a/grub-core/kern/i386/tsc.c ++++ b/grub-core/kern/i386/tsc.c +@@ -65,7 +65,7 @@ grub_tsc_init (void) + + tsc_boot_time = grub_get_tsc (); + +-#ifdef GRUB_MACHINE_XEN ++#if defined (GRUB_MACHINE_XEN) || defined (GRUB_MACHINE_XEN_PVH) + (void) (grub_tsc_calibrate_from_xen () || calibrate_tsc_hardcode()); + #elif defined (GRUB_MACHINE_EFI) + (void) (grub_tsc_calibrate_from_pit () || grub_tsc_calibrate_from_pmtimer () || grub_tsc_calibrate_from_efi() || calibrate_tsc_hardcode()); +diff --git a/grub-core/mmap/i386/pc/mmap.c b/grub-core/mmap/i386/pc/mmap.c +index 609994516..6ab4f6730 100644 +--- a/grub-core/mmap/i386/pc/mmap.c ++++ b/grub-core/mmap/i386/pc/mmap.c +@@ -42,14 +42,6 @@ extern grub_uint16_t grub_machine_mmaphook_kblow; + extern grub_uint16_t grub_machine_mmaphook_kbin16mb; + extern grub_uint16_t grub_machine_mmaphook_64kbin4gb; + +-struct grub_e820_mmap_entry +-{ +- grub_uint64_t addr; +- grub_uint64_t len; +- grub_uint32_t type; +-} GRUB_PACKED; +- +- + /* Helper for preboot. */ + static int fill_hook (grub_uint64_t addr, grub_uint64_t size, + grub_memory_type_t type, void *data) +diff --git a/include/grub/i386/memory.h b/include/grub/i386/memory.h +index 8bb6e1cbb..5cb607fb4 100644 +--- a/include/grub/i386/memory.h ++++ b/include/grub/i386/memory.h +@@ -44,6 +44,13 @@ + + #include <grub/types.h> + ++struct grub_e820_mmap_entry ++{ ++ grub_uint64_t addr; ++ grub_uint64_t len; ++ grub_uint32_t type; ++} GRUB_PACKED; ++ + grub_uint64_t grub_mmap_get_upper (void); + grub_uint64_t grub_mmap_get_lower (void); + grub_uint64_t grub_mmap_get_post64 (void); +diff --git a/include/grub/i386/pc/int.h b/include/grub/i386/pc/int.h +index 16a53e4fe..a60104001 100644 +--- a/include/grub/i386/pc/int.h ++++ b/include/grub/i386/pc/int.h +@@ -20,45 +20,11 @@ + #define GRUB_INTERRUPT_MACHINE_HEADER 1 + + #include <grub/symbol.h> +-#include <grub/types.h> +- +-struct grub_bios_int_registers +-{ +- grub_uint32_t eax; +- grub_uint16_t es; +- grub_uint16_t ds; +- grub_uint16_t flags; +- grub_uint16_t dummy; +- grub_uint32_t ebx; +- grub_uint32_t ecx; +- grub_uint32_t edi; +- grub_uint32_t esi; +- grub_uint32_t edx; +-}; +- +-#define GRUB_CPU_INT_FLAGS_CARRY 0x1 +-#define GRUB_CPU_INT_FLAGS_PARITY 0x4 +-#define GRUB_CPU_INT_FLAGS_ADJUST 0x10 +-#define GRUB_CPU_INT_FLAGS_ZERO 0x40 +-#define GRUB_CPU_INT_FLAGS_SIGN 0x80 +-#define GRUB_CPU_INT_FLAGS_TRAP 0x100 +-#define GRUB_CPU_INT_FLAGS_INTERRUPT 0x200 +-#define GRUB_CPU_INT_FLAGS_DIRECTION 0x400 +-#define GRUB_CPU_INT_FLAGS_OVERFLOW 0x800 +-#ifdef GRUB_MACHINE_PCBIOS +-#define GRUB_CPU_INT_FLAGS_DEFAULT GRUB_CPU_INT_FLAGS_INTERRUPT +-#else +-#define GRUB_CPU_INT_FLAGS_DEFAULT 0 +-#endif ++#include <grub/i386/pc/int_types.h> + + void EXPORT_FUNC (grub_bios_interrupt) (grub_uint8_t intno, + struct grub_bios_int_registers *regs) + __attribute__ ((regparm(3))); +-struct grub_i386_idt +-{ +- grub_uint16_t limit; +- grub_uint32_t base; +-} GRUB_PACKED; + + #ifdef GRUB_MACHINE_PCBIOS + extern struct grub_i386_idt *EXPORT_VAR(grub_realidt); +diff --git a/include/grub/i386/pc/int_types.h b/include/grub/i386/pc/int_types.h +new file mode 100644 +index 000000000..2c5a69b63 +--- /dev/null ++++ b/include/grub/i386/pc/int_types.h +@@ -0,0 +1,59 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2018 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_INTERRUPT_TYPES_MACHINE_HEADER ++#define GRUB_INTERRUPT_TYPES_MACHINE_HEADER 1 ++ ++#include <grub/types.h> ++ ++#define GRUB_CPU_INT_FLAGS_CARRY 0x1 ++#define GRUB_CPU_INT_FLAGS_PARITY 0x4 ++#define GRUB_CPU_INT_FLAGS_ADJUST 0x10 ++#define GRUB_CPU_INT_FLAGS_ZERO 0x40 ++#define GRUB_CPU_INT_FLAGS_SIGN 0x80 ++#define GRUB_CPU_INT_FLAGS_TRAP 0x100 ++#define GRUB_CPU_INT_FLAGS_INTERRUPT 0x200 ++#define GRUB_CPU_INT_FLAGS_DIRECTION 0x400 ++#define GRUB_CPU_INT_FLAGS_OVERFLOW 0x800 ++#ifdef GRUB_MACHINE_PCBIOS ++#define GRUB_CPU_INT_FLAGS_DEFAULT GRUB_CPU_INT_FLAGS_INTERRUPT ++#else ++#define GRUB_CPU_INT_FLAGS_DEFAULT 0 ++#endif ++ ++struct grub_bios_int_registers ++{ ++ grub_uint32_t eax; ++ grub_uint16_t es; ++ grub_uint16_t ds; ++ grub_uint16_t flags; ++ grub_uint16_t dummy; ++ grub_uint32_t ebx; ++ grub_uint32_t ecx; ++ grub_uint32_t edi; ++ grub_uint32_t esi; ++ grub_uint32_t edx; ++}; ++ ++struct grub_i386_idt ++{ ++ grub_uint16_t limit; ++ grub_uint32_t base; ++} GRUB_PACKED; ++ ++#endif +diff --git a/include/grub/i386/tsc.h b/include/grub/i386/tsc.h +index a0aa2c573..324174ded 100644 +--- a/include/grub/i386/tsc.h ++++ b/include/grub/i386/tsc.h +@@ -54,7 +54,7 @@ grub_get_tsc (void) + static __inline int + grub_cpu_is_tsc_supported (void) + { +-#ifndef GRUB_MACHINE_XEN ++#if !defined(GRUB_MACHINE_XEN) && !defined(GRUB_MACHINE_XEN_PVH) + grub_uint32_t a,b,c,d; + if (! grub_cpu_is_cpuid_supported ()) + return 0; +diff --git a/include/grub/i386/xen/hypercall.h b/include/grub/i386/xen/hypercall.h +index 198ee94af..4e4c12a49 100644 +--- a/include/grub/i386/xen/hypercall.h ++++ b/include/grub/i386/xen/hypercall.h +@@ -26,7 +26,10 @@ EXPORT_FUNC (grub_xen_hypercall) (grub_uint32_t callno, grub_uint32_t a0, + grub_uint32_t a1, grub_uint32_t a2, + grub_uint32_t a3, grub_uint32_t a4, + grub_uint32_t a5) +-__attribute__ ((regparm (3), cdecl)); ++#ifdef GRUB_MACHINE_XEN ++ __attribute__ ((regparm (3), cdecl)) ++#endif ++ ; + + static inline int + grub_xen_sched_op (int cmd, void *arg) +diff --git a/include/grub/kernel.h b/include/grub/kernel.h +index 20ddf2da2..c17fc6e60 100644 +--- a/include/grub/kernel.h ++++ b/include/grub/kernel.h +@@ -78,7 +78,9 @@ struct grub_module_info64 + #if defined (GRUB_MACHINE_PCBIOS) || defined (GRUB_MACHINE_COREBOOT) \ + || defined (GRUB_MACHINE_MULTIBOOT) || defined (GRUB_MACHINE_MIPS_QEMU_MIPS) \ + || defined (GRUB_MACHINE_MIPS_LOONGSON) || defined (GRUB_MACHINE_ARC) \ +- || (defined (__sparc__) && defined (GRUB_MACHINE_IEEE1275)) || defined (GRUB_MACHINE_UBOOT) || defined (GRUB_MACHINE_XEN) ++ || (defined (__sparc__) && defined (GRUB_MACHINE_IEEE1275)) \ ++ || defined (GRUB_MACHINE_UBOOT) || defined (GRUB_MACHINE_XEN) \ ++ || defined(GRUB_MACHINE_XEN_PVH) + /* FIXME: stack is between 2 heap regions. Move it. */ + #define GRUB_KERNEL_PRELOAD_SPACE_REUSABLE 1 + #endif +-- +2.21.0 + |