1) use PEI_CORE_INSTANCE as the parameter to internal functions of Pei Core/Dxe/Dispatcher/Dispatcher
2) minor bug fixes
3) fix how EFI_HOB_TYPE_FV2 is interpreted in DXE core so that a encapsulated FV won't be dispatched twice

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/branches/PI_PeiCore_Enable@3909 6f19259b-4bc3-4df7-8a09-765794883524
diff --git a/trunk/edk2/MdeModulePkg/Core/Dxe/Dispatcher/Dispatcher.c b/trunk/edk2/MdeModulePkg/Core/Dxe/Dispatcher/Dispatcher.c
index c7b4cc3..99d9507 100644
--- a/trunk/edk2/MdeModulePkg/Core/Dxe/Dispatcher/Dispatcher.c
+++ b/trunk/edk2/MdeModulePkg/Core/Dxe/Dispatcher/Dispatcher.c
@@ -814,25 +814,12 @@
 --*/

 {

   EFI_PEI_HOB_POINTERS                HobFv2;

-  EFI_STATUS                          Status;

-  EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL  *Fvb;

-  EFI_FIRMWARE_VOLUME_HEADER          *FvHeader;

-  EFI_PHYSICAL_ADDRESS                FvHeaderAddr;

   

   HobFv2.Raw = GetHobList ();

   

   while ((HobFv2.Raw = GetNextHob (EFI_HOB_TYPE_FV2, HobFv2.Raw)) != NULL) {

     if (CompareGuid (DriverName, &HobFv2.FirmwareVolume2->FileName)) {

-      Status = CoreHandleProtocol (FvHandle, &gEfiFirmwareVolumeBlockProtocolGuid, (VOID **) &Fvb);

-      if (!EFI_ERROR (Status)) {

-        Status = Fvb->GetPhysicalAddress (Fvb, &FvHeaderAddr);

-        if (!EFI_ERROR (Status)) {

-          FvHeader = (EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) FvHeaderAddr;

-          if (CompareGuid (&FvHeader->FileSystemGuid, &HobFv2.FirmwareVolume2->FvName)) {

-            return TRUE;

-          }

-        }

-      }

+      return TRUE;

     }

     HobFv2.Raw = GET_NEXT_HOB (HobFv2);

   }

diff --git a/trunk/edk2/MdeModulePkg/Core/Pei/Dispatcher/Dispatcher.c b/trunk/edk2/MdeModulePkg/Core/Pei/Dispatcher/Dispatcher.c
index 1ee4271..b9780a2 100644
--- a/trunk/edk2/MdeModulePkg/Core/Pei/Dispatcher/Dispatcher.c
+++ b/trunk/edk2/MdeModulePkg/Core/Pei/Dispatcher/Dispatcher.c
@@ -277,7 +277,7 @@
           // Process the Notify list and dispatch any notifies for

           // newly installed PPIs.

           //

-          ProcessNotifyList (&Private->PS);

+          ProcessNotifyList (Private);

         }

       }

     }

@@ -374,7 +374,7 @@
             // Process the Notify list and dispatch any notifies for

             // newly installed PPIs.

             //

-            ProcessNotifyList (PeiServices);

+            ProcessNotifyList (Private);

 

             //

             // If permanent memory was discovered and installed by this

@@ -466,7 +466,7 @@
               // Process the Notify list and dispatch any notifies for

               // newly installed PPIs.

               //

-              ProcessNotifyList (PeiServices);

+              ProcessNotifyList (Private);

             }

           }

         }

diff --git a/trunk/edk2/MdeModulePkg/Core/Pei/FwVol/FwVol.c b/trunk/edk2/MdeModulePkg/Core/Pei/FwVol/FwVol.c
index 5b8483a..0594566 100644
--- a/trunk/edk2/MdeModulePkg/Core/Pei/FwVol/FwVol.c
+++ b/trunk/edk2/MdeModulePkg/Core/Pei/FwVol/FwVol.c
@@ -20,7 +20,6 @@
 --*/

 

 #include <PeiMain.h>

-#include "PiFwVol.h"

 

 STATIC EFI_PEI_NOTIFY_DESCRIPTOR mNotifyOnFvInfoList = {

   (EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),

@@ -380,6 +379,7 @@
        }

      }

     PrivateData->Fv[PrivateData->FvCount++].FvHeader = (EFI_FIRMWARE_VOLUME_HEADER*)Fv->FvInfo;

+    BuildFvHob ((EFI_PHYSICAL_ADDRESS) Fv->FvInfo, (UINT64) Fv->FvInfoSize);

   }

 

   //

diff --git a/trunk/edk2/MdeModulePkg/Core/Pei/FwVol/PiFwVol.h b/trunk/edk2/MdeModulePkg/Core/Pei/FwVol/PiFwVol.h
deleted file mode 100644
index 315bf6c..0000000
--- a/trunk/edk2/MdeModulePkg/Core/Pei/FwVol/PiFwVol.h
+++ /dev/null
@@ -1,60 +0,0 @@
-#ifndef __PIFWVOL_H_

-#define __PIFWVOL_H_

-

-EFI_STATUS

-EFIAPI 

-PiFvProcessFv (

-  IN CONST  EFI_PEI_FIRMWARE_VOLUME_PPI *This,

-  IN CONST  VOID                        *Buffer,

-  IN CONST  UINTN                       BufferSize,

-  OUT       EFI_PEI_FV_HANDLE           *FvHandle

-);

-

-

-EFI_STATUS

-EFIAPI

-PiFvFindFileByType ( 

-  IN CONST  EFI_PEI_FIRMWARE_VOLUME_PPI   *This, 

-  IN CONST  EFI_FV_FILETYPE               SearchType, 

-  IN CONST  EFI_PEI_FV_HANDLE             FvHandle,

-  IN OUT EFI_PEI_FILE_HANDLE              *FileHandle 

-);

-

-

-EFI_STATUS

-EFIAPI 

-PiFvFindFileByName (

-  IN CONST  EFI_PEI_FIRMWARE_VOLUME_PPI *This,

-  IN CONST  EFI_GUID                    *FileName,

-  IN CONST  EFI_PEI_FV_HANDLE           FvHandle,

-  OUT       EFI_PEI_FILE_HANDLE         *FileHandle

-);

-

-

-EFI_STATUS

-EFIAPI 

-PiFvGetFileInfo (

-  IN  CONST EFI_PEI_FIRMWARE_VOLUME_PPI   *This, 

-  IN  CONST EFI_PEI_FILE_HANDLE           FileHandle, 

-  OUT       EFI_FV_FILE_INFO              *FileInfo

-);

-

-EFI_STATUS

-EFIAPI 

-PiFvGetVolumeInfo (

-  IN CONST  EFI_PEI_FIRMWARE_VOLUME_PPI   *This, 

-  IN CONST  EFI_PEI_FV_HANDLE             FvHandle, 

-  OUT       EFI_FV_INFO                   *VolumeInfo

-);

-

-EFI_STATUS

-EFIAPI

-PiFvFindSectionByType (

-  IN CONST  EFI_PEI_FIRMWARE_VOLUME_PPI   *This,

-  IN CONST  EFI_SECTION_TYPE              SearchType,

-  IN CONST  EFI_PEI_FILE_HANDLE           FileHandle,

-  OUT       VOID                          **SectionData

-);

-

-

-#endif

diff --git a/trunk/edk2/MdeModulePkg/Core/Pei/Image/Image.c b/trunk/edk2/MdeModulePkg/Core/Pei/Image/Image.c
index 31a5306..ebe79a6 100644
--- a/trunk/edk2/MdeModulePkg/Core/Pei/Image/Image.c
+++ b/trunk/edk2/MdeModulePkg/Core/Pei/Image/Image.c
@@ -111,7 +111,7 @@
 };

 

 

