From c8ec22a266cdd134ac99c3021003710130613a40 Mon Sep 17 00:00:00 2001 From: jyao1 Date: Tue, 29 Jul 2014 02:21:52 +0000 Subject: Add IntelFspPkg to support create FSP bin based on EDKII. Contributed-under: TianoCore Contribution Agreement 1.0 Signed off by: Ravi Rangarajan Reviewed by: Maurice Ma Reviewed by: Jiewen Yao Reviewed by: Giri Mudusuru Reviewed by: Liming Gao git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15705 6f19259b-4bc3-4df7-8a09-765794883524 --- .../BaseFspSwitchStackLib.inf | 42 ++++++++++++++ .../BaseFspSwitchStackLib/FspSwitchStackLib.c | 42 ++++++++++++++ .../Library/BaseFspSwitchStackLib/Ia32/Stack.asm | 65 ++++++++++++++++++++++ .../Library/BaseFspSwitchStackLib/Ia32/Stack.s | 64 +++++++++++++++++++++ 4 files changed, 213 insertions(+) create mode 100644 IntelFspPkg/Library/BaseFspSwitchStackLib/BaseFspSwitchStackLib.inf create mode 100644 IntelFspPkg/Library/BaseFspSwitchStackLib/FspSwitchStackLib.c create mode 100644 IntelFspPkg/Library/BaseFspSwitchStackLib/Ia32/Stack.asm create mode 100644 IntelFspPkg/Library/BaseFspSwitchStackLib/Ia32/Stack.s (limited to 'IntelFspPkg/Library/BaseFspSwitchStackLib') diff --git a/IntelFspPkg/Library/BaseFspSwitchStackLib/BaseFspSwitchStackLib.inf b/IntelFspPkg/Library/BaseFspSwitchStackLib/BaseFspSwitchStackLib.inf new file mode 100644 index 0000000000..c3b47b5dbf --- /dev/null +++ b/IntelFspPkg/Library/BaseFspSwitchStackLib/BaseFspSwitchStackLib.inf @@ -0,0 +1,42 @@ +## @file +# +# Copyright (c) 2014, Intel Corporation. All rights reserved.
+# +# 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 +# http://opensource.org/licenses/bsd-license.php. +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +## + +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = BaseFspSwitchStackLib + FILE_GUID = 8A5EA987-27F9-4ad0-B07C-D61882BFF4FF + MODULE_TYPE = BASE + VERSION_STRING = 1.0 + LIBRARY_CLASS = FspSwitchStackLib + +[Sources.IA32] + FspSwitchStackLib.c + +[Sources.IA32] + Ia32/Stack.asm | MSFT + Ia32/Stack.s | GCC + +[Packages] + MdePkg/MdePkg.dec + IntelFspPkg/IntelFspPkg.dec + +[LibraryClasses] + BaseLib + IoLib + +[FixedPcd] + gIntelFspPkgTokenSpaceGuid.PcdFspMaxPatchEntry + gIntelFspPkgTokenSpaceGuid.PcdFspMaxPerfEntry + + + diff --git a/IntelFspPkg/Library/BaseFspSwitchStackLib/FspSwitchStackLib.c b/IntelFspPkg/Library/BaseFspSwitchStackLib/FspSwitchStackLib.c new file mode 100644 index 0000000000..42a57a27c0 --- /dev/null +++ b/IntelFspPkg/Library/BaseFspSwitchStackLib/FspSwitchStackLib.c @@ -0,0 +1,42 @@ +/** @file + + Copyright (c) 2014, Intel Corporation. All rights reserved.
+ 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 + http://opensource.org/licenses/bsd-license.php. + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#include +#include +#include + +/** + + Switch the current stack to the previous saved stack. + + @param[in] NewStack The new stack to be switched. + + @return OldStack After switching to the saved stack, + this value will be saved in eax before returning. + + +**/ +UINT32 +SwapStack ( + IN UINT32 NewStack + ) +{ + FSP_GLOBAL_DATA *FspData; + UINT32 OldStack; + + FspData = GetFspGlobalDataPointer (); + OldStack = FspData->CoreStack; + FspData->CoreStack = NewStack; + return OldStack; +} + diff --git a/IntelFspPkg/Library/BaseFspSwitchStackLib/Ia32/Stack.asm b/IntelFspPkg/Library/BaseFspSwitchStackLib/Ia32/Stack.asm new file mode 100644 index 0000000000..d04f229a6b --- /dev/null +++ b/IntelFspPkg/Library/BaseFspSwitchStackLib/Ia32/Stack.asm @@ -0,0 +1,65 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2014, Intel Corporation. All rights reserved.
+; 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 +; http://opensource.org/licenses/bsd-license.php. +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Abstract: +; +; Switch the stack from temporary memory to permenent memory. +; +;------------------------------------------------------------------------------ + + .586p + .model flat,C + .code + +;------------------------------------------------------------------------------ +; UINT32 +; EFIAPI +; Pei2LoaderSwitchStack ( +; VOID +; ) +;------------------------------------------------------------------------------ +EXTERNDEF C MeasurePoint:PROC +Pei2LoaderSwitchStack PROC C PUBLIC + jmp Loader2PeiSwitchStack +Pei2LoaderSwitchStack ENDP + +;------------------------------------------------------------------------------ +; UINT32 +; EFIAPI +; Loader2PeiSwitchStack ( +; VOID +; ) +;------------------------------------------------------------------------------ +EXTERNDEF C SwapStack:PROC +Loader2PeiSwitchStack PROC C PUBLIC + ; Save current contexts + push offset exit + pushfd + cli + pushad + sub esp, 8 + sidt fword ptr [esp] + + ; Load new stack + push esp + call SwapStack + mov esp, eax + + ; Restore previous contexts + lidt fword ptr [esp] + add esp, 8 + popad + popfd +exit: + ret +Loader2PeiSwitchStack ENDP + + END diff --git a/IntelFspPkg/Library/BaseFspSwitchStackLib/Ia32/Stack.s b/IntelFspPkg/Library/BaseFspSwitchStackLib/Ia32/Stack.s new file mode 100644 index 0000000000..6932cd8448 --- /dev/null +++ b/IntelFspPkg/Library/BaseFspSwitchStackLib/Ia32/Stack.s @@ -0,0 +1,64 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2014, Intel Corporation. All rights reserved.
+# 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 +# http://opensource.org/licenses/bsd-license.php. +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Abstract: +# +# Switch the stack from temporary memory to permenent memory. +# +#------------------------------------------------------------------------------ + +ASM_GLOBAL ASM_PFX(Pei2LoaderSwitchStack) +ASM_GLOBAL ASM_PFX(Loader2PeiSwitchStack) + +#------------------------------------------------------------------------------ +# UINT32 +# EFIAPI +# Pei2LoaderSwitchStack ( +# VOID +# ) +#------------------------------------------------------------------------------ +ASM_GLOBAL ASM_PFX(Pei2LoaderSwitchStack) +ASM_PFX(Pei2LoaderSwitchStack): + jmp ASM_PFX(Loader2PeiSwitchStack) + +#------------------------------------------------------------------------------ +# UINT32 +# EFIAPI +# Loader2PeiSwitchStack ( +# ) +#------------------------------------------------------------------------------ +ASM_GLOBAL ASM_PFX(Loader2PeiSwitchStack) +ASM_PFX(Loader2PeiSwitchStack): +#Save current contexts + push $exit + pushf + pushf + cli + pusha + push $0x0 + push $0x0 + sidt (%esp) + + # Load new stack + push %esp + call ASM_PFX(SwapStack) + mov %eax,%esp + + # Restore previous contexts + lidt (%esp) + add $8,%esp + popa + popf + popf +exit: + ret + + -- cgit v1.2.3