mirror of https://github.com/acidanthera/audk.git
140 lines
3.9 KiB
NASM
140 lines
3.9 KiB
NASM
//------------------------------------------------------------------------------
|
|
//
|
|
// Copyright (c) 2008-2009 Apple Inc. All rights reserved.
|
|
//
|
|
// 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 ArmCleanInvalidateDataCache
|
|
EXPORT ArmCleanDataCache
|
|
EXPORT ArmInvalidateDataCache
|
|
EXPORT ArmInvalidateInstructionCache
|
|
EXPORT ArmInvalidateDataCacheEntryByMVA
|
|
EXPORT ArmCleanDataCacheEntryByMVA
|
|
EXPORT ArmCleanInvalidateDataCacheEntryByMVA
|
|
EXPORT ArmEnableMmu
|
|
EXPORT ArmDisableMmu
|
|
EXPORT ArmMmuEnabled
|
|
EXPORT ArmEnableDataCache
|
|
EXPORT ArmDisableDataCache
|
|
EXPORT ArmEnableInstructionCache
|
|
EXPORT ArmDisableInstructionCache
|
|
EXPORT ArmEnableBranchPrediction
|
|
EXPORT ArmDisableBranchPrediction
|
|
|
|
|
|
DC_ON EQU ( 0x1:SHL:2 )
|
|
IC_ON EQU ( 0x1:SHL:12 )
|
|
XP_ON EQU ( 0x1:SHL:23 )
|
|
|
|
|
|
AREA ArmCacheLib, CODE, READONLY
|
|
PRESERVE8
|
|
|
|
|
|
ArmInvalidateDataCacheEntryByMVA
|
|
mcr p15, 0, r0, c7, c6, 1 ; invalidate single data cache line
|
|
bx lr
|
|
|
|
|
|
ArmCleanDataCacheEntryByMVA
|
|
mcr p15, 0, r0, c7, c10, 1 ; clean single data cache line
|
|
bx lr
|
|
|
|
|
|
ArmCleanInvalidateDataCacheEntryByMVA
|
|
mcr p15, 0, r0, c7, c14, 1 ; clean and invalidate single data cache line
|
|
bx lr
|
|
|
|
|
|
ArmCleanDataCache
|
|
mcr p15, 0, r0, c7, c10, 0 ; clean entire data cache
|
|
bx lr
|
|
|
|
|
|
ArmCleanInvalidateDataCache
|
|
mcr p15, 0, r0, c7, c14, 0 ; clean and invalidate entire data cache
|
|
bx lr
|
|
|
|
|
|
ArmInvalidateDataCache
|
|
mcr p15, 0, r0, c7, c6, 0 ; invalidate entire data cache
|
|
bx lr
|
|
|
|
|
|
ArmInvalidateInstructionCache
|
|
mcr p15, 0, r0, c7, c5, 0 ;invalidate entire instruction cache
|
|
mov R0,#0
|
|
mcr p15,0,R0,c7,c5,4 ;Flush Prefetch buffer
|
|
bx lr
|
|
|
|
ArmEnableMmu
|
|
mrc p15,0,R0,c1,c0,0
|
|
orr R0,R0,#1
|
|
mcr p15,0,R0,c1,c0,0
|
|
bx LR
|
|
|
|
ArmMmuEnabled
|
|
mrc p15,0,R0,c1,c0,0
|
|
and R0,R0,#1
|
|
bx LR
|
|
|
|
ArmDisableMmu
|
|
mrc p15,0,R0,c1,c0,0
|
|
bic R0,R0,#1
|
|
mcr p15,0,R0,c1,c0,0
|
|
mov R0,#0
|
|
mcr p15,0,R0,c7,c10,4 ;Data synchronization barrier
|
|
mov R0,#0
|
|
mcr p15,0,R0,c7,c5,4 ;Flush Prefetch buffer
|
|
bx LR
|
|
|
|
ArmEnableDataCache
|
|
LDR R1,=DC_ON
|
|
MRC p15,0,R0,c1,c0,0 ;Read control register configuration data
|
|
ORR R0,R0,R1 ;Set C bit
|
|
MCR p15,0,r0,c1,c0,0 ;Write control register configuration data
|
|
BX LR
|
|
|
|
ArmDisableDataCache
|
|
LDR R1,=DC_ON
|
|
MRC p15,0,R0,c1,c0,0 ;Read control register configuration data
|
|
BIC R0,R0,R1 ;Clear C bit
|
|
MCR p15,0,r0,c1,c0,0 ;Write control register configuration data
|
|
BX LR
|
|
|
|
ArmEnableInstructionCache
|
|
LDR R1,=IC_ON
|
|
MRC p15,0,R0,c1,c0,0 ;Read control register configuration data
|
|
ORR R0,R0,R1 ;Set I bit
|
|
MCR p15,0,r0,c1,c0,0 ;Write control register configuration data
|
|
BX LR
|
|
|
|
ArmDisableInstructionCache
|
|
LDR R1,=IC_ON
|
|
MRC p15,0,R0,c1,c0,0 ;Read control register configuration data
|
|
BIC R0,R0,R1 ;Clear I bit.
|
|
MCR p15,0,r0,c1,c0,0 ;Write control register configuration data
|
|
BX LR
|
|
|
|
ArmEnableBranchPrediction
|
|
mrc p15, 0, r0, c1, c0, 0
|
|
orr r0, r0, #0x00000800
|
|
mcr p15, 0, r0, c1, c0, 0
|
|
bx LR
|
|
|
|
ArmDisableBranchPrediction
|
|
mrc p15, 0, r0, c1, c0, 0
|
|
bic r0, r0, #0x00000800
|
|
mcr p15, 0, r0, c1, c0, 0
|
|
bx LR
|
|
|
|
END
|