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   x30, x0
     44     mov   sp, x3
     45     mov   x0, x1
     46     mov   x1, x2
     47     ret
     48 
     49 /**
     50 //
     51 //  Requests CPU to pause for a short period of time.
     52 //
     53 //  Requests CPU to pause for a short period of time. Typically used in MP
     54 //  systems to prevent memory starvation while waiting for a spin lock.
     55 //
     56 VOID
     57 EFIAPI
     58 CpuPause (
     59   VOID
     60   )
     61 **/
     62 ASM_PFX(CpuPause):
     63     nop
     64     nop
     65     nop
     66     nop
     67     nop
     68     ret
     69