]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPkg/Include/Library/ArmLib.h
ArmPlatformPkg/ArmPlatformLib: Added support for ArmPlatformIsPrimaryCore()
[mirror_edk2.git] / ArmPkg / Include / Library / ArmLib.h
CommitLineData
1e57a462 1/** @file\r
2\r
3 Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
4 Copyright (c) 2011 - 2012, ARM Ltd. All rights reserved.<BR>\r
5\r
6 This program and the accompanying materials\r
7 are licensed and made available under the terms and conditions of the BSD License\r
8 which accompanies this distribution. The full text of the license may be found at\r
9 http://opensource.org/licenses/bsd-license.php\r
10\r
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13\r
14**/\r
15\r
16#ifndef __ARM_LIB__\r
17#define __ARM_LIB__\r
18\r
19#include <Uefi/UefiBaseType.h>\r
20\r
21#ifdef ARM_CPU_ARMv6\r
22#include <Chipset/ARM1176JZ-S.h>\r
23#else\r
24#include <Chipset/ArmV7.h>\r
25#endif\r
26\r
27typedef enum {\r
28 ARM_CACHE_TYPE_WRITE_BACK,\r
29 ARM_CACHE_TYPE_UNKNOWN\r
30} ARM_CACHE_TYPE;\r
31\r
32typedef enum {\r
33 ARM_CACHE_ARCHITECTURE_UNIFIED,\r
34 ARM_CACHE_ARCHITECTURE_SEPARATE,\r
35 ARM_CACHE_ARCHITECTURE_UNKNOWN\r
36} ARM_CACHE_ARCHITECTURE;\r
37\r
38typedef struct {\r
39 ARM_CACHE_TYPE Type;\r
40 ARM_CACHE_ARCHITECTURE Architecture;\r
41 BOOLEAN DataCachePresent;\r
42 UINTN DataCacheSize;\r
43 UINTN DataCacheAssociativity;\r
44 UINTN DataCacheLineLength;\r
45 BOOLEAN InstructionCachePresent;\r
46 UINTN InstructionCacheSize;\r
47 UINTN InstructionCacheAssociativity;\r
48 UINTN InstructionCacheLineLength;\r
49} ARM_CACHE_INFO;\r
50\r
51/**\r
52 * The UEFI firmware must not use the ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_* attributes.\r
53 *\r
54 * The Non Secure memory attribute (ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_*) should only\r
55 * be used in Secure World to distinguished Secure to Non-Secure memory.\r
56 */\r
57typedef enum {\r
58 ARM_MEMORY_REGION_ATTRIBUTE_UNCACHED_UNBUFFERED = 0,\r
59 ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_UNCACHED_UNBUFFERED,\r
60 ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK,\r
61 ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_WRITE_BACK,\r
62 ARM_MEMORY_REGION_ATTRIBUTE_WRITE_THROUGH,\r
63 ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_WRITE_THROUGH,\r
64 ARM_MEMORY_REGION_ATTRIBUTE_DEVICE,\r
65 ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE\r
66} ARM_MEMORY_REGION_ATTRIBUTES;\r
67\r
68#define IS_ARM_MEMORY_REGION_ATTRIBUTES_SECURE(attr) ((UINT32)(attr) & 1)\r
69\r
70typedef struct {\r
71 EFI_PHYSICAL_ADDRESS PhysicalBase;\r
72 EFI_VIRTUAL_ADDRESS VirtualBase;\r
73 UINTN Length;\r
74 ARM_MEMORY_REGION_ATTRIBUTES Attributes;\r
75} ARM_MEMORY_REGION_DESCRIPTOR;\r
76\r
77typedef VOID (*CACHE_OPERATION)(VOID);\r
78typedef VOID (*LINE_OPERATION)(UINTN);\r
79\r
80//\r
81// ARM Processor Mode\r
82//\r
83typedef enum {\r
84 ARM_PROCESSOR_MODE_USER = 0x10,\r
85 ARM_PROCESSOR_MODE_FIQ = 0x11,\r
86 ARM_PROCESSOR_MODE_IRQ = 0x12,\r
87 ARM_PROCESSOR_MODE_SUPERVISOR = 0x13,\r
88 ARM_PROCESSOR_MODE_ABORT = 0x17,\r
89 ARM_PROCESSOR_MODE_HYP = 0x1A,\r
90 ARM_PROCESSOR_MODE_UNDEFINED = 0x1B,\r
91 ARM_PROCESSOR_MODE_SYSTEM = 0x1F,\r
92 ARM_PROCESSOR_MODE_MASK = 0x1F\r
93} ARM_PROCESSOR_MODE;\r
94\r
95//\r
96// ARM Cpu IDs\r
97//\r
98#define ARM_CPU_IMPLEMENTER_MASK (0xFFU << 24)\r
99#define ARM_CPU_IMPLEMENTER_ARMLTD (0x41U << 24)\r
100#define ARM_CPU_IMPLEMENTER_DEC (0x44U << 24)\r
101#define ARM_CPU_IMPLEMENTER_MOT (0x4DU << 24)\r
102#define ARM_CPU_IMPLEMENTER_QUALCOMM (0x51U << 24)\r
103#define ARM_CPU_IMPLEMENTER_MARVELL (0x56U << 24)\r
104\r
105#define ARM_CPU_PRIMARY_PART_MASK (0xFFF << 4)\r
106#define ARM_CPU_PRIMARY_PART_CORTEXA5 (0xC05 << 4)\r
107#define ARM_CPU_PRIMARY_PART_CORTEXA7 (0xC07 << 4)\r
108#define ARM_CPU_PRIMARY_PART_CORTEXA8 (0xC08 << 4)\r
109#define ARM_CPU_PRIMARY_PART_CORTEXA9 (0xC09 << 4)\r
110#define ARM_CPU_PRIMARY_PART_CORTEXA15 (0xC0F << 4)\r
111\r
112//\r
113// ARM MP Core IDs\r
114//\r
1e57a462 115#define ARM_CORE_MASK 0xFF\r
116#define ARM_CLUSTER_MASK (0xFF << 8)\r
117#define GET_CORE_ID(MpId) ((MpId) & ARM_CORE_MASK)\r
118#define GET_CLUSTER_ID(MpId) (((MpId) & ARM_CLUSTER_MASK) >> 8)\r
119// Get the position of the core for the Stack Offset (4 Core per Cluster)\r
120// Position = (ClusterId * 4) + CoreId\r
121#define GET_CORE_POS(MpId) ((((MpId) & ARM_CLUSTER_MASK) >> 6) + ((MpId) & ARM_CORE_MASK))\r
122#define PRIMARY_CORE_ID (PcdGet32(PcdArmPrimaryCore) & ARM_CORE_MASK)\r
123\r
124ARM_CACHE_TYPE\r
125EFIAPI\r
126ArmCacheType (\r
127 VOID\r
128 );\r
129\r
130ARM_CACHE_ARCHITECTURE\r
131EFIAPI\r
132ArmCacheArchitecture (\r
133 VOID\r
134 );\r
135\r
136VOID\r
137EFIAPI\r
138ArmCacheInformation (\r
139 OUT ARM_CACHE_INFO *CacheInfo\r
140 );\r
141\r
142BOOLEAN\r
143EFIAPI\r
144ArmDataCachePresent (\r
145 VOID\r
146 );\r
147 \r
148UINTN\r
149EFIAPI\r
150ArmDataCacheSize (\r
151 VOID\r
152 );\r
153 \r
154UINTN\r
155EFIAPI\r
156ArmDataCacheAssociativity (\r
157 VOID\r
158 );\r
159 \r
160UINTN\r
161EFIAPI\r
162ArmDataCacheLineLength (\r
163 VOID\r
164 );\r
165 \r
166BOOLEAN\r
167EFIAPI\r
168ArmInstructionCachePresent (\r
169 VOID\r
170 );\r
171 \r
172UINTN\r
173EFIAPI\r
174ArmInstructionCacheSize (\r
175 VOID\r
176 );\r
177 \r
178UINTN\r
179EFIAPI\r
180ArmInstructionCacheAssociativity (\r
181 VOID\r
182 );\r
183 \r
184UINTN\r
185EFIAPI\r
186ArmInstructionCacheLineLength (\r
187 VOID\r
188 );\r
189 \r
190UINT32\r
191EFIAPI\r
192Cp15IdCode (\r
193 VOID\r
194 );\r
195 \r
196UINT32\r
197EFIAPI\r
198Cp15CacheInfo (\r
199 VOID\r
200 );\r
201\r
202BOOLEAN\r
203EFIAPI\r
204ArmIsMpCore (\r
205 VOID\r
206 );\r
207\r
208VOID\r
209EFIAPI\r
210ArmInvalidateDataCache (\r
211 VOID\r
212 );\r
213\r
214\r
215VOID\r
216EFIAPI\r
217ArmCleanInvalidateDataCache (\r
218 VOID\r
219 );\r
220\r
221VOID\r
222EFIAPI\r
223ArmCleanDataCache (\r
224 VOID\r
225 );\r
226\r
227VOID\r
228EFIAPI\r
229ArmCleanDataCacheToPoU (\r
230 VOID\r
231 );\r
232\r
233VOID\r
234EFIAPI\r
235ArmInvalidateInstructionCache (\r
236 VOID\r
237 );\r
238\r
239VOID\r
240EFIAPI\r
241ArmInvalidateDataCacheEntryByMVA (\r
242 IN UINTN Address\r
243 );\r
244\r
245VOID\r
246EFIAPI\r
247ArmCleanDataCacheEntryByMVA (\r
248 IN UINTN Address\r
249 );\r
250\r
251VOID\r
252EFIAPI\r
253ArmCleanInvalidateDataCacheEntryByMVA (\r
254 IN UINTN Address\r
255 );\r
256\r
257VOID\r
258EFIAPI\r
259ArmEnableDataCache (\r
260 VOID\r
261 );\r
262\r
263VOID\r
264EFIAPI\r
265ArmDisableDataCache (\r
266 VOID\r
267 );\r
268\r
269VOID\r
270EFIAPI\r
271ArmEnableInstructionCache (\r
272 VOID\r
273 );\r
274\r
275VOID\r
276EFIAPI\r
277ArmDisableInstructionCache (\r
278 VOID\r
279 );\r
280 \r
281VOID\r
282EFIAPI\r
283ArmEnableMmu (\r
284 VOID\r
285 );\r
286\r
287VOID\r
288EFIAPI\r
289ArmDisableMmu (\r
290 VOID\r
291 );\r
292\r
293VOID\r
294EFIAPI\r
295ArmDisableCachesAndMmu (\r
296 VOID\r
297 );\r
298\r
299VOID\r
300EFIAPI\r
301ArmInvalidateInstructionAndDataTlb (\r
302 VOID\r
303 );\r
304\r
305VOID\r
306EFIAPI\r
307ArmEnableInterrupts (\r
308 VOID\r
309 );\r
310\r
311UINTN\r
312EFIAPI\r
313ArmDisableInterrupts (\r
314 VOID\r
315 );\r
47585ed5 316\r
1e57a462 317BOOLEAN\r
318EFIAPI\r
319ArmGetInterruptState (\r
320 VOID\r
321 );\r
322\r
47585ed5 323UINTN\r
324EFIAPI\r
325ArmDisableIrq (\r
326 VOID\r
327 );\r
328\r
329VOID\r
330EFIAPI\r
331ArmEnableIrq (\r
332 VOID\r
333 );\r
334\r
1e57a462 335VOID\r
336EFIAPI\r
337ArmEnableFiq (\r
338 VOID\r
339 );\r
340\r
341UINTN\r
342EFIAPI\r
343ArmDisableFiq (\r
344 VOID\r
345 );\r
346 \r
347BOOLEAN\r
348EFIAPI\r
349ArmGetFiqState (\r
350 VOID\r
351 );\r
352\r
353VOID\r
354EFIAPI\r
355ArmInvalidateTlb (\r
356 VOID\r
357 );\r
358 \r
359VOID\r
360EFIAPI\r
361ArmUpdateTranslationTableEntry (\r
362 IN VOID *TranslationTableEntry,\r
363 IN VOID *Mva\r
364 );\r
365 \r
366VOID\r
367EFIAPI\r
368ArmSetDomainAccessControl (\r
369 IN UINT32 Domain\r
370 );\r
371\r
372VOID\r
373EFIAPI\r
374ArmSetTTBR0 (\r
375 IN VOID *TranslationTableBase\r
376 );\r
377\r
378VOID *\r
379EFIAPI\r
380ArmGetTTBR0BaseAddress (\r
381 VOID\r
382 );\r
383\r
384VOID\r
385EFIAPI\r
386ArmConfigureMmu (\r
387 IN ARM_MEMORY_REGION_DESCRIPTOR *MemoryTable,\r
388 OUT VOID **TranslationTableBase OPTIONAL,\r
389 OUT UINTN *TranslationTableSize OPTIONAL\r
390 );\r
391 \r
392BOOLEAN\r
393EFIAPI\r
394ArmMmuEnabled (\r
395 VOID\r
396 );\r
397 \r
398VOID\r
399EFIAPI\r
400ArmSwitchProcessorMode (\r
401 IN ARM_PROCESSOR_MODE Mode\r
402 );\r
403\r
404ARM_PROCESSOR_MODE\r
405EFIAPI\r
406ArmProcessorMode (\r
407 VOID\r
408 );\r
409 \r
410VOID\r
411EFIAPI\r
412ArmEnableBranchPrediction (\r
413 VOID\r
414 );\r
415\r
416VOID\r
417EFIAPI\r
418ArmDisableBranchPrediction (\r
419 VOID\r
420 );\r
421\r
422VOID\r
423EFIAPI\r
424ArmSetLowVectors (\r
425 VOID\r
426 );\r
427\r
428VOID\r
429EFIAPI\r
430ArmSetHighVectors (\r
431 VOID\r
432 );\r
433\r
434VOID\r
435EFIAPI\r
436ArmDataMemoryBarrier (\r
437 VOID\r
438 );\r
439 \r
440VOID\r
441EFIAPI\r
442ArmDataSyncronizationBarrier (\r
443 VOID\r
444 );\r
445 \r
446VOID\r
447EFIAPI\r
448ArmInstructionSynchronizationBarrier (\r
449 VOID\r
450 );\r
451\r
452VOID\r
453EFIAPI\r
454ArmWriteVBar (\r
455 IN UINT32 VectorBase\r
456 );\r
457\r
458UINT32\r
459EFIAPI\r
460ArmReadVBar (\r
461 VOID\r
462 );\r
463\r
464VOID\r
465EFIAPI\r
466ArmWriteAuxCr (\r
467 IN UINT32 Bit\r
468 );\r
469\r
470UINT32\r
471EFIAPI\r
472ArmReadAuxCr (\r
473 VOID\r
474 );\r
475\r
476VOID\r
477EFIAPI\r
478ArmSetAuxCrBit (\r
479 IN UINT32 Bits\r
480 );\r
481\r
482VOID\r
483EFIAPI\r
484ArmUnsetAuxCrBit (\r
485 IN UINT32 Bits\r
486 );\r
487\r
488VOID\r
489EFIAPI\r
490ArmCallSEV (\r
491 VOID\r
492 );\r
493\r
494VOID\r
495EFIAPI\r
496ArmCallWFE (\r
497 VOID\r
498 );\r
499\r
500VOID\r
501EFIAPI\r
502ArmCallWFI (\r
503 VOID\r
504 );\r
505\r
506UINTN\r
507EFIAPI\r
508ArmReadMpidr (\r
509 VOID\r
510 );\r
511\r
512UINT32\r
513EFIAPI\r
514ArmReadCpacr (\r
515 VOID\r
516 );\r
517\r
518VOID\r
519EFIAPI\r
520ArmWriteCpacr (\r
521 IN UINT32 Access\r
522 );\r
523\r
524VOID\r
525EFIAPI\r
526ArmEnableVFP (\r
527 VOID\r
528 );\r
529\r
530UINT32\r
531EFIAPI\r
532ArmReadNsacr (\r
533 VOID\r
534 );\r
535\r
536VOID\r
537EFIAPI\r
538ArmWriteNsacr (\r
539 IN UINT32 SetWayFormat\r
540 );\r
541\r
542UINT32\r
543EFIAPI\r
544ArmReadScr (\r
545 VOID\r
546 );\r
547\r
548VOID\r
549EFIAPI\r
550ArmWriteScr (\r
551 IN UINT32 SetWayFormat\r
552 );\r
553\r
554UINT32\r
555EFIAPI\r
556ArmReadMVBar (\r
557 VOID\r
558 );\r
559\r
560VOID\r
561EFIAPI\r
562ArmWriteMVBar (\r
563 IN UINT32 VectorMonitorBase\r
564 );\r
565\r
566UINT32\r
567EFIAPI\r
568ArmReadSctlr (\r
569 VOID\r
570 );\r
571\r
5ea2c2d3 572UINTN\r
573EFIAPI\r
574ArmReadHVBar (\r
575 VOID\r
576 );\r
577\r
578VOID\r
579EFIAPI\r
580ArmWriteHVBar (\r
581 IN UINTN HypModeVectorBase\r
582 );\r
583\r
1e57a462 584#endif // __ARM_LIB__\r