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
(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
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
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