]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Core/Pei/FwVol/FwVol.c
Moved the PeiS3ResumeState access when PeiS3ResumeState is not 0, this will fix K9...
[mirror_edk2.git] / MdeModulePkg / Core / Pei / FwVol / FwVol.c
index bcf8335a27615dee2da102f787c7b58e27b098be..d0375be92e7d36129da5367d3ebe7933693af4bf 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Pei Core Firmware File System service routines.\r
   \r
-Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2006 - 2012, 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
@@ -229,7 +229,8 @@ FindFileEx (
   IN OUT    EFI_PEI_FV_HANDLE        *AprioriFile  OPTIONAL\r
   )\r
 {\r
-  EFI_FIRMWARE_VOLUME_HEADER           *FwVolHeader;\r
+  EFI_FIRMWARE_VOLUME_HEADER            *FwVolHeader;\r
+  EFI_FIRMWARE_VOLUME_EXT_HEADER        *FwVolExtHeader;\r
   EFI_FFS_FILE_HEADER                   **FileHeader;\r
   EFI_FFS_FILE_HEADER                   *FfsFileHeader;\r
   UINT32                                FileLength;\r
@@ -262,7 +263,16 @@ FindFileEx (
   // start from the FileHeader.\r
   //\r
   if ((*FileHeader == NULL) || (FileName != NULL)) {\r
-    FfsFileHeader = (EFI_FFS_FILE_HEADER *)((UINT8 *)FwVolHeader + FwVolHeader->HeaderLength);\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 *) ((UINT8 *) FwVolHeader + FwVolHeader->ExtHeaderOffset);\r
+      FfsFileHeader = (EFI_FFS_FILE_HEADER *) ((UINT8 *) FwVolExtHeader + FwVolExtHeader->ExtHeaderSize);\r
+      FfsFileHeader = (EFI_FFS_FILE_HEADER *) ALIGN_POINTER (FfsFileHeader, 8);\r
+    } else {\r
+      FfsFileHeader = (EFI_FFS_FILE_HEADER *)((UINT8 *) FwVolHeader + FwVolHeader->HeaderLength);\r
+    }\r
   } else {\r
     if (IS_FFS_FILE2 (*FileHeader)) {\r
       if (!IsFfs3Fv) {\r