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
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
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
//\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