dmidecode-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [dmidecode] Adding -s bios-revision & -s firmware-revision support


From: Jerry Hoemann
Subject: Re: [dmidecode] Adding -s bios-revision & -s firmware-revision support
Date: Fri, 20 Sep 2019 15:04:07 -0600
User-agent: Mutt/1.12.1 (2019-06-15)

On Tue, Sep 17, 2019 at 05:50:00PM +0200, Erwan Velu wrote:
> Hey,
> I faced a situation where some vendors like HPe encodes the release
> version of the bios into the bios_revision field.
> 
> Dmidecode only exports the bios-version which is not relevant here. So
> I simply added a new entry of the -s option to expose this.
> 
> I performed the same operation for the firmware_revision which helps
> extraction the BMC version of the server.
> 
> Both are useful when tracking firmware versions across an infrastructure.

I tested the changes on a few proliants and they seem to work ad advertized.

Shouldn't man/dmidecode.8 be updated to reflect changes in the command?

thanks

Jerry

> 
> Please find the two patches attached,
> Cheers,
> Erwan

> From 62e22ea8dec527f381c8bf3d8257b09d70743493 Mon Sep 17 00:00:00 2001
> From: Erwan Velu <address@hidden>
> Date: Tue, 17 Sep 2019 17:44:22 +0200
> Subject: [PATCH 2/2] dmidecode: Adding firmware-revision support to -s option
> 
> Most of servers like HPe, QCT, report the BMC version via the Firmware 
> Revision field.
> 
> This patch add an option to the -s to export this information directly.
> 
> Signed-off-by: Erwan Velu <address@hidden>
> ---
>  dmidecode.c | 16 +++++++++++++---
>  dmiopt.c    |  1 +
>  2 files changed, 14 insertions(+), 3 deletions(-)
> 
> diff --git a/dmidecode.c b/dmidecode.c
> index 7cdcce93df4e..712127efb9af 100644
> --- a/dmidecode.c
> +++ b/dmidecode.c
> @@ -320,6 +320,15 @@ static void dmi_bios_revision(u8 major, u8 minor)
>       }
>  }
>  
> +static void dmi_firmware_revision(u8 major, u8 minor)
> +{
> +     if (major != 0xFF && minor != 0xFF) {
> +             if (!(opt.flags & FLAG_QUIET))
> +                     printf("\tFirmware Revision: ");
> +             printf("%u.%u\n", major, minor);
> +     }
> +}
> +
>  static void dmi_bios_rom_size(u8 code1, u16 code2)
>  {
>       static const char *unit[4] = {
> @@ -3888,9 +3897,7 @@ static void dmi_decode(const struct dmi_header *h, u16 
> ver)
>                       dmi_bios_characteristics_x2(data[0x13], "\t\t");
>                       if (h->length < 0x18) break;
>                       dmi_bios_revision(data[0x14], data[0x15]);
> -                     if (data[0x16] != 0xFF && data[0x17] != 0xFF)
> -                             printf("\tFirmware Revision: %u.%u\n",
> -                                     data[0x16], data[0x17]);
> +                     dmi_firmware_revision(data[0x16], data[0x17]);
>                       break;
>  
>               case 1: /* 7.2 System Information */
> @@ -5092,6 +5099,9 @@ static void dmi_table_string(const struct dmi_header 
> *h, const u8 *data, u16 ver
>               case 0x14:
>                       dmi_bios_revision(data[offset], data[offset+1]);
>                       break;
> +             case 0x16:
> +                     dmi_firmware_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 cefe27d4554a..a67171f5a017 100644
> --- a/dmiopt.c
> +++ b/dmiopt.c
> @@ -152,6 +152,7 @@ static const struct string_keyword opt_string_keyword[] = 
> {
>       { "bios-version", 0, 0x05 },
>       { "bios-release-date", 0, 0x08 },
>       { "bios-revision", 0, 0x14 },
> +     { "firmware-revision", 0, 0x16 },
>       { "system-manufacturer", 1, 0x04 },
>       { "system-product-name", 1, 0x05 },
>       { "system-version", 1, 0x06 },
> -- 
> 2.21.0
> 

> From 76dcb63c956fead50bd26dcba46746d91a96f684 Mon Sep 17 00:00:00 2001
> From: Erwan Velu <address@hidden>
> 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 <address@hidden>
> ---
>  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
> 

> _______________________________________________
> https://lists.nongnu.org/mailman/listinfo/dmidecode-devel


-- 

-----------------------------------------------------------------------------
Jerry Hoemann                  Software Engineer   Hewlett Packard Enterprise
-----------------------------------------------------------------------------



reply via email to

[Prev in Thread] Current Thread [Next in Thread]