All of lore.kernel.org
 help / color / mirror / Atom feed
* Using GRUB2 with CoreBoot (formerly known as LinuxBIOS) 1/4: Find tables
@ 2008-01-12 17:44 Patrick Georgi
  2008-01-12 18:18 ` Robert Millan
  2008-01-15 18:05 ` Robert Millan
  0 siblings, 2 replies; 7+ messages in thread
From: Patrick Georgi @ 2008-01-12 17:44 UTC (permalink / raw)
  To: grub-devel

Hi,

I had several issues with getting GRUB2 to run on CoreBoot (aka 
LinuxBIOS), which I'll describe here.

They're rather trivial (I have patches), so someone with a working 
relationship with the FSF, experience with the GRUB2 codebase and C, and 
15 minutes time for each issue should be able to fix these issues in a 
way suitable for GRUB2 mainline.

First issue: Right now, grub2 has a hard coded location for the lbtables 
and gives up if they're not there.
According to the coreboot sources, these tables can start anywhere 
between 0x500 and 0x1000, or between 0xf0000 and 0x100000 at a 16 byte 
boundary.
To find it, checking for the "LBIO"-signature (as is done already) should 
be enough.


Regards,
Patrick Georgi




^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Using GRUB2 with CoreBoot (formerly known as LinuxBIOS) 1/4: Find tables
  2008-01-12 17:44 Using GRUB2 with CoreBoot (formerly known as LinuxBIOS) 1/4: Find tables Patrick Georgi
@ 2008-01-12 18:18 ` Robert Millan
  2008-01-15 18:05 ` Robert Millan
  1 sibling, 0 replies; 7+ messages in thread
From: Robert Millan @ 2008-01-12 18:18 UTC (permalink / raw)
  To: The development of GRUB 2

On Sat, Jan 12, 2008 at 05:44:42PM +0000, Patrick Georgi wrote:
> Hi,
> 
> I had several issues with getting GRUB2 to run on CoreBoot (aka 
> LinuxBIOS), which I'll describe here.

Thank you for the reports.

If noone beats me to it, I'll allocate some time next tuesday to look
into them.

-- 
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 /.)



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Using GRUB2 with CoreBoot (formerly known as LinuxBIOS) 1/4: Find tables
  2008-01-12 17:44 Using GRUB2 with CoreBoot (formerly known as LinuxBIOS) 1/4: Find tables Patrick Georgi
  2008-01-12 18:18 ` Robert Millan
@ 2008-01-15 18:05 ` Robert Millan
  2008-01-15 18:47   ` Patrick Georgi
  1 sibling, 1 reply; 7+ messages in thread
From: Robert Millan @ 2008-01-15 18:05 UTC (permalink / raw)
  To: The development of GRUB 2

On Sat, Jan 12, 2008 at 05:44:42PM +0000, Patrick Georgi wrote:
> 
> First issue: Right now, grub2 has a hard coded location for the lbtables 
> and gives up if they're not there.
> According to the coreboot sources, these tables can start anywhere 
> between 0x500 and 0x1000, or between 0xf0000 and 0x100000 at a 16 byte 
> boundary.
> To find it, checking for the "LBIO"-signature (as is done already) should 
> be enough.

Is the "LBIO" signature schedule to change due to CoreBoot rename?  Should we
check for another one as well?

-- 
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 /.)



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Using GRUB2 with CoreBoot (formerly known as LinuxBIOS) 1/4: Find tables
  2008-01-15 18:05 ` Robert Millan
@ 2008-01-15 18:47   ` Patrick Georgi
  2008-01-16 13:40     ` Robert Millan
  0 siblings, 1 reply; 7+ messages in thread
From: Patrick Georgi @ 2008-01-15 18:47 UTC (permalink / raw)
  To: grub-devel

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?


Regards,
Patrick Georgi




^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Using GRUB2 with CoreBoot (formerly known as LinuxBIOS) 1/4: Find tables
  2008-01-15 18:47   ` Patrick Georgi
@ 2008-01-16 13:40     ` Robert Millan
  2008-01-16 19:39       ` Uwe Hermann
  0 siblings, 1 reply; 7+ messages in thread
From: Robert Millan @ 2008-01-16 13:40 UTC (permalink / raw)
  To: The development of GRUB 2

[-- Attachment #1: Type: text/plain, Size: 678 bytes --]

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 /.)

[-- Attachment #2: coreboot_table.diff --]
[-- Type: text/x-diff, Size: 2859 bytes --]


	* 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;
 }

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Using GRUB2 with CoreBoot (formerly known as LinuxBIOS) 1/4: Find tables
  2008-01-16 13:40     ` Robert Millan
@ 2008-01-16 19:39       ` Uwe Hermann
  2008-01-16 21:19         ` Robert Millan
  0 siblings, 1 reply; 7+ messages in thread
From: Uwe Hermann @ 2008-01-16 19:39 UTC (permalink / raw)
  To: The development of GRUB 2

On Wed, Jan 16, 2008 at 02:40:02PM +0100, Robert Millan wrote:
> +  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.  */

Maybe a more verbose comment here?


> +  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");

"coreboot" please.


Uwe.
-- 
http://www.hermann-uwe.de  | http://www.holsham-traders.de
http://www.crazy-hacks.org | http://www.unmaintained-free-software.org



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Using GRUB2 with CoreBoot (formerly known as LinuxBIOS) 1/4: Find tables
  2008-01-16 19:39       ` Uwe Hermann
@ 2008-01-16 21:19         ` Robert Millan
  0 siblings, 0 replies; 7+ messages in thread
From: Robert Millan @ 2008-01-16 21:19 UTC (permalink / raw)
  To: The development of GRUB 2

On Wed, Jan 16, 2008 at 08:39:09PM +0100, Uwe Hermann wrote:
> On Wed, Jan 16, 2008 at 02:40:02PM +0100, Robert Millan wrote:
> > +  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.  */
> 
> Maybe a more verbose comment here?
> 
> 
> > +  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");
> 
> "coreboot" please.

Fixed, thanks.

-- 
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 /.)



^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2008-01-16 21:21 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-01-12 17:44 Using GRUB2 with CoreBoot (formerly known as LinuxBIOS) 1/4: Find tables Patrick Georgi
2008-01-12 18:18 ` Robert Millan
2008-01-15 18:05 ` Robert Millan
2008-01-15 18:47   ` Patrick Georgi
2008-01-16 13:40     ` Robert Millan
2008-01-16 19:39       ` Uwe Hermann
2008-01-16 21:19         ` Robert Millan

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.