summaryrefslogtreecommitdiff
path: root/MdeModulePkg/Core/Dxe/FwVol/Ffs.c
diff options
context:
space:
mode:
authorlzeng14 <lzeng14@6f19259b-4bc3-4df7-8a09-765794883524>2011-10-27 09:23:19 +0000
committerlzeng14 <lzeng14@6f19259b-4bc3-4df7-8a09-765794883524>2011-10-27 09:23:19 +0000
commit6c85d1621713403f20e5c013fa8db161a1c8c4f3 (patch)
tree79e2cfaeeca73423da66f80dd5219da26ca2155b /MdeModulePkg/Core/Dxe/FwVol/Ffs.c
parent890e54170e8f85d1357ac3614f7ad1465050ff0c (diff)
downloadedk2-6c85d1621713403f20e5c013fa8db161a1c8c4f3.zip
edk2-6c85d1621713403f20e5c013fa8db161a1c8c4f3.tar.gz
edk2-6c85d1621713403f20e5c013fa8db161a1c8c4f3.tar.bz2
Add core FFS3 support, DxeCore.
Signed-off-by: lzeng14 Reviewed-by: lgao4 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12584 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdeModulePkg/Core/Dxe/FwVol/Ffs.c')
-rw-r--r--MdeModulePkg/Core/Dxe/FwVol/Ffs.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/MdeModulePkg/Core/Dxe/FwVol/Ffs.c b/MdeModulePkg/Core/Dxe/FwVol/Ffs.c
index 2bd4405..20dade1 100644
--- a/MdeModulePkg/Core/Dxe/FwVol/Ffs.c
+++ b/MdeModulePkg/Core/Dxe/FwVol/Ffs.c
@@ -133,7 +133,11 @@ VerifyHeaderChecksum (
{
UINT8 HeaderChecksum;
- HeaderChecksum = CalculateSum8 ((UINT8 *) FfsHeader, sizeof (EFI_FFS_FILE_HEADER));
+ if (IS_FFS_FILE2 (FfsHeader)) {
+ HeaderChecksum = CalculateSum8 ((UINT8 *) FfsHeader, sizeof (EFI_FFS_FILE_HEADER2));
+ } else {
+ HeaderChecksum = CalculateSum8 ((UINT8 *) FfsHeader, sizeof (EFI_FFS_FILE_HEADER));
+ }
HeaderChecksum = (UINT8) (HeaderChecksum - FfsHeader->State - FfsHeader->IntegrityCheck.Checksum.File);
if (HeaderChecksum == 0) {
@@ -202,7 +206,6 @@ IsValidFfsFile (
{
EFI_FFS_FILE_STATE FileState;
UINT8 DataCheckSum;
- UINT32 FileLength;
FileState = GetFileState (ErasePolarity, FfsHeader);
switch (FileState) {
@@ -211,9 +214,12 @@ IsValidFfsFile (
case EFI_FILE_DATA_VALID:
case EFI_FILE_MARKED_FOR_UPDATE:
DataCheckSum = FFS_FIXED_CHECKSUM;
- FileLength = *(UINT32 *)(FfsHeader->Size) & 0x00FFFFFF;
if ((FfsHeader->Attributes & FFS_ATTRIB_CHECKSUM) == FFS_ATTRIB_CHECKSUM) {
- DataCheckSum = CalculateCheckSum8 ((CONST UINT8 *)FfsHeader + sizeof(EFI_FFS_FILE_HEADER), FileLength - sizeof(EFI_FFS_FILE_HEADER));
+ if (IS_FFS_FILE2 (FfsHeader)) {
+ DataCheckSum = CalculateCheckSum8 ((CONST UINT8 *) FfsHeader + sizeof (EFI_FFS_FILE_HEADER2), FFS_FILE2_SIZE (FfsHeader) - sizeof(EFI_FFS_FILE_HEADER2));
+ } else {
+ DataCheckSum = CalculateCheckSum8 ((CONST UINT8 *) FfsHeader + sizeof (EFI_FFS_FILE_HEADER), FFS_FILE_SIZE (FfsHeader) - sizeof(EFI_FFS_FILE_HEADER));
+ }
}
if (FfsHeader->IntegrityCheck.Checksum.File == DataCheckSum) {
return TRUE;