1 #------------------------------------------------------------------------------
3 # Copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR>
5 # This program and the accompanying materials
6 # are licensed and made available under the terms and conditions of the BSD License
7 # which accompanies this distribution. The full text of the license may be found at
8 # http://opensource.org/licenses/bsd-license.php
10 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13 #------------------------------------------------------------------------------
15 .globl ASM_PFX(Cp15IdCode)
16 INTERWORK_FUNC(Cp15IdCode)
17 .globl ASM_PFX(Cp15CacheInfo)
18 INTERWORK_FUNC(Cp15CacheInfo)
19 .globl ASM_PFX(ArmEnableInterrupts)
20 INTERWORK_FUNC(ArmEnableInterrupts)
21 .globl ASM_PFX(ArmDisableInterrupts)
22 INTERWORK_FUNC(ArmDisableInterrupts)
23 .globl ASM_PFX(ArmGetInterruptState)
24 INTERWORK_FUNC(ArmGetInterruptState)
25 .globl ASM_PFX(ArmEnableFiq)
26 INTERWORK_FUNC(ArmEnableFiq)
27 .globl ASM_PFX(ArmDisableFiq)
28 INTERWORK_FUNC(ArmDisableFiq)
29 .globl ASM_PFX(ArmGetFiqState)
30 INTERWORK_FUNC(ArmGetFiqState)
31 .globl ASM_PFX(ArmInvalidateTlb)
32 INTERWORK_FUNC(ArmInvalidateTlb)
33 .globl ASM_PFX(ArmSetTranslationTableBaseAddress)
34 INTERWORK_FUNC(ArmSetTranslationTableBaseAddress)
35 .globl ASM_PFX(ArmGetTranslationTableBaseAddress)
36 INTERWORK_FUNC(ArmGetTranslationTableBaseAddress)
37 .globl ASM_PFX(ArmSetDomainAccessControl)
38 INTERWORK_FUNC(ArmSetDomainAccessControl)
39 .globl ASM_PFX(ArmUpdateTranslationTableEntry)
40 INTERWORK_FUNC(ArmUpdateTranslationTableEntry)
41 .globl ASM_PFX(CPSRMaskInsert)
42 INTERWORK_FUNC(CPSRMaskInsert)
43 .globl ASM_PFX(CPSRRead)
44 INTERWORK_FUNC(CPSRRead)
45 .globl ASM_PFX(ReadCCSIDR)
46 INTERWORK_FUNC(ReadCCSIDR)
47 .globl ASM_PFX(ReadCLIDR)
48 INTERWORK_FUNC(ReadCLIDR)
53 #------------------------------------------------------------------------------
59 ASM_PFX(Cp15CacheInfo):
63 ASM_PFX(ArmEnableInterrupts):
67 ASM_PFX(ArmDisableInterrupts):
71 ASM_PFX(ArmGetInterruptState):
73 tst R0,#0x80 @Check if IRQ is enabled.
78 ASM_PFX(ArmEnableFiq):
82 ASM_PFX(ArmDisableFiq):
86 ASM_PFX(ArmGetFiqState):
88 tst R0,#0x40 @Check if FIQ is enabled.
93 ASM_PFX(ArmInvalidateTlb):
96 mcr p15,0,R9,c7,c5,6 @ BPIALL Invalidate Branch predictor array. R9 == NoOp
101 ASM_PFX(ArmSetTranslationTableBaseAddress):
106 ASM_PFX(ArmGetTranslationTableBaseAddress):
112 ASM_PFX(ArmSetDomainAccessControl):
119 //ArmUpdateTranslationTableEntry (
120 // IN VOID *TranslationTableEntry // R0
121 // IN VOID *MVA // R1
123 ASM_PFX(ArmUpdateTranslationTableEntry):
124 mcr p15,0,R0,c7,c14,1 @ DCCIMVAC Clean data cache by MVA
126 mcr p15,0,R1,c8,c7,1 @ TLBIMVA TLB Invalidate MVA
127 mcr p15,0,R9,c7,c5,6 @ BPIALL Invalidate Branch predictor array. R9 == NoOp
132 ASM_PFX(CPSRMaskInsert): @ on entry, r0 is the mask and r1 is the field to insert
133 stmfd sp!, {r4-r12, lr} @ save all the banked registers
134 mov r3, sp @ copy the stack pointer into a non-banked register
135 mrs r2, cpsr @ read the cpsr
136 bic r2, r2, r0 @ clear mask in the cpsr
137 and r1, r1, r0 @ clear bits outside the mask in the input
138 orr r2, r2, r1 @ set field
139 msr cpsr_cxsf, r2 @ write back cpsr (may have caused a mode switch)
141 mov sp, r3 @ restore stack pointer
142 ldmfd sp!, {r4-r12, lr} @ restore registers
143 bx lr @ return (hopefully thumb-safe!)
154 mcr p15,2,r0,c0,c0,0 @ Write Cache Size Selection Register (CSSELR)
156 mrc p15,1,r0,c0,c0,0 @ Read current CP15 Cache Size ID Register (CCSIDR)
164 mrc p15,1,r0,c0,c0,1 @ Read CP15 Cache Level ID Register
167 ASM_FUNCTION_REMOVE_IF_UNREFERENCED