]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPkg/Include/Library/ArmLib.h
ArmPkg: Replace CoreId and ClusterId with Mpidr in ARM_CORE_INFO struct
[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
ff1f27c0 4 Copyright (c) 2011 - 2016, ARM Ltd. All rights reserved.<BR>\r
a63914d3 5 Copyright (c) 2020 - 2021, NUVIA Inc. All rights reserved.<BR>\r
1e57a462 6\r
4059386c 7 SPDX-License-Identifier: BSD-2-Clause-Patent\r
1e57a462 8\r
9**/\r
10\r
cc15a619
PG
11#ifndef ARM_LIB_H_\r
12#define ARM_LIB_H_\r
1e57a462 13\r
14#include <Uefi/UefiBaseType.h>\r
15\r
25402f5d 16#ifdef MDE_CPU_ARM\r
70119d27 17 #include <Chipset/ArmV7.h>\r
429309e0 18#elif defined (MDE_CPU_AARCH64)\r
25402f5d 19 #include <Chipset/AArch64.h>\r
1e57a462 20#else\r
429309e0 21 #error "Unknown chipset."\r
1e57a462 22#endif\r
23\r
429309e0 24#define EFI_MEMORY_CACHETYPE_MASK (EFI_MEMORY_UC | EFI_MEMORY_WC | \\r
e0307a7d
AB
25 EFI_MEMORY_WT | EFI_MEMORY_WB | \\r
26 EFI_MEMORY_UCE)\r
27\r
1e57a462 28/**\r
29 * The UEFI firmware must not use the ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_* attributes.\r
30 *\r
31 * The Non Secure memory attribute (ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_*) should only\r
32 * be used in Secure World to distinguished Secure to Non-Secure memory.\r
33 */\r
34typedef enum {\r
35 ARM_MEMORY_REGION_ATTRIBUTE_UNCACHED_UNBUFFERED = 0,\r
36 ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_UNCACHED_UNBUFFERED,\r
37 ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK,\r
38 ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_WRITE_BACK,\r
829633e3
PL
39\r
40 // On some platforms, memory mapped flash region is designed as not supporting\r
41 // shareable attribute, so WRITE_BACK_NONSHAREABLE is added for such special\r
42 // need.\r
43 // Do NOT use below two attributes if you are not sure.\r
44 ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK_NONSHAREABLE,\r
45 ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_WRITE_BACK_NONSHAREABLE,\r
46\r
1e57a462 47 ARM_MEMORY_REGION_ATTRIBUTE_WRITE_THROUGH,\r
48 ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_WRITE_THROUGH,\r
49 ARM_MEMORY_REGION_ATTRIBUTE_DEVICE,\r
50 ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_DEVICE\r
51} ARM_MEMORY_REGION_ATTRIBUTES;\r
52\r
429309e0 53#define IS_ARM_MEMORY_REGION_ATTRIBUTES_SECURE(attr) ((UINT32)(attr) & 1)\r
1e57a462 54\r
55typedef struct {\r
429309e0
MK
56 EFI_PHYSICAL_ADDRESS PhysicalBase;\r
57 EFI_VIRTUAL_ADDRESS VirtualBase;\r
58 UINT64 Length;\r
59 ARM_MEMORY_REGION_ATTRIBUTES Attributes;\r
1e57a462 60} ARM_MEMORY_REGION_DESCRIPTOR;\r
61\r
429309e0
MK
62typedef VOID (*CACHE_OPERATION)(\r
63 VOID\r
64 );\r
65typedef VOID (*LINE_OPERATION)(\r
66 UINTN\r
67 );\r
1e57a462 68\r
69//\r
70// ARM Processor Mode\r
71//\r
72typedef enum {\r
73 ARM_PROCESSOR_MODE_USER = 0x10,\r
74 ARM_PROCESSOR_MODE_FIQ = 0x11,\r
75 ARM_PROCESSOR_MODE_IRQ = 0x12,\r
76 ARM_PROCESSOR_MODE_SUPERVISOR = 0x13,\r
77 ARM_PROCESSOR_MODE_ABORT = 0x17,\r
78 ARM_PROCESSOR_MODE_HYP = 0x1A,\r
79 ARM_PROCESSOR_MODE_UNDEFINED = 0x1B,\r
80 ARM_PROCESSOR_MODE_SYSTEM = 0x1F,\r
81 ARM_PROCESSOR_MODE_MASK = 0x1F\r
82} ARM_PROCESSOR_MODE;\r
83\r
84//\r
85// ARM Cpu IDs\r
86//\r
429309e0
MK
87#define ARM_CPU_IMPLEMENTER_MASK (0xFFU << 24)\r
88#define ARM_CPU_IMPLEMENTER_ARMLTD (0x41U << 24)\r
89#define ARM_CPU_IMPLEMENTER_DEC (0x44U << 24)\r
90#define ARM_CPU_IMPLEMENTER_MOT (0x4DU << 24)\r
91#define ARM_CPU_IMPLEMENTER_QUALCOMM (0x51U << 24)\r
92#define ARM_CPU_IMPLEMENTER_MARVELL (0x56U << 24)\r
93\r
94#define ARM_CPU_PRIMARY_PART_MASK (0xFFF << 4)\r
95#define ARM_CPU_PRIMARY_PART_CORTEXA5 (0xC05 << 4)\r
96#define ARM_CPU_PRIMARY_PART_CORTEXA7 (0xC07 << 4)\r
97#define ARM_CPU_PRIMARY_PART_CORTEXA8 (0xC08 << 4)\r
98#define ARM_CPU_PRIMARY_PART_CORTEXA9 (0xC09 << 4)\r
99#define ARM_CPU_PRIMARY_PART_CORTEXA15 (0xC0F << 4)\r
1e57a462 100\r
101//\r
102// ARM MP Core IDs\r
103//\r
429309e0
MK
104#define ARM_CORE_AFF0 0xFF\r
105#define ARM_CORE_AFF1 (0xFF << 8)\r
106#define ARM_CORE_AFF2 (0xFF << 16)\r
107#define ARM_CORE_AFF3 (0xFFULL << 32)\r
108\r
109#define ARM_CORE_MASK ARM_CORE_AFF0\r
110#define ARM_CLUSTER_MASK ARM_CORE_AFF1\r
111#define GET_CORE_ID(MpId) ((MpId) & ARM_CORE_MASK)\r
112#define GET_CLUSTER_ID(MpId) (((MpId) & ARM_CLUSTER_MASK) >> 8)\r
113#define GET_MPID(ClusterId, CoreId) (((ClusterId) << 8) | (CoreId))\r
103fa647
RC
114#define GET_MPIDR_AFF0(MpId) ((MpId) & ARM_CORE_AFF0)\r
115#define GET_MPIDR_AFF1(MpId) (((MpId) & ARM_CORE_AFF1) >> 8)\r
116#define GET_MPIDR_AFF2(MpId) (((MpId) & ARM_CORE_AFF2) >> 16)\r
117#define GET_MPIDR_AFF3(MpId) (((MpId) & ARM_CORE_AFF3) >> 32)\r
429309e0 118#define PRIMARY_CORE_ID (PcdGet32(PcdArmPrimaryCore) & ARM_CORE_MASK)\r
1e57a462 119\r
a63914d3
RC
120/** Reads the CCSIDR register for the specified cache.\r
121\r
122 @param CSSELR The CSSELR cache selection register value.\r
123\r
124 @return The contents of the CCSIDR_EL1 register for the specified cache, when in AARCH64 mode.\r
125 Returns the contents of the CCSIDR register in AARCH32 mode.\r
126**/\r
127UINTN\r
128ReadCCSIDR (\r
429309e0 129 IN UINT32 CSSELR\r
a63914d3
RC
130 );\r
131\r
132/** Reads the CCSIDR2 for the specified cache.\r
133\r
134 @param CSSELR The CSSELR cache selection register value\r
135\r
136 @return The contents of the CCSIDR2 register for the specified cache.\r
137**/\r
138UINT32\r
139ReadCCSIDR2 (\r
429309e0 140 IN UINT32 CSSELR\r
a63914d3
RC
141 );\r
142\r
143/** Reads the Cache Level ID (CLIDR) register.\r
144\r
145 @return The contents of the CLIDR_EL1 register.\r
146**/\r
147UINT32\r
148ReadCLIDR (\r
149 VOID\r
150 );\r
4f92cfa4 151\r
1e57a462 152UINTN\r
153EFIAPI\r
154ArmDataCacheLineLength (\r
155 VOID\r
156 );\r
3402aac7 157\r
1e57a462 158UINTN\r
159EFIAPI\r
160ArmInstructionCacheLineLength (\r
161 VOID\r
162 );\r
168d7245 163\r
c653fc2a
AB
164UINTN\r
165EFIAPI\r
166ArmCacheWritebackGranule (\r
167 VOID\r
168 );\r
169\r
168d7245
OM
170UINTN\r
171EFIAPI\r
172ArmIsArchTimerImplemented (\r
173 VOID\r
174 );\r
175\r
64751727 176UINTN\r
1e57a462 177EFIAPI\r
64751727 178ArmCacheInfo (\r
1e57a462 179 VOID\r
180 );\r
181\r
182BOOLEAN\r
183EFIAPI\r
184ArmIsMpCore (\r
185 VOID\r
186 );\r
187\r
188VOID\r
189EFIAPI\r
190ArmInvalidateDataCache (\r
191 VOID\r
192 );\r
193\r
1e57a462 194VOID\r
195EFIAPI\r
196ArmCleanInvalidateDataCache (\r
197 VOID\r
198 );\r
199\r
200VOID\r
201EFIAPI\r
202ArmCleanDataCache (\r
203 VOID\r
204 );\r
205\r
1e57a462 206VOID\r
207EFIAPI\r
208ArmInvalidateInstructionCache (\r
209 VOID\r
210 );\r
211\r
212VOID\r
213EFIAPI\r
214ArmInvalidateDataCacheEntryByMVA (\r
429309e0 215 IN UINTN Address\r
1e57a462 216 );\r
217\r
218VOID\r
219EFIAPI\r
cf580da1 220ArmCleanDataCacheEntryToPoUByMVA (\r
429309e0 221 IN UINTN Address\r
1e57a462 222 );\r
223\r
b7de7e3c
EC
224VOID\r
225EFIAPI\r
cf580da1 226ArmInvalidateInstructionCacheEntryToPoUByMVA (\r
429309e0 227 IN UINTN Address\r
cf580da1
AB
228 );\r
229\r
230VOID\r
231EFIAPI\r
232ArmCleanDataCacheEntryByMVA (\r
429309e0
MK
233 IN UINTN Address\r
234 );\r
b7de7e3c 235\r
1e57a462 236VOID\r
237EFIAPI\r
238ArmCleanInvalidateDataCacheEntryByMVA (\r
429309e0 239 IN UINTN Address\r
1e57a462 240 );\r
241\r
242VOID\r
243EFIAPI\r
244ArmEnableDataCache (\r
245 VOID\r
246 );\r
247\r
248VOID\r
249EFIAPI\r
250ArmDisableDataCache (\r
251 VOID\r
252 );\r
253\r
254VOID\r
255EFIAPI\r
256ArmEnableInstructionCache (\r
257 VOID\r
258 );\r
259\r
260VOID\r
261EFIAPI\r
262ArmDisableInstructionCache (\r
263 VOID\r
264 );\r
3402aac7 265\r
1e57a462 266VOID\r
267EFIAPI\r
268ArmEnableMmu (\r
269 VOID\r
270 );\r
271\r
272VOID\r
273EFIAPI\r
274ArmDisableMmu (\r
275 VOID\r
276 );\r
277\r
0ff0e414
OM
278VOID\r
279EFIAPI\r
280ArmEnableCachesAndMmu (\r
281 VOID\r
282 );\r
283\r
1e57a462 284VOID\r
285EFIAPI\r
286ArmDisableCachesAndMmu (\r
287 VOID\r
288 );\r
289\r
1e57a462 290VOID\r
291EFIAPI\r
292ArmEnableInterrupts (\r
293 VOID\r
294 );\r
295\r
296UINTN\r
297EFIAPI\r
298ArmDisableInterrupts (\r
299 VOID\r
300 );\r
47585ed5 301\r
1e57a462 302BOOLEAN\r
303EFIAPI\r
304ArmGetInterruptState (\r
305 VOID\r
306 );\r
307\r
0ff0e414
OM
308VOID\r
309EFIAPI\r
310ArmEnableAsynchronousAbort (\r
311 VOID\r
312 );\r
313\r
47585ed5 314UINTN\r
315EFIAPI\r
0ff0e414 316ArmDisableAsynchronousAbort (\r
47585ed5 317 VOID\r
318 );\r
319\r
320VOID\r
321EFIAPI\r
322ArmEnableIrq (\r
323 VOID\r
324 );\r
325\r
0ff0e414
OM
326UINTN\r
327EFIAPI\r
328ArmDisableIrq (\r
329 VOID\r
330 );\r
331\r
1e57a462 332VOID\r
333EFIAPI\r
334ArmEnableFiq (\r
335 VOID\r
336 );\r
337\r
338UINTN\r
339EFIAPI\r
340ArmDisableFiq (\r
341 VOID\r
342 );\r
3402aac7 343\r
1e57a462 344BOOLEAN\r
345EFIAPI\r
346ArmGetFiqState (\r
347 VOID\r
348 );\r
349\r
8dd618d2
OM
350/**\r
351 * Invalidate Data and Instruction TLBs\r
352 */\r
1e57a462 353VOID\r
354EFIAPI\r
355ArmInvalidateTlb (\r
356 VOID\r
357 );\r
3402aac7 358\r
1e57a462 359VOID\r
360EFIAPI\r
361ArmUpdateTranslationTableEntry (\r
429309e0
MK
362 IN VOID *TranslationTableEntry,\r
363 IN VOID *Mva\r
1e57a462 364 );\r
3402aac7 365\r
1e57a462 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
ff1f27c0
EL
378VOID\r
379EFIAPI\r
380ArmSetTTBCR (\r
429309e0 381 IN UINT32 Bits\r
ff1f27c0
EL
382 );\r
383\r
1e57a462 384VOID *\r
385EFIAPI\r
386ArmGetTTBR0BaseAddress (\r
387 VOID\r
388 );\r
389\r
1e57a462 390BOOLEAN\r
391EFIAPI\r
392ArmMmuEnabled (\r
393 VOID\r
394 );\r
3402aac7 395\r
1e57a462 396VOID\r
397EFIAPI\r
398ArmEnableBranchPrediction (\r
399 VOID\r
400 );\r
401\r
402VOID\r
403EFIAPI\r
404ArmDisableBranchPrediction (\r
405 VOID\r
406 );\r
407\r
408VOID\r
409EFIAPI\r
410ArmSetLowVectors (\r
411 VOID\r
412 );\r
413\r
414VOID\r
415EFIAPI\r
416ArmSetHighVectors (\r
417 VOID\r
418 );\r
419\r
420VOID\r
421EFIAPI\r
422ArmDataMemoryBarrier (\r
423 VOID\r
424 );\r
3402aac7 425\r
1e57a462 426VOID\r
427EFIAPI\r
cf93a378 428ArmDataSynchronizationBarrier (\r
1e57a462 429 VOID\r
430 );\r
3402aac7 431\r
1e57a462 432VOID\r
433EFIAPI\r
434ArmInstructionSynchronizationBarrier (\r
435 VOID\r
436 );\r
437\r
438VOID\r
439EFIAPI\r
440ArmWriteVBar (\r
429309e0 441 IN UINTN VectorBase\r
1e57a462 442 );\r
443\r
4e57d6d7 444UINTN\r
1e57a462 445EFIAPI\r
446ArmReadVBar (\r
447 VOID\r
448 );\r
449\r
450VOID\r
451EFIAPI\r
452ArmWriteAuxCr (\r
429309e0 453 IN UINT32 Bit\r
1e57a462 454 );\r
455\r
456UINT32\r
457EFIAPI\r
458ArmReadAuxCr (\r
459 VOID\r
460 );\r
461\r
462VOID\r
463EFIAPI\r
464ArmSetAuxCrBit (\r
429309e0 465 IN UINT32 Bits\r
1e57a462 466 );\r
467\r
468VOID\r
469EFIAPI\r
470ArmUnsetAuxCrBit (\r
429309e0 471 IN UINT32 Bits\r
1e57a462 472 );\r
473\r
474VOID\r
475EFIAPI\r
476ArmCallSEV (\r
477 VOID\r
478 );\r
479\r
480VOID\r
481EFIAPI\r
482ArmCallWFE (\r
483 VOID\r
484 );\r
485\r
486VOID\r
487EFIAPI\r
488ArmCallWFI (\r
25402f5d 489\r
1e57a462 490 VOID\r
491 );\r
492\r
493UINTN\r
494EFIAPI\r
495ArmReadMpidr (\r
496 VOID\r
497 );\r
498\r
9401d6f4
OM
499UINTN\r
500EFIAPI\r
501ArmReadMidr (\r
502 VOID\r
503 );\r
504\r
1e57a462 505UINT32\r
506EFIAPI\r
507ArmReadCpacr (\r
508 VOID\r
509 );\r
510\r
511VOID\r
512EFIAPI\r
513ArmWriteCpacr (\r
429309e0 514 IN UINT32 Access\r
1e57a462 515 );\r
516\r
517VOID\r
518EFIAPI\r
519ArmEnableVFP (\r
520 VOID\r
521 );\r
522\r
46d4d75c
OM
523/**\r
524 Get the Secure Configuration Register value\r
525\r
526 @return Value read from the Secure Configuration Register\r
527\r
528**/\r
1e57a462 529UINT32\r
530EFIAPI\r
531ArmReadScr (\r
532 VOID\r
533 );\r
534\r
46d4d75c
OM
535/**\r
536 Set the Secure Configuration Register\r
537\r
538 @param Value Value to write to the Secure Configuration Register\r
539\r
540**/\r
1e57a462 541VOID\r
542EFIAPI\r
543ArmWriteScr (\r
429309e0 544 IN UINT32 Value\r
1e57a462 545 );\r
546\r
547UINT32\r
548EFIAPI\r
549ArmReadMVBar (\r
550 VOID\r
551 );\r
552\r
553VOID\r
554EFIAPI\r
555ArmWriteMVBar (\r
429309e0 556 IN UINT32 VectorMonitorBase\r
1e57a462 557 );\r
558\r
559UINT32\r
560EFIAPI\r
561ArmReadSctlr (\r
562 VOID\r
563 );\r
564\r
1e1d1697
MZ
565VOID\r
566EFIAPI\r
567ArmWriteSctlr (\r
429309e0 568 IN UINT32 Value\r
1e1d1697
MZ
569 );\r
570\r
5ea2c2d3 571UINTN\r
572EFIAPI\r
573ArmReadHVBar (\r
574 VOID\r
575 );\r
576\r
577VOID\r
578EFIAPI\r
579ArmWriteHVBar (\r
429309e0 580 IN UINTN HypModeVectorBase\r
5ea2c2d3 581 );\r
582\r
52d44f77
OM
583//\r
584// Helper functions for accessing CPU ACTLR\r
585//\r
586\r
587UINTN\r
588EFIAPI\r
589ArmReadCpuActlr (\r
590 VOID\r
591 );\r
592\r
593VOID\r
594EFIAPI\r
595ArmWriteCpuActlr (\r
429309e0 596 IN UINTN Val\r
52d44f77
OM
597 );\r
598\r
599VOID\r
600EFIAPI\r
601ArmSetCpuActlrBit (\r
429309e0 602 IN UINTN Bits\r
52d44f77
OM
603 );\r
604\r
605VOID\r
606EFIAPI\r
607ArmUnsetCpuActlrBit (\r
429309e0 608 IN UINTN Bits\r
52d44f77
OM
609 );\r
610\r
734bd6cc
AB
611//\r
612// Accessors for the architected generic timer registers\r
613//\r
614\r
429309e0
MK
615#define ARM_ARCH_TIMER_ENABLE (1 << 0)\r
616#define ARM_ARCH_TIMER_IMASK (1 << 1)\r
617#define ARM_ARCH_TIMER_ISTATUS (1 << 2)\r
734bd6cc
AB
618\r
619UINTN\r
620EFIAPI\r
621ArmReadCntFrq (\r
622 VOID\r
623 );\r
624\r
625VOID\r
626EFIAPI\r
627ArmWriteCntFrq (\r
429309e0 628 UINTN FreqInHz\r
734bd6cc
AB
629 );\r
630\r
631UINT64\r
632EFIAPI\r
633ArmReadCntPct (\r
634 VOID\r
635 );\r
636\r
637UINTN\r
638EFIAPI\r
639ArmReadCntkCtl (\r
640 VOID\r
641 );\r
642\r
643VOID\r
644EFIAPI\r
645ArmWriteCntkCtl (\r
429309e0 646 UINTN Val\r
734bd6cc
AB
647 );\r
648\r
649UINTN\r
650EFIAPI\r
651ArmReadCntpTval (\r
652 VOID\r
653 );\r
654\r
655VOID\r
656EFIAPI\r
657ArmWriteCntpTval (\r
429309e0 658 UINTN Val\r
734bd6cc
AB
659 );\r
660\r
661UINTN\r
662EFIAPI\r
663ArmReadCntpCtl (\r
664 VOID\r
665 );\r
666\r
667VOID\r
668EFIAPI\r
669ArmWriteCntpCtl (\r
429309e0 670 UINTN Val\r
734bd6cc
AB
671 );\r
672\r
673UINTN\r
674EFIAPI\r
675ArmReadCntvTval (\r
676 VOID\r
677 );\r
678\r
679VOID\r
680EFIAPI\r
681ArmWriteCntvTval (\r
429309e0 682 UINTN Val\r
734bd6cc
AB
683 );\r
684\r
685UINTN\r
686EFIAPI\r
687ArmReadCntvCtl (\r
688 VOID\r
689 );\r
690\r
691VOID\r
692EFIAPI\r
693ArmWriteCntvCtl (\r
429309e0 694 UINTN Val\r
734bd6cc
AB
695 );\r
696\r
697UINT64\r
698EFIAPI\r
699ArmReadCntvCt (\r
700 VOID\r
701 );\r
702\r
703UINT64\r
704EFIAPI\r
705ArmReadCntpCval (\r
706 VOID\r
707 );\r
708\r
709VOID\r
710EFIAPI\r
711ArmWriteCntpCval (\r
429309e0 712 UINT64 Val\r
734bd6cc
AB
713 );\r
714\r
715UINT64\r
716EFIAPI\r
717ArmReadCntvCval (\r
718 VOID\r
719 );\r
720\r
721VOID\r
722EFIAPI\r
723ArmWriteCntvCval (\r
429309e0 724 UINT64 Val\r
734bd6cc
AB
725 );\r
726\r
727UINT64\r
728EFIAPI\r
729ArmReadCntvOff (\r
730 VOID\r
731 );\r
732\r
733VOID\r
734EFIAPI\r
735ArmWriteCntvOff (\r
429309e0 736 UINT64 Val\r
734bd6cc
AB
737 );\r
738\r
95d04ebc
AB
739UINTN\r
740EFIAPI\r
741ArmGetPhysicalAddressBits (\r
742 VOID\r
743 );\r
744\r
5cc25cff
LL
745///\r
746/// ID Register Helper functions\r
747///\r
748\r
749/**\r
750 Check whether the CPU supports the GIC system register interface (any version)\r
751\r
752 @return Whether GIC System Register Interface is supported\r
753\r
754**/\r
755BOOLEAN\r
756EFIAPI\r
757ArmHasGicSystemRegisters (\r
758 VOID\r
759 );\r
760\r
6e131aff
RC
761/** Checks if CCIDX is implemented.\r
762\r
763 @retval TRUE CCIDX is implemented.\r
764 @retval FALSE CCIDX is not implemented.\r
765**/\r
766BOOLEAN\r
767EFIAPI\r
768ArmHasCcidx (\r
769 VOID\r
770 );\r
771\r
740b870d
LL
772#ifdef MDE_CPU_ARM\r
773///\r
774/// AArch32-only ID Register Helper functions\r
775///\r
429309e0 776\r
740b870d
LL
777/**\r
778 Check whether the CPU supports the Security extensions\r
779\r
780 @return Whether the Security extensions are implemented\r
781\r
782**/\r
783BOOLEAN\r
784EFIAPI\r
785ArmHasSecurityExtensions (\r
786 VOID\r
787 );\r
429309e0 788\r
740b870d
LL
789#endif // MDE_CPU_ARM\r
790\r
cc15a619 791#endif // ARM_LIB_H_\r