From: "Rebecca Cran" <rebecca@nuviainc.com>
To: devel@edk2.groups.io
Cc: Rebecca Cran <rebecca@nuviainc.com>,
Michael D Kinney <michael.d.kinney@intel.com>,
Liming Gao <gaoliming@byosoft.com.cn>,
Zhiguang Liu <zhiguang.liu@intel.com>,
Leif Lindholm <leif@nuviainc.com>,
Ard Biesheuvel <ard.biesheuvel@arm.com>,
Sami Mujawar <Sami.Mujawar@arm.com>
Subject: [PATCH v4 09/11] ArmPkg: Add FirmwareVersionInfoPeim
Date: Mon, 30 Nov 2020 17:33:56 -0700 [thread overview]
Message-ID: <20201201003358.8780-10-rebecca@nuviainc.com> (raw)
In-Reply-To: <20201201003358.8780-1-rebecca@nuviainc.com>
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
next prev parent reply other threads:[~2020-12-01 0:35 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-01 0:33 [PATCH v4 00/11] ArmPkg,MdePkg: Add Universal/Smbios and Drivers/FirmwareVersionInfoPeim Rebecca Cran
2020-12-01 0:33 ` [PATCH v4 01/11] ArmPkg: Add ARM SMC Architecture functions to ArmStdSmc.h Rebecca Cran
2020-12-01 0:33 ` [PATCH v4 02/11] MdePkg: Update IndustryStandard/SmBios.h with processor status data Rebecca Cran
2020-12-01 0:39 ` 回复: " gaoliming
2020-12-01 0:33 ` [PATCH v4 03/11] ArmPkg: Add register encoding definition for MMFR2 Rebecca Cran
2020-12-01 0:33 ` [PATCH v4 04/11] ArmPkg: Add helper to read the Memory Model Features Register 2 Rebecca Cran
2020-12-01 0:33 ` [PATCH v4 05/11] ArmPkg: Add helper function to read the Memory Model Feature Register 4 Rebecca Cran
2020-12-16 11:06 ` Sami Mujawar
2020-12-01 0:33 ` [PATCH v4 06/11] ArmPkg: Add helper to read CCIDX status Rebecca Cran
2020-12-16 11:06 ` Sami Mujawar
2020-12-01 0:33 ` [PATCH v4 07/11] ArmPkg: Fix the return type of the ReadCCSIDR function Rebecca Cran
2020-12-01 0:33 ` [PATCH v4 08/11] ArmPkg: Update ArmLibPrivate.h with cache register definitions Rebecca Cran
2020-12-01 0:33 ` Rebecca Cran [this message]
2020-12-02 15:20 ` [PATCH v4 09/11] ArmPkg: Add FirmwareVersionInfoPeim Ard Biesheuvel
2020-12-02 15:31 ` Rebecca Cran
2020-12-01 0:33 ` [PATCH v4 10/11] ArmPkg: Add Universal/Smbios, a generic SMBIOS library for ARM Rebecca Cran
2020-12-01 0:33 ` [PATCH v4 11/11] ArmPkg: Add definition of the maximum cache level in ARMv8-A Rebecca Cran
2020-12-01 21:26 ` [PATCH v4 00/11] ArmPkg,MdePkg: Add Universal/Smbios and Drivers/FirmwareVersionInfoPeim Rebecca Cran
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20201201003358.8780-10-rebecca@nuviainc.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox