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