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