[coreboot] r3057 - in trunk/coreboot-v2: src/arch/i386/boot src/arch/i386/llshell src/arch/ppc/boot src/boot src/config src/include/boot src/pc80 util/lbtdump util/options

svn at coreboot.org svn at coreboot.org
Fri Jan 18 17:16:46 CET 2008


Author: stepan
Date: 2008-01-18 17:16:45 +0100 (Fri, 18 Jan 2008)
New Revision: 3057

Added:
   trunk/coreboot-v2/src/arch/i386/boot/coreboot_table.c
   trunk/coreboot-v2/src/arch/i386/boot/coreboot_table.h
   trunk/coreboot-v2/src/arch/i386/llshell/readme.coreboot
   trunk/coreboot-v2/src/arch/ppc/boot/coreboot_table.c
   trunk/coreboot-v2/src/arch/ppc/boot/coreboot_table.h
   trunk/coreboot-v2/src/config/coreboot_apc.ld
   trunk/coreboot-v2/src/config/coreboot_ram.ld
   trunk/coreboot-v2/src/include/boot/coreboot_tables.h
Removed:
   trunk/coreboot-v2/src/arch/i386/boot/linuxbios_table.c
   trunk/coreboot-v2/src/arch/i386/boot/linuxbios_table.h
   trunk/coreboot-v2/src/arch/i386/llshell/readme.linuxbios
   trunk/coreboot-v2/src/arch/ppc/boot/linuxbios_table.c
   trunk/coreboot-v2/src/arch/ppc/boot/linuxbios_table.h
   trunk/coreboot-v2/src/config/linuxbios_apc.ld
   trunk/coreboot-v2/src/config/linuxbios_ram.ld
   trunk/coreboot-v2/src/include/boot/linuxbios_tables.h
Modified:
   trunk/coreboot-v2/src/arch/i386/boot/Config.lb
   trunk/coreboot-v2/src/arch/i386/boot/tables.c
   trunk/coreboot-v2/src/arch/ppc/boot/Config.lb
   trunk/coreboot-v2/src/arch/ppc/boot/tables.c
   trunk/coreboot-v2/src/boot/elfboot.c
   trunk/coreboot-v2/src/config/Config.lb
   trunk/coreboot-v2/src/include/boot/tables.h
   trunk/coreboot-v2/src/pc80/mc146818rtc.c
   trunk/coreboot-v2/util/lbtdump/lbtdump.c
   trunk/coreboot-v2/util/options/build_opt_tbl.c
Log:
rename linuxbios_* files, too.
Signed-off-by: Stefan Reinauer <stepan at coresystems.de>
Acked-by: Stefan Reinauer <stepan at coresystems.de>




Modified: trunk/coreboot-v2/src/arch/i386/boot/Config.lb
===================================================================
--- trunk/coreboot-v2/src/arch/i386/boot/Config.lb	2008-01-18 15:34:24 UTC (rev 3056)
+++ trunk/coreboot-v2/src/arch/i386/boot/Config.lb	2008-01-18 16:16:45 UTC (rev 3057)
@@ -2,7 +2,7 @@
 uses HAVE_ACPI_TABLES
 
 object boot.o
-object linuxbios_table.o
+object coreboot_table.o
 object tables.o
 if HAVE_PIRQ_TABLE
 object pirq_routing.o 

Copied: trunk/coreboot-v2/src/arch/i386/boot/coreboot_table.c (from rev 3053, trunk/coreboot-v2/src/arch/i386/boot/linuxbios_table.c)
===================================================================
--- trunk/coreboot-v2/src/arch/i386/boot/coreboot_table.c	                        (rev 0)
+++ trunk/coreboot-v2/src/arch/i386/boot/coreboot_table.c	2008-01-18 16:16:45 UTC (rev 3057)
@@ -0,0 +1,417 @@
+#include <console/console.h>
+#include <ip_checksum.h>
+#include <boot/coreboot_tables.h>
+#include "coreboot_table.h"
+#include <string.h>
+#include <version.h>
+#include <device/device.h>
+#include <stdlib.h>
+
+struct lb_header *lb_table_init(unsigned long addr)
+{
+	struct lb_header *header;
+
+	/* 16 byte align the address */
+	addr += 15;
+	addr &= ~15;
+
+	header = (void *)addr;
+	header->signature[0] = 'L';
+	header->signature[1] = 'B';
+	header->signature[2] = 'I';
+	header->signature[3] = 'O';
+	header->header_bytes = sizeof(*header);
+	header->header_checksum = 0;
+	header->table_bytes = 0;
+	header->table_checksum = 0;
+	header->table_entries = 0;
+	return header;
+}
+
+struct lb_record *lb_first_record(struct lb_header *header)
+{
+	struct lb_record *rec;
+	rec = (void *)(((char *)header) + sizeof(*header));
+	return rec;
+}
+
+struct lb_record *lb_last_record(struct lb_header *header)
+{
+	struct lb_record *rec;
+	rec = (void *)(((char *)header) + sizeof(*header) + header->table_bytes);
+	return rec;
+}
+
+struct lb_record *lb_next_record(struct lb_record *rec)
+{
+	rec = (void *)(((char *)rec) + rec->size);	
+	return rec;
+}
+
+struct lb_record *lb_new_record(struct lb_header *header)
+{
+	struct lb_record *rec;
+	rec = lb_last_record(header);
+	if (header->table_entries) {
+		header->table_bytes += rec->size;
+	}
+	rec = lb_last_record(header);
+	header->table_entries++;
+	rec->tag = LB_TAG_UNUSED;
+	rec->size = sizeof(*rec);
+	return rec;
+}
+
+
+struct lb_memory *lb_memory(struct lb_header *header)
+{
+	struct lb_record *rec;
+	struct lb_memory *mem;
+	rec = lb_new_record(header);
+	mem = (struct lb_memory *)rec;
+	mem->tag = LB_TAG_MEMORY;
+	mem->size = sizeof(*mem);
+	return mem;
+}
+
+struct lb_mainboard *lb_mainboard(struct lb_header *header)
+{
+	struct lb_record *rec;
+	struct lb_mainboard *mainboard;
+	rec = lb_new_record(header);
+	mainboard = (struct lb_mainboard *)rec;
+	mainboard->tag = LB_TAG_MAINBOARD;
+
+	mainboard->size = (sizeof(*mainboard) +
+		strlen(mainboard_vendor) + 1 + 
+		strlen(mainboard_part_number) + 1 +
+		3) & ~3;
+
+	mainboard->vendor_idx = 0;
+	mainboard->part_number_idx = strlen(mainboard_vendor) + 1;
+
+	memcpy(mainboard->strings + mainboard->vendor_idx,
+		mainboard_vendor,      strlen(mainboard_vendor) + 1);
+	memcpy(mainboard->strings + mainboard->part_number_idx,
+		mainboard_part_number, strlen(mainboard_part_number) + 1);
+
+	return mainboard;
+}
+
+struct cmos_checksum *lb_cmos_checksum(struct lb_header *header)
+{
+	struct lb_record *rec;
+	struct cmos_checksum *cmos_checksum;
+	rec = lb_new_record(header);
+	cmos_checksum = (struct cmos_checksum *)rec;
+	cmos_checksum->tag = LB_TAG_OPTION_CHECKSUM;
+
+	cmos_checksum->size = (sizeof(*cmos_checksum));
+
+	cmos_checksum->range_start = LB_CKS_RANGE_START * 8;
+	cmos_checksum->range_end = ( LB_CKS_RANGE_END * 8 ) + 7;
+	cmos_checksum->location = LB_CKS_LOC * 8;
+	cmos_checksum->type = CHECKSUM_PCBIOS;
+	
+	return cmos_checksum;
+}
+
+void lb_strings(struct lb_header *header)
+{
+	static const struct {
+		uint32_t tag;
+		const char *string;
+	} strings[] = {
+		{ LB_TAG_VERSION,        coreboot_version,        },
+		{ LB_TAG_EXTRA_VERSION,  coreboot_extra_version,  },
+		{ LB_TAG_BUILD,          coreboot_build,          },
+		{ LB_TAG_COMPILE_TIME,   coreboot_compile_time,   },
+		{ LB_TAG_COMPILE_BY,     coreboot_compile_by,     },
+		{ LB_TAG_COMPILE_HOST,   coreboot_compile_host,   },
+		{ LB_TAG_COMPILE_DOMAIN, coreboot_compile_domain, },
+		{ LB_TAG_COMPILER,       coreboot_compiler,       },
+		{ LB_TAG_LINKER,         coreboot_linker,         },
+		{ LB_TAG_ASSEMBLER,      coreboot_assembler,      },
+	};
+	unsigned int i;
+	for(i = 0; i < sizeof(strings)/sizeof(strings[0]); i++) {
+		struct lb_string *rec;
+		size_t len;
+		rec = (struct lb_string *)lb_new_record(header);
+		len = strlen(strings[i].string);
+		rec->tag = strings[i].tag;
+		rec->size = (sizeof(*rec) + len + 1 + 3) & ~3;
+		memcpy(rec->string, strings[i].string, len+1);
+	}
+
+}
+
+void lb_memory_range(struct lb_memory *mem,
+	uint32_t type, uint64_t start, uint64_t size)
+{
+	int entries;
+	entries = (mem->size - sizeof(*mem))/sizeof(mem->map[0]);
+	mem->map[entries].start = pack_lb64(start);
+	mem->map[entries].size = pack_lb64(size);
+	mem->map[entries].type = type;
+	mem->size += sizeof(mem->map[0]);
+}
+
+static void lb_reserve_table_memory(struct lb_header *head)
+{
+	struct lb_record *last_rec;
+	struct lb_memory *mem;
+	uint64_t start;
+	uint64_t end;
+	int i, entries;
+
+	last_rec = lb_last_record(head);
+	mem = get_lb_mem();
+	start = (unsigned long)head;
+	end = (unsigned long)last_rec;
+	entries = (mem->size - sizeof(*mem))/sizeof(mem->map[0]);
+	/* Resize the right two memory areas so this table is in
+	 * a reserved area of memory.  Everything has been carefully
+	 * setup so that is all we need to do.
+	 */
+	for(i = 0; i < entries; i++ ) {
+		uint64_t map_start = unpack_lb64(mem->map[i].start);
+		uint64_t map_end = map_start + unpack_lb64(mem->map[i].size);
+		/* Does this area need to be expanded? */
+		if (map_end == start) {
+			mem->map[i].size = pack_lb64(end - map_start);
+		}
+		/* Does this area need to be contracted? */
+		else if (map_start == start) {
+			mem->map[i].start = pack_lb64(end);
+			mem->map[i].size = pack_lb64(map_end - end);
+		}
+	}
+}
+
+unsigned long lb_table_fini(struct lb_header *head)
+{
+	struct lb_record *rec, *first_rec;
+	rec = lb_last_record(head);
+	if (head->table_entries) {
+		head->table_bytes += rec->size;
+	}
+	lb_reserve_table_memory(head);
+	first_rec = lb_first_record(head);
+	head->table_checksum = compute_ip_checksum(first_rec, head->table_bytes);
+	head->header_checksum = 0;
+	head->header_checksum = compute_ip_checksum(head, sizeof(*head));
+	printk_debug("Wrote coreboot table at: %p - %p  checksum %lx\n",
+		head, rec, head->table_checksum);
+	return (unsigned long)rec;
+}
+
+static void lb_cleanup_memory_ranges(struct lb_memory *mem)
+{
+	int entries;
+	int i, j;
+	entries = (mem->size - sizeof(*mem))/sizeof(mem->map[0]);
+	
+	/* Sort the lb memory ranges */
+	for(i = 0; i < entries; i++) {
+		uint64_t entry_start = unpack_lb64(mem->map[i].start);
+		for(j = i; j < entries; j++) {
+			uint64_t temp_start = unpack_lb64(mem->map[j].start);
+			if (temp_start < entry_start) {
+				struct lb_memory_range tmp;
+				tmp = mem->map[i];
+				mem->map[i] = mem->map[j];
+				mem->map[j] = tmp;
+			}
+		}
+	}
+
+	/* Merge adjacent entries */
+	for(i = 0; (i + 1) < entries; i++) {
+		uint64_t start, end, nstart, nend;
+		if (mem->map[i].type != mem->map[i + 1].type) {
+			continue;
+		}
+		start  = unpack_lb64(mem->map[i].start);
+		end    = start + unpack_lb64(mem->map[i].size);
+		nstart = unpack_lb64(mem->map[i + 1].start);
+		nend   = nstart + unpack_lb64(mem->map[i + 1].size);
+		if ((start <= nstart) && (end > nstart)) {
+			if (start > nstart) {
+				start = nstart;
+			}
+			if (end < nend) {
+				end = nend;
+			}
+			/* Record the new region size */
+			mem->map[i].start = pack_lb64(start);
+			mem->map[i].size  = pack_lb64(end - start);
+
+			/* Delete the entry I have merged with */
+			memmove(&mem->map[i + 1], &mem->map[i + 2], 
+				((entries - i - 2) * sizeof(mem->map[0])));
+			mem->size -= sizeof(mem->map[0]);
+			entries -= 1;
+			/* See if I can merge with the next entry as well */
+			i -= 1; 
+		}
+	}
+}
+
+static void lb_remove_memory_range(struct lb_memory *mem, 
+	uint64_t start, uint64_t size)
+{
+	uint64_t end;
+	int entries;
+	int i;
+
+	end = start + size;
+	entries = (mem->size - sizeof(*mem))/sizeof(mem->map[0]);
+
+	/* Remove a reserved area from the memory map */
+	for(i = 0; i < entries; i++) {
+		uint64_t map_start = unpack_lb64(mem->map[i].start);
+		uint64_t map_end   = map_start + unpack_lb64(mem->map[i].size);
+		if ((start <= map_start) && (end >= map_end)) {
+			/* Remove the completely covered range */
+			memmove(&mem->map[i], &mem->map[i + 1], 
+				((entries - i - 1) * sizeof(mem->map[0])));
+			mem->size -= sizeof(mem->map[0]);
+			entries -= 1;
+			/* Since the index will disappear revisit what will appear here */
+			i -= 1; 
+		}
+		else if ((start > map_start) && (end < map_end)) {
+			/* Split the memory range */
+			memmove(&mem->map[i + 1], &mem->map[i], 
+				((entries - i) * sizeof(mem->map[0])));
+			mem->size += sizeof(mem->map[0]);
+			entries += 1;
+			/* Update the first map entry */
+			mem->map[i].size = pack_lb64(start - map_start);
+			/* Update the second map entry */
+			mem->map[i + 1].start = pack_lb64(end);
+			mem->map[i + 1].size  = pack_lb64(map_end - end);
+			/* Don't bother with this map entry again */
+			i += 1;
+		}
+		else if ((start <= map_start) && (end > map_start)) {
+			/* Shrink the start of the memory range */
+			mem->map[i].start = pack_lb64(end);
+			mem->map[i].size  = pack_lb64(map_end - end);
+		}
+		else if ((start < map_end) && (start > map_start)) {
+			/* Shrink the end of the memory range */
+			mem->map[i].size = pack_lb64(start - map_start);
+		}
+	}
+}
+
+static void lb_add_memory_range(struct lb_memory *mem,
+	uint32_t type, uint64_t start, uint64_t size)
+{
+	lb_remove_memory_range(mem, start, size);
+	lb_memory_range(mem, type, start, size);
+	lb_cleanup_memory_ranges(mem);
+}
+
+/* Routines to extract part so the coreboot table or 
+ * information from the coreboot table after we have written it.
+ * Currently get_lb_mem relies on a global we can change the
+ * implementaiton.
+ */
+static struct lb_memory *mem_ranges = 0;
+struct lb_memory *get_lb_mem(void)
+{
+	return mem_ranges;
+}
+
+static void build_lb_mem_range(void *gp, struct device *dev, struct resource *res)
+{
+	struct lb_memory *mem = gp;
+	lb_memory_range(mem, LB_MEM_RAM, res->base, res->size);
+}
+
+static struct lb_memory *build_lb_mem(struct lb_header *head)
+{
+	struct lb_memory *mem;
+
+	/* Record where the lb memory ranges will live */
+	mem = lb_memory(head);
+	mem_ranges = mem;
+
+	/* Build the raw table of memory */
+	search_global_resources(
+		IORESOURCE_MEM | IORESOURCE_CACHEABLE, IORESOURCE_MEM | IORESOURCE_CACHEABLE,
+		build_lb_mem_range, mem);
+	lb_cleanup_memory_ranges(mem);
+	return mem;
+}
+
+unsigned long write_coreboot_table( 
+	unsigned long low_table_start, unsigned long low_table_end, 
+	unsigned long rom_table_start, unsigned long rom_table_end)
+{
+	unsigned long table_size;
+	struct lb_header *head;
+	struct lb_memory *mem;
+
+	if(low_table_end > (0x1000 - sizeof(struct lb_header))) { /* after 4K */
+		/* We need to put lbtable on  to [0xf0000,0x100000) */
+		head = lb_table_init(rom_table_end);
+		rom_table_end = (unsigned long)head;
+	} else {
+		head = lb_table_init(low_table_end);
+		low_table_end = (unsigned long)head;
+	}
+ 
+	printk_debug("Adjust low_table_end from 0x%08x to ", low_table_end);
+	low_table_end += 0xfff; // 4K aligned
+	low_table_end &= ~0xfff;
+	printk_debug("0x%08x \n", low_table_end);
+
+	/* The Linux kernel assumes this region is reserved */
+	printk_debug("Adjust rom_table_end from 0x%08x to ", rom_table_end);
+	rom_table_end += 0xffff; // 64K align
+	rom_table_end &= ~0xffff;
+	printk_debug("0x%08x \n", rom_table_end);
+
+#if (HAVE_OPTION_TABLE == 1) 
+	{
+		struct lb_record *rec_dest, *rec_src;
+		/* Write the option config table... */
+		rec_dest = lb_new_record(head);
+		rec_src = (struct lb_record *)(void *)&option_table;
+		memcpy(rec_dest,  rec_src, rec_src->size);
+		/* Create cmos checksum entry in coreboot table */
+		lb_cmos_checksum(head);
+	}
+#endif
+	/* Record where RAM is located */
+	mem = build_lb_mem(head);
+	
+	/* Record the mptable and the the lb_table (This will be adjusted later) */
+	lb_add_memory_range(mem, LB_MEM_TABLE, 
+		low_table_start, low_table_end - low_table_start);
+
+	/* Record the pirq table, acpi tables, and maybe the mptable */
+	table_size=rom_table_end-rom_table_start;
+	lb_add_memory_range(mem, LB_MEM_TABLE, 
+		rom_table_start, table_size<0x10000?0x10000:table_size);
+
+	/* Note:
+	 * I assume that there is always memory at immediately after
+	 * the low_table_end.  This means that after I setup the coreboot table.
+	 * I can trivially fixup the reserved memory ranges to hold the correct
+	 * size of the coreboot table.
+	 */
+
+	/* Record our motheboard */
+	lb_mainboard(head);
+	/* Record our various random string information */
+	lb_strings(head);
+
+	/* Remember where my valid memory ranges are */
+	return lb_table_fini(head);
+	
+}

