Signed-Off-By: Patrick Georgi <patrick@georgi-clan.de>

Index: include/tables.h
===================================================================
--- include/tables.h	(revision 687)
+++ include/tables.h	(working copy)
@@ -175,6 +175,27 @@
 	u32 dev_root_ptr; /* Pointer to the root device */
 };
 
+#define LB_TAG_SERIAL		0x000f
+struct lb_serial {
+	u32 tag;
+	u32 size;
+	u16 ioport;
+};
+
+#define LB_TAG_CONSOLE		0x0010
+struct lb_console {
+	u32 tag;
+	u32 size;
+	u16 type;
+};
+
+#define LB_TAG_CONSOLE_SERIAL8250	0
+#define LB_TAG_CONSOLE_VGA		1
+#define LB_TAG_CONSOLE_BTEXT		2
+#define LB_TAG_CONSOLE_LOGBUF		3
+#define LB_TAG_CONSOLE_SROM		4
+#define LB_TAG_CONSOLE_EHCI		5
+
 /* The following structures are for the cmos definitions table */
 #define LB_TAG_CMOS_OPTION_TABLE 200
 /* cmos header record */
Index: arch/x86/coreboot_table.c
===================================================================
--- arch/x86/coreboot_table.c	(revision 687)
+++ arch/x86/coreboot_table.c	(working copy)
@@ -25,6 +25,7 @@
 #include <device/device.h>
 #include <tables.h>
 #include <mc146818rtc.h>
+#include <uart8250.h>
 #include <lib.h>
 //#include <cpu/cpu.h>
 //#include <pirq_routing.h>
@@ -98,6 +99,44 @@
 	return mem;
 }
 
+struct lb_serial *lb_serial(struct lb_header *header)
+{
+#if defined(TTYSx_BASE)
+	struct lb_record *rec;
+	struct lb_serial *serial;
+	rec = lb_new_record(header);
+	serial = (struct lb_serial *)rec;
+	serial->tag = LB_TAG_SERIAL;
+	serial->size = sizeof(*serial);
+	serial->ioport = TTYSx_BASE;
+	return serial;
+#else
+	return header;
+#endif
+}
+
+void add_console(struct lb_header *header, u16 consoletype)
+{
+	struct lb_record *rec;
+	struct lb_console *console;
+	rec = lb_new_record(header);
+	console = (struct lb_console *)lb_new_record(header);
+	console->tag = LB_TAG_CONSOLE;
+	console->size = sizeof(*console);
+	console->type = consoletype;
+}
+
+void lb_console(struct lb_header *header)
+{
+#ifdef CONFIG_CONSOLE_SERIAL
+	add_console(header, LB_TAG_CONSOLE_SERIAL8250);
+#endif
+/* FIXME when we have a proper vga console ourself */
+#ifdef CONFIG_PCI_OPTION_ROM_RUN
+	add_console(header, LB_TAG_CONSOLE_VGA);
+#endif
+}
+
 struct lb_mainboard *lb_mainboard(struct lb_header *header)
 {
 	struct lb_record *rec;
@@ -454,6 +493,12 @@
 	/* Record our motherboard */
 	lb_mainboard(head);
 
+	/* Record the serial port, if present */
+	lb_serial(head);
+
+	/* Record our console setup */
+	lb_console(head);
+
 	/* Record our various random string information */
 	lb_strings(head);
 
