From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-vk1-f180.google.com (mail-vk1-f180.google.com [209.85.221.180]) by mx.groups.io with SMTP id smtpd.web08.5.1635860246657180765 for ; Tue, 02 Nov 2021 06:37:26 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@gmail.com header.s=20210112 header.b=OTYvutQ5; spf=pass (domain: gmail.com, ip: 209.85.221.180, mailfrom: pedro.falcato@gmail.com) Received: by mail-vk1-f180.google.com with SMTP id q203so2257568vka.5 for ; Tue, 02 Nov 2021 06:37:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=xl1ZLWJEbkc4WT3VV7zDzlNw695qGOViCXdtUvLFcm4=; b=OTYvutQ5Pwg8I6iiIn+T4HSROoCOsyXRc4BpWLrj/+1wReuWIwiwmeBbySv6cCCzRE yKEhwluDV8zdWElilekdbr2L/SwC7vXVsEAQx55ni6F0JOcuRablcYrxbrAwmH/Z/88u a6m0MuU8iES4WugjodvwGJm4Hkv+ugDBSelh4gLPibwgKOWnvGiRu76lUKxh/zjv7ifk a+OasQqQqzUq526AY8ejU6mWrLQ5Zizrxf3U6zvC5xTHZ10DIj/4bkusKOvf6lDN2uED xGEU411L/pAhxdsjZI9l2JD58AAqwrFQVoyxn52Yu924qe4RHaR+C8tFFNTbWq1dWIkY gTUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=xl1ZLWJEbkc4WT3VV7zDzlNw695qGOViCXdtUvLFcm4=; b=T1y3bfJ89X47Vj4AiEILcNJLoSqlAAbpuku3VbnHHCEFA7Sx0qozSqzumQ71JmB4BF D1lEctwZpT5GvFtxHJZSNBIj36QFM+tnfP2tZQYF9JXtOe4naZj5Eih98Vd6L4NPJqr7 8P2x9BGN7F/mdioISafeFufwomwloydNHdcbbxMkTLglCNS+un+Pk3TCdItK45I81Knb d0TikPr1QL9BdsZAPkU7yG2BaLgyCMJFSLhfC5QoxuFTdJDVPMIFOBedbxr4CVA0Ldbp Xcmmlwm67Nj+v1tycxAf9AtRsZz7TNTQ8G7E/GTTy9CMsPwytdDPDylHKnrs445dniDz PX9g== X-Gm-Message-State: AOAM530sZFQb8bxxr3FCvW/Jvs6/AH3XJwfHvU0QY9aBPZSXfHzKp1JJ x0qWf1g1BhAfEhmhtA2qlvZNdlqEQTOAUOZf7PsHkh8BACU= X-Google-Smtp-Source: ABdhPJyxjKwXeCwYDGDaDiosGEuRKjdarPJtH/d3HRvj3k7Mu8hDstax5rpl/puLVzKCBHbaLhE5CenwW8XDpVlzCJA= X-Received: by 2002:a1f:2345:: with SMTP id j66mr38883499vkj.20.1635860245461; Tue, 02 Nov 2021 06:37:25 -0700 (PDT) MIME-Version: 1.0 References: <20211102063801.1531-1-jie.yang@intel.com> In-Reply-To: <20211102063801.1531-1-jie.yang@intel.com> From: "Pedro Falcato" Date: Tue, 2 Nov 2021 13:37:13 +0000 Message-ID: Subject: Re: [edk2-devel][PATCH v3] MdeModulePkg/DxeCapsuleLibFmp: Use new Variable Lock interface To: edk2-devel-groups-io , jie.yang@intel.com Cc: jian.j.wang@intel.com, guomin.jiang@intel.com, Liming Gao Content-Type: multipart/alternative; boundary="000000000000d53f6005cfce6472" --000000000000d53f6005cfce6472 Content-Type: text/plain; charset="UTF-8" It looks like you have a typo in "LockVaraible". It might be a good idea to fix that. Best regards, Pedro On Tue, 2 Nov 2021, 06:38 Yang Jie, wrote: > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3699 > The code in MdeModulePkg\Library\DxeCapsuleLibFmp call the deprecated > interface VariableLockRequestToLock.c. So I changed the code in > FmpDevicePkg using RegisterBasicVariablePolicy, instead of the > deprecated interface. > > Signed-off-by: Yang Jie > Cc: Guomin Jiang > Cc: Liming Gao > Cc: Jian J Wang > --- > .../DxeCapsuleLibFmp/DxeCapsuleLib.inf | 5 +- > .../DxeCapsuleLibFmp/DxeCapsuleReportLib.c | 87 +++++++++++++------ > 2 files changed, 62 insertions(+), 30 deletions(-) > > diff --git a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf > b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf > index 05de4299fb..9212c81d68 100644 > --- a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf > +++ b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf > @@ -3,7 +3,7 @@ > # > # Capsule library instance for DXE_DRIVER module types. > # > -# Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.
> +# Copyright (c) 2016 - 2021, Intel Corporation. All rights reserved.
> # SPDX-License-Identifier: BSD-2-Clause-Patent > # > ## > @@ -51,6 +51,7 @@ > DisplayUpdateProgressLib > FileHandleLib > UefiBootManagerLib > + VariablePolicyHelperLib > > [Pcd] > gEfiMdeModulePkgTokenSpaceGuid.PcdCapsuleMax > ## CONSUMES > @@ -71,11 +72,11 @@ > [Protocols] > gEsrtManagementProtocolGuid ## CONSUMES > gEfiFirmwareManagementProtocolGuid ## CONSUMES > - gEdkiiVariableLockProtocolGuid ## SOMETIMES_CONSUMES > gEdkiiFirmwareManagementProgressProtocolGuid ## SOMETIMES_CONSUMES > gEfiSimpleFileSystemProtocolGuid ## SOMETIMES_CONSUMES > gEfiBlockIoProtocolGuid ## CONSUMES > gEfiDiskIoProtocolGuid ## CONSUMES > + gEdkiiVariablePolicyProtocolGuid ## CONSUMES > > [Guids] > gEfiFmpCapsuleGuid ## SOMETIMES_CONSUMES ## GUID > diff --git a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c > b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c > index 0ec5f20676..4536141781 100644 > --- a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c > +++ b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c > @@ -1,14 +1,13 @@ > /** @file > DXE capsule report related function. > > - Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.
> + Copyright (c) 2016 - 2021, Intel Corporation. All rights reserved.
> SPDX-License-Identifier: BSD-2-Clause-Patent > > **/ > > #include > #include > -#include > #include > #include > #include > @@ -26,6 +25,7 @@ > #include > #include > #include > +#include > > #include > > @@ -94,6 +94,39 @@ GetNewCapsuleResultIndex ( > return CurrentIndex + 1; > } > > +/** > + Lock Variable by variable policy > + > + @param[in] VariableGuid The Guid of the variable to be locked > + @param[in] VariableName The name of the variable to be locked > + @param[in] VariablePolicy The pointer of variable lock policy > +**/ > +VOID LockVaraible ( > + IN CONST EFI_GUID VariableGuid, > + IN CHAR16 *VariableName, > + IN EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicy > + ) > +{ > + EFI_STATUS Status; > + > + // Set the policies to protect the target variables > + Status = RegisterBasicVariablePolicy (VariablePolicy, > + &VariableGuid, > + VariableName, > + VARIABLE_POLICY_NO_MIN_SIZE, > + VARIABLE_POLICY_NO_MAX_SIZE, > + VARIABLE_POLICY_NO_MUST_ATTR, > + VARIABLE_POLICY_NO_CANT_ATTR, > + VARIABLE_POLICY_TYPE_LOCK_NOW); > + if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "DxeCapsuleLibFmp: Failed to lock variable %g > %s. Status = %r\n", > + &VariableGuid, > + VariableName, > + Status)); > + ASSERT_EFI_ERROR (Status); > + } > +} > + > /** > Write a new capsule status variable. > > @@ -269,16 +302,17 @@ RecordFmpCapsuleStatusVariable ( > > /** > Initialize CapsuleMax variables. > + > + @param[in] VariablePolicy The pointer of variable lock policy > **/ > VOID > InitCapsuleMaxVariable ( > - VOID > + EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicy > ) > { > EFI_STATUS Status; > UINTN Size; > CHAR16 CapsuleMaxStr[sizeof("Capsule####")]; > - EDKII_VARIABLE_LOCK_PROTOCOL *VariableLock; > > UnicodeSPrint( > CapsuleMaxStr, > @@ -297,25 +331,22 @@ InitCapsuleMaxVariable ( > ); > if (!EFI_ERROR(Status)) { > // Lock it per UEFI spec. > - Status = gBS->LocateProtocol(&gEdkiiVariableLockProtocolGuid, NULL, > (VOID **)&VariableLock); > - if (!EFI_ERROR(Status)) { > - Status = VariableLock->RequestToLock(VariableLock, L"CapsuleMax", > &gEfiCapsuleReportGuid); > - ASSERT_EFI_ERROR(Status); > - } > + LockVaraible (gEfiCapsuleReportGuid, L"CapsuleMax", VariablePolicy); > } > } > > /** > Initialize CapsuleLast variables. > + > + @param[in] VariablePolicy The pointer of variable lock policy > **/ > VOID > InitCapsuleLastVariable ( > - VOID > + EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicy > ) > { > EFI_STATUS Status; > EFI_BOOT_MODE BootMode; > - EDKII_VARIABLE_LOCK_PROTOCOL *VariableLock; > VOID *CapsuleResult; > UINTN Size; > CHAR16 CapsuleLastStr[sizeof("Capsule####")]; > @@ -372,11 +403,7 @@ InitCapsuleLastVariable ( > } > > // Lock it in normal boot path per UEFI spec. > - Status = gBS->LocateProtocol(&gEdkiiVariableLockProtocolGuid, NULL, > (VOID **)&VariableLock); > - if (!EFI_ERROR(Status)) { > - Status = VariableLock->RequestToLock(VariableLock, L"CapsuleLast", > &gEfiCapsuleReportGuid); > - ASSERT_EFI_ERROR(Status); > - } > + LockVaraible (gEfiCapsuleReportGuid, L"CapsuleLast", VariablePolicy); > } > } > > @@ -430,26 +457,21 @@ InitCapsuleUpdateVariable ( > > /** > Initialize capsule relocation info variable. > + > + @param[in] VariablePolicy The pointer of variable lock policy > **/ > VOID > InitCapsuleRelocationInfo ( > - VOID > + EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicy > ) > { > - EFI_STATUS Status; > - EDKII_VARIABLE_LOCK_PROTOCOL *VariableLock; > - > CoDClearCapsuleRelocationInfo(); > > // > // Unlock Capsule On Disk relocation Info variable only when Capsule On > Disk flag is enabled > // > if (!CoDCheckCapsuleOnDiskFlag()) { > - Status = gBS->LocateProtocol (&gEdkiiVariableLockProtocolGuid, NULL, > (VOID **) &VariableLock); > - if (!EFI_ERROR (Status)) { > - Status = VariableLock->RequestToLock (VariableLock, > COD_RELOCATION_INFO_VAR_NAME, &gEfiCapsuleVendorGuid); > - ASSERT_EFI_ERROR (Status); > - } > + LockVaraible (gEfiCapsuleVendorGuid, COD_RELOCATION_INFO_VAR_NAME, > VariablePolicy); > } > } > > @@ -461,10 +483,19 @@ InitCapsuleVariable ( > VOID > ) > { > + EFI_STATUS Status; > + EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicy; > + > + // Locate the VariablePolicy protocol > + Status = gBS->LocateProtocol (&gEdkiiVariablePolicyProtocolGuid, NULL, > (VOID**)&VariablePolicy); > + if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "DxeCapsuleReportLib %a - Could not locate > VariablePolicy protocol! %r\n", __FUNCTION__, Status)); > + ASSERT_EFI_ERROR (Status); > + } > InitCapsuleUpdateVariable(); > - InitCapsuleMaxVariable(); > - InitCapsuleLastVariable(); > - InitCapsuleRelocationInfo(); > + InitCapsuleMaxVariable (VariablePolicy); > + InitCapsuleLastVariable (VariablePolicy); > + InitCapsuleRelocationInfo (VariablePolicy); > > // > // No need to clear L"Capsule####", because OS/APP should refer > L"CapsuleLast" > -- > 2.26.2.windows.1 > > > > ------------ > Groups.io Links: You receive all messages sent to this group. > View/Reply Online (#83094): https://edk2.groups.io/g/devel/message/83094 > Mute This Topic: https://groups.io/mt/86760760/5946980 > Group Owner: devel+owner@edk2.groups.io > Unsubscribe: https://edk2.groups.io/g/devel/unsub [pedro.falcato@gmail.com > ] > ------------ > > > --000000000000d53f6005cfce6472 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
It looks like you have a typo in "LockVaraible&= quot;. It might be a good idea to fix that.

Best regards,
Pedro


On Tue, 2 Nov 2= 021, 06:38 Yang Jie, <jie.yang@int= el.com> wrote:
REF: https://bugzilla.tianocore.org/show_bug.cgi= ?id=3D3699
The code in MdeModulePkg\Library\DxeCapsuleLibFmp call the deprecated
interface VariableLockRequestToLock.c. So I changed the code in
FmpDevicePkg using RegisterBasicVariablePolicy, instead of the
deprecated interface.

Signed-off-by: Yang Jie <jie.yang@intel.com>
Cc: Guomin Jiang <guomin.jiang@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Jian J Wang <jian.j.wang@intel.com>
---
=C2=A0.../DxeCapsuleLibFmp/DxeCapsuleLib.inf=C2=A0 =C2=A0 =C2=A0 =C2=A0 |= =C2=A0 5 +-
=C2=A0.../DxeCapsuleLibFmp/DxeCapsuleReportLib.c=C2=A0 =C2=A0 | 87 ++++++++= +++++------
=C2=A02 files changed, 62 insertions(+), 30 deletions(-)

diff --git a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf b/MdeM= odulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf
index 05de4299fb..9212c81d68 100644
--- a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf
+++ b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf
@@ -3,7 +3,7 @@
=C2=A0#
=C2=A0#=C2=A0 Capsule library instance for DXE_DRIVER module types.
=C2=A0#
-#=C2=A0 Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.= <BR>
+#=C2=A0 Copyright (c) 2016 - 2021, Intel Corporation. All rights reserved.= <BR>
=C2=A0#=C2=A0 SPDX-License-Identifier: BSD-2-Clause-Patent
=C2=A0#
=C2=A0##
@@ -51,6 +51,7 @@
=C2=A0 =C2=A0DisplayUpdateProgressLib
=C2=A0 =C2=A0FileHandleLib
=C2=A0 =C2=A0UefiBootManagerLib
+=C2=A0 VariablePolicyHelperLib

