]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Use LBIO on coreboot.
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sat, 1 May 2010 12:32:48 +0000 (14:32 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sat, 1 May 2010 12:32:48 +0000 (14:32 +0200)
* conf/i386-coreboot.rmk (kernel_img_SOURCES): Change
kern/i386/multiboot_mmap.c to kern/i386/coreboot/mmap.c.
* include/grub/i386/coreboot/memory.h (GRUB_LINUXBIOS_MEMBER_LINK):
New declaration.
* kern/i386/coreboot/init.c (grub_machine_init): Don't call
grub_machine_mmap_init on coreboot.
* kern/i386/coreboot/mmap.c (grub_linuxbios_table_iterate): Handle
GRUB_LINUXBIOS_MEMBER_LINK.
(grub_machine_mmap_iterate): Fix declaration.
* kern/i386/coreboot/startup.S: Don't save mbi location on coreboot.

ChangeLog
conf/i386-coreboot.rmk
include/grub/i386/coreboot/memory.h
kern/i386/coreboot/init.c
kern/i386/coreboot/mmap.c
kern/i386/coreboot/startup.S

index 43f2231137cee88399d2da5422be781b7fb95336..9ace29cc2e140329e763c8e71a25cd06c41a4831 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2010-05-01  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       Use LBIO on coreboot.
+
+       * conf/i386-coreboot.rmk (kernel_img_SOURCES): Change
+       kern/i386/multiboot_mmap.c to kern/i386/coreboot/mmap.c.
+       * include/grub/i386/coreboot/memory.h (GRUB_LINUXBIOS_MEMBER_LINK):
+       New declaration.
+       * kern/i386/coreboot/init.c (grub_machine_init): Don't call
+       grub_machine_mmap_init on coreboot.
+       * kern/i386/coreboot/mmap.c (grub_linuxbios_table_iterate): Handle
+       GRUB_LINUXBIOS_MEMBER_LINK.
+       (grub_machine_mmap_iterate): Fix declaration.
+       * kern/i386/coreboot/startup.S: Don't save mbi location on coreboot.
+
 2010-05-01  Vladimir Serbinenko  <phcoder@gmail.com>
 
        Split coreboot and multiboot ports.
index 69b8e9a488723773a319f2346bfb2543542980df..ca969632a8a6b8824c4c73cd1a091fdf2d3ec767 100644 (file)
@@ -10,7 +10,7 @@ pkglib_PROGRAMS += kernel.img
 kernel_img_SOURCES = kern/i386/coreboot/startup.S \
        kern/i386/misc.S \
        kern/i386/coreboot/init.c \
-       kern/i386/multiboot_mmap.c \
+       kern/i386/coreboot/mmap.c \
        kern/i386/halt.c \
        kern/main.c kern/device.c \
        kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \
index 434ae622ef61cc4842b3c6034771cdd93f31dfb0..664086a81000f564312cc3ccac36be7314ab6dae 100644 (file)
@@ -44,8 +44,9 @@ typedef struct grub_linuxbios_table_header *grub_linuxbios_table_header_t;
 
 struct grub_linuxbios_table_item
 {
-#define GRUB_LINUXBIOS_MEMBER_UNUSED           0
-#define GRUB_LINUXBIOS_MEMBER_MEMORY           1
+#define GRUB_LINUXBIOS_MEMBER_UNUSED           0x00
+#define GRUB_LINUXBIOS_MEMBER_MEMORY           0x01
+#define GRUB_LINUXBIOS_MEMBER_LINK              0x11
   grub_uint32_t tag;
   grub_uint32_t size;
 };
index 5f80f28c1c4cc3312cd1aa3b1728e0ee0d89d9c6..b945e623fde121e392d52c728e3d34139c0e427d 100644 (file)
@@ -117,7 +117,9 @@ grub_machine_init (void)
     return 0;
   }
 
+#ifdef GRUB_MACHINE_MULTIBOOT
   grub_machine_mmap_init ();
+#endif
   grub_machine_mmap_iterate (heap_init);
 
   grub_tsc_init ();
index b15369ee595b2312d9965ef2156951d893fc933d..d06627a08e84bcffb5663ebedf514e3077facffc 100644 (file)
@@ -57,13 +57,23 @@ signature_found:
                               (long) table_header->size);
   for (; table_item->size;
        table_item = (grub_linuxbios_table_item_t) ((long) table_item + (long) table_item->size))
-    if (hook (table_item))
-      return 1;
+    {
+      if (table_item->tag == GRUB_LINUXBIOS_MEMBER_LINK
+         && check_signature ((grub_linuxbios_table_header_t) (grub_addr_t)
+                             *(grub_uint64_t *) (table_item + 1)))
+       {
+         table_header = (grub_linuxbios_table_header_t) (grub_addr_t)
+           *(grub_uint64_t *) (table_item + 1);
+         goto signature_found;   
+       }
+      if (hook (table_item))
+       return 1;
+    }
 
   return 0;
 }
 
-void
+grub_err_t
 grub_machine_mmap_iterate (int NESTED_FUNC_ATTR (*hook) (grub_uint64_t, grub_uint64_t, grub_uint32_t))
 {
   mem_region_t mem_region;
index e94950aaed4715bd2c70f2eceb45a267d87ed103..2c4a941cfc8d83a274058476964d9f3f2363270e 100644 (file)
@@ -66,10 +66,12 @@ multiboot_header:
        .long   -0x1BADB002 - MULTIBOOT_MEMORY_INFO
 
 codestart:
+#ifdef GRUB_MACHINE_MULTIBOOT
        cmpl    $MULTIBOOT_BOOTLOADER_MAGIC, %eax
        jne 0f
        movl    %ebx, EXT_C(startup_multiboot_info)
 0:
+#endif
 
        /* initialize the stack */
        movl $GRUB_MEMORY_MACHINE_PROT_STACK, %esp