|
@@ -0,0 +1,72 @@
|
|
|
+;------------------------------------------------------------------------------
|
|
|
+;
|
|
|
+; Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>
|
|
|
+; 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
|
|
|
+
|