IN EFI_FLASH_SUBAREA_ENTRY *FlashEntry\r
)\r
{\r
- EFI_FV_BLOCK_MAP_ENTRY *BlockMap;\r
- EFI_FIRMWARE_VOLUME_HEADER *FvHeader;\r
- UINT64 BaseAddress;\r
- UINT8 Data;\r
- UINT32 BlockLength;\r
- UINTN Index;\r
-\r
- BaseAddress = FlashEntry->Base - 0x400000 + 2;\r
- FvHeader = (EFI_FIRMWARE_VOLUME_HEADER *) ((UINTN) (FlashEntry->Base));\r
- BlockMap = &(FvHeader->BlockMap[0]);\r
-\r
- while ((BlockMap->NumBlocks != 0) && (BlockMap->Length != 0)) {\r
- BlockLength = BlockMap->Length;\r
- for (Index = 0; Index < BlockMap->NumBlocks; Index++) {\r
- CpuIo->Mem.Read (\r
- CpuIo,\r
- EfiCpuIoWidthUint8,\r
- BaseAddress,\r
- 1,\r
- &Data\r
- );\r
- Data = (UINT8) (Data | 0x3);\r
- CpuIo->Mem.Write (\r
- CpuIo,\r
- EfiCpuIoWidthUint8,\r
- BaseAddress,\r
- 1,\r
- &Data\r
- );\r
- BaseAddress += BlockLength;\r
- }\r
-\r
- BlockMap++;\r
- }\r
}\r
\r
VOID\r
VOID\r
)\r
{\r
- EFI_FLASH_MAP_ENTRY_DATA *FlashMapEntryData;\r
- EFI_PEI_HOB_POINTERS GuidHob;\r
- EFI_STATUS Status;\r
- EFI_CPU_IO_PROTOCOL *CpuIo;\r
-\r
- Status = gBS->LocateProtocol (&gEfiCpuIoProtocolGuid, NULL, &CpuIo);\r
- ASSERT_EFI_ERROR (Status);\r
- \r
- GuidHob.Raw = GetHobList ();\r
- while ((GuidHob.Raw = GetNextGuidHob (&gEfiFlashMapHobGuid, GuidHob.Raw)) != NULL) {\r
- FlashMapEntryData = (EFI_FLASH_MAP_ENTRY_DATA *) GET_GUID_HOB_DATA (GuidHob.Guid);\r
-\r
- //\r
- // Get the variable store area\r
- //\r
- if ((FlashMapEntryData->AreaType == EFI_FLASH_AREA_RECOVERY_BIOS) ||\r
- (FlashMapEntryData->AreaType == EFI_FLASH_AREA_MAIN_BIOS)\r
- ) {\r
- BdsLockFv (CpuIo, &(FlashMapEntryData->Entries[0]));\r
- }\r
- GuidHob.Raw = GET_NEXT_HOB (GuidHob);\r
- }\r
-\r
- return ;\r
}\r
\r
EFI_STATUS\r