aboutsummaryrefslogtreecommitdiffstats
path: root/main/grub/0004-xen-Prepare-common-code-for-Xen-PVH-support.patch
diff options
context:
space:
mode:
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.patch245
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
+