On Tue, Jan 15, 2008 at 06:47:54PM +0000, Patrick Georgi wrote:
> Am Tue, 15 Jan 2008 19:05:47 +0100 schrieb Robert Millan:
> > Is the "LBIO" signature schedule to change due to CoreBoot rename? 
> > Should we check for another one as well?
> I'm not sure if the rename extends to that, given that it's an 
> incompatible interface change.
> I'd go with just "LBIO" for the time being, it will take a while until 
> the rename is completed anyway. If things change, I'll tell you, okay?

Ok.

See attached patch.  Comments, anyone?

-- 
Robert Millan

<GPLv2> I know my rights; I want my phone call!
<DRM> What use is a phone call… if you are unable to speak?
(as seen on /.)
	* 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().

diff -ur ../grub2/include/grub/i386/linuxbios/memory.h ./include/grub/i386/linuxbios/memory.h
--- ../grub2/include/grub/i386/linuxbios/memory.h	2007-10-31 23:35:13.000000000 +0100
+++ ./include/grub/i386/linuxbios/memory.h	2008-01-16 13:36:24.000000000 +0100
@@ -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 */
 
diff -ur ../grub2/kern/i386/linuxbios/table.c ./kern/i386/linuxbios/table.c
--- ../grub2/kern/i386/linuxbios/table.c	2007-10-31 23:35:13.000000000 +0100
+++ ./kern/i386/linuxbios/table.c	2008-01-16 14:35:35.000000000 +0100
@@ -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
@@ -21,13 +21,33 @@
 #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 sizeof(*table_header) alignment.  */
+
+  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 @@
     return 0;
   }
 
-  grub_linuxbios_table_iterate (GRUB_MEMORY_MACHINE_LINUXBIOS_TABLE_ADDR,
-			iterate_linuxbios_table);
+  grub_linuxbios_table_iterate (iterate_linuxbios_table);
 
   return 0;
 }
_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to