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
[email protected]
http://lists.gnu.org/mailman/listinfo/grub-devel