Update IntelFspPkg according to FSP1.1.
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: "Yao, Jiewen" <jiewen.yao@intel.com> Reviewed-by: "Rangarajan, Ravi P" <ravi.p.rangarajan@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16825 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
/** @file
|
||||
|
||||
Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
@@ -316,3 +316,49 @@ SetFspMeasurePoint (
|
||||
|
||||
return FspData->PerfData[(FspData->PerfIdx)++];
|
||||
}
|
||||
|
||||
/**
|
||||
This function gets the FSP info header pointer.
|
||||
|
||||
@retval FspInfoHeader FSP info header pointer
|
||||
**/
|
||||
FSP_INFO_HEADER *
|
||||
EFIAPI
|
||||
GetFspInfoHeader (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
return GetFspGlobalDataPointer()->FspInfoHeader;
|
||||
}
|
||||
|
||||
/**
|
||||
This function gets FSP API calling mode
|
||||
|
||||
@retval API calling mode
|
||||
**/
|
||||
UINT8
|
||||
EFIAPI
|
||||
GetFspApiCallingMode (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
return GetFspGlobalDataPointer()->ApiMode;
|
||||
}
|
||||
|
||||
/**
|
||||
This function sets FSP API calling mode
|
||||
|
||||
@param[in] Mode API calling mode
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
SetFspApiCallingMode (
|
||||
UINT8 Mode
|
||||
)
|
||||
{
|
||||
FSP_GLOBAL_DATA *FspData;
|
||||
|
||||
FspData = GetFspGlobalDataPointer ();
|
||||
FspData->ApiMode = Mode;
|
||||
}
|
||||
|
||||
|
@@ -30,6 +30,7 @@
|
||||
|
||||
[LibraryClasses]
|
||||
BaseMemoryLib
|
||||
MemoryAllocationLib
|
||||
|
||||
[Pcd]
|
||||
gIntelFspPkgTokenSpaceGuid.PcdGlobalDataPointerAddress ## CONSUMES
|
||||
@@ -38,7 +39,7 @@
|
||||
gIntelFspPkgTokenSpaceGuid.PcdFspTemporaryRamSize ## CONSUMES
|
||||
|
||||
[Guids]
|
||||
gFspBootLoaderTemporaryMemoryGuid ## PRODUCES ## HOB
|
||||
gFspBootLoaderTempMemoryGuid ## PRODUCES ## HOB
|
||||
|
||||
[FixedPcd]
|
||||
gIntelFspPkgTokenSpaceGuid.PcdFspMaxPatchEntry ## CONSUMES
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/** @file
|
||||
|
||||
Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
@@ -14,6 +14,7 @@
|
||||
#include <PiPei.h>
|
||||
#include <Library/BaseLib.h>
|
||||
#include <Library/BaseMemoryLib.h>
|
||||
#include <Library/MemoryAllocationLib.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/PcdLib.h>
|
||||
#include <Library/HobLib.h>
|
||||
@@ -76,17 +77,20 @@ FspMigrateTemporaryMemory (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
FSP_INIT_RT_COMMON_BUFFER *FspInitRtBuffer;
|
||||
UINT32 BootLoaderTempRamStart;
|
||||
UINT32 BootLoaderTempRamEnd;
|
||||
UINT32 BootLoaderTempRamSize;
|
||||
UINT32 OffsetGap;
|
||||
UINT32 FspParamPtr;
|
||||
FSP_INIT_PARAMS *FspInitParams;
|
||||
UINT32 *NewStackTop;
|
||||
VOID *BootLoaderTempRamHob;
|
||||
VOID *UpdDataRgnPtr;
|
||||
VOID *PlatformDataPtr;
|
||||
FSP_INIT_RT_COMMON_BUFFER *FspInitRtBuffer;
|
||||
UINT32 BootLoaderTempRamStart;
|
||||
UINT32 BootLoaderTempRamEnd;
|
||||
UINT32 BootLoaderTempRamSize;
|
||||
UINT32 OffsetGap;
|
||||
UINT32 FspParamPtr;
|
||||
FSP_INIT_PARAMS *FspInitParams;
|
||||
UINT32 *NewStackTop;
|
||||
VOID *BootLoaderTempRamHob;
|
||||
VOID *UpdDataRgnPtr;
|
||||
VOID *PlatformDataPtr;
|
||||
UINT8 ApiMode;
|
||||
|
||||
ApiMode = GetFspApiCallingMode ();
|
||||
|
||||
//
|
||||
// Get the temporary memory range used by the bootloader
|
||||
@@ -98,17 +102,24 @@ FspMigrateTemporaryMemory (
|
||||
//
|
||||
// Build a Boot Loader Temporary Memory GUID HOB
|
||||
//
|
||||
BootLoaderTempRamHob = BuildGuidHob (&gFspBootLoaderTemporaryMemoryGuid, BootLoaderTempRamSize);
|
||||
if (ApiMode == 0) {
|
||||
BootLoaderTempRamHob = BuildGuidHob (&gFspBootLoaderTempMemoryGuid, BootLoaderTempRamSize);
|
||||
} else {
|
||||
BootLoaderTempRamHob = (VOID *)AllocatePool (BootLoaderTempRamSize);
|
||||
}
|
||||
|
||||
CopyMem (BootLoaderTempRamHob, (VOID *)BootLoaderTempRamStart, BootLoaderTempRamSize);
|
||||
OffsetGap = (UINT32)BootLoaderTempRamHob - BootLoaderTempRamStart;
|
||||
|
||||
//
|
||||
// Set a new stack frame for the continuation function
|
||||
//
|
||||
FspInitParams = (FSP_INIT_PARAMS *)GetFspApiParameter ();
|
||||
FspInitRtBuffer = (FSP_INIT_RT_COMMON_BUFFER *)FspInitParams->RtBufferPtr;
|
||||
NewStackTop = (UINT32 *)FspInitRtBuffer->StackTop - 1;
|
||||
SetFspCoreStackPointer (NewStackTop);
|
||||
if (ApiMode == 0) {
|
||||
FspInitParams = (FSP_INIT_PARAMS *)GetFspApiParameter ();
|
||||
FspInitRtBuffer = (FSP_INIT_RT_COMMON_BUFFER *)FspInitParams->RtBufferPtr;
|
||||
NewStackTop = (UINT32 *)FspInitRtBuffer->StackTop - 1;
|
||||
SetFspCoreStackPointer (NewStackTop);
|
||||
}
|
||||
|
||||
//
|
||||
// Fix the FspInit Parameter Pointers to the new location.
|
||||
@@ -151,5 +162,4 @@ FspMigrateTemporaryMemory (
|
||||
((UINT32)PlatformDataPtr < BootLoaderTempRamEnd)) {
|
||||
SetFspPlatformDataPointer ((UINT8 *)PlatformDataPtr + OffsetGap);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/** @file
|
||||
|
||||
Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
@@ -98,26 +98,43 @@ FspInitDone (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
FSP_INIT_PARAMS *FspInitParams;
|
||||
FSP_INIT_PARAMS *FspInitParams;
|
||||
|
||||
FspInitParams = (FSP_INIT_PARAMS *)GetFspApiParameter ();
|
||||
if (GetFspApiCallingMode() == 0) {
|
||||
//
|
||||
// FspInit API is used, so jump into the ContinuationFunc
|
||||
//
|
||||
FspInitParams = (FSP_INIT_PARAMS *)GetFspApiParameter ();
|
||||
|
||||
//
|
||||
// Modify the parameters for ContinuationFunc
|
||||
//
|
||||
SetFspContinuationFuncParameter(EFI_SUCCESS, 0);
|
||||
SetFspContinuationFuncParameter((UINT32)GetHobList(), 1);
|
||||
|
||||
//
|
||||
// Modify the return address to ContinuationFunc
|
||||
//
|
||||
SetFspApiReturnAddress((UINT32)FspInitParams->ContinuationFunc);
|
||||
|
||||
//
|
||||
// Give control back to the boot loader framework caller after FspInit is done
|
||||
// It is done throught the continuation function
|
||||
//
|
||||
SetFspMeasurePoint (FSP_PERF_ID_API_FSPINIT_EXIT);
|
||||
} else {
|
||||
//
|
||||
// FspMemoryInit API is used, so return directly
|
||||
//
|
||||
|
||||
//
|
||||
// Modify the parameters for ContinuationFunc
|
||||
//
|
||||
SetFspContinuationFuncParameter(EFI_SUCCESS, 0);
|
||||
SetFspContinuationFuncParameter((UINT32)GetHobList(), 1);
|
||||
//
|
||||
// This is the end of the FspSiliconInit API
|
||||
// Give control back to the boot loader
|
||||
//
|
||||
DEBUG ((DEBUG_INFO | DEBUG_INIT, "FspSiliconInitApi() - End\n"));
|
||||
SetFspApiReturnStatus (EFI_SUCCESS);
|
||||
}
|
||||
|
||||
//
|
||||
// Modify the return address to ContinuationFunc
|
||||
//
|
||||
SetFspApiReturnAddress((UINT32)FspInitParams->ContinuationFunc);
|
||||
|
||||
//
|
||||
// Give control back to the boot loader framework caller after FspInit is done
|
||||
// It is done throught the continuation function
|
||||
//
|
||||
SetFspMeasurePoint (FSP_PERF_ID_API_FSPINIT_EXIT);
|
||||
Pei2LoaderSwitchStack();
|
||||
}
|
||||
|
||||
@@ -151,12 +168,14 @@ FspWaitForNotify (
|
||||
//
|
||||
// Notify code does not follow the predefined order
|
||||
//
|
||||
DEBUG ((DEBUG_INFO, "Unsupported FSP Notification Value\n"));
|
||||
SetFspApiReturnStatus(EFI_UNSUPPORTED);
|
||||
} else {
|
||||
//
|
||||
// Process Notification and Give control back to the boot loader framework caller
|
||||
//
|
||||
Status = FspNotificationHandler (NotificationValue);
|
||||
DEBUG ((DEBUG_INFO, "FSP Notification Handler Returns : 0x%08X\n", Status));
|
||||
SetFspApiReturnStatus(Status);
|
||||
if (!EFI_ERROR(Status)) {
|
||||
NotificationCount++;
|
||||
|
@@ -1,6 +1,6 @@
|
||||
#------------------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
|
||||
# Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.<BR>
|
||||
# This program and the accompanying materials
|
||||
# are licensed and made available under the terms and conditions of the BSD License
|
||||
# which accompanies this distribution. The full text of the license may be found at
|
||||
@@ -15,8 +15,6 @@
|
||||
#
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
ASM_GLOBAL ASM_PFX(Pei2LoaderSwitchStack)
|
||||
ASM_GLOBAL ASM_PFX(Loader2PeiSwitchStack)
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# UINT32
|
||||
@@ -37,27 +35,30 @@ ASM_PFX(Pei2LoaderSwitchStack):
|
||||
#------------------------------------------------------------------------------
|
||||
ASM_GLOBAL ASM_PFX(Loader2PeiSwitchStack)
|
||||
ASM_PFX(Loader2PeiSwitchStack):
|
||||
#Save current contexts
|
||||
#
|
||||
#Save current contexts
|
||||
#
|
||||
push $exit
|
||||
pushf
|
||||
pushf
|
||||
cli
|
||||
pusha
|
||||
push $0x0
|
||||
push $0x0
|
||||
sub $0x08, %esp
|
||||
sidt (%esp)
|
||||
|
||||
#
|
||||
# Load new stack
|
||||
#
|
||||
push %esp
|
||||
call ASM_PFX(SwapStack)
|
||||
mov %eax,%esp
|
||||
movl %eax, %esp
|
||||
|
||||
#
|
||||
# Restore previous contexts
|
||||
#
|
||||
lidt (%esp)
|
||||
add $8,%esp
|
||||
add $0x08,%esp
|
||||
popa
|
||||
popf
|
||||
popf
|
||||
exit:
|
||||
ret
|
||||
|
||||
|
Reference in New Issue
Block a user