Copied: trunk/coreboot-v2/src/arch/i386/boot/coreboot_table.h (from rev 3053, trunk/coreboot-v2/src/arch/i386/boot/linuxbios_table.h)
===================================================================
--- trunk/coreboot-v2/src/arch/i386/boot/coreboot_table.h	                        (rev 0)
+++ trunk/coreboot-v2/src/arch/i386/boot/coreboot_table.h	2008-01-18 16:16:45 UTC (rev 3057)
@@ -0,0 +1,29 @@
+#ifndef COREBOOT_TABLE_H
+#define COREBOOT_TABLE_H
+
+#include <boot/coreboot_tables.h>
+
+/* This file holds function prototypes for building the coreboot table. */
+unsigned long write_coreboot_table(
+	unsigned long low_table_start, unsigned long low_table_end,
+	unsigned long rom_table_start, unsigned long rom_table_end);
+
+struct lb_header *lb_table_init(unsigned long addr);
+struct lb_record *lb_first_record(struct lb_header *header);
+struct lb_record *lb_last_record(struct lb_header *header);
+struct lb_record *lb_next_record(struct lb_record *rec);
+struct lb_record *lb_new_record(struct lb_header *header);
+struct lb_memory *lb_memory(struct lb_header *header);
+void lb_memory_range(struct lb_memory *mem, 
+	uint32_t type, uint64_t start, uint64_t size);
+struct lb_mainboard *lb_mainboard(struct lb_header *header);
+unsigned long lb_table_fini(struct lb_header *header);
+
+/* Routines to extract part so the coreboot table or information
+ * from the coreboot table.
+ */
+struct lb_memory *get_lb_mem(void);
+
+extern struct cmos_option_table option_table;
+
+#endif /* COREBOOT_TABLE_H */