=C2=A0[Pcd]
=C2=A0 =C2=A0gEfiMdeModulePkgTokenSpaceGuid.PcdCapsuleMax=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0## CONSUMES
@@ -71,11 +72,11 @@
=C2=A0[Protocols]
=C2=A0 =C2=A0gEsrtManagementProtocolGuid=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0## CONSUMES
=C2=A0 =C2=A0gEfiFirmwareManagementProtocolGuid=C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 ## CONSUMES
-=C2=A0 gEdkiiVariableLockProtocolGuid=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 ## SOMETIMES_CONSUMES
=C2=A0 =C2=A0gEdkiiFirmwareManagementProgressProtocolGuid=C2=A0 ## SOMETIME= S_CONSUMES
=C2=A0 =C2=A0gEfiSimpleFileSystemProtocolGuid=C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 ## SOMETIMES_CONSUMES
=C2=A0 =C2=A0gEfiBlockIoProtocolGuid=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0## CONSUMES
=C2=A0 =C2=A0gEfiDiskIoProtocolGuid=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ## CONSUMES
+=C2=A0 gEdkiiVariablePolicyProtocolGuid=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 ## CONSUMES

=C2=A0[Guids]
=C2=A0 =C2=A0gEfiFmpCapsuleGuid=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ## SOMETIMES_CONSUMES ## GUID
diff --git a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c b/= MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c
index 0ec5f20676..4536141781 100644
--- a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c
+++ b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c
@@ -1,14 +1,13 @@
=C2=A0/** @file
=C2=A0 =C2=A0DXE capsule report related function.

-=C2=A0 Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.&= lt;BR>
+=C2=A0 Copyright (c) 2016 - 2021, Intel Corporation. All rights reserved.&= lt;BR>
=C2=A0 =C2=A0SPDX-License-Identifier: BSD-2-Clause-Patent

=C2=A0**/

