]> git.proxmox.com Git - mirror_edk2.git/blob - UefiCpuPkg/CpuDxe/Ia32/MpAsm.asm
d476829b917dc09086baabb5829905e6210492f4
[mirror_edk2.git] / UefiCpuPkg / CpuDxe / Ia32 / MpAsm.asm
1 ;------------------------------------------------------------------------------
2 ;
3 ; Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
4 ; This program and the accompanying materials
5 ; are licensed and made available under the terms and conditions of the BSD License
6 ; which accompanies this distribution. The full text of the license may be found at
7 ; http://opensource.org/licenses/bsd-license.php.
8 ;
9 ; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 ; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11 ;
12 ;------------------------------------------------------------------------------
13
14 .586p
15 .model flat, C
16
17 extern mTopOfApCommonStack:DWORD
18 extern ApEntryPointInC:PROC
19
20 .code
21
22 ;
23 ; This lock only allows one AP to use the mTopOfApCommonStack stack at a time
24 ;
25 ApStackLock dd 0
26
27 ;.code
28
29 ;------------------------------------------------------------------------------
30 ; VOID
31 ; EFIAPI
32 ; AsmApEntryPoint (
33 ; VOID
34 ; );
35 ;------------------------------------------------------------------------------
36 AsmApEntryPoint PROC
37
38 cli
39 AsmApEntryPointAcquireLock:
40 lock bts dword ptr [ApStackLock], 0
41 pause
42 jc AsmApEntryPointAcquireLock
43
44 mov esp, [mTopOfApCommonStack]
45 call ApEntryPointInC
46
47 cli
48
49 lock btc dword ptr [ApStackLock], 0
50
51 mov eax, 100h
52 AsmApEntryPointShareLock:
53 pause
54 dec eax
55 jnz AsmApEntryPointShareLock
56
57 jmp AsmApEntryPoint
58
59 AsmApEntryPoint ENDP
60
61 ;------------------------------------------------------------------------------
62 ; VOID
63 ; EFIAPI
64 ; AsmApDoneWithCommonStack (
65 ; VOID
66 ; );
67 ;------------------------------------------------------------------------------
68 AsmApDoneWithCommonStack PROC PUBLIC
69
70 lock btc dword ptr [ApStackLock], 0
71 ret
72
73 AsmApDoneWithCommonStack ENDP
74
75 END