From 42a83e80f37c11a359e0fe78bb01e98225589b7d Mon Sep 17 00:00:00 2001 From: mdkinney Date: Tue, 3 Aug 2010 07:41:54 +0000 Subject: Clean up SEC implementation for Ovmf. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10770 6f19259b-4bc3-4df7-8a09-765794883524 --- OvmfPkg/Sec/Ia32/SecEntry.S | 4 +- OvmfPkg/Sec/Ia32/SecEntry.asm | 4 +- OvmfPkg/Sec/Ia32/Stack.S | 93 ---------------------------- OvmfPkg/Sec/Ia32/SwitchStack.c | 136 ----------------------------------------- 4 files changed, 4 insertions(+), 233 deletions(-) delete mode 100644 OvmfPkg/Sec/Ia32/Stack.S delete mode 100644 OvmfPkg/Sec/Ia32/SwitchStack.c (limited to 'OvmfPkg/Sec/Ia32') diff --git a/OvmfPkg/Sec/Ia32/SecEntry.S b/OvmfPkg/Sec/Ia32/SecEntry.S index 4602cea0e1..a1b0c0d0f0 100644 --- a/OvmfPkg/Sec/Ia32/SecEntry.S +++ b/OvmfPkg/Sec/Ia32/SecEntry.S @@ -17,7 +17,7 @@ #------------------------------------------------------------------------------ -#include "SecMain.h" +#include #EXTERN ASM_PFX(SecCoreStartupWithStack) @@ -39,7 +39,7 @@ ASM_PFX(_ModuleEntryPoint): # Load temporary stack top at very low memory. The C code # can reload to a better address. # - movl $INITIAL_TOP_OF_STACK, %eax + movl $BASE_512KB, %eax movl %eax, %esp nop diff --git a/OvmfPkg/Sec/Ia32/SecEntry.asm b/OvmfPkg/Sec/Ia32/SecEntry.asm index 8fce624a2d..4b0e95af48 100644 --- a/OvmfPkg/Sec/Ia32/SecEntry.asm +++ b/OvmfPkg/Sec/Ia32/SecEntry.asm @@ -16,7 +16,7 @@ ;* ;------------------------------------------------------------------------------ -#include "SecMain.h" +#include .686 .model flat,C @@ -41,7 +41,7 @@ _ModuleEntryPoint PROC PUBLIC ; Load temporary stack top at very low memory. The C code ; can reload to a better address. ; - mov eax, INITIAL_TOP_OF_STACK + mov eax, BASE_512KB mov esp, eax nop diff --git a/OvmfPkg/Sec/Ia32/Stack.S b/OvmfPkg/Sec/Ia32/Stack.S deleted file mode 100644 index 70502d679b..0000000000 --- a/OvmfPkg/Sec/Ia32/Stack.S +++ /dev/null @@ -1,93 +0,0 @@ -#------------------------------------------------------------------------------ -# -# Copyright (c) 2008, 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. -# -# Module Name: -# -# Stack.asm -# -# Abstract: -# -# Switch the stack from temporary memory to permenent memory. -# -#------------------------------------------------------------------------------ - -#------------------------------------------------------------------------------ -# VOID -# EFIAPI -# SecSwitchStack ( -# UINT32 TemporaryMemoryBase, -# UINT32 PermenentMemoryBase -# ); -#------------------------------------------------------------------------------ - -#include - -ASM_GLOBAL ASM_PFX(SecSwitchStack) -ASM_PFX(SecSwitchStack): -# -# Save three register: eax, ebx, ecx -# - push %eax - push %ebx - push %ecx - push %edx - -# -# !!CAUTION!! this function address's is pushed into stack after -# migration of whole temporary memory, so need save it to permenent -# memory at first! -# - - movl 20(%esp), %ebx # Save the first parameter - movl 24(%esp), %ecx # Save the second parameter - -# -# Save this function's return address into permenent memory at first. -# Then, Fixup the esp point to permenent memory -# - - movl %esp, %eax - subl %ebx, %eax - addl %ecx, %eax - movl (%esp), %edx # copy pushed register's value to permenent memory - movl %edx, (%eax) - movl 4(%esp), %edx - movl %edx, 4(%eax) - movl 8(%esp), %edx - movl %edx, 8(%eax) - movl 12(%esp), %edx - movl %edx, 12(%eax) - movl 16(%esp), %edx - movl %edx, 16(%eax) - movl %eax, %esp # From now, esp is pointed to permenent memory - -# -# Fixup the ebp point to permenent memory -# - movl %ebp, %eax - subl %ebx, %eax - addl %ecx, %eax - movl %eax, %ebp # From now, ebp is pointed to permenent memory - -# -# Fixup callee's ebp point for PeiDispatch -# - movl (%ebp), %eax - subl %ebx, %eax - addl %ecx, %eax - movl %eax, (%ebp) # From now, Temporary's PPI caller's stack is in permenent memory - - pop %edx - pop %ecx - pop %ebx - pop %eax - ret - diff --git a/OvmfPkg/Sec/Ia32/SwitchStack.c b/OvmfPkg/Sec/Ia32/SwitchStack.c deleted file mode 100644 index 9fb18933da..0000000000 --- a/OvmfPkg/Sec/Ia32/SwitchStack.c +++ /dev/null @@ -1,136 +0,0 @@ -/** @file - Switch Stack functions. - - Copyright (c) 2006 - 2007, 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 common header file for this module. -// - - -#include -#include -#include -#include - -/** - Transfers control to a function starting with a new stack. - - Transfers control to the function specified by EntryPoint using the new stack - specified by NewStack and passing in the parameters specified by Context1 and - Context2. Context1 and Context2 are optional and may be NULL. The function - EntryPoint must never return. - - If EntryPoint is NULL, then ASSERT(). - If NewStack is NULL, then ASSERT(). - - @param EntryPoint A pointer to function to call with the new stack. - @param Context1 A pointer to the context to pass into the EntryPoint - function. - @param Context2 A pointer to the context to pass into the EntryPoint - function. - @param NewStack A pointer to the new stack to use for the EntryPoint - function. - @param NewBsp A pointer to the new BSP for the EntryPoint on IPF. It's - Reserved on other architectures. - -**/ -VOID -EFIAPI -PeiSwitchStacks ( - IN SWITCH_STACK_ENTRY_POINT EntryPoint, - IN VOID *Context1, OPTIONAL - IN VOID *Context2, OPTIONAL - IN VOID *Context3, OPTIONAL - IN VOID *OldTopOfStack, - IN VOID *NewStack - ) -{ - BASE_LIBRARY_JUMP_BUFFER JumpBuffer; - - ASSERT (EntryPoint != NULL); - ASSERT (NewStack != NULL); - - // - // Stack should be aligned with CPU_STACK_ALIGNMENT - // - ASSERT (((UINTN)NewStack & (CPU_STACK_ALIGNMENT - 1)) == 0); - - JumpBuffer.Eip = (UINTN)EntryPoint; - JumpBuffer.Esp = (UINTN)NewStack - sizeof (VOID*); - JumpBuffer.Esp -= sizeof (Context1) + sizeof (Context2) + sizeof(Context3); - ((VOID**)JumpBuffer.Esp)[1] = Context1; - ((VOID**)JumpBuffer.Esp)[2] = Context2; - ((VOID**)JumpBuffer.Esp)[3] = Context3; - - LongJump (&JumpBuffer, (UINTN)-1); - - // - // InternalSwitchStack () will never return - // - ASSERT (FALSE); -} - -/** - Transfers control to a function starting with a new stack. - - Transfers control to the function specified by EntryPoint using the new stack - specified by NewStack and passing in the parameters specified by Context1 and - Context2. Context1 and Context2 are optional and may be NULL. The function - EntryPoint must never return. - - If EntryPoint is NULL, then ASSERT(). - If NewStack is NULL, then ASSERT(). - - @param EntryPoint A pointer to function to call with the new stack. - @param Context1 A pointer to the context to pass into the EntryPoint - function. - @param Context2 A pointer to the context to pass into the EntryPoint - function. - @param NewStack A pointer to the new stack to use for the EntryPoint - function. - @param NewBsp A pointer to the new BSP for the EntryPoint on IPF. It's - Reserved on other architectures. - -**/ -VOID -EFIAPI -SecSwitchStack ( - IN UINTN TemporaryMemoryBase, - IN UINTN PermanentMemoryBase, - IN UINTN CopySize - ) -{ - BASE_LIBRARY_JUMP_BUFFER JumpBuffer; - UINTN SetJumpFlag; - - ASSERT ((VOID*)TemporaryMemoryBase != NULL); - ASSERT ((VOID*)PermanentMemoryBase != NULL); - - SetJumpFlag = SetJump (&JumpBuffer); - // - // The initial call to SetJump() must always return 0. - // Subsequent calls to LongJump() may cause a non-zero value to be returned by SetJump(). - // - if (SetJumpFlag == 0) { - DEBUG ((EFI_D_ERROR, "SecSwitchStack+%d: Esp: 0x%xL\n", __LINE__, JumpBuffer.Esp)); - JumpBuffer.Esp = - (INTN)JumpBuffer.Esp - - (INTN)TemporaryMemoryBase + - (INTN)PermanentMemoryBase; - MemoryFence (); - CopyMem((VOID*)PermanentMemoryBase, (VOID*)TemporaryMemoryBase, CopySize); - LongJump (&JumpBuffer, (UINTN)-1); - } - -} - -- cgit v1.2.3