Deleted: trunk/coreboot-v2/src/arch/i386/boot/linuxbios_table.c
===================================================================
--- trunk/coreboot-v2/src/arch/i386/boot/linuxbios_table.c	2008-01-18 15:34:24 UTC (rev 3056)
+++ trunk/coreboot-v2/src/arch/i386/boot/linuxbios_table.c	2008-01-18 16:16:45 UTC (rev 3057)
@@ -1,417 +0,0 @@
-#include <console/console.h>
-#include <ip_checksum.h>
-#include <boot/linuxbios_tables.h>
-#include "linuxbios_table.h"
-#include <string.h>
-#include <version.h>
-#include <device/device.h>
-#include <stdlib.h>
-
-struct lb_header *lb_table_init(unsigned long addr)
-{
-	struct lb_header *header;
-
-	/* 16 byte align the address */
-	addr += 15;
-	addr &= ~15;
-
-	header = (void *)addr;
-	header->signature[0] = 'L';
-	header->signature[1] = 'B';
-	header->signature[2] = 'I';
-	header->signature[3] = 'O';
-	header->header_bytes = sizeof(*header);
-	header->header_checksum = 0;
-	header->table_bytes = 0;
-	header->table_checksum = 0;
-	header->table_entries = 0;
-	return header;
-}
-
-struct lb_record *lb_first_record(struct lb_header *header)
-{
-	struct lb_record *rec;
-	rec = (void *)(((char *)header) + sizeof(*header));
-	return rec;
-}
-
-struct lb_record *lb_last_record(struct lb_header *header)
-{
-	struct lb_record *rec;
-	rec = (void *)(((char *)header) + sizeof(*header) + header->table_bytes);
-	return rec;
-}
-
-struct lb_record *lb_next_record(struct lb_record *rec)
-{
-	rec = (void *)(((char *)rec) + rec->size);	
-	return rec;
-}
-
-struct lb_record *lb_new_record(struct lb_header *header)
-{
-	struct lb_record *rec;
-	rec = lb_last_record(header);
-	if (header->table_entries) {
-		header->table_bytes += rec->size;
-	}
-	rec = lb_last_record(header);
-	header->table_entries++;
-	rec->tag = LB_TAG_UNUSED;
-	rec->size = sizeof(*rec);
-	return rec;
-}
-
-
-struct lb_memory *lb_memory(struct lb_header *header)
-{
-	struct lb_record *rec;
-	struct lb_memory *mem;
-	rec = lb_new_record(header);
-	mem = (struct lb_memory *)rec;
-	mem->tag = LB_TAG_MEMORY;
-	mem->size = sizeof(*mem);
-	return mem;
-}
-
-struct lb_mainboard *lb_mainboard(struct lb_header *header)
-{
-	struct lb_record *rec;
-	struct lb_mainboard *mainboard;
-	rec = lb_new_record(header);
-	mainboard = (struct lb_mainboard *)rec;
-	mainboard->tag = LB_TAG_MAINBOARD;
-
-	mainboard->size = (sizeof(*mainboard) +
-		strlen(mainboard_vendor) + 1 + 
-		strlen(mainboard_part_number) + 1 +
-		3) & ~3;
-
-	mainboard->vendor_idx = 0;
-	mainboard->part_number_idx = strlen(mainboard_vendor) + 1;
-
-	memcpy(mainboard->strings + mainboard->vendor_idx,
-		mainboard_vendor,      strlen(mainboard_vendor) + 1);
-	memcpy(mainboard->strings + mainboard->part_number_idx,
-		mainboard_part_number, strlen(mainboard_part_number) + 1);
-
-	return mainboard;
-}
-
-struct cmos_checksum *lb_cmos_checksum(struct lb_header *header)
-{
-	struct lb_record *rec;
-	struct cmos_checksum *cmos_checksum;
-	rec = lb_new_record(header);
-	cmos_checksum = (struct cmos_checksum *)rec;
-	cmos_checksum->tag = LB_TAG_OPTION_CHECKSUM;
-
-	cmos_checksum->size = (sizeof(*cmos_checksum));
-
-	cmos_checksum->range_start = LB_CKS_RANGE_START * 8;
-	cmos_checksum->range_end = ( LB_CKS_RANGE_END * 8 ) + 7;
-	cmos_checksum->location = LB_CKS_LOC * 8;
-	cmos_checksum->type = CHECKSUM_PCBIOS;
-	
-	return cmos_checksum;
-}
-
-void lb_strings(struct lb_header *header)
-{
-	static const struct {
-		uint32_t tag;
-		const char *string;
-	} strings[] = {
-		{ LB_TAG_VERSION,        coreboot_version,        },
-		{ LB_TAG_EXTRA_VERSION,  coreboot_extra_version,  },
-		{ LB_TAG_BUILD,          coreboot_build,          },
-		{ LB_TAG_COMPILE_TIME,   coreboot_compile_time,   },
-		{ LB_TAG_COMPILE_BY,     coreboot_compile_by,     },
-		{ LB_TAG_COMPILE_HOST,   coreboot_compile_host,   },
-		{ LB_TAG_COMPILE_DOMAIN, coreboot_compile_domain, },
-		{ LB_TAG_COMPILER,       coreboot_compiler,       },
-		{ LB_TAG_LINKER,         coreboot_linker,         },
-		{ LB_TAG_ASSEMBLER,      coreboot_assembler,      },
-	};
-	unsigned int i;
-	for(i = 0; i < sizeof(strings)/sizeof(strings[0]); i++) {
-		struct lb_string *rec;
-		size_t len;
-		rec = (struct lb_string *)lb_new_record(header);
-		len = strlen(strings[i].string);
-		rec->tag = strings[i].tag;
-		rec->size = (sizeof(*rec) + len + 1 + 3) & ~3;
-		memcpy(rec->string, strings[i].string, len+1);
-	}
-
-}
-
-void lb_memory_range(struct lb_memory *mem,
-	uint32_t type, uint64_t start, uint64_t size)
-{
-	int entries;
-	entries = (mem->size - sizeof(*mem))/sizeof(mem->map[0]);
-	mem->map[entries].start = pack_lb64(start);
-	mem->map[entries].size = pack_lb64(size);
-	mem->map[entries].type = type;
-	mem->size += sizeof(mem->map[0]);
-}
-
-static void lb_reserve_table_memory(struct lb_header *head)
-{
-	struct lb_record *last_rec;
-	struct lb_memory *mem;
-	uint64_t start;
-	uint64_t end;
-	int i, entries;
-
-	last_rec = lb_last_record(head);
-	mem = get_lb_mem();
-	start = (unsigned long)head;
-	end = (unsigned long)last_rec;
-	entries = (mem->size - sizeof(*mem))/sizeof(mem->map[0]);
-	/* Resize the right two memory areas so this table is in
-	 * a reserved area of memory.  Everything has been carefully
-	 * setup so that is all we need to do.
-	 */
-	for(i = 0; i < entries; i++ ) {
-		uint64_t map_start = unpack_lb64(mem->map[i].start);
-		uint64_t map_end = map_start + unpack_lb64(mem->map[i].size);
-		/* Does this area need to be expanded? */
-		if (map_end == start) {
-			mem->map[i].size = pack_lb64(end - map_start);
-		}
-		/* Does this area need to be contracted? */
-		else if (map_start == start) {
-			mem->map[i].start = pack_lb64(end);
-			mem->map[i].size = pack_lb64(map_end - end);
-		}
-	}
-}
-
-unsigned long lb_table_fini(struct lb_header *head)
-{
-	struct lb_record *rec, *first_rec;
-	rec = lb_last_record(head);
-	if (head->table_entries) {
-		head->table_bytes += rec->size;
-	}
-	lb_reserve_table_memory(head);
-	first_rec = lb_first_record(head);
-	head->table_checksum = compute_ip_checksum(first_rec, head->table_bytes);
-	head->header_checksum = 0;
-	head->header_checksum = compute_ip_checksum(head, sizeof(*head));
-	printk_debug("Wrote coreboot table at: %p - %p  checksum %lx\n",
-		head, rec, head->table_checksum);
-	return (unsigned long)rec;
-}
-
-static void lb_cleanup_memory_ranges(struct lb_memory *mem)
-{
-	int entries;
-	int i, j;
-	entries = (mem->size - sizeof(*mem))/sizeof(mem->map[0]);
-	
-	/* Sort the lb memory ranges */
-	for(i = 0; i < entries; i++) {
-		uint64_t entry_start = unpack_lb64(mem->map[i].start);
-		for(j = i; j < entries; j++) {
-			uint64_t temp_start = unpack_lb64(mem->map[j].start);
-			if (temp_start < entry_start) {
-				struct lb_memory_range tmp;
-				tmp = mem->map[i];
-				mem->map[i] = mem->map[j];
-				mem->map[j] = tmp;
-			}
-		}
-	}
-
-	/* Merge adjacent entries */
-	for(i = 0; (i + 1) < entries; i++) {
-		uint64_t start, end, nstart, nend;
-		if (mem->map[i].type != mem->map[i + 1].type) {
-			continue;
-		}
-		start  = unpack_lb64(mem->map[i].start);
-		end    = start + unpack_lb64(mem->map[i].size);
-		nstart = unpack_lb64(mem->map[i + 1].start);
-		nend   = nstart + unpack_lb64(mem->map[i + 1].size);
-		if ((start <= nstart) && (end > nstart)) {
-			if (start > nstart) {
-				start = nstart;
-			}
-			if (end < nend) {
-				end = nend;
-			}
-			/* Record the new region size */
-			mem->map[i].start = pack_lb64(start);
-			mem->map[i].size  = pack_lb64(end - start);
-
-			/* Delete the entry I have merged with */
-			memmove(&mem->map[i + 1], &mem->map[i + 2], 
-				((entries - i - 2) * sizeof(mem->map[0])));
-			mem->size -= sizeof(mem->map[0]);
-			entries -= 1;
-			/* See if I can merge with the next entry as well */
-			i -= 1; 
-		}
-	}
-}
-
-static void lb_remove_memory_range(struct lb_memory *mem, 
-	uint64_t start, uint64_t size)
-{
-	uint64_t end;
-	int entries;
-	int i;
-
-	end = start + size;
-	entries = (mem->size - sizeof(*mem))/sizeof(mem->map[0]);
-
-	/* Remove a reserved area from the memory map */
-	for(i = 0; i < entries; i++) {
-		uint64_t map_start = unpack_lb64(mem->map[i].start);
-		uint64_t map_end   = map_start + unpack_lb64(mem->map[i].size);
-		if ((start <= map_start) && (end >= map_end)) {
-			/* Remove the completely covered range */
-			memmove(&mem->map[i], &mem->map[i + 1], 
-				((entries - i - 1) * sizeof(mem->map[0])));
-			mem->size -= sizeof(mem->map[0]);
-			entries -= 1;
-			/* Since the index will disappear revisit what will appear here */
-			i -= 1; 
-		}
-		else if ((start > map_start) && (end < map_end)) {
-			/* Split the memory range */
-			memmove(&mem->map[i + 1], &mem->map[i], 
-				((entries - i) * sizeof(mem->map[0])));
-			mem->size += sizeof(mem->map[0]);
-			entries += 1;
-			/* Update the first map entry */
-			mem->map[i].size = pack_lb64(start - map_start);
-			/* Update the second map entry */
-			mem->map[i + 1].start = pack_lb64(end);
-			mem->map[i + 1].size  = pack_lb64(map_end - end);
-			/* Don't bother with this map entry again */
-			i += 1;
-		}
-		else if ((start <= map_start) && (end > map_start)) {
-			/* Shrink the start of the memory range */
-			mem->map[i].start = pack_lb64(end);
-			mem->map[i].size  = pack_lb64(map_end - end);
-		}
-		else if ((start < map_end) && (start > map_start)) {
-			/* Shrink the end of the memory range */
-			mem->map[i].size = pack_lb64(start - map_start);
-		}
-	}
-}
-
-static void lb_add_memory_range(struct lb_memory *mem,
-	uint32_t type, uint64_t start, uint64_t size)
-{
-	lb_remove_memory_range(mem, start, size);
-	lb_memory_range(mem, type, start, size);
-	lb_cleanup_memory_ranges(mem);
-}
-
-/* Routines to extract part so the coreboot table or 
- * information from the coreboot table after we have written it.
- * Currently get_lb_mem relies on a global we can change the
- * implementaiton.
- */
-static struct lb_memory *mem_ranges = 0;
-struct lb_memory *get_lb_mem(void)
-{
-	return mem_ranges;
-}
-
-static void build_lb_mem_range(void *gp, struct device *dev, struct resource *res)
-{
-	struct lb_memory *mem = gp;
-	lb_memory_range(mem, LB_MEM_RAM, res->base, res->size);
-}
-
-static struct lb_memory *build_lb_mem(struct lb_header *head)
-{
-	struct lb_memory *mem;
-
-	/* Record where the lb memory ranges will live */
-	mem = lb_memory(head);
-	mem_ranges = mem;
-
-	/* Build the raw table of memory */
-	search_global_resources(
-		IORESOURCE_MEM | IORESOURCE_CACHEABLE, IORESOURCE_MEM | IORESOURCE_CACHEABLE,
-		build_lb_mem_range, mem);
-	lb_cleanup_memory_ranges(mem);
-	return mem;
-}
-
-unsigned long write_coreboot_table( 
-	unsigned long low_table_start, unsigned long low_table_end, 
-	unsigned long rom_table_start, unsigned long rom_table_end)
-{
-	unsigned long table_size;
-	struct lb_header *head;
-	struct lb_memory *mem;
-
-	if(low_table_end > (0x1000 - sizeof(struct lb_header))) { /* after 4K */
-		/* We need to put lbtable on  to [0xf0000,0x100000) */
-		head = lb_table_init(rom_table_end);
-		rom_table_end = (unsigned long)head;
-	} else {
-		head = lb_table_init(low_table_end);
-		low_table_end = (unsigned long)head;
-	}
- 
-	printk_debug("Adjust low_table_end from 0x%08x to ", low_table_end);
-	low_table_end += 0xfff; // 4K aligned
-	low_table_end &= ~0xfff;
-	printk_debug("0x%08x \n", low_table_end);
-
-	/* The Linux kernel assumes this region is reserved */
-	printk_debug("Adjust rom_table_end from 0x%08x to ", rom_table_end);
-	rom_table_end += 0xffff; // 64K align
-	rom_table_end &= ~0xffff;
-	printk_debug("0x%08x \n", rom_table_end);
-
-#if (HAVE_OPTION_TABLE == 1) 
-	{
-		struct lb_record *rec_dest, *rec_src;
-		/* Write the option config table... */
-		rec_dest = lb_new_record(head);
-		rec_src = (struct lb_record *)(void *)&option_table;
-		memcpy(rec_dest,  rec_src, rec_src->size);
-		/* Create cmos checksum entry in coreboot table */
-		lb_cmos_checksum(head);
-	}
-#endif
-	/* Record where RAM is located */
-	mem = build_lb_mem(head);
-	
-	/* Record the mptable and the the lb_table (This will be adjusted later) */
-	lb_add_memory_range(mem, LB_MEM_TABLE, 
-		low_table_start, low_table_end - low_table_start);
-
-	/* Record the pirq table, acpi tables, and maybe the mptable */
-	table_size=rom_table_end-rom_table_start;
-	lb_add_memory_range(mem, LB_MEM_TABLE, 
-		rom_table_start, table_size<0x10000?0x10000:table_size);
-
-	/* Note:
-	 * I assume that there is always memory at immediately after
-	 * the low_table_end.  This means that after I setup the coreboot table.
-	 * I can trivially fixup the reserved memory ranges to hold the correct
-	 * size of the coreboot table.
-	 */
-
-	/* Record our motheboard */
-	lb_mainboard(head);
-	/* Record our various random string information */
-	lb_strings(head);
-
-	/* Remember where my valid memory ranges are */
-	return lb_table_fini(head);
-	
-}

Deleted: trunk/coreboot-v2/src/arch/i386/boot/linuxbios_table.h
===================================================================
--- trunk/coreboot-v2/src/arch/i386/boot/linuxbios_table.h	2008-01-18 15:34:24 UTC (rev 3056)
+++ trunk/coreboot-v2/src/arch/i386/boot/linuxbios_table.h	2008-01-18 16:16:45 UTC (rev 3057)
@@ -1,29 +0,0 @@
-#ifndef COREBOOT_TABLE_H
-#define COREBOOT_TABLE_H
-
-#include <boot/linuxbios_tables.h>
-
-/* This file holds function prototypes for building the coreboot table. */
-unsigned long write_coreboot_table(
-	unsigned long low_table_start, unsigned long low_table_end,
-	unsigned long rom_table_start, unsigned long rom_table_end);
-
-struct lb_header *lb_table_init(unsigned long addr);
-struct lb_record *lb_first_record(struct lb_header *header);
-struct lb_record *lb_last_record(struct lb_header *header);
-struct lb_record *lb_next_record(struct lb_record *rec);
-struct lb_record *lb_new_record(struct lb_header *header);
-struct lb_memory *lb_memory(struct lb_header *header);
-void lb_memory_range(struct lb_memory *mem, 
-	uint32_t type, uint64_t start, uint64_t size);
-struct lb_mainboard *lb_mainboard(struct lb_header *header);
-unsigned long lb_table_fini(struct lb_header *header);
-
-/* Routines to extract part so the coreboot table or information
- * from the coreboot table.
- */
-struct lb_memory *get_lb_mem(void);
-
-extern struct cmos_option_table option_table;
-
-#endif /* COREBOOT_TABLE_H */

Modified: trunk/coreboot-v2/src/arch/i386/boot/tables.c
===================================================================
--- trunk/coreboot-v2/src/arch/i386/boot/tables.c	2008-01-18 15:34:24 UTC (rev 3056)
+++ trunk/coreboot-v2/src/arch/i386/boot/tables.c	2008-01-18 16:16:45 UTC (rev 3057)
@@ -4,12 +4,12 @@
 #include <console/console.h>
 #include <cpu/cpu.h>
 #include <boot/tables.h>
-#include <boot/linuxbios_tables.h>
+#include <boot/coreboot_tables.h>
 #include <arch/pirq_routing.h>
 #include <arch/smp/mpspec.h>
 #include <arch/acpi.h>
 #include <string.h>
-#include "linuxbios_table.h"
+#include "coreboot_table.h"
 
 // Global Descriptor Table, defined in c_start.S
 extern uint8_t gdt;

Copied: trunk/coreboot-v2/src/arch/i386/llshell/readme.coreboot (from rev 3053, trunk/coreboot-v2/src/arch/i386/llshell/readme.linuxbios)
===================================================================
--- trunk/coreboot-v2/src/arch/i386/llshell/readme.coreboot	                        (rev 0)
+++ trunk/coreboot-v2/src/arch/i386/llshell/readme.coreboot	2008-01-18 16:16:45 UTC (rev 3057)
@@ -0,0 +1,25 @@
+
+1) Include llshell.inc in your northbridge Config file
+2) In raminit.inc (or whatever), make a jmp out to low_level_shell, setting
+   a return label in %esp.
+For example:
+ram_set_registers:
+
+	mov $llshell_ret1,%esp
+	jmp low_level_shell
+llshell_ret1:
+
+        /* Disable and invalidate the cache */
+        invd
+        mov %cr0, %eax
+        ....
+3) Optionally, comment out two lines in ramtest.inc:
+5:
+        CONSOLE_INFO_TX_STRING($rt_toomany)
+        // intel_chip_post_macro(0xf1)
+        // jmp  .Lhlt
+otherwise, a ramtest failure will hang
+
+4) build and flash as normal
+If it worked, the speaker will beep, and you'll get a shell.
+Type help or ? at the prompt for a list of commands.

Deleted: trunk/coreboot-v2/src/arch/i386/llshell/readme.linuxbios
===================================================================
--- trunk/coreboot-v2/src/arch/i386/llshell/readme.linuxbios	2008-01-18 15:34:24 UTC (rev 3056)
+++ trunk/coreboot-v2/src/arch/i386/llshell/readme.linuxbios	2008-01-18 16:16:45 UTC (rev 3057)
@@ -1,25 +0,0 @@
-
-1) Include llshell.inc in your northbridge Config file
-2) In raminit.inc (or whatever), make a jmp out to low_level_shell, setting
-   a return label in %esp.
-For example:
-ram_set_registers:
-
-	mov $llshell_ret1,%esp
-	jmp low_level_shell
-llshell_ret1:
-
-        /* Disable and invalidate the cache */
-        invd
-        mov %cr0, %eax
-        ....
-3) Optionally, comment out two lines in ramtest.inc:
-5:
-        CONSOLE_INFO_TX_STRING($rt_toomany)
-        // intel_chip_post_macro(0xf1)
-        // jmp  .Lhlt
-otherwise, a ramtest failure will hang
-
-4) build and flash as normal
-If it worked, the speaker will beep, and you'll get a shell.
-Type help or ? at the prompt for a list of commands.

Modified: trunk/coreboot-v2/src/arch/ppc/boot/Config.lb
===================================================================
--- trunk/coreboot-v2/src/arch/ppc/boot/Config.lb	2008-01-18 15:34:24 UTC (rev 3056)
+++ trunk/coreboot-v2/src/arch/ppc/boot/Config.lb	2008-01-18 16:16:45 UTC (rev 3057)
@@ -1,3 +1,3 @@
 object boot.o
 object tables.o
-object linuxbios_table.o
+object coreboot_table.o

Copied: trunk/coreboot-v2/src/arch/ppc/boot/coreboot_table.c (from rev 3053, trunk/coreboot-v2/src/arch/ppc/boot/linuxbios_table.c)
===================================================================
--- trunk/coreboot-v2/src/arch/ppc/boot/coreboot_table.c	                        (rev 0)
+++ trunk/coreboot-v2/src/arch/ppc/boot/coreboot_table.c	2008-01-18 16:16:45 UTC (rev 3057)
@@ -0,0 +1,380 @@
+#include <console/console.h>
+#include <ip_checksum.h>
+#include <boot/coreboot_tables.h>
+#include "coreboot_table.h"
+#include <string.h>
+#include <version.h>
+#include <device/device.h>
+#include <stdlib.h>
+
+struct lb_header *lb_table_init(unsigned long addr)
+{
+	struct lb_header *header;
+
+	/* 16 byte align the address */
+	addr += 15;
+	addr &= ~15;
+
+	header = (void *)addr;
+	header->signature[0] = 'L';
+	header->signature[1] = 'B';
+	header->signature[2] = 'I';
+	header->signature[3] = 'O';
+	header->header_bytes = sizeof(*header);
+	header->header_checksum = 0;
+	header->table_bytes = 0;
+	header->table_checksum = 0;
+	header->table_entries = 0;
+	return header;
+}
+
+struct lb_record *lb_first_record(struct lb_header *header)
+{
+	struct lb_record *rec;
+	rec = (void *)(((char *)header) + sizeof(*header));
+	return rec;
+}
+
+struct lb_record *lb_last_record(struct lb_header *header)
+{
+	struct lb_record *rec;
+	rec = (void *)(((char *)header) + sizeof(*header) + header->table_bytes);
+	return rec;
+}
+
+struct lb_record *lb_next_record(struct lb_record *rec)
+{
+	rec = (void *)(((char *)rec) + rec->size);	
+	return rec;
+}
+
+struct lb_record *lb_new_record(struct lb_header *header)
+{
+	struct lb_record *rec;
+	rec = lb_last_record(header);
+	if (header->table_entries) {
+		header->table_bytes += rec->size;
+	}
+	rec = lb_last_record(header);
+	header->table_entries++;
+	rec->tag = LB_TAG_UNUSED;
+	rec->size = sizeof(*rec);
+	return rec;
+}
+
+
+struct lb_memory *lb_memory(struct lb_header *header)
+{
+	struct lb_record *rec;
+	struct lb_memory *mem;
+	rec = lb_new_record(header);
+	mem = (struct lb_memory *)rec;
+	mem->tag = LB_TAG_MEMORY;
+	mem->size = sizeof(*mem);
+	return mem;
+}
+
+struct lb_mainboard *lb_mainboard(struct lb_header *header)
+{
+	struct lb_record *rec;
+	struct lb_mainboard *mainboard;
+	rec = lb_new_record(header);
+	mainboard = (struct lb_mainboard *)rec;
+	mainboard->tag = LB_TAG_MAINBOARD;
+
+	mainboard->size = (sizeof(*mainboard) +
+		strlen(mainboard_vendor) + 1 + 
+		strlen(mainboard_part_number) + 1 +
+		3) & ~3;
+
+	mainboard->vendor_idx = 0;
+	mainboard->part_number_idx = strlen(mainboard_vendor) + 1;
+
+	memcpy(mainboard->strings + mainboard->vendor_idx,
+		mainboard_vendor,      strlen(mainboard_vendor) + 1);
+	memcpy(mainboard->strings + mainboard->part_number_idx,
+		mainboard_part_number, strlen(mainboard_part_number) + 1);
+
+	return mainboard;
+}
+
+void lb_strings(struct lb_header *header)
+{
+	static const struct {
+		uint32_t tag;
+		const uint8_t *string;
+	} strings[] = {
+		{ LB_TAG_VERSION,        coreboot_version,        },
+		{ LB_TAG_EXTRA_VERSION,  coreboot_extra_version,  },
+		{ LB_TAG_BUILD,          coreboot_build,          },
+		{ LB_TAG_COMPILE_TIME,   coreboot_compile_time,   },
+		{ LB_TAG_COMPILE_BY,     coreboot_compile_by,     },
+		{ LB_TAG_COMPILE_HOST,   coreboot_compile_host,   },
+		{ LB_TAG_COMPILE_DOMAIN, coreboot_compile_domain, },
+		{ LB_TAG_COMPILER,       coreboot_compiler,       },
+		{ LB_TAG_LINKER,         coreboot_linker,         },
+		{ LB_TAG_ASSEMBLER,      coreboot_assembler,      },
+	};
+	unsigned int i;
+	for(i = 0; i < sizeof(strings)/sizeof(strings[0]); i++) {
+		struct lb_string *rec;
+		size_t len;
+		rec = (struct lb_string *)lb_new_record(header);
+		len = strlen(strings[i].string);
+		rec->tag = strings[i].tag;
+		rec->size = (sizeof(*rec) + len + 1 + 3) & ~3;
+		memcpy(rec->string, strings[i].string, len+1);
+	}
+
+}
+
+void lb_memory_range(struct lb_memory *mem,
+	uint32_t type, uint64_t start, uint64_t size)
+{
+	int entries;
+	entries = (mem->size - sizeof(*mem))/sizeof(mem->map[0]);
+	mem->map[entries].start = pack_lb64(start);
+	mem->map[entries].size = pack_lb64(size);
+	mem->map[entries].type = type;
+	mem->size += sizeof(mem->map[0]);
+}
+
+static void lb_reserve_table_memory(struct lb_header *head)
+{
+	struct lb_record *last_rec;
+	struct lb_memory *mem;
+	uint64_t start;
+	uint64_t end;
+	int i, entries;
+
+	last_rec = lb_last_record(head);
+	mem = get_lb_mem();
+	start = (unsigned long)head;
+	end = (unsigned long)last_rec;
+	entries = (mem->size - sizeof(*mem))/sizeof(mem->map[0]);
+	/* Resize the right two memory areas so this table is in
+	 * a reserved area of memory.  Everything has been carefully
+	 * setup so that is all we need to do.
+	 */
+	for(i = 0; i < entries; i++ ) {
+		uint64_t map_start = unpack_lb64(mem->map[i].start);
+		uint64_t map_end = map_start + unpack_lb64(mem->map[i].size);
+		/* Does this area need to be expanded? */
+		if (map_end == start) {
+			mem->map[i].size = pack_lb64(end - map_start);
+		}
+		/* Does this area need to be contracted? */
+		else if (map_start == start) {
+			mem->map[i].start = pack_lb64(end);
+			mem->map[i].size = pack_lb64(map_end - end);
+		}
+	}
+}
+
+unsigned long lb_table_fini(struct lb_header *head)
+{
+	struct lb_record *rec, *first_rec;
+	rec = lb_last_record(head);
+	if (head->table_entries) {
+		head->table_bytes += rec->size;
+	}
+	lb_reserve_table_memory(head);
+	first_rec = lb_first_record(head);
+	head->table_checksum = compute_ip_checksum(first_rec, head->table_bytes);
+	head->header_checksum = 0;
+	head->header_checksum = compute_ip_checksum(head, sizeof(*head));
+	printk_debug("Wrote coreboot table at: %p - %p  checksum %lx\n",
+		head, rec, head->table_checksum);
+	return (unsigned long)rec;
+}
+
+static void lb_cleanup_memory_ranges(struct lb_memory *mem)
+{
+	int entries;
+	int i, j;
+	entries = (mem->size - sizeof(*mem))/sizeof(mem->map[0]);
+	
+	/* Sort the lb memory ranges */
+	for(i = 0; i < entries; i++) {
+		uint64_t entry_start = unpack_lb64(mem->map[i].start);
+		for(j = i; j < entries; j++) {
+			uint64_t temp_start = unpack_lb64(mem->map[j].start);
+			if (temp_start < entry_start) {
+				struct lb_memory_range tmp;
+				tmp = mem->map[i];
+				mem->map[i] = mem->map[j];
+				mem->map[j] = tmp;
+			}
+		}
+	}
+
+	/* Merge adjacent entries */
+	for(i = 0; (i + 1) < entries; i++) {
+		uint64_t start, end, nstart, nend;
+		if (mem->map[i].type != mem->map[i + 1].type) {
+			continue;
+		}
+		start  = unpack_lb64(mem->map[i].start);
+		end    = start + unpack_lb64(mem->map[i].size);
+		nstart = unpack_lb64(mem->map[i + 1].start);
+		nend   = nstart + unpack_lb64(mem->map[i + 1].size);
+		if ((start <= nstart) && (end > nstart)) {
+			if (start > nstart) {
+				start = nstart;
+			}
+			if (end < nend) {
+				end = nend;
+			}
+			/* Record the new region size */
+			mem->map[i].start = pack_lb64(start);
+			mem->map[i].size  = pack_lb64(end - start);
+
+			/* Delete the entry I have merged with */
+			memmove(&mem->map[i + 1], &mem->map[i + 2], 
+				((entries - i - 2) * sizeof(mem->map[0])));
+			mem->size -= sizeof(mem->map[0]);
+			entries -= 1;
+			/* See if I can merge with the next entry as well */
+			i -= 1; 
+		}
+	}
+}
+
+static void lb_remove_memory_range(struct lb_memory *mem, 
+	uint64_t start, uint64_t size)
+{
+	uint64_t end;
+	int entries;
+	int i;
+
+	end = start + size;
+	entries = (mem->size - sizeof(*mem))/sizeof(mem->map[0]);
+
+	/* Remove a reserved area from the memory map */
+	for(i = 0; i < entries; i++) {
+		uint64_t map_start = unpack_lb64(mem->map[i].start);
+		uint64_t map_end   = map_start + unpack_lb64(mem->map[i].size);
+		if ((start <= map_start) && (end >= map_end)) {
+			/* Remove the completely covered range */
+			memmove(&mem->map[i], &mem->map[i + 1], 
+				((entries - i - 1) * sizeof(mem->map[0])));
+			mem->size -= sizeof(mem->map[0]);
+			entries -= 1;
+			/* Since the index will disappear revisit what will appear here */
+			i -= 1; 
+		}
+		else if ((start > map_start) && (end < map_end)) {
+			/* Split the memory range */
+			memmove(&mem->map[i + 1], &mem->map[i], 
+				((entries - i) * sizeof(mem->map[0])));
+			mem->size += sizeof(mem->map[0]);
+			entries += 1;
+			/* Update the first map entry */
+			mem->map[i].size = pack_lb64(start - map_start);
+			/* Update the second map entry */
+			mem->map[i + 1].start = pack_lb64(end);
+			mem->map[i + 1].size  = pack_lb64(map_end - end);
+			/* Don't bother with this map entry again */
+			i += 1;
+		}
+		else if ((start <= map_start) && (end > map_start)) {
+			/* Shrink the start of the memory range */
+			mem->map[i].start = pack_lb64(end);
+			mem->map[i].size  = pack_lb64(map_end - end);
+		}
+		else if ((start < map_end) && (start > map_start)) {
+			/* Shrink the end of the memory range */
+			mem->map[i].size = pack_lb64(start - map_start);
+		}
+	}
+}
+
+static void lb_add_memory_range(struct lb_memory *mem,
+	uint32_t type, uint64_t start, uint64_t size)
+{
+	lb_remove_memory_range(mem, start, size);
+	lb_memory_range(mem, type, start, size);
+	lb_cleanup_memory_ranges(mem);
+}
+
+/* Routines to extract part so the coreboot table or 
+ * information from the coreboot table after we have written it.
+ * Currently get_lb_mem relies on a global we can change the
+ * implementaiton.
+ */
+static struct lb_memory *mem_ranges = 0;
+struct lb_memory *get_lb_mem(void)
+{
+	return mem_ranges;
+}
+
+static void build_lb_mem_range(void *gp, struct device *dev, struct resource *res)
+{
+	struct lb_memory *mem = gp;
+	lb_memory_range(mem, LB_MEM_RAM, res->base, res->size);
+}
+
+static struct lb_memory *build_lb_mem(struct lb_header *head)
+{
+	struct lb_memory *mem;
+
+	/* Record where the lb memory ranges will live */
+	mem = lb_memory(head);
+	mem_ranges = mem;
+
+	/* Build the raw table of memory */
+	search_global_resources(
+		IORESOURCE_MEM | IORESOURCE_CACHEABLE, IORESOURCE_MEM | IORESOURCE_CACHEABLE,
+		build_lb_mem_range, mem);
+	lb_cleanup_memory_ranges(mem);
+	return mem;
+}
+
+unsigned long write_coreboot_table( 
+	unsigned long low_table_start, unsigned long low_table_end,
+	unsigned long rom_table_start, unsigned long rom_table_end)
+{
+	unsigned long table_size;
+	struct lb_header *head;
+	struct lb_memory *mem;
+
+	head = lb_table_init(low_table_end);
+	low_table_end = (unsigned long)head;
+	if (HAVE_OPTION_TABLE == 1) {
+		struct lb_record *rec_dest, *rec_src;
+		/* Write the option config table... */
+		rec_dest = lb_new_record(head);
+		rec_src = (struct lb_record *)(void *)&option_table;
+		memcpy(rec_dest,  rec_src, rec_src->size);
+	}
+	/* Record where RAM is located */
+	mem = build_lb_mem(head);
+	
+	/* Find the current mptable size */
+	table_size = (low_table_end - low_table_start);
+
+	/* Record the mptable and the the lb_table (This will be adjusted later) */
+	lb_add_memory_range(mem, LB_MEM_TABLE, 
+		low_table_start, table_size);
+
+	/* Record the pirq table */
+	lb_add_memory_range(mem, LB_MEM_TABLE, 
+		rom_table_start, (rom_table_end - rom_table_start));
+
+	/* Note:
+	 * I assume that there is always memory at immediately after
+	 * the low_table_end.  This means that after I setup the coreboot table.
+	 * I can trivially fixup the reserved memory ranges to hold the correct
+	 * size of the coreboot table.
+	 */
+
+	/* Record our motheboard */
+	lb_mainboard(head);
+	/* Record our various random string information */
+	lb_strings(head);
+
+	low_table_end = lb_table_fini(head);
+
+	/* Remember where my valid memory ranges are */
+	return low_table_end;
+}

