]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPkg/Include/Library/ArmLib.h
ArmPlatformPkg: Moved 'ArmTrustZoneLib' from ArmPkg/Library to ArmPlatformPkg/Drivers
[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
bd6b9799 18#ifdef ARM_CPU_ARMv6
19#include <Chipset/ARM1176JZ-S.h>
20#else
21#include <Chipset/ArmV7.h>
22#endif
23
2ef2b01e
A
24typedef enum {
25 ARM_CACHE_TYPE_WRITE_BACK,
26 ARM_CACHE_TYPE_UNKNOWN
27} ARM_CACHE_TYPE;
28
29typedef enum {
30 ARM_CACHE_ARCHITECTURE_UNIFIED,
31 ARM_CACHE_ARCHITECTURE_SEPARATE,
32 ARM_CACHE_ARCHITECTURE_UNKNOWN
33} ARM_CACHE_ARCHITECTURE;
34
35typedef struct {
36 ARM_CACHE_TYPE Type;
37 ARM_CACHE_ARCHITECTURE Architecture;
38 BOOLEAN DataCachePresent;
39 UINTN DataCacheSize;
40 UINTN DataCacheAssociativity;
41 UINTN DataCacheLineLength;
42 BOOLEAN InstructionCachePresent;
43 UINTN InstructionCacheSize;
44 UINTN InstructionCacheAssociativity;
45 UINTN InstructionCacheLineLength;
46} ARM_CACHE_INFO;
47
48typedef enum {
1e6a5cfc 49 ARM_MEMORY_REGION_ATTRIBUTE_UNCACHED_UNBUFFERED = 0,
1bfda055 50 ARM_MEMORY_REGION_ATTRIBUTE_SECURE_UNCACHED_UNBUFFERED,
1e6a5cfc 51 ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK,
1bfda055 52 ARM_MEMORY_REGION_ATTRIBUTE_SECURE_WRITE_BACK,
1e6a5cfc 53 ARM_MEMORY_REGION_ATTRIBUTE_WRITE_THROUGH,
1bfda055 54 ARM_MEMORY_REGION_ATTRIBUTE_SECURE_WRITE_THROUGH,
1e6a5cfc 55 ARM_MEMORY_REGION_ATTRIBUTE_DEVICE,
1bfda055 56 ARM_MEMORY_REGION_ATTRIBUTE_SECURE_DEVICE
2ef2b01e
A
57} ARM_MEMORY_REGION_ATTRIBUTES;
58
1e6a5cfc 59#define IS_ARM_MEMORY_REGION_ATTRIBUTES_SECURE(attr) ((UINT32)(attr) & 1)
60
2ef2b01e
A
61typedef struct {
62 UINT32 PhysicalBase;
63 UINT32 VirtualBase;
64 UINT32 Length;
65 ARM_MEMORY_REGION_ATTRIBUTES Attributes;
66} ARM_MEMORY_REGION_DESCRIPTOR;
67
68typedef VOID (*CACHE_OPERATION)(VOID);
69typedef VOID (*LINE_OPERATION)(UINTN);
70
71typedef enum {
72 ARM_PROCESSOR_MODE_USER = 0x10,
73 ARM_PROCESSOR_MODE_FIQ = 0x11,
74 ARM_PROCESSOR_MODE_IRQ = 0x12,
75 ARM_PROCESSOR_MODE_SUPERVISOR = 0x13,
76 ARM_PROCESSOR_MODE_ABORT = 0x17,
77 ARM_PROCESSOR_MODE_UNDEFINED = 0x1B,
78 ARM_PROCESSOR_MODE_SYSTEM = 0x1F,
79 ARM_PROCESSOR_MODE_MASK = 0x1F
80} ARM_PROCESSOR_MODE;
81
0787bc61 82#define IS_PRIMARY_CORE(MpId) (((MpId) & PcdGet32(PcdArmPrimaryCoreMask)) == PcdGet32(PcdArmPrimaryCore))
83#define GET_CORE_ID(MpId) ((MpId) & 0x3)
a8151a70 84#define GET_CLUSTER_ID(MpId) (((MpId) >> 8) & 0x3C)
0787bc61 85// Get the position of the core for the Stack Offset (4 Core per Cluster)
86// Position = (ClusterId * 4) + CoreId
87#define GET_CORE_POS(MpId) ((((MpId) >> 6) & 0x3C) + ((MpId) & 0x3))
88#define PRIMARY_CORE_ID (PcdGet32(PcdArmPrimaryCore) & 0x3)
89
2ef2b01e
A
90ARM_CACHE_TYPE
91EFIAPI
92ArmCacheType (
93 VOID
94 );
95
96ARM_CACHE_ARCHITECTURE
97EFIAPI
98ArmCacheArchitecture (
99 VOID
100 );
101
102VOID
103EFIAPI
104ArmCacheInformation (
105 OUT ARM_CACHE_INFO *CacheInfo
106 );
107
108BOOLEAN
109EFIAPI
110ArmDataCachePresent (
111 VOID
112 );
113
114UINTN
115EFIAPI
116ArmDataCacheSize (
117 VOID
118 );
119
120UINTN
121EFIAPI
122ArmDataCacheAssociativity (
123 VOID
124 );
125
126UINTN
127EFIAPI
128ArmDataCacheLineLength (
129 VOID
130 );
131
132BOOLEAN
133EFIAPI
134ArmInstructionCachePresent (
135 VOID
136 );
137
138UINTN
139EFIAPI
140ArmInstructionCacheSize (
141 VOID
142 );
143
144UINTN
145EFIAPI
146ArmInstructionCacheAssociativity (
147 VOID
148 );
149
150UINTN
151EFIAPI
152ArmInstructionCacheLineLength (
153 VOID
154 );
155
156UINT32
157EFIAPI
158Cp15IdCode (
159 VOID
160 );
161
162UINT32
163EFIAPI
164Cp15CacheInfo (
165 VOID
166 );
167
1bfda055 168BOOLEAN
169EFIAPI
da9675a2 170ArmIsMpCore (
1bfda055 171 VOID
172 );
173
2ef2b01e
A
174VOID
175EFIAPI
176ArmInvalidateDataCache (
177 VOID
178 );
179
f45ce9d9 180
2ef2b01e
A
181VOID
182EFIAPI
183ArmCleanInvalidateDataCache (
184 VOID
185 );
186
187VOID
188EFIAPI
189ArmCleanDataCache (
190 VOID
191 );
192
d60f6af4 193VOID
194EFIAPI
195ArmCleanDataCacheToPoU (
196 VOID
197 );
198
2ef2b01e
A
199VOID
200EFIAPI
201ArmInvalidateInstructionCache (
202 VOID
203 );
204
205VOID
206EFIAPI
207ArmInvalidateDataCacheEntryByMVA (
208 IN UINTN Address
209 );
210
211VOID
212EFIAPI
213ArmCleanDataCacheEntryByMVA (
214 IN UINTN Address
215 );
216
217VOID
218EFIAPI
219ArmCleanInvalidateDataCacheEntryByMVA (
220 IN UINTN Address
221 );
222
223VOID
224EFIAPI
225ArmEnableDataCache (
226 VOID
227 );
228
229VOID
230EFIAPI
231ArmDisableDataCache (
232 VOID
233 );
234
235VOID
236EFIAPI
237ArmEnableInstructionCache (
238 VOID
239 );
240
241VOID
242EFIAPI
243ArmDisableInstructionCache (
244 VOID
245 );
246
247VOID
248EFIAPI
249ArmEnableMmu (
250 VOID
251 );
252
253VOID
254EFIAPI
255ArmDisableMmu (
256 VOID
257 );
258
1bfda055 259VOID
260EFIAPI
261ArmDisableCachesAndMmu (
262 VOID
263 );
264
bd6b9799 265VOID
266EFIAPI
267ArmInvalidateInstructionAndDataTlb (
268 VOID
269 );
270
2ef2b01e
A
271VOID
272EFIAPI
273ArmEnableInterrupts (
274 VOID
275 );
276
277UINTN
278EFIAPI
279ArmDisableInterrupts (
280 VOID
281 );
282
283BOOLEAN
284EFIAPI
285ArmGetInterruptState (
286 VOID
287 );
1bfda055 288
0416278c 289VOID
290EFIAPI
291ArmEnableFiq (
292 VOID
293 );
294
295UINTN
296EFIAPI
297ArmDisableFiq (
298 VOID
299 );
300
301BOOLEAN
302EFIAPI
303ArmGetFiqState (
304 VOID
305 );
2ef2b01e
A
306
307VOID
308EFIAPI
309ArmInvalidateTlb (
310 VOID
311 );
312
6f72e28d 313VOID
314EFIAPI
315ArmUpdateTranslationTableEntry (
bb02cb80 316 IN VOID *TranslationTableEntry,
317 IN VOID *Mva
6f72e28d 318 );
319
2ef2b01e
A
320VOID
321EFIAPI
322ArmSetDomainAccessControl (
323 IN UINT32 Domain
324 );
325
326VOID
327EFIAPI
1bfda055 328ArmSetTTBR0 (
2ef2b01e
A
329 IN VOID *TranslationTableBase
330 );
331
f45ce9d9
A
332VOID *
333EFIAPI
1bfda055 334ArmGetTTBR0BaseAddress (
f659880b 335 VOID
f45ce9d9
A
336 );
337
2ef2b01e
A
338VOID
339EFIAPI
340ArmConfigureMmu (
341 IN ARM_MEMORY_REGION_DESCRIPTOR *MemoryTable,
342 OUT VOID **TranslationTableBase OPTIONAL,
343 OUT UINTN *TranslationTableSize OPTIONAL
344 );
345
f45ce9d9
A
346BOOLEAN
347EFIAPI
348ArmMmuEnabled (
349 VOID
350 );
351
2ef2b01e
A
352VOID
353EFIAPI
354ArmSwitchProcessorMode (
355 IN ARM_PROCESSOR_MODE Mode
356 );
357
358ARM_PROCESSOR_MODE
359EFIAPI
360ArmProcessorMode (
361 VOID
362 );
363
364VOID
365EFIAPI
366ArmEnableBranchPrediction (
367 VOID
368 );
369
370VOID
371EFIAPI
372ArmDisableBranchPrediction (
373 VOID
374 );
f0fef790 375
376VOID
377EFIAPI
378ArmSetLowVectors (
379 VOID
380 );
381
382VOID
383EFIAPI
384ArmSetHighVectors (
385 VOID
386 );
387
026c3d34 388VOID
389EFIAPI
390ArmDataMemoryBarrier (
391 VOID
392 );
393
394VOID
395EFIAPI
396ArmDataSyncronizationBarrier (
397 VOID
398 );
399
400VOID
401EFIAPI
402ArmInstructionSynchronizationBarrier (
403 VOID
404 );
bd6b9799 405
406VOID
407EFIAPI
408ArmWriteVBar (
409 IN UINT32 VectorBase
410 );
411
412UINT32
413EFIAPI
414ArmReadVBar (
415 VOID
416 );
417
418VOID
419EFIAPI
420ArmWriteAuxCr (
421 IN UINT32 Bit
422 );
423
424UINT32
425EFIAPI
426ArmReadAuxCr (
427 VOID
428 );
429
430VOID
431EFIAPI
432ArmSetAuxCrBit (
433 IN UINT32 Bits
434 );
435
436VOID
437EFIAPI
438ArmCallWFI (
439 VOID
440 );
441
442UINTN
443EFIAPI
444ArmReadMpidr (
445 VOID
446 );
447
448VOID
449EFIAPI
450ArmWriteCPACR (
451 IN UINT32 Access
452 );
453
454VOID
455EFIAPI
456ArmEnableVFP (
457 VOID
458 );
459
460VOID
461EFIAPI
462ArmWriteNsacr (
463 IN UINT32 SetWayFormat
464 );
465
466VOID
467EFIAPI
468ArmWriteScr (
469 IN UINT32 SetWayFormat
470 );
471
472VOID
473EFIAPI
474ArmWriteVMBar (
475 IN UINT32 VectorMonitorBase
476 );
bb02cb80 477
2ef2b01e 478#endif // __ARM_LIB__