]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Core/Pei/Dispatcher/Dispatcher.c
[PI compatible enabling] Add PeiRegisterForShadow interface for PEI_SERVICE
[mirror_edk2.git] / MdeModulePkg / Core / Pei / Dispatcher / Dispatcher.c
index 15b23604b6f1dbaf314a4856b61014ae001e1c4f..67aa1bd53520dba24f5b440e9fa2519bb1fd859b 100644 (file)
@@ -21,11 +21,6 @@ Revision History
 \r
 --*/\r
 \r
-//\r
-// Include common header file for this module.\r
-//\r
-#include "CommonHeader.h"\r
-\r
 #include <PeiMain.h>\r
 \r
 STATIC\r
@@ -541,3 +536,43 @@ Returns:
   return BuildGuidDataHob (&gEfiPeiCorePrivateGuid, PrivateData, sizeof (PEI_CORE_INSTANCE));\r
 }\r
 \r
+/**\r
+  This routine enable a PEIM to register itself to shadow when PEI Foundation\r
+  discovery permanent memory.\r
+\r
+       @param FileHandle       File handle of a PEIM.\r
+  \r
+  @retval EFI_NOT_FOUND                                The file handle doesn't point to PEIM itself.\r
+  @retval EFI_ALREADY_STARTED          Indicate that the PEIM has been registered itself.\r
+  @retval EFI_SUCCESS                                          Successfully to register itself.\r
+\r
+**/ \r
+EFI_STATUS\r
+EFIAPI\r
+PeiRegisterForShadow (\r
+  IN EFI_PEI_FILE_HANDLE       FileHandle\r
+  )\r
+{\r
+  PEI_CORE_INSTANCE            *Private;\r
+  Private = PEI_CORE_INSTANCE_FROM_PS_THIS (GetPeiServicesTablePointer ());\r
+\r
+  if (Private->CurrentFileHandle != FileHandle) {\r
+    //\r
+    // The FileHandle must be for the current PEIM\r
+    //\r
+    return EFI_NOT_FOUND;\r
+  }\r
+\r
+  if (Private->Fv[Private->CurrentPeimFvCount].PeimState[Private->CurrentPeimCount] >= PEIM_STATE_REGISITER_FOR_SHADOW) {\r
+    //\r
+    // If the PEIM has already entered the PEIM_STATE_REGISTER_FOR_SHADOW or PEIM_STATE_DONE then it's already been started\r
+    //\r
+    return EFI_ALREADY_STARTED;\r
+  }\r
+  \r
+  Private->Fv[Private->CurrentPeimFvCount].PeimState[Private->CurrentPeimCount] = PEIM_STATE_REGISITER_FOR_SHADOW;\r
+\r
+  return EFI_SUCCESS;\r
+}\r
+\r
+\r