;------------------------------------------------------------------------------ ; ; Copyright (c) 2022, Intel Corporation. All rights reserved.
; SPDX-License-Identifier: BSD-2-Clause-Patent ; ; Abstract: ; ; Switch the stack from temporary memory to permanent memory. ; ;------------------------------------------------------------------------------ SECTION .text %include "PushPopRegsNasm.inc" extern ASM_PFX(SwapStack) ;------------------------------------------------------------------------------ ; UINT32 ; EFIAPI ; Pei2LoaderSwitchStack ( ; VOID ; ) ;------------------------------------------------------------------------------ global ASM_PFX(Pei2LoaderSwitchStack) ASM_PFX(Pei2LoaderSwitchStack): xor rax, rax jmp ASM_PFX(FspSwitchStack) ;------------------------------------------------------------------------------ ; UINT32 ; EFIAPI ; Loader2PeiSwitchStack ( ; VOID ; ) ;------------------------------------------------------------------------------ global ASM_PFX(Loader2PeiSwitchStack) ASM_PFX(Loader2PeiSwitchStack): jmp ASM_PFX(FspSwitchStack) ;------------------------------------------------------------------------------ ; UINT32 ; EFIAPI ; FspSwitchStack ( ; VOID ; ) ;------------------------------------------------------------------------------ global ASM_PFX(FspSwitchStack) ASM_PFX(FspSwitchStack): ; Save current contexts push rdx ; ApiParam2 push rcx ; ApiParam1 push rax ; FspInfoHeader pushfq cli PUSHA_64 sub rsp, 16 sidt [rsp] ; Load new stack mov rcx, rsp call ASM_PFX(SwapStack) mov rsp, rax ; Restore previous contexts lidt [rsp] add rsp, 16 POPA_64 popfq add rsp, 24 ; FspInfoHeader + ApiParam[2] ret