Copied: trunk/coreboot-v2/src/arch/ppc/boot/coreboot_table.h (from rev 3053, trunk/coreboot-v2/src/arch/ppc/boot/linuxbios_table.h)
===================================================================
--- trunk/coreboot-v2/src/arch/ppc/boot/coreboot_table.h	                        (rev 0)
+++ trunk/coreboot-v2/src/arch/ppc/boot/coreboot_table.h	2008-01-18 16:16:45 UTC (rev 3057)
@@ -0,0 +1,31 @@
+#ifndef COREBOOT_TABLE_H
+#define COREBOOT_TABLE_H
+
+#include <boot/coreboot_tables.h>
+
+struct mem_range;
+
+/* This file holds function prototypes for building the coreboot table. */
+unsigned long write_coreboot_table(
+	unsigned long low_table_start, unsigned long low_table_end,
+	unsigned long rom_table_start, unsigned long rom_table_end);
+
+struct lb_header *lb_table_init(unsigned long addr);
+struct lb_record *lb_first_record(struct lb_header *header);
+struct lb_record *lb_last_record(struct lb_header *header);
+struct lb_record *lb_next_record(struct lb_record *rec);
+struct lb_record *lb_new_record(struct lb_header *header);
+struct lb_memory *lb_memory(struct lb_header *header);
+void lb_memory_range(struct lb_memory *mem, 
+	uint32_t type, uint64_t startk, uint64_t sizek);
+struct lb_mainboard *lb_mainboard(struct lb_header *header);
+unsigned long lb_table_fini(struct lb_header *header);
+
+/* Routines to extract part so the coreboot table or information
+ * from the coreboot table.
+ */
+struct lb_memory *get_lb_mem(void);
+
+extern struct cmos_option_table option_table;
+
+#endif /* COREBOOT_TABLE_H */

Deleted: trunk/coreboot-v2/src/arch/ppc/boot/linuxbios_table.c
===================================================================
--- trunk/coreboot-v2/src/arch/ppc/boot/linuxbios_table.c	2008-01-18 15:34:24 UTC (rev 3056)
+++ trunk/coreboot-v2/src/arch/ppc/boot/linuxbios_table.c	2008-01-18 16:16:45 UTC (rev 3057)
@@ -1,380 +0,0 @@
-#include <console/console.h>
-#include <ip_checksum.h>
-#include <boot/linuxbios_tables.h>
-#include "linuxbios_table.h"
-#include <string.h>
-#include <version.h>
-#include <device/device.h>
-#include <stdlib.h>
-
-struct lb_header *lb_table_init(unsigned long addr)
-{
-	struct lb_header *header;
-
-	/* 16 byte align the address */
-	addr += 15;
-	addr &= ~15;
-
-	header = (void *)addr;
-	header->signature[0] = 'L';
-	header->signature[1] = 'B';
-	header->signature[2] = 'I';
-	header->signature[3] = 'O';
-	header->header_bytes = sizeof(*header);
-	header->header_checksum = 0;
-	header->table_bytes = 0;
-	header->table_checksum = 0;
-	header->table_entries = 0;
-	return header;
-}
-
-struct lb_record *lb_first_record(struct lb_header *header)
-{
-	struct lb_record *rec;
-	rec = (void *)(((char *)header) + sizeof(*header));
-	return rec;
-}
-
-struct lb_record *lb_last_record(struct lb_header *header)
-{
-	struct lb_record *rec;
-	rec = (void *)(((char *)header) + sizeof(*header) + header->table_bytes);
-	return rec;
-}
-
-struct lb_record *lb_next_record(struct lb_record *rec)
-{
-	rec = (void *)(((char *)rec) + rec->size);	
-	return rec;
-}
-
-struct lb_record *lb_new_record(struct lb_header *header)
-{
-	struct lb_record *rec;
-	rec = lb_last_record(header);
-	if (header->table_entries) {
-		header->table_bytes += rec->size;
-	}
-	rec = lb_last_record(header);
-	header->table_entries++;
-	rec->tag = LB_TAG_UNUSED;
-	rec->size = sizeof(*rec);
-	return rec;
-}
-
-
-struct lb_memory *lb_memory(struct lb_header *header)
-{
-	struct lb_record *rec;
-	struct lb_memory *mem;
-	rec = lb_new_record(header);
-	mem = (struct lb_memory *)rec;
-	mem->tag = LB_TAG_MEMORY;
-	mem->size = sizeof(*mem);
-	return mem;
-}
-
-struct lb_mainboard *lb_mainboard(struct lb_header *header)
-{
-	struct lb_record *rec;
-	struct lb_mainboard *mainboard;
-	rec = lb_new_record(header);
-	mainboard = (struct lb_mainboard *)rec;
-	mainboard->tag = LB_TAG_MAINBOARD;
-
-	mainboard->size = (sizeof(*mainboard) +
-		strlen(mainboard_vendor) + 1 + 
-		strlen(mainboard_part_number) + 1 +
-		3) & ~3;
-
-	mainboard->vendor_idx = 0;
-	mainboard->part_number_idx = strlen(mainboard_vendor) + 1;
-
-	memcpy(mainboard->strings + mainboard->vendor_idx,
-		mainboard_vendor,      strlen(mainboard_vendor) + 1);
-	memcpy(mainboard->strings + mainboard->part_number_idx,
-		mainboard_part_number, strlen(mainboard_part_number) + 1);
-
-	return mainboard;
-}
-
-void lb_strings(struct lb_header *header)
-{
-	static const struct {
-		uint32_t tag;
-		const uint8_t *string;
-	} strings[] = {
-		{ LB_TAG_VERSION,        coreboot_version,        },
-		{ LB_TAG_EXTRA_VERSION,  coreboot_extra_version,  },
-		{ LB_TAG_BUILD,          coreboot_build,          },
-		{ LB_TAG_COMPILE_TIME,   coreboot_compile_time,   },
-		{ LB_TAG_COMPILE_BY,     coreboot_compile_by,     },
-		{ LB_TAG_COMPILE_HOST,   coreboot_compile_host,   },
-		{ LB_TAG_COMPILE_DOMAIN, coreboot_compile_domain, },
-		{ LB_TAG_COMPILER,       coreboot_compiler,       },
-		{ LB_TAG_LINKER,         coreboot_linker,         },
-		{ LB_TAG_ASSEMBLER,      coreboot_assembler,      },
-	};
-	unsigned int i;
-	for(i = 0; i < sizeof(strings)/sizeof(strings[0]); i++) {
-		struct lb_string *rec;
-		size_t len;
-		rec = (struct lb_string *)lb_new_record(header);
-		len = strlen(strings[i].string);
-		rec->tag = strings[i].tag;
-		rec->size = (sizeof(*rec) + len + 1 + 3) & ~3;
-		memcpy(rec->string, strings[i].string, len+1);
-	}
-
-}
-
-void lb_memory_range(struct lb_memory *mem,
-	uint32_t type, uint64_t start, uint64_t size)
-{
-	int entries;
-	entries = (mem->size - sizeof(*mem))/sizeof(mem->map[0]);
-	mem->map[entries].start = pack_lb64(start);
-	mem->map[entries].size = pack_lb64(size);
-	mem->map[entries].type = type;
-	mem->size += sizeof(mem->map[0]);
-}
-
-static void lb_reserve_table_memory(struct lb_header *head)
-{
-	struct lb_record *last_rec;
-	struct lb_memory *mem;
-	uint64_t start;
-	uint64_t end;
-	int i, entries;
-
-	last_rec = lb_last_record(head);
-	mem = get_lb_mem();
-	start = (unsigned long)head;
-	end = (unsigned long)last_rec;
-	entries = (mem->size - sizeof(*mem))/sizeof(mem->map[0]);
-	/* Resize the right two memory areas so this table is in
-	 * a reserved area of memory.  Everything has been carefully
-	 * setup so that is all we need to do.
-	 */
-	for(i = 0; i < entries; i++ ) {
-		uint64_t map_start = unpack_lb64(mem->map[i].start);
-		uint64_t map_end = map_start + unpack_lb64(mem->map[i].size);
-		/* Does this area need to be expanded? */
-		if (map_end == start) {
-			mem->map[i].size = pack_lb64(end - map_start);
-		}
-		/* Does this area need to be contracted? */
-		else if (map_start == start) {
-			mem->map[i].start = pack_lb64(end);
-			mem->map[i].size = pack_lb64(map_end - end);
-		}
-	}
-}
-
-unsigned long lb_table_fini(struct lb_header *head)
-{
-	struct lb_record *rec, *first_rec;
-	rec = lb_last_record(head);
-	if (head->table_entries) {
-		head->table_bytes += rec->size;
-	}
-	lb_reserve_table_memory(head);
-	first_rec = lb_first_record(head);
-	head->table_checksum = compute_ip_checksum(first_rec, head->table_bytes);
-	head->header_checksum = 0;
-	head->header_checksum = compute_ip_checksum(head, sizeof(*head));
-	printk_debug("Wrote coreboot table at: %p - %p  checksum %lx\n",
-		head, rec, head->table_checksum);
-	return (unsigned long)rec;
-}
-
-static void lb_cleanup_memory_ranges(struct lb_memory *mem)
-{
-	int entries;
-	int i, j;
-	entries = (mem->size - sizeof(*mem))/sizeof(mem->map[0]);
-	
-	/* Sort the lb memory ranges */
-	for(i = 0; i < entries; i++) {
-		uint64_t entry_start = unpack_lb64(mem->map[i].start);
-		for(j = i; j < entries; j++) {
-			uint64_t temp_start = unpack_lb64(mem->map[j].start);
-			if (temp_start < entry_start) {
-				struct lb_memory_range tmp;
-				tmp = mem->map[i];
-				mem->map[i] = mem->map[j];
-				mem->map[j] = tmp;
-			}
-		}
-	}
-
-	/* Merge adjacent entries */
-	for(i = 0; (i + 1) < entries; i++) {
-		uint64_t start, end, nstart, nend;
-		if (mem->map[i].type != mem->map[i + 1].type) {
-			continue;
-		}
-		start  = unpack_lb64(mem->map[i].start);
-		end    = start + unpack_lb64(mem->map[i].size);
-		nstart = unpack_lb64(mem->map[i + 1].start);
-		nend   = nstart + unpack_lb64(mem->map[i + 1].size);
-		if ((start <= nstart) && (end > nstart)) {
-			if (start > nstart) {
-				start = nstart;
-			}
-			if (end < nend) {
-				end = nend;
-			}
-			/* Record the new region size */
-			mem->map[i].start = pack_lb64(start);
-			mem->map[i].size  = pack_lb64(end - start);
-
-			/* Delete the entry I have merged with */
-			memmove(&mem->map[i + 1], &mem->map[i + 2], 
-				((entries - i - 2) * sizeof(mem->map[0])));
-			mem->size -= sizeof(mem->map[0]);
-			entries -= 1;
-			/* See if I can merge with the next entry as well */
-			i -= 1; 
-		}
-	}
-}
-
-static void lb_remove_memory_range(struct lb_memory *mem, 
-	uint64_t start, uint64_t size)
-{
-	uint64_t end;
-	int entries;
-	int i;
-
-	end = start + size;
-	entries = (mem->size - sizeof(*mem))/sizeof(mem->map[0]);
-
-	/* Remove a reserved area from the memory map */
-	for(i = 0; i < entries; i++) {
-		uint64_t map_start = unpack_lb64(mem->map[i].start);
-		uint64_t map_end   = map_start + unpack_lb64(mem->map[i].size);
-		if ((start <= map_start) && (end >= map_end)) {
-			/* Remove the completely covered range */
-			memmove(&mem->map[i], &mem->map[i + 1], 
-				((entries - i - 1) * sizeof(mem->map[0])));
-			mem->size -= sizeof(mem->map[0]);
-			entries -= 1;
-			/* Since the index will disappear revisit what will appear here */
-			i -= 1; 
-		}
-		else if ((start > map_start) && (end < map_end)) {
-			/* Split the memory range */
-			memmove(&mem->map[i + 1], &mem->map[i], 
-				((entries - i) * sizeof(mem->map[0])));
-			mem->size += sizeof(mem->map[0]);
-			entries += 1;
-			/* Update the first map entry */
-			mem->map[i].size = pack_lb64(start - map_start);
-			/* Update the second map entry */
-			mem->map[i + 1].start = pack_lb64(end);
-			mem->map[i + 1].size  = pack_lb64(map_end - end);
-			/* Don't bother with this map entry again */
-			i += 1;
-		}
-		else if ((start <= map_start) && (end > map_start)) {
-			/* Shrink the start of the memory range */
-			mem->map[i].start = pack_lb64(end);
-			mem->map[i].size  = pack_lb64(map_end - end);
-		}
-		else if ((start < map_end) && (start > map_start)) {
-			/* Shrink the end of the memory range */
-			mem->map[i].size = pack_lb64(start - map_start);
-		}
-	}
-}
-
-static void lb_add_memory_range(struct lb_memory *mem,
-	uint32_t type, uint64_t start, uint64_t size)
-{
-	lb_remove_memory_range(mem, start, size);
-	lb_memory_range(mem, type, start, size);
-	lb_cleanup_memory_ranges(mem);
-}
-
-/* Routines to extract part so the coreboot table or 
- * information from the coreboot table after we have written it.
- * Currently get_lb_mem relies on a global we can change the
- * implementaiton.
- */
-static struct lb_memory *mem_ranges = 0;
-struct lb_memory *get_lb_mem(void)
-{
-	return mem_ranges;
-}
-
-static void build_lb_mem_range(void *gp, struct device *dev, struct resource *res)
-{
-	struct lb_memory *mem = gp;
-	lb_memory_range(mem, LB_MEM_RAM, res->base, res->size);
-}
-
-static struct lb_memory *build_lb_mem(struct lb_header *head)
-{
-	struct lb_memory *mem;
-
-	/* Record where the lb memory ranges will live */
-	mem = lb_memory(head);
-	mem_ranges = mem;
-
-	/* Build the raw table of memory */
-	search_global_resources(
-		IORESOURCE_MEM | IORESOURCE_CACHEABLE, IORESOURCE_MEM | IORESOURCE_CACHEABLE,
-		build_lb_mem_range, mem);
-	lb_cleanup_memory_ranges(mem);
-	return mem;
-}
-
-unsigned long write_coreboot_table( 
-	unsigned long low_table_start, unsigned long low_table_end,
-	unsigned long rom_table_start, unsigned long rom_table_end)
-{
-	unsigned long table_size;
-	struct lb_header *head;
-	struct lb_memory *mem;
-
-	head = lb_table_init(low_table_end);
-	low_table_end = (unsigned long)head;
-	if (HAVE_OPTION_TABLE == 1) {
-		struct lb_record *rec_dest, *rec_src;
-		/* Write the option config table... */
-		rec_dest = lb_new_record(head);
-		rec_src = (struct lb_record *)(void *)&option_table;
-		memcpy(rec_dest,  rec_src, rec_src->size);
-	}
-	/* Record where RAM is located */
-	mem = build_lb_mem(head);
-	
-	/* Find the current mptable size */
-	table_size = (low_table_end - low_table_start);
-
-	/* Record the mptable and the the lb_table (This will be adjusted later) */
-	lb_add_memory_range(mem, LB_MEM_TABLE, 
-		low_table_start, table_size);
-
-	/* Record the pirq table */
-	lb_add_memory_range(mem, LB_MEM_TABLE, 
-		rom_table_start, (rom_table_end - rom_table_start));
-
-	/* Note:
-	 * I assume that there is always memory at immediately after
-	 * the low_table_end.  This means that after I setup the coreboot table.
-	 * I can trivially fixup the reserved memory ranges to hold the correct
-	 * size of the coreboot table.
-	 */
-
-	/* Record our motheboard */
-	lb_mainboard(head);
-	/* Record our various random string information */
-	lb_strings(head);
-
-	low_table_end = lb_table_fini(head);
-
-	/* Remember where my valid memory ranges are */
-	return low_table_end;
-}

