/** @file\r
Pei Core Firmware File System service routines.\r
\r
-Copyright (c) 2006 - 2010, Intel Corporation \r
-All rights reserved. This program and the accompanying materials \r
+Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials \r
are licensed and made available under the terms and conditions of the BSD License \r
which accompanies this distribution. The full text of the license may be found at \r
http://opensource.org/licenses/bsd-license.php \r
UINT64 FvLength;\r
UINT8 ErasePolarity;\r
UINT8 FileState;\r
+ UINT8 DataCheckSum;\r
\r
//\r
// Convert the handle of FV to FV header for memory-mapped firmware volume\r
FileLength = *(UINT32 *)(FfsFileHeader->Size) & 0x00FFFFFF;\r
FileOccupiedSize = GET_OCCUPIED_SIZE(FileLength, 8);\r
\r
+ DataCheckSum = FFS_FIXED_CHECKSUM;\r
+ if ((FfsFileHeader->Attributes & FFS_ATTRIB_CHECKSUM) == FFS_ATTRIB_CHECKSUM) {\r
+ DataCheckSum = CalculateCheckSum8 ((CONST UINT8 *)FfsFileHeader + sizeof(EFI_FFS_FILE_HEADER), FileLength - sizeof(EFI_FFS_FILE_HEADER));\r
+ }\r
+ if (FfsFileHeader->IntegrityCheck.Checksum.File != DataCheckSum) {\r
+ ASSERT (FALSE);\r
+ *FileHeader = NULL;\r
+ return EFI_NOT_FOUND;\r
+ }\r
+\r
if (FileName != NULL) {\r
if (CompareGuid (&FfsFileHeader->Name, (EFI_GUID*)FileName)) {\r
*FileHeader = FfsFileHeader;\r
Returns information about a specific file.\r
\r
@param FileHandle Handle of the file.\r
- @param FileInfo Upon exit, points to the file’s information.\r
+ @param FileInfo Upon exit, points to the file's information.\r
\r
@retval EFI_INVALID_PARAMETER If FileInfo is NULL.\r
@retval EFI_INVALID_PARAMETER If FileHandle does not represent a valid file.\r
}\r
}\r
\r
+ ASSERT (Private->FvCount <= FixedPcdGet32 (PcdPeiCoreMaxFvSupported));\r
if (Instance >= Private->FvCount) {\r
return NULL;\r
}\r
{\r
PEI_CORE_UNKNOW_FORMAT_FV_INFO *NewUnknownFv;\r
\r
- if (PrivateData->UnknownFvInfoCount + 1 >= FixedPcdGet32 (PcdPeiCoreMaxPeimPerFv)) {\r
+ if (PrivateData->UnknownFvInfoCount + 1 >= FixedPcdGet32 (PcdPeiCoreMaxFvSupported)) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
continue;\r
}\r
\r
+ if (PrivateData->FvCount >= FixedPcdGet32 (PcdPeiCoreMaxFvSupported)) {\r
+ DEBUG ((EFI_D_ERROR, "The number of Fv Images (%d) exceed the max supported FVs (%d) in Pei", PrivateData->FvCount + 1, FixedPcdGet32 (PcdPeiCoreMaxFvSupported)));\r
+ DEBUG ((EFI_D_ERROR, "PcdPeiCoreMaxFvSupported value need be reconfigurated in DSC"));\r
+ ASSERT (FALSE);\r
+ }\r
+ \r
//\r
// Update internal PEI_CORE_FV array.\r
//\r