]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Fix a bug that PeiCore might fail to fix up Ppi pointer in CAR.
authorqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>
Sat, 19 Jul 2008 15:56:49 +0000 (15:56 +0000)
committerqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>
Sat, 19 Jul 2008 15:56:49 +0000 (15:56 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5527 6f19259b-4bc3-4df7-8a09-765794883524

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

index 481cf5d02e5c99da47fb0b26a5a2103bcb14523a..f18e954f2ade2e9a5c69cc305442eb2ecfee2979 100644 (file)
@@ -473,7 +473,7 @@ PeiDispatcher (
               // Update HandOffHob for new installed permenent memory\r
               //\r
               OldHandOffTable   = Private->HobList.HandoffInformationTable;\r
-              OldCheckingBottom = (UINTN)OldHandOffTable;\r
+              OldCheckingBottom = (UINTN)(SecCoreData->TemporaryRamBase);\r
               OldCheckingTop    = (UINTN)(OldCheckingBottom + SecCoreData->TemporaryRamSize);\r
 \r
               //\r
@@ -552,7 +552,8 @@ PeiDispatcher (
               ConvertPpiPointers ((CONST EFI_PEI_SERVICES **)PeiServices, \r
                                   OldCheckingBottom, \r
                                   OldCheckingTop, \r
-                                  NewHandOffTable);\r
+                                  HeapOffset\r
+                                  );\r
 \r
               DEBUG ((EFI_D_INFO, "Stack Hob: BaseAddress=0x%X Length=0x%X\n",\r
                                   (UINTN)PrivateInMem->StackBase,\r
index 8e87aaae05d6b2afe59bf44d7a05bc06ba210ca1..7f7ac196d60b3caf0c159905586240e1219b8158 100644 (file)
@@ -325,15 +325,16 @@ InitializePpiServices (
   @param PeiServices         The PEI core services table.\r
   @param OldCheckingBottom   The old checking bottom.\r
   @param OldCheckingTop      The old checking top.\r
-  @param NewHandOffHob       The new handoff HOB list.\r
+  @param Fixup               The address difference between\r
+                             the new Hob list and old Hob list.\r
 \r
 **/\r
 VOID\r
 ConvertPpiPointers (\r
-  IN CONST EFI_PEI_SERVICES                     **PeiServices,\r
+  IN CONST EFI_PEI_SERVICES        **PeiServices,\r
   IN UINTN                         OldCheckingBottom,\r
   IN UINTN                         OldCheckingTop,\r
-  IN EFI_HOB_HANDOFF_INFO_TABLE    *NewHandOffHob\r
+  IN UINTN                         Fixup\r
   )\r
 ;\r
 \r
index fa60d82a5be0857160a9bd4e537c26f74d8486de..b7a9b1232148db8a40bfbfdf693ac239839bd057 100644 (file)
@@ -44,26 +44,24 @@ InitializePpiServices (
   @param PeiServices         The PEI core services table.\r
   @param OldCheckingBottom   The old checking bottom.\r
   @param OldCheckingTop      The old checking top.\r
-  @param NewHandOffHob       The new handoff HOB list.\r
+  @param Fixup               The address difference between\r
+                             the new Hob list and old Hob list.\r
 \r
 **/\r
 VOID\r
 ConvertPpiPointers (\r
-  IN CONST EFI_PEI_SERVICES                     **PeiServices,\r
+  IN CONST EFI_PEI_SERVICES        **PeiServices,\r
   IN UINTN                         OldCheckingBottom,\r
   IN UINTN                         OldCheckingTop,\r
-  IN EFI_HOB_HANDOFF_INFO_TABLE    *NewHandOffHob\r
+  IN UINTN                         Fixup\r
   )\r
 {\r
   PEI_CORE_INSTANCE     *PrivateData;\r
   UINT8                 Index;\r
   PEI_PPI_LIST_POINTERS *PpiPointer;\r
-  UINTN                 Fixup;\r
 \r
   PrivateData = PEI_CORE_INSTANCE_FROM_PS_THIS(PeiServices);\r
 \r
-  Fixup = (UINTN)NewHandOffHob - OldCheckingBottom;\r
-\r
   for (Index = 0; Index < FixedPcdGet32 (PcdPeiCoreMaxPpiSupported); Index++) {\r
     if (Index < PrivateData->PpiData.PpiListEnd ||\r
         Index > PrivateData->PpiData.NotifyListEnd) {\r