From 83012de1646d2d2156dbe2fe894fd2ca478c7ab5 Mon Sep 17 00:00:00 2001 From: Kevin O'Connor Date: Sun, 28 Aug 2011 12:42:15 -0400 Subject: [PATCH] Use coreboot smbios table if found. The coreboot init code now looks for an existing smbios table and will use it. A locally generated smbios table will only be created if no coreboot table is found. --- src/biostables.c | 3 +++ src/coreboot.c | 7 ++++--- src/smbios.c | 3 +++ src/smbios.h | 2 ++ 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/biostables.c b/src/biostables.c index d8b5067..57a5c57 100644 --- a/src/biostables.c +++ b/src/biostables.c @@ -86,6 +86,8 @@ copy_acpi_rsdp(void *pos) void copy_smbios(void *pos) { + if (SMBiosAddr) + return; struct smbios_entry_point *p = pos; if (memcmp(p->anchor_string, "_SM_", 4)) return; @@ -102,4 +104,5 @@ copy_smbios(void *pos) } dprintf(1, "Copying SMBIOS entry point from %p to %p\n", pos, newpos); memcpy(newpos, pos, p->length); + SMBiosAddr = newpos; } diff --git a/src/coreboot.c b/src/coreboot.c index 5926939..ee9dd8b 100644 --- a/src/coreboot.c +++ b/src/coreboot.c @@ -201,6 +201,7 @@ scan_tables(u32 start, u32 size) copy_pir(p); copy_mptable(p); copy_acpi_rsdp(p); + copy_smbios(p); } } @@ -221,9 +222,9 @@ coreboot_copy_biostable(void) scan_tables(m->start, m->size); } - // XXX - just create dummy smbios table for now - should detect if - // smbios/dmi table is found from coreboot and use that instead. - smbios_init(); + // XXX - create a dummy smbios table for now. + if (!SMBiosAddr) + smbios_init(); } diff --git a/src/smbios.c b/src/smbios.c index 7db8cce..fe1e183 100644 --- a/src/smbios.c +++ b/src/smbios.c @@ -10,6 +10,8 @@ #include "paravirt.h" // qemu_cfg_smbios_load_field #include "smbios.h" // struct smbios_entry_point +struct smbios_entry_point *SMBiosAddr; + static void smbios_entry_point_init(u16 max_structure_size, u16 structure_table_length, @@ -50,6 +52,7 @@ smbios_entry_point_init(u16 max_structure_size, ep->intermediate_checksum -= checksum((void*)ep + 0x10, ep->length - 0x10); + SMBiosAddr = ep; dprintf(1, "SMBIOS ptr=%p table=%p size=%d\n" , ep, finaltable, structure_table_length); } diff --git a/src/smbios.h b/src/smbios.h index 7bf2bed..9d54e80 100644 --- a/src/smbios.h +++ b/src/smbios.h @@ -24,6 +24,8 @@ struct smbios_entry_point { u8 smbios_bcd_revision; } PACKED; +extern struct smbios_entry_point *SMBiosAddr; + /* This goes at the beginning of every SMBIOS structure. */ struct smbios_structure_header { u8 type; -- 2.25.1