);\r
ASSERT_EFI_ERROR (Status);\r
\r
- Status = gBS->HandleProtocol (\r
- Handle,\r
- &gEfiFvbExtensionProtocolGuid,\r
- (VOID **) &mFvbEntry[UpdateIndex].FvbExtension\r
- );\r
- if (Status != EFI_SUCCESS) {\r
- mFvbEntry[UpdateIndex].FvbExtension = NULL;\r
- }\r
-\r
//\r
// Check the FVB can be accessed in RUNTIME, The FVBs in FVB handle list come from two ways:\r
// 1) Dxe Core. (FVB information is transferred from FV HOB). 2) FVB driver. The FVB produced\r
EfiConvertPointer (0x0, (VOID **) &mFvbEntry[Index].Fvb->EraseBlocks);\r
EfiConvertPointer (0x0, (VOID **) &mFvbEntry[Index].Fvb);\r
}\r
-\r
- if (mFvbEntry[Index].FvbExtension != NULL) {\r
- EfiConvertPointer (0x0, (VOID **) &mFvbEntry[Index].FvbExtension->EraseFvbCustomBlock);\r
- EfiConvertPointer (0x0, (VOID **) &mFvbEntry[Index].FvbExtension);\r
- }\r
}\r
\r
EfiConvertPointer (0x0, (VOID **) &mFvbEntry);\r
\r
return mFvbEntry[Instance].Fvb->GetBlockSize (mFvbEntry[Instance].Fvb, Lba, BlockSize, NumOfBlocks);\r
}\r
-\r
-\r
-/**\r
- Erases and initializes a specified range of a firmware volume.\r
-\r
- The EfiFvbEraseCustomBlockRange() function erases the specified range in the firmware\r
- volume index by Instance. If Instance is larger than the max FVB number, StartLba or \r
- LastLba index is larger than the last block of the firmware volume, StartLba > LastLba\r
- or StartLba equal to LastLba but OffsetStartLba > OffsetLastLba, this function return \r
- the status code EFI_INVALID_PARAMETER.\r
-\r
- @param[in] Instance The FV instance to be operated.\r
- @param[in] StartLba The starting logical block index to be erased.\r
- @param[in] OffsetStartLba Offset into the starting block at which to \r
- begin erasing. \r
- @param[in] LastLba The last logical block index to be erased.\r
- @param[in] OffsetLastLba Offset into the last block at which to end erasing. \r
-\r
- @retval EFI_EFI_SUCCESS Successfully erase custom block range\r
- @retval EFI_INVALID_PARAMETER Invalid parameter. Instance is larger than the max FVB number. \r
- @retval EFI_UNSUPPORTED Firmware volume block device has no this capability.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-EfiFvbEraseCustomBlockRange (\r
- IN UINTN Instance,\r
- IN EFI_LBA StartLba,\r
- IN UINTN OffsetStartLba,\r
- IN EFI_LBA LastLba,\r
- IN UINTN OffsetLastLba\r
- )\r
-{\r
- if (Instance >= mFvbCount) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
-\r
- if (EfiAtRuntime() && !mFvbEntry[Instance].IsRuntimeAccess) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
-\r
- if (mFvbEntry[Instance].FvbExtension == NULL) {\r
- return EFI_UNSUPPORTED;\r
- }\r
-\r
- if (mFvbEntry[Instance].FvbExtension->EraseFvbCustomBlock == NULL) {\r
- return EFI_UNSUPPORTED;\r
- }\r
-\r
- return mFvbEntry[Instance].FvbExtension->EraseFvbCustomBlock (\r
- mFvbEntry[Instance].FvbExtension,\r
- StartLba,\r
- OffsetStartLba,\r
- LastLba,\r
- OffsetLastLba\r
- );\r
-}\r