]> git.proxmox.com Git - mirror_edk2.git/blobdiff - FmpDevicePkg/FmpDxe/VariableSupport.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / FmpDevicePkg / FmpDxe / VariableSupport.c
index d06d6b36c7755a2ad0565ab99b8dc45ba72ef76f..541e5e0f5fc75668b56512289b8cb763955671ce 100644 (file)
@@ -3,7 +3,7 @@
   firmware updates.\r
 \r
   Copyright (c) 2016, Microsoft Corporation. All rights reserved.<BR>\r
-  Copyright (c) 2018 - 2019, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR>\r
 \r
   SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
@@ -45,10 +45,11 @@ GetFmpVariable (
              (VOID **)&Buffer,\r
              &Size\r
              );\r
-  if (!EFI_ERROR (Status) && Size == sizeof (*Value) && Buffer != NULL) {\r
+  if (!EFI_ERROR (Status) && (Size == sizeof (*Value)) && (Buffer != NULL)) {\r
     *Valid = TRUE;\r
     *Value = *Buffer;\r
   }\r
+\r
   if (Buffer != NULL) {\r
     FreePool (Buffer);\r
   }\r
@@ -75,9 +76,9 @@ DeleteFmpVariable (
   if (Valid) {\r
     Status = gRT->SetVariable (VariableName, &gEfiCallerIdGuid, 0, 0, NULL);\r
     if (EFI_ERROR (Status)) {\r
-      DEBUG ((DEBUG_ERROR, "Failed to delete FMP Variable %s.  Status = %r\n", VariableName, Status));\r
+      DEBUG ((DEBUG_ERROR, "FmpDxe(%s): Failed to delete variable %s.  Status = %r\n", mImageIdName, VariableName, Status));\r
     } else {\r
-      DEBUG ((DEBUG_INFO, "Deleted FMP Variable %s\n", VariableName));\r
+      DEBUG ((DEBUG_INFO, "FmpDxe(%s): Deleted variable %s\n", mImageIdName, VariableName));\r
     }\r
   }\r
 }\r
@@ -105,23 +106,26 @@ GetFmpControllerState (
 \r
   FmpControllerState = NULL;\r
   Size               = 0;\r
-  Status = GetVariable2 (\r
-             Private->FmpStateVariableName,\r
-             &gEfiCallerIdGuid,\r
-             (VOID **)&FmpControllerState,\r
-             &Size\r
-             );\r
-  if (EFI_ERROR (Status) || FmpControllerState == NULL) {\r
-    DEBUG ((DEBUG_ERROR, "Failed to get the FMP Controller State.  Status = %r\n", Status));\r
+  Status             = GetVariable2 (\r
+                         Private->FmpStateVariableName,\r
+                         &gEfiCallerIdGuid,\r
+                         (VOID **)&FmpControllerState,\r
+                         &Size\r
+                         );\r
+  if (EFI_ERROR (Status) || (FmpControllerState == NULL)) {\r
+    DEBUG ((DEBUG_ERROR, "FmpDxe(%s): Failed to get the controller state.  Status = %r\n", mImageIdName, Status));\r
   } else {\r
     if (Size == sizeof (*FmpControllerState)) {\r
       return FmpControllerState;\r
     }\r
-    DEBUG ((DEBUG_ERROR, "Getting FMP Controller State returned a size different than expected. Size = 0x%x\n", Size));\r
+\r
+    DEBUG ((DEBUG_ERROR, "FmpDxe(%s): Getting controller state returned a size different than expected. Size = 0x%x\n", mImageIdName, Size));\r
   }\r
+\r
   if (FmpControllerState != NULL) {\r
     FreePool (FmpControllerState);\r
   }\r
+\r
   return NULL;\r
 }\r
 \r
@@ -147,20 +151,31 @@ GenerateFmpVariableName (
   IN  CHAR16  *BaseVariableName\r
   )\r
 {\r
+  UINTN   Size;\r
   CHAR16  *VariableName;\r
 \r
-  VariableName = CatSPrint (NULL, BaseVariableName);\r
+  //\r
+  // Allocate Unicode string with room for BaseVariableName and a 16 digit\r
+  // hexadecimal value for the HardwareInstance value.\r
+  //\r
+  Size         = StrSize (BaseVariableName) + 16 * sizeof (CHAR16);\r
+  VariableName = AllocateCopyPool (Size, BaseVariableName);\r
   if (VariableName == NULL) {\r
-    DEBUG ((DEBUG_ERROR, "Failed to generate FMP variable name %s.\n", BaseVariableName));\r
+    DEBUG ((DEBUG_ERROR, "FmpDxe(%s): Failed to generate variable name %s.\n", mImageIdName, BaseVariableName));\r
     return VariableName;\r
   }\r
+\r
   if (HardwareInstance == 0) {\r
     return VariableName;\r
   }\r
-  VariableName = CatSPrint (VariableName, L"%016lx", HardwareInstance);\r
-  if (VariableName == NULL) {\r
-    DEBUG ((DEBUG_ERROR, "Failed to generate FMP variable name %s.\n", BaseVariableName));\r
-  }\r
+\r
+  UnicodeValueToStringS (\r
+    &VariableName[StrLen (BaseVariableName)],\r
+    Size,\r
+    PREFIX_ZERO | RADIX_HEX,\r
+    HardwareInstance,\r
+    16\r
+    );\r
   return VariableName;\r
 }\r
 \r
@@ -193,22 +208,26 @@ GenerateFmpVariableNames (
   IN OUT FIRMWARE_MANAGEMENT_PRIVATE_DATA  *Private\r
   )\r
 {\r
-  EFI_STATUS                   Status;\r
-  VOID                         *Buffer;\r
+  EFI_STATUS            Status;\r
+  VOID                  *Buffer;\r
   FMP_CONTROLLER_STATE  FmpControllerState;\r
 \r
   if (Private->VersionVariableName != NULL) {\r
     FreePool (Private->VersionVariableName);\r
   }\r
+\r
   if (Private->LsvVariableName != NULL) {\r
     FreePool (Private->LsvVariableName);\r
   }\r
+\r
   if (Private->LastAttemptStatusVariableName != NULL) {\r
     FreePool (Private->LastAttemptStatusVariableName);\r
   }\r
+\r
   if (Private->LastAttemptVersionVariableName != NULL) {\r
     FreePool (Private->LastAttemptVersionVariableName);\r
   }\r
+\r
   if (Private->FmpStateVariableName != NULL) {\r
     FreePool (Private->FmpStateVariableName);\r
   }\r
@@ -234,11 +253,11 @@ GenerateFmpVariableNames (
                                     VARNAME_FMPSTATE\r
                                     );\r
 \r
-  DEBUG ((DEBUG_INFO, "FmpDxe Variable %g %s\n", &gEfiCallerIdGuid, Private->VersionVariableName));\r
-  DEBUG ((DEBUG_INFO, "FmpDxe Variable %g %s\n", &gEfiCallerIdGuid, Private->LsvVariableName));\r
-  DEBUG ((DEBUG_INFO, "FmpDxe Variable %g %s\n", &gEfiCallerIdGuid, Private->LastAttemptStatusVariableName));\r
-  DEBUG ((DEBUG_INFO, "FmpDxe Variable %g %s\n", &gEfiCallerIdGuid, Private->LastAttemptVersionVariableName));\r
-  DEBUG ((DEBUG_INFO, "FmpDxe Variable %g %s\n", &gEfiCallerIdGuid, Private->FmpStateVariableName));\r
+  DEBUG ((DEBUG_INFO, "FmpDxe(%s): Variable %g %s\n", mImageIdName, &gEfiCallerIdGuid, Private->VersionVariableName));\r
+  DEBUG ((DEBUG_INFO, "FmpDxe(%s): Variable %g %s\n", mImageIdName, &gEfiCallerIdGuid, Private->LsvVariableName));\r
+  DEBUG ((DEBUG_INFO, "FmpDxe(%s): Variable %g %s\n", mImageIdName, &gEfiCallerIdGuid, Private->LastAttemptStatusVariableName));\r
+  DEBUG ((DEBUG_INFO, "FmpDxe(%s): Variable %g %s\n", mImageIdName, &gEfiCallerIdGuid, Private->LastAttemptVersionVariableName));\r
+  DEBUG ((DEBUG_INFO, "FmpDxe(%s): Variable %g %s\n", mImageIdName, &gEfiCallerIdGuid, Private->FmpStateVariableName));\r
 \r
   Buffer = GetFmpControllerState (Private);\r
   if (Buffer != NULL) {\r
@@ -258,7 +277,7 @@ GenerateFmpVariableNames (
   // FMP Controller State was either not found or is wrong size.\r
   // Create a new FMP Controller State variable with the correct size.\r
   //\r
-  DEBUG ((DEBUG_INFO, "Create FMP Controller State\n"));\r
+  DEBUG ((DEBUG_INFO, "FmpDxe(%s): Create controller state\n", mImageIdName));\r
   GetFmpVariable (\r
     Private->VersionVariableName,\r
     &FmpControllerState.VersionValid,\r
@@ -292,7 +311,7 @@ GenerateFmpVariableNames (
     // delete the individual variables.  They can be used again on next boot\r
     // to create the FMP Controller State.\r
     //\r
-    DEBUG ((DEBUG_ERROR, "Failed to create FMP Controller State.  Status = %r\n", Status));\r
+    DEBUG ((DEBUG_ERROR, "FmpDxe(%s): Failed to create controller state.  Status = %r\n", mImageIdName, Status));\r
   } else {\r
     DeleteFmpVariable (Private->VersionVariableName);\r
     DeleteFmpVariable (Private->LsvVariableName);\r
@@ -322,19 +341,24 @@ GetVersionFromVariable (
   FMP_CONTROLLER_STATE  *FmpControllerState;\r
   UINT32                Value;\r
 \r
-  Value = DEFAULT_VERSION;\r
+  Value              = DEFAULT_VERSION;\r
   FmpControllerState = GetFmpControllerState (Private);\r
   if (FmpControllerState != NULL) {\r
     if (FmpControllerState->VersionValid) {\r
       Value = FmpControllerState->Version;\r
-      DEBUG ((DEBUG_INFO, "Get FMP Variable %g %s Version %08x\n",\r
+      DEBUG ((\r
+        DEBUG_INFO,\r
+        "FmpDxe(%s): Get variable %g %s Version %08x\n",\r
+        mImageIdName,\r
         &gEfiCallerIdGuid,\r
         Private->FmpStateVariableName,\r
         Value\r
         ));\r
     }\r
+\r
     FreePool (FmpControllerState);\r
   }\r
+\r
   return Value;\r
 }\r
 \r
@@ -360,19 +384,24 @@ GetLowestSupportedVersionFromVariable (
   FMP_CONTROLLER_STATE  *FmpControllerState;\r
   UINT32                Value;\r
 \r
-  Value = DEFAULT_LOWESTSUPPORTEDVERSION;\r
+  Value              = DEFAULT_LOWESTSUPPORTEDVERSION;\r
   FmpControllerState = GetFmpControllerState (Private);\r
   if (FmpControllerState != NULL) {\r
     if (FmpControllerState->LsvValid) {\r
       Value = FmpControllerState->Lsv;\r
-      DEBUG ((DEBUG_INFO, "Get FMP Variable %g %s LowestSupportedVersion %08x\n",\r
+      DEBUG ((\r
+        DEBUG_INFO,\r
+        "FmpDxe(%s): Get variable %g %s LowestSupportedVersion %08x\n",\r
+        mImageIdName,\r
         &gEfiCallerIdGuid,\r
         Private->FmpStateVariableName,\r
         Value\r
         ));\r
     }\r
+\r
     FreePool (FmpControllerState);\r
   }\r
+\r
   return Value;\r
 }\r
 \r
@@ -397,19 +426,24 @@ GetLastAttemptStatusFromVariable (
   FMP_CONTROLLER_STATE  *FmpControllerState;\r
   UINT32                Value;\r
 \r
-  Value = DEFAULT_LASTATTEMPTSTATUS;\r
+  Value              = DEFAULT_LASTATTEMPTSTATUS;\r
   FmpControllerState = GetFmpControllerState (Private);\r
   if (FmpControllerState != NULL) {\r
     if (FmpControllerState->LastAttemptStatusValid) {\r
       Value = FmpControllerState->LastAttemptStatus;\r
-      DEBUG ((DEBUG_INFO, "Get FMP Variable %g %s LastAttemptStatus %08x\n",\r
+      DEBUG ((\r
+        DEBUG_INFO,\r
+        "FmpDxe(%s): Get variable %g %s LastAttemptStatus %08x\n",\r
+        mImageIdName,\r
         &gEfiCallerIdGuid,\r
         Private->FmpStateVariableName,\r
         Value\r
         ));\r
     }\r
+\r
     FreePool (FmpControllerState);\r
   }\r
+\r
   return Value;\r
 }\r
 \r
@@ -434,19 +468,24 @@ GetLastAttemptVersionFromVariable (
   FMP_CONTROLLER_STATE  *FmpControllerState;\r
   UINT32                Value;\r
 \r
-  Value = DEFAULT_LASTATTEMPTVERSION;\r
+  Value              = DEFAULT_LASTATTEMPTVERSION;\r
   FmpControllerState = GetFmpControllerState (Private);\r
   if (FmpControllerState != NULL) {\r
     if (FmpControllerState->LastAttemptVersionValid) {\r
       Value = FmpControllerState->LastAttemptVersion;\r
-      DEBUG ((DEBUG_INFO, "Get FMP Variable %g %s LastAttemptVersion %08x\n",\r
+      DEBUG ((\r
+        DEBUG_INFO,\r
+        "FmpDxe(%s): Get variable %g %s LastAttemptVersion %08x\n",\r
+        mImageIdName,\r
         &gEfiCallerIdGuid,\r
         Private->FmpStateVariableName,\r
         Value\r
         ));\r
     }\r
+\r
     FreePool (FmpControllerState);\r
   }\r
+\r
   return Value;\r
 }\r
 \r
@@ -482,31 +521,37 @@ SetVersionInVariable (
   if (!FmpControllerState->VersionValid) {\r
     Update = TRUE;\r
   }\r
+\r
   if (FmpControllerState->Version != Version) {\r
     Update = TRUE;\r
   }\r
+\r
   if (!Update) {\r
-    DEBUG ((DEBUG_INFO, "No need to update FMP Controller State.  Same value as before.\n"));\r
+    DEBUG ((DEBUG_INFO, "FmpDxe(%s): No need to update controller state.  Same value as before.\n", mImageIdName));\r
   } else {\r
     FmpControllerState->VersionValid = TRUE;\r
     FmpControllerState->Version      = Version;\r
-    Status = gRT->SetVariable (\r
-                    Private->FmpStateVariableName,\r
-                    &gEfiCallerIdGuid,\r
-                    EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
-                    sizeof (*FmpControllerState),\r
-                    FmpControllerState\r
-                    );\r
+    Status                           = gRT->SetVariable (\r
+                                              Private->FmpStateVariableName,\r
+                                              &gEfiCallerIdGuid,\r
+                                              EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
+                                              sizeof (*FmpControllerState),\r
+                                              FmpControllerState\r
+                                              );\r
     if (EFI_ERROR (Status)) {\r
-      DEBUG ((DEBUG_ERROR, "Failed to update FMP Controller State.  Status = %r\n", Status));\r
+      DEBUG ((DEBUG_ERROR, "FmpDxe(%s): Failed to update controller state.  Status = %r\n", mImageIdName, Status));\r
     } else {\r
-      DEBUG ((DEBUG_INFO, "Set FMP Variable %g %s Version %08x\n",\r
+      DEBUG ((\r
+        DEBUG_INFO,\r
+        "FmpDxe(%s): Set variable %g %s Version %08x\n",\r
+        mImageIdName,\r
         &gEfiCallerIdGuid,\r
         Private->FmpStateVariableName,\r
         Version\r
         ));\r
     }\r
   }\r
+\r
   FreePool (FmpControllerState);\r
 }\r
 \r
@@ -544,31 +589,37 @@ SetLowestSupportedVersionInVariable (
   if (!FmpControllerState->LsvValid) {\r
     Update = TRUE;\r
   }\r
+\r
   if (FmpControllerState->Lsv < LowestSupportedVersion) {\r
     Update = TRUE;\r
   }\r
+\r
   if (!Update) {\r
-    DEBUG ((DEBUG_INFO, "No need to update FMP Controller State.  Same value as before.\n"));\r
+    DEBUG ((DEBUG_INFO, "FmpDxe(%s): No need to update controller state.  Same value as before.\n", mImageIdName));\r
   } else {\r
     FmpControllerState->LsvValid = TRUE;\r
     FmpControllerState->Lsv      = LowestSupportedVersion;\r
-    Status = gRT->SetVariable (\r
-                    Private->FmpStateVariableName,\r
-                    &gEfiCallerIdGuid,\r
-                    EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
-                    sizeof (*FmpControllerState),\r
-                    FmpControllerState\r
-                    );\r
+    Status                       = gRT->SetVariable (\r
+                                          Private->FmpStateVariableName,\r
+                                          &gEfiCallerIdGuid,\r
+                                          EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
+                                          sizeof (*FmpControllerState),\r
+                                          FmpControllerState\r
+                                          );\r
     if (EFI_ERROR (Status)) {\r
-      DEBUG ((DEBUG_ERROR, "Failed to update FMP Controller State.  Status = %r\n", Status));\r
+      DEBUG ((DEBUG_ERROR, "FmpDxe(%s): Failed to update controller state.  Status = %r\n", mImageIdName, Status));\r
     } else {\r
-      DEBUG ((DEBUG_INFO, "Set FMP Variable %g %s LowestSupportedVersion %08x\n",\r
+      DEBUG ((\r
+        DEBUG_INFO,\r
+        "FmpDxe(%s): Set variable %g %s LowestSupportedVersion %08x\n",\r
+        mImageIdName,\r
         &gEfiCallerIdGuid,\r
         Private->FmpStateVariableName,\r
         LowestSupportedVersion\r
         ));\r
     }\r
   }\r
+\r
   FreePool (FmpControllerState);\r
 }\r
 \r
@@ -606,31 +657,37 @@ SetLastAttemptStatusInVariable (
   if (!FmpControllerState->LastAttemptStatusValid) {\r
     Update = TRUE;\r
   }\r
+\r
   if (FmpControllerState->LastAttemptStatus != LastAttemptStatus) {\r
     Update = TRUE;\r
   }\r
+\r
   if (!Update) {\r
-    DEBUG ((DEBUG_INFO, "No need to update FMP Controller State.  Same value as before.\n"));\r
+    DEBUG ((DEBUG_INFO, "FmpDxe(%s): No need to update controller state.  Same value as before.\n", mImageIdName));\r
   } else {\r
     FmpControllerState->LastAttemptStatusValid = TRUE;\r
     FmpControllerState->LastAttemptStatus      = LastAttemptStatus;\r
-    Status = gRT->SetVariable (\r
-                    Private->FmpStateVariableName,\r
-                    &gEfiCallerIdGuid,\r
-                    EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
-                    sizeof (*FmpControllerState),\r
-                    FmpControllerState\r
-                    );\r
+    Status                                     = gRT->SetVariable (\r
+                                                        Private->FmpStateVariableName,\r
+                                                        &gEfiCallerIdGuid,\r
+                                                        EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
+                                                        sizeof (*FmpControllerState),\r
+                                                        FmpControllerState\r
+                                                        );\r
     if (EFI_ERROR (Status)) {\r
-      DEBUG ((DEBUG_ERROR, "Failed to update FMP Controller State.  Status = %r\n", Status));\r
+      DEBUG ((DEBUG_ERROR, "FmpDxe(%s): Failed to update controller state.  Status = %r\n", mImageIdName, Status));\r
     } else {\r
-      DEBUG ((DEBUG_INFO, "Set FMP Variable %g %s LastAttemptStatus %08x\n",\r
+      DEBUG ((\r
+        DEBUG_INFO,\r
+        "FmpDxe(%s): Set variable %g %s LastAttemptStatus %08x\n",\r
+        mImageIdName,\r
         &gEfiCallerIdGuid,\r
         Private->FmpStateVariableName,\r
         LastAttemptStatus\r
         ));\r
     }\r
   }\r
+\r
   FreePool (FmpControllerState);\r
 }\r
 \r
@@ -668,31 +725,37 @@ SetLastAttemptVersionInVariable (
   if (!FmpControllerState->LastAttemptVersionValid) {\r
     Update = TRUE;\r
   }\r
+\r
   if (FmpControllerState->LastAttemptVersion != LastAttemptVersion) {\r
     Update = TRUE;\r
   }\r
+\r
   if (!Update) {\r
-    DEBUG ((DEBUG_INFO, "No need to update FMP Controller State.  Same value as before.\n"));\r
+    DEBUG ((DEBUG_INFO, "FmpDxe(%s): No need to update controller state.  Same value as before.\n", mImageIdName));\r
   } else {\r
     FmpControllerState->LastAttemptVersionValid = TRUE;\r
     FmpControllerState->LastAttemptVersion      = LastAttemptVersion;\r
-    Status = gRT->SetVariable (\r
-                    Private->FmpStateVariableName,\r
-                    &gEfiCallerIdGuid,\r
-                    EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
-                    sizeof (*FmpControllerState),\r
-                    FmpControllerState\r
-                    );\r
+    Status                                      = gRT->SetVariable (\r
+                                                         Private->FmpStateVariableName,\r
+                                                         &gEfiCallerIdGuid,\r
+                                                         EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
+                                                         sizeof (*FmpControllerState),\r
+                                                         FmpControllerState\r
+                                                         );\r
     if (EFI_ERROR (Status)) {\r
-      DEBUG ((DEBUG_ERROR, "Failed to update FMP Controller State.  Status = %r\n", Status));\r
+      DEBUG ((DEBUG_ERROR, "FmpDxe(%s): Failed to update controller state.  Status = %r\n", mImageIdName, Status));\r
     } else {\r
-      DEBUG ((DEBUG_INFO, "Set FMP Variable %g %s LastAttemptVersion %08x\n",\r
+      DEBUG ((\r
+        DEBUG_INFO,\r
+        "FmpDxe(%s): Set variable %g %s LastAttemptVersion %08x\n",\r
+        mImageIdName,\r
         &gEfiCallerIdGuid,\r
         Private->FmpStateVariableName,\r
         LastAttemptVersion\r
         ));\r
     }\r
   }\r
+\r
   FreePool (FmpControllerState);\r
 }\r
 \r
@@ -712,31 +775,39 @@ SetLastAttemptVersionInVariable (
 static\r
 EFI_STATUS\r
 LockFmpVariable (\r
-  IN EFI_STATUS                    PreviousStatus,\r
-  IN EDKII_VARIABLE_LOCK_PROTOCOL  *VariableLock,\r
-  IN CHAR16                        *VariableName\r
+  IN EFI_STATUS                      PreviousStatus,\r
+  IN EDKII_VARIABLE_POLICY_PROTOCOL  *VariablePolicy,\r
+  IN CHAR16                          *VariableName\r
   )\r
 {\r
   EFI_STATUS  Status;\r
 \r
-  Status = VariableLock->RequestToLock (\r
-                           VariableLock,\r
-                           VariableName,\r
-                           &gEfiCallerIdGuid\r
-                           );\r
-  if (!EFI_ERROR (Status)) {\r
-    return PreviousStatus;\r
+  // If success, go ahead and set the policies to protect the target variables.\r
+  Status = RegisterBasicVariablePolicy (\r
+             VariablePolicy,\r
+             &gEfiCallerIdGuid,\r
+             VariableName,\r
+             VARIABLE_POLICY_NO_MIN_SIZE,\r
+             VARIABLE_POLICY_NO_MAX_SIZE,\r
+             VARIABLE_POLICY_NO_MUST_ATTR,\r
+             VARIABLE_POLICY_NO_CANT_ATTR,\r
+             VARIABLE_POLICY_TYPE_LOCK_NOW\r
+             );\r
+  if (EFI_ERROR (Status)) {\r
+    DEBUG ((\r
+      DEBUG_ERROR,\r
+      "FmpDxe(%s): Failed to lock variable %g %s. Status = %r\n",\r
+      mImageIdName,\r
+      &gEfiCallerIdGuid,\r
+      VariableName,\r
+      Status\r
+      ));\r
   }\r
 \r
-  DEBUG ((DEBUG_ERROR, "FmpDxe: Failed to lock variable %g %s.  Status = %r\n",\r
-    &gEfiCallerIdGuid,\r
-    VariableName,\r
-    Status\r
-    ));\r
-\r
   if (EFI_ERROR (PreviousStatus)) {\r
     return PreviousStatus;\r
   }\r
+\r
   return Status;\r
 }\r
 \r
@@ -755,26 +826,22 @@ LockAllFmpVariables (
   FIRMWARE_MANAGEMENT_PRIVATE_DATA  *Private\r
   )\r
 {\r
-  EFI_STATUS                    Status;\r
-  EDKII_VARIABLE_LOCK_PROTOCOL  *VariableLock;\r
-\r
-  VariableLock = NULL;\r
-  Status = gBS->LocateProtocol (\r
-                  &gEdkiiVariableLockProtocolGuid,\r
-                  NULL,\r
-                  (VOID **)&VariableLock\r
-                  );\r
-  if (EFI_ERROR (Status) || VariableLock == NULL) {\r
-    DEBUG ((DEBUG_ERROR, "FmpDxe: Failed to locate Variable Lock Protocol (%r).\n", Status));\r
-    return EFI_UNSUPPORTED;\r
+  EFI_STATUS                      Status;\r
+  EDKII_VARIABLE_POLICY_PROTOCOL  *VariablePolicy;\r
+\r
+  // Locate the VariablePolicy protocol.\r
+  Status = gBS->LocateProtocol (&gEdkiiVariablePolicyProtocolGuid, NULL, (VOID **)&VariablePolicy);\r
+  if (EFI_ERROR (Status)) {\r
+    DEBUG ((DEBUG_ERROR, "FmpDxe %a - Could not locate VariablePolicy protocol! %r\n", __FUNCTION__, Status));\r
+    return Status;\r
   }\r
 \r
   Status = EFI_SUCCESS;\r
-  Status = LockFmpVariable (Status, VariableLock, Private->VersionVariableName);\r
-  Status = LockFmpVariable (Status, VariableLock, Private->LsvVariableName);\r
-  Status = LockFmpVariable (Status, VariableLock, Private->LastAttemptStatusVariableName);\r
-  Status = LockFmpVariable (Status, VariableLock, Private->LastAttemptVersionVariableName);\r
-  Status = LockFmpVariable (Status, VariableLock, Private->FmpStateVariableName);\r
+  Status = LockFmpVariable (Status, VariablePolicy, Private->VersionVariableName);\r
+  Status = LockFmpVariable (Status, VariablePolicy, Private->LsvVariableName);\r
+  Status = LockFmpVariable (Status, VariablePolicy, Private->LastAttemptStatusVariableName);\r
+  Status = LockFmpVariable (Status, VariablePolicy, Private->LastAttemptVersionVariableName);\r
+  Status = LockFmpVariable (Status, VariablePolicy, Private->FmpStateVariableName);\r
 \r
   return Status;\r
 }\r