From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f177.google.com (mail-pl1-f177.google.com [209.85.214.177]) by mx.groups.io with SMTP id smtpd.web11.3045.1606782902422577646 for ; Mon, 30 Nov 2020 16:35:02 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@nuviainc-com.20150623.gappssmtp.com header.s=20150623 header.b=gkuo7JPV; spf=pass (domain: nuviainc.com, ip: 209.85.214.177, mailfrom: rebecca@nuviainc.com) Received: by mail-pl1-f177.google.com with SMTP id x4so96613pln.8 for ; Mon, 30 Nov 2020 16:35:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nuviainc-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=J1A3VhHwgbLmNbmPBSP+jL5lSihZFaBJST4mL/gm7kk=; b=gkuo7JPVQbUe5jonuyDM7KD2buygD1MfF22P6H3OUOLaRbZk/cS772gf4GcLOee+L5 uccG/12R0mA8sjUgDbB6O+Ghu3NUbyyFsUUZjUixaZjFjzqH2IbMQOFFB/dDEAn77yvE XMOStKP/JRO31TQ+tJmCI6iYglUtDzq0ZKGt4YvBrO2g4nX2sZFWtB1qYNxenUaSjoxp 0IR65KK63BIi5IiRfKTUE5C8R0+kvuBV6QZ6MklpjhtseSRSnkCjbkqRG4VWBRnACUvO pkZ4uehOkmg2oMt8KF3M28X6pWQljsDl/i8qMNURvv36Sr2zIPQchWxxRTIrHd6LjWDS HaTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=J1A3VhHwgbLmNbmPBSP+jL5lSihZFaBJST4mL/gm7kk=; b=IXlvE7aX06TwWS89B88OJWPJWY6BVN6WPLF6D7iFAH9lvyz2MapXBBj0RE/a1FN8HG CRJvkUlY9Qcppss6ecI0L3vbGGmmltDrbPpSwPzrQ+rY9h1v99z7dFhWRAjAWntpVygg CU5q9wZDSUCjbI6Sc3f1Wj2mfUZp9iHEXrjLrz0Q6mFmEvSa73efbM9UOWDt+MRq0DDL v8Vo58UygwtZwWjN5tKzu+29UX4wmHIGgCuA2QuASooHeYDHRpgPCFtKPjHfNWgxZyj2 rFPPFtb1G6hCjSLcXZdL6d7zxEuxg8i873gC0o7mRRSla5rU5QEwN9SBlLc6Z84wDiza aR1g== X-Gm-Message-State: AOAM531X7rdQMnI7Q6KBH/eN2LfxP5OWlrlNGdeBtNXO0OZNLvtjeEHV 1+8uKWkE0cI2wlZNzv1X4f9D92t638yk9gHr+5B6il4ueKiPCyKEbEwLx2nLPwmkz16eUkG+Trp f717shL6njBQffAPX+msztp5W1hC+iWP3VokYqqI8fSpQnKAx3lEjJwPwV/gU/TZKT9HmFPD6 X-Google-Smtp-Source: ABdhPJw8EcICTlgcmcIC1AHRX3MDVs4wKevW4jRmcD8+OwYIp7UbUZWBn0Ij+KUl6QOmHLUcKZT0VQ== X-Received: by 2002:a17:902:a9c7:b029:d6:da66:253c with SMTP id b7-20020a170902a9c7b02900d6da66253cmr187254plr.19.1606782901502; Mon, 30 Nov 2020 16:35:01 -0800 (PST) Return-Path: Received: from cube.nuviainc.com (c-174-52-16-57.hsd1.ut.comcast.net. [174.52.16.57]) by smtp.gmail.com with ESMTPSA id 22sm57899pjb.40.2020.11.30.16.34.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Nov 2020 16:35:00 -0800 (PST) From: "Rebecca Cran" To: devel@edk2.groups.io Cc: Rebecca Cran , Michael D Kinney , Liming Gao , Zhiguang Liu , Leif Lindholm , Ard Biesheuvel , Sami Mujawar Subject: [PATCH v4 09/11] ArmPkg: Add FirmwareVersionInfoPeim Date: Mon, 30 Nov 2020 17:33:56 -0700 Message-Id: <20201201003358.8780-10-rebecca@nuviainc.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201201003358.8780-1-rebecca@nuviainc.com> References: <20201201003358.8780-1-rebecca@nuviainc.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Add the FirmwareVersionInfoPeim driver, which provides the firmware release date to the SMBIOS code. Signed-off-by: Rebecca Cran --- 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 +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +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