Grub Development Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Chris Plant <chris@monkeyircd.org>
To: Grub-devel@gnu.org
Cc: chris@monkeyircd.org
Subject: [PATCH 03/05] Enable multiboot2 support on arm64-efi target
Date: Wed, 28 Oct 2020 19:49:47 +0000	[thread overview]
Message-ID: <478b5219935dfb9efe06f004b729b59e4567660e.camel@monkeyircd.org> (raw)
In-Reply-To: <4b23bf36d0a833ff038709ae7c443647976dcd8c.camel@monkeyircd.org>

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



  parent reply	other threads:[~2020-10-28 19:49 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-28 19:45 [PATCH] Enable multiboot2 support on arm64-efi target Chris Plant
2020-10-28 19:47 ` [PATCH 01/05] " Chris Plant
2020-10-28 19:49 ` Chris Plant [this message]
2020-10-28 19:50 ` [PATCH 04/05] " Chris Plant
2020-10-28 19:51 ` [PATCH 05/05] " Chris Plant
2020-10-28 19:52 ` [PATCH 02/05] " Chris Plant

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=478b5219935dfb9efe06f004b729b59e4567660e.camel@monkeyircd.org \
    --to=chris@monkeyircd.org \
    --cc=Grub-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox