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.686
15.xmm
16.model flat, C
17
18extern mTopOfApCommonStack:DWORD
19extern ApEntryPointInC:PROC
20
21.code
22
23;
24; This lock only allows one AP to use the mTopOfApCommonStack stack at a time
25;
26ApStackLock dd      0
27
28;.code
29
30;------------------------------------------------------------------------------
31; VOID
32; EFIAPI
33; AsmApEntryPoint (
34;   VOID
35;   );
36;------------------------------------------------------------------------------
37AsmApEntryPoint PROC
38
39    cli
40AsmApEntryPointAcquireLock:
41lock bts    dword ptr [ApStackLock], 0
42    pause
43    jc      AsmApEntryPointAcquireLock
44
45    mov     esp, [mTopOfApCommonStack]
46    call    ApEntryPointInC
47
48    cli
49
50lock btc    dword ptr [ApStackLock], 0
51
52    mov     eax, 100h
53AsmApEntryPointShareLock:
54    pause
55    dec     eax
56    jnz     AsmApEntryPointShareLock
57
58    jmp     AsmApEntryPoint
59
60AsmApEntryPoint ENDP
61
62;------------------------------------------------------------------------------
63; VOID
64; EFIAPI
65; AsmApDoneWithCommonStack (
66;   VOID
67;   );
68;------------------------------------------------------------------------------
69AsmApDoneWithCommonStack PROC PUBLIC
70
71lock btc    dword ptr [ApStackLock], 0
72    ret
73
74AsmApDoneWithCommonStack ENDP
75
76END
77