aboutsummaryrefslogtreecommitdiffstats
path: root/main/grub/0009-xen-Add-basic-hooks-for-PVH-in-current-code.patch
diff options
context:
space:
mode:
authorHenrik Riomar <henrik.riomar@gmail.com>2019-04-03 16:07:12 +0200
committerLeonardo Arena <rnalrd@alpinelinux.org>2019-04-05 06:53:00 +0000
commitc40e9ceff34231100ff228d3015900e945727a7f (patch)
treec1960c097ca33cac4b1718485144cd5603f6b96a /main/grub/0009-xen-Add-basic-hooks-for-PVH-in-current-code.patch
parent311f3a86010da63e189043d072f745b478b45309 (diff)
downloadaports-c40e9ceff34231100ff228d3015900e945727a7f.tar.bz2
aports-c40e9ceff34231100ff228d3015900e945727a7f.tar.xz
main/grub: add xen pvh support
* Backport xen_pvh patches from grub master branch * Adds grub-i386-xen_pvh.bin to the grub-xenhost package
Diffstat (limited to 'main/grub/0009-xen-Add-basic-hooks-for-PVH-in-current-code.patch')
-rw-r--r--main/grub/0009-xen-Add-basic-hooks-for-PVH-in-current-code.patch267
1 files changed, 267 insertions, 0 deletions
diff --git a/main/grub/0009-xen-Add-basic-hooks-for-PVH-in-current-code.patch b/main/grub/0009-xen-Add-basic-hooks-for-PVH-in-current-code.patch
new file mode 100644
index 0000000000..2c663bc551
--- /dev/null
+++ b/main/grub/0009-xen-Add-basic-hooks-for-PVH-in-current-code.patch
@@ -0,0 +1,267 @@
+From 6f19a6f001e182b9716ea850ce39bb2545c558cb Mon Sep 17 00:00:00 2001
+From: Juergen Gross <jgross@suse.com>
+Date: Fri, 7 Dec 2018 13:11:37 +0100
+Subject: [PATCH 09/20] xen: Add basic hooks for PVH in current code
+
+Add the hooks to current code needed for Xen PVH. They will be filled
+with code later when the related functionality is being added.
+
+loader/i386/linux.c needs to include machine/kernel.h now as it needs
+to get GRUB_KERNEL_USE_RSDP_ADDR from there. This in turn requires to
+add an empty kernel.h header for some i386 platforms (efi, coreboot,
+ieee1275, xen) and for x86_64 efi.
+
+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 0b3e4eb2d2e1875e6045e838962f769f2ce161dd)
+---
+ grub-core/Makefile.am | 6 +++++
+ grub-core/kern/i386/xen/pvh.c | 37 +++++++++++++++++++++++++++
+ grub-core/kern/i386/xen/startup_pvh.S | 29 +++++++++++++++++++++
+ grub-core/kern/xen/init.c | 4 +++
+ grub-core/loader/i386/linux.c | 1 +
+ include/grub/i386/coreboot/kernel.h | 0
+ include/grub/i386/efi/kernel.h | 0
+ include/grub/i386/ieee1275/kernel.h | 0
+ include/grub/i386/xen/kernel.h | 0
+ include/grub/i386/xen_pvh/kernel.h | 30 ++++++++++++++++++++++
+ include/grub/x86_64/efi/kernel.h | 0
+ include/grub/xen.h | 5 ++++
+ 12 files changed, 112 insertions(+)
+ create mode 100644 grub-core/kern/i386/xen/pvh.c
+ create mode 100644 grub-core/kern/i386/xen/startup_pvh.S
+ create mode 100644 include/grub/i386/coreboot/kernel.h
+ create mode 100644 include/grub/i386/efi/kernel.h
+ create mode 100644 include/grub/i386/ieee1275/kernel.h
+ create mode 100644 include/grub/i386/xen/kernel.h
+ create mode 100644 include/grub/i386/xen_pvh/kernel.h
+ create mode 100644 include/grub/x86_64/efi/kernel.h
+
+diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am
+index 04e9395fd..e36c109e2 100644
+--- a/grub-core/Makefile.am
++++ b/grub-core/Makefile.am
+@@ -102,6 +102,7 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
+ endif
+
+ if COND_i386_efi
++KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h
+ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
+ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
+ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
+@@ -111,6 +112,7 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/pmtimer.h
+ endif
+
+ if COND_i386_coreboot
++KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h
+ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
+ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/coreboot/lbio.h
+ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video.h
+@@ -122,6 +124,7 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
+ endif
+
+ if COND_i386_multiboot
++KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h
+ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
+ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
+ endif
+@@ -132,6 +135,7 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
+ endif
+
+ if COND_i386_ieee1275
++KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h
+ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/ieee1275/ieee1275.h
+ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h
+ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h
+@@ -140,6 +144,7 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
+ endif
+
+ if COND_i386_xen
++KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h
+ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/xen.h
+ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/xen/hypercall.h
+ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h
+@@ -158,6 +163,7 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h
+ endif
+
+ if COND_x86_64_efi
++KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h
+ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
+ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
+ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
+diff --git a/grub-core/kern/i386/xen/pvh.c b/grub-core/kern/i386/xen/pvh.c
+new file mode 100644
+index 000000000..4f629b15e
+--- /dev/null
++++ b/grub-core/kern/i386/xen/pvh.c
+@@ -0,0 +1,37 @@
++/*
++ * 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/>.
++ */
++
++#include <grub/kernel.h>
++#include <grub/misc.h>
++#include <grub/memory.h>
++#include <grub/mm.h>
++#include <grub/xen.h>
++#include <xen/hvm/start_info.h>
++#include <grub/machine/kernel.h>
++
++grub_uint64_t grub_rsdp_addr;
++
++void
++grub_xen_setup_pvh (void)
++{
++}
++
++grub_err_t
++grub_machine_mmap_iterate (grub_memory_hook_t hook, void *hook_data)
++{
++}
+diff --git a/grub-core/kern/i386/xen/startup_pvh.S b/grub-core/kern/i386/xen/startup_pvh.S
+new file mode 100644
+index 000000000..69b8fdcca
+--- /dev/null
++++ b/grub-core/kern/i386/xen/startup_pvh.S
+@@ -0,0 +1,29 @@
++/* startup.S - bootstrap GRUB itself */
++/*
++ * 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/>.
++ */
++
++#include <config.h>
++#include <grub/symbol.h>
++
++ .file "startup_pvh.S"
++ .text
++
++/* Saved pointer to start info structure. */
++ .globl pvh_start_info
++pvh_start_info:
++ .long 0
+diff --git a/grub-core/kern/xen/init.c b/grub-core/kern/xen/init.c
+index a23dad633..782ca7295 100644
+--- a/grub-core/kern/xen/init.c
++++ b/grub-core/kern/xen/init.c
+@@ -564,6 +564,10 @@ grub_machine_init (void)
+ + GRUB_KERNEL_MACHINE_MOD_GAP,
+ GRUB_KERNEL_MACHINE_MOD_ALIGN);
+
++#ifdef GRUB_MACHINE_XEN_PVH
++ grub_xen_setup_pvh ();
++#endif
++
+ grub_xen_setup_gnttab ();
+
+ #ifdef GRUB_MACHINE_XEN
+diff --git a/grub-core/loader/i386/linux.c b/grub-core/loader/i386/linux.c
+index 7d6d5d499..e0825cb21 100644
+--- a/grub-core/loader/i386/linux.c
++++ b/grub-core/loader/i386/linux.c
+@@ -35,6 +35,7 @@
+ #include <grub/i18n.h>
+ #include <grub/lib/cmdline.h>
+ #include <grub/linux.h>
++#include <grub/machine/kernel.h>
+
+ GRUB_MOD_LICENSE ("GPLv3+");
+
+diff --git a/include/grub/i386/coreboot/kernel.h b/include/grub/i386/coreboot/kernel.h
+new file mode 100644
+index 000000000..e69de29bb
+diff --git a/include/grub/i386/efi/kernel.h b/include/grub/i386/efi/kernel.h
+new file mode 100644
+index 000000000..e69de29bb
+diff --git a/include/grub/i386/ieee1275/kernel.h b/include/grub/i386/ieee1275/kernel.h
+new file mode 100644
+index 000000000..e69de29bb
+diff --git a/include/grub/i386/xen/kernel.h b/include/grub/i386/xen/kernel.h
+new file mode 100644
+index 000000000..e69de29bb
+diff --git a/include/grub/i386/xen_pvh/kernel.h b/include/grub/i386/xen_pvh/kernel.h
+new file mode 100644
+index 000000000..2b7b8a129
+--- /dev/null
++++ b/include/grub/i386/xen_pvh/kernel.h
+@@ -0,0 +1,30 @@
++/*
++ * 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_KERNEL_MACHINE_HEADER
++#define GRUB_KERNEL_MACHINE_HEADER 1
++
++#ifndef ASM_FILE
++
++#define GRUB_KERNEL_USE_RSDP_ADDR 1
++
++extern grub_uint64_t EXPORT_VAR(grub_rsdp_addr);
++
++#endif /* ! ASM_FILE */
++
++#endif /* GRUB_KERNEL_MACHINE_HEADER */
+diff --git a/include/grub/x86_64/efi/kernel.h b/include/grub/x86_64/efi/kernel.h
+new file mode 100644
+index 000000000..e69de29bb
+diff --git a/include/grub/xen.h b/include/grub/xen.h
+index c31cc10c7..91cb7cf81 100644
+--- a/include/grub/xen.h
++++ b/include/grub/xen.h
+@@ -95,6 +95,11 @@ typedef grub_uint64_t grub_xen_mfn_t;
+ typedef grub_uint32_t grub_xen_mfn_t;
+ #endif
+ typedef unsigned int grub_xen_evtchn_t;
++
++#ifdef GRUB_MACHINE_XEN_PVH
++extern struct hvm_start_info *pvh_start_info;
++void grub_xen_setup_pvh (void);
++#endif
+ #endif
+
+ #endif
+--
+2.21.0
+