Skip to contentSkip to conversation

Manipulate mbi in abstract way

PATCH In review Vladimir 'φ-coder/phcoder' Serbinenko 1 participant 2 messages Jan 10, 2010 – Jan 14, 2010

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Manipulate mbi in abstract way

It cleans up some mess in grub_multiboot and allows easier code sharing with upcomming tagged mbi

Signature · 2 lines
Regards
Vladimir 'φ-coder/phcoder' Serbinenko

=== added file 'ChangeLog.abstractmbi'

ChangeLog.abstractmbi +25 -0
@@ -0,0 +1,25 @@
+2010-01-10  Vladimir Serbinenko  <[email protected]>
+
+	* conf/i386-coreboot.rmk (multiboot_mod_SOURCES):
+	Add loader/i386/multiboot_mbi.c.
+	(multiboot2_mod_SOURCES): Likewise.
+	* conf/i386-pc.rmk (multiboot_mod_SOURCES): Likewise.
+	(multiboot2_mod_SOURCES): Likewise.
+	* include/grub/multiboot.h (grub_multiboot_get_mbi_size): New proto.
+	(grub_multiboot_make_mbi): Likewise.
+	(grub_multiboot_free_mbi): Likewise.
+	(grub_multiboot_init_mbi): Likewise.
+	(grub_multiboot_add_module): Likewise.
+	(grub_multiboot_set_bootdev): Likewise.
+	* loader/i386/multiboot.c (mbi): Removed.
+	(mbi_dest): Likewise.
+	(alloc_mbi): New variable.
+	(grub_multiboot_payload_size): Removed. All users updated.
+	(grub_multiboot_pure_size): New variable.
+	(grub_multiboot_boot): Use grub_multiboot_make_mbi.
+	(grub_multiboot_unload): Use grub_multiboot_free_mbi.
+	(grub_get_multiboot_mmap_len): Moved to loader/i386/multiboot_mbi.c.
+	(grub_fill_multiboot_mmap): Likewise.
+	(grub_multiboot_get_bootdev): Likewise.
+	(grub_multiboot): Use multiboot_mbi functions.
+	* loader/i386/multiboot_mbi.c: New file.

=== modified file 'conf/i386-coreboot.rmk'

i386-coreboot.rmk +4 -2
@@ -142,14 +142,16 @@
 
 pkglib_MODULES += multiboot.mod
 multiboot_mod_SOURCES = loader/i386/multiboot.c \
-                         loader/multiboot_loader.c
+			loader/i386/multiboot_mbi.c \
+	                loader/multiboot_loader.c
 multiboot_mod_CFLAGS = $(COMMON_CFLAGS)
 multiboot_mod_LDFLAGS = $(COMMON_LDFLAGS)
 multiboot_mod_ASFLAGS = $(COMMON_ASFLAGS)
 
 pkglib_MODULES += multiboot2.mod
 multiboot2_mod_SOURCES = loader/i386/multiboot.c \
-                         loader/multiboot_loader.c
+                         loader/multiboot_loader.c \
+			 loader/i386/multiboot_mbi.c
 multiboot2_mod_CFLAGS = $(COMMON_CFLAGS) -DGRUB_USE_MULTIBOOT2
 multiboot2_mod_LDFLAGS = $(COMMON_LDFLAGS)
 multiboot2_mod_ASFLAGS = $(COMMON_ASFLAGS)

=== modified file 'conf/i386-pc.rmk'

i386-pc.rmk +3 -1
@@ -203,6 +203,7 @@
 
 pkglib_MODULES += multiboot.mod
 multiboot_mod_SOURCES = loader/i386/multiboot.c \
+			loader/i386/multiboot_mbi.c \
                         loader/multiboot_loader.c
 multiboot_mod_CFLAGS = $(COMMON_CFLAGS)
 multiboot_mod_LDFLAGS = $(COMMON_LDFLAGS)
@@ -210,7 +211,8 @@
 
 pkglib_MODULES += multiboot2.mod
 multiboot2_mod_SOURCES = loader/i386/multiboot.c \
-                        loader/multiboot_loader.c
+			 loader/i386/multiboot_mbi.c \
+                         loader/multiboot_loader.c
 multiboot2_mod_CFLAGS = $(COMMON_CFLAGS) -DGRUB_USE_MULTIBOOT2
 multiboot2_mod_LDFLAGS = $(COMMON_LDFLAGS)
 multiboot2_mod_ASFLAGS = $(COMMON_ASFLAGS)

=== modified file 'include/grub/multiboot.h'

grub/multiboot.h +13 -0
@@ -29,7 +29,20 @@
 #include <multiboot.h>
 #endif
 
+#include <grub/types.h>
+#include <grub/err.h>
+
 void grub_multiboot (int argc, char *argv[]);
 void grub_module (int argc, char *argv[]);
 
+grub_size_t grub_multiboot_get_mbi_size (void);
+grub_err_t grub_multiboot_make_mbi (void *orig, grub_uint32_t dest,
+				    grub_off_t buf_off, grub_size_t bufsize);
+void grub_multiboot_free_mbi (void);
+grub_err_t grub_multiboot_init_mbi (int argc, char *argv[]);
+grub_err_t grub_multiboot_add_module (grub_addr_t start, grub_size_t size,
+				      int argc, char *argv[]);
+void grub_multiboot_set_bootdev (void);
+
+
 #endif /* ! GRUB_MULTIBOOT_HEADER */

=== modified file 'loader/i386/multiboot.c'

i386/multiboot.c +70 -252

430 lines not on this page · raw message

=== modified file 'loader/i386/multiboot_elfxx.c'

i386/multiboot_elfxx.c +3 -2
@@ -100,10 +100,11 @@
   code_size = (phdr(highest_segment)->p_paddr + phdr(highest_segment)->p_memsz) - phdr(lowest_segment)->p_paddr;
   grub_multiboot_payload_dest = phdr(lowest_segment)->p_paddr;
 
-  grub_multiboot_payload_size += code_size;
+  grub_multiboot_pure_size += code_size;
 
+  alloc_mbi = grub_multiboot_get_mbi_size ();
   grub_multiboot_payload_orig
-    = grub_relocator32_alloc (grub_multiboot_payload_size);
+    = grub_relocator32_alloc (grub_multiboot_pure_size + alloc_mbi);
 
   if (!grub_multiboot_payload_orig)
     return grub_errno;

=== added file 'loader/i386/multiboot_mbi.c'

i386/multiboot_mbi.c +336 -0

336 lines not on this page · raw message

#1 lore raw
Quoted 4 lines · Vladimir 'φ-coder/phcoder' Serbinenko

It cleans up some mess in grub_multiboot and allows easier code sharing with upcomming tagged mbi

Reviewed on IRC, tested with Hurd and NetBSD. Comitted

Signature · 2 lines
Regards
Vladimir 'φ-coder/phcoder' Serbinenko