]> git.proxmox.com Git - mirror_edk2.git/blame - IntelFsp2Pkg/Library/BaseFspSwitchStackLib/Ia32/Stack.asm
IntelFsp2Pkg BaseFspDebugLibSerialPort: Remove MASM/GAS files
[mirror_edk2.git] / IntelFsp2Pkg / Library / BaseFspSwitchStackLib / Ia32 / Stack.asm
CommitLineData
cf1d4549
JY
1;------------------------------------------------------------------------------\r
2;\r
3; Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.<BR>\r
4; This program and the accompanying materials\r
5; are licensed and made available under the terms and conditions of the BSD License\r
6; which accompanies this distribution. The full text of the license may be found at\r
7; http://opensource.org/licenses/bsd-license.php.\r
8;\r
9; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
10; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
11;\r
12; Abstract:\r
13;\r
14; Switch the stack from temporary memory to permenent memory.\r
15;\r
16;------------------------------------------------------------------------------\r
17\r
18 .586p\r
19 .model flat,C\r
20 .code\r
21\r
22;------------------------------------------------------------------------------\r
23; UINT32\r
24; EFIAPI\r
25; Pei2LoaderSwitchStack (\r
26; VOID\r
27; )\r
28;------------------------------------------------------------------------------\r
29EXTERNDEF C MeasurePoint:PROC\r
30Pei2LoaderSwitchStack PROC C PUBLIC\r
31 xor eax, eax\r
32 jmp FspSwitchStack\r
33Pei2LoaderSwitchStack ENDP\r
34\r
35;------------------------------------------------------------------------------\r
36; UINT32\r
37; EFIAPI\r
38; Loader2PeiSwitchStack (\r
39; VOID\r
40; )\r
41;------------------------------------------------------------------------------\r
42Loader2PeiSwitchStack PROC C PUBLIC\r
43 jmp FspSwitchStack\r
44Loader2PeiSwitchStack ENDP\r
45\r
46;------------------------------------------------------------------------------\r
47; UINT32\r
48; EFIAPI\r
49; FspSwitchStack (\r
50; VOID\r
51; )\r
52;------------------------------------------------------------------------------\r
53EXTERNDEF C SwapStack:PROC\r
54FspSwitchStack PROC C PUBLIC\r
55 ; Save current contexts\r
56 push eax\r
57 pushfd\r
58 cli\r
59 pushad\r
60 sub esp, 8\r
61 sidt fword ptr [esp]\r
62\r
63 ; Load new stack\r
64 push esp\r
65 call SwapStack\r
66 mov esp, eax\r
67\r
68 ; Restore previous contexts\r
69 lidt fword ptr [esp]\r
70 add esp, 8\r
71 popad\r
72 popfd\r
73 add esp, 4\r
74 ret\r
75FspSwitchStack ENDP\r
76\r
77 END\r