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 .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