mirror of https://github.com/acidanthera/audk.git
ArmPkg/SmbiosMiscDxe: Get SMBIOS information from OemMiscLib
In some scenarios, the information of Bios Version, Bios Release and Embedded Controller Firmware Release are fetched during UEFI booting. This patch supports updating those fields dynamically when the PCDs are empty. Signed-off-by: Nhi Pham <nhi@os.amperecomputing.com> Reviewed-by: Rebecca Cran <rebecca@quicinc.com> Reviewed-by: Sami Mujawar <sami.mujawar@arm.com> Acked-by: Ard Biesheuvel <ardb@kernel.org>
This commit is contained in:
parent
e5eb0e3347
commit
953438e466
|
@ -37,6 +37,7 @@ typedef struct {
|
|||
} OEM_MISC_PROCESSOR_DATA;
|
||||
|
||||
typedef enum {
|
||||
BiosVersionType00,
|
||||
ProductNameType01,
|
||||
SerialNumType01,
|
||||
UuidType01,
|
||||
|
@ -247,4 +248,24 @@ OemGetSystemUuid (
|
|||
OUT GUID *SystemUuid
|
||||
);
|
||||
|
||||
/** Fetches the BIOS release.
|
||||
|
||||
@return The BIOS release.
|
||||
**/
|
||||
UINT16
|
||||
EFIAPI
|
||||
OemGetBiosRelease (
|
||||
VOID
|
||||
);
|
||||
|
||||
/** Fetches the embedded controller firmware release.
|
||||
|
||||
@return The embedded controller firmware release.
|
||||
**/
|
||||
UINT16
|
||||
EFIAPI
|
||||
OemGetEmbeddedControllerFirmwareRelease (
|
||||
VOID
|
||||
);
|
||||
|
||||
#endif // OEM_MISC_LIB_H_
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
#include <Library/DebugLib.h>
|
||||
#include <Library/HiiLib.h>
|
||||
#include <Library/OemMiscLib.h>
|
||||
#include <Library/PcdLib.h>
|
||||
|
||||
/** Gets the CPU frequency of the specified processor.
|
||||
|
||||
|
@ -254,3 +255,31 @@ OemGetSystemUuid (
|
|||
ASSERT (FALSE);
|
||||
CopyGuid (SystemUuid, &gZeroGuid);
|
||||
}
|
||||
|
||||
/** Fetches the BIOS release.
|
||||
|
||||
@return The BIOS release.
|
||||
**/
|
||||
UINT16
|
||||
EFIAPI
|
||||
OemGetBiosRelease (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return PcdGet16 (PcdSystemBiosRelease);
|
||||
}
|
||||
|
||||
/** Fetches the embedded controller firmware release.
|
||||
|
||||
@return The embedded controller firmware release.
|
||||
**/
|
||||
UINT16
|
||||
EFIAPI
|
||||
OemGetEmbeddedControllerFirmwareRelease (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return PcdGet16 (PcdEmbeddedControllerFirmwareRelease);
|
||||
}
|
||||
|
|
|
@ -30,6 +30,11 @@
|
|||
[LibraryClasses]
|
||||
BaseMemoryLib
|
||||
DebugLib
|
||||
PcdLib
|
||||
|
||||
[Guids]
|
||||
gZeroGuid
|
||||
|
||||
[Pcd]
|
||||
gArmTokenSpaceGuid.PcdEmbeddedControllerFirmwareRelease
|
||||
gArmTokenSpaceGuid.PcdSystemBiosRelease
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
/** @file
|
||||
|
||||
Copyright (c) 2022, 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>
|
||||
|
@ -13,6 +14,7 @@
|
|||
#include <Library/DebugLib.h>
|
||||
#include <Library/HiiLib.h>
|
||||
#include <Library/MemoryAllocationLib.h>
|
||||
#include <Library/OemMiscLib.h>
|
||||
#include <Library/PrintLib.h>
|
||||
#include <Library/UefiBootServicesTableLib.h>
|
||||
|
||||
|
@ -191,11 +193,11 @@ SMBIOS_MISC_TABLE_FUNCTION (MiscBiosVendor) {
|
|||
TokenToUpdate = STRING_TOKEN (STR_MISC_BIOS_VERSION);
|
||||
HiiSetString (mSmbiosMiscHiiHandle, TokenToUpdate, Version, NULL);
|
||||
} else {
|
||||
Version = (CHAR16 *)PcdGetPtr (PcdFirmwareVersionString);
|
||||
if (StrLen (Version) > 0) {
|
||||
TokenToUpdate = STRING_TOKEN (STR_MISC_BIOS_VERSION);
|
||||
HiiSetString (mSmbiosMiscHiiHandle, TokenToUpdate, Version, NULL);
|
||||
}
|
||||
OemUpdateSmbiosInfo (
|
||||
mSmbiosMiscHiiHandle,
|
||||
STRING_TOKEN (STR_MISC_BIOS_VERSION),
|
||||
BiosVersionType00
|
||||
);
|
||||
}
|
||||
|
||||
Char16String = GetBiosReleaseDate ();
|
||||
|
@ -251,13 +253,11 @@ SMBIOS_MISC_TABLE_FUNCTION (MiscBiosVendor) {
|
|||
}
|
||||
}
|
||||
|
||||
SmbiosRecord->SystemBiosMajorRelease = (UINT8)(PcdGet16 (PcdSystemBiosRelease) >> 8);
|
||||
SmbiosRecord->SystemBiosMinorRelease = (UINT8)(PcdGet16 (PcdSystemBiosRelease) & 0xFF);
|
||||
SmbiosRecord->SystemBiosMajorRelease = (UINT8)(OemGetBiosRelease () >> 8);
|
||||
SmbiosRecord->SystemBiosMinorRelease = (UINT8)(OemGetBiosRelease () & 0xFF);
|
||||
|
||||
SmbiosRecord->EmbeddedControllerFirmwareMajorRelease = (UINT16)
|
||||
(PcdGet16 (PcdEmbeddedControllerFirmwareRelease) >> 8);
|
||||
SmbiosRecord->EmbeddedControllerFirmwareMinorRelease = (UINT16)
|
||||
(PcdGet16 (PcdEmbeddedControllerFirmwareRelease) & 0xFF);
|
||||
SmbiosRecord->EmbeddedControllerFirmwareMajorRelease = (UINT16)(OemGetEmbeddedControllerFirmwareRelease () >> 8);
|
||||
SmbiosRecord->EmbeddedControllerFirmwareMinorRelease = (UINT16)(OemGetEmbeddedControllerFirmwareRelease () & 0xFF);
|
||||
|
||||
OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1);
|
||||
UnicodeStrToAsciiStrS (Vendor, OptionalStrStart, VendorStrLen + 1);
|
||||
|
|
Loading…
Reference in New Issue