X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=UefiCpuPkg%2FCpuDxe%2FX64%2FMpAsm.nasm;fp=UefiCpuPkg%2FCpuDxe%2FX64%2FMpAsm.nasm;h=e3dc248002f2d7c93153103cc2bc0cf902559643;hp=0000000000000000000000000000000000000000;hb=fab82c1873b792bce33fb22c32db71324fc0ac3b;hpb=1535c888c6f06bb35881e83cd7ee49fb8554942b diff --git a/UefiCpuPkg/CpuDxe/X64/MpAsm.nasm b/UefiCpuPkg/CpuDxe/X64/MpAsm.nasm new file mode 100644 index 0000000000..e3dc248002 --- /dev/null +++ b/UefiCpuPkg/CpuDxe/X64/MpAsm.nasm @@ -0,0 +1,70 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.
+; This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php. +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +;------------------------------------------------------------------------------ + +extern ASM_PFX(mTopOfApCommonStack) +extern ASM_PFX(ApEntryPointInC) + +DEFAULT REL + +SECTION .data + +; +; This lock only allows one AP to use the mTopOfApCommonStack stack at a time +; +ApStackLock: + dd 0 + +SECTION .text + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; AsmApEntryPoint ( +; VOID +; ); +;------------------------------------------------------------------------------ +global ASM_PFX(AsmApEntryPoint) +ASM_PFX(AsmApEntryPoint): + cli +AsmApEntryPointAcquireLock: +lock bts dword [ApStackLock], 0 + pause + jc AsmApEntryPointAcquireLock + + mov rsp, [ASM_PFX(mTopOfApCommonStack)] + call ASM_PFX(ApEntryPointInC) + + cli + +lock btc dword [ApStackLock], 0 + + mov eax, 0x100 +AsmApEntryPointShareLock: + pause + dec eax + jnz AsmApEntryPointShareLock + + jmp ASM_PFX(AsmApEntryPoint) + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; AsmApDoneWithCommonStack ( +; VOID +; ); +;------------------------------------------------------------------------------ +global ASM_PFX(AsmApDoneWithCommonStack) +ASM_PFX(AsmApDoneWithCommonStack): +lock btc dword [ApStackLock], 0 + ret +