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
);