]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Variable/RuntimeDxe/Reclaim.c
Libraries and utilities for instrumenting regions of code and measuring their perform...
[mirror_edk2.git] / MdeModulePkg / Universal / Variable / RuntimeDxe / Reclaim.c
index e3189c49604b9dd24aa825945f6f7ecaeb299c56..df8607ff717c701fcf8d997d9b2d6c918f7cf861 100644 (file)
@@ -44,6 +44,7 @@ GetFvbHandleByAddress (
   EFI_PHYSICAL_ADDRESS                FvbBaseAddress;\r
   EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL  *Fvb;\r
   EFI_FIRMWARE_VOLUME_HEADER          *FwVolHeader;\r
+  EFI_FVB_ATTRIBUTES_2                Attributes;\r
 \r
   *FvbHandle = NULL;\r
   //\r
@@ -72,6 +73,11 @@ GetFvbHandleByAddress (
       Status = EFI_NOT_FOUND;\r
       break;\r
     }\r
+\r
+    Status = Fvb->GetAttributes (Fvb, &Attributes);\r
+    if (EFI_ERROR (Status) || ((Attributes & EFI_FVB2_WRITE_STATUS) == 0)) {\r
+      continue;     \r
+    }\r
     //\r
     // Compare the address and select the right one\r
     //\r
@@ -201,21 +207,21 @@ FtwVariableSpace (
   IN UINTN                  BufferSize\r
   )\r
 {\r
-  EFI_STATUS            Status;\r
-  EFI_HANDLE            FvbHandle;\r
-  EFI_FTW_LITE_PROTOCOL *FtwLiteProtocol;\r
-  EFI_LBA               VarLba;\r
-  UINTN                 VarOffset;\r
-  UINT8                 *FtwBuffer;\r
-  UINTN                 FtwBufferSize;\r
+  EFI_STATUS                         Status;\r
+  EFI_HANDLE                         FvbHandle;\r
+  EFI_LBA                            VarLba;\r
+  UINTN                              VarOffset;\r
+  UINT8                              *FtwBuffer;\r
+  UINTN                              FtwBufferSize;\r
+  EFI_FAULT_TOLERANT_WRITE_PROTOCOL  *FtwProtocol;\r
 \r
   //\r
   // Locate fault tolerant write protocol\r
   //\r
   Status = gBS->LocateProtocol (\r
-                  &gEfiFaultTolerantWriteLiteProtocolGuid,\r
+                  &gEfiFaultTolerantWriteProtocolGuid,\r
                   NULL,\r
-                  (VOID **) &FtwLiteProtocol\r
+                  (VOID **) &FtwProtocol\r
                   );\r
   if (EFI_ERROR (Status)) {\r
     return EFI_NOT_FOUND;\r
@@ -249,13 +255,14 @@ FtwVariableSpace (
   //\r
   // FTW write record\r
   //\r
-  Status = FtwLiteProtocol->Write (\r
-                              FtwLiteProtocol,\r
-                              FvbHandle,\r
+  Status = FtwProtocol->Write (\r
+                              FtwProtocol,\r
                               VarLba,         // LBA\r
                               VarOffset,      // Offset\r
-                              &FtwBufferSize, // NumBytes\r
-                              FtwBuffer\r
+                              FtwBufferSize,  // NumBytes\r
+                              NULL,           // PrivateData NULL\r
+                              FvbHandle,      // Fvb Handle\r
+                              FtwBuffer       // write buffer\r
                               );\r
 \r
   FreePool (FtwBuffer);\r