diff options
author | Guo Mang <mang.guo@intel.com> | 2017-08-02 09:54:47 +0800 |
---|---|---|
committer | Guo Mang <mang.guo@intel.com> | 2017-09-05 19:45:08 +0800 |
commit | 6c128c65b5ec0e5b8b5a0ccb165f3afd29e485f8 (patch) | |
tree | 444372d92a0ae8991fe4d15eb3937df43690dfda /EmulatorPkg/Sec | |
parent | b207c6434d7a5a4502975d322312e07017e8a8cb (diff) | |
download | edk2-platforms-6c128c65b5ec0e5b8b5a0ccb165f3afd29e485f8.tar.xz |
Remove core packages since we can get them from edk2 repository
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Guo Mang <mang.guo@intel.com>
Diffstat (limited to 'EmulatorPkg/Sec')
-rw-r--r-- | EmulatorPkg/Sec/Ia32/SwitchRam.S | 95 | ||||
-rw-r--r-- | EmulatorPkg/Sec/Ia32/SwitchRam.asm | 94 | ||||
-rw-r--r-- | EmulatorPkg/Sec/Ia32/TempRam.c | 65 | ||||
-rw-r--r-- | EmulatorPkg/Sec/Sec.c | 149 | ||||
-rw-r--r-- | EmulatorPkg/Sec/Sec.h | 51 | ||||
-rw-r--r-- | EmulatorPkg/Sec/Sec.inf | 53 | ||||
-rw-r--r-- | EmulatorPkg/Sec/X64/SwitchRam.S | 72 | ||||
-rw-r--r-- | EmulatorPkg/Sec/X64/SwitchRam.asm | 76 |
8 files changed, 0 insertions, 655 deletions
diff --git a/EmulatorPkg/Sec/Ia32/SwitchRam.S b/EmulatorPkg/Sec/Ia32/SwitchRam.S deleted file mode 100644 index 39304daef1..0000000000 --- a/EmulatorPkg/Sec/Ia32/SwitchRam.S +++ /dev/null @@ -1,95 +0,0 @@ -#------------------------------------------------------------------------------
-#
-# Copyright (c) 2007, 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
-# 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.
-#
-#------------------------------------------------------------------------------
-
- .text
-
-
-//------------------------------------------------------------------------------
-// VOID
-// EFIAPI
-// SecSwitchStack (
-// UINT32 TemporaryMemoryBase,
-// UINT32 PermenentMemoryBase
-// )//
-//------------------------------------------------------------------------------
-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
-#
-#ifndef __APPLE__
- 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
-#endif
-
- pop %edx
- pop %ecx
- pop %ebx
- pop %eax
- ret
-
diff --git a/EmulatorPkg/Sec/Ia32/SwitchRam.asm b/EmulatorPkg/Sec/Ia32/SwitchRam.asm deleted file mode 100644 index a2e1f3e910..0000000000 --- a/EmulatorPkg/Sec/Ia32/SwitchRam.asm +++ /dev/null @@ -1,94 +0,0 @@ -;------------------------------------------------------------------------------
-;
-; Copyright (c) 2007 - 2012, 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
-; 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.
-;
-;------------------------------------------------------------------------------
-
- .586p
- .model flat,C
- .code
-
-;------------------------------------------------------------------------------
-; VOID
-; EFIAPI
-; SecSwitchStack (
-; UINT32 TemporaryMemoryBase,
-; UINT32 PermenentMemoryBase
-; );
-;------------------------------------------------------------------------------
-SecSwitchStack PROC
- ;
- ; 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!
- ;
-
- mov ebx, [esp + 20] ; Save the first parameter
- mov ecx, [esp + 24] ; Save the second parameter
-
- ;
- ; Save this function's return address into permenent memory at first.
- ; Then, Fixup the esp point to permenent memory
- ;
- mov eax, esp
- sub eax, ebx
- add eax, ecx
- mov edx, dword ptr [esp] ; copy pushed register's value to permenent memory
- mov dword ptr [eax], edx
- mov edx, dword ptr [esp + 4]
- mov dword ptr [eax + 4], edx
- mov edx, dword ptr [esp + 8]
- mov dword ptr [eax + 8], edx
- mov edx, dword ptr [esp + 12]
- mov dword ptr [eax + 12], edx
- mov edx, dword ptr [esp + 16] ; Update this function's return address into permenent memory
- mov dword ptr [eax + 16], edx
- mov esp, eax ; From now, esp is pointed to permenent memory
-
- ;
- ; Fixup the ebp point to permenent memory
- ;
- mov eax, ebp
- sub eax, ebx
- add eax, ecx
- mov ebp, eax ; From now, ebp is pointed to permenent memory
-
- ;
- ; Fixup callee's ebp point for PeiDispatch
- ;
- mov eax, dword ptr [ebp]
- sub eax, ebx
- add eax, ecx
- mov dword ptr [ebp], eax ; From now, Temporary's PPI caller's stack is in permenent memory
-
- pop edx
- pop ecx
- pop ebx
- pop eax
- ret
-SecSwitchStack ENDP
-
- END
diff --git a/EmulatorPkg/Sec/Ia32/TempRam.c b/EmulatorPkg/Sec/Ia32/TempRam.c deleted file mode 100644 index 525fb95d48..0000000000 --- a/EmulatorPkg/Sec/Ia32/TempRam.c +++ /dev/null @@ -1,65 +0,0 @@ -/*++ @file - Temp RAM PPI - -Copyright (c) 2011, Apple Inc. 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 -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 <PiPei.h> -#include <Library/DebugLib.h> -#include <Library/BaseMemoryLib.h> - -#include <Ppi/TemporaryRamSupport.h> - -VOID -EFIAPI -SecSwitchStack ( - UINT32 TemporaryMemoryBase, - UINT32 PermenentMemoryBase - ); - - -EFI_STATUS -EFIAPI -SecTemporaryRamSupport ( - IN CONST EFI_PEI_SERVICES **PeiServices, - IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase, - IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase, - IN UINTN CopySize - ) -{ - // - // Migrate the whole temporary memory to permenent memory. - // - CopyMem ( - (VOID*)(UINTN)PermanentMemoryBase, - (VOID*)(UINTN)TemporaryMemoryBase, - CopySize - ); - - // - // SecSwitchStack function must be invoked after the memory migration - // immediatly, also we need fixup the stack change caused by new call into - // permenent memory. - // - SecSwitchStack ((UINT32) TemporaryMemoryBase, (UINT32) PermanentMemoryBase); - - // - // We need *not* fix the return address because currently, - // The PeiCore is excuted in flash. - // - - // - // Simulate to invalid temporary memory, terminate temporary memory - // - //ZeroMem ((VOID*)(UINTN)TemporaryMemoryBase, CopySize); - - return EFI_SUCCESS; -} diff --git a/EmulatorPkg/Sec/Sec.c b/EmulatorPkg/Sec/Sec.c deleted file mode 100644 index 8a015682dd..0000000000 --- a/EmulatorPkg/Sec/Sec.c +++ /dev/null @@ -1,149 +0,0 @@ -/*++ @file - Stub SEC that is called from the OS appliation that is the root of the emulator. - - The OS application will call the SEC with the PEI Entry Point API. - -Copyright (c) 2011, Apple Inc. 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 -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 "Sec.h" - - - -EFI_PEI_TEMPORARY_RAM_SUPPORT_PPI mSecTemporaryRamSupportPpi = { - SecTemporaryRamSupport -}; - - -EFI_PEI_PPI_DESCRIPTOR gPrivateDispatchTable[] = { - { - EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST, - &gEfiTemporaryRamSupportPpiGuid, - &mSecTemporaryRamSupportPpi - } -}; - - - -/** - The entry point of PE/COFF Image for the PEI Core, that has been hijacked by this - SEC that sits on top of an OS application. So the entry and exit of this module - has the same API. - - This function is the entry point for the PEI Foundation, which allows the SEC phase - to pass information about the stack, temporary RAM and the Boot Firmware Volume. - In addition, it also allows the SEC phase to pass services and data forward for use - during the PEI phase in the form of one or more PPIs. - There is no limit to the number of additional PPIs that can be passed from SEC into - the PEI Foundation. As part of its initialization phase, the PEI Foundation will add - these SEC-hosted PPIs to its PPI database such that both the PEI Foundation and any - modules can leverage the associated service calls and/or code in these early PPIs. - This function is required to call ProcessModuleEntryPointList() with the Context - parameter set to NULL. ProcessModuleEntryPoint() is never expected to return. - The PEI Core is responsible for calling ProcessLibraryConstructorList() as soon as - the PEI Services Table and the file handle for the PEI Core itself have been established. - If ProcessModuleEntryPointList() returns, then ASSERT() and halt the system. - - @param SecCoreData Points to a data structure containing information about the PEI - core's operating environment, such as the size and location of - temporary RAM, the stack location and the BFV location. - - @param PpiList Points to a list of one or more PPI descriptors to be installed - initially by the PEI core. An empty PPI list consists of a single - descriptor with the end-tag EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST. - As part of its initialization phase, the PEI Foundation will add - these SEC-hosted PPIs to its PPI database such that both the PEI - Foundation and any modules can leverage the associated service calls - and/or code in these early PPIs. - -**/ -VOID -EFIAPI -_ModuleEntryPoint ( - IN EFI_SEC_PEI_HAND_OFF *SecCoreData, - IN EFI_PEI_PPI_DESCRIPTOR *PpiList - ) -{ - EFI_STATUS Status; - EFI_PEI_FV_HANDLE VolumeHandle; - EFI_PEI_FILE_HANDLE FileHandle; - VOID *PeCoffImage; - EFI_PEI_CORE_ENTRY_POINT EntryPoint; - EFI_PEI_PPI_DESCRIPTOR *Ppi; - EFI_PEI_PPI_DESCRIPTOR *SecPpiList; - UINTN SecReseveredMemorySize; - UINTN Index; - - EMU_MAGIC_PAGE()->PpiList = PpiList; - ProcessLibraryConstructorList (); - - DEBUG ((EFI_D_ERROR, "SEC Has Started\n")); - - // - // Add Our PPIs to the list - // - SecReseveredMemorySize = sizeof (gPrivateDispatchTable); - for (Ppi = PpiList, Index = 1; ; Ppi++, Index++) { - SecReseveredMemorySize += sizeof (EFI_PEI_PPI_DESCRIPTOR); - - if ((Ppi->Flags & EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST) == EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST) { - // Since we are appending, need to clear out privious list terminator. - Ppi->Flags &= ~EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST; - break; - } - } - - // Keep everything on a good alignment - SecReseveredMemorySize = ALIGN_VALUE (SecReseveredMemorySize, CPU_STACK_ALIGNMENT); - -#if 0 - // Tell the PEI Core to not use our buffer in temp RAM - SecPpiList = (EFI_PEI_PPI_DESCRIPTOR *)SecCoreData->PeiTemporaryRamBase; - SecCoreData->PeiTemporaryRamBase = (VOID *)((UINTN)SecCoreData->PeiTemporaryRamBase + SecReseveredMemorySize); - SecCoreData->PeiTemporaryRamSize -= SecReseveredMemorySize; -#else - { - // - // When I subtrack from SecCoreData->PeiTemporaryRamBase PEI Core crashes? Either there is a bug - // or I don't understand temp RAM correctly? - // - EFI_PEI_PPI_DESCRIPTOR PpiArray[10]; - - SecPpiList = &PpiArray[0]; - ASSERT (sizeof (PpiArray) >= SecReseveredMemorySize); - } -#endif - // Copy existing list, and append our entries. - CopyMem (SecPpiList, PpiList, sizeof (EFI_PEI_PPI_DESCRIPTOR) * Index); - CopyMem (&SecPpiList[Index], gPrivateDispatchTable, sizeof (gPrivateDispatchTable)); - - // Find PEI Core and transfer control - VolumeHandle = (EFI_PEI_FV_HANDLE)(UINTN)SecCoreData->BootFirmwareVolumeBase; - FileHandle = NULL; - Status = PeiServicesFfsFindNextFile (EFI_FV_FILETYPE_PEI_CORE, VolumeHandle, &FileHandle); - ASSERT_EFI_ERROR (Status); - - Status = PeiServicesFfsFindSectionData (EFI_SECTION_PE32, FileHandle, &PeCoffImage); - ASSERT_EFI_ERROR (Status); - - Status = PeCoffLoaderGetEntryPoint (PeCoffImage, (VOID **)&EntryPoint); - ASSERT_EFI_ERROR (Status); - - // Transfer control to PEI Core - EntryPoint (SecCoreData, SecPpiList); - - // PEI Core never returns - ASSERT (FALSE); - return; -} - - - diff --git a/EmulatorPkg/Sec/Sec.h b/EmulatorPkg/Sec/Sec.h deleted file mode 100644 index 4782578efa..0000000000 --- a/EmulatorPkg/Sec/Sec.h +++ /dev/null @@ -1,51 +0,0 @@ -/*++ @file - Stub SEC that is called from the OS appliation that is the root of the emulator. - - The OS application will call the SEC with the PEI Entry Point API. - -Copyright (c) 2011, Apple Inc. 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 -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. - -**/ - -#ifndef __SEC_H___ -#define __SEC_H___ - - -#include <PiPei.h> -#include <Library/EmuMagicPageLib.h> -#include <Library/DebugLib.h> -#include <Library/PeiServicesLib.h> -#include <Library/PeCoffGetEntryPointLib.h> -#include <Library/BaseMemoryLib.h> - -#include <Ppi/TemporaryRamSupport.h> - - -// -// I think this shold be defined in a MdePkg include file? -// -VOID -EFIAPI -ProcessLibraryConstructorList ( - VOID - ); - -EFI_STATUS -EFIAPI -SecTemporaryRamSupport ( - IN CONST EFI_PEI_SERVICES **PeiServices, - IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase, - IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase, - IN UINTN CopySize - ); - - -#endif - diff --git a/EmulatorPkg/Sec/Sec.inf b/EmulatorPkg/Sec/Sec.inf deleted file mode 100644 index d253fd724e..0000000000 --- a/EmulatorPkg/Sec/Sec.inf +++ /dev/null @@ -1,53 +0,0 @@ -## @file
-# Entry Point of Emu Emulator
-#
-# Main executable file of Unix Emulator that loads PEI core after initialization finished.
-# Portions copyright (c) 2011, Apple Inc. All rights reserved.<BR>
-# Copyright (c) 2012, 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
-# 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 = EmuSec
- FILE_GUID = BCAF98C9-22B0-3B4F-9CBD-C8A6B4DBCEE9
- MODULE_TYPE = SEC
- VERSION_STRING = 1.0
-
-
-[Sources]
- Sec.c
-
-[Sources.X64]
- X64/SwitchRam.asm
- X64/SwitchRam.S
-
-[Sources.IA32]
- Ia32/TempRam.c
- Ia32/SwitchRam.asm
- Ia32/SwitchRam.S
-
-[Packages]
- MdePkg/MdePkg.dec
- EmulatorPkg/EmulatorPkg.dec
-
-[LibraryClasses]
- DebugLib
- PeCoffGetEntryPointLib
- PeiServicesLib
- PpiListLib
- BaseMemoryLib
-
-[Ppis]
- gEfiTemporaryRamSupportPpiGuid
-
-[Pcd]
- gEmulatorPkgTokenSpaceGuid.PcdPeiServicesTablePage
diff --git a/EmulatorPkg/Sec/X64/SwitchRam.S b/EmulatorPkg/Sec/X64/SwitchRam.S deleted file mode 100644 index 9ed1f911e7..0000000000 --- a/EmulatorPkg/Sec/X64/SwitchRam.S +++ /dev/null @@ -1,72 +0,0 @@ -#------------------------------------------------------------------------------
-#
-# Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
-# Portitions copyright (c) 2011, Apple Inc. 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.
-#
-#------------------------------------------------------------------------------
-
-
-
-// EFI_STATUS
-// EFIAPI
-// SecTemporaryRamSupport (
-// IN CONST EFI_PEI_SERVICES **PeiServices, // %rcx
-// IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase, // %rdx
-// IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase, // %r8
-// IN UINTN CopySize // %r9
-// )
-//
-ASM_GLOBAL ASM_PFX(SecTemporaryRamSupport)
-ASM_PFX(SecTemporaryRamSupport):
- // Adjust callers %rbp to account for stack move
- subq %rdx, %rbp // Calc offset of %rbp in Temp Memory
- addq %r8, %rbp // add in permanent base to offset
-
- pushq %rbp // stack frame is for the debugger
- movq %rsp, %rbp
-
- pushq %rdx // Save TemporaryMemoryBase
- pushq %r8 // Save PermanentMemoryBase
- pushq %r9 // Save CopySize
-
- //
- // Copy all of temp RAM to permanent memory, including stack
- //
- // CopyMem (PermanentMemoryBase, TemporaryMemoryBase, CopySize);
- // %rcx, %rdx, %r8
- movq %r8, %rcx // Shift arguments
- movq %r9, %r8
- subq $0x28, %rsp // Allocate register spill area & 16-byte align stack
- call ASM_PFX(CopyMem)
- // Temp mem stack now copied to permanent location. %esp still in temp memory
- addq $0x28, %rsp
-
- popq %r9 // CopySize (old stack)
- popq %r8 // PermanentMemoryBase (old stack)
- popq %rdx // TemporaryMemoryBase (old stack)
-
- movq %rsp, %rcx // Move to new stack
- subq %rdx, %rcx // Calc offset of stack in Temp Memory
- addq %r8, %rcx // Calc PermanentMemoryBase address
- movq %rcx, %rsp // Update stack
- // Stack now points to permanent memory
-
- // ZeroMem (TemporaryMemoryBase /* rcx */, CopySize /* rdx */);
- movq %rdx, %rcx
- movq %r9, %rdx
- subq $0x28, %rsp // Allocate register spill area & 16-byte align stack
- call ASM_PFX(ZeroMem)
- addq $0x28, %rsp
-
- // This data comes off the NEW stack
- popq %rbp
- ret
-
-
diff --git a/EmulatorPkg/Sec/X64/SwitchRam.asm b/EmulatorPkg/Sec/X64/SwitchRam.asm deleted file mode 100644 index d1a7b943fd..0000000000 --- a/EmulatorPkg/Sec/X64/SwitchRam.asm +++ /dev/null @@ -1,76 +0,0 @@ -;------------------------------------------------------------------------------
-;
-; Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
-; Portitions copyright (c) 2011, Apple Inc. 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.
-;
-;------------------------------------------------------------------------------
-
-EXTERN CopyMem:PROC
-EXTERN ZeroMem:PROC
-
- .code
-
-;------------------------------------------------------------------------------
-; EFI_STATUS
-; EFIAPI
-; SecTemporaryRamSupport (
-; IN CONST EFI_PEI_SERVICES **PeiServices, // %rcx
-; IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase, // %rdx
-; IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase, // %r8
-; IN UINTN CopySize // %r9
-; )
-;------------------------------------------------------------------------------
-SecTemporaryRamSupport PROC
- ; Adjust callers %rbp to account for stack move
- sub rbp, rdx ; Calc offset of %rbp in Temp Memory
- add rbp, r8 ; add in permanent base to offset
-
- push rbp ; stack frame is for the debugger
- mov rbp, rsp
-
- push rdx ; Save TemporaryMemoryBase
- push r8 ; Save PermanentMemoryBase
- push r9 ; Save CopySize
-
- ;
- ; Copy all of temp RAM to permanent memory, including stack
- ;
- ; CopyMem (PermanentMemoryBase, TemporaryMemoryBase, CopySize);
- ; %rcx, %rdx, %r8
- mov rcx, r8 ; Shift arguments
- mov r8, r9
- sub rsp, 028h ; Allocate register spill area & 16-byte align stack
- call CopyMem
- ; Temp mem stack now copied to permanent location. %esp still in temp memory
- add rsp, 028h
-
- pop r9 ; CopySize (old stack)
- pop r8 ; PermanentMemoryBase (old stack)
- pop rdx ; TemporaryMemoryBase (old stack)
-
- mov rcx, rsp ; Move to new stack
- sub rcx, rdx ; Calc offset of stack in Temp Memory
- add rcx, r8 ; Calc PermanentMemoryBase address
- mov rsp, rcx ; Update stack
- ; Stack now points to permanent memory
-
- ; ZeroMem (TemporaryMemoryBase /* rcx */, CopySize /* rdx */);
- mov rcx, rdx
- mov rdx, r9
- sub rsp, 028h ; Allocate register spill area & 16-byte align stack
- call ZeroMem
- add rsp, 028h
-
- ; This data comes off the NEW stack
- pop rbp
- ret
-SecTemporaryRamSupport ENDP
-
- END
|