-EFI_PEI_PPI_DESCRIPTOR     gPpiLoadFilePpiList = {

+STATIC EFI_PEI_PPI_DESCRIPTOR     gPpiLoadFilePpiList = {

   (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),

   &gEfiPeiLoadFilePpiGuid,

   &mPeiLoadImagePpi

diff --git a/trunk/edk2/MdeModulePkg/Core/Pei/Memory/MemoryServices.c b/trunk/edk2/MdeModulePkg/Core/Pei/Memory/MemoryServices.c
index 49e9f7f..0976e2c 100644
--- a/trunk/edk2/MdeModulePkg/Core/Pei/Memory/MemoryServices.c
+++ b/trunk/edk2/MdeModulePkg/Core/Pei/Memory/MemoryServices.c
@@ -23,7 +23,7 @@
 

 VOID

 InitializeMemoryServices (

-  IN EFI_PEI_SERVICES            **PeiServices,

+  IN PEI_CORE_INSTANCE           *PrivateData,

   IN CONST EFI_SEC_PEI_HAND_OFF  *SecCoreData,

   IN PEI_CORE_INSTANCE           *OldCoreData

   )

@@ -49,9 +49,6 @@
 

 --*/

 {

-  PEI_CORE_INSTANCE                    *PrivateData;

-

-  PrivateData = PEI_CORE_INSTANCE_FROM_PS_THIS (PeiServices);

   PrivateData->SwitchStackSignal = FALSE;

 

   if (OldCoreData == NULL) {

@@ -64,6 +61,8 @@
     DEBUG_CODE_BEGIN ();

       PrivateData->SizeOfCacheAsRam = SecCoreData->PeiTemporaryRamSize + SecCoreData->StackSize;

       PrivateData->MaxTopOfCarHeap  = (VOID *) ((UINTN) PrivateData->BottomOfCarHeap + (UINTN) PrivateData->SizeOfCacheAsRam);

+      PrivateData->StackBase        = (EFI_PHYSICAL_ADDRESS) (UINTN) SecCoreData->StackBase;

+      PrivateData->StackSize        = (UINT64) SecCoreData->StackSize;

     DEBUG_CODE_END ();

 

     PrivateData->HobList.Raw = PrivateData->BottomOfCarHeap;

@@ -73,23 +72,13 @@
       (EFI_PHYSICAL_ADDRESS) (UINTN) PrivateData->BottomOfCarHeap,

       (UINTN) SecCoreData->PeiTemporaryRamSize

       );

-    //

-    // Copy PeiServices from ROM to Cache in PrivateData

-    //

-    CopyMem (&(PrivateData->ServiceTableShadow), *PeiServices, sizeof (EFI_PEI_SERVICES));

 

     //

     // Set PS to point to ServiceTableShadow in Cache

     //

     PrivateData->PS = &(PrivateData->ServiceTableShadow);

-  } else {

-  //                                                                    

-  // Set PS to point to ServiceTableShadow in Cache one time after the  

-  // stack switched to main memory                                      

-  //                                                                    

-  PrivateData->PS = &(PrivateData->ServiceTableShadow);                 

-}                                                                       

-

+  }

+  

   return;

 }

 