=C2=A0#include <PiDxe.h>
=C2=A0#include <Protocol/FirmwareManagement.h>
-#include <Protocol/VariableLock.h>
=C2=A0#include <Guid/CapsuleReport.h>
=C2=A0#include <Guid/FmpCapsule.h>
=C2=A0#include <Guid/CapsuleVendor.h>
@@ -26,6 +25,7 @@
=C2=A0#include <Library/ReportStatusCodeLib.h>
=C2=A0#include <Library/DevicePathLib.h>
=C2=A0#include <Library/CapsuleLib.h>
+#include <Library/VariablePolicyHelperLib.h>

=C2=A0#include <IndustryStandard/WindowsUxCapsule.h>

@@ -94,6 +94,39 @@ GetNewCapsuleResultIndex (
=C2=A0 =C2=A0return CurrentIndex + 1;
=C2=A0}

+/**
+=C2=A0 Lock Variable by variable policy
+
+=C2=A0 @param[in] VariableGuid=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0The Guid o= f the variable to be locked
+=C2=A0 @param[in] VariableName=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0The name o= f the variable to be locked
+=C2=A0 @param[in] VariablePolicy=C2=A0 =C2=A0 =C2=A0 =C2=A0The pointer of = variable lock policy
+**/
+VOID LockVaraible (
+=C2=A0 IN CONST=C2=A0 EFI_GUID=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0VariableGuid,
+=C2=A0 IN CHAR16=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 *VariableName,
+=C2=A0 IN EDKII_VARIABLE_POLICY_PROTOCOL=C2=A0 *VariablePolicy
+=C2=A0 )
+{
+=C2=A0 EFI_STATUS=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0Status;
+
+=C2=A0 // Set the policies to protect the target variables
+=C2=A0 Status =3D RegisterBasicVariablePolicy (VariablePolicy,
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 &Var= iableGuid,
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Variable= Name,
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 VARIABLE= _POLICY_NO_MIN_SIZE,
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 VARIABLE= _POLICY_NO_MAX_SIZE,
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 VARIABLE= _POLICY_NO_MUST_ATTR,
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 VARIABLE= _POLICY_NO_CANT_ATTR,
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 VARIABLE= _POLICY_TYPE_LOCK_NOW);
+=C2=A0 if (EFI_ERROR (Status)) {
+=C2=A0 =C2=A0 DEBUG ((DEBUG_ERROR, "DxeCapsuleLibFmp: Failed to lock = variable %g %s.=C2=A0 Status =3D %r\n",
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 &VariableGuid,
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 VariableName,
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Status));
+=C2=A0 =C2=A0 ASSERT_EFI_ERROR (Status);
+=C2=A0 }
+}
+
=C2=A0/**
=C2=A0 =C2=A0Write a new capsule status variable.

@@ -269,16 +302,17 @@ RecordFmpCapsuleStatusVariable (

=C2=A0/**
=C2=A0 =C2=A0Initialize CapsuleMax variables.
+
+=C2=A0 @param[in] VariablePolicy=C2=A0 =C2=A0 =C2=A0 =C2=A0The pointer of = variable lock policy
=C2=A0**/
=C2=A0VOID
=C2=A0InitCapsuleMaxVariable (
-=C2=A0 VOID
+=C2=A0 EDKII_VARIABLE_POLICY_PROTOCOL=C2=A0 =C2=A0*VariablePolicy
=C2=A0 =C2=A0)
=C2=A0{
=C2=A0 =C2=A0EFI_STATUS=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Status;
=C2=A0 =C2=A0UINTN=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Size;
=C2=A0 =C2=A0CHAR16=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0CapsuleMaxStr[sizeof("Capsule= ####")];
-=C2=A0 EDKII_VARIABLE_LOCK_PROTOCOL=C2=A0 =C2=A0 =C2=A0*VariableLock;

=C2=A0 =C2=A0UnicodeSPrint(
=C2=A0 =C2=A0 =C2=A0CapsuleMaxStr,
@@ -297,25 +331,22 @@ InitCapsuleMaxVariable (
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0);
=C2=A0 =C2=A0if (!EFI_ERROR(Status)) {
=C2=A0 =C2=A0 =C2=A0// Lock it per UEFI spec.
-=C2=A0 =C2=A0 Status =3D gBS->LocateProtocol(&gEdkiiVariableLockPro= tocolGuid, NULL, (VOID **)&VariableLock);
-=C2=A0 =C2=A0 if (!EFI_ERROR(Status)) {
-=C2=A0 =C2=A0 =C2=A0 Status =3D VariableLock->RequestToLock(VariableLoc= k, L"CapsuleMax", &gEfiCapsuleReportGuid);
-=C2=A0 =C2=A0 =C2=A0 ASSERT_EFI_ERROR(Status);
-=C2=A0 =C2=A0 }
+=C2=A0 =C2=A0 LockVaraible (gEfiCapsuleReportGuid, L"CapsuleMax"= , VariablePolicy);
=C2=A0 =C2=A0}
=C2=A0}

=C2=A0/**
=C2=A0 =C2=A0Initialize CapsuleLast variables.
+
+=C2=A0 @param[in] VariablePolicy=C2=A0 =C2=A0 =C2=A0 =C2=A0The pointer of = variable lock policy
=C2=A0**/
=C2=A0VOID
=C2=A0InitCapsuleLastVariable (
-=C2=A0 VOID
+=C2=A0 EDKII_VARIABLE_POLICY_PROTOCOL=C2=A0 =C2=A0*VariablePolicy
=C2=A0 =C2=A0)
=C2=A0{
=C2=A0 =C2=A0EFI_STATUS=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Status;
=C2=A0 =C2=A0EFI_BOOT_MODE=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 BootMode;
-=C2=A0 EDKII_VARIABLE_LOCK_PROTOCOL=C2=A0 =C2=A0 =C2=A0*VariableLock;
=C2=A0 =C2=A0VOID=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0*CapsuleResult;
=C2=A0 =C2=A0UINTN=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Size;
=C2=A0 =C2=A0CHAR16=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0CapsuleLastStr[sizeof("Capsul= e####")];
@@ -372,11 +403,7 @@ InitCapsuleLastVariable (
=C2=A0 =C2=A0 =C2=A0}

=C2=A0 =C2=A0 =C2=A0// Lock it in normal boot path per UEFI spec.
-=C2=A0 =C2=A0 Status =3D gBS->LocateProtocol(&gEdkiiVariableLockPro= tocolGuid, NULL, (VOID **)&VariableLock);
-=C2=A0 =C2=A0 if (!EFI_ERROR(Status)) {
-=C2=A0 =C2=A0 =C2=A0 Status =3D VariableLock->RequestToLock(VariableLoc= k, L"CapsuleLast", &gEfiCapsuleReportGuid);
-=C2=A0 =C2=A0 =C2=A0 ASSERT_EFI_ERROR(Status);
-=C2=A0 =C2=A0 }
+=C2=A0 =C2=A0 LockVaraible (gEfiCapsuleReportGuid, L"CapsuleLast"= ;, VariablePolicy);
=C2=A0 =C2=A0}
=C2=A0}

