NULL,\r
NULL,\r
{ NULL, NULL },\r
+ 0,\r
+ FALSE,\r
0\r
};\r
\r
EFI_STATUS Status;\r
EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *Fvb;\r
EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader;\r
+ EFI_FIRMWARE_VOLUME_EXT_HEADER *FwVolExtHeader;\r
EFI_FVB_ATTRIBUTES_2 FvbAttributes;\r
EFI_FV_BLOCK_MAP_ENTRY *BlockMap;\r
FFS_FILE_LIST_ENTRY *FfsFileEntry;\r
\r
//\r
// go through the whole FV cache, check the consistence of the FV.\r
- // Make a linked list off all the Ffs file headers\r
+ // Make a linked list of all the Ffs file headers\r
//\r
Status = EFI_SUCCESS;\r
InitializeListHead (&FvDevice->FfsFileListHeader);\r
//\r
// Build FFS list\r
//\r
- FfsHeader = (EFI_FFS_FILE_HEADER *) FvDevice->CachedFv;\r
+ if (FwVolHeader->ExtHeaderOffset != 0) {\r
+ //\r
+ // Searching for files starts on an 8 byte aligned boundary after the end of the Extended Header if it exists.\r
+ //\r
+ FwVolExtHeader = (EFI_FIRMWARE_VOLUME_EXT_HEADER *) (FvDevice->CachedFv + (FwVolHeader->ExtHeaderOffset - FwVolHeader->HeaderLength));\r
+ FfsHeader = (EFI_FFS_FILE_HEADER *) ((UINT8 *) FwVolExtHeader + FwVolExtHeader->ExtHeaderSize);\r
+ FfsHeader = (EFI_FFS_FILE_HEADER *) ALIGN_POINTER (FfsHeader, 8);\r
+ } else {\r
+ FfsHeader = (EFI_FFS_FILE_HEADER *) (FvDevice->CachedFv);\r
+ }\r
TopFvAddress = FvDevice->EndOfCachedFv;\r
while ((UINT8 *) FfsHeader < TopFvAddress) {\r
\r
FvDevice->Fvb = Fvb;\r
FvDevice->Handle = Handle;\r
FvDevice->FwVolHeader = FwVolHeader;\r
- FvDevice->Fv.ParentHandle = Fvb->ParentHandle;\r
FvDevice->IsFfs3Fv = CompareGuid (&FwVolHeader->FileSystemGuid, &gEfiFirmwareFileSystem3Guid);\r
+ FvDevice->Fv.ParentHandle = Fvb->ParentHandle;\r
+\r
+ if (Fvb->ParentHandle != NULL) {\r
+ //\r
+ // Inherit the authentication status from FVB.\r
+ //\r
+ FvDevice->AuthenticationStatus = GetFvbAuthenticationStatus (Fvb);\r
+ }\r
\r
if (!EFI_ERROR (FvCheck (FvDevice))) {\r
//\r