]> git.proxmox.com Git - mirror_edk2.git/commitdiff
[PI compatible enabling] Add PeiRegisterForShadow interface for PEI_SERVICE
authorklu2 <klu2@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 30 Aug 2007 08:20:57 +0000 (08:20 +0000)
committerklu2 <klu2@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 30 Aug 2007 08:20:57 +0000 (08:20 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3743 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Core/Pei/Dispatcher/Dispatcher.c
MdeModulePkg/Core/Pei/PeiMain.h
MdeModulePkg/Core/Pei/PeiMain/PeiMain.c

index 7ae83479631d8f760cae54ddf95b5a301ee6b6cf..67aa1bd53520dba24f5b440e9fa2519bb1fd859b 100644 (file)
@@ -536,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
index 023114750d5b4b054ff88605fb25141a28f20f52..e71ae78b0439e96b877daa269bb6c4b93f8ae1ed 100644 (file)
@@ -45,6 +45,7 @@ Revision History
 #include <Library/BaseMemoryLib.h>\r
 #include <Library/TimerLib.h>\r
 #include <IndustryStandard/PeImage.h>\r
+#include <Library/PeiServicesTablePointerLib.h>\r
 \r
 extern EFI_GUID gEfiPeiCorePrivateGuid;\r
 \r
@@ -1161,6 +1162,24 @@ Returns:
 --*/\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
+\r
 /**\r
   Transfers control to a function starting with a new stack.\r
 \r
index 5d439f74ac950bd3c1b63933dac3fe857ba9e3ba..b2f7807479af44c2a49149197578f4f7cd287305 100644 (file)
@@ -69,7 +69,13 @@ static EFI_PEI_SERVICES  mPS = {
 \r
   PeiReportStatusCode,\r
 \r
-  PeiResetSystem\r
+  PeiResetSystem,\r
+  NULL,\r
+  NULL,\r
+  NULL,\r
+  NULL,\r
+  NULL,\r
+  PeiRegisterForShadow\r
 };\r
 \r
 EFI_STATUS\r