From e0337bfab8f1d3affab9e0313121d6015f0d996c Mon Sep 17 00:00:00 2001 From: vprabhal Date: Fri, 5 Oct 2007 18:47:03 +0000 Subject: [PATCH] created a CpuLib for CpuSleep and CpuFlushTlb from BaseLib to remove circular dependency on PalCallLib. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4020 6f19259b-4bc3-4df7-8a09-765794883524 --- MdePkg/Library/CpuLib/CpuLib.inf | 68 ++++++++++++++++++++ MdePkg/Library/CpuLib/Ebc/CpuSleepFlushTlb.c | 45 +++++++++++++ MdePkg/Library/CpuLib/Ia32/CpuFlushTlb.S | 35 ++++++++++ MdePkg/Library/CpuLib/Ia32/CpuFlushTlb.asm | 40 ++++++++++++ MdePkg/Library/CpuLib/Ia32/CpuFlushTlb.c | 31 +++++++++ MdePkg/Library/CpuLib/Ia32/CpuPause.S | 34 ++++++++++ MdePkg/Library/CpuLib/Ia32/CpuPause.asm | 40 ++++++++++++ MdePkg/Library/CpuLib/Ia32/CpuPause.c | 30 +++++++++ MdePkg/Library/CpuLib/Ia32/CpuSleep.S | 34 ++++++++++ MdePkg/Library/CpuLib/Ia32/CpuSleep.asm | 39 +++++++++++ MdePkg/Library/CpuLib/Ia32/CpuSleep.c | 30 +++++++++ MdePkg/Library/CpuLib/Ipf/CpuFlushTlb.s | 58 +++++++++++++++++ MdePkg/Library/CpuLib/Ipf/CpuPause.s | 25 +++++++ MdePkg/Library/CpuLib/Ipf/CpuSleep.c | 32 +++++++++ MdePkg/Library/CpuLib/X64/CpuFlushTlb.S | 35 ++++++++++ MdePkg/Library/CpuLib/X64/CpuFlushTlb.asm | 38 +++++++++++ MdePkg/Library/CpuLib/X64/CpuPause.S | 34 ++++++++++ MdePkg/Library/CpuLib/X64/CpuPause.asm | 37 +++++++++++ MdePkg/Library/CpuLib/X64/CpuSleep.S | 34 ++++++++++ MdePkg/Library/CpuLib/X64/CpuSleep.asm | 37 +++++++++++ 20 files changed, 756 insertions(+) create mode 100644 MdePkg/Library/CpuLib/CpuLib.inf create mode 100644 MdePkg/Library/CpuLib/Ebc/CpuSleepFlushTlb.c create mode 100644 MdePkg/Library/CpuLib/Ia32/CpuFlushTlb.S create mode 100644 MdePkg/Library/CpuLib/Ia32/CpuFlushTlb.asm create mode 100644 MdePkg/Library/CpuLib/Ia32/CpuFlushTlb.c create mode 100644 MdePkg/Library/CpuLib/Ia32/CpuPause.S create mode 100644 MdePkg/Library/CpuLib/Ia32/CpuPause.asm create mode 100644 MdePkg/Library/CpuLib/Ia32/CpuPause.c create mode 100644 MdePkg/Library/CpuLib/Ia32/CpuSleep.S create mode 100644 MdePkg/Library/CpuLib/Ia32/CpuSleep.asm create mode 100644 MdePkg/Library/CpuLib/Ia32/CpuSleep.c create mode 100644 MdePkg/Library/CpuLib/Ipf/CpuFlushTlb.s create mode 100644 MdePkg/Library/CpuLib/Ipf/CpuPause.s create mode 100644 MdePkg/Library/CpuLib/Ipf/CpuSleep.c create mode 100644 MdePkg/Library/CpuLib/X64/CpuFlushTlb.S create mode 100644 MdePkg/Library/CpuLib/X64/CpuFlushTlb.asm create mode 100644 MdePkg/Library/CpuLib/X64/CpuPause.S create mode 100644 MdePkg/Library/CpuLib/X64/CpuPause.asm create mode 100644 MdePkg/Library/CpuLib/X64/CpuSleep.S create mode 100644 MdePkg/Library/CpuLib/X64/CpuSleep.asm diff --git a/MdePkg/Library/CpuLib/CpuLib.inf b/MdePkg/Library/CpuLib/CpuLib.inf new file mode 100644 index 0000000000..13e660dfb6 --- /dev/null +++ b/MdePkg/Library/CpuLib/CpuLib.inf @@ -0,0 +1,68 @@ +#/** @file +# Component description file for Base Library +# +# Base Library implementation. +# Copyright (c) 2007, Intel Corporation. +# +# 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. +# +# +#**/ + +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = CpuLib + FILE_GUID = 4FBD2538-249C-4b50-8F4A-A9E66609CBF6 + MODULE_TYPE = BASE + VERSION_STRING = 1.0 + LIBRARY_CLASS = CpuLib + EDK_RELEASE_VERSION = 0x00020000 + EFI_SPECIFICATION_VERSION = 0x00020000 + + + +# +# VALID_ARCHITECTURES = IA32 X64 IPF EBC +# + +[Sources.common] + +[Sources.Ia32] + Ia32/CpuSleep.c | MSFT + Ia32/CpuFlushTlb.c | MSFT + + Ia32/CpuSleep.asm | INTEL + Ia32/CpuFlushTlb.asm | INTEL + + Ia32/CpuSleep.S | GCC + Ia32/CpuFlushTlb.S | GCC + +[Sources.X64] + X64/CpuFlushTlb.asm + X64/CpuSleep.asm + + X64/CpuSleep.S | GCC + X64/CpuFlushTlb.S | GCC + +[Sources.IPF] + Ipf/CpuFlushTlb.s + Ipf/CpuSleep.c + +[Sources.EBC] + Ebc/CpuSleepFlushTlb.c + +[Packages] + MdePkg/MdePkg.dec + + +[LibraryClasses.Ipf] +PalCallLib + + +[Pcd.common] + diff --git a/MdePkg/Library/CpuLib/Ebc/CpuSleepFlushTlb.c b/MdePkg/Library/CpuLib/Ebc/CpuSleepFlushTlb.c new file mode 100644 index 0000000000..f249d1a692 --- /dev/null +++ b/MdePkg/Library/CpuLib/Ebc/CpuSleepFlushTlb.c @@ -0,0 +1,45 @@ +/** @file + Base Library CPU Functions for EBC + + Copyright (c) 2006, Intel Corporation
+ 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. + +**/ + + +/** + Flushes all the Translation Lookaside Buffers(TLB) entries in a CPU. + + Flushes all the Translation Lookaside Buffers(TLB) entries in a CPU. + +**/ +VOID +EFIAPI +CpuFlushTlb ( + VOID + ) +{ + ASSERT (FALSE); +} + +/** + Places the CPU in a sleep state until an interrupt is received. + + Places the CPU in a sleep state until an interrupt is received. If interrupts + are disabled prior to calling this function, then the CPU will be placed in a + sleep state indefinitely. + +**/ +VOID +EFIAPI +CpuSleep ( + VOID + ) +{ +} diff --git a/MdePkg/Library/CpuLib/Ia32/CpuFlushTlb.S b/MdePkg/Library/CpuLib/Ia32/CpuFlushTlb.S new file mode 100644 index 0000000000..f8b1cdc7ee --- /dev/null +++ b/MdePkg/Library/CpuLib/Ia32/CpuFlushTlb.S @@ -0,0 +1,35 @@ +#------------------------------------------------------------------------------ ; +# Copyright (c) 2006, Intel Corporation +# 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. +# +# Module Name: +# +# CpuFlushTlb.Asm +# +# Abstract: +# +# CpuFlushTlb function +# +# Notes: +# +#------------------------------------------------------------------------------ + +.globl ASM_PFX(CpuFlushTlb) + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# CpuFlushTlb ( +# VOID +# ); +#------------------------------------------------------------------------------ +ASM_PFX(CpuFlushTlb): + movl %cr3, %eax + movl %eax, %cr3 + ret diff --git a/MdePkg/Library/CpuLib/Ia32/CpuFlushTlb.asm b/MdePkg/Library/CpuLib/Ia32/CpuFlushTlb.asm new file mode 100644 index 0000000000..4f0c4f9944 --- /dev/null +++ b/MdePkg/Library/CpuLib/Ia32/CpuFlushTlb.asm @@ -0,0 +1,40 @@ +;------------------------------------------------------------------------------ ; +; Copyright (c) 2006, Intel Corporation +; 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. +; +; Module Name: +; +; CpuFlushTlb.Asm +; +; Abstract: +; +; CpuFlushTlb function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .386p + .model flat,C + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; CpuFlushTlb ( +; VOID +; ); +;------------------------------------------------------------------------------ +CpuFlushTlb PROC + mov eax, cr3 + mov cr3, eax ; moving to CR3 flushes TLB + ret +CpuFlushTlb ENDP + + END diff --git a/MdePkg/Library/CpuLib/Ia32/CpuFlushTlb.c b/MdePkg/Library/CpuLib/Ia32/CpuFlushTlb.c new file mode 100644 index 0000000000..e785095d7a --- /dev/null +++ b/MdePkg/Library/CpuLib/Ia32/CpuFlushTlb.c @@ -0,0 +1,31 @@ +/** @file + CpuFlushTlb function. + + Copyright (c) 2006 - 2007, Intel Corporation
+ 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 common header file for this module. +// + + +VOID +EFIAPI +CpuFlushTlb ( + VOID + ) +{ + _asm { + mov eax, cr3 + mov cr3, eax + } +} + diff --git a/MdePkg/Library/CpuLib/Ia32/CpuPause.S b/MdePkg/Library/CpuLib/Ia32/CpuPause.S new file mode 100644 index 0000000000..5fef9c8d5c --- /dev/null +++ b/MdePkg/Library/CpuLib/Ia32/CpuPause.S @@ -0,0 +1,34 @@ +#------------------------------------------------------------------------------ ; +# Copyright (c) 2006, Intel Corporation +# 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. +# +# Module Name: +# +# CpuPause.Asm +# +# Abstract: +# +# CpuPause function +# +# Notes: +# +#------------------------------------------------------------------------------ + +.globl ASM_PFX(CpuPause) + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# CpuPause ( +# VOID +# ); +#------------------------------------------------------------------------------ +ASM_PFX(CpuPause): + pause + ret diff --git a/MdePkg/Library/CpuLib/Ia32/CpuPause.asm b/MdePkg/Library/CpuLib/Ia32/CpuPause.asm new file mode 100644 index 0000000000..4c7135fc9c --- /dev/null +++ b/MdePkg/Library/CpuLib/Ia32/CpuPause.asm @@ -0,0 +1,40 @@ +;------------------------------------------------------------------------------ ; +; Copyright (c) 2006, Intel Corporation +; 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. +; +; Module Name: +; +; CpuPause.Asm +; +; Abstract: +; +; CpuPause function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .686 + .model flat,C + .xmm + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; CpuPause ( +; VOID +; ); +;------------------------------------------------------------------------------ +CpuPause PROC + pause + ret +CpuPause ENDP + + END diff --git a/MdePkg/Library/CpuLib/Ia32/CpuPause.c b/MdePkg/Library/CpuLib/Ia32/CpuPause.c new file mode 100644 index 0000000000..ee7c96736b --- /dev/null +++ b/MdePkg/Library/CpuLib/Ia32/CpuPause.c @@ -0,0 +1,30 @@ +/** @file + CpuPause function. + + Copyright (c) 2006 - 2007, Intel Corporation
+ 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 common header file for this module. +// + + +VOID +EFIAPI +CpuPause ( + VOID + ) +{ + _asm { + pause + } +} + diff --git a/MdePkg/Library/CpuLib/Ia32/CpuSleep.S b/MdePkg/Library/CpuLib/Ia32/CpuSleep.S new file mode 100644 index 0000000000..ac39e8fcba --- /dev/null +++ b/MdePkg/Library/CpuLib/Ia32/CpuSleep.S @@ -0,0 +1,34 @@ +#------------------------------------------------------------------------------ ; +# Copyright (c) 2006, Intel Corporation +# 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. +# +# Module Name: +# +# CpuSleep.Asm +# +# Abstract: +# +# CpuSleep function +# +# Notes: +# +#------------------------------------------------------------------------------ + +.globl ASM_PFX(CpuSleep) + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# CpuSleep ( +# VOID +# ); +#------------------------------------------------------------------------------ +ASM_PFX(CpuSleep): + hlt + ret diff --git a/MdePkg/Library/CpuLib/Ia32/CpuSleep.asm b/MdePkg/Library/CpuLib/Ia32/CpuSleep.asm new file mode 100644 index 0000000000..8a779f7017 --- /dev/null +++ b/MdePkg/Library/CpuLib/Ia32/CpuSleep.asm @@ -0,0 +1,39 @@ +;------------------------------------------------------------------------------ ; +; Copyright (c) 2006, Intel Corporation +; 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. +; +; Module Name: +; +; CpuSleep.Asm +; +; Abstract: +; +; CpuSleep function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .386 + .model flat,C + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; CpuSleep ( +; VOID +; ); +;------------------------------------------------------------------------------ +CpuSleep PROC + hlt + ret +CpuSleep ENDP + + END diff --git a/MdePkg/Library/CpuLib/Ia32/CpuSleep.c b/MdePkg/Library/CpuLib/Ia32/CpuSleep.c new file mode 100644 index 0000000000..690f9b3598 --- /dev/null +++ b/MdePkg/Library/CpuLib/Ia32/CpuSleep.c @@ -0,0 +1,30 @@ +/** @file + CpuSleep function. + + Copyright (c) 2006 - 2007, Intel Corporation
+ 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 common header file for this module. +// + + +VOID +EFIAPI +CpuSleep ( + VOID + ) +{ + _asm { + hlt + } +} + diff --git a/MdePkg/Library/CpuLib/Ipf/CpuFlushTlb.s b/MdePkg/Library/CpuLib/Ipf/CpuFlushTlb.s new file mode 100644 index 0000000000..5546990992 --- /dev/null +++ b/MdePkg/Library/CpuLib/Ipf/CpuFlushTlb.s @@ -0,0 +1,58 @@ +/// @file +/// CpuFlushTlb() function for Itanium-based architecture. +/// +/// Copyright (c) 2006, Intel Corporation +/// 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. +/// +/// Module Name: CpuFlushTlb.s +/// +/// + +.auto +.text + +.globl PalCall +.type PalCall, @function + +.proc CpuFlushTlb +.type CpuFlushTlb, @function +CpuFlushTlb:: + alloc loc0 = ar.pfs, 0, 3, 5, 0 + mov out0 = 0 + mov out1 = 6 + mov out2 = 0 + mov out3 = 0 + mov loc1 = b0 + mov out4 = 0 + brl.call.sptk b0 = PalCall + mov loc2 = psr // save PSR + mov ar.pfs = loc0 + extr.u r14 = r10, 32, 32 // r14 <- count1 + rsm 1 << 14 // Disable interrupts + extr.u r15 = r11, 32, 32 // r15 <- stride1 + extr.u r10 = r10, 0, 32 // r10 <- count2 + add r10 = -1, r10 + extr.u r11 = r11, 0, 32 // r11 <- stride2 + br.cond.sptk LoopPredicate +LoopOuter: + mov ar.lc = r10 // LC <- count2 + mov ar.ec = r0 // EC <- 0 +Loop: + ptc.e r9 + add r9 = r11, r9 // r9 += stride2 + br.ctop.sptk Loop + add r9 = r15, r9 // r9 += stride1 +LoopPredicate: + cmp.ne p6 = r0, r14 // count1 == 0? + add r14 = -1, r14 +(p6) br.cond.sptk LoopOuter + mov psr.l = loc2 + mov b0 = loc1 + br.ret.sptk.many b0 +.endp diff --git a/MdePkg/Library/CpuLib/Ipf/CpuPause.s b/MdePkg/Library/CpuLib/Ipf/CpuPause.s new file mode 100644 index 0000000000..f52692f438 --- /dev/null +++ b/MdePkg/Library/CpuLib/Ipf/CpuPause.s @@ -0,0 +1,25 @@ +/// @file +/// CpuPause() function for Itanium-based architecture. +/// +/// Copyright (c) 2006, Intel Corporation +/// 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. +/// +/// Module Name: CpuPause.s +/// +/// + +.auto +.text + +.proc CpuPause +.type CpuPause, @function +CpuPause:: + hint @pause + br.ret.sptk.many b0 +.endp diff --git a/MdePkg/Library/CpuLib/Ipf/CpuSleep.c b/MdePkg/Library/CpuLib/Ipf/CpuSleep.c new file mode 100644 index 0000000000..5ad64a5cf4 --- /dev/null +++ b/MdePkg/Library/CpuLib/Ipf/CpuSleep.c @@ -0,0 +1,32 @@ +/** @file + Base Library CPU functions for Itanium + + Copyright (c) 2006, Intel Corporation
+ 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 + +/** + Places the CPU in a sleep state until an interrupt is received. + + Places the CPU in a sleep state until an interrupt is received. If interrupts + are disabled prior to calling this function, then the CPU will be placed in a + sleep state indefinitely. + +**/ +VOID +EFIAPI +CpuSleep ( + VOID + ) +{ + PalCall (29, 0, 0, 0); +} diff --git a/MdePkg/Library/CpuLib/X64/CpuFlushTlb.S b/MdePkg/Library/CpuLib/X64/CpuFlushTlb.S new file mode 100644 index 0000000000..2dbaf846c4 --- /dev/null +++ b/MdePkg/Library/CpuLib/X64/CpuFlushTlb.S @@ -0,0 +1,35 @@ +#------------------------------------------------------------------------------ +# Copyright (c) 2006, Intel Corporation +# 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. +# +# Module Name: +# +# CpuFlushTlb.Asm +# +# Abstract: +# +# CpuFlushTlb function +# +# Notes: +# +#------------------------------------------------------------------------------ + +.global _CpuFlushTlb + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# CpuFlushTlb ( +# VOID +# ); +#------------------------------------------------------------------------------ +_CpuFlushTlb: + mov %cr3, %rax + mov %rax, %cr3 + ret diff --git a/MdePkg/Library/CpuLib/X64/CpuFlushTlb.asm b/MdePkg/Library/CpuLib/X64/CpuFlushTlb.asm new file mode 100644 index 0000000000..c2c4490e9d --- /dev/null +++ b/MdePkg/Library/CpuLib/X64/CpuFlushTlb.asm @@ -0,0 +1,38 @@ +;------------------------------------------------------------------------------ ; +; Copyright (c) 2006, Intel Corporation +; 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. +; +; Module Name: +; +; CpuFlushTlb.Asm +; +; Abstract: +; +; CpuFlushTlb function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; CpuFlushTlb ( +; VOID +; ); +;------------------------------------------------------------------------------ +CpuFlushTlb PROC + mov rax, cr3 + mov cr3, rax + ret +CpuFlushTlb ENDP + + END diff --git a/MdePkg/Library/CpuLib/X64/CpuPause.S b/MdePkg/Library/CpuLib/X64/CpuPause.S new file mode 100644 index 0000000000..0ecaa85b61 --- /dev/null +++ b/MdePkg/Library/CpuLib/X64/CpuPause.S @@ -0,0 +1,34 @@ +#------------------------------------------------------------------------------ ; +# Copyright (c) 2006, Intel Corporation +# 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. +# +# Module Name: +# +# CpuPause.S +# +# Abstract: +# +# CpuPause function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# CpuPause ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _CpuPause; +_CpuPause: + pause + ret diff --git a/MdePkg/Library/CpuLib/X64/CpuPause.asm b/MdePkg/Library/CpuLib/X64/CpuPause.asm new file mode 100644 index 0000000000..d16da37712 --- /dev/null +++ b/MdePkg/Library/CpuLib/X64/CpuPause.asm @@ -0,0 +1,37 @@ +;------------------------------------------------------------------------------ ; +; Copyright (c) 2006, Intel Corporation +; 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. +; +; Module Name: +; +; CpuPause.Asm +; +; Abstract: +; +; CpuPause function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; CpuPause ( +; VOID +; ); +;------------------------------------------------------------------------------ +CpuPause PROC + pause + ret +CpuPause ENDP + + END diff --git a/MdePkg/Library/CpuLib/X64/CpuSleep.S b/MdePkg/Library/CpuLib/X64/CpuSleep.S new file mode 100644 index 0000000000..681e4c12c3 --- /dev/null +++ b/MdePkg/Library/CpuLib/X64/CpuSleep.S @@ -0,0 +1,34 @@ +#------------------------------------------------------------------------------ ; +# Copyright (c) 2006, Intel Corporation +# 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. +# +# Module Name: +# +# CpuSleep.S +# +# Abstract: +# +# CpuSleep function +# +# Notes: +# +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# CpuSleep ( +# VOID +# ); +#------------------------------------------------------------------------------ +.global _CpuSleep; +_CpuSleep: + hlt + ret diff --git a/MdePkg/Library/CpuLib/X64/CpuSleep.asm b/MdePkg/Library/CpuLib/X64/CpuSleep.asm new file mode 100644 index 0000000000..b2c4907032 --- /dev/null +++ b/MdePkg/Library/CpuLib/X64/CpuSleep.asm @@ -0,0 +1,37 @@ +;------------------------------------------------------------------------------ ; +; Copyright (c) 2006, Intel Corporation +; 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. +; +; Module Name: +; +; CpuSleep.Asm +; +; Abstract: +; +; CpuSleep function +; +; Notes: +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; CpuSleep ( +; VOID +; ); +;------------------------------------------------------------------------------ +CpuSleep PROC + hlt + ret +CpuSleep ENDP + + END