]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPkg/Include/Library/ArmLib.h
OvmfPkg/BaseCachingPciExpressLib: Migrate BaseCachingPciExpressLib
[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
114#define PRIMARY_CORE_ID (PcdGet32(PcdArmPrimaryCore) & ARM_CORE_MASK)\r
1e57a462 115\r
a63914d3
RC
116/** Reads the CCSIDR register for the specified cache.\r
117\r
118 @param CSSELR The CSSELR cache selection register value.\r
119\r
120 @return The contents of the CCSIDR_EL1 register for the specified cache, when in AARCH64 mode.\r
121 Returns the contents of the CCSIDR register in AARCH32 mode.\r
122**/\r
123UINTN\r
124ReadCCSIDR (\r
429309e0 125 IN UINT32 CSSELR\r
a63914d3
RC
126 );\r
127\r
128/** Reads the CCSIDR2 for the specified cache.\r
129\r
130 @param CSSELR The CSSELR cache selection register value\r
131\r
132 @return The contents of the CCSIDR2 register for the specified cache.\r
133**/\r
134UINT32\r
135ReadCCSIDR2 (\r
429309e0 136 IN UINT32 CSSELR\r
a63914d3
RC
137 );\r
138\r
139/** Reads the Cache Level ID (CLIDR) register.\r
140\r
141 @return The contents of the CLIDR_EL1 register.\r
142**/\r
143UINT32\r
144ReadCLIDR (\r
145 VOID\r
146 );\r
4f92cfa4 147\r
1e57a462 148UINTN\r
149EFIAPI\r
150ArmDataCacheLineLength (\r
151 VOID\r
152 );\r
3402aac7 153\r
1e57a462 154UINTN\r
155EFIAPI\r
156ArmInstructionCacheLineLength (\r
157 VOID\r
158 );\r
168d7245 159\r
c653fc2a
AB
160UINTN\r
161EFIAPI\r
162ArmCacheWritebackGranule (\r
163 VOID\r
164 );\r
165\r
168d7245
OM
166UINTN\r
167EFIAPI\r
168ArmIsArchTimerImplemented (\r
169 VOID\r
170 );\r
171\r
64751727 172UINTN\r
1e57a462 173EFIAPI\r
64751727 174ArmCacheInfo (\r
1e57a462 175 VOID\r
176 );\r
177\r
178BOOLEAN\r
179EFIAPI\r
180ArmIsMpCore (\r
181 VOID\r
182 );\r
183\r
184VOID\r
185EFIAPI\r
186ArmInvalidateDataCache (\r
187 VOID\r
188 );\r
189\r
1e57a462 190VOID\r
191EFIAPI\r
192ArmCleanInvalidateDataCache (\r
193 VOID\r
194 );\r
195\r
196VOID\r
197EFIAPI\r
198ArmCleanDataCache (\r
199 VOID\r
200 );\r
201\r
1e57a462 202VOID\r
203EFIAPI\r
204ArmInvalidateInstructionCache (\r
205 VOID\r
206 );\r
207\r
208VOID\r
209EFIAPI\r
210ArmInvalidateDataCacheEntryByMVA (\r
429309e0 211 IN UINTN Address\r
1e57a462 212 );\r
213\r
214VOID\r
215EFIAPI\r
cf580da1 216ArmCleanDataCacheEntryToPoUByMVA (\r
429309e0 217 IN UINTN Address\r
1e57a462 218 );\r
219\r
b7de7e3c
EC
220VOID\r
221EFIAPI\r
cf580da1 222ArmInvalidateInstructionCacheEntryToPoUByMVA (\r
429309e0 223 IN UINTN Address\r
cf580da1
AB
224 );\r
225\r
226VOID\r
227EFIAPI\r
228ArmCleanDataCacheEntryByMVA (\r
429309e0
MK
229 IN UINTN Address\r
230 );\r
b7de7e3c 231\r
1e57a462 232VOID\r
233EFIAPI\r
234ArmCleanInvalidateDataCacheEntryByMVA (\r
429309e0 235 IN UINTN Address\r
1e57a462 236 );\r
237\r
238VOID\r
239EFIAPI\r
240ArmEnableDataCache (\r
241 VOID\r
242 );\r
243\r
244VOID\r
245EFIAPI\r
246ArmDisableDataCache (\r
247 VOID\r
248 );\r
249\r
250VOID\r
251EFIAPI\r
252ArmEnableInstructionCache (\r
253 VOID\r
254 );\r
255\r
256VOID\r
257EFIAPI\r
258ArmDisableInstructionCache (\r
259 VOID\r
260 );\r
3402aac7 261\r
1e57a462 262VOID\r
263EFIAPI\r
264ArmEnableMmu (\r
265 VOID\r
266 );\r
267\r
268VOID\r
269EFIAPI\r
270ArmDisableMmu (\r
271 VOID\r
272 );\r
273\r
0ff0e414
OM
274VOID\r
275EFIAPI\r
276ArmEnableCachesAndMmu (\r
277 VOID\r
278 );\r
279\r
1e57a462 280VOID\r
281EFIAPI\r
282ArmDisableCachesAndMmu (\r
283 VOID\r
284 );\r
285\r
1e57a462 286VOID\r
287EFIAPI\r
288ArmEnableInterrupts (\r
289 VOID\r
290 );\r
291\r
292UINTN\r
293EFIAPI\r
294ArmDisableInterrupts (\r
295 VOID\r
296 );\r
47585ed5 297\r
1e57a462 298BOOLEAN\r
299EFIAPI\r
300ArmGetInterruptState (\r
301 VOID\r
302 );\r
303\r
0ff0e414
OM
304VOID\r
305EFIAPI\r
306ArmEnableAsynchronousAbort (\r
307 VOID\r
308 );\r
309\r
47585ed5 310UINTN\r
311EFIAPI\r
0ff0e414 312ArmDisableAsynchronousAbort (\r
47585ed5 313 VOID\r
314 );\r
315\r
316VOID\r
317EFIAPI\r
318ArmEnableIrq (\r
319 VOID\r
320 );\r
321\r
0ff0e414
OM
322UINTN\r
323EFIAPI\r
324ArmDisableIrq (\r
325 VOID\r
326 );\r
327\r
1e57a462 328VOID\r
329EFIAPI\r
330ArmEnableFiq (\r
331 VOID\r
332 );\r
333\r
334UINTN\r
335EFIAPI\r
336ArmDisableFiq (\r
337 VOID\r
338 );\r
3402aac7 339\r
1e57a462 340BOOLEAN\r
341EFIAPI\r
342ArmGetFiqState (\r
343 VOID\r
344 );\r
345\r
8dd618d2
OM
346/**\r
347 * Invalidate Data and Instruction TLBs\r
348 */\r
1e57a462 349VOID\r
350EFIAPI\r
351ArmInvalidateTlb (\r
352 VOID\r
353 );\r
3402aac7 354\r
1e57a462 355VOID\r
356EFIAPI\r
357ArmUpdateTranslationTableEntry (\r
429309e0
MK
358 IN VOID *TranslationTableEntry,\r
359 IN VOID *Mva\r
1e57a462 360 );\r
3402aac7 361\r
1e57a462 362VOID\r
363EFIAPI\r
364ArmSetDomainAccessControl (\r
365 IN UINT32 Domain\r
366 );\r
367\r
368VOID\r
369EFIAPI\r
370ArmSetTTBR0 (\r
371 IN VOID *TranslationTableBase\r
372 );\r
373\r
ff1f27c0
EL
374VOID\r
375EFIAPI\r
376ArmSetTTBCR (\r
429309e0 377 IN UINT32 Bits\r
ff1f27c0
EL
378 );\r
379\r
1e57a462 380VOID *\r
381EFIAPI\r
382ArmGetTTBR0BaseAddress (\r
383 VOID\r
384 );\r
385\r
1e57a462 386BOOLEAN\r
387EFIAPI\r
388ArmMmuEnabled (\r
389 VOID\r
390 );\r
3402aac7 391\r
1e57a462 392VOID\r
393EFIAPI\r
394ArmEnableBranchPrediction (\r
395 VOID\r
396 );\r
397\r
398VOID\r
399EFIAPI\r
400ArmDisableBranchPrediction (\r
401 VOID\r
402 );\r
403\r
404VOID\r
405EFIAPI\r
406ArmSetLowVectors (\r
407 VOID\r
408 );\r
409\r
410VOID\r
411EFIAPI\r
412ArmSetHighVectors (\r
413 VOID\r
414 );\r
415\r
416VOID\r
417EFIAPI\r
418ArmDataMemoryBarrier (\r
419 VOID\r
420 );\r
3402aac7 421\r
1e57a462 422VOID\r
423EFIAPI\r
cf93a378 424ArmDataSynchronizationBarrier (\r
1e57a462 425 VOID\r
426 );\r
3402aac7 427\r
1e57a462 428VOID\r
429EFIAPI\r
430ArmInstructionSynchronizationBarrier (\r
431 VOID\r
432 );\r
433\r
434VOID\r
435EFIAPI\r
436ArmWriteVBar (\r
429309e0 437 IN UINTN VectorBase\r
1e57a462 438 );\r
439\r
4e57d6d7 440UINTN\r
1e57a462 441EFIAPI\r
442ArmReadVBar (\r
443 VOID\r
444 );\r
445\r
446VOID\r
447EFIAPI\r
448ArmWriteAuxCr (\r
429309e0 449 IN UINT32 Bit\r
1e57a462 450 );\r
451\r
452UINT32\r
453EFIAPI\r
454ArmReadAuxCr (\r
455 VOID\r
456 );\r
457\r
458VOID\r
459EFIAPI\r
460ArmSetAuxCrBit (\r
429309e0 461 IN UINT32 Bits\r
1e57a462 462 );\r
463\r
464VOID\r
465EFIAPI\r
466ArmUnsetAuxCrBit (\r
429309e0 467 IN UINT32 Bits\r
1e57a462 468 );\r
469\r
470VOID\r
471EFIAPI\r
472ArmCallSEV (\r
473 VOID\r
474 );\r
475\r
476VOID\r
477EFIAPI\r
478ArmCallWFE (\r
479 VOID\r
480 );\r
481\r
482VOID\r
483EFIAPI\r
484ArmCallWFI (\r
25402f5d 485\r
1e57a462 486 VOID\r
487 );\r
488\r
489UINTN\r
490EFIAPI\r
491ArmReadMpidr (\r
492 VOID\r
493 );\r
494\r
9401d6f4
OM
495UINTN\r
496EFIAPI\r
497ArmReadMidr (\r
498 VOID\r
499 );\r
500\r
1e57a462 501UINT32\r
502EFIAPI\r
503ArmReadCpacr (\r
504 VOID\r
505 );\r
506\r
507VOID\r
508EFIAPI\r
509ArmWriteCpacr (\r
429309e0 510 IN UINT32 Access\r
1e57a462 511 );\r
512\r
513VOID\r
514EFIAPI\r
515ArmEnableVFP (\r
516 VOID\r
517 );\r
518\r
46d4d75c
OM
519/**\r
520 Get the Secure Configuration Register value\r
521\r
522 @return Value read from the Secure Configuration Register\r
523\r
524**/\r
1e57a462 525UINT32\r
526EFIAPI\r
527ArmReadScr (\r
528 VOID\r
529 );\r
530\r
46d4d75c
OM
531/**\r
532 Set the Secure Configuration Register\r
533\r
534 @param Value Value to write to the Secure Configuration Register\r
535\r
536**/\r
1e57a462 537VOID\r
538EFIAPI\r
539ArmWriteScr (\r
429309e0 540 IN UINT32 Value\r
1e57a462 541 );\r
542\r
543UINT32\r
544EFIAPI\r
545ArmReadMVBar (\r
546 VOID\r
547 );\r
548\r
549VOID\r
550EFIAPI\r
551ArmWriteMVBar (\r
429309e0 552 IN UINT32 VectorMonitorBase\r
1e57a462 553 );\r
554\r
555UINT32\r
556EFIAPI\r
557ArmReadSctlr (\r
558 VOID\r
559 );\r
560\r
1e1d1697
MZ
561VOID\r
562EFIAPI\r
563ArmWriteSctlr (\r
429309e0 564 IN UINT32 Value\r
1e1d1697
MZ
565 );\r
566\r
5ea2c2d3 567UINTN\r
568EFIAPI\r
569ArmReadHVBar (\r
570 VOID\r
571 );\r
572\r
573VOID\r
574EFIAPI\r
575ArmWriteHVBar (\r
429309e0 576 IN UINTN HypModeVectorBase\r
5ea2c2d3 577 );\r
578\r
52d44f77
OM
579//\r
580// Helper functions for accessing CPU ACTLR\r
581//\r
582\r
583UINTN\r
584EFIAPI\r
585ArmReadCpuActlr (\r
586 VOID\r
587 );\r
588\r
589VOID\r
590EFIAPI\r
591ArmWriteCpuActlr (\r
429309e0 592 IN UINTN Val\r
52d44f77
OM
593 );\r
594\r
595VOID\r
596EFIAPI\r
597ArmSetCpuActlrBit (\r
429309e0 598 IN UINTN Bits\r
52d44f77
OM
599 );\r
600\r
601VOID\r
602EFIAPI\r
603ArmUnsetCpuActlrBit (\r
429309e0 604 IN UINTN Bits\r
52d44f77
OM
605 );\r
606\r
734bd6cc
AB
607//\r
608// Accessors for the architected generic timer registers\r
609//\r
610\r
429309e0
MK
611#define ARM_ARCH_TIMER_ENABLE (1 << 0)\r
612#define ARM_ARCH_TIMER_IMASK (1 << 1)\r
613#define ARM_ARCH_TIMER_ISTATUS (1 << 2)\r
734bd6cc
AB
614\r
615UINTN\r
616EFIAPI\r
617ArmReadCntFrq (\r
618 VOID\r
619 );\r
620\r
621VOID\r
622EFIAPI\r
623ArmWriteCntFrq (\r
429309e0 624 UINTN FreqInHz\r
734bd6cc
AB
625 );\r
626\r
627UINT64\r
628EFIAPI\r
629ArmReadCntPct (\r
630 VOID\r
631 );\r
632\r
633UINTN\r
634EFIAPI\r
635ArmReadCntkCtl (\r
636 VOID\r
637 );\r
638\r
639VOID\r
640EFIAPI\r
641ArmWriteCntkCtl (\r
429309e0 642 UINTN Val\r
734bd6cc
AB
643 );\r
644\r
645UINTN\r
646EFIAPI\r
647ArmReadCntpTval (\r
648 VOID\r
649 );\r
650\r
651VOID\r
652EFIAPI\r
653ArmWriteCntpTval (\r
429309e0 654 UINTN Val\r
734bd6cc
AB
655 );\r
656\r
657UINTN\r
658EFIAPI\r
659ArmReadCntpCtl (\r
660 VOID\r
661 );\r
662\r
663VOID\r
664EFIAPI\r
665ArmWriteCntpCtl (\r
429309e0 666 UINTN Val\r
734bd6cc
AB
667 );\r
668\r
669UINTN\r
670EFIAPI\r
671ArmReadCntvTval (\r
672 VOID\r
673 );\r
674\r
675VOID\r
676EFIAPI\r
677ArmWriteCntvTval (\r
429309e0 678 UINTN Val\r
734bd6cc
AB
679 );\r
680\r
681UINTN\r
682EFIAPI\r
683ArmReadCntvCtl (\r
684 VOID\r
685 );\r
686\r
687VOID\r
688EFIAPI\r
689ArmWriteCntvCtl (\r
429309e0 690 UINTN Val\r
734bd6cc
AB
691 );\r
692\r
693UINT64\r
694EFIAPI\r
695ArmReadCntvCt (\r
696 VOID\r
697 );\r
698\r
699UINT64\r
700EFIAPI\r
701ArmReadCntpCval (\r
702 VOID\r
703 );\r
704\r
705VOID\r
706EFIAPI\r
707ArmWriteCntpCval (\r
429309e0 708 UINT64 Val\r
734bd6cc
AB
709 );\r
710\r
711UINT64\r
712EFIAPI\r
713ArmReadCntvCval (\r
714 VOID\r
715 );\r
716\r
717VOID\r
718EFIAPI\r
719ArmWriteCntvCval (\r
429309e0 720 UINT64 Val\r
734bd6cc
AB
721 );\r
722\r
723UINT64\r
724EFIAPI\r
725ArmReadCntvOff (\r
726 VOID\r
727 );\r
728\r
729VOID\r
730EFIAPI\r
731ArmWriteCntvOff (\r
429309e0 732 UINT64 Val\r
734bd6cc
AB
733 );\r
734\r
95d04ebc
AB
735UINTN\r
736EFIAPI\r
737ArmGetPhysicalAddressBits (\r
738 VOID\r
739 );\r
740\r
5cc25cff
LL
741///\r
742/// ID Register Helper functions\r
743///\r
744\r
745/**\r
746 Check whether the CPU supports the GIC system register interface (any version)\r
747\r
748 @return Whether GIC System Register Interface is supported\r
749\r
750**/\r
751BOOLEAN\r
752EFIAPI\r
753ArmHasGicSystemRegisters (\r
754 VOID\r
755 );\r
756\r
6e131aff
RC
757/** Checks if CCIDX is implemented.\r
758\r
759 @retval TRUE CCIDX is implemented.\r
760 @retval FALSE CCIDX is not implemented.\r
761**/\r
762BOOLEAN\r
763EFIAPI\r
764ArmHasCcidx (\r
765 VOID\r
766 );\r
767\r
740b870d
LL
768#ifdef MDE_CPU_ARM\r
769///\r
770/// AArch32-only ID Register Helper functions\r
771///\r
429309e0 772\r
740b870d
LL
773/**\r
774 Check whether the CPU supports the Security extensions\r
775\r
776 @return Whether the Security extensions are implemented\r
777\r
778**/\r
779BOOLEAN\r
780EFIAPI\r
781ArmHasSecurityExtensions (\r
782 VOID\r
783 );\r
429309e0 784\r
740b870d
LL
785#endif // MDE_CPU_ARM\r
786\r
cc15a619 787#endif // ARM_LIB_H_\r