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