Home | History | Annotate | Download | only in AArch64
      1 //------------------------------------------------------------------------------
      2 //
      3 // Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
      4 // Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
      5 // Portions copyright (c) 2011 - 2013, ARM Limited. All rights reserved.<BR>
      6 // This program and the accompanying materials
      7 // are licensed and made available under the terms and conditions of the BSD License
      8 // which accompanies this distribution.  The full text of the license may be found at
      9 // http://opensource.org/licenses/bsd-license.php.
     10 //
     11 // THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     12 // WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     13 //
     14 //------------------------------------------------------------------------------
     15 
     16 .text
     17 .align 5
     18 
     19 GCC_ASM_EXPORT(InternalSwitchStackAsm)
     20 GCC_ASM_EXPORT(CpuPause)
     21 
     22 /**
     23 //
     24 //  This allows the caller to switch the stack and goes to the new entry point
     25 //
     26 // @param      EntryPoint   The pointer to the location to enter
     27 // @param      Context      Parameter to pass in
     28 // @param      Context2     Parameter2 to pass in
     29 // @param      NewStack     New Location of the stack
     30 //
     31 // @return     Nothing. Goes to the Entry Point passing in the new parameters
     32 //
     33 VOID
     34 EFIAPI
     35 InternalSwitchStackAsm (
     36   SWITCH_STACK_ENTRY_POINT EntryPoint,
     37   VOID  *Context,
     38   VOID  *Context2,
     39   VOID  *NewStack
     40   );
     41 **/
     42 ASM_PFX(InternalSwitchStackAsm):
     43     mov   x29, #0
     44     mov   x30, x0
     45     mov   sp, x3
     46     mov   x0, x1
     47     mov   x1, x2
     48     ret
     49 
     50 /**
     51 //
     52 //  Requests CPU to pause for a short period of time.
     53 //
     54 //  Requests CPU to pause for a short period of time. Typically used in MP
     55 //  systems to prevent memory starvation while waiting for a spin lock.
     56 //
     57 VOID
     58 EFIAPI
     59 CpuPause (
     60   VOID
     61   )
     62 **/
     63 ASM_PFX(CpuPause):
     64     nop
     65     nop
     66     nop
     67     nop
     68     nop
     69     ret
     70