]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Covert the FvAttributes back to format defined in PI spec after calling the Framework...
authorqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 18 Nov 2008 14:18:25 +0000 (14:18 +0000)
committerqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 18 Nov 2008 14:18:25 +0000 (14:18 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@6611 6f19259b-4bc3-4df7-8a09-765794883524

EdkCompatibilityPkg/Compatibility/Fv2ToFvThunk/Fv2ToFvThunk.c

index 5a89866b0d4473b2929d4bcd9d5db28d0c693ef6..6a2b1f8643f6dec1a42027ba64d98e311919ed17 100644 (file)
@@ -783,6 +783,24 @@ InitializeFirmwareVolume (
   return EFI_SUCCESS;\r
 }\r
 \r
+EFI_FV_ATTRIBUTES\r
+FvAttributesToFv2Attributes (\r
+  EFI_FV_ATTRIBUTES FvAttributes\r
+  )\r
+{\r
+  INTN                           Alignment;\r
+  \r
+  Alignment = LowBitSet64 (RShiftU64 (FvAttributes, 16) & 0xffff);\r
+  if (Alignment != -1) {\r
+    Alignment = Alignment << 16;\r
+  } else {\r
+    Alignment = 0;\r
+  }\r
+  FvAttributes = (FvAttributes & 0x1ff) | Alignment;\r
+\r
+  return FvAttributes;\r
+}\r
+\r
 /**\r
   \r
   Because of constraints imposed by the underlying firmware\r
@@ -827,13 +845,7 @@ Fv2GetVolumeAttributes (
                              (FRAMEWORK_EFI_FV_ATTRIBUTES *)FvAttributes\r
                              );\r
   if (!EFI_ERROR (Status)) {\r
-    Alignment = LowBitSet64 (RShiftU64 (*FvAttributes, 16) & 0xffff);\r
-    if (Alignment != -1) {\r
-      Alignment = Alignment << 16;\r
-    } else {\r
-      Alignment = 0;\r
-    }\r
-    *FvAttributes = (*FvAttributes & 0x1ff) | Alignment;\r
+    *FvAttributes = FvAttributeToFv2Attribute (*FvAttributes);\r
   }\r
   return Status;\r
 }\r
@@ -936,8 +948,18 @@ Fv2SetVolumeAttributes (
   FIRMWARE_VOLUME2_PRIVATE_DATA  *Private;\r
   EFI_FIRMWARE_VOLUME_PROTOCOL   *FirmwareVolume;\r
   FRAMEWORK_EFI_FV_ATTRIBUTES    FrameworkFvAttributes; \r
+  EFI_STATUS                     Status;\r
   UINTN                          Shift;\r
 \r
+  if (*FvAttributes & (EFI_FV2_READ_LOCK_STATUS | EFI_FV2_WRITE_LOCK_STATUS)) {\r
+    //\r
+    // Framework FV protocol does not support EFI_FV2_READ_LOCK_* | EFI_FV2_WRITE_LOCK_*\r
+    //\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  *FvAttributes = *FvAttributes & (EFI_FV2_READ_STATUS | EFI_FV2_WRITE_STATUS | EFI_FV2_LOCK_STATUS);\r
+\r
   Private = FIRMWARE_VOLUME2_PRIVATE_DATA_FROM_THIS (This);\r
   FirmwareVolume = Private->FirmwareVolume;\r
 \r
@@ -945,10 +967,16 @@ Fv2SetVolumeAttributes (
   Shift = (UINTN) RShiftU64(*FvAttributes & EFI_FV2_ALIGNMENT, 16);\r
   FrameworkFvAttributes = FrameworkFvAttributes | LShiftU64 (EFI_FV_ALIGNMENT_2, Shift);\r
 \r
-  return FirmwareVolume->SetVolumeAttributes (\r
+  Status =  FirmwareVolume->SetVolumeAttributes (\r
                            FirmwareVolume,\r
                            &FrameworkFvAttributes\r
                            );\r
+\r
+  if (!EFI_ERROR (Status)) {\r
+    *FvAttributes = FvAttributesToFv2Attributes (FrameworkFvAttributes);\r
+  }\r
+\r
+  return Status;\r
 }\r
 \r
 /**\r