Add the FirmwareVersionInfoPeim driver, which provides the firmware
release date to the SMBIOS code.
Signed-off-by: Rebecca Cran <rebecca@nuviainc.com>
---
ArmPkg/ArmPkg.dec | 3 +
ArmPkg/Drivers/FirmwareVersionInfoPeim/FirmwareVersionInfoPeim.inf | 47 ++++++++++
ArmPkg/Include/Guid/FirmwareVersionInfoHobGuid.h | 29 +++++++
ArmPkg/Drivers/FirmwareVersionInfoPeim/FirmwareVersionInfoPeim.c | 91 ++++++++++++++++++++
4 files changed, 170 insertions(+)
diff --git a/ArmPkg/ArmPkg.dec b/ArmPkg/ArmPkg.dec
index eaf1072d9ef3..840f6c7c34e1 100644
--- a/ArmPkg/ArmPkg.dec
+++ b/ArmPkg/ArmPkg.dec
@@ -45,6 +45,9 @@ [Guids.common]
# Include/Guid/ArmMpCoreInfo.h
gArmMpCoreInfoGuid = { 0xa4ee0728, 0xe5d7, 0x4ac5, {0xb2, 0x1e, 0x65, 0x8e, 0xd8, 0x57, 0xe8, 0x34} }
+ gFirmwareInfoHobGuid = { 0x78ba5a73, 0x04d0, 0x4adf, {0xb6, 0x14, 0x04, 0xa6, 0xa3, 0xd8, 0xa2, 0x57} }
+
+
[Protocols.common]
## Arm System Control and Management Interface(SCMI) Base protocol
## ArmPkg/Include/Protocol/ArmScmiBaseProtocol.h
diff --git a/ArmPkg/Drivers/FirmwareVersionInfoPeim/FirmwareVersionInfoPeim.inf b/ArmPkg/Drivers/FirmwareVersionInfoPeim/FirmwareVersionInfoPeim.inf
new file mode 100644
index 000000000000..5b61fcfa2ebf
--- /dev/null
+++ b/ArmPkg/Drivers/FirmwareVersionInfoPeim/FirmwareVersionInfoPeim.inf
@@ -0,0 +1,47 @@
+#/** @file
+#
+# Copyright (c) 2020, NUVIA Inc. All rights reserved.
+# Copyright (c) 2016, Hisilicon Limited. All rights reserved.
+# Copyright (c) 2016, Linaro Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+#**/
+
+[Defines]
+ INF_VERSION = 1.29
+ BASE_NAME = FirmwareVersionInfoPeim
+ FILE_GUID = 3d45d0a0-4ded-4c01-b16f-2b3007c1fbe2
+ MODULE_TYPE = PEIM
+ VERSION_STRING = 1.0
+ ENTRY_POINT = FirmwareVersionInfoEntry
+
+[Sources.common]
+ FirmwareVersionInfoPeim.c
+
+[Packages]
+ ArmPkg/ArmPkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ MdePkg/MdePkg.dec
+
+[LibraryClasses]
+ BaseLib
+ BaseMemoryLib
+ DebugLib
+ HobLib
+ PcdLib
+ PeimEntryPoint
+ PrintLib
+ SerialPortLib
+
+[Pcd]
+ gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVersionString
+
+[Guids]
+ gFirmwareVersionInfoHobGuid
+
+[Depex]
+ TRUE
+
+[BuildOptions]
+
diff --git a/ArmPkg/Include/Guid/FirmwareVersionInfoHobGuid.h b/ArmPkg/Include/Guid/FirmwareVersionInfoHobGuid.h
new file mode 100644
index 000000000000..af4fa6fec823
--- /dev/null
+++ b/ArmPkg/Include/Guid/FirmwareVersionInfoHobGuid.h
@@ -0,0 +1,29 @@
+/** @file
+*
+* Copyright (c) 2020, NUVIA Inc. All rights reserved.
+* Copyright (c) 2016, Hisilicon Limited. All rights reserved.
+* Copyright (c) 2016, Linaro Limited. All rights reserved.
+*
+* SPDX-License-Identifier: BSD-2-Clause-Patent
+*
+**/
+
+#ifndef FIRMWARE_VERSION_INFO_HOB_GUID_H_
+#define FIRMWARE_VERSION_INFO_HOB_GUID_H_
+
+// {78ba5a73-04d0-4adf-b614-04a6a3d8a257}
+#define FIRMWARE_VERSION_INFO_HOB_GUID \
+ {0x78ba5a73, 0x04d0, 0x4adf, {0xb6, 0x14, 0x04, 0xa6, 0xa3, 0xd8, 0xa2, 0x57}}
+
+extern GUID gFirmwareVersionInfoHobGuid;
+
+#pragma pack(1)
+
+typedef struct {
+ EFI_TIME BuildTime;
+ CHAR16 String[1];
+} FIRMWARE_VERSION_INFO;
+
+#pragma pack()
+
+#endif /* FIRMWARE_VERSION_INFO_HOB_GUID_H_ */
diff --git a/ArmPkg/Drivers/FirmwareVersionInfoPeim/FirmwareVersionInfoPeim.c b/ArmPkg/Drivers/FirmwareVersionInfoPeim/FirmwareVersionInfoPeim.c
new file mode 100644
index 000000000000..48dcf4602a95
--- /dev/null
+++ b/ArmPkg/Drivers/FirmwareVersionInfoPeim/FirmwareVersionInfoPeim.c
@@ -0,0 +1,91 @@
+/** @file
+*
+* Copyright (c) 2020, NUVIA Inc. All rights reserved.
+* Copyright (c) 2016, Hisilicon Limited. All rights reserved.
+* Copyright (c) 2016, Linaro Limited. All rights reserved.
+*
+* SPDX-License-Identifier: BSD-2-Clause-Patent
+*
+**/
+
+#include <Uefi.h>
+#include <PiPei.h>
+#include <Library/BaseLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/DebugLib.h>
+#include <Library/HobLib.h>
+#include <Library/PcdLib.h>
+#include <Library/PrintLib.h>
+#include <Library/SerialPortLib.h>
+
+#include <Guid/FirmwareVersionInfoHobGuid.h>
+
+struct MonthDescription {
+ CONST CHAR8* MonthStr;
+ UINT32 MonthInt;
+} mMonthDescription[] = {
+ { "Jan", 1 },
+ { "Feb", 2 },
+ { "Mar", 3 },
+ { "Apr", 4 },
+ { "May", 5 },
+ { "Jun", 6 },
+ { "Jul", 7 },
+ { "Aug", 8 },
+ { "Sep", 9 },
+ { "Oct", 10 },
+ { "Nov", 11 },
+ { "Dec", 12 },
+ { "???", 1 }, // Use 1 as default month
+};
+
+VOID GetReleaseTime (EFI_TIME *Time)
+{
+ CONST CHAR8 *ReleaseDate = __DATE__;
+ CONST CHAR8 *ReleaseTime = __TIME__;
+ UINTN i;
+
+ for (i = 0;i < 12;i++) {
+ if (AsciiStrnCmp (ReleaseDate, mMonthDescription[i].MonthStr, 3) == 0) {
+ break;
+ }
+ }
+
+ Time->Month = mMonthDescription[i].MonthInt;
+ Time->Day = AsciiStrDecimalToUintn (ReleaseDate + 4);
+ Time->Year = AsciiStrDecimalToUintn (ReleaseDate + 7);
+ Time->Hour = AsciiStrDecimalToUintn (ReleaseTime);
+ Time->Minute = AsciiStrDecimalToUintn (ReleaseTime + 3);
+ Time->Second = AsciiStrDecimalToUintn (ReleaseTime + 6);
+
+ return;
+}
+
+EFI_STATUS
+EFIAPI
+FirmwareVersionInfoEntry (
+ IN EFI_PEI_FILE_HANDLE FileHandle,
+ IN CONST EFI_PEI_SERVICES **PeiServices
+ )
+{
+ FIRMWARE_VERSION_INFO *VersionInfo;
+ EFI_TIME Time = {0};
+ CONST CHAR16 *ReleaseString =
+ (CHAR16 *)FixedPcdGetPtr (PcdFirmwareVersionString);
+
+ GetReleaseTime (&Time);
+
+ VersionInfo = BuildGuidHob (&gFirmwareVersionInfoHobGuid,
+ sizeof (FIRMWARE_VERSION_INFO) -
+ sizeof (VersionInfo->String) +
+ StrSize (ReleaseString));
+ if (VersionInfo == NULL) {
+ DEBUG ((DEBUG_ERROR, "[%a]:[%d] Build HOB failed!\n", __FILE__, __LINE__));
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ CopyMem (&VersionInfo->BuildTime, &Time, sizeof (EFI_TIME));
+ CopyMem (VersionInfo->String, ReleaseString, StrSize (ReleaseString));
+
+ return EFI_SUCCESS;
+}
--
2.26.2
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#68104): https://edk2.groups.io/g/devel/message/68104
Mute This Topic: https://groups.io/mt/78622928/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
On 12/1/20 1:33 AM, Rebecca Cran wrote:
> Add the FirmwareVersionInfoPeim driver, which provides the firmware
> release date to the SMBIOS code.
>
> Signed-off-by: Rebecca Cran <rebecca@nuviainc.com>
Hi Rebecca,
Is there any pressing need for this to execute in the PEI phase? These
are all compile time constants, which can easily be exposed the the
SMBIOS driver running in DXE in a different way, no?
> ---
> ArmPkg/ArmPkg.dec | 3 +
> ArmPkg/Drivers/FirmwareVersionInfoPeim/FirmwareVersionInfoPeim.inf | 47 ++++++++++
> ArmPkg/Include/Guid/FirmwareVersionInfoHobGuid.h | 29 +++++++
> ArmPkg/Drivers/FirmwareVersionInfoPeim/FirmwareVersionInfoPeim.c | 91 ++++++++++++++++++++
> 4 files changed, 170 insertions(+)
>
> diff --git a/ArmPkg/ArmPkg.dec b/ArmPkg/ArmPkg.dec
> index eaf1072d9ef3..840f6c7c34e1 100644
> --- a/ArmPkg/ArmPkg.dec
> +++ b/ArmPkg/ArmPkg.dec
> @@ -45,6 +45,9 @@ [Guids.common]
> # Include/Guid/ArmMpCoreInfo.h
> gArmMpCoreInfoGuid = { 0xa4ee0728, 0xe5d7, 0x4ac5, {0xb2, 0x1e, 0x65, 0x8e, 0xd8, 0x57, 0xe8, 0x34} }
>
> + gFirmwareInfoHobGuid = { 0x78ba5a73, 0x04d0, 0x4adf, {0xb6, 0x14, 0x04, 0xa6, 0xa3, 0xd8, 0xa2, 0x57} }
> +
> +
> [Protocols.common]
> ## Arm System Control and Management Interface(SCMI) Base protocol
> ## ArmPkg/Include/Protocol/ArmScmiBaseProtocol.h
> diff --git a/ArmPkg/Drivers/FirmwareVersionInfoPeim/FirmwareVersionInfoPeim.inf b/ArmPkg/Drivers/FirmwareVersionInfoPeim/FirmwareVersionInfoPeim.inf
> new file mode 100644
> index 000000000000..5b61fcfa2ebf
> --- /dev/null
> +++ b/ArmPkg/Drivers/FirmwareVersionInfoPeim/FirmwareVersionInfoPeim.inf
> @@ -0,0 +1,47 @@
> +#/** @file
> +#
> +# Copyright (c) 2020, NUVIA Inc. All rights reserved.
> +# Copyright (c) 2016, Hisilicon Limited. All rights reserved.
> +# Copyright (c) 2016, Linaro Limited. All rights reserved.
> +#
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> +#
> +#**/
> +
> +[Defines]
> + INF_VERSION = 1.29
> + BASE_NAME = FirmwareVersionInfoPeim
> + FILE_GUID = 3d45d0a0-4ded-4c01-b16f-2b3007c1fbe2
> + MODULE_TYPE = PEIM
> + VERSION_STRING = 1.0
> + ENTRY_POINT = FirmwareVersionInfoEntry
> +
> +[Sources.common]
> + FirmwareVersionInfoPeim.c
> +
> +[Packages]
> + ArmPkg/ArmPkg.dec
> + MdeModulePkg/MdeModulePkg.dec
> + MdePkg/MdePkg.dec
> +
> +[LibraryClasses]
> + BaseLib
> + BaseMemoryLib
> + DebugLib
> + HobLib
> + PcdLib
> + PeimEntryPoint
> + PrintLib
> + SerialPortLib
> +
> +[Pcd]
> + gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVersionString
> +
> +[Guids]
> + gFirmwareVersionInfoHobGuid
> +
> +[Depex]
> + TRUE
> +
> +[BuildOptions]
> +
> diff --git a/ArmPkg/Include/Guid/FirmwareVersionInfoHobGuid.h b/ArmPkg/Include/Guid/FirmwareVersionInfoHobGuid.h
> new file mode 100644
> index 000000000000..af4fa6fec823
> --- /dev/null
> +++ b/ArmPkg/Include/Guid/FirmwareVersionInfoHobGuid.h
> @@ -0,0 +1,29 @@
> +/** @file
> +*
> +* Copyright (c) 2020, NUVIA Inc. All rights reserved.
> +* Copyright (c) 2016, Hisilicon Limited. All rights reserved.
> +* Copyright (c) 2016, Linaro Limited. All rights reserved.
> +*
> +* SPDX-License-Identifier: BSD-2-Clause-Patent
> +*
> +**/
> +
> +#ifndef FIRMWARE_VERSION_INFO_HOB_GUID_H_
> +#define FIRMWARE_VERSION_INFO_HOB_GUID_H_
> +
> +// {78ba5a73-04d0-4adf-b614-04a6a3d8a257}
> +#define FIRMWARE_VERSION_INFO_HOB_GUID \
> + {0x78ba5a73, 0x04d0, 0x4adf, {0xb6, 0x14, 0x04, 0xa6, 0xa3, 0xd8, 0xa2, 0x57}}
> +
> +extern GUID gFirmwareVersionInfoHobGuid;
> +
> +#pragma pack(1)
> +
> +typedef struct {
> + EFI_TIME BuildTime;
> + CHAR16 String[1];
> +} FIRMWARE_VERSION_INFO;
> +
> +#pragma pack()
> +
> +#endif /* FIRMWARE_VERSION_INFO_HOB_GUID_H_ */
> diff --git a/ArmPkg/Drivers/FirmwareVersionInfoPeim/FirmwareVersionInfoPeim.c b/ArmPkg/Drivers/FirmwareVersionInfoPeim/FirmwareVersionInfoPeim.c
> new file mode 100644
> index 000000000000..48dcf4602a95
> --- /dev/null
> +++ b/ArmPkg/Drivers/FirmwareVersionInfoPeim/FirmwareVersionInfoPeim.c
> @@ -0,0 +1,91 @@
> +/** @file
> +*
> +* Copyright (c) 2020, NUVIA Inc. All rights reserved.
> +* Copyright (c) 2016, Hisilicon Limited. All rights reserved.
> +* Copyright (c) 2016, Linaro Limited. All rights reserved.
> +*
> +* SPDX-License-Identifier: BSD-2-Clause-Patent
> +*
> +**/
> +
> +#include <Uefi.h>
> +#include <PiPei.h>
> +#include <Library/BaseLib.h>
> +#include <Library/BaseMemoryLib.h>
> +#include <Library/DebugLib.h>
> +#include <Library/HobLib.h>
> +#include <Library/PcdLib.h>
> +#include <Library/PrintLib.h>
> +#include <Library/SerialPortLib.h>
> +
> +#include <Guid/FirmwareVersionInfoHobGuid.h>
> +
> +struct MonthDescription {
> + CONST CHAR8* MonthStr;
> + UINT32 MonthInt;
> +} mMonthDescription[] = {
> + { "Jan", 1 },
> + { "Feb", 2 },
> + { "Mar", 3 },
> + { "Apr", 4 },
> + { "May", 5 },
> + { "Jun", 6 },
> + { "Jul", 7 },
> + { "Aug", 8 },
> + { "Sep", 9 },
> + { "Oct", 10 },
> + { "Nov", 11 },
> + { "Dec", 12 },
> + { "???", 1 }, // Use 1 as default month
> +};
> +
> +VOID GetReleaseTime (EFI_TIME *Time)
> +{
> + CONST CHAR8 *ReleaseDate = __DATE__;
> + CONST CHAR8 *ReleaseTime = __TIME__;
> + UINTN i;
> +
> + for (i = 0;i < 12;i++) {
> + if (AsciiStrnCmp (ReleaseDate, mMonthDescription[i].MonthStr, 3) == 0) {
> + break;
> + }
> + }
> +
> + Time->Month = mMonthDescription[i].MonthInt;
> + Time->Day = AsciiStrDecimalToUintn (ReleaseDate + 4);
> + Time->Year = AsciiStrDecimalToUintn (ReleaseDate + 7);
> + Time->Hour = AsciiStrDecimalToUintn (ReleaseTime);
> + Time->Minute = AsciiStrDecimalToUintn (ReleaseTime + 3);
> + Time->Second = AsciiStrDecimalToUintn (ReleaseTime + 6);
> +
> + return;
> +}
> +
> +EFI_STATUS
> +EFIAPI
> +FirmwareVersionInfoEntry (
> + IN EFI_PEI_FILE_HANDLE FileHandle,
> + IN CONST EFI_PEI_SERVICES **PeiServices
> + )
> +{
> + FIRMWARE_VERSION_INFO *VersionInfo;
> + EFI_TIME Time = {0};
> + CONST CHAR16 *ReleaseString =
> + (CHAR16 *)FixedPcdGetPtr (PcdFirmwareVersionString);
> +
> + GetReleaseTime (&Time);
> +
> + VersionInfo = BuildGuidHob (&gFirmwareVersionInfoHobGuid,
> + sizeof (FIRMWARE_VERSION_INFO) -
> + sizeof (VersionInfo->String) +
> + StrSize (ReleaseString));
> + if (VersionInfo == NULL) {
> + DEBUG ((DEBUG_ERROR, "[%a]:[%d] Build HOB failed!\n", __FILE__, __LINE__));
> + return EFI_OUT_OF_RESOURCES;
> + }
> +
> + CopyMem (&VersionInfo->BuildTime, &Time, sizeof (EFI_TIME));
> + CopyMem (VersionInfo->String, ReleaseString, StrSize (ReleaseString));
> +
> + return EFI_SUCCESS;
> +}
>
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#68189): https://edk2.groups.io/g/devel/message/68189
Mute This Topic: https://groups.io/mt/78622928/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
On 12/2/20 8:20 AM, Ard Biesheuvel wrote: > Is there any pressing need for this to execute in the PEI phase? These > are all compile time constants, which can easily be exposed the the > SMBIOS driver running in DXE in a different way, no? Hi Ard, I don't currently see any reason for this to execute in the PEI phase, and it introduces unnecessary complexity. I'll integrate it into Universal/Smbios instead. -- Rebecca Cran -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#68190): https://edk2.groups.io/g/devel/message/68190 Mute This Topic: https://groups.io/mt/78622928/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=-=-=-=-=-=-=-=-=-=-=-
© 2016 - 2026 Red Hat, Inc.