]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
2008-01-16 Robert Millan <rmh@aybabtu.com>
authorrobertmh <robertmh@localhost>
Wed, 16 Jan 2008 21:03:07 +0000 (21:03 +0000)
committerrobertmh <robertmh@localhost>
Wed, 16 Jan 2008 21:03:07 +0000 (21:03 +0000)
        * include/grub/i386/linuxbios/memory.h
        (GRUB_MEMORY_MACHINE_LINUXBIOS_TABLE_ADDR): Remove macro.
        * kern/i386/linuxbios/table.c (grub_linuxbios_table_iterate): Do not
        receive `table_header' as argument.  Instead, probe for it in the
        known memory ranges where it can be present.
        (grub_available_iterate): Do not pass a fixed `table_header' address
        to grub_linuxbios_table_iterate().

ChangeLog
include/grub/i386/linuxbios/memory.h
kern/i386/linuxbios/table.c

index 3f2e78f0bcde5878374210a5062640a220617f92..fcd21caebfed0c8e3c2d05ffd922c738736c81b6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2008-01-16  Robert Millan  <rmh@aybabtu.com>
+
+       * include/grub/i386/linuxbios/memory.h
+       (GRUB_MEMORY_MACHINE_LINUXBIOS_TABLE_ADDR): Remove macro.
+       * kern/i386/linuxbios/table.c (grub_linuxbios_table_iterate): Do not
+       receive `table_header' as argument.  Instead, probe for it in the
+       known memory ranges where it can be present.
+       (grub_available_iterate): Do not pass a fixed `table_header' address
+       to grub_linuxbios_table_iterate().
+
 2008-01-15  Robert Millan  <rmh@aybabtu.com>
 
        * configure.ac: Add `i386-ieee1275' to the list of supported targets.
index f94c3894d6f271cb2793e4244a32e25e1b47bd62..3534adf583e8e10773782dfcfcb7f2c290278d4e 100644 (file)
@@ -28,8 +28,6 @@
 #include <grub/err.h>
 #endif
 
-#define GRUB_MEMORY_MACHINE_LINUXBIOS_TABLE_ADDR       0x500
-
 #define GRUB_MEMORY_MACHINE_LOWER_USABLE               0x9fc00         /* 640 kiB - 1 kiB */
 #define GRUB_MEMORY_MACHINE_LOWER_SIZE                 0xf0000         /* 960 kiB */
 
index c5bc71f40b2a42aa2b6ab89a2bc76e10d65bec5f..1adab639ad338fe626d00976879a9c965e6c9975 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *  GRUB  --  GRand Unified Bootloader
- *  Copyright (C) 2007  Free Software Foundation, Inc.
+ *  Copyright (C) 2007,2008  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
 #include <grub/err.h>
 
 static grub_err_t
-grub_linuxbios_table_iterate (grub_linuxbios_table_header_t table_header,
-                     int (*hook) (grub_linuxbios_table_item_t))
+grub_linuxbios_table_iterate (int (*hook) (grub_linuxbios_table_item_t))
 {
+  grub_linuxbios_table_header_t table_header;
   grub_linuxbios_table_item_t table_item;
 
-  if (grub_memcmp (table_header->signature, "LBIO", 4))
-    grub_fatal ("Could not find LinuxBIOS table\n");
+  auto int check_signature (grub_linuxbios_table_header_t);
+  int check_signature (grub_linuxbios_table_header_t table_header)
+  {
+    if (! grub_memcmp (table_header->signature, "LBIO", 4))
+      return 1;
+
+    return 0;
+  }
+
+  /* Assuming table_header is aligned to its size (8 bytes).  */
+
+  for (table_header = 0x500; table_header < 0x1000; table_header++)
+    if (check_signature (table_header))
+      goto signature_found;
+
+  for (table_header = 0xf0000; table_header < 0x100000; table_header++)
+    if (check_signature (table_header))
+      goto signature_found;
+
+  grub_fatal ("Could not find coreboot table\n");
+
+signature_found:
 
   table_item =
     (grub_linuxbios_table_item_t) ((long) table_header +
@@ -62,8 +82,7 @@ grub_available_iterate (int (*hook) (mem_region_t))
     return 0;
   }
 
-  grub_linuxbios_table_iterate (GRUB_MEMORY_MACHINE_LINUXBIOS_TABLE_ADDR,
-                       iterate_linuxbios_table);
+  grub_linuxbios_table_iterate (iterate_linuxbios_table);
 
   return 0;
 }