Deleted: trunk/coreboot-v2/src/arch/ppc/boot/linuxbios_table.h
===================================================================
--- trunk/coreboot-v2/src/arch/ppc/boot/linuxbios_table.h	2008-01-18 15:34:24 UTC (rev 3056)
+++ trunk/coreboot-v2/src/arch/ppc/boot/linuxbios_table.h	2008-01-18 16:16:45 UTC (rev 3057)
@@ -1,31 +0,0 @@
-#ifndef COREBOOT_TABLE_H
-#define COREBOOT_TABLE_H
-
-#include <boot/linuxbios_tables.h>
-
-struct mem_range;
-
-/* This file holds function prototypes for building the coreboot table. */
-unsigned long write_coreboot_table(
-	unsigned long low_table_start, unsigned long low_table_end,
-	unsigned long rom_table_start, unsigned long rom_table_end);
-
-struct lb_header *lb_table_init(unsigned long addr);
-struct lb_record *lb_first_record(struct lb_header *header);
-struct lb_record *lb_last_record(struct lb_header *header);
-struct lb_record *lb_next_record(struct lb_record *rec);
-struct lb_record *lb_new_record(struct lb_header *header);
-struct lb_memory *lb_memory(struct lb_header *header);
-void lb_memory_range(struct lb_memory *mem, 
-	uint32_t type, uint64_t startk, uint64_t sizek);
-struct lb_mainboard *lb_mainboard(struct lb_header *header);
-unsigned long lb_table_fini(struct lb_header *header);
-
-/* Routines to extract part so the coreboot table or information
- * from the coreboot table.
- */
-struct lb_memory *get_lb_mem(void);
-
-extern struct cmos_option_table option_table;
-
-#endif /* COREBOOT_TABLE_H */

Modified: trunk/coreboot-v2/src/arch/ppc/boot/tables.c
===================================================================
--- trunk/coreboot-v2/src/arch/ppc/boot/tables.c	2008-01-18 15:34:24 UTC (rev 3056)
+++ trunk/coreboot-v2/src/arch/ppc/boot/tables.c	2008-01-18 16:16:45 UTC (rev 3057)
@@ -1,8 +1,8 @@
 #include <console/console.h>
 #include <cpu/cpu.h>
 #include <boot/tables.h>
-#include <boot/linuxbios_tables.h>
-#include "linuxbios_table.h"
+#include <boot/coreboot_tables.h>
+#include "coreboot_table.h"
 
 struct lb_memory *
 write_tables(void)

Modified: trunk/coreboot-v2/src/boot/elfboot.c
===================================================================
--- trunk/coreboot-v2/src/boot/elfboot.c	2008-01-18 15:34:24 UTC (rev 3056)
+++ trunk/coreboot-v2/src/boot/elfboot.c	2008-01-18 16:16:45 UTC (rev 3057)
@@ -2,7 +2,7 @@
 #include <part/fallback_boot.h>
 #include <boot/elf.h>
 #include <boot/elf_boot.h>
-#include <boot/linuxbios_tables.h>
+#include <boot/coreboot_tables.h>
 #include <ip_checksum.h>
 #include <stream/read_bytes.h>
 #include <stdint.h>

Modified: trunk/coreboot-v2/src/config/Config.lb
===================================================================
--- trunk/coreboot-v2/src/config/Config.lb	2008-01-18 15:34:24 UTC (rev 3056)
+++ trunk/coreboot-v2/src/config/Config.lb	2008-01-18 16:16:45 UTC (rev 3057)
@@ -44,8 +44,8 @@
 end
 
 makerule coreboot_ram
-	depends	"coreboot_ram.o $(TOP)/src/config/linuxbios_ram.ld ldoptions" 
-	action	"$(CC) -nostdlib -nostartfiles -static -o $@ -T $(TOP)/src/config/linuxbios_ram.ld coreboot_ram.o"
+	depends	"coreboot_ram.o $(TOP)/src/config/coreboot_ram.ld ldoptions" 
+	action	"$(CC) -nostdlib -nostartfiles -static -o $@ -T $(TOP)/src/config/coreboot_ram.ld coreboot_ram.o"
 	action 	"$(CROSS_COMPILE)nm -n coreboot_ram | sort > coreboot_ram.map"
 end
 
@@ -87,8 +87,8 @@
 	end
 
 	makerule coreboot_apc
-		depends "coreboot_apc.o $(TOP)/src/config/linuxbios_apc.ld ldoptions"
-		action  "$(CC) -nostdlib -nostartfiles -static -o $@ -T $(TOP)/src/config/linuxbios_apc.ld coreboot_apc.o"
+		depends "coreboot_apc.o $(TOP)/src/config/coreboot_apc.ld ldoptions"
+		action  "$(CC) -nostdlib -nostartfiles -static -o $@ -T $(TOP)/src/config/coreboot_apc.ld coreboot_apc.o"
 		action  "$(CROSS_COMPILE)nm -n coreboot_apc | sort > coreboot_apc.map"
 	end
 
@@ -174,7 +174,7 @@
 end
 
 makerule build_opt_tbl   
-	depends	"$(TOP)/util/options/build_opt_tbl.c $(TOP)/src/include/pc80/mc146818rtc.h $(TOP)/src/include/boot/linuxbios_tables.h Makefile.settings Makefile"
+	depends	"$(TOP)/util/options/build_opt_tbl.c $(TOP)/src/include/pc80/mc146818rtc.h $(TOP)/src/include/boot/coreboot_tables.h Makefile.settings Makefile"
 	action	"$(HOSTCC) $(HOSTCFLAGS) $(CPUFLAGS) $< -o $@" 
 end
 

Copied: trunk/coreboot-v2/src/config/coreboot_apc.ld (from rev 3053, trunk/coreboot-v2/src/config/linuxbios_apc.ld)
===================================================================
--- trunk/coreboot-v2/src/config/coreboot_apc.ld	                        (rev 0)
+++ trunk/coreboot-v2/src/config/coreboot_apc.ld	2008-01-18 16:16:45 UTC (rev 3057)
@@ -0,0 +1,100 @@
+/*
+ *	Memory map:
+ *
+ *	DCACHE_RAM_BASE		
+ *				: data segment
+ *				: bss segment
+ *				: heap
+ *				: stack
+ */
+/*
+ * Bootstrap code for the STPC Consumer
+ * Copyright (c) 1999 by Net Insight AB. All Rights Reserved.
+ */
+
+/*
+ *	Written by Johan Rydberg, based on work by Daniel Kahlin.
+ *      Rewritten by Eric Biederman
+ *  2005.12 yhlu add coreboot_ram cross the vga font buffer handling
+ *  2006.05 yhlu tailed it to use it for AP code in cache
+ */
+/*
+ *	We use ELF as output format. So that we can
+ *	debug the code in some form. 
+ */
+INCLUDE ldoptions
+
+ENTRY(_start)
+
+SECTIONS
+{
+	. = DCACHE_RAM_BASE;
+	/*
+	 * First we place the code and read only data (typically const declared).
+	 * This get placed in rom.
+	 */
+	.text : {
+		_text = .;
+		*(.text);
+		*(.text.*);
+		. = ALIGN(16);
+		_etext = .;
+	}
+	.rodata : {
+		_rodata = .;
+		. = ALIGN(4);
+		*(.rodata)
+		*(.rodata.*)
+		 . = ALIGN(4);
+		_erodata = .;
+	}	
+	/*
+	 * After the code we place initialized data (typically initialized
+	 * global variables). This gets copied into ram by startup code.
+	 * __data_start and __data_end shows where in ram this should be placed,
+	 * whereas __data_loadstart and __data_loadend shows where in rom to
+	 * copy from.
+	 */
+	.data : {
+		_data = .;
+		*(.data)
+		_edata = .;
+	}
+	/*
+	 * bss does not contain data, it is just a space that should be zero
+	 * initialized on startup. (typically uninitialized global variables)
+	 * crt0.S fills between _bss and _ebss with zeroes.
+	 */
+	_bss = .;
+	.bss . : {
+		*(.bss)
+		*(.sbss)
+		*(COMMON)
+	}
+	_ebss = .;
+	_end = .;
+	. = ALIGN(0x1000);
+	_stack = .;
+	.stack . : {
+		. = 0x4000;
+	}
+	_estack = .;
+        _heap = .;
+        .heap . : {
+                . = ALIGN(4);
+        }
+        _eheap = .;
+	/* The ram segment
+ 	 * This is all address of the memory resident copy of coreboot.
+	 */
+	_ram_seg = _text; 
+	_eram_seg = _eheap;
+
+	_bogus = ASSERT( ( _eram_seg <= ((DCACHE_RAM_BASE + DCACHE_RAM_SIZE - DCACHE_RAM_GLOBAL_VAR_SIZE))) , "coreboot_apc is too big");
+
+	/DISCARD/ : {
+		*(.comment)
+		*(.note)
+		*(.note.*)
+	}
+}

Copied: trunk/coreboot-v2/src/config/coreboot_ram.ld (from rev 3053, trunk/coreboot-v2/src/config/linuxbios_ram.ld)
===================================================================
--- trunk/coreboot-v2/src/config/coreboot_ram.ld	                        (rev 0)
+++ trunk/coreboot-v2/src/config/coreboot_ram.ld	2008-01-18 16:16:45 UTC (rev 3057)
@@ -0,0 +1,121 @@
+/*
+ *	Memory map:
+ *
+ *	_RAMBASE		
+ *				: data segment
+ *				: bss segment
+ *				: heap
+ *				: stack
+ */
+/*
+ * Bootstrap code for the STPC Consumer
+ * Copyright (c) 1999 by Net Insight AB. All Rights Reserved.
+ */
+
+/*
+ *	Written by Johan Rydberg, based on work by Daniel Kahlin.
+ *      Rewritten by Eric Biederman
+ *  2005.12 yhlu add coreboot_ram cross the vga font buffer handling
+ */
+/*
+ *	We use ELF as output format. So that we can
+ *	debug the code in some form. 
+ */
+INCLUDE ldoptions
+
+ENTRY(_start)
+
+SECTIONS
+{
+	. = _RAMBASE;
+	/*
+	 * First we place the code and read only data (typically const declared).
+	 * This get placed in rom.
+	 */
+	.text : {
+		_text = .;
+		*(.text);
+		*(.text.*);
+		. = ALIGN(16);
+		_etext = .;
+	}
+	.rodata : {
+		_rodata = .;
+		. = ALIGN(4);
+		console_drivers = .;
+		*(.rodata.console_drivers)
+		econsole_drivers = . ;
+		. = ALIGN(4);
+		pci_drivers = . ;
+		*(.rodata.pci_driver)
+		epci_drivers = . ;
+		cpu_drivers = . ;
+		*(.rodata.cpu_driver)
+		ecpu_drivers = . ;
+		*(.rodata)
+		*(.rodata.*)
+		/*
+		 * kevinh/Ispiri - Added an align, because the objcopy tool
+		 * incorrectly converts sections that are not long word aligned.
+		 * This breaks the coreboot.strip target.
+		 */
+		 . = ALIGN(4);
+
+		_erodata = .;
+	}	
+	/*
+	 * After the code we place initialized data (typically initialized
+	 * global variables). This gets copied into ram by startup code.
+	 * __data_start and __data_end shows where in ram this should be placed,
+	 * whereas __data_loadstart and __data_loadend shows where in rom to
+	 * copy from.
+	 */
+	.data : {
+		_data = .;
+		*(.data)
+		_edata = .;
+	}
+	/*
+	 * bss does not contain data, it is just a space that should be zero
+	 * initialized on startup. (typically uninitialized global variables)
+	 * crt0.S fills between _bss and _ebss with zeroes.
+	 */
+	_bss = .;
+	.bss . : {
+		*(.bss)
+		*(.sbss)
+		*(COMMON)
+	}
+	_ebss = .;
+	_end = .;
+	. = ALIGN(STACK_SIZE);
+	_stack = .;
+	.stack . : {
+		/* Reserve a stack for each possible cpu */
+		/* the stack for ap will be put after pgtbl in 1M to CONFIG_LB_MEM_TOPK range when VGA and ROM_RUN and CONFIG_LB_MEM_TOPK>1024*/
+		. = ((CONFIG_CONSOLE_VGA || CONFIG_PCI_ROM_RUN)&&(_RAMBASE<0x100000)&&(CONFIG_LB_MEM_TOPK>(0x100000>>10)) ) ? STACK_SIZE : (CONFIG_MAX_CPUS*STACK_SIZE);
+	}
+	_estack = .;
+        _heap = .;
+        .heap . : {
+                /* Reserve 256K for the heap */
+                . = HEAP_SIZE ;
+                . = ALIGN(4);
+        }
+        _eheap = .;
+	/* The ram segment
+ 	 * This is all address of the memory resident copy of coreboot.
+	 */
+	_ram_seg = _text; 
+	_eram_seg = _eheap;
+
+	_bogus = ASSERT( ( (_eram_seg>>10) < (CONFIG_LB_MEM_TOPK)) , "please increase CONFIG_LB_MEM_TOPK");
+
+        _bogus = ASSERT( !((CONFIG_CONSOLE_VGA || CONFIG_PCI_ROM_RUN) && ((_ram_seg<0xa0000) && (_eram_seg>0xa0000))) , "please increase CONFIG_LB_MEM_TOPK and if still fail, try to set _RAMBASE more than 1M");
+
+	/DISCARD/ : {
+		*(.comment)
+		*(.note)
+		*(.note.*)
+	}
+}

