Modify FtwLite and Variable DXE driver to use PCD instead of FlashMap HOB

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1236 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
xgu3
2006-08-10 12:28:02 +00:00
parent 382aab1c37
commit 202c5d55e5
9 changed files with 513 additions and 71 deletions

View File

@ -1254,14 +1254,14 @@ Returns:
UINT32 Instance;
EFI_PHYSICAL_ADDRESS FvVolHdr;
EFI_FLASH_MAP_ENTRY_DATA *FlashMapEntryData;
UINT64 TempVariableStoreHeader;
EFI_GCD_MEMORY_SPACE_DESCRIPTOR GcdDescriptor;
EFI_FLASH_SUBAREA_ENTRY VariableStoreEntry;
UINT64 BaseAddress;
UINT64 Length;
UINTN Index;
UINT8 Data;
EFI_PEI_HOB_POINTERS GuidHob;
Status = gBS->AllocatePool (
EfiRuntimeServicesData,
@ -1305,35 +1305,13 @@ Returns:
// Get non volatile varaible store
//
FlashMapEntryData = NULL;
GuidHob.Raw = GetHobList ();
while (NULL != (GuidHob.Raw = GetNextGuidHob (&gEfiFlashMapHobGuid, GuidHob.Raw))) {
FlashMapEntryData = (EFI_FLASH_MAP_ENTRY_DATA *) GET_GUID_HOB_DATA (GuidHob.Guid);
if (FlashMapEntryData->AreaType == EFI_FLASH_AREA_EFI_VARIABLES) {
break;
}
GuidHob.Raw = GET_NEXT_HOB (GuidHob);
}
if (NULL == GuidHob.Raw || FlashMapEntryData == NULL) {
gBS->FreePool (mVariableModuleGlobal);
gBS->FreePool (VolatileVariableStore);
return EFI_NOT_FOUND;
}
//
// Currently only one non-volatile variable store is supported
//
if (FlashMapEntryData->NumEntries != 1) {
gBS->FreePool (mVariableModuleGlobal);
gBS->FreePool (VolatileVariableStore);
return EFI_UNSUPPORTED;
}
CopyMem (&VariableStoreEntry, &FlashMapEntryData->Entries[0], sizeof (VariableStoreEntry));
TempVariableStoreHeader = (UINT64) PcdGet32 (PcdFlashNvStorageVariableBase);
VariableStoreEntry.Base = TempVariableStoreHeader + \
(((EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) (TempVariableStoreHeader)) -> HeaderLength);
VariableStoreEntry.Length = (UINT64) PcdGet32 (PcdFlashNvStorageVariableSize) - \
(((EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) (TempVariableStoreHeader)) -> HeaderLength);
VariableStoreEntry.Length = (UINT64) PcdGet32 (PcdFlashNvStorageVariableSize);
//
// Mark the variable storage region of the FLASH as RUNTIME
//

View File

@ -30,6 +30,9 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.-->
<OutputFileBasename>Variable</OutputFileBasename>
</ModuleDefinitions>
<LibraryClassDefinitions>
<LibraryClass Usage="ALWAYS_CONSUMED">
<Keyword>PcdLib</Keyword>
</LibraryClass>
<LibraryClass Usage="ALWAYS_CONSUMED">
<Keyword>BaseLib</Keyword>
</LibraryClass>
@ -150,4 +153,22 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.-->
<SetVirtualAddressMapCallBack>VariableClassAddressChangeEvent</SetVirtualAddressMapCallBack>
</Extern>
</Externs>
<PcdCoded>
<PcdEntry PcdItemType="DYNAMIC">
<C_Name>PcdFlashNvStorageVariableBase</C_Name>
<TokenSpaceGuidCName>gEfiGenericPlatformTokenSpaceGuid</TokenSpaceGuidCName>
<HelpText>
The driver gets the Variable store base address from this PCD. This base address point to
an EFI_FIRMWARE_VOLUMN_HEADER struct.
</HelpText>
</PcdEntry>
<PcdEntry PcdItemType="DYNAMIC">
<C_Name>PcdFlashNvStorageVariableSize</C_Name>
<TokenSpaceGuidCName>gEfiGenericPlatformTokenSpaceGuid</TokenSpaceGuidCName>
<HelpText>
The driver gets the Variable store base address from this PCD. This base address point to
an EFI_FIRMWARE_VOLUMN_HEADER struct.
</HelpText>
</PcdEntry>
</PcdCoded>
</ModuleSurfaceArea>