]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPkg/Include/Library/ArmLib.h
MdeModulePkg: Update UiApp to handle terminal type TtyTerm
[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
90ed18ca 4 Copyright (c) 2011 - 2015, ARM Ltd. All rights reserved.<BR>\r
1e57a462 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
25402f5d
HL
21#ifdef MDE_CPU_ARM\r
22 #ifdef ARM_CPU_ARMv6\r
23 #include <Chipset/ARM1176JZ-S.h>\r
24 #else\r
25 #include <Chipset/ArmV7.h>\r
26 #endif\r
27#elif defined(MDE_CPU_AARCH64)\r
28 #include <Chipset/AArch64.h>\r
1e57a462 29#else\r
25402f5d 30 #error "Unknown chipset."\r
1e57a462 31#endif\r
32\r
33typedef enum {\r
34 ARM_CACHE_TYPE_WRITE_BACK,\r
35 ARM_CACHE_TYPE_UNKNOWN\r
36} ARM_CACHE_TYPE;\r
37\r
38typedef enum {\r
39 ARM_CACHE_ARCHITECTURE_UNIFIED,\r
40 ARM_CACHE_ARCHITECTURE_SEPARATE,\r
41 ARM_CACHE_ARCHITECTURE_UNKNOWN\r
42} ARM_CACHE_ARCHITECTURE;\r
43\r
44typedef struct {\r
45 ARM_CACHE_TYPE Type;\r
46 ARM_CACHE_ARCHITECTURE Architecture;\r
47 BOOLEAN DataCachePresent;\r
48 UINTN DataCacheSize;\r
49 UINTN DataCacheAssociativity;\r
50 UINTN DataCacheLineLength;\r
51 BOOLEAN InstructionCachePresent;\r
52 UINTN InstructionCacheSize;\r
53 UINTN InstructionCacheAssociativity;\r
54 UINTN InstructionCacheLineLength;\r
55} ARM_CACHE_INFO;\r
56\r
57/**\r
58 * The UEFI firmware must not use the ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_* attributes.\r
59 *\r
60 * The Non Secure memory attribute (ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_*) should only\r
61 * be used in Secure World to distinguished Secure to Non-Secure memory.\r
62 */\r
63typedef enum {\r
64 ARM_MEMORY_REGION_ATTRIBUTE_UNCACHED_UNBUFFERED = 0,\r
65 ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_UNCACHED_UNBUFFERED,\r
66 ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK,\r
67 ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_WRITE_BACK,\r
68 ARM_MEMORY_REGION_ATTRIBUTE_WRITE_THROUGH,\r
69 ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_WRITE_THROUGH,\r
70 ARM_MEMORY_REGION_ATTRIBUTE_DEVICE,\r
71 ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE\r
72} ARM_MEMORY_REGION_ATTRIBUTES;\r
73\r
74#define IS_ARM_MEMORY_REGION_ATTRIBUTES_SECURE(attr) ((UINT32)(attr) & 1)\r
75\r
76typedef struct {\r
77 EFI_PHYSICAL_ADDRESS PhysicalBase;\r
78 EFI_VIRTUAL_ADDRESS VirtualBase;\r
c357fd6a 79 UINT64 Length;\r
1e57a462 80 ARM_MEMORY_REGION_ATTRIBUTES Attributes;\r
81} ARM_MEMORY_REGION_DESCRIPTOR;\r
82\r
83typedef VOID (*CACHE_OPERATION)(VOID);\r
84typedef VOID (*LINE_OPERATION)(UINTN);\r
85\r
86//\r
87// ARM Processor Mode\r
88//\r
89typedef enum {\r
90 ARM_PROCESSOR_MODE_USER = 0x10,\r
91 ARM_PROCESSOR_MODE_FIQ = 0x11,\r
92 ARM_PROCESSOR_MODE_IRQ = 0x12,\r
93 ARM_PROCESSOR_MODE_SUPERVISOR = 0x13,\r
94 ARM_PROCESSOR_MODE_ABORT = 0x17,\r
95 ARM_PROCESSOR_MODE_HYP = 0x1A,\r
96 ARM_PROCESSOR_MODE_UNDEFINED = 0x1B,\r
97 ARM_PROCESSOR_MODE_SYSTEM = 0x1F,\r
98 ARM_PROCESSOR_MODE_MASK = 0x1F\r
99} ARM_PROCESSOR_MODE;\r
100\r
101//\r
102// ARM Cpu IDs\r
103//\r
104#define ARM_CPU_IMPLEMENTER_MASK (0xFFU << 24)\r
105#define ARM_CPU_IMPLEMENTER_ARMLTD (0x41U << 24)\r
106#define ARM_CPU_IMPLEMENTER_DEC (0x44U << 24)\r
107#define ARM_CPU_IMPLEMENTER_MOT (0x4DU << 24)\r
108#define ARM_CPU_IMPLEMENTER_QUALCOMM (0x51U << 24)\r
109#define ARM_CPU_IMPLEMENTER_MARVELL (0x56U << 24)\r
110\r
111#define ARM_CPU_PRIMARY_PART_MASK (0xFFF << 4)\r
112#define ARM_CPU_PRIMARY_PART_CORTEXA5 (0xC05 << 4)\r
113#define ARM_CPU_PRIMARY_PART_CORTEXA7 (0xC07 << 4)\r
114#define ARM_CPU_PRIMARY_PART_CORTEXA8 (0xC08 << 4)\r
115#define ARM_CPU_PRIMARY_PART_CORTEXA9 (0xC09 << 4)\r
116#define ARM_CPU_PRIMARY_PART_CORTEXA15 (0xC0F << 4)\r
117\r
118//\r
119// ARM MP Core IDs\r
120//\r
90ed18ca
OM
121#define ARM_CORE_AFF0 0xFF\r
122#define ARM_CORE_AFF1 (0xFF << 8)\r
123#define ARM_CORE_AFF2 (0xFF << 16)\r
124#define ARM_CORE_AFF3 (0xFFULL << 32)\r
125\r
126#define ARM_CORE_MASK ARM_CORE_AFF0\r
127#define ARM_CLUSTER_MASK ARM_CORE_AFF1\r
1e57a462 128#define GET_CORE_ID(MpId) ((MpId) & ARM_CORE_MASK)\r
129#define GET_CLUSTER_ID(MpId) (((MpId) & ARM_CLUSTER_MASK) >> 8)\r
e359565e 130#define GET_MPID(ClusterId, CoreId) (((ClusterId) << 8) | (CoreId))\r
1e57a462 131#define PRIMARY_CORE_ID (PcdGet32(PcdArmPrimaryCore) & ARM_CORE_MASK)\r
132\r
133ARM_CACHE_TYPE\r
134EFIAPI\r
135ArmCacheType (\r
136 VOID\r
137 );\r
138\r
139ARM_CACHE_ARCHITECTURE\r
140EFIAPI\r
141ArmCacheArchitecture (\r
142 VOID\r
143 );\r
144\r
145VOID\r
146EFIAPI\r
147ArmCacheInformation (\r
148 OUT ARM_CACHE_INFO *CacheInfo\r
149 );\r
150\r
151BOOLEAN\r
152EFIAPI\r
153ArmDataCachePresent (\r
154 VOID\r
155 );\r
3402aac7 156\r
1e57a462 157UINTN\r
158EFIAPI\r
159ArmDataCacheSize (\r
160 VOID\r
161 );\r
3402aac7 162\r
1e57a462 163UINTN\r
164EFIAPI\r
165ArmDataCacheAssociativity (\r
166 VOID\r
167 );\r
3402aac7 168\r
1e57a462 169UINTN\r
170EFIAPI\r
171ArmDataCacheLineLength (\r
172 VOID\r
173 );\r
3402aac7 174\r
1e57a462 175BOOLEAN\r
176EFIAPI\r
177ArmInstructionCachePresent (\r
178 VOID\r
179 );\r
3402aac7 180\r
1e57a462 181UINTN\r
182EFIAPI\r
183ArmInstructionCacheSize (\r
184 VOID\r
185 );\r
3402aac7 186\r
1e57a462 187UINTN\r
188EFIAPI\r
189ArmInstructionCacheAssociativity (\r
190 VOID\r
191 );\r
3402aac7 192\r
1e57a462 193UINTN\r
194EFIAPI\r
195ArmInstructionCacheLineLength (\r
196 VOID\r
197 );\r
168d7245
OM
198\r
199UINTN\r
200EFIAPI\r
201ArmIsArchTimerImplemented (\r
202 VOID\r
203 );\r
204\r
205UINTN\r
206EFIAPI\r
207ArmReadIdPfr0 (\r
208 VOID\r
209 );\r
210\r
211UINTN\r
212EFIAPI\r
213ArmReadIdPfr1 (\r
214 VOID\r
215 );\r
216\r
64751727 217UINTN\r
1e57a462 218EFIAPI\r
64751727 219ArmCacheInfo (\r
1e57a462 220 VOID\r
221 );\r
222\r
223BOOLEAN\r
224EFIAPI\r
225ArmIsMpCore (\r
226 VOID\r
227 );\r
228\r
229VOID\r
230EFIAPI\r
231ArmInvalidateDataCache (\r
232 VOID\r
233 );\r
234\r
235\r
236VOID\r
237EFIAPI\r
238ArmCleanInvalidateDataCache (\r
239 VOID\r
240 );\r
241\r
242VOID\r
243EFIAPI\r
244ArmCleanDataCache (\r
245 VOID\r
246 );\r
247\r
248VOID\r
249EFIAPI\r
250ArmCleanDataCacheToPoU (\r
251 VOID\r
252 );\r
253\r
254VOID\r
255EFIAPI\r
256ArmInvalidateInstructionCache (\r
257 VOID\r
258 );\r
259\r
260VOID\r
261EFIAPI\r
262ArmInvalidateDataCacheEntryByMVA (\r
263 IN UINTN Address\r
264 );\r
265\r
266VOID\r
267EFIAPI\r
268ArmCleanDataCacheEntryByMVA (\r
269 IN UINTN Address\r
270 );\r
271\r
272VOID\r
273EFIAPI\r
274ArmCleanInvalidateDataCacheEntryByMVA (\r
275 IN UINTN Address\r
276 );\r
277\r
0ff0e414
OM
278VOID\r
279EFIAPI\r
280ArmInvalidateDataCacheEntryBySetWay (\r
281 IN UINTN SetWayFormat\r
282 );\r
283\r
284VOID\r
285EFIAPI\r
286ArmCleanDataCacheEntryBySetWay (\r
287 IN UINTN SetWayFormat\r
288 );\r
289\r
290VOID\r
291EFIAPI\r
292ArmCleanInvalidateDataCacheEntryBySetWay (\r
293 IN UINTN SetWayFormat\r
294 );\r
295\r
1e57a462 296VOID\r
297EFIAPI\r
298ArmEnableDataCache (\r
299 VOID\r
300 );\r
301\r
302VOID\r
303EFIAPI\r
304ArmDisableDataCache (\r
305 VOID\r
306 );\r
307\r
308VOID\r
309EFIAPI\r
310ArmEnableInstructionCache (\r
311 VOID\r
312 );\r
313\r
314VOID\r
315EFIAPI\r
316ArmDisableInstructionCache (\r
317 VOID\r
318 );\r
3402aac7 319\r
1e57a462 320VOID\r
321EFIAPI\r
322ArmEnableMmu (\r
323 VOID\r
324 );\r
325\r
326VOID\r
327EFIAPI\r
328ArmDisableMmu (\r
329 VOID\r
330 );\r
331\r
0ff0e414
OM
332VOID\r
333EFIAPI\r
334ArmEnableCachesAndMmu (\r
335 VOID\r
336 );\r
337\r
1e57a462 338VOID\r
339EFIAPI\r
340ArmDisableCachesAndMmu (\r
341 VOID\r
342 );\r
343\r
1e57a462 344VOID\r
345EFIAPI\r
346ArmEnableInterrupts (\r
347 VOID\r
348 );\r
349\r
350UINTN\r
351EFIAPI\r
352ArmDisableInterrupts (\r
353 VOID\r
354 );\r
47585ed5 355\r
1e57a462 356BOOLEAN\r
357EFIAPI\r
358ArmGetInterruptState (\r
359 VOID\r
360 );\r
361\r
0ff0e414
OM
362VOID\r
363EFIAPI\r
364ArmEnableAsynchronousAbort (\r
365 VOID\r
366 );\r
367\r
47585ed5 368UINTN\r
369EFIAPI\r
0ff0e414 370ArmDisableAsynchronousAbort (\r
47585ed5 371 VOID\r
372 );\r
373\r
374VOID\r
375EFIAPI\r
376ArmEnableIrq (\r
377 VOID\r
378 );\r
379\r
0ff0e414
OM
380UINTN\r
381EFIAPI\r
382ArmDisableIrq (\r
383 VOID\r
384 );\r
385\r
1e57a462 386VOID\r
387EFIAPI\r
388ArmEnableFiq (\r
389 VOID\r
390 );\r
391\r
392UINTN\r
393EFIAPI\r
394ArmDisableFiq (\r
395 VOID\r
396 );\r
3402aac7 397\r
1e57a462 398BOOLEAN\r
399EFIAPI\r
400ArmGetFiqState (\r
401 VOID\r
402 );\r
403\r
8dd618d2
OM
404/**\r
405 * Invalidate Data and Instruction TLBs\r
406 */\r
1e57a462 407VOID\r
408EFIAPI\r
409ArmInvalidateTlb (\r
410 VOID\r
411 );\r
3402aac7 412\r
1e57a462 413VOID\r
414EFIAPI\r
415ArmUpdateTranslationTableEntry (\r
416 IN VOID *TranslationTableEntry,\r
417 IN VOID *Mva\r
418 );\r
3402aac7 419\r
1e57a462 420VOID\r
421EFIAPI\r
422ArmSetDomainAccessControl (\r
423 IN UINT32 Domain\r
424 );\r
425\r
426VOID\r
427EFIAPI\r
428ArmSetTTBR0 (\r
429 IN VOID *TranslationTableBase\r
430 );\r
431\r
432VOID *\r
433EFIAPI\r
434ArmGetTTBR0BaseAddress (\r
435 VOID\r
436 );\r
437\r
6f050ad6 438RETURN_STATUS\r
1e57a462 439EFIAPI\r
440ArmConfigureMmu (\r
441 IN ARM_MEMORY_REGION_DESCRIPTOR *MemoryTable,\r
6f050ad6 442 OUT VOID **TranslationTableBase OPTIONAL,\r
1e57a462 443 OUT UINTN *TranslationTableSize OPTIONAL\r
444 );\r
3402aac7 445\r
1e57a462 446BOOLEAN\r
447EFIAPI\r
448ArmMmuEnabled (\r
449 VOID\r
450 );\r
3402aac7 451\r
1e57a462 452VOID\r
453EFIAPI\r
454ArmEnableBranchPrediction (\r
455 VOID\r
456 );\r
457\r
458VOID\r
459EFIAPI\r
460ArmDisableBranchPrediction (\r
461 VOID\r
462 );\r
463\r
464VOID\r
465EFIAPI\r
466ArmSetLowVectors (\r
467 VOID\r
468 );\r
469\r
470VOID\r
471EFIAPI\r
472ArmSetHighVectors (\r
473 VOID\r
474 );\r
475\r
0ff0e414
OM
476VOID\r
477EFIAPI\r
478ArmDrainWriteBuffer (\r
479 VOID\r
480 );\r
481\r
1e57a462 482VOID\r
483EFIAPI\r
484ArmDataMemoryBarrier (\r
485 VOID\r
486 );\r
3402aac7 487\r
1e57a462 488VOID\r
489EFIAPI\r
490ArmDataSyncronizationBarrier (\r
491 VOID\r
492 );\r
3402aac7 493\r
1e57a462 494VOID\r
495EFIAPI\r
496ArmInstructionSynchronizationBarrier (\r
497 VOID\r
498 );\r
499\r
500VOID\r
501EFIAPI\r
502ArmWriteVBar (\r
4e57d6d7 503 IN UINTN VectorBase\r
1e57a462 504 );\r
505\r
4e57d6d7 506UINTN\r
1e57a462 507EFIAPI\r
508ArmReadVBar (\r
509 VOID\r
510 );\r
511\r
512VOID\r
513EFIAPI\r
514ArmWriteAuxCr (\r
515 IN UINT32 Bit\r
516 );\r
517\r
518UINT32\r
519EFIAPI\r
520ArmReadAuxCr (\r
521 VOID\r
522 );\r
523\r
524VOID\r
525EFIAPI\r
526ArmSetAuxCrBit (\r
527 IN UINT32 Bits\r
528 );\r
529\r
530VOID\r
531EFIAPI\r
532ArmUnsetAuxCrBit (\r
533 IN UINT32 Bits\r
534 );\r
535\r
536VOID\r
537EFIAPI\r
538ArmCallSEV (\r
539 VOID\r
540 );\r
541\r
542VOID\r
543EFIAPI\r
544ArmCallWFE (\r
545 VOID\r
546 );\r
547\r
548VOID\r
549EFIAPI\r
550ArmCallWFI (\r
25402f5d 551\r
1e57a462 552 VOID\r
553 );\r
554\r
555UINTN\r
556EFIAPI\r
557ArmReadMpidr (\r
558 VOID\r
559 );\r
560\r
9401d6f4
OM
561UINTN\r
562EFIAPI\r
563ArmReadMidr (\r
564 VOID\r
565 );\r
566\r
1e57a462 567UINT32\r
568EFIAPI\r
569ArmReadCpacr (\r
570 VOID\r
571 );\r
572\r
573VOID\r
574EFIAPI\r
575ArmWriteCpacr (\r
576 IN UINT32 Access\r
577 );\r
578\r
579VOID\r
580EFIAPI\r
581ArmEnableVFP (\r
582 VOID\r
583 );\r
584\r
46d4d75c
OM
585/**\r
586 Get the Secure Configuration Register value\r
587\r
588 @return Value read from the Secure Configuration Register\r
589\r
590**/\r
1e57a462 591UINT32\r
592EFIAPI\r
593ArmReadScr (\r
594 VOID\r
595 );\r
596\r
46d4d75c
OM
597/**\r
598 Set the Secure Configuration Register\r
599\r
600 @param Value Value to write to the Secure Configuration Register\r
601\r
602**/\r
1e57a462 603VOID\r
604EFIAPI\r
605ArmWriteScr (\r
46d4d75c 606 IN UINT32 Value\r
1e57a462 607 );\r
608\r
609UINT32\r
610EFIAPI\r
611ArmReadMVBar (\r
612 VOID\r
613 );\r
614\r
615VOID\r
616EFIAPI\r
617ArmWriteMVBar (\r
618 IN UINT32 VectorMonitorBase\r
619 );\r
620\r
621UINT32\r
622EFIAPI\r
623ArmReadSctlr (\r
624 VOID\r
625 );\r
626\r
5ea2c2d3 627UINTN\r
628EFIAPI\r
629ArmReadHVBar (\r
630 VOID\r
631 );\r
632\r
633VOID\r
634EFIAPI\r
635ArmWriteHVBar (\r
636 IN UINTN HypModeVectorBase\r
637 );\r
638\r
52d44f77
OM
639\r
640//\r
641// Helper functions for accessing CPU ACTLR\r
642//\r
643\r
644UINTN\r
645EFIAPI\r
646ArmReadCpuActlr (\r
647 VOID\r
648 );\r
649\r
650VOID\r
651EFIAPI\r
652ArmWriteCpuActlr (\r
653 IN UINTN Val\r
654 );\r
655\r
656VOID\r
657EFIAPI\r
658ArmSetCpuActlrBit (\r
659 IN UINTN Bits\r
660 );\r
661\r
662VOID\r
663EFIAPI\r
664ArmUnsetCpuActlrBit (\r
665 IN UINTN Bits\r
666 );\r
667\r
1e57a462 668#endif // __ARM_LIB__\r