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