grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 03/05] Enable multiboot2 support on arm64-efi target


From: Chris Plant
Subject: [PATCH 03/05] Enable multiboot2 support on arm64-efi target
Date: Wed, 28 Oct 2020 19:49:47 +0000
User-agent: Evolution 3.36.4-2

Add ARM64 versions of the mmap functions to generate memory map for
multiboot2

Signed-off-by: Chris Plant <chris@monkeyircd.org>

---
 grub-core/mmap/arm64/uppermem.c | 72 +++++++++++++++++++++++++++++++++
 include/grub/arm64/memory.h     | 60 +++++++++++++++++++++++++++
 2 files changed, 132 insertions(+)
 create mode 100644 grub-core/mmap/arm64/uppermem.c
 create mode 100644 include/grub/arm64/memory.h

diff --git a/grub-core/mmap/arm64/uppermem.c b/grub-
core/mmap/arm64/uppermem.c
new file mode 100644
index 000000000..a980e0719
--- /dev/null
+++ b/grub-core/mmap/arm64/uppermem.c
@@ -0,0 +1,72 @@
+/* Compute amount of lower and upper memory till the first hole. */
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *  Copyright (C) 2009  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/memory.h>
+#include <grub/mm.h>
+#include <grub/misc.h>
+#include <grub/cpu/memory.h>
+
+/* Helper for grub_mmap_get_lower.  */
+static int
+lower_hook (grub_uint64_t addr, grub_uint64_t size, grub_memory_type_t
type,
+           void *data)
+{
+  grub_uint64_t *lower = data;
+
+  if (type != GRUB_MEMORY_AVAILABLE)
+    return 0;
+  if (addr == 0)
+    *lower = size;
+  return 0;
+}
+
+grub_uint64_t
+grub_mmap_get_lower (void)
+{
+  grub_uint64_t lower = 0;
+
+  grub_mmap_iterate (lower_hook, &lower);
+  if (lower > GRUB_ARCH_LOWMEMMAXSIZE)
+    lower = GRUB_ARCH_LOWMEMMAXSIZE;
+  return lower;
+}
+
+/* Helper for grub_mmap_get_upper.  */
+static int
+upper_hook (grub_uint64_t addr, grub_uint64_t size, grub_memory_type_t
type,
+           void *data)
+{
+  grub_uint64_t *upper = data;
+
+  if (type != GRUB_MEMORY_AVAILABLE)
+    return 0;
+  if (addr <= GRUB_ARCH_HIGHMEMPSTART && addr + size
+      > GRUB_ARCH_HIGHMEMPSTART)
+    *upper = addr + size - GRUB_ARCH_HIGHMEMPSTART;
+  return 0;
+}
+
+grub_uint64_t
+grub_mmap_get_upper (void)
+{
+  grub_uint64_t upper = 0;
+
+  grub_mmap_iterate (upper_hook, &upper);
+  return upper;
+}
diff --git a/include/grub/arm64/memory.h b/include/grub/arm64/memory.h
new file mode 100644
index 000000000..7811f3449
--- /dev/null
+++ b/include/grub/arm64/memory.h
@@ -0,0 +1,60 @@
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *  Copyright (C) 2009 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_MEMORY_CPU_HEADER
+#define GRUB_MEMORY_CPU_HEADER 1
+
+#ifndef ASM_FILE
+#include <grub/symbol.h>
+#include <grub/err.h>
+#include <grub/types.h>
+#endif
+
+#define GRUB_ARCH_LOWMEMVSTART 0x80000000
+#define GRUB_ARCH_LOWMEMPSTART 0x00000000
+#define GRUB_ARCH_LOWMEMMAXSIZE 0x10000000
+#define GRUB_ARCH_HIGHMEMPSTART 0x10000000
+
+#ifndef ASM_FILE
+
+typedef grub_addr_t grub_phys_addr_t;
+
+static inline grub_phys_addr_t
+grub_vtop (void *a)
+{
+  return (grub_phys_addr_t) a;
+}
+
+static inline void *
+grub_map_memory (grub_phys_addr_t a, grub_size_t size __attribute__
((unused)))
+{
+  return (void *) a;
+}
+
+static inline void
+grub_unmap_memory (void *a __attribute__ ((unused)),
+                  grub_size_t size __attribute__ ((unused)))
+{
+}
+
+grub_uint64_t grub_mmap_get_lower (void);
+grub_uint64_t grub_mmap_get_upper (void);
+
+#endif
+
+#endif
-- 
2.28.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]