From 76dcb63c956fead50bd26dcba46746d91a96f684 Mon Sep 17 00:00:00 2001 From: Erwan Velu Date: Tue, 17 Sep 2019 17:35:46 +0200 Subject: [PATCH 1/2] dmidecode: Adding bios-revision in -s mode Some hardware vendors like HPe use the Version field to store the bios generation like (U30, U32, A40, ...). If you want to get the "release" version of this bios generation, the bios revision field must be considered. A typical output of this kind of server looks like : BIOS Information Vendor: HPE Version: A40 Release Date: 07/20/2019 [...] BIOS Revision: 2.0 Firmware Revision: 1.45 This patch add a "bios-revision" option and rework the way this field is reported. Signed-off-by: Erwan Velu --- dmidecode.c | 16 +++++++++++++--- dmiopt.c | 1 + 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/dmidecode.c b/dmidecode.c index cff7d3f1941d..7cdcce93df4e 100644 --- a/dmidecode.c +++ b/dmidecode.c @@ -311,6 +311,15 @@ static void dmi_bios_runtime_size(u32 code) printf(" %u kB", code >> 10); } +static void dmi_bios_revision(u8 major, u8 minor) +{ + if (major != 0xFF && minor != 0xFF) { + if (!(opt.flags & FLAG_QUIET)) + printf("\tBIOS Revision: "); + printf("%u.%u\n", major, minor); + } +} + static void dmi_bios_rom_size(u8 code1, u16 code2) { static const char *unit[4] = { @@ -3878,9 +3887,7 @@ static void dmi_decode(const struct dmi_header *h, u16 ver) if (h->length < 0x14) break; dmi_bios_characteristics_x2(data[0x13], "\t\t"); if (h->length < 0x18) break; - if (data[0x14] != 0xFF && data[0x15] != 0xFF) - printf("\tBIOS Revision: %u.%u\n", - data[0x14], data[0x15]); + dmi_bios_revision(data[0x14], data[0x15]); if (data[0x16] != 0xFF && data[0x17] != 0xFF) printf("\tFirmware Revision: %u.%u\n", data[0x16], data[0x17]); @@ -5082,6 +5089,9 @@ static void dmi_table_string(const struct dmi_header *h, const u8 *data, u16 ver key = (opt.string->type << 8) | offset; switch (key) { + case 0x14: + dmi_bios_revision(data[offset], data[offset+1]); + break; case 0x108: dmi_system_uuid(data + offset, ver); printf("\n"); diff --git a/dmiopt.c b/dmiopt.c index 2f285f34a96b..cefe27d4554a 100644 --- a/dmiopt.c +++ b/dmiopt.c @@ -151,6 +151,7 @@ static const struct string_keyword opt_string_keyword[] = { { "bios-vendor", 0, 0x04 }, { "bios-version", 0, 0x05 }, { "bios-release-date", 0, 0x08 }, + { "bios-revision", 0, 0x14 }, { "system-manufacturer", 1, 0x04 }, { "system-product-name", 1, 0x05 }, { "system-version", 1, 0x06 }, -- 2.21.0