]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Code scrub DxeIpl to add back the CONST modifier and solve a typecast warning.
authorqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 18 Jul 2008 02:47:57 +0000 (02:47 +0000)
committerqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 18 Jul 2008 02:47:57 +0000 (02:47 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5516 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Core/DxeIplPeim/DxeIpl.h
MdeModulePkg/Core/DxeIplPeim/DxeLoad.c
MdeModulePkg/Core/DxeIplPeim/Ia32/DxeLoadFunc.c
MdeModulePkg/Core/DxeIplPeim/Ia32/ImageRead.c
MdeModulePkg/Core/DxeIplPeim/Ipf/DxeLoadFunc.c
MdeModulePkg/Core/DxeIplPeim/X64/DxeLoadFunc.c

index 151f28d222eeef36e4c9cd3a1c6a2588d20dadb4..99968d4438cd197da55c6a78c625ae95a1c65fac 100644 (file)
@@ -61,6 +61,13 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 //\r
 extern BOOLEAN gInMemory;\r
 \r
+//\r
+// This PPI is installed to indicate the end of the PEI usage of memory \r
+//\r
+extern CONST EFI_PEI_PPI_DESCRIPTOR gEndOfPeiSignalPpi;\r
+\r
+\r
+\r
 /**\r
    Loads and relocates a PE/COFF image into memory.\r
 \r
@@ -84,21 +91,19 @@ PeiLoadFile (
 \r
 \r
 /**\r
-   Find DxeCore driver from all First Volumes.\r
+   Searches DxeCore in all firmware Volumes and loads the first instance that contains DxeCore.\r
 \r
-   @param FileHandle    Pointer to FFS file to search.\r
-   \r
-   @return EFI_SUCESS   Success to find the FFS in specificed FV\r
-   @return others       Fail to find the FFS in specificed FV\r
+   @param DxeCoreFileName    A Pointer to the EFI_GUID to contain the output DxeCore GUID file name.\r
 \r
+   @return FileHandle of DxeCore to load DxeCore.\r
+   \r
 **/\r
-EFI_STATUS\r
+EFI_PEI_FILE_HANDLE\r
 DxeIplFindDxeCore (\r
-  OUT EFI_PEI_FILE_HANDLE   *FileHandle\r
+  OUT EFI_GUID   *DxeCoreFileName\r
   );\r
 \r
 \r
-\r
 /**\r
    This function simply retrieves the function pointer of ImageRead in\r
    ImageContext structure.\r
@@ -145,14 +150,12 @@ DxeLoadCore (
 \r
    @param DxeCoreEntryPoint         The entrypoint of DxeCore.\r
    @param HobList                   The start of HobList passed to DxeCore.\r
-   @param EndOfPeiSignal            The PPI descriptor for EFI_END_OF_PEI_PPI.\r
 \r
 **/\r
 VOID\r
 HandOffToDxeCore (\r
   IN EFI_PHYSICAL_ADDRESS   DxeCoreEntryPoint,\r
-  IN EFI_PEI_HOB_POINTERS   HobList,\r
-  IN EFI_PEI_PPI_DESCRIPTOR *EndOfPeiSignal\r
+  IN EFI_PEI_HOB_POINTERS   HobList\r
   );\r
 \r
 \r
index fff08b33a01ea26330f382ce95defbad60b9d46b..5cd6b2cb17d3f37781adebb549ddf929770e16e1 100644 (file)
@@ -25,32 +25,32 @@ BOOLEAN gInMemory = FALSE;
 // Module Globals used in the DXE to PEI handoff\r
 // These must be module globals, so the stack can be switched\r
 //\r
-EFI_DXE_IPL_PPI mDxeIplPpi = {\r
+CONST EFI_DXE_IPL_PPI mDxeIplPpi = {\r
   DxeLoadCore\r
 };\r
 \r
-EFI_PEI_GUIDED_SECTION_EXTRACTION_PPI mCustomGuidedSectionExtractionPpi = {\r
+CONST EFI_PEI_GUIDED_SECTION_EXTRACTION_PPI mCustomGuidedSectionExtractionPpi = {\r
   CustomGuidedSectionExtract\r
 };\r
 \r
-EFI_PEI_DECOMPRESS_PPI mDecompressPpi = {\r
+CONST EFI_PEI_DECOMPRESS_PPI mDecompressPpi = {\r
   Decompress\r
 };\r
 \r
-EFI_PEI_PPI_DESCRIPTOR     mPpiList[] = {\r
+CONST EFI_PEI_PPI_DESCRIPTOR     mPpiList[] = {\r
   {\r
     EFI_PEI_PPI_DESCRIPTOR_PPI,\r
     &gEfiDxeIplPpiGuid,\r
-    &mDxeIplPpi\r
+    (VOID *) &mDxeIplPpi\r
   },\r
   {\r
     (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),\r
     &gEfiPeiDecompressPpiGuid,\r
-    &mDecompressPpi\r
+    (VOID *) &mDecompressPpi\r
   }\r
 };\r
 \r
-EFI_PEI_PPI_DESCRIPTOR     mPpiSignal = {\r
+CONST EFI_PEI_PPI_DESCRIPTOR     gEndOfPeiSignalPpi = {\r
   (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),\r
   &gEfiEndOfPeiSignalPpiGuid,\r
   NULL\r
@@ -102,7 +102,7 @@ PeimInitializeDxeIpl (
         ASSERT (GuidPpi != NULL);\r
         while (ExtractHandlerNumber-- > 0) {\r
           GuidPpi->Flags = EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST;\r
-          GuidPpi->Ppi   = &mCustomGuidedSectionExtractionPpi;\r
+          GuidPpi->Ppi   = (VOID *) &mCustomGuidedSectionExtractionPpi;\r
           GuidPpi->Guid  = &(ExtractHandlerGuidTable [ExtractHandlerNumber]);\r
           Status = PeiServicesInstallPpi (GuidPpi++);\r
           ASSERT_EFI_ERROR(Status);\r
@@ -203,11 +203,7 @@ DxeLoadCore (
   //\r
   // Look in all the FVs present in PEI and find the DXE Core\r
   //\r
-  FileHandle = NULL;\r
-  Status = DxeIplFindDxeCore (&FileHandle);\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
-  CopyGuid(&DxeCoreFileName, &(((EFI_FFS_FILE_HEADER*)FileHandle)->Name));\r
+  FileHandle = DxeIplFindDxeCore (&DxeCoreFileName);\r
 \r
   //\r
   // Load the DXE Core from a Firmware Volume, may use LoadFile ppi to do this for save code size.\r
@@ -244,7 +240,7 @@ DxeLoadCore (
   // Transfer control to the DXE Core\r
   // The handoff state is simply a pointer to the HOB list\r
   //\r
-  HandOffToDxeCore (DxeCoreEntryPoint, HobList, &mPpiSignal);\r
+  HandOffToDxeCore (DxeCoreEntryPoint, HobList);\r
   //\r
   // If we get here, then the DXE Core returned.  This is an error\r
   // Dxe Core should not return.\r
@@ -256,41 +252,67 @@ DxeLoadCore (
 }\r
 \r
 \r
-\r
-\r
 /**\r
-   Find DxeCore driver from all First Volumes.\r
+   Searches DxeCore in all firmware Volumes and loads the first\r
+   instance that contains DxeCore.\r
 \r
-   @param FileHandle    Pointer to FFS file to search.\r
-   \r
-   @return EFI_SUCESS   Success to find the FFS in specificed FV\r
-   @return others       Fail to find the FFS in specificed FV\r
+   @param DxeCoreFileName    A Pointer to the EFI_GUID to contain\r
+                             the output DxeCore GUID file name.\r
 \r
+   @return FileHandle of DxeCore to load DxeCore.\r
+   \r
 **/\r
-EFI_STATUS\r
+EFI_PEI_FILE_HANDLE\r
 DxeIplFindDxeCore (\r
-  OUT EFI_PEI_FILE_HANDLE   *FileHandle\r
+  OUT EFI_GUID   *DxeCoreFileName\r
   )\r
 {\r
-  EFI_STATUS        Status;\r
-  EFI_STATUS        FileStatus;\r
-  UINTN             Instance;\r
-  EFI_PEI_FV_HANDLE VolumeHandle;\r
+  EFI_STATUS            Status;\r
+  UINTN                 Instance;\r
+  EFI_PEI_FV_HANDLE     VolumeHandle;\r
+  EFI_PEI_FILE_HANDLE   FileHandle;\r
+  EFI_FV_FILE_INFO      FvFileInfo;\r
   \r
   Instance    = 0;\r
-  *FileHandle = NULL;\r
-\r
-  do {\r
-    Status = PeiServicesFfsFindNextVolume (Instance++, &VolumeHandle);\r
+  while (TRUE) {\r
+    //\r
+    // Traverse all firmware volume instances\r
+    //\r
+    Status = PeiServicesFfsFindNextVolume (Instance, &VolumeHandle);\r
+    //\r
+    // If some error occurs here, then we cannot find any firmware\r
+    // volume that may contain DxeCore.\r
+    //\r
+    ASSERT_EFI_ERROR (Status);\r
+    \r
+    //\r
+    // Find the DxeCore file type from the beginning in this firmware volume.\r
+    //\r
+    FileHandle = NULL;\r
+    Status = PeiServicesFfsFindNextFile (EFI_FV_FILETYPE_DXE_CORE, VolumeHandle, &FileHandle);\r
     if (!EFI_ERROR (Status)) {\r
-      FileStatus = PeiServicesFfsFindNextFile (EFI_FV_FILETYPE_DXE_CORE, VolumeHandle, FileHandle);\r
-      if (!EFI_ERROR (FileStatus)) {\r
-        return FileStatus;\r
-      }\r
+      //\r
+      // Find DxeCore FileHandle in this volume, then we skip other firmware volume.\r
+      //\r
+      break;\r
     }\r
-  } while (!EFI_ERROR (Status));\r
+    //\r
+    // We cannot find DxeCore in this firmware volume, then search the next volume.\r
+    //\r
+    Instance++;\r
+  }\r
 \r
-  return EFI_NOT_FOUND;\r
+  //\r
+  // Extract the DxeCore GUID file name.\r
+  //\r
+  Status = PeiServicesFfsGetFileInfo (FileHandle, &FvFileInfo);\r
+  ASSERT_EFI_ERROR (Status);\r
+  CopyGuid (DxeCoreFileName, &FvFileInfo.FileName);\r
+\r
+  //\r
+  // Return the FileHandle to load DxeCore from this volume.\r
+  //\r
+  return FileHandle;\r
 }\r
 \r
 \r
index 4458ddd8ff56966dbc132291f5dc647630db877d..65c7ceac17a08b0623548cac3a0eee723b7b180a 100644 (file)
@@ -53,14 +53,12 @@ GLOBAL_REMOVE_IF_UNREFERENCED  IA32_DESCRIPTOR gLidtDescriptor = {
 \r
    @param DxeCoreEntryPoint         The entrypoint of DxeCore.\r
    @param HobList                   The start of HobList passed to DxeCore.\r
-   @param EndOfPeiSignal            The PPI descriptor for EFI_END_OF_PEI_PPI.\r
 \r
 **/\r
 VOID\r
 HandOffToDxeCore (\r
   IN EFI_PHYSICAL_ADDRESS   DxeCoreEntryPoint,\r
-  IN EFI_PEI_HOB_POINTERS   HobList,\r
-  IN EFI_PEI_PPI_DESCRIPTOR *EndOfPeiSignal\r
+  IN EFI_PEI_HOB_POINTERS   HobList\r
   )\r
 {\r
   EFI_STATUS                Status;\r
@@ -106,7 +104,7 @@ HandOffToDxeCore (
     //\r
     // End of PEI phase singal\r
     //\r
-    Status = PeiServicesInstallPpi (EndOfPeiSignal);\r
+    Status = PeiServicesInstallPpi (&gEndOfPeiSignalPpi);\r
     ASSERT_EFI_ERROR (Status);\r
     \r
     AsmWriteCr3 (PageTables);\r
@@ -169,7 +167,7 @@ HandOffToDxeCore (
     //\r
     // End of PEI phase singal\r
     //\r
-    Status = PeiServicesInstallPpi (EndOfPeiSignal);\r
+    Status = PeiServicesInstallPpi (&gEndOfPeiSignalPpi);\r
     ASSERT_EFI_ERROR (Status);\r
 \r
     //\r
index a303c90721946310b21000534fe27cc734860d9e..747026364e2260a44baf108307eba2ce51ef472f 100644 (file)
@@ -56,9 +56,6 @@ PeiImageRead (
 }\r
 \r
 \r
-\r
-\r
-\r
 /**\r
    This function simply retrieves the function pointer of ImageRead in\r
    ImageContext structure.\r
index 2c94dc70b74d12d0f5d1c2993b5472e6bee681e9..5c9611e5c2bb8a0a3aacc60eb29ef12f5a88be12 100644 (file)
@@ -25,14 +25,12 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
    @param DxeCoreEntryPoint         The entrypoint of DxeCore.\r
    @param HobList                   The start of HobList passed to DxeCore.\r
-   @param EndOfPeiSignal            The PPI descriptor for EFI_END_OF_PEI_PPI.\r
 \r
 **/\r
 VOID\r
 HandOffToDxeCore (\r
   IN EFI_PHYSICAL_ADDRESS   DxeCoreEntryPoint,\r
-  IN EFI_PEI_HOB_POINTERS   HobList,\r
-  IN EFI_PEI_PPI_DESCRIPTOR *EndOfPeiSignal\r
+  IN EFI_PEI_HOB_POINTERS   HobList\r
   )\r
 {\r
   VOID                *BaseOfStack;\r
@@ -66,7 +64,7 @@ HandOffToDxeCore (
   //\r
   // End of PEI phase singal\r
   //\r
-  Status = PeiServicesInstallPpi (EndOfPeiSignal);\r
+  Status = PeiServicesInstallPpi (&gEndOfPeiSignalPpi);\r
   ASSERT_EFI_ERROR (Status);\r
 \r
   //\r
index c871dbe41f548cf3cce7825bee41848a259bfccf..51055e157aa87f08ed947714b31f8de7eaf0ca95 100644 (file)
@@ -25,14 +25,12 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
    @param DxeCoreEntryPoint         The entrypoint of DxeCore.\r
    @param HobList                   The start of HobList passed to DxeCore.\r
-   @param EndOfPeiSignal            The PPI descriptor for EFI_END_OF_PEI_PPI.\r
 \r
 **/\r
 VOID\r
 HandOffToDxeCore (\r
   IN EFI_PHYSICAL_ADDRESS   DxeCoreEntryPoint,\r
-  IN EFI_PEI_HOB_POINTERS   HobList,\r
-  IN EFI_PEI_PPI_DESCRIPTOR *EndOfPeiSignal\r
+  IN EFI_PEI_HOB_POINTERS   HobList\r
   )\r
 {\r
   VOID                *BaseOfStack;\r
@@ -55,7 +53,7 @@ HandOffToDxeCore (
   //\r
   // End of PEI phase singal\r
   //\r
-  Status = PeiServicesInstallPpi (EndOfPeiSignal);\r
+  Status = PeiServicesInstallPpi (&gEndOfPeiSignalPpi);\r
   ASSERT_EFI_ERROR (Status);\r
 \r
   //\r