From 8c1e795168bf0b63252e7ad293324fe5e2c5abe3 Mon Sep 17 00:00:00 2001 From: Olivier Martin Date: Mon, 2 Sep 2013 09:02:16 +0000 Subject: Add Memory fence for ARM Architecture (32 and 64 bit) Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Olivier Martin Reviewed-by: Liming Gao git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14615 6f19259b-4bc3-4df7-8a09-765794883524 --- MdePkg/Library/BaseLib/AArch64/MemoryFence.S | 39 ++++++++++++++++++++++++++++ MdePkg/Library/BaseLib/Arm/MemoryFence.S | 39 ++++++++++++++++++++++++++++ MdePkg/Library/BaseLib/Arm/MemoryFence.asm | 39 ++++++++++++++++++++++++++++ MdePkg/Library/BaseLib/BaseLib.inf | 3 +++ 4 files changed, 120 insertions(+) create mode 100644 MdePkg/Library/BaseLib/AArch64/MemoryFence.S create mode 100644 MdePkg/Library/BaseLib/Arm/MemoryFence.S create mode 100644 MdePkg/Library/BaseLib/Arm/MemoryFence.asm (limited to 'MdePkg/Library') diff --git a/MdePkg/Library/BaseLib/AArch64/MemoryFence.S b/MdePkg/Library/BaseLib/AArch64/MemoryFence.S new file mode 100644 index 0000000000..5c69e08170 --- /dev/null +++ b/MdePkg/Library/BaseLib/AArch64/MemoryFence.S @@ -0,0 +1,39 @@ +##------------------------------------------------------------------------------ +# +# MemoryFence() for AArch64 +# +# Copyright (c) 2013, ARM Ltd. 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 +.p2align 2 + +GCC_ASM_EXPORT(MemoryFence) + + +#/** +# Used to serialize load and store operations. +# +# All loads and stores that proceed calls to this function are guaranteed to be +# globally visible when this function returns. +# +#**/ +#VOID +#EFIAPI +#MemoryFence ( +# VOID +# ); +# +ASM_PFX(MemoryFence): + // System wide Data Memory Barrier. + dmb sy + ret diff --git a/MdePkg/Library/BaseLib/Arm/MemoryFence.S b/MdePkg/Library/BaseLib/Arm/MemoryFence.S new file mode 100644 index 0000000000..a2284ba639 --- /dev/null +++ b/MdePkg/Library/BaseLib/Arm/MemoryFence.S @@ -0,0 +1,39 @@ +##------------------------------------------------------------------------------ +# +# MemoryFence() for AArch64 +# +# Copyright (c) 2013, ARM Ltd. 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 +.p2align 2 + +GCC_ASM_EXPORT(MemoryFence) + + +#/** +# Used to serialize load and store operations. +# +# All loads and stores that proceed calls to this function are guaranteed to be +# globally visible when this function returns. +# +#**/ +#VOID +#EFIAPI +#MemoryFence ( +# VOID +# ); +# +ASM_PFX(MemoryFence): + // System wide Data Memory Barrier. + dmb + bx lr diff --git a/MdePkg/Library/BaseLib/Arm/MemoryFence.asm b/MdePkg/Library/BaseLib/Arm/MemoryFence.asm new file mode 100644 index 0000000000..8f3d05f4b9 --- /dev/null +++ b/MdePkg/Library/BaseLib/Arm/MemoryFence.asm @@ -0,0 +1,39 @@ +;------------------------------------------------------------------------------ +; +; MemoryFence() for AArch64 +; +; Copyright (c) 2013, ARM Ltd. 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. +; +;------------------------------------------------------------------------------ + + EXPORT MemoryFence + + AREA MemoryBarriers, CODE, READONLY + +;/** +; Used to serialize load and store operations. +; +; All loads and stores that proceed calls to this function are guaranteed to be +; globally visible when this function returns. +; +;**/ +;VOID +;EFIAPI +;MemoryFence ( +; VOID +; ); +; +MemoryFence FUNCTION + dmb + bx lr + ENDFUNC + + END diff --git a/MdePkg/Library/BaseLib/BaseLib.inf b/MdePkg/Library/BaseLib/BaseLib.inf index 3e47b55d19..d431ff0c0e 100644 --- a/MdePkg/Library/BaseLib/BaseLib.inf +++ b/MdePkg/Library/BaseLib/BaseLib.inf @@ -468,6 +468,7 @@ Arm/GetInterruptsState.asm | RVCT Arm/CpuPause.asm | RVCT Arm/CpuBreakpoint.asm | RVCT + Arm/MemoryFence.asm | RVCT Arm/Math64.S | GCC Arm/SwitchStack.S | GCC @@ -476,12 +477,14 @@ Arm/GetInterruptsState.S | GCC Arm/SetJumpLongJump.S | GCC Arm/CpuBreakpoint.S | GCC + Arm/MemoryFence.S | GCC [Sources.AARCH64] Arm/InternalSwitchStack.c Arm/Unaligned.c Math64.c + AArch64/MemoryFence.S | GCC AArch64/SwitchStack.S | GCC AArch64/EnableInterrupts.S | GCC AArch64/DisableInterrupts.S | GCC -- cgit v1.2.3