summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--payloads/coreinfo/coreboot_module.c4
-rw-r--r--payloads/libpayload/arch/i386/coreboot.c5
-rw-r--r--payloads/libpayload/include/coreboot_tables.h16
-rw-r--r--payloads/libpayload/include/sysinfo.h3
4 files changed, 20 insertions, 8 deletions
diff --git a/payloads/coreinfo/coreboot_module.c b/payloads/coreinfo/coreboot_module.c
index 7289366f8b..d33ea9ee60 100644
--- a/payloads/coreinfo/coreboot_module.c
+++ b/payloads/coreinfo/coreboot_module.c
@@ -142,8 +142,8 @@ 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);
+ strncpy(cb_info.vendor, cb_mb_vendor_part(mb), 31);
+ strncpy(cb_info.part, cb_mb_part_string(mb), 31);
}
static void parse_strings(unsigned char *ptr)
diff --git a/payloads/libpayload/arch/i386/coreboot.c b/payloads/libpayload/arch/i386/coreboot.c
index 709f8ae00f..06acc17b1d 100644
--- a/payloads/libpayload/arch/i386/coreboot.c
+++ b/payloads/libpayload/arch/i386/coreboot.c
@@ -137,6 +137,8 @@ static int cb_parse_header(void *addr, int len, struct sysinfo_t *info)
header->table_bytes) != header->table_checksum)
return -1;
+ info->header = header;
+
/* Now, walk the tables. */
ptr += header->header_bytes;
@@ -173,6 +175,9 @@ static int cb_parse_header(void *addr, int len, struct sysinfo_t *info)
cb_parse_framebuffer(ptr, info);
break;
#endif
+ case CB_TAG_MAINBOARD:
+ info->mainboard = (struct cb_mainboard *)ptr;
+ break;
}
ptr += rec->size;
diff --git a/payloads/libpayload/include/coreboot_tables.h b/payloads/libpayload/include/coreboot_tables.h
index e362d06480..c68ccc9c2f 100644
--- a/payloads/libpayload/include/coreboot_tables.h
+++ b/payloads/libpayload/include/coreboot_tables.h
@@ -228,6 +228,16 @@ static inline u16 cb_checksum(const void *ptr, unsigned len)
return ipchksum(ptr, len);
}
+static inline const char *cb_mb_vendor_string(const struct cb_mainboard *cbm)
+{
+ return (char *)(cbm->strings + cbm->vendor_idx);
+}
+
+static inline const char *cb_mb_part_string(const struct cb_mainboard *cbm)
+{
+ return (char *)(cbm->strings + cbm->part_number_idx);
+}
+
/* Helpful macros */
#define MEM_RANGE_COUNT(_rec) \
@@ -237,10 +247,4 @@ static inline u16 cb_checksum(const void *ptr, unsigned len)
(void *)(((u8 *) (_rec)) + sizeof(*(_rec)) \
+ (sizeof((_rec)->map[0]) * (_idx)))
-#define MB_VENDOR_STRING(_mb) \
- (((unsigned char *) ((_mb)->strings)) + (_mb)->vendor_idx)
-
-#define MB_PART_STRING(_mb) \
- (((unsigned char *) ((_mb)->strings)) + (_mb)->part_number_idx)
-
#endif
diff --git a/payloads/libpayload/include/sysinfo.h b/payloads/libpayload/include/sysinfo.h
index c1d2002279..778dfe9414 100644
--- a/payloads/libpayload/include/sysinfo.h
+++ b/payloads/libpayload/include/sysinfo.h
@@ -56,6 +56,9 @@ struct sysinfo_t {
struct cb_framebuffer *framebuffer;
unsigned long *mbtable; /** Pointer to the multiboot table */
+
+ struct cb_header *header;
+ struct cb_mainboard *mainboard;
};
extern struct sysinfo_t lib_sysinfo;