]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPkg/Include/Library/ArmLib.h
ArmPkg: Introduce ArmSetLowVectors/ArmSetHighVectors functions
[mirror_edk2.git] / ArmPkg / Include / Library / ArmLib.h
CommitLineData
2ef2b01e
A
1/** @file
2
d6ebcab7 3 Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
2ef2b01e 4
d6ebcab7 5 This program and the accompanying materials
2ef2b01e
A
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
9
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.
12
13**/
14
15#ifndef __ARM_LIB__
16#define __ARM_LIB__
17
18typedef enum {
19 ARM_CACHE_TYPE_WRITE_BACK,
20 ARM_CACHE_TYPE_UNKNOWN
21} ARM_CACHE_TYPE;
22
23typedef enum {
24 ARM_CACHE_ARCHITECTURE_UNIFIED,
25 ARM_CACHE_ARCHITECTURE_SEPARATE,
26 ARM_CACHE_ARCHITECTURE_UNKNOWN
27} ARM_CACHE_ARCHITECTURE;
28
29typedef struct {
30 ARM_CACHE_TYPE Type;
31 ARM_CACHE_ARCHITECTURE Architecture;
32 BOOLEAN DataCachePresent;
33 UINTN DataCacheSize;
34 UINTN DataCacheAssociativity;
35 UINTN DataCacheLineLength;
36 BOOLEAN InstructionCachePresent;
37 UINTN InstructionCacheSize;
38 UINTN InstructionCacheAssociativity;
39 UINTN InstructionCacheLineLength;
40} ARM_CACHE_INFO;
41
42typedef enum {
1e6a5cfc 43 ARM_MEMORY_REGION_ATTRIBUTE_UNCACHED_UNBUFFERED = 0,
1bfda055 44 ARM_MEMORY_REGION_ATTRIBUTE_SECURE_UNCACHED_UNBUFFERED,
1e6a5cfc 45 ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK,
1bfda055 46 ARM_MEMORY_REGION_ATTRIBUTE_SECURE_WRITE_BACK,
1e6a5cfc 47 ARM_MEMORY_REGION_ATTRIBUTE_WRITE_THROUGH,
1bfda055 48 ARM_MEMORY_REGION_ATTRIBUTE_SECURE_WRITE_THROUGH,
1e6a5cfc 49 ARM_MEMORY_REGION_ATTRIBUTE_DEVICE,
1bfda055 50 ARM_MEMORY_REGION_ATTRIBUTE_SECURE_DEVICE
2ef2b01e
A
51} ARM_MEMORY_REGION_ATTRIBUTES;
52
1e6a5cfc 53#define IS_ARM_MEMORY_REGION_ATTRIBUTES_SECURE(attr) ((UINT32)(attr) & 1)
54
2ef2b01e
A
55typedef struct {
56 UINT32 PhysicalBase;
57 UINT32 VirtualBase;
58 UINT32 Length;
59 ARM_MEMORY_REGION_ATTRIBUTES Attributes;
60} ARM_MEMORY_REGION_DESCRIPTOR;
61
62typedef VOID (*CACHE_OPERATION)(VOID);
63typedef VOID (*LINE_OPERATION)(UINTN);
64
65typedef enum {
66 ARM_PROCESSOR_MODE_USER = 0x10,
67 ARM_PROCESSOR_MODE_FIQ = 0x11,
68 ARM_PROCESSOR_MODE_IRQ = 0x12,
69 ARM_PROCESSOR_MODE_SUPERVISOR = 0x13,
70 ARM_PROCESSOR_MODE_ABORT = 0x17,
71 ARM_PROCESSOR_MODE_UNDEFINED = 0x1B,
72 ARM_PROCESSOR_MODE_SYSTEM = 0x1F,
73 ARM_PROCESSOR_MODE_MASK = 0x1F
74} ARM_PROCESSOR_MODE;
75
76ARM_CACHE_TYPE
77EFIAPI
78ArmCacheType (
79 VOID
80 );
81
82ARM_CACHE_ARCHITECTURE
83EFIAPI
84ArmCacheArchitecture (
85 VOID
86 );
87
88VOID
89EFIAPI
90ArmCacheInformation (
91 OUT ARM_CACHE_INFO *CacheInfo
92 );
93
94BOOLEAN
95EFIAPI
96ArmDataCachePresent (
97 VOID
98 );
99
100UINTN
101EFIAPI
102ArmDataCacheSize (
103 VOID
104 );
105
106UINTN
107EFIAPI
108ArmDataCacheAssociativity (
109 VOID
110 );
111
112UINTN
113EFIAPI
114ArmDataCacheLineLength (
115 VOID
116 );
117
118BOOLEAN
119EFIAPI
120ArmInstructionCachePresent (
121 VOID
122 );
123
124UINTN
125EFIAPI
126ArmInstructionCacheSize (
127 VOID
128 );
129
130UINTN
131EFIAPI
132ArmInstructionCacheAssociativity (
133 VOID
134 );
135
136UINTN
137EFIAPI
138ArmInstructionCacheLineLength (
139 VOID
140 );
141
142UINT32
143EFIAPI
144Cp15IdCode (
145 VOID
146 );
147
148UINT32
149EFIAPI
150Cp15CacheInfo (
151 VOID
152 );
153
1bfda055 154BOOLEAN
155EFIAPI
156ArmIsMPCore (
157 VOID
158 );
159
2ef2b01e
A
160VOID
161EFIAPI
162ArmInvalidateDataCache (
163 VOID
164 );
165
f45ce9d9 166
2ef2b01e
A
167VOID
168EFIAPI
169ArmCleanInvalidateDataCache (
170 VOID
171 );
172
173VOID
174EFIAPI
175ArmCleanDataCache (
176 VOID
177 );
178
179VOID
180EFIAPI
181ArmInvalidateInstructionCache (
182 VOID
183 );
184
185VOID
186EFIAPI
187ArmInvalidateDataCacheEntryByMVA (
188 IN UINTN Address
189 );
190
191VOID
192EFIAPI
193ArmCleanDataCacheEntryByMVA (
194 IN UINTN Address
195 );
196
197VOID
198EFIAPI
199ArmCleanInvalidateDataCacheEntryByMVA (
200 IN UINTN Address
201 );
202
203VOID
204EFIAPI
205ArmEnableDataCache (
206 VOID
207 );
208
209VOID
210EFIAPI
211ArmDisableDataCache (
212 VOID
213 );
214
215VOID
216EFIAPI
217ArmEnableInstructionCache (
218 VOID
219 );
220
221VOID
222EFIAPI
223ArmDisableInstructionCache (
224 VOID
225 );
226
227VOID
228EFIAPI
229ArmEnableMmu (
230 VOID
231 );
232
233VOID
234EFIAPI
235ArmDisableMmu (
236 VOID
237 );
238
1bfda055 239VOID
240EFIAPI
241ArmDisableCachesAndMmu (
242 VOID
243 );
244
2ef2b01e
A
245VOID
246EFIAPI
247ArmEnableInterrupts (
248 VOID
249 );
250
251UINTN
252EFIAPI
253ArmDisableInterrupts (
254 VOID
255 );
256
257BOOLEAN
258EFIAPI
259ArmGetInterruptState (
260 VOID
261 );
1bfda055 262
0416278c 263VOID
264EFIAPI
265ArmEnableFiq (
266 VOID
267 );
268
269UINTN
270EFIAPI
271ArmDisableFiq (
272 VOID
273 );
274
275BOOLEAN
276EFIAPI
277ArmGetFiqState (
278 VOID
279 );
2ef2b01e
A
280
281VOID
282EFIAPI
283ArmInvalidateTlb (
284 VOID
285 );
286
6f72e28d 287VOID
288EFIAPI
289ArmUpdateTranslationTableEntry (
bb02cb80 290 IN VOID *TranslationTableEntry,
291 IN VOID *Mva
6f72e28d 292 );
293
2ef2b01e
A
294VOID
295EFIAPI
296ArmSetDomainAccessControl (
297 IN UINT32 Domain
298 );
299
300VOID
301EFIAPI
1bfda055 302ArmSetTTBR0 (
2ef2b01e
A
303 IN VOID *TranslationTableBase
304 );
305
f45ce9d9
A
306VOID *
307EFIAPI
1bfda055 308ArmGetTTBR0BaseAddress (
f659880b 309 VOID
f45ce9d9
A
310 );
311
2ef2b01e
A
312VOID
313EFIAPI
314ArmConfigureMmu (
315 IN ARM_MEMORY_REGION_DESCRIPTOR *MemoryTable,
316 OUT VOID **TranslationTableBase OPTIONAL,
317 OUT UINTN *TranslationTableSize OPTIONAL
318 );
319
f45ce9d9
A
320BOOLEAN
321EFIAPI
322ArmMmuEnabled (
323 VOID
324 );
325
2ef2b01e
A
326VOID
327EFIAPI
328ArmSwitchProcessorMode (
329 IN ARM_PROCESSOR_MODE Mode
330 );
331
332ARM_PROCESSOR_MODE
333EFIAPI
334ArmProcessorMode (
335 VOID
336 );
337
338VOID
339EFIAPI
340ArmEnableBranchPrediction (
341 VOID
342 );
343
344VOID
345EFIAPI
346ArmDisableBranchPrediction (
347 VOID
348 );
f0fef790 349
350VOID
351EFIAPI
352ArmSetLowVectors (
353 VOID
354 );
355
356VOID
357EFIAPI
358ArmSetHighVectors (
359 VOID
360 );
361
026c3d34 362VOID
363EFIAPI
364ArmDataMemoryBarrier (
365 VOID
366 );
367
368VOID
369EFIAPI
370ArmDataSyncronizationBarrier (
371 VOID
372 );
373
374VOID
375EFIAPI
376ArmInstructionSynchronizationBarrier (
377 VOID
378 );
379
bb02cb80 380
2ef2b01e 381#endif // __ARM_LIB__