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 14extern ASM_PFX(mTopOfApCommonStack) 15extern ASM_PFX(ApEntryPointInC) 16 17DEFAULT REL 18 19SECTION .data 20 21; 22; This lock only allows one AP to use the mTopOfApCommonStack stack at a time 23; 24ApStackLock: 25 dd 0 26 27SECTION .text 28 29;------------------------------------------------------------------------------ 30; VOID 31; EFIAPI 32; AsmApEntryPoint ( 33; VOID 34; ); 35;------------------------------------------------------------------------------ 36global ASM_PFX(AsmApEntryPoint) 37ASM_PFX(AsmApEntryPoint): 38 cli 39AsmApEntryPointAcquireLock: 40lock bts dword [ApStackLock], 0 41 pause 42 jc AsmApEntryPointAcquireLock 43 44 mov rsp, [ASM_PFX(mTopOfApCommonStack)] 45 call ASM_PFX(ApEntryPointInC) 46 47 cli 48 49lock btc dword [ApStackLock], 0 50 51 mov eax, 0x100 52AsmApEntryPointShareLock: 53 pause 54 dec eax 55 jnz AsmApEntryPointShareLock 56 57 jmp ASM_PFX(AsmApEntryPoint) 58 59;------------------------------------------------------------------------------ 60; VOID 61; EFIAPI 62; AsmApDoneWithCommonStack ( 63; VOID 64; ); 65;------------------------------------------------------------------------------ 66global ASM_PFX(AsmApDoneWithCommonStack) 67ASM_PFX(AsmApDoneWithCommonStack): 68lock btc dword [ApStackLock], 0 69 ret 70 71