diff --git a/trunk/edk2/MdeModulePkg/Core/Pei/PeiMain.h b/trunk/edk2/MdeModulePkg/Core/Pei/PeiMain.h
index 48e055c..da0c0aa 100644
--- a/trunk/edk2/MdeModulePkg/Core/Pei/PeiMain.h
+++ b/trunk/edk2/MdeModulePkg/Core/Pei/PeiMain.h
@@ -443,7 +443,7 @@
 //

 VOID

 InitializePpiServices (

-  IN EFI_PEI_SERVICES    **PeiServices,

+  IN PEI_CORE_INSTANCE   *PrivateData,

   IN PEI_CORE_INSTANCE   *OldCoreData

   )

 /*++

@@ -602,7 +602,7 @@
 

 VOID

 ProcessNotifyList (

-  IN EFI_PEI_SERVICES    **PeiServices

+  IN PEI_CORE_INSTANCE  *PrivateData

   )

 /*++

 

@@ -621,7 +621,7 @@
 

 VOID

 DispatchNotify (

-  IN CONST EFI_PEI_SERVICES    **PeiServices,

+  IN PEI_CORE_INSTANCE  *PrivateData,

   IN UINTN               NotifyType,

   IN INTN                InstallStartIndex,

   IN INTN                InstallStopIndex,

@@ -960,7 +960,7 @@
 //

 VOID

 InitializeMemoryServices (

-  IN EFI_PEI_SERVICES            **PeiServices,

+  IN PEI_CORE_INSTANCE           *PrivateData,

   IN CONST EFI_SEC_PEI_HAND_OFF  *SecCoreData,

   IN PEI_CORE_INSTANCE           *OldCoreData

   )

diff --git a/trunk/edk2/MdeModulePkg/Core/Pei/PeiMain.inf b/trunk/edk2/MdeModulePkg/Core/Pei/PeiMain.inf
index 1873426..7701696 100644
--- a/trunk/edk2/MdeModulePkg/Core/Pei/PeiMain.inf
+++ b/trunk/edk2/MdeModulePkg/Core/Pei/PeiMain.inf
@@ -102,5 +102,5 @@
   gEfiPeiSecurity2PpiGuid

 

 [BuildOptions.common]

-  MSFT:DEBUG_*_IA32_CC_FLAGS = /Od

+  MSFT:DEBUG_*_IA32_CC_FLAGS = /FAcs

 

diff --git a/trunk/edk2/MdeModulePkg/Core/Pei/PeiMain/PeiMain.c b/trunk/edk2/MdeModulePkg/Core/Pei/PeiMain/PeiMain.c
index bf9e413..f8eb92e 100644
--- a/trunk/edk2/MdeModulePkg/Core/Pei/PeiMain/PeiMain.c
+++ b/trunk/edk2/MdeModulePkg/Core/Pei/PeiMain/PeiMain.c
@@ -120,6 +120,8 @@
   PEI_CORE_TEMP_POINTERS                                TempPtr;

   UINT64                                                mTick;

   PEI_CORE_INSTANCE                                     *OldCoreData;

+  EFI_PEI_CPU_IO_PPI                                    *CpuIo;

+  EFI_PEI_PCI_CFG2_PPI                                  *PciCfg;

 

   mTick = 0;

   OldCoreData = (PEI_CORE_INSTANCE *) Data;

@@ -138,22 +140,31 @@
 

   if (OldCoreData != NULL) {

     CopyMem (&PrivateData, OldCoreData, sizeof (PEI_CORE_INSTANCE));

+    

+    CpuIo = (VOID*)PrivateData.ServiceTableShadow.CpuIo;

+    PciCfg = (VOID*)PrivateData.ServiceTableShadow.PciCfg;

+    

+    CopyMem (&PrivateData.ServiceTableShadow, &mPS, sizeof (mPS));

+    

+    PrivateData.ServiceTableShadow.CpuIo  = CpuIo;

+    PrivateData.ServiceTableShadow.PciCfg = PciCfg;

   } else {

     ZeroMem (&PrivateData, sizeof (PEI_CORE_INSTANCE));

+    PrivateData.Signature = PEI_CORE_HANDLE_SIGNATURE;

+    CopyMem (&PrivateData.ServiceTableShadow, &mPS, sizeof (mPS));

   }

 

-  PrivateData.Signature = PEI_CORE_HANDLE_SIGNATURE;

-  PrivateData.PS = &mPS;

+  PrivateData.PS = &PrivateData.ServiceTableShadow;

 

   //

   // Initialize libraries that the PeiCore is linked against

-  // BUGBUG: The FfsHeader is passed in as NULL.  Do we look it up or remove it from the lib init?

+  // BUGBUG: The FileHandle is passed in as NULL.  Do we look it up or remove it from the lib init?

   //

   ProcessLibraryConstructorList (NULL, &PrivateData.PS);

 

-  InitializeMemoryServices (&PrivateData.PS, SecCoreData, OldCoreData);

+  InitializeMemoryServices (&PrivateData, SecCoreData, OldCoreData);

 

-  InitializePpiServices (&PrivateData.PS, OldCoreData);

+  InitializePpiServices (&PrivateData, OldCoreData);

 

   if (OldCoreData != NULL) {

 

diff --git a/trunk/edk2/MdeModulePkg/Core/Pei/Ppi/Ppi.c b/trunk/edk2/MdeModulePkg/Core/Pei/Ppi/Ppi.c
index e429b66..2ee45c4 100644
--- a/trunk/edk2/MdeModulePkg/Core/Pei/Ppi/Ppi.c
+++ b/trunk/edk2/MdeModulePkg/Core/Pei/Ppi/Ppi.c
@@ -25,7 +25,7 @@
 

 VOID

 InitializePpiServices (

-  IN EFI_PEI_SERVICES  **PeiServices,

+  IN PEI_CORE_INSTANCE *PrivateData,

   IN PEI_CORE_INSTANCE *OldCoreData

   )

 /*++

@@ -45,11 +45,7 @@
 

 --*/

 {

-  PEI_CORE_INSTANCE                    *PrivateData;

-  

   if (OldCoreData == NULL) {

-    PrivateData = PEI_CORE_INSTANCE_FROM_PS_THIS(PeiServices);

-

     PrivateData->PpiData.NotifyListEnd = MAX_PPI_DESCRIPTORS-1;

     PrivateData->PpiData.DispatchListEnd = MAX_PPI_DESCRIPTORS-1;

     PrivateData->PpiData.LastDispatchedNotify = MAX_PPI_DESCRIPTORS-1;

@@ -220,7 +216,7 @@
   // Dispatch any callback level notifies for newly installed PPIs.

   //

   DispatchNotify (

-    (CONST EFI_PEI_SERVICES **) PeiServices,

+    PrivateData,

     EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK,

     LastCallbackInstall,

     PrivateData->PpiData.PpiListEnd,

@@ -298,7 +294,7 @@
   // Dispatch any callback level notifies for the newly installed PPI.

   //

   DispatchNotify (

-    (CONST EFI_PEI_SERVICES **) PeiServices,

+    PrivateData,

     EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK,

     Index,

     Index+1,

@@ -496,7 +492,7 @@
   // Dispatch any callback level notifies for all previously installed PPIs.

   //

   DispatchNotify (

-    (CONST EFI_PEI_SERVICES **) PeiServices,

+    PrivateData,

     EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK,

     0,

     PrivateData->PpiData.PpiListEnd,

@@ -511,7 +507,7 @@
 

 VOID

 ProcessNotifyList (

-  IN EFI_PEI_SERVICES    **PeiServices

+  IN PEI_CORE_INSTANCE  *PrivateData

   )

 /*++

 

@@ -528,11 +524,7 @@
 --*/

 

 {

-  PEI_CORE_INSTANCE       *PrivateData;

   INTN                    TempValue;

-

-  PrivateData = PEI_CORE_INSTANCE_FROM_PS_THIS(PeiServices);

-

  

   while (TRUE) {

     //

@@ -545,7 +537,7 @@
     while (PrivateData->PpiData.LastDispatchedNotify != PrivateData->PpiData.DispatchListEnd) {

       TempValue = PrivateData->PpiData.DispatchListEnd;

       DispatchNotify (

-        (CONST EFI_PEI_SERVICES **) PeiServices,

+        PrivateData,

         EFI_PEI_PPI_DESCRIPTOR_NOTIFY_DISPATCH,

         0,

         PrivateData->PpiData.LastDispatchedInstall,

@@ -566,7 +558,7 @@
     while (PrivateData->PpiData.LastDispatchedInstall != PrivateData->PpiData.PpiListEnd) {

       TempValue = PrivateData->PpiData.PpiListEnd;

       DispatchNotify (

-        (CONST EFI_PEI_SERVICES **) PeiServices,

+        PrivateData,

         EFI_PEI_PPI_DESCRIPTOR_NOTIFY_DISPATCH,

         PrivateData->PpiData.LastDispatchedInstall,

         PrivateData->PpiData.PpiListEnd,

@@ -585,7 +577,7 @@
 

 VOID

 DispatchNotify (

-  IN CONST EFI_PEI_SERVICES    **PeiServices,

+  IN PEI_CORE_INSTANCE  *PrivateData,

   IN UINTN               NotifyType,

   IN INTN                InstallStartIndex,

   IN INTN                InstallStopIndex,

@@ -612,15 +604,12 @@
 --*/

 

 {

-  PEI_CORE_INSTANCE       *PrivateData;

   INTN                   Index1;

   INTN                   Index2;

   EFI_GUID                *SearchGuid;

   EFI_GUID                *CheckGuid;

   EFI_PEI_NOTIFY_DESCRIPTOR   *NotifyDescriptor;

 

-  PrivateData = PEI_CORE_INSTANCE_FROM_PS_THIS(PeiServices);

-

   //

   // Remember that Installs moves up and Notifies moves down.

   //

@@ -645,7 +634,7 @@
           NotifyDescriptor->Notify

           ));

         NotifyDescriptor->Notify (

-                            (EFI_PEI_SERVICES **)PeiServices,

+                            GetPeiServicesTablePointer (),

                             NotifyDescriptor,

                             (PrivateData->PpiData.PpiListPtrs[Index2].Ppi)->Ppi

                             );