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