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