[edk2-devel] [PATCH v4 09/11] ArmPkg: Add FirmwareVersionInfoPeim

Rebecca Cran rebecca at nuviainc.com
Tue Dec 1 00:33:56 UTC 2020


Add the FirmwareVersionInfoPeim driver, which provides the firmware
release date to the SMBIOS code.

Signed-off-by: Rebecca Cran <rebecca at 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/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-





More information about the edk2-devel-archive mailing list