[PI compatible enabling] Add PeiRegisterForShadow interface for PEI_SERVICE

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3743 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
klu2 2007-08-30 08:20:57 +00:00
parent 3a63377f2b
commit 14e8823a34
3 changed files with 66 additions and 1 deletions

View File

@ -536,3 +536,43 @@ Returns:
return BuildGuidDataHob (&gEfiPeiCorePrivateGuid, PrivateData, sizeof (PEI_CORE_INSTANCE));
}
/**
This routine enable a PEIM to register itself to shadow when PEI Foundation
discovery permanent memory.
@param FileHandle File handle of a PEIM.
@retval EFI_NOT_FOUND The file handle doesn't point to PEIM itself.
@retval EFI_ALREADY_STARTED Indicate that the PEIM has been registered itself.
@retval EFI_SUCCESS Successfully to register itself.
**/
EFI_STATUS
EFIAPI
PeiRegisterForShadow (
IN EFI_PEI_FILE_HANDLE FileHandle
)
{
PEI_CORE_INSTANCE *Private;
Private = PEI_CORE_INSTANCE_FROM_PS_THIS (GetPeiServicesTablePointer ());
if (Private->CurrentFileHandle != FileHandle) {
//
// The FileHandle must be for the current PEIM
//
return EFI_NOT_FOUND;
}
if (Private->Fv[Private->CurrentPeimFvCount].PeimState[Private->CurrentPeimCount] >= PEIM_STATE_REGISITER_FOR_SHADOW) {
//
// If the PEIM has already entered the PEIM_STATE_REGISTER_FOR_SHADOW or PEIM_STATE_DONE then it's already been started
//
return EFI_ALREADY_STARTED;
}
Private->Fv[Private->CurrentPeimFvCount].PeimState[Private->CurrentPeimCount] = PEIM_STATE_REGISITER_FOR_SHADOW;
return EFI_SUCCESS;
}

View File

@ -45,6 +45,7 @@ Revision History
#include <Library/BaseMemoryLib.h>
#include <Library/TimerLib.h>
#include <IndustryStandard/PeImage.h>
#include <Library/PeiServicesTablePointerLib.h>
extern EFI_GUID gEfiPeiCorePrivateGuid;
@ -1161,6 +1162,24 @@ Returns:
--*/
;
/**
This routine enable a PEIM to register itself to shadow when PEI Foundation
discovery permanent memory.
@param FileHandle File handle of a PEIM.
@retval EFI_NOT_FOUND The file handle doesn't point to PEIM itself.
@retval EFI_ALREADY_STARTED Indicate that the PEIM has been registered itself.
@retval EFI_SUCCESS Successfully to register itself.
**/
EFI_STATUS
EFIAPI
PeiRegisterForShadow (
IN EFI_PEI_FILE_HANDLE FileHandle
)
;
/**
Transfers control to a function starting with a new stack.

View File

@ -69,7 +69,13 @@ static EFI_PEI_SERVICES mPS = {
PeiReportStatusCode,
PeiResetSystem
PeiResetSystem,
NULL,
NULL,
NULL,
NULL,
NULL,
PeiRegisterForShadow
};
EFI_STATUS