]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPkg/Library/ArmLib/Common/Arm/ArmLibSupport.asm
ARM Packages: Replace tabs by spaces for indentation
[mirror_edk2.git] / ArmPkg / Library / ArmLib / Common / Arm / ArmLibSupport.asm
CommitLineData
3402aac7 1//------------------------------------------------------------------------------\r
bd6b9799 2//\r
3// Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
f6c5a29b 4// Copyright (c) 2011 - 2014, ARM Limited. All rights reserved.\r
bd6b9799 5//\r
6// This program and the accompanying materials\r
7// are licensed and made available under the terms and conditions of the BSD License\r
8// which accompanies this distribution. The full text of the license may be found at\r
9// http://opensource.org/licenses/bsd-license.php\r
10//\r
11// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13//\r
14//------------------------------------------------------------------------------\r
15\r
16#include <AsmMacroIoLib.h>\r
3402aac7 17\r
bd6b9799 18 INCLUDE AsmMacroIoLib.inc\r
19\r
20#ifdef ARM_CPU_ARMv6\r
21// No memory barriers for ARMv6\r
22#define isb\r
23#define dsb\r
24#endif\r
25\r
f6c5a29b 26 EXPORT ArmReadMidr\r
64751727 27 EXPORT ArmCacheInfo\r
bd6b9799 28 EXPORT ArmGetInterruptState\r
29 EXPORT ArmGetFiqState\r
30 EXPORT ArmGetTTBR0BaseAddress\r
31 EXPORT ArmSetTTBR0\r
32 EXPORT ArmSetDomainAccessControl\r
33 EXPORT CPSRMaskInsert\r
34 EXPORT CPSRRead\r
836c3500 35 EXPORT ArmReadCpacr\r
36 EXPORT ArmWriteCpacr\r
bd6b9799 37 EXPORT ArmWriteAuxCr\r
38 EXPORT ArmReadAuxCr\r
39 EXPORT ArmInvalidateTlb\r
40 EXPORT ArmUpdateTranslationTableEntry\r
836c3500 41 EXPORT ArmReadScr\r
bd6b9799 42 EXPORT ArmWriteScr\r
836c3500 43 EXPORT ArmReadMVBar\r
44 EXPORT ArmWriteMVBar\r
5ea2c2d3 45 EXPORT ArmReadHVBar\r
46 EXPORT ArmWriteHVBar\r
b1d41be7 47 EXPORT ArmCallWFE\r
48 EXPORT ArmCallSEV\r
836c3500 49 EXPORT ArmReadSctlr\r
52d44f77
OM
50 EXPORT ArmReadCpuActlr\r
51 EXPORT ArmWriteCpuActlr\r
bd6b9799 52\r
53 AREA ArmLibSupport, CODE, READONLY\r
54\r
f6c5a29b 55ArmReadMidr\r
bd6b9799 56 mrc p15,0,R0,c0,c0,0\r
57 bx LR\r
58\r
64751727 59ArmCacheInfo\r
bd6b9799 60 mrc p15,0,R0,c0,c0,1\r
61 bx LR\r
62\r
63ArmGetInterruptState\r
64 mrs R0,CPSR\r
65 tst R0,#0x80 // Check if IRQ is enabled.\r
66 moveq R0,#1\r
67 movne R0,#0\r
68 bx LR\r
69\r
70ArmGetFiqState\r
71 mrs R0,CPSR\r
72 tst R0,#0x40 // Check if FIQ is enabled.\r
73 moveq R0,#1\r
74 movne R0,#0\r
75 bx LR\r
76\r
77ArmSetDomainAccessControl\r
78 mcr p15,0,r0,c3,c0,0\r
79 bx lr\r
80\r
81CPSRMaskInsert // on entry, r0 is the mask and r1 is the field to insert\r
82 stmfd sp!, {r4-r12, lr} // save all the banked registers\r
83 mov r3, sp // copy the stack pointer into a non-banked register\r
84 mrs r2, cpsr // read the cpsr\r
85 bic r2, r2, r0 // clear mask in the cpsr\r
86 and r1, r1, r0 // clear bits outside the mask in the input\r
87 orr r2, r2, r1 // set field\r
88 msr cpsr_cxsf, r2 // write back cpsr (may have caused a mode switch)\r
89 isb\r
90 mov sp, r3 // restore stack pointer\r
91 ldmfd sp!, {r4-r12, lr} // restore registers\r
92 bx lr // return (hopefully thumb-safe!) // return (hopefully thumb-safe!)\r
93\r
94CPSRRead\r
95 mrs r0, cpsr\r
96 bx lr\r
97\r
836c3500 98ArmReadCpacr\r
99 mrc p15, 0, r0, c1, c0, 2\r
100 bx lr\r
101\r
102ArmWriteCpacr\r
bd6b9799 103 mcr p15, 0, r0, c1, c0, 2\r
18029bb9 104 isb\r
bd6b9799 105 bx lr\r
106\r
107ArmWriteAuxCr\r
108 mcr p15, 0, r0, c1, c0, 1\r
109 bx lr\r
110\r
111ArmReadAuxCr\r
112 mrc p15, 0, r0, c1, c0, 1\r
3402aac7 113 bx lr\r
bd6b9799 114\r
115ArmSetTTBR0\r
116 mcr p15,0,r0,c2,c0,0\r
117 isb\r
118 bx lr\r
119\r
120ArmGetTTBR0BaseAddress\r
121 mrc p15,0,r0,c2,c0,0\r
122 LoadConstantToReg(0xFFFFC000, r1)\r
123 and r0, r0, r1\r
124 isb\r
125 bx lr\r
126\r
127//\r
128//VOID\r
129//ArmUpdateTranslationTableEntry (\r
130// IN VOID *TranslationTableEntry // R0\r
131// IN VOID *MVA // R1\r
132// );\r
133ArmUpdateTranslationTableEntry\r
134 mcr p15,0,R0,c7,c14,1 // DCCIMVAC Clean data cache by MVA\r
135 dsb\r
136 mcr p15,0,R1,c8,c7,1 // TLBIMVA TLB Invalidate MVA\r
137 mcr p15,0,R9,c7,c5,6 // BPIALL Invalidate Branch predictor array. R9 == NoOp\r
138 dsb\r
139 isb\r
140 bx lr\r
141\r
142ArmInvalidateTlb\r
143 mov r0,#0\r
144 mcr p15,0,r0,c8,c7,0\r
145 mcr p15,0,R9,c7,c5,6 // BPIALL Invalidate Branch predictor array. R9 == NoOp\r
146 dsb\r
147 isb\r
148 bx lr\r
149\r
836c3500 150ArmReadScr\r
151 mrc p15, 0, r0, c1, c1, 0\r
152 bx lr\r
153\r
bd6b9799 154ArmWriteScr\r
155 mcr p15, 0, r0, c1, c1, 0\r
156 bx lr\r
157\r
5ea2c2d3 158ArmReadHVBar\r
159 mrc p15, 4, r0, c12, c0, 0\r
160 bx lr\r
161\r
162ArmWriteHVBar\r
163 mcr p15, 4, r0, c12, c0, 0\r
164 bx lr\r
165\r
836c3500 166ArmReadMVBar\r
167 mrc p15, 0, r0, c12, c0, 1\r
168 bx lr\r
169\r
170ArmWriteMVBar\r
bd6b9799 171 mcr p15, 0, r0, c12, c0, 1\r
172 bx lr\r
3402aac7 173\r
b1d41be7 174ArmCallWFE\r
175 wfe\r
27995cd5 176 bx lr\r
b1d41be7 177\r
178ArmCallSEV\r
179 sev\r
27995cd5 180 bx lr\r
b1d41be7 181\r
836c3500 182ArmReadSctlr\r
27995cd5 183 mrc p15, 0, r0, c1, c0, 0 // Read SCTLR into R0 (Read control register configuration data)\r
91c38d4e 184 bx lr\r
52d44f77
OM
185\r
186\r
187ArmReadCpuActlr\r
188 mrc p15, 0, r0, c1, c0, 1\r
189 bx lr\r
190\r
191ArmWriteCpuActlr\r
192 mcr p15, 0, r0, c1, c0, 1\r
193 dsb\r
194 isb\r
195 bx lr\r
836c3500 196\r
bd6b9799 197 END\r