ArmPkg/SmbiosMiscDxe: Adjust the priority of getting firmware version

The BIOS Firmware Version in the SMBIOS Type 0 can be fetched from
the fixed PcdFirmwareVersionString or platform specific OemMiscLib.
In fact, the support from OemMiscLib comes into play when the firmware
version may be modified at boot time for extended information.
Therefore, the priority of getting the version from OemMiscLib should
be higher.

In case there is no modification in the OemMiscLib, we have to keep
HII string STR_MISC_BIOS_VERSION empty or 'Not Specified'
to indicate that the firmware version should be fetched from
the PcdFirmwareVersionString.

Signed-off-by: Tinh Nguyen <tinhnguyen@os.amperecomputing.com>
Reviewed-by: Rebecca Cran <rebecca@bsdio.com>
Reviewed-by: Oliver Smith-Denny <osd@smith-denny.com>
Reviewed-by: Leif Lindholm <quic_llindhol@quicinc.com>
This commit is contained in:
Tinh Nguyen 2023-03-27 01:35:43 +07:00 committed by mergify[bot]
parent e4b3fd905a
commit 07e17188df
1 changed files with 36 additions and 22 deletions

View File

@ -1,6 +1,6 @@
/** @file
Copyright (c) 2022, Ampere Computing LLC. All rights reserved.<BR>
Copyright (c) 2022 - 2023, Ampere Computing LLC. All rights reserved.<BR>
Copyright (c) 2021, NUVIA Inc. All rights reserved.<BR>
Copyright (c) 2009, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2015, Hisilicon Limited. All rights reserved.<BR>
@ -124,22 +124,47 @@ GetBiosReleaseDate (
return ReleaseDate;
}
/**
Fetches the firmware ('BIOS') version from the
FirmwareVersionInfo HOB.
/** Fetches the Firmware version string for SMBIOS type 0
This function first acquires the firmware version string from OemMiscLib;
if it is invalid, PcdFirmwareVersionString is used as a fallback,
and then sets it in SMBIOS type 0.
@return The version as a UTF-16 string
**/
CHAR16 *
GetBiosVersion (
VOID
SetBiosVersion (
VOID
)
{
CHAR16 *ReleaseString;
CHAR16 *DefaultVersionString;
CHAR16 *Version;
EFI_STRING_ID TokenToUpdate;
ReleaseString = (CHAR16 *)FixedPcdGetPtr (PcdFirmwareVersionString);
DefaultVersionString = HiiGetString (
mSmbiosMiscHiiHandle,
STRING_TOKEN (STR_MISC_BIOS_VERSION),
NULL
);
return ReleaseString;
OemUpdateSmbiosInfo (
mSmbiosMiscHiiHandle,
STRING_TOKEN (STR_MISC_BIOS_VERSION),
BiosVersionType00
);
Version = HiiGetString (
mSmbiosMiscHiiHandle,
STRING_TOKEN (STR_MISC_BIOS_VERSION),
NULL
);
if (((StrCmp (Version, DefaultVersionString) == 0) || (StrLen (Version) == 0))) {
Version = (CHAR16 *)FixedPcdGetPtr (PcdFirmwareVersionString);
if (StrLen (Version) > 0) {
TokenToUpdate = STRING_TOKEN (STR_MISC_BIOS_VERSION);
HiiSetString (mSmbiosMiscHiiHandle, TokenToUpdate, Version, NULL);
}
}
}
/**
@ -187,18 +212,7 @@ SMBIOS_MISC_TABLE_FUNCTION (MiscBiosVendor) {
HiiSetString (mSmbiosMiscHiiHandle, TokenToUpdate, Vendor, NULL);
}
Version = GetBiosVersion ();
if (StrLen (Version) > 0) {
TokenToUpdate = STRING_TOKEN (STR_MISC_BIOS_VERSION);
HiiSetString (mSmbiosMiscHiiHandle, TokenToUpdate, Version, NULL);
} else {
OemUpdateSmbiosInfo (
mSmbiosMiscHiiHandle,
STRING_TOKEN (STR_MISC_BIOS_VERSION),
BiosVersionType00
);
}
SetBiosVersion ();
Char16String = GetBiosReleaseDate ();
if (StrLen (Char16String) > 0) {