diff --git a/MdePkg/Library/BaseLib/Arm/GccInline.c b/MdePkg/Library/BaseLib/Arm/GccInline.c deleted file mode 100644 index 0c6b016042..0000000000 --- a/MdePkg/Library/BaseLib/Arm/GccInline.c +++ /dev/null @@ -1,76 +0,0 @@ -/** @file - GCC inline implementation of BaseLib processor specific functions. - - Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.
- Portions copyright (c) 2008 - 2009, Apple Inc. 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. - -**/ - -#include "BaseLibInternals.h" - -/** - Requests CPU to pause for a short period of time. - - Requests CPU to pause for a short period of time. Typically used in MP - systems to prevent memory starvation while waiting for a spin lock. - -**/ -VOID -EFIAPI -CpuPause ( - VOID - ) -{ - __asm__ __volatile__ ( - "nop\n\t" - "nop\n\t" - "nop\n\t" - "nop\n\t" - "nop\n\t" - ); -} - -/** - Transfers control to a function starting with a new stack. - - This internal worker function transfers control to the function - specified by EntryPoint using the new stack specified by NewStack - and passing in the parameters specified by Context1 and Context2. - Context1 and Context2 are optional and may be NULL. - The function EntryPoint must never return. - - @param EntryPoint The pointer to the function to enter. - @param Context1 The first parameter to pass in. - @param Context2 The second Parameter to pass in - @param NewStack The new Location of the stack - -**/ -VOID -EFIAPI -InternalSwitchStackAsm ( - SWITCH_STACK_ENTRY_POINT EntryPoint, - VOID *Context1, - VOID *Context2, - VOID *NewStack - ) -{ - __asm__ __volatile__ ( - "mov lr, %0\n\t" - "mov sp, %3\n\t" - "mov %r0, %1\n\t" - "mov %r1, %2\n\t" - "bx lr\n\t" - : /* no output operand */ - : "r" (EntryPoint), - "r" (Context1), - "r" (Context2), - "r" (NewStack) - ); -} diff --git a/MdePkg/Library/BaseLib/Arm/SwitchStack.S b/MdePkg/Library/BaseLib/Arm/SwitchStack.S new file mode 100644 index 0000000000..413de99ba5 --- /dev/null +++ b/MdePkg/Library/BaseLib/Arm/SwitchStack.S @@ -0,0 +1,68 @@ +//------------------------------------------------------------------------------ +// +// Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.
+// Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.
+// Portions copyright (c) 2011, ARM Limited. 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. +// +//------------------------------------------------------------------------------ + +.text +.align 5 + +GCC_ASM_EXPORT(InternalSwitchStackAsm) +GCC_ASM_EXPORT(CpuPause) + +/** +// +// This allows the caller to switch the stack and goes to the new entry point +// +// @param EntryPoint The pointer to the location to enter +// @param Context Parameter to pass in +// @param Context2 Parameter2 to pass in +// @param NewStack New Location of the stack +// +// @return Nothing. Goes to the Entry Point passing in the new parameters +// +VOID +EFIAPI +InternalSwitchStackAsm ( + SWITCH_STACK_ENTRY_POINT EntryPoint, + VOID *Context, + VOID *Context2, + VOID *NewStack + ); +**/ +ASM_PFX(InternalSwitchStackAsm): + MOV LR, R0 + MOV SP, R3 + MOV R0, R1 + MOV R1, R2 + BX LR + +/** +// +// Requests CPU to pause for a short period of time. +// +// Requests CPU to pause for a short period of time. Typically used in MP +// systems to prevent memory starvation while waiting for a spin lock. +// +VOID +EFIAPI +CpuPause ( + VOID + ) +**/ +ASM_PFX(CpuPause): + nop + nop + nop + nop + nop + BX LR diff --git a/MdePkg/Library/BaseLib/BaseLib.inf b/MdePkg/Library/BaseLib/BaseLib.inf index 19d546546e..f54c3bc32b 100644 --- a/MdePkg/Library/BaseLib/BaseLib.inf +++ b/MdePkg/Library/BaseLib/BaseLib.inf @@ -469,7 +469,7 @@ Arm/CpuBreakpoint.asm | RVCT Arm/Math64.S | GCC - Arm/GccInline.c | GCC + Arm/SwitchStack.S | GCC Arm/EnableInterrupts.S | GCC Arm/DisableInterrupts.S | GCC Arm/GetInterruptsState.S | GCC