All of lore.kernel.org
 help / color / mirror / Atom feed
From: Robert Millan <rmh@aybabtu.com>
To: The development of GRUB 2 <grub-devel@gnu.org>
Subject: Re: Using GRUB2 with CoreBoot (formerly known as LinuxBIOS) 1/4: Find tables
Date: Wed, 16 Jan 2008 14:40:02 +0100	[thread overview]
Message-ID: <20080116134002.GA26468@thorin> (raw)
In-Reply-To: <fmiv4q$vo1$3@ger.gmane.org>

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

  reply	other threads:[~2008-01-16 13:42 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 [this message]
2008-01-16 19:39       ` Uwe Hermann
2008-01-16 21:19         ` Robert Millan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080116134002.GA26468@thorin \
    --to=rmh@aybabtu.com \
    --cc=grub-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.