summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/efi_loader.h7
-rw-r--r--include/smbios.h5
-rw-r--r--lib/efi_loader/efi_smbios.c7
3 files changed, 16 insertions, 3 deletions
diff --git a/include/efi_loader.h b/include/efi_loader.h
index 0c286bf6be..c66252a7dd 100644
--- a/include/efi_loader.h
+++ b/include/efi_loader.h
@@ -214,6 +214,13 @@ efi_status_t efi_net_register(void);
/* Called by bootefi to make the watchdog available */
efi_status_t efi_watchdog_register(void);
/* Called by bootefi to make SMBIOS tables available */
+/**
+ * efi_smbios_register() - write out SMBIOS tables
+ *
+ * Called by bootefi to make SMBIOS tables available
+ *
+ * @return 0 if OK, -ENOMEM if no memory is available for the tables
+ */
efi_status_t efi_smbios_register(void);
struct efi_simple_file_system_protocol *
diff --git a/include/smbios.h b/include/smbios.h
index 79880ef5b5..97b9ddce23 100644
--- a/include/smbios.h
+++ b/include/smbios.h
@@ -231,8 +231,9 @@ typedef int (*smbios_write_type)(ulong *addr, int handle);
*
* This writes SMBIOS table at a given address.
*
- * @addr: start address to write SMBIOS table
- * @return: end address of SMBIOS table
+ * @addr: start address to write SMBIOS table. If this is not
+ * 16-byte-aligned then it will be aligned before the table is written
+ * @return: end address of SMBIOS table (and start address for next entry)
*/
ulong write_smbios_table(ulong addr);
diff --git a/lib/efi_loader/efi_smbios.c b/lib/efi_loader/efi_smbios.c
index 482436e2ad..7c3fc8af0b 100644
--- a/lib/efi_loader/efi_smbios.c
+++ b/lib/efi_loader/efi_smbios.c
@@ -29,7 +29,12 @@ efi_status_t efi_smbios_register(void)
if (ret != EFI_SUCCESS)
return ret;
- /* Generate SMBIOS tables */
+ /*
+ * Generate SMBIOS tables - we know that efi_allocate_pages() returns
+ * a 4k-aligned address, so it is safe to assume that
+ * write_smbios_table() will write the table at that address.
+ */
+ assert(!(dmi & 0xf));
write_smbios_table(dmi);
/* And expose them to our EFI payload */