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