Switch all users of ArmLib that depend on the MMU routines to the new, separate ArmMmuLib. This needs to occur in one go, since the MMU routines are removed from ArmLib build at the same time, to prevent conflicting symbols. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Acked-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Star Zeng <star.zeng@intel.com>
115 lines
2.7 KiB
ArmAsm
115 lines
2.7 KiB
ArmAsm
#------------------------------------------------------------------------------
|
|
#
|
|
# Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
|
|
# Copyright (c) 2011-2013, 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.
|
|
#
|
|
#------------------------------------------------------------------------------
|
|
|
|
#include <AsmMacroIoLib.h>
|
|
|
|
.text
|
|
.align 2
|
|
|
|
GCC_ASM_EXPORT(ArmIsMpCore)
|
|
GCC_ASM_EXPORT(ArmHasMpExtensions)
|
|
GCC_ASM_EXPORT(ArmEnableAsynchronousAbort)
|
|
GCC_ASM_EXPORT(ArmDisableAsynchronousAbort)
|
|
GCC_ASM_EXPORT(ArmEnableIrq)
|
|
GCC_ASM_EXPORT(ArmDisableIrq)
|
|
GCC_ASM_EXPORT(ArmEnableFiq)
|
|
GCC_ASM_EXPORT(ArmDisableFiq)
|
|
GCC_ASM_EXPORT(ArmEnableInterrupts)
|
|
GCC_ASM_EXPORT(ArmDisableInterrupts)
|
|
GCC_ASM_EXPORT(ReadCCSIDR)
|
|
GCC_ASM_EXPORT(ReadCLIDR)
|
|
GCC_ASM_EXPORT(ArmReadNsacr)
|
|
GCC_ASM_EXPORT(ArmWriteNsacr)
|
|
|
|
#------------------------------------------------------------------------------
|
|
|
|
ASM_PFX(ArmIsMpCore):
|
|
mrc p15,0,R0,c0,c0,5
|
|
// Get Multiprocessing extension (bit31) & U bit (bit30)
|
|
and R0, R0, #0xC0000000
|
|
// if (bit31 == 1) && (bit30 == 0) then the processor is part of a multiprocessor system
|
|
cmp R0, #0x80000000
|
|
moveq R0, #1
|
|
movne R0, #0
|
|
bx LR
|
|
|
|
ASM_PFX(ArmEnableAsynchronousAbort):
|
|
cpsie a
|
|
isb
|
|
bx LR
|
|
|
|
ASM_PFX(ArmDisableAsynchronousAbort):
|
|
cpsid a
|
|
isb
|
|
bx LR
|
|
|
|
ASM_PFX(ArmEnableIrq):
|
|
cpsie i
|
|
isb
|
|
bx LR
|
|
|
|
ASM_PFX(ArmDisableIrq):
|
|
cpsid i
|
|
isb
|
|
bx LR
|
|
|
|
ASM_PFX(ArmEnableFiq):
|
|
cpsie f
|
|
isb
|
|
bx LR
|
|
|
|
ASM_PFX(ArmDisableFiq):
|
|
cpsid f
|
|
isb
|
|
bx LR
|
|
|
|
ASM_PFX(ArmEnableInterrupts):
|
|
cpsie if
|
|
isb
|
|
bx LR
|
|
|
|
ASM_PFX(ArmDisableInterrupts):
|
|
cpsid if
|
|
isb
|
|
bx LR
|
|
|
|
// UINT32
|
|
// ReadCCSIDR (
|
|
// IN UINT32 CSSELR
|
|
// )
|
|
ASM_PFX(ReadCCSIDR):
|
|
mcr p15,2,r0,c0,c0,0 @ Write Cache Size Selection Register (CSSELR)
|
|
isb
|
|
mrc p15,1,r0,c0,c0,0 @ Read current CP15 Cache Size ID Register (CCSIDR)
|
|
bx lr
|
|
|
|
// UINT32
|
|
// ReadCLIDR (
|
|
// IN UINT32 CSSELR
|
|
// )
|
|
ASM_PFX(ReadCLIDR):
|
|
mrc p15,1,r0,c0,c0,1 @ Read CP15 Cache Level ID Register
|
|
bx lr
|
|
|
|
ASM_PFX(ArmReadNsacr):
|
|
mrc p15, 0, r0, c1, c1, 2
|
|
bx lr
|
|
|
|
ASM_PFX(ArmWriteNsacr):
|
|
mcr p15, 0, r0, c1, c1, 2
|
|
bx lr
|
|
|
|
ASM_FUNCTION_REMOVE_IF_UNREFERENCED
|