summaryrefslogtreecommitdiff
path: root/include/smbios.h
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2021-03-15 08:00:11 +0300
committerSimon Glass <sjg@chromium.org>2021-03-27 03:59:37 +0300
commit272e62cb83f01acf7ae89449eaa9f020e76bff23 (patch)
tree6cc4a049fcd22bc1e95987e5a6285464224df29f /include/smbios.h
parent11a38a2573fa6a765043df94eae44544a0d948f4 (diff)
downloadu-boot-272e62cb83f01acf7ae89449eaa9f020e76bff23.tar.xz
smbios: Allow writing to the coreboot version string
When U-Boot is booted from coreboot the SMBIOS tables are written by coreboot, not U-Boot. The existing method of updating the BIOS version string does not work in that case, since gd->smbios_version is only set when U-Boot writes the tables. Add a new function which allows the version to be updated by parsing the tables and writing the string in the correct place. Since coreboot provides a pointer to the SMBIOS tables in its sysinfo structure, this makes it easy to do the update. Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'include/smbios.h')
-rw-r--r--include/smbios.h20
1 files changed, 20 insertions, 0 deletions
diff --git a/include/smbios.h b/include/smbios.h
index ecc4fd1de3..ffeefb4737 100644
--- a/include/smbios.h
+++ b/include/smbios.h
@@ -14,6 +14,10 @@
#define SMBIOS_MAJOR_VER 3
#define SMBIOS_MINOR_VER 0
+enum {
+ SMBIOS_STR_MAX = 64, /* Maximum length allowed for a string */
+};
+
/* SMBIOS structure types */
enum {
SMBIOS_BIOS_INFORMATION = 0,
@@ -269,4 +273,20 @@ const char *smbios_string(const struct smbios_header *header, int index);
*/
int smbios_update_version(const char *version);
+/**
+ * smbios_update_version_full() - Update the version string
+ *
+ * This can be called after the SMBIOS tables are written (e.g. after the U-Boot
+ * main loop has started) to update the BIOS version string (SMBIOS table 0).
+ * It scans for the correct place to put the version, so does not need U-Boot
+ * to have actually written the tables itself (e.g. if a previous bootloader
+ * did it).
+ *
+ * @smbios_tab: Start of SMBIOS tables
+ * @version: New version string to use
+ * @return 0 if OK, -ENOENT if no version string was previously written,
+ * -ENOSPC if the new string is too large to fit
+ */
+int smbios_update_version_full(void *smbios_tab, const char *version);
+
#endif /* _SMBIOS_H_ */