Deleted: trunk/coreboot-v2/src/config/linuxbios_apc.ld
===================================================================
--- trunk/coreboot-v2/src/config/linuxbios_apc.ld	2008-01-18 15:34:24 UTC (rev 3056)
+++ trunk/coreboot-v2/src/config/linuxbios_apc.ld	2008-01-18 16:16:45 UTC (rev 3057)
@@ -1,100 +0,0 @@
-/*
- *	Memory map:
- *
- *	DCACHE_RAM_BASE		
- *				: data segment
- *				: bss segment
- *				: heap
- *				: stack
- */
-/*
- * Bootstrap code for the STPC Consumer
- * Copyright (c) 1999 by Net Insight AB. All Rights Reserved.
- */
-
-/*
- *	Written by Johan Rydberg, based on work by Daniel Kahlin.
- *      Rewritten by Eric Biederman
- *  2005.12 yhlu add coreboot_ram cross the vga font buffer handling
- *  2006.05 yhlu tailed it to use it for AP code in cache
- */
-/*
- *	We use ELF as output format. So that we can
- *	debug the code in some form. 
- */
-INCLUDE ldoptions
-
-ENTRY(_start)
-
-SECTIONS
-{
-	. = DCACHE_RAM_BASE;
-	/*
-	 * First we place the code and read only data (typically const declared).
-	 * This get placed in rom.
-	 */
-	.text : {
-		_text = .;
-		*(.text);
-		*(.text.*);
-		. = ALIGN(16);
-		_etext = .;
-	}
-	.rodata : {
-		_rodata = .;
-		. = ALIGN(4);
-		*(.rodata)
-		*(.rodata.*)
-		 . = ALIGN(4);
-		_erodata = .;
-	}	
-	/*
-	 * After the code we place initialized data (typically initialized
-	 * global variables). This gets copied into ram by startup code.
-	 * __data_start and __data_end shows where in ram this should be placed,
-	 * whereas __data_loadstart and __data_loadend shows where in rom to
-	 * copy from.
-	 */
-	.data : {
-		_data = .;
-		*(.data)
-		_edata = .;
-	}
-	/*
-	 * bss does not contain data, it is just a space that should be zero
-	 * initialized on startup. (typically uninitialized global variables)
-	 * crt0.S fills between _bss and _ebss with zeroes.
-	 */
-	_bss = .;
-	.bss . : {
-		*(.bss)
-		*(.sbss)
-		*(COMMON)
-	}
-	_ebss = .;
-	_end = .;
-	. = ALIGN(0x1000);
-	_stack = .;
-	.stack . : {
-		. = 0x4000;
-	}
-	_estack = .;
-        _heap = .;
-        .heap . : {
-                . = ALIGN(4);
-        }
-        _eheap = .;
-	/* The ram segment
- 	 * This is all address of the memory resident copy of coreboot.
-	 */
-	_ram_seg = _text; 
-	_eram_seg = _eheap;
-
-	_bogus = ASSERT( ( _eram_seg <= ((DCACHE_RAM_BASE + DCACHE_RAM_SIZE - DCACHE_RAM_GLOBAL_VAR_SIZE))) , "coreboot_apc is too big");
-
-	/DISCARD/ : {
-		*(.comment)
-		*(.note)
-		*(.note.*)
-	}
-}

Deleted: trunk/coreboot-v2/src/config/linuxbios_ram.ld
===================================================================
--- trunk/coreboot-v2/src/config/linuxbios_ram.ld	2008-01-18 15:34:24 UTC (rev 3056)
+++ trunk/coreboot-v2/src/config/linuxbios_ram.ld	2008-01-18 16:16:45 UTC (rev 3057)
@@ -1,121 +0,0 @@
-/*
- *	Memory map:
- *
- *	_RAMBASE		
- *				: data segment
- *				: bss segment
- *				: heap
- *				: stack
- */
-/*
- * Bootstrap code for the STPC Consumer
- * Copyright (c) 1999 by Net Insight AB. All Rights Reserved.
- */
-
-/*
- *	Written by Johan Rydberg, based on work by Daniel Kahlin.
- *      Rewritten by Eric Biederman
- *  2005.12 yhlu add coreboot_ram cross the vga font buffer handling
- */
-/*
- *	We use ELF as output format. So that we can
- *	debug the code in some form. 
- */
-INCLUDE ldoptions
-
-ENTRY(_start)
-
-SECTIONS
-{
-	. = _RAMBASE;
-	/*
-	 * First we place the code and read only data (typically const declared).
-	 * This get placed in rom.
-	 */
-	.text : {
-		_text = .;
-		*(.text);
-		*(.text.*);
-		. = ALIGN(16);
-		_etext = .;
-	}
-	.rodata : {
-		_rodata = .;
-		. = ALIGN(4);
-		console_drivers = .;
-		*(.rodata.console_drivers)
-		econsole_drivers = . ;
-		. = ALIGN(4);
-		pci_drivers = . ;
-		*(.rodata.pci_driver)
-		epci_drivers = . ;
-		cpu_drivers = . ;
-		*(.rodata.cpu_driver)
-		ecpu_drivers = . ;
-		*(.rodata)
-		*(.rodata.*)
-		/*
-		 * kevinh/Ispiri - Added an align, because the objcopy tool
-		 * incorrectly converts sections that are not long word aligned.
-		 * This breaks the coreboot.strip target.
-		 */
-		 . = ALIGN(4);
-
-		_erodata = .;
-	}	
-	/*
-	 * After the code we place initialized data (typically initialized
-	 * global variables). This gets copied into ram by startup code.
-	 * __data_start and __data_end shows where in ram this should be placed,
-	 * whereas __data_loadstart and __data_loadend shows where in rom to
-	 * copy from.
-	 */
-	.data : {
-		_data = .;
-		*(.data)
-		_edata = .;
-	}
-	/*
-	 * bss does not contain data, it is just a space that should be zero
-	 * initialized on startup. (typically uninitialized global variables)
-	 * crt0.S fills between _bss and _ebss with zeroes.
-	 */
-	_bss = .;
-	.bss . : {
-		*(.bss)
-		*(.sbss)
-		*(COMMON)
-	}
-	_ebss = .;
-	_end = .;
-	. = ALIGN(STACK_SIZE);
-	_stack = .;
-	.stack . : {
-		/* Reserve a stack for each possible cpu */
-		/* the stack for ap will be put after pgtbl in 1M to CONFIG_LB_MEM_TOPK range when VGA and ROM_RUN and CONFIG_LB_MEM_TOPK>1024*/
-		. = ((CONFIG_CONSOLE_VGA || CONFIG_PCI_ROM_RUN)&&(_RAMBASE<0x100000)&&(CONFIG_LB_MEM_TOPK>(0x100000>>10)) ) ? STACK_SIZE : (CONFIG_MAX_CPUS*STACK_SIZE);
-	}
-	_estack = .;
-        _heap = .;
-        .heap . : {
-                /* Reserve 256K for the heap */
-                . = HEAP_SIZE ;
-                . = ALIGN(4);
-        }
-        _eheap = .;
-	/* The ram segment
- 	 * This is all address of the memory resident copy of coreboot.
-	 */
-	_ram_seg = _text; 
-	_eram_seg = _eheap;
-
-	_bogus = ASSERT( ( (_eram_seg>>10) < (CONFIG_LB_MEM_TOPK)) , "please increase CONFIG_LB_MEM_TOPK");
-
-        _bogus = ASSERT( !((CONFIG_CONSOLE_VGA || CONFIG_PCI_ROM_RUN) && ((_ram_seg<0xa0000) && (_eram_seg>0xa0000))) , "please increase CONFIG_LB_MEM_TOPK and if still fail, try to set _RAMBASE more than 1M");
-
-	/DISCARD/ : {
-		*(.comment)
-		*(.note)
-		*(.note.*)
-	}
-}

Copied: trunk/coreboot-v2/src/include/boot/coreboot_tables.h (from rev 3053, trunk/coreboot-v2/src/include/boot/linuxbios_tables.h)
===================================================================
--- trunk/coreboot-v2/src/include/boot/coreboot_tables.h	                        (rev 0)
+++ trunk/coreboot-v2/src/include/boot/coreboot_tables.h	2008-01-18 16:16:45 UTC (rev 3057)
@@ -0,0 +1,216 @@
+#ifndef COREBOOT_TABLES_H
+#define COREBOOT_TABLES_H
+
+#include <stdint.h>
+
+/* The coreboot table information is for conveying information
+ * from the firmware to the loaded OS image.  Primarily this
+ * is expected to be information that cannot be discovered by
+ * other means, such as quering the hardware directly.
+ *
+ * All of the information should be Position Independent Data.  
+ * That is it should be safe to relocated any of the information
+ * without it's meaning/correctnes changing.   For table that
+ * can reasonably be used on multiple architectures the data
+ * size should be fixed.  This should ease the transition between
+ * 32 bit and 64 bit architectures etc.
+ *
+ * The completeness test for the information in this table is:
+ * - Can all of the hardware be detected?
+ * - Are the per motherboard constants available?
+ * - Is there enough to allow a kernel to run that was written before
+ *   a particular motherboard is constructed? (Assuming the kernel
+ *   has drivers for all of the hardware but it does not have
+ *   assumptions on how the hardware is connected together).
+ *
+ * With this test it should be straight forward to determine if a
+ * table entry is required or not.  This should remove much of the
+ * long term compatibility burden as table entries which are
+ * irrelevant or have been replaced by better alternatives may be
+ * dropped.  Of course it is polite and expidite to include extra
+ * table entries and be backwards compatible, but it is not required.
+ */
+
+/* Since coreboot is usually compiled 32bit, gcc will align 64bit 
+ * types to 32bit boundaries. If the coreboot table is dumped on a 
+ * 64bit system, a uint64_t would be aligned to 64bit boundaries, 
+ * breaking the table format.
+ *
+ * lb_uint64 will keep 64bit coreboot table values aligned to 32bit
+ * to ensure compatibility. They can be accessed with the two functions
+ * below: unpack_lb64() and pack_lb64()
+ *
+ * See also: util/lbtdump/lbtdump.c
+ */
+
+struct lb_uint64 {
+	uint32_t lo;
+	uint32_t hi;
+};
+
+static inline uint64_t unpack_lb64(struct lb_uint64 value)
+{
+        uint64_t result;
+        result = value.hi;
+        result = (result << 32) + value.lo;
+        return result;
+}
+
+static inline struct lb_uint64 pack_lb64(uint64_t value)
+{
+        struct lb_uint64 result;
+        result.lo = (value >> 0) & 0xffffffff;
+        result.hi = (value >> 32) & 0xffffffff;
+        return result;
+}
+
+
+
+struct lb_header
+{
+	uint8_t  signature[4]; /* LBIO */
+	uint32_t header_bytes;
+	uint32_t header_checksum;
+	uint32_t table_bytes;
+	uint32_t table_checksum;
+	uint32_t table_entries;
+};
+
+/* Every entry in the boot enviroment list will correspond to a boot
+ * info record.  Encoding both type and size.  The type is obviously
+ * so you can tell what it is.  The size allows you to skip that
+ * boot enviroment record if you don't know what it easy.  This allows
+ * forward compatibility with records not yet defined.
+ */
+struct lb_record {
+	uint32_t tag;		/* tag ID */
+	uint32_t size;		/* size of record (in bytes) */
+};
+
+#define LB_TAG_UNUSED	0x0000
+
+#define LB_TAG_MEMORY	0x0001
+
+struct lb_memory_range {
+	struct lb_uint64 start;
+	struct lb_uint64 size;
+	uint32_t type;
+#define LB_MEM_RAM       1	/* Memory anyone can use */
+#define LB_MEM_RESERVED  2	/* Don't use this memory region */
+#define LB_MEM_TABLE     16	/* Ram configuration tables are kept in */
+};
+
+struct lb_memory {
+	uint32_t tag;
+	uint32_t size;
+	struct lb_memory_range map[0];
+};
+
+#define LB_TAG_HWRPB	0x0002
+struct lb_hwrpb {
+	uint32_t tag;
+	uint32_t size;
+	uint64_t hwrpb;
+};
+
+#define LB_TAG_MAINBOARD	0x0003
+struct lb_mainboard {
+	uint32_t tag;
+	uint32_t size;
+	uint8_t  vendor_idx;
+	uint8_t  part_number_idx;
+	uint8_t  strings[0];
+};
+
+#define LB_TAG_VERSION		0x0004
+#define LB_TAG_EXTRA_VERSION	0x0005
+#define LB_TAG_BUILD		0x0006
+#define LB_TAG_COMPILE_TIME	0x0007
+#define LB_TAG_COMPILE_BY	0x0008
+#define LB_TAG_COMPILE_HOST	0x0009
+#define LB_TAG_COMPILE_DOMAIN	0x000a
+#define LB_TAG_COMPILER		0x000b
+#define LB_TAG_LINKER		0x000c
+#define LB_TAG_ASSEMBLER	0x000d
+struct lb_string {
+	uint32_t tag;
+	uint32_t size;
+	uint8_t  string[0];
+};
+
+/* The following structures are for the cmos definitions table */
+#define LB_TAG_CMOS_OPTION_TABLE 200
+/* cmos header record */
+struct cmos_option_table {
+	uint32_t tag;               /* CMOS definitions table type */
+	uint32_t size;               /* size of the entire table */
+	uint32_t header_length;      /* length of header */
+};
+
+/* cmos entry record
+        This record is variable length.  The name field may be
+        shorter than CMOS_MAX_NAME_LENGTH. The entry may start
+        anywhere in the byte, but can not span bytes unless it
+        starts at the beginning of the byte and the length is
+        fills complete bytes.
+*/
+#define LB_TAG_OPTION 201
+struct cmos_entries {
+	uint32_t tag;                /* entry type */
+	uint32_t size;               /* length of this record */
+	uint32_t bit;                /* starting bit from start of image */
+	uint32_t length;             /* length of field in bits */
+	uint32_t config;             /* e=enumeration, h=hex, r=reserved */
+	uint32_t config_id;          /* a number linking to an enumeration record */
+#define CMOS_MAX_NAME_LENGTH 32
+	uint8_t name[CMOS_MAX_NAME_LENGTH]; /* name of entry in ascii, 
+					       variable length int aligned */
+};
+
+
+/* cmos enumerations record
+        This record is variable length.  The text field may be
+        shorter than CMOS_MAX_TEXT_LENGTH.
+*/
+#define LB_TAG_OPTION_ENUM 202
+struct cmos_enums {
+	uint32_t tag;		     /* enumeration type */
+	uint32_t size; 		     /* length of this record */
+	uint32_t config_id;          /* a number identifying the config id */
+	uint32_t value;              /* the value associated with the text */
+#define CMOS_MAX_TEXT_LENGTH 32
+	uint8_t text[CMOS_MAX_TEXT_LENGTH]; /* enum description in ascii, 
+						variable length int aligned */
+};
+
+/* cmos defaults record
+        This record contains default settings for the cmos ram.
+*/
+#define LB_TAG_OPTION_DEFAULTS 203
+struct cmos_defaults {
+	uint32_t tag;                /* default type */
+	uint32_t size;               /* length of this record */
+	uint32_t name_length;        /* length of the following name field */
+	uint8_t name[CMOS_MAX_NAME_LENGTH]; /* name identifying the default */
+#define CMOS_IMAGE_BUFFER_SIZE 128
+	uint8_t default_set[CMOS_IMAGE_BUFFER_SIZE]; /* default settings */
+};
+
+#define LB_TAG_OPTION_CHECKSUM 204
+struct	cmos_checksum {
+	uint32_t tag;
+	uint32_t size;
+	/* In practice everything is byte aligned, but things are measured
+	 * in bits to be consistent.
+	 */
+	uint32_t range_start;	/* First bit that is checksummed (byte aligned) */
+	uint32_t range_end;	/* Last bit that is checksummed (byte aligned) */
+	uint32_t location;	/* First bit of the checksum (byte aligned) */
+	uint32_t type;		/* Checksum algorithm that is used */
+#define CHECKSUM_NONE	0
+#define CHECKSUM_PCBIOS	1
+};
+
+
+
+#endif /* COREBOOT_TABLES_H */

