summaryrefslogtreecommitdiffstats
path: root/IntelFspPkg/Library
diff options
context:
space:
mode:
Diffstat (limited to 'IntelFspPkg/Library')
-rw-r--r--IntelFspPkg/Library/BaseFspCommonLib/FspCommonLib.c48
-rw-r--r--IntelFspPkg/Library/BaseFspPlatformLib/BaseFspPlatformLib.inf3
-rw-r--r--IntelFspPkg/Library/BaseFspPlatformLib/FspPlatformMemory.c46
-rw-r--r--IntelFspPkg/Library/BaseFspPlatformLib/FspPlatformNotify.c57
-rw-r--r--IntelFspPkg/Library/BaseFspSwitchStackLib/Ia32/Stack.s21
5 files changed, 126 insertions, 49 deletions
diff --git a/IntelFspPkg/Library/BaseFspCommonLib/FspCommonLib.c b/IntelFspPkg/Library/BaseFspCommonLib/FspCommonLib.c
index 958a7322a0..3b40a2b9a9 100644
--- a/IntelFspPkg/Library/BaseFspCommonLib/FspCommonLib.c
+++ b/IntelFspPkg/Library/BaseFspCommonLib/FspCommonLib.c
@@ -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;
+}
+
diff --git a/IntelFspPkg/Library/BaseFspPlatformLib/BaseFspPlatformLib.inf b/IntelFspPkg/Library/BaseFspPlatformLib/BaseFspPlatformLib.inf
index 1f5dd1d1f8..4e528d0e9a 100644
--- a/IntelFspPkg/Library/BaseFspPlatformLib/BaseFspPlatformLib.inf
+++ b/IntelFspPkg/Library/BaseFspPlatformLib/BaseFspPlatformLib.inf
@@ -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
diff --git a/IntelFspPkg/Library/BaseFspPlatformLib/FspPlatformMemory.c b/IntelFspPkg/Library/BaseFspPlatformLib/FspPlatformMemory.c
index 2f1c0b14e5..6fb4dca765 100644
--- a/IntelFspPkg/Library/BaseFspPlatformLib/FspPlatformMemory.c
+++ b/IntelFspPkg/Library/BaseFspPlatformLib/FspPlatformMemory.c
@@ -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);
}
-
}
diff --git a/IntelFspPkg/Library/BaseFspPlatformLib/FspPlatformNotify.c b/IntelFspPkg/Library/BaseFspPlatformLib/FspPlatformNotify.c
index d405233e41..33b2ebfe12 100644
--- a/IntelFspPkg/Library/BaseFspPlatformLib/FspPlatformNotify.c
+++ b/IntelFspPkg/Library/BaseFspPlatformLib/FspPlatformNotify.c
@@ -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;
-
- FspInitParams = (FSP_INIT_PARAMS *)GetFspApiParameter ();
-
- //
- // Modify the parameters for ContinuationFunc
- //
- SetFspContinuationFuncParameter(EFI_SUCCESS, 0);
- SetFspContinuationFuncParameter((UINT32)GetHobList(), 1);
+ FSP_INIT_PARAMS *FspInitParams;
+
+ 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 return address to ContinuationFunc
- //
- SetFspApiReturnAddress((UINT32)FspInitParams->ContinuationFunc);
+ //
+ // 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);
+ }
- //
- // 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++;
diff --git a/IntelFspPkg/Library/BaseFspSwitchStackLib/Ia32/Stack.s b/IntelFspPkg/Library/BaseFspSwitchStackLib/Ia32/Stack.s
index 6932cd8448..4773fe94c2 100644
--- a/IntelFspPkg/Library/BaseFspSwitchStackLib/Ia32/Stack.s
+++ b/IntelFspPkg/Library/BaseFspSwitchStackLib/Ia32/Stack.s
@@ -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