31 IN EFI_PHYSICAL_ADDRESS Address,
37 EFI_PHYSICAL_ADDRESS FvbBaseAddress;
38 EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *Fvb;
39 EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader;
40 EFI_FV_BLOCK_MAP_ENTRY *FvbMapEntry;
51 if (EFI_ERROR (Status)) {
58 Status = Fvb->GetPhysicalAddress (Fvb, &FvbBaseAddress);
59 if (EFI_ERROR (Status)) {
63 FwVolHeader = (EFI_FIRMWARE_VOLUME_HEADER *)((UINTN)FvbBaseAddress);
68 if ((FwVolHeader->FvLength) > (FwVolHeader->HeaderLength)) {
72 FvbMapEntry = &FwVolHeader->BlockMap[0];
73 for (LbaIndex = 1; LbaIndex <= FvbMapEntry->NumBlocks; LbaIndex += 1) {
74 if (Address < (FvbBaseAddress + FvbMapEntry->Length * LbaIndex)) {
79 *Offset = (UINTN)(Address - (FvbBaseAddress + FvbMapEntry->Length * (LbaIndex - 1)));
105 IN EFI_PHYSICAL_ADDRESS VariableBase,
106 IN VARIABLE_STORE_HEADER *VariableBuffer
110 EFI_HANDLE FvbHandle;
114 EFI_FAULT_TOLERANT_WRITE_PROTOCOL *FtwProtocol;
120 if (EFI_ERROR (Status)) {
121 return EFI_NOT_FOUND;
128 if (EFI_ERROR (Status)) {
136 if (EFI_ERROR (Status)) {
140 FtwBufferSize = ((VARIABLE_STORE_HEADER *)((UINTN)VariableBase))->Size;
141 ASSERT (FtwBufferSize == VariableBuffer->Size);
146 Status = FtwProtocol->Write (
153 (VOID *)VariableBuffer