Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Jordan Justen <jordan.l.jus...@intel.com> Cc: Jian J Wang <jian.j.w...@intel.com> Cc: Hao Wu <hao.a...@intel.com> Cc: Ray Ni <ray...@intel.com> Cc: Star Zeng <star.z...@intel.com> --- .../Dispatcher/Ia32/TemporaryRamMigration.S | 72 +++++++++++++++++ .../Ia32/TemporaryRamMigration.nasm | 78 +++++++++++++++++++ MdeModulePkg/Core/Pei/PeiMain.inf | 3 +- 3 files changed, 152 insertions(+), 1 deletion(-) create mode 100644 MdeModulePkg/Core/Pei/Dispatcher/Ia32/TemporaryRamMigration.S create mode 100644 MdeModulePkg/Core/Pei/Dispatcher/Ia32/TemporaryRamMigration.nasm
diff --git a/MdeModulePkg/Core/Pei/Dispatcher/Ia32/TemporaryRamMigration.S b/MdeModulePkg/Core/Pei/Dispatcher/Ia32/TemporaryRamMigration.S new file mode 100644 index 0000000000..363cadca2a --- /dev/null +++ b/MdeModulePkg/Core/Pei/Dispatcher/Ia32/TemporaryRamMigration.S @@ -0,0 +1,72 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2018 - 2019, 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. +# +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# PeiTemporaryRamMigration ( +# IN PEI_CORE_TEMPORARY_RAM_TRANSITION *TempRamTransitionData +# ); +# +# @param[in] Stack Pointer to PEI_CORE_TEMPORARY_RAM_TRANSITION +# +# @return None This routine does not return +#------------------------------------------------------------------------------ +ASM_GLOBAL ASM_PFX(PeiTemporaryRamMigration) +ASM_PFX(PeiTemporaryRamMigration): + + # + # We never return from this call + # + add $4, %esp + + # + # (eax) Pointer to PEI_CORE_TEMPORARY_RAM_TRANSITION + # + mov (%esp), %eax + + # + # We'll store the new location of TempRamTransitionData after + # migration in ebx. By the IA32 calling convention we should + # normally save ebx, but we won't be returning to the caller, so + # we don't need to save it. By the same rule, the + # TemporaryRamMigration PPI call should preserve ebx for us. + # + mov (%esp), %ebx + add 0x10(%eax), %ebx + sub 0x08(%eax), %ebx + + # + # Setup parameters and call TemporaryRamSupport->TemporaryRamMigration + # 32-bit PeiServices + # 64-bit TemporaryMemoryBase + # 64-bit PermanentMemoryBase + # 32-bit CopySize + # + pushl 0x18(%eax) # CopySize + pushl 0x14(%eax) # PermanentMemoryBase Upper 32-bit + pushl 0x10(%eax) # PermanentMemoryBase Lower 32-bit + pushl 0x0c(%eax) # TemporaryMemoryBase Upper 32-bit + pushl 0x08(%eax) # TemporaryMemoryBase Lower 32-bit + pushl 0x04(%eax) # PeiServices + calll *(%eax) + sub 0x18, %esp + + # + # Setup parameters and call PeiTemporaryRamMigrated + # 32-bit Pointer to PEI_CORE_TEMPORARY_RAM_TRANSITION + # + push %ebx + call ASM_PFX(PeiTemporaryRamMigrated) diff --git a/MdeModulePkg/Core/Pei/Dispatcher/Ia32/TemporaryRamMigration.nasm b/MdeModulePkg/Core/Pei/Dispatcher/Ia32/TemporaryRamMigration.nasm new file mode 100644 index 0000000000..e200a3631f --- /dev/null +++ b/MdeModulePkg/Core/Pei/Dispatcher/Ia32/TemporaryRamMigration.nasm @@ -0,0 +1,78 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2018 - 2019, 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. +; +;------------------------------------------------------------------------------ + +#include <Base.h> + + SECTION .text + +extern ASM_PFX(PeiTemporaryRamMigrated) + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; PeiTemporaryRamMigration ( +; IN PEI_CORE_TEMPORARY_RAM_TRANSITION *TempRamTransitionData +; ); +; +; @param[in] Stack Pointer to PEI_CORE_TEMPORARY_RAM_TRANSITION +; +; @return None This routine does not return +;------------------------------------------------------------------------------ +global ASM_PFX(PeiTemporaryRamMigration) +ASM_PFX(PeiTemporaryRamMigration): + + ; + ; We never return from this call + ; + add esp, 4 + + ; + ; (eax) Pointer to PEI_CORE_TEMPORARY_RAM_TRANSITION + ; + mov eax, [esp] + + ; + ; We'll store the new location of TempRamTransitionData after + ; migration in ebx. By the IA32 calling convention we should + ; normally save ebx, but we won't be returning to the caller, so + ; we don't need to save it. By the same rule, the + ; TemporaryRamMigration PPI call should preserve ebx for us. + ; + mov ebx, [esp] + add ebx, [eax + 0x10] + sub ebx, [eax + 0x08] + + ; + ; Setup parameters and call TemporaryRamSupport->TemporaryRamMigration + ; 32-bit PeiServices + ; 64-bit TemporaryMemoryBase + ; 64-bit PermanentMemoryBase + ; 32-bit CopySize + ; + push DWORD [eax + 0x18] ; CopySize + push DWORD [eax + 0x14] ; PermanentMemoryBase Upper 32-bit + push DWORD [eax + 0x10] ; PermanentMemoryBase Lower 32-bit + push DWORD [eax + 0x0c] ; TemporaryMemoryBase Upper 32-bit + push DWORD [eax + 0x08] ; TemporaryMemoryBase Lower 32-bit + push DWORD [eax + 0x04] ; PeiServices + call DWORD [eax + 0x00] + sub esp, 0x18 + + ; + ; Setup parameters and call PeiTemporaryRamMigrated + ; 32-bit Pointer to PEI_CORE_TEMPORARY_RAM_TRANSITION + ; + push ebx + call ASM_PFX(PeiTemporaryRamMigrated) diff --git a/MdeModulePkg/Core/Pei/PeiMain.inf b/MdeModulePkg/Core/Pei/PeiMain.inf index 1646f73385..505544d4e8 100644 --- a/MdeModulePkg/Core/Pei/PeiMain.inf +++ b/MdeModulePkg/Core/Pei/PeiMain.inf @@ -53,7 +53,8 @@ PeiMain.h [Sources.Ia32] - Dispatcher/TemporaryRamMigration.c + Dispatcher/Ia32/TemporaryRamMigration.nasm + Dispatcher/Ia32/TemporaryRamMigration.S [Sources.X64] Dispatcher/X64/TemporaryRamMigration.nasm -- 2.20.0.rc1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel