patch to move coreboot table code into libpayload. Allows payloads using libpayload to access coreboot tables.
Signed-Off-By: Sean Nelson snelson@nmt.edu
---
patch for coreinfo, coming next message.
Sean Nelson schrieb:
patch to move coreboot table code into libpayload. Allows payloads using libpayload to access coreboot tables.
Signed-Off-By: Sean Nelson snelson@nmt.edu
What about licensing? libpayload is BSD-licensed, the cbtable code seems to be GPL.
Regards, Patrick Georgi
Patrick Georgi wrote:
Sean Nelson schrieb:
patch to move coreboot table code into libpayload. Allows payloads using libpayload to access coreboot tables.
Signed-Off-By: Sean Nelson snelson@nmt.edu
What about licensing? libpayload is BSD-licensed, the cbtable code seems to be GPL.
Regards, Patrick Georgi
Laziness got the best of me, this patch fixes the licensing.
Index: include/libpayload.h =================================================================== --- include/libpayload.h (revision 3501) +++ include/libpayload.h (working copy) @@ -37,6 +37,7 @@ #include <stdarg.h> #include <lar.h> #include <pci.h> +#include <coreboot_tables.h>
#define MIN(a,b) ((a) < (b) ? (a) : (b)) #define MAX(a,b) ((a) > (b) ? (a) : (b)) @@ -84,6 +85,19 @@ int tm_isdst; };
+/* drivers/cbtables.c */ +int coreboot_tables_init(void); +struct { + int mem_count; + int mem_actual; + struct cb_memory_range range[MAX_MEMORY_COUNT]; + char vendor[32]; + char part[32]; + char strings[10][64]; + struct cb_serial serial; + struct cb_console console; +} cb_info; + /* drivers/nvram.c */ u8 nvram_read(u8 addr); void nvram_write(u8 val, u8 addr); Index: include/coreboot_tables.h =================================================================== --- include/coreboot_tables.h (revision 3501) +++ include/coreboot_tables.h (working copy) @@ -32,6 +32,8 @@
#include <arch/types.h>
+#define MAX_MEMORY_COUNT 5 + struct cbuint64 { u32 lo; u32 hi; Index: drivers/cbtables.c =================================================================== --- drivers/cbtables.c (revision 0) +++ drivers/cbtables.c (revision 0) @@ -0,0 +1,161 @@ +/* + * This file is part of the libpayload project. + * + * Copyright (C) 2008 Sean Nelson snelson@nmt.edu + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include <libpayload.h> + +static void parse_memory(unsigned char *ptr) +{ + struct cb_memory *mem = (struct cb_memory *)ptr; + int max = (MEM_RANGE_COUNT(mem) > MAX_MEMORY_COUNT) + ? MAX_MEMORY_COUNT : MEM_RANGE_COUNT(mem); + int i; + + for (i = 0; i < max; i++) { + struct cb_memory_range *range = + (struct cb_memory_range *)MEM_RANGE_PTR(mem, i); + + memcpy(&cb_info.range[i], range, sizeof(*range)); + } + + cb_info.mem_count = max; + cb_info.mem_actual = MEM_RANGE_COUNT(mem); +} + +static void parse_mainboard(unsigned char *ptr) +{ + struct cb_mainboard *mb = (struct cb_mainboard *)ptr; + + strncpy(cb_info.vendor, (const char *)MB_VENDOR_STRING(mb), 31); + strncpy(cb_info.part, (const char *)MB_PART_STRING(mb), 31); +} + +static void parse_strings(unsigned char *ptr) +{ + struct cb_string *string = (struct cb_string *)ptr; + int index = string->tag - CB_TAG_VERSION; + + strncpy(cb_info.strings[index], (const char *)string->string, 63); + cb_info.strings[index][63] = 0; +} + +static void parse_serial(unsigned char *ptr) +{ + memcpy(&cb_info.serial, (struct cb_serial *)ptr, + sizeof(struct cb_serial)); +} + +static void parse_console(unsigned char *ptr) +{ + memcpy(&cb_info.console, (struct cb_console *)ptr, + sizeof(struct cb_console)); +} + +static int parse_header(void *addr, int len) +{ + struct cb_header *header; + unsigned char *ptr = (unsigned char *)addr; + int i; + + for (i = 0; i < len; i += 16, ptr += 16) { + header = (struct cb_header *)ptr; + + if (!strncmp((const char *)header->signature, "LBIO", 4)) + break; + } + + /* We walked the entire space and didn't find anything. */ + if (i >= len) + return -1; + + if (!header->table_bytes) + return 0; + + /* FIXME: Check the checksum. */ + + if (ipchksum((uint16_t *) header, sizeof(*header))) + return -1; + + if (ipchksum((uint16_t *) (ptr + sizeof(*header)), header->table_bytes) + != header->table_checksum) + return -1; + + /* Now, walk the tables. */ + ptr += header->header_bytes; + + for (i = 0; i < header->table_entries; i++) { + struct cb_record *rec = (struct cb_record *)ptr; + + switch (rec->tag) { + case CB_TAG_MEMORY: + parse_memory(ptr); + break; + case CB_TAG_MAINBOARD: + parse_mainboard(ptr); + break; + case CB_TAG_VERSION: + case CB_TAG_EXTRA_VERSION: + case CB_TAG_BUILD: + case CB_TAG_COMPILE_TIME: + case CB_TAG_COMPILE_BY: + case CB_TAG_COMPILE_HOST: + case CB_TAG_COMPILE_DOMAIN: + case CB_TAG_COMPILER: + case CB_TAG_LINKER: + case CB_TAG_ASSEMBLER: + parse_strings(ptr); + break; + case CB_TAG_SERIAL: + parse_serial(ptr); + break; + case CB_TAG_CONSOLE: + parse_console(ptr); + break; + default: + break; + } + + ptr += rec->size; + } + + return 1; +} + +int coreboot_tables_init(void) +{ + int tables_good = 0; + + int ret = parse_header((void *)0x00000, 0x1000); + + if (ret != 1) + ret = parse_header((void *)0xf0000, 0x1000); + + /* Return error if we couldn't find it at either address. */ + tables_good = (ret == 1) ? 0 : -1; + return tables_good; +} Index: drivers/Makefile.inc =================================================================== --- drivers/Makefile.inc (revision 3501) +++ drivers/Makefile.inc (working copy) @@ -29,6 +29,8 @@ ## SUCH DAMAGE. ##
+TARGETS-y += drivers/cbtables.o + TARGETS-$(CONFIG_PCI) += drivers/pci.o
TARGETS-$(CONFIG_SPEAKER) += drivers/speaker.o
On Mon, Aug 11, 2008 at 11:51:13PM -0700, Sean Nelson wrote:
Patrick Georgi wrote:
Sean Nelson schrieb:
patch to move coreboot table code into libpayload. Allows payloads using libpayload to access coreboot tables.
Signed-Off-By: Sean Nelson snelson@nmt.edu
What about licensing? libpayload is BSD-licensed, the cbtable code seems to be GPL.
Regards, Patrick Georgi
Laziness got the best of me, this patch fixes the licensing.
Index: drivers/cbtables.c
--- drivers/cbtables.c (revision 0) +++ drivers/cbtables.c (revision 0) @@ -0,0 +1,161 @@ +/*
- This file is part of the libpayload project.
- Copyright (C) 2008 Sean Nelson snelson@nmt.edu
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- The name of the author may not be used to endorse or promote products
- derived from this software without specific prior written permission.
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
- */
Eh, sorry, this won't work. The code was written by Jordan and is (C) AMD, you cannot just change the copyright owner or license at will. Jordan can do if he wants, though.
Uwe.
Uwe Hermann wrote:
On Mon, Aug 11, 2008 at 11:51:13PM -0700, Sean Nelson wrote:
Patrick Georgi wrote:
Sean Nelson schrieb:
patch to move coreboot table code into libpayload. Allows payloads using libpayload to access coreboot tables.
Signed-Off-By: Sean Nelson snelson@nmt.edu
What about licensing? libpayload is BSD-licensed, the cbtable code seems to be GPL.
Regards, Patrick Georgi
Laziness got the best of me, this patch fixes the licensing.
Index: drivers/cbtables.c
--- drivers/cbtables.c (revision 0) +++ drivers/cbtables.c (revision 0) @@ -0,0 +1,161 @@ +/*
- This file is part of the libpayload project.
- Copyright (C) 2008 Sean Nelson snelson@nmt.edu
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- The name of the author may not be used to endorse or promote products
- derived from this software without specific prior written permission.
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
- */
Eh, sorry, this won't work. The code was written by Jordan and is (C) AMD, you cannot just change the copyright owner or license at will. Jordan can do if he wants, though.
Does that also apply for cosmetic changes, btw?
Patrick Georgi wrote:
Sean Nelson schrieb:
patch to move coreboot table code into libpayload. Allows payloads using libpayload to access coreboot tables.
Signed-Off-By: Sean Nelson snelson@nmt.edu
What about licensing? libpayload is BSD-licensed, the cbtable code seems to be GPL.
Regards, Patrick Georgi
Laziness got the best of me, this patch fixes the licensing.
Index: include/libpayload.h =================================================================== --- include/libpayload.h (revision 3501) +++ include/libpayload.h (working copy) @@ -37,6 +37,7 @@ #include <stdarg.h> #include <lar.h> #include <pci.h> +#include <coreboot_tables.h>
#define MIN(a,b) ((a) < (b) ? (a) : (b)) #define MAX(a,b) ((a) > (b) ? (a) : (b)) @@ -84,6 +85,19 @@ int tm_isdst; };
+/* drivers/cbtables.c */ +int coreboot_tables_init(void); +struct { + int mem_count; + int mem_actual; + struct cb_memory_range range[MAX_MEMORY_COUNT]; + char vendor[32]; + char part[32]; + char strings[10][64]; + struct cb_serial serial; + struct cb_console console; +} cb_info; + /* drivers/nvram.c */ u8 nvram_read(u8 addr); void nvram_write(u8 val, u8 addr); Index: include/coreboot_tables.h =================================================================== --- include/coreboot_tables.h (revision 3501) +++ include/coreboot_tables.h (working copy) @@ -32,6 +32,8 @@
#include <arch/types.h>
+#define MAX_MEMORY_COUNT 5 + struct cbuint64 { u32 lo; u32 hi; Index: drivers/cbtables.c =================================================================== --- drivers/cbtables.c (revision 0) +++ drivers/cbtables.c (revision 0) @@ -0,0 +1,161 @@ +/* + * This file is part of the libpayload project. + * + * Copyright (C) 2008 Sean Nelson snelson@nmt.edu + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include <libpayload.h> + +static void parse_memory(unsigned char *ptr) +{ + struct cb_memory *mem = (struct cb_memory *)ptr; + int max = (MEM_RANGE_COUNT(mem) > MAX_MEMORY_COUNT) + ? MAX_MEMORY_COUNT : MEM_RANGE_COUNT(mem); + int i; + + for (i = 0; i < max; i++) { + struct cb_memory_range *range = + (struct cb_memory_range *)MEM_RANGE_PTR(mem, i); + + memcpy(&cb_info.range[i], range, sizeof(*range)); + } + + cb_info.mem_count = max; + cb_info.mem_actual = MEM_RANGE_COUNT(mem); +} + +static void parse_mainboard(unsigned char *ptr) +{ + struct cb_mainboard *mb = (struct cb_mainboard *)ptr; + + strncpy(cb_info.vendor, (const char *)MB_VENDOR_STRING(mb), 31); + strncpy(cb_info.part, (const char *)MB_PART_STRING(mb), 31); +} + +static void parse_strings(unsigned char *ptr) +{ + struct cb_string *string = (struct cb_string *)ptr; + int index = string->tag - CB_TAG_VERSION; + + strncpy(cb_info.strings[index], (const char *)string->string, 63); + cb_info.strings[index][63] = 0; +} + +static void parse_serial(unsigned char *ptr) +{ + memcpy(&cb_info.serial, (struct cb_serial *)ptr, + sizeof(struct cb_serial)); +} + +static void parse_console(unsigned char *ptr) +{ + memcpy(&cb_info.console, (struct cb_console *)ptr, + sizeof(struct cb_console)); +} + +static int parse_header(void *addr, int len) +{ + struct cb_header *header; + unsigned char *ptr = (unsigned char *)addr; + int i; + + for (i = 0; i < len; i += 16, ptr += 16) { + header = (struct cb_header *)ptr; + + if (!strncmp((const char *)header->signature, "LBIO", 4)) + break; + } + + /* We walked the entire space and didn't find anything. */ + if (i >= len) + return -1; + + if (!header->table_bytes) + return 0; + + /* FIXME: Check the checksum. */ + + if (ipchksum((uint16_t *) header, sizeof(*header))) + return -1; + + if (ipchksum((uint16_t *) (ptr + sizeof(*header)), header->table_bytes) + != header->table_checksum) + return -1; + + /* Now, walk the tables. */ + ptr += header->header_bytes; + + for (i = 0; i < header->table_entries; i++) { + struct cb_record *rec = (struct cb_record *)ptr; + + switch (rec->tag) { + case CB_TAG_MEMORY: + parse_memory(ptr); + break; + case CB_TAG_MAINBOARD: + parse_mainboard(ptr); + break; + case CB_TAG_VERSION: + case CB_TAG_EXTRA_VERSION: + case CB_TAG_BUILD: + case CB_TAG_COMPILE_TIME: + case CB_TAG_COMPILE_BY: + case CB_TAG_COMPILE_HOST: + case CB_TAG_COMPILE_DOMAIN: + case CB_TAG_COMPILER: + case CB_TAG_LINKER: + case CB_TAG_ASSEMBLER: + parse_strings(ptr); + break; + case CB_TAG_SERIAL: + parse_serial(ptr); + break; + case CB_TAG_CONSOLE: + parse_console(ptr); + break; + default: + break; + } + + ptr += rec->size; + } + + return 1; +} + +int coreboot_tables_init(void) +{ + int tables_good = 0; + + int ret = parse_header((void *)0x00000, 0x1000); + + if (ret != 1) + ret = parse_header((void *)0xf0000, 0x1000); + + /* Return error if we couldn't find it at either address. */ + tables_good = (ret == 1) ? 0 : -1; + return tables_good; +} Index: drivers/Makefile.inc =================================================================== --- drivers/Makefile.inc (revision 3501) +++ drivers/Makefile.inc (working copy) @@ -29,6 +29,8 @@ ## SUCH DAMAGE. ##
+TARGETS-y += drivers/cbtables.o + TARGETS-$(CONFIG_PCI) += drivers/pci.o
TARGETS-$(CONFIG_SPEAKER) += drivers/speaker.o
Sean Nelson wrote:
Patrick Georgi wrote:
Sean Nelson schrieb:
patch to move coreboot table code into libpayload. Allows payloads using libpayload to access coreboot tables.
Signed-Off-By: Sean Nelson snelson@nmt.edu
What about licensing? libpayload is BSD-licensed, the cbtable code seems to be GPL.
Regards, Patrick Georgi
Laziness got the best of me, this patch fixes the licensing.
Why did you add another probing function instead of extending i386/coreboot.c in libpayload?
Stefan Reinauer wrote:
Sean Nelson wrote:
Patrick Georgi wrote:
Sean Nelson schrieb:
patch to move coreboot table code into libpayload. Allows payloads using libpayload to access coreboot tables.
Signed-Off-By: Sean Nelson snelson@nmt.edu
What about licensing? libpayload is BSD-licensed, the cbtable code seems to be GPL.
Regards, Patrick Georgi
Laziness got the best of me, this patch fixes the licensing.
Why did you add another probing function instead of extending i386/coreboot.c in libpayload?
fixed...
Index: include/sysinfo.h =================================================================== --- include/sysinfo.h (revision 3501) +++ include/sysinfo.h (working copy) @@ -48,6 +48,9 @@ u32 cmos_range_start; u32 cmos_range_end; u32 cmos_checksum_location; + + unsigned char mb_vendor[32]; + unsigned char mb_part[32]; };
extern struct sysinfo_t lib_sysinfo; Index: i386/coreboot.c =================================================================== --- i386/coreboot.c (revision 3501) +++ i386/coreboot.c (working copy) @@ -90,6 +90,15 @@ } #endif
+static void cb_parse_mainboard(unsigned char *ptr, struct sysinfo_t *info) +{ + struct cb_mainboard *mb = (struct cb_mainboard *)ptr; + + strncpy(info->mb_vendor, (const char *)MB_VENDOR_STRING(mb), 31); + strncpy(info->mb_part, (const char *)MB_PART_STRING(mb), 31); +} + + static int cb_parse_header(void *addr, int len, struct sysinfo_t *info) { struct cb_header *header; @@ -128,6 +137,9 @@ case CB_TAG_MEMORY: cb_parse_memory(ptr, info); break; + case CB_TAG_MAINBOARD: + cb_parse_mainboard(ptr, info); + break; case CB_TAG_SERIAL: cb_parse_serial(ptr, info); break;
On 12/08/08 01:21 -0700, Sean Nelson wrote:
Stefan Reinauer wrote:
Sean Nelson wrote:
Patrick Georgi wrote:
Sean Nelson schrieb:
patch to move coreboot table code into libpayload. Allows payloads using libpayload to access coreboot tables.
Signed-Off-By: Sean Nelson snelson@nmt.edu
What about licensing? libpayload is BSD-licensed, the cbtable code seems to be GPL.
Regards, Patrick Georgi
Laziness got the best of me, this patch fixes the licensing.
Why did you add another probing function instead of extending i386/coreboot.c in libpayload?
fixed...
This is rather different then the description - can you fire off a new description?
If so, I'll ack this.
Jordan
Added Mainboard parser to i386/coreboot.c; see patch below.
Signed-off-by: Sean Nelson snelson@nmt.edu
---
On Tue, Aug 12, 2008 at 7:32 AM, Jordan Crouse jordan.crouse@amd.com wrote:
On 12/08/08 01:21 -0700, Sean Nelson wrote:
Stefan Reinauer wrote:
Sean Nelson wrote:
Patrick Georgi wrote:
Sean Nelson schrieb:
patch to move coreboot table code into libpayload. Allows payloads using libpayload to access coreboot tables.
Signed-Off-By: Sean Nelson snelson@nmt.edu
What about licensing? libpayload is BSD-licensed, the cbtable code seems to be GPL.
Regards, Patrick Georgi
Laziness got the best of me, this patch fixes the licensing.
Why did you add another probing function instead of extending i386/coreboot.c in libpayload?
fixed...
This is rather different then the description - can you fire off a new description?
If so, I'll ack this.
Jordan