aboutsummaryrefslogtreecommitdiffstats
path: root/src/coreboot.c
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2009-03-21 13:17:21 -0400
committerKevin O'Connor <kevin@koconnor.net>2009-03-21 13:17:21 -0400
commit071f154f007bd2d6c30c8d702f42219efdd09557 (patch)
treecc74cb7452eecfc74c92eecc428064bb0d383ba8 /src/coreboot.c
parenta9caeae53c9c81122946f1c799d935df4a5a1979 (diff)
downloadseabios-071f154f007bd2d6c30c8d702f42219efdd09557.tar.gz
Add high coreboot table support to seabios.
Signed-off-by: Stefan Reinauer <stepan@coresystems.de>
Diffstat (limited to 'src/coreboot.c')
-rw-r--r--src/coreboot.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/coreboot.c b/src/coreboot.c
index 7b8c86f1..5f0190f6 100644
--- a/src/coreboot.c
+++ b/src/coreboot.c
@@ -143,6 +143,14 @@ struct cb_memory {
#define MEM_RANGE_COUNT(_rec) \
(((_rec)->size - sizeof(*(_rec))) / sizeof((_rec)->map[0]))
+struct cb_forward {
+ u32 tag;
+ u32 size;
+ u64 forward;
+};
+
+#define CB_TAG_FORWARD 0x11
+
static u16
ipchksum(char *buf, int count)
{
@@ -209,6 +217,14 @@ coreboot_fill_map()
struct cb_header *cbh = find_cb_header(0, 0x1000);
if (!cbh)
goto fail;
+ struct cb_forward *cbf = find_cb_subtable(cbh, CB_TAG_FORWARD);
+ if (cbf) {
+ dprintf(3, "Found coreboot table forwarder.\n");
+ cbh = find_cb_header((char *)((u32)cbf->forward), 0x100);
+ if (!cbh)
+ goto fail;
+ }
+ dprintf(3, "Now attempting to find coreboot memory map\n");
struct cb_memory *cbm = find_cb_subtable(cbh, CB_TAG_MEMORY);
if (!cbm)
goto fail;