Deleted: trunk/coreboot-v2/src/include/boot/linuxbios_tables.h
===================================================================
--- trunk/coreboot-v2/src/include/boot/linuxbios_tables.h	2008-01-18 15:34:24 UTC (rev 3056)
+++ trunk/coreboot-v2/src/include/boot/linuxbios_tables.h	2008-01-18 16:16:45 UTC (rev 3057)
@@ -1,216 +0,0 @@
-#ifndef COREBOOT_TABLES_H
-#define COREBOOT_TABLES_H
-
-#include <stdint.h>
-
-/* The coreboot table information is for conveying information
- * from the firmware to the loaded OS image.  Primarily this
- * is expected to be information that cannot be discovered by
- * other means, such as quering the hardware directly.
- *
- * All of the information should be Position Independent Data.  
- * That is it should be safe to relocated any of the information
- * without it's meaning/correctnes changing.   For table that
- * can reasonably be used on multiple architectures the data
- * size should be fixed.  This should ease the transition between
- * 32 bit and 64 bit architectures etc.
- *
- * The completeness test for the information in this table is:
- * - Can all of the hardware be detected?
- * - Are the per motherboard constants available?
- * - Is there enough to allow a kernel to run that was written before
- *   a particular motherboard is constructed? (Assuming the kernel
- *   has drivers for all of the hardware but it does not have
- *   assumptions on how the hardware is connected together).
- *
- * With this test it should be straight forward to determine if a
- * table entry is required or not.  This should remove much of the
- * long term compatibility burden as table entries which are
- * irrelevant or have been replaced by better alternatives may be
- * dropped.  Of course it is polite and expidite to include extra
- * table entries and be backwards compatible, but it is not required.
- */
-
-/* Since coreboot is usually compiled 32bit, gcc will align 64bit 
- * types to 32bit boundaries. If the coreboot table is dumped on a 
- * 64bit system, a uint64_t would be aligned to 64bit boundaries, 
- * breaking the table format.
- *
- * lb_uint64 will keep 64bit coreboot table values aligned to 32bit
- * to ensure compatibility. They can be accessed with the two functions
- * below: unpack_lb64() and pack_lb64()
- *
- * See also: util/lbtdump/lbtdump.c
- */
-
-struct lb_uint64 {
-	uint32_t lo;
-	uint32_t hi;
-};
-
-static inline uint64_t unpack_lb64(struct lb_uint64 value)
-{
-        uint64_t result;
-        result = value.hi;
-        result = (result << 32) + value.lo;
-        return result;
-}
-
-static inline struct lb_uint64 pack_lb64(uint64_t value)
-{
-        struct lb_uint64 result;
-        result.lo = (value >> 0) & 0xffffffff;
-        result.hi = (value >> 32) & 0xffffffff;
-        return result;
-}
-
-
-
-struct lb_header
-{
-	uint8_t  signature[4]; /* LBIO */
-	uint32_t header_bytes;
-	uint32_t header_checksum;
-	uint32_t table_bytes;
-	uint32_t table_checksum;
-	uint32_t table_entries;
-};
-
-/* Every entry in the boot enviroment list will correspond to a boot
- * info record.  Encoding both type and size.  The type is obviously
- * so you can tell what it is.  The size allows you to skip that
- * boot enviroment record if you don't know what it easy.  This allows
- * forward compatibility with records not yet defined.
- */
-struct lb_record {
-	uint32_t tag;		/* tag ID */
-	uint32_t size;		/* size of record (in bytes) */
-};
-
-#define LB_TAG_UNUSED	0x0000
-
-#define LB_TAG_MEMORY	0x0001
-
-struct lb_memory_range {
-	struct lb_uint64 start;
-	struct lb_uint64 size;
-	uint32_t type;
-#define LB_MEM_RAM       1	/* Memory anyone can use */
-#define LB_MEM_RESERVED  2	/* Don't use this memory region */
-#define LB_MEM_TABLE     16	/* Ram configuration tables are kept in */
-};
-
-struct lb_memory {
-	uint32_t tag;
-	uint32_t size;
-	struct lb_memory_range map[0];
-};
-
-#define LB_TAG_HWRPB	0x0002
-struct lb_hwrpb {
-	uint32_t tag;
-	uint32_t size;
-	uint64_t hwrpb;
-};
-
-#define LB_TAG_MAINBOARD	0x0003
-struct lb_mainboard {
-	uint32_t tag;
-	uint32_t size;
-	uint8_t  vendor_idx;
-	uint8_t  part_number_idx;
-	uint8_t  strings[0];
-};
-
-#define LB_TAG_VERSION		0x0004
-#define LB_TAG_EXTRA_VERSION	0x0005
-#define LB_TAG_BUILD		0x0006
-#define LB_TAG_COMPILE_TIME	0x0007
-#define LB_TAG_COMPILE_BY	0x0008
-#define LB_TAG_COMPILE_HOST	0x0009
-#define LB_TAG_COMPILE_DOMAIN	0x000a
-#define LB_TAG_COMPILER		0x000b
-#define LB_TAG_LINKER		0x000c
-#define LB_TAG_ASSEMBLER	0x000d
-struct lb_string {
-	uint32_t tag;
-	uint32_t size;
-	uint8_t  string[0];
-};
-
-/* The following structures are for the cmos definitions table */
-#define LB_TAG_CMOS_OPTION_TABLE 200
-/* cmos header record */
-struct cmos_option_table {
-	uint32_t tag;               /* CMOS definitions table type */
-	uint32_t size;               /* size of the entire table */
-	uint32_t header_length;      /* length of header */
-};
-
-/* cmos entry record
-        This record is variable length.  The name field may be
-        shorter than CMOS_MAX_NAME_LENGTH. The entry may start
-        anywhere in the byte, but can not span bytes unless it
-        starts at the beginning of the byte and the length is
-        fills complete bytes.
-*/
-#define LB_TAG_OPTION 201
-struct cmos_entries {
-	uint32_t tag;                /* entry type */
-	uint32_t size;               /* length of this record */
-	uint32_t bit;                /* starting bit from start of image */
-	uint32_t length;             /* length of field in bits */
-	uint32_t config;             /* e=enumeration, h=hex, r=reserved */
-	uint32_t config_id;          /* a number linking to an enumeration record */
-#define CMOS_MAX_NAME_LENGTH 32
-	uint8_t name[CMOS_MAX_NAME_LENGTH]; /* name of entry in ascii, 
-					       variable length int aligned */
-};
-
-
-/* cmos enumerations record
-        This record is variable length.  The text field may be
-        shorter than CMOS_MAX_TEXT_LENGTH.
-*/
-#define LB_TAG_OPTION_ENUM 202
-struct cmos_enums {
-	uint32_t tag;		     /* enumeration type */
-	uint32_t size; 		     /* length of this record */
-	uint32_t config_id;          /* a number identifying the config id */
-	uint32_t value;              /* the value associated with the text */
-#define CMOS_MAX_TEXT_LENGTH 32
-	uint8_t text[CMOS_MAX_TEXT_LENGTH]; /* enum description in ascii, 
-						variable length int aligned */
-};
-
-/* cmos defaults record
-        This record contains default settings for the cmos ram.
-*/
-#define LB_TAG_OPTION_DEFAULTS 203
-struct cmos_defaults {
-	uint32_t tag;                /* default type */
-	uint32_t size;               /* length of this record */
-	uint32_t name_length;        /* length of the following name field */
-	uint8_t name[CMOS_MAX_NAME_LENGTH]; /* name identifying the default */
-#define CMOS_IMAGE_BUFFER_SIZE 128
-	uint8_t default_set[CMOS_IMAGE_BUFFER_SIZE]; /* default settings */
-};
-
-#define LB_TAG_OPTION_CHECKSUM 204
-struct	cmos_checksum {
-	uint32_t tag;
-	uint32_t size;
-	/* In practice everything is byte aligned, but things are measured
-	 * in bits to be consistent.
-	 */
-	uint32_t range_start;	/* First bit that is checksummed (byte aligned) */
-	uint32_t range_end;	/* Last bit that is checksummed (byte aligned) */
-	uint32_t location;	/* First bit of the checksum (byte aligned) */
-	uint32_t type;		/* Checksum algorithm that is used */
-#define CHECKSUM_NONE	0
-#define CHECKSUM_PCBIOS	1
-};
-
-
-
-#endif /* COREBOOT_TABLES_H */

Modified: trunk/coreboot-v2/src/include/boot/tables.h
===================================================================
--- trunk/coreboot-v2/src/include/boot/tables.h	2008-01-18 15:34:24 UTC (rev 3056)
+++ trunk/coreboot-v2/src/include/boot/tables.h	2008-01-18 16:16:45 UTC (rev 3057)
@@ -1,7 +1,7 @@
 #ifndef BOOT_TABLES_H
 #define BOOT_TABLES_H
 
-#include <boot/linuxbios_tables.h>
+#include <boot/coreboot_tables.h>
 
 struct lb_memory *write_tables(void);
 

Modified: trunk/coreboot-v2/src/pc80/mc146818rtc.c
===================================================================
--- trunk/coreboot-v2/src/pc80/mc146818rtc.c	2008-01-18 15:34:24 UTC (rev 3056)
+++ trunk/coreboot-v2/src/pc80/mc146818rtc.c	2008-01-18 16:16:45 UTC (rev 3057)
@@ -1,7 +1,7 @@
 #include <console/console.h>
 #include <arch/io.h>
 #include <pc80/mc146818rtc.h>
-#include <boot/linuxbios_tables.h>
+#include <boot/coreboot_tables.h>
 #include <string.h>
 
 #define CMOS_READ(addr) ({ \

Modified: trunk/coreboot-v2/util/lbtdump/lbtdump.c
===================================================================
--- trunk/coreboot-v2/util/lbtdump/lbtdump.c	2008-01-18 15:34:24 UTC (rev 3056)
+++ trunk/coreboot-v2/util/lbtdump/lbtdump.c	2008-01-18 16:16:45 UTC (rev 3057)
@@ -7,7 +7,7 @@
 #include <string.h>
 #include <errno.h>
 #include <sys/mman.h>
-#include "../../src/include/boot/linuxbios_tables.h"
+#include "../../src/include/boot/coreboot_tables.h"
 
 void print_lb_records(struct lb_record *rec, struct lb_record *last, unsigned long addr);
 

Modified: trunk/coreboot-v2/util/options/build_opt_tbl.c
===================================================================
--- trunk/coreboot-v2/util/options/build_opt_tbl.c	2008-01-18 15:34:24 UTC (rev 3056)
+++ trunk/coreboot-v2/util/options/build_opt_tbl.c	2008-01-18 16:16:45 UTC (rev 3057)
@@ -4,7 +4,7 @@
 #include <ctype.h>
 #include <errno.h>
 #include "../../src/include/pc80/mc146818rtc.h"
-#include "../../src/include/boot/linuxbios_tables.h"
+#include "../../src/include/boot/coreboot_tables.h"
 
 #define CMOS_IMAGE_BUFFER_SIZE 128
 #define INPUT_LINE_MAX 256





More information about the coreboot mailing list