]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPkg/Drivers/ArmGic/ArmGicLib.c
ArmPkg/ArmGic: Moved ArmGicDisableDistributor() to ArmGicLib.c
[mirror_edk2.git] / ArmPkg / Drivers / ArmGic / ArmGicLib.c
CommitLineData
397bdc99
OM
1/** @file\r
2*\r
3* Copyright (c) 2011-2014, ARM Limited. All rights reserved.\r
4*\r
5* This program and the accompanying materials\r
6* are licensed and made available under the terms and conditions of the BSD License\r
7* which accompanies this distribution. The full text of the license may be found at\r
8* http://opensource.org/licenses/bsd-license.php\r
9*\r
10* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12*\r
13**/\r
14\r
60775c51 15#include <Base.h>\r
397bdc99 16#include <Library/ArmGicLib.h>\r
60775c51 17#include <Library/IoLib.h>\r
397bdc99
OM
18\r
19UINTN\r
20EFIAPI\r
21ArmGicGetInterfaceIdentification (\r
22 IN INTN GicInterruptInterfaceBase\r
23 )\r
24{\r
25 // Read the GIC Identification Register\r
26 return MmioRead32 (GicInterruptInterfaceBase + ARM_GIC_ICCIIDR);\r
27}\r
28\r
29UINTN\r
30EFIAPI\r
31ArmGicGetMaxNumInterrupts (\r
32 IN INTN GicDistributorBase\r
33 )\r
34{\r
35 return 32 * ((MmioRead32 (GicDistributorBase + ARM_GIC_ICDICTR) & 0x1F) + 1);\r
36}\r
37\r
38VOID\r
39EFIAPI\r
40ArmGicSendSgiTo (\r
41 IN INTN GicDistributorBase,\r
42 IN INTN TargetListFilter,\r
43 IN INTN CPUTargetList,\r
44 IN INTN SgiId\r
45 )\r
46{\r
47 MmioWrite32 (GicDistributorBase + ARM_GIC_ICDSGIR, ((TargetListFilter & 0x3) << 24) | ((CPUTargetList & 0xFF) << 16) | SgiId);\r
48}\r
49\r
50UINTN\r
51EFIAPI\r
52ArmGicAcknowledgeInterrupt (\r
53 IN UINTN GicInterruptInterfaceBase\r
54 )\r
55{\r
56 // Read the Interrupt Acknowledge Register\r
57 return MmioRead32 (GicInterruptInterfaceBase + ARM_GIC_ICCIAR);\r
58}\r
59\r
60VOID\r
61EFIAPI\r
62ArmGicEndOfInterrupt (\r
63 IN UINTN GicInterruptInterfaceBase,\r
64 IN UINTN Source\r
65 )\r
66{\r
67 MmioWrite32 (GicInterruptInterfaceBase + ARM_GIC_ICCEIOR, Source);\r
68}\r
69\r
70VOID\r
71EFIAPI\r
72ArmGicEnableInterrupt (\r
73 IN UINTN GicDistributorBase,\r
74 IN UINTN Source\r
75 )\r
76{\r
77 UINT32 RegOffset;\r
78 UINTN RegShift;\r
79\r
80 // Calculate enable register offset and bit position\r
81 RegOffset = Source / 32;\r
82 RegShift = Source % 32;\r
83\r
84 // Write set-enable register\r
85 MmioWrite32 (GicDistributorBase + ARM_GIC_ICDISER + (4 * RegOffset), 1 << RegShift);\r
86}\r
87\r
88VOID\r
89EFIAPI\r
90ArmGicDisableInterrupt (\r
91 IN UINTN GicDistributorBase,\r
92 IN UINTN Source\r
93 )\r
94{\r
95 UINT32 RegOffset;\r
96 UINTN RegShift;\r
97\r
98 // Calculate enable register offset and bit position\r
99 RegOffset = Source / 32;\r
100 RegShift = Source % 32;\r
101\r
102 // Write clear-enable register\r
103 MmioWrite32 (GicDistributorBase + ARM_GIC_ICDICER + (4 * RegOffset), 1 << RegShift);\r
104}\r
105\r
106BOOLEAN\r
107EFIAPI\r
108ArmGicIsInterruptEnabled (\r
109 IN UINTN GicDistributorBase,\r
110 IN UINTN Source\r
111 )\r
112{\r
113 UINT32 RegOffset;\r
114 UINTN RegShift;\r
115\r
116 // Calculate enable register offset and bit position\r
117 RegOffset = Source / 32;\r
118 RegShift = Source % 32;\r
119\r
120 return ((MmioRead32 (GicDistributorBase + ARM_GIC_ICDISER + (4 * RegOffset)) & (1 << RegShift)) != 0);\r
121}\r
60775c51
OM
122\r
123VOID\r
124EFIAPI\r
125ArmGicDisableDistributor (\r
126 IN INTN GicDistributorBase\r
127 )\r
128{\r
129 // Disable Gic Distributor\r
130 MmioWrite32 (GicDistributorBase + ARM_GIC_ICDDCR, 0x0);\r
131}\r