]> git.proxmox.com Git - mirror_edk2.git/blame - IntelFspPkg/Library/BaseFspSwitchStackLib/Ia32/Stack.asm
Add dual FSP binaries support.
[mirror_edk2.git] / IntelFspPkg / Library / BaseFspSwitchStackLib / Ia32 / Stack.asm
CommitLineData
c8ec22a2
JY
1;------------------------------------------------------------------------------\r
2;\r
3b17b245 3; Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.<BR>\r
c8ec22a2
JY
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
3b17b245
MM
31 xor eax, eax\r
32 jmp FspSwitchStack\r
c8ec22a2
JY
33Pei2LoaderSwitchStack ENDP\r
34\r
35;------------------------------------------------------------------------------\r
36; UINT32\r
37; EFIAPI\r
38; Loader2PeiSwitchStack (\r
39; VOID\r
40; )\r
41;------------------------------------------------------------------------------\r
c8ec22a2 42Loader2PeiSwitchStack PROC C PUBLIC\r
3b17b245
MM
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
c8ec22a2 55 ; Save current contexts\r
3b17b245 56 push eax\r
c8ec22a2
JY
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
3b17b245 73 add esp, 4\r
c8ec22a2 74 ret\r
3b17b245 75FspSwitchStack ENDP\r
c8ec22a2
JY
76\r
77 END\r