]> git.proxmox.com Git - mirror_edk2.git/blob - ArmPkg/Drivers/ArmGic/GicV3/AArch64/ArmGicV3.S
20f83aa85f3b1887ea1174ba70e516485c40ce6c
[mirror_edk2.git] / ArmPkg / Drivers / ArmGic / GicV3 / AArch64 / ArmGicV3.S
1 #
2 # Copyright (c) 2014, ARM Limited. All rights reserved.
3 #
4 # SPDX-License-Identifier: BSD-2-Clause-Patent
5 #
6 #
7
8 #include <AsmMacroIoLibV8.h>
9
10 #if !defined(__clang__)
11
12 //
13 // Clang versions before v3.6 do not support the GNU extension that allows
14 // system registers outside of the IMPLEMENTATION DEFINED range to be specified
15 // using the generic notation below. However, clang knows these registers by
16 // their architectural names, so it has no need for these aliases anyway.
17 //
18 #define ICC_SRE_EL1 S3_0_C12_C12_5
19 #define ICC_SRE_EL2 S3_4_C12_C9_5
20 #define ICC_SRE_EL3 S3_6_C12_C12_5
21 #define ICC_IGRPEN1_EL1 S3_0_C12_C12_7
22 #define ICC_EOIR1_EL1 S3_0_C12_C12_1
23 #define ICC_IAR1_EL1 S3_0_C12_C12_0
24 #define ICC_PMR_EL1 S3_0_C4_C6_0
25 #define ICC_BPR1_EL1 S3_0_C12_C12_3
26
27 #endif
28
29 //UINT32
30 //EFIAPI
31 //ArmGicV3GetControlSystemRegisterEnable (
32 // VOID
33 // );
34 ASM_FUNC(ArmGicV3GetControlSystemRegisterEnable)
35 EL1_OR_EL2_OR_EL3(x1)
36 1: mrs x0, ICC_SRE_EL1
37 b 4f
38 2: mrs x0, ICC_SRE_EL2
39 b 4f
40 3: mrs x0, ICC_SRE_EL3
41 4: ret
42
43 //VOID
44 //EFIAPI
45 //ArmGicV3SetControlSystemRegisterEnable (
46 // IN UINT32 ControlSystemRegisterEnable
47 // );
48 ASM_FUNC(ArmGicV3SetControlSystemRegisterEnable)
49 EL1_OR_EL2_OR_EL3(x1)
50 1: msr ICC_SRE_EL1, x0
51 b 4f
52 2: msr ICC_SRE_EL2, x0
53 b 4f
54 3: msr ICC_SRE_EL3, x0
55 4: isb
56 ret
57
58 //VOID
59 //ArmGicV3EnableInterruptInterface (
60 // VOID
61 // );
62 ASM_FUNC(ArmGicV3EnableInterruptInterface)
63 mov x0, #1
64 msr ICC_IGRPEN1_EL1, x0
65 ret
66
67 //VOID
68 //ArmGicV3DisableInterruptInterface (
69 // VOID
70 // );
71 ASM_FUNC(ArmGicV3DisableInterruptInterface)
72 mov x0, #0
73 msr ICC_IGRPEN1_EL1, x0
74 ret
75
76 //VOID
77 //ArmGicV3EndOfInterrupt (
78 // IN UINTN InterruptId
79 // );
80 ASM_FUNC(ArmGicV3EndOfInterrupt)
81 msr ICC_EOIR1_EL1, x0
82 ret
83
84 //UINTN
85 //ArmGicV3AcknowledgeInterrupt (
86 // VOID
87 // );
88 ASM_FUNC(ArmGicV3AcknowledgeInterrupt)
89 mrs x0, ICC_IAR1_EL1
90 ret
91
92 //VOID
93 //ArmGicV3SetPriorityMask (
94 // IN UINTN Priority
95 // );
96 ASM_FUNC(ArmGicV3SetPriorityMask)
97 msr ICC_PMR_EL1, x0
98 ret
99
100 //VOID
101 //ArmGicV3SetBinaryPointer (
102 // IN UINTN BinaryPoint
103 // );
104 ASM_FUNC(ArmGicV3SetBinaryPointer)
105 msr ICC_BPR1_EL1, x0
106 ret