grub-devel
[Top][All Lists]
Advanced

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

[MULTIBOOT2 SPEC PATCH V2] multiboot2: Add module load and preference ta


From: Zide Chen
Subject: [MULTIBOOT2 SPEC PATCH V2] multiboot2: Add module load and preference tag
Date: Thu, 7 May 2020 15:09:23 -0700

In the cases of users have preferences over Multiboot2 module load
addresses, currently GRUB has no way to achieve it.

Similar to the relocatable header tag, this new tag allows users to
specify the minimum and maximum load addresses, and other load
preferences on Multiboot2 modules.

Signed-off-by: Zide Chen <address@hidden>
---
 doc/multiboot.texi | 41 +++++++++++++++++++++++++++++++++++++++++
 doc/multiboot2.h   | 11 +++++++++++
 2 files changed, 52 insertions(+)

diff --git a/doc/multiboot.texi b/doc/multiboot.texi
index df8a0d056e76..758ef7fd1e2d 100644
--- a/doc/multiboot.texi
+++ b/doc/multiboot.texi
@@ -356,6 +356,7 @@ executable header.
 * Module alignment tag::
 * EFI boot services tag::
 * Relocatable header tag::
+* Module load preferences tag::
 
 @end menu
 
@@ -730,6 +731,46 @@ Boot loader should follow it. @samp{0} means none, 
@samp{1} means
 load image at lowest possible address but not lower than min_addr
 and @samp{2} means load image at highest possible address but not
 higher than max_addr.
+
+@node Module load preferences tag
+@subsection Module load preferences tag
+
+@example
+@group
+        +-------------------+
+u16     | type = 11         |
+u16     | flags             |
+u32     | size = 20         |
+u32     | min_addr          |
+u32     | max_addr          |
+u32     | preference        |
+        +-------------------+
+@end group
+@end example
+
+This tag is independent to the relocatable header tag. All of the
+address fields in this tag are physical addresses.
+
+The meaning of each field is as follows:
+
+@table @code
+@item min_addr
+Lowest possible physical address at which any modules should be
+loaded. The bootloader cannot load any part of any modules below
+this address.
+
+@item max_addr
+Highest possible physical address at which any loaded modules should
+end. The bootloader cannot load any part of any modules above this
+address.
+
+@item preference
+It contains load address placement suggestion for boot loader.
+Boot loader should follow it. @samp{0} means load modules not lower
+than min_addr and not higher than max_addr, but no preference on either
+lower or higher address. @samp{1} means load modules at lowest possible
+address but not lower than min_addr. @samp{2} means load modules at
+highest possible address but not higher than max_addr.
 @end table
 
 @node Machine state
diff --git a/doc/multiboot2.h b/doc/multiboot2.h
index b181607075b2..a68013ad932f 100644
--- a/doc/multiboot2.h
+++ b/doc/multiboot2.h
@@ -75,6 +75,7 @@
 #define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS_EFI32  8
 #define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS_EFI64  9
 #define MULTIBOOT_HEADER_TAG_RELOCATABLE  10
+#define MULTIBOOT_HEADER_TAG_MODULE_LOAD_PREFERENCES  11
 
 #define MULTIBOOT_ARCHITECTURE_I386  0
 #define MULTIBOOT_ARCHITECTURE_MIPS32  4
@@ -179,6 +180,16 @@ struct multiboot_header_tag_relocatable
   multiboot_uint32_t preference;
 };
 
+struct multiboot_header_tag_module_load_preferences
+{
+  multiboot_uint16_t type;
+  multiboot_uint16_t flags;
+  multiboot_uint32_t size;
+  multiboot_uint32_t min_addr;
+  multiboot_uint32_t max_addr;
+  multiboot_uint32_t preference;
+};
+
 struct multiboot_color
 {
   multiboot_uint8_t red;
-- 
2.17.1




reply via email to

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