]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Core/Pei/PeiMain/PeiMain.c
Merge branch of PI tree to main trunk
[mirror_edk2.git] / MdeModulePkg / Core / Pei / PeiMain / PeiMain.c
index 250c7cf504179f3d6273666340ff43a639a56635..f8eb92e12877fd0081ae906be9b00a6474322023 100644 (file)
@@ -61,20 +61,21 @@ static EFI_PEI_SERVICES  mPS = {
   PeiFfsFindNextFile,\r
   PeiFfsFindSectionData,\r
 \r
-  PeiInstallPeiMemory,\r
+  PeiInstallPeiMemory,      \r
   PeiAllocatePages,\r
   PeiAllocatePool,\r
   (EFI_PEI_COPY_MEM)CopyMem,\r
   (EFI_PEI_SET_MEM)SetMem,\r
 \r
   PeiReportStatusCode,\r
-\r
   PeiResetSystem,\r
+\r
   NULL,\r
   NULL,\r
-  NULL,\r
-  NULL,\r
-  NULL,\r
+\r
+  PeiFfsFindFileByName,\r
+  PeiFfsGetFileInfo,\r
+  PeiFfsGetVolumeInfo,\r
   PeiRegisterForShadow\r
 };\r
 \r
@@ -82,7 +83,7 @@ EFI_STATUS
 EFIAPI\r
 PeiCore (\r
   IN CONST EFI_SEC_PEI_HAND_OFF        *SecCoreData,\r
-  IN CONST EFI_PEI_PPI_DESCRIPTOR      *PpiList,\r
+  IN CONST EFI_PEI_PPI_DESCRIPTOR      *PpList,\r
   IN VOID                              *Data\r
   )\r
 /*++\r
@@ -117,9 +118,10 @@ Returns:
   PEI_CORE_INSTANCE                                     PrivateData;\r
   EFI_STATUS                                            Status;\r
   PEI_CORE_TEMP_POINTERS                                TempPtr;\r
-  PEI_CORE_DISPATCH_DATA                                *DispatchData;\r
   UINT64                                                mTick;\r
   PEI_CORE_INSTANCE                                     *OldCoreData;\r
+  EFI_PEI_CPU_IO_PPI                                    *CpuIo;\r
+  EFI_PEI_PCI_CFG2_PPI                                  *PciCfg;\r
 \r
   mTick = 0;\r
   OldCoreData = (PEI_CORE_INSTANCE *) Data;\r
@@ -138,26 +140,31 @@ Returns:
 \r
   if (OldCoreData != NULL) {\r
     CopyMem (&PrivateData, OldCoreData, sizeof (PEI_CORE_INSTANCE));\r
+    \r
+    CpuIo = (VOID*)PrivateData.ServiceTableShadow.CpuIo;\r
+    PciCfg = (VOID*)PrivateData.ServiceTableShadow.PciCfg;\r
+    \r
+    CopyMem (&PrivateData.ServiceTableShadow, &mPS, sizeof (mPS));\r
+    \r
+    PrivateData.ServiceTableShadow.CpuIo  = CpuIo;\r
+    PrivateData.ServiceTableShadow.PciCfg = PciCfg;\r
   } else {\r
     ZeroMem (&PrivateData, sizeof (PEI_CORE_INSTANCE));\r
+    PrivateData.Signature = PEI_CORE_HANDLE_SIGNATURE;\r
+    CopyMem (&PrivateData.ServiceTableShadow, &mPS, sizeof (mPS));\r
   }\r
 \r
-  PrivateData.Signature = PEI_CORE_HANDLE_SIGNATURE;\r
-  PrivateData.PS = &mPS;\r
+  PrivateData.PS = &PrivateData.ServiceTableShadow;\r
 \r
   //\r
   // Initialize libraries that the PeiCore is linked against\r
-  // BUGBUG: The FfsHeader is passed in as NULL.  Do we look it up or remove it from the lib init?\r
+  // BUGBUG: The FileHandle is passed in as NULL.  Do we look it up or remove it from the lib init?\r
   //\r
   ProcessLibraryConstructorList (NULL, &PrivateData.PS);\r
 \r
-  InitializeMemoryServices (&PrivateData.PS, SecCoreData, OldCoreData);\r
+  InitializeMemoryServices (&PrivateData, SecCoreData, OldCoreData);\r
 \r
-  InitializePpiServices (&PrivateData.PS, OldCoreData);\r
-\r
-  InitializeSecurityServices (&PrivateData.PS, OldCoreData);\r
-\r
-  InitializeDispatcherData (&PrivateData.PS, OldCoreData, SecCoreData);\r
+  InitializePpiServices (&PrivateData, OldCoreData);\r
 \r
   if (OldCoreData != NULL) {\r
 \r
@@ -219,18 +226,25 @@ Returns:
     //\r
     // If SEC provided any PPI services to PEI, install them.\r
     //\r
-    if (PpiList != NULL) {\r
-      Status = PeiServicesInstallPpi (PpiList);\r
+    if (PpList != NULL) {\r
+      Status = PeiServicesInstallPpi (PpList);\r
       ASSERT_EFI_ERROR (Status);\r
     }\r
   }\r
 \r
-  DispatchData = &PrivateData.DispatchData;\r
+  InitializeSecurityServices (&PrivateData.PS, OldCoreData);\r
+\r
+  InitializeDispatcherData (&PrivateData, OldCoreData, SecCoreData);\r
+\r
+  //\r
+  // Install Pei Load File PPI. \r
+  //\r
+  InitializeImageServices (&PrivateData, OldCoreData);\r
 \r
   //\r
   // Call PEIM dispatcher\r
   //\r
-  PeiDispatcher (SecCoreData, &PrivateData, DispatchData);\r
+  PeiDispatcher (SecCoreData, &PrivateData);\r
 \r
   //\r
   // Check if InstallPeiMemory service was called.\r