@@ -430,26 +457,21 @@ InitCapsuleUpdateVariable (

=C2=A0/**
=C2=A0 =C2=A0Initialize capsule relocation info variable.
+
+=C2=A0 @param[in] VariablePolicy=C2=A0 =C2=A0 =C2=A0 =C2=A0The pointer of = variable lock policy
=C2=A0**/
=C2=A0VOID
=C2=A0InitCapsuleRelocationInfo (
-=C2=A0 VOID
+=C2=A0 EDKII_VARIABLE_POLICY_PROTOCOL=C2=A0 =C2=A0*VariablePolicy
=C2=A0 =C2=A0)
=C2=A0{
-=C2=A0 EFI_STATUS=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0Status;
-=C2=A0 EDKII_VARIABLE_LOCK_PROTOCOL *VariableLock;
-
=C2=A0 =C2=A0CoDClearCapsuleRelocationInfo();

=C2=A0 =C2=A0//
=C2=A0 =C2=A0// Unlock Capsule On Disk relocation Info variable only when C= apsule On Disk flag is enabled
=C2=A0 =C2=A0//
=C2=A0 =C2=A0if (!CoDCheckCapsuleOnDiskFlag()) {
-=C2=A0 =C2=A0 Status =3D gBS->LocateProtocol (&gEdkiiVariableLockPr= otocolGuid, NULL, (VOID **) &VariableLock);
-=C2=A0 =C2=A0 if (!EFI_ERROR (Status)) {
-=C2=A0 =C2=A0 =C2=A0 Status =3D VariableLock->RequestToLock (VariableLo= ck, COD_RELOCATION_INFO_VAR_NAME, &gEfiCapsuleVendorGuid);
-=C2=A0 =C2=A0 =C2=A0 ASSERT_EFI_ERROR (Status);
-=C2=A0 =C2=A0 }
+=C2=A0 =C2=A0 LockVaraible (gEfiCapsuleVendorGuid, COD_RELOCATION_INFO_VAR= _NAME, VariablePolicy);
=C2=A0 =C2=A0}
=C2=A0}

@@ -461,10 +483,19 @@ InitCapsuleVariable (
=C2=A0 =C2=A0VOID
=C2=A0 =C2=A0)
=C2=A0{
+=C2=A0 EFI_STATUS=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0Status;
+=C2=A0 EDKII_VARIABLE_POLICY_PROTOCOL=C2=A0 =C2=A0*VariablePolicy;
+
+=C2=A0 // Locate the VariablePolicy protocol
+=C2=A0 Status =3D gBS->LocateProtocol (&gEdkiiVariablePolicyProtoco= lGuid, NULL, (VOID**)&VariablePolicy);
+=C2=A0 if (EFI_ERROR (Status)) {
+=C2=A0 =C2=A0 DEBUG ((DEBUG_ERROR, "DxeCapsuleReportLib %a - Could no= t locate VariablePolicy protocol! %r\n", __FUNCTION__, Status));
+=C2=A0 =C2=A0 ASSERT_EFI_ERROR (Status);
+=C2=A0 }
=C2=A0 =C2=A0InitCapsuleUpdateVariable();
-=C2=A0 InitCapsuleMaxVariable();
-=C2=A0 InitCapsuleLastVariable();
-=C2=A0 InitCapsuleRelocationInfo();
+=C2=A0 InitCapsuleMaxVariable (VariablePolicy);
+=C2=A0 InitCapsuleLastVariable (VariablePolicy);
+=C2=A0 InitCapsuleRelocationInfo (VariablePolicy);

=C2=A0 =C2=A0//
=C2=A0 =C2=A0// No need to clear L"Capsule####", because OS/APP s= hould refer L"CapsuleLast"
--
2.26.2.windows.1



------------
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#83094): https://edk2.grou= ps.io/g/devel/message/83094
Mute This Topic: https://groups.io/mt/86760760/59469= 80
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub= [pedro.falcato@gmail.com]
------------


--000000000000d53f6005cfce6472--