]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPkg/Include/Library/ArmLib.h
ArmPlatformPkg: Introduce Primary core macros
[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
0787bc61 76#define IS_PRIMARY_CORE(MpId) (((MpId) & PcdGet32(PcdArmPrimaryCoreMask)) == PcdGet32(PcdArmPrimaryCore))
77#define GET_CORE_ID(MpId) ((MpId) & 0x3)
78#define GET_CLUSTER_ID(MpId) (((MpId) >> 6) & 0x3C)
79// Get the position of the core for the Stack Offset (4 Core per Cluster)
80// Position = (ClusterId * 4) + CoreId
81#define GET_CORE_POS(MpId) ((((MpId) >> 6) & 0x3C) + ((MpId) & 0x3))
82#define PRIMARY_CORE_ID (PcdGet32(PcdArmPrimaryCore) & 0x3)
83
2ef2b01e
A
84ARM_CACHE_TYPE
85EFIAPI
86ArmCacheType (
87 VOID
88 );
89
90ARM_CACHE_ARCHITECTURE
91EFIAPI
92ArmCacheArchitecture (
93 VOID
94 );
95
96VOID
97EFIAPI
98ArmCacheInformation (
99 OUT ARM_CACHE_INFO *CacheInfo
100 );
101
102BOOLEAN
103EFIAPI
104ArmDataCachePresent (
105 VOID
106 );
107
108UINTN
109EFIAPI
110ArmDataCacheSize (
111 VOID
112 );
113
114UINTN
115EFIAPI
116ArmDataCacheAssociativity (
117 VOID
118 );
119
120UINTN
121EFIAPI
122ArmDataCacheLineLength (
123 VOID
124 );
125
126BOOLEAN
127EFIAPI
128ArmInstructionCachePresent (
129 VOID
130 );
131
132UINTN
133EFIAPI
134ArmInstructionCacheSize (
135 VOID
136 );
137
138UINTN
139EFIAPI
140ArmInstructionCacheAssociativity (
141 VOID
142 );
143
144UINTN
145EFIAPI
146ArmInstructionCacheLineLength (
147 VOID
148 );
149
150UINT32
151EFIAPI
152Cp15IdCode (
153 VOID
154 );
155
156UINT32
157EFIAPI
158Cp15CacheInfo (
159 VOID
160 );
161
1bfda055 162BOOLEAN
163EFIAPI
164ArmIsMPCore (
165 VOID
166 );
167
2ef2b01e
A
168VOID
169EFIAPI
170ArmInvalidateDataCache (
171 VOID
172 );
173
f45ce9d9 174
2ef2b01e
A
175VOID
176EFIAPI
177ArmCleanInvalidateDataCache (
178 VOID
179 );
180
181VOID
182EFIAPI
183ArmCleanDataCache (
184 VOID
185 );
186
187VOID
188EFIAPI
189ArmInvalidateInstructionCache (
190 VOID
191 );
192
193VOID
194EFIAPI
195ArmInvalidateDataCacheEntryByMVA (
196 IN UINTN Address
197 );
198
199VOID
200EFIAPI
201ArmCleanDataCacheEntryByMVA (
202 IN UINTN Address
203 );
204
205VOID
206EFIAPI
207ArmCleanInvalidateDataCacheEntryByMVA (
208 IN UINTN Address
209 );
210
211VOID
212EFIAPI
213ArmEnableDataCache (
214 VOID
215 );
216
217VOID
218EFIAPI
219ArmDisableDataCache (
220 VOID
221 );
222
223VOID
224EFIAPI
225ArmEnableInstructionCache (
226 VOID
227 );
228
229VOID
230EFIAPI
231ArmDisableInstructionCache (
232 VOID
233 );
234
235VOID
236EFIAPI
237ArmEnableMmu (
238 VOID
239 );
240
241VOID
242EFIAPI
243ArmDisableMmu (
244 VOID
245 );
246
1bfda055 247VOID
248EFIAPI
249ArmDisableCachesAndMmu (
250 VOID
251 );
252
2ef2b01e
A
253VOID
254EFIAPI
255ArmEnableInterrupts (
256 VOID
257 );
258
259UINTN
260EFIAPI
261ArmDisableInterrupts (
262 VOID
263 );
264
265BOOLEAN
266EFIAPI
267ArmGetInterruptState (
268 VOID
269 );
1bfda055 270
0416278c 271VOID
272EFIAPI
273ArmEnableFiq (
274 VOID
275 );
276
277UINTN
278EFIAPI
279ArmDisableFiq (
280 VOID
281 );
282
283BOOLEAN
284EFIAPI
285ArmGetFiqState (
286 VOID
287 );
2ef2b01e
A
288
289VOID
290EFIAPI
291ArmInvalidateTlb (
292 VOID
293 );
294
6f72e28d 295VOID
296EFIAPI
297ArmUpdateTranslationTableEntry (
bb02cb80 298 IN VOID *TranslationTableEntry,
299 IN VOID *Mva
6f72e28d 300 );
301
2ef2b01e
A
302VOID
303EFIAPI
304ArmSetDomainAccessControl (
305 IN UINT32 Domain
306 );
307
308VOID
309EFIAPI
1bfda055 310ArmSetTTBR0 (
2ef2b01e
A
311 IN VOID *TranslationTableBase
312 );
313
f45ce9d9
A
314VOID *
315EFIAPI
1bfda055 316ArmGetTTBR0BaseAddress (
f659880b 317 VOID
f45ce9d9
A
318 );
319
2ef2b01e
A
320VOID
321EFIAPI
322ArmConfigureMmu (
323 IN ARM_MEMORY_REGION_DESCRIPTOR *MemoryTable,
324 OUT VOID **TranslationTableBase OPTIONAL,
325 OUT UINTN *TranslationTableSize OPTIONAL
326 );
327
f45ce9d9
A
328BOOLEAN
329EFIAPI
330ArmMmuEnabled (
331 VOID
332 );
333
2ef2b01e
A
334VOID
335EFIAPI
336ArmSwitchProcessorMode (
337 IN ARM_PROCESSOR_MODE Mode
338 );
339
340ARM_PROCESSOR_MODE
341EFIAPI
342ArmProcessorMode (
343 VOID
344 );
345
346VOID
347EFIAPI
348ArmEnableBranchPrediction (
349 VOID
350 );
351
352VOID
353EFIAPI
354ArmDisableBranchPrediction (
355 VOID
356 );
f0fef790 357
358VOID
359EFIAPI
360ArmSetLowVectors (
361 VOID
362 );
363
364VOID
365EFIAPI
366ArmSetHighVectors (
367 VOID
368 );
369
026c3d34 370VOID
371EFIAPI
372ArmDataMemoryBarrier (
373 VOID
374 );
375
376VOID
377EFIAPI
378ArmDataSyncronizationBarrier (
379 VOID
380 );
381
382VOID
383EFIAPI
384ArmInstructionSynchronizationBarrier (
385 VOID
386 );
387
bb02cb80 388
2ef2b01e 389#endif // __ARM_LIB__