]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - ArmPkg/Drivers/PL390Gic/PL390GicNonSec.c
ArmPkg: Minor coding style changes
[mirror_edk2.git] / ArmPkg / Drivers / PL390Gic / PL390GicNonSec.c
... / ...
CommitLineData
1/** @file\r
2*\r
3* Copyright (c) 2011, 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
15#include <Uefi.h>\r
16#include <Library/IoLib.h>\r
17#include <Drivers/PL390Gic.h>\r
18\r
19\r
20VOID\r
21EFIAPI\r
22PL390GicEnableInterruptInterface (\r
23 IN INTN GicInterruptInterfaceBase\r
24 )\r
25{ \r
26 /*\r
27 * Enable the CPU interface in Non-Secure world\r
28 * Note: The ICCICR register is banked when Security extensions are implemented\r
29 */\r
30 MmioWrite32 (GicInterruptInterfaceBase + GIC_ICCICR,0x00000001);\r
31}\r
32\r
33VOID\r
34EFIAPI\r
35PL390GicEnableDistributor (\r
36 IN INTN GicDistributorBase\r
37 )\r
38{\r
39 /*\r
40 * Enable GIC distributor in Non-Secure world.\r
41 * Note: The ICDDCR register is banked when Security extensions are implemented\r
42 */\r
43 MmioWrite32 (GicDistributorBase + GIC_ICDDCR, 0x00000001);\r
44}\r
45\r
46VOID\r
47EFIAPI\r
48PL390GicSendSgiTo (\r
49 IN INTN GicDistributorBase,\r
50 IN INTN TargetListFilter,\r
51 IN INTN CPUTargetList\r
52 )\r
53{\r
54 MmioWrite32 (GicDistributorBase + GIC_ICDSGIR, ((TargetListFilter & 0x3) << 24) | ((CPUTargetList & 0xFF) << 16));\r
55}\r
56\r
57UINT32\r
58EFIAPI\r
59PL390GicAcknowledgeSgiFrom (\r
60 IN INTN GicInterruptInterfaceBase,\r
61 IN INTN CoreId\r
62 )\r
63{\r
64 INTN InterruptId;\r
65\r
66 InterruptId = MmioRead32 (GicInterruptInterfaceBase + GIC_ICCIAR);\r
67\r
68 // Check if the Interrupt ID is valid, The read from Interrupt Ack register returns CPU ID and Interrupt ID\r
69 if (((CoreId & 0x7) << 10) == (InterruptId & 0x1C00)) {\r
70 // Got SGI number 0 hence signal End of Interrupt by writing to ICCEOIR\r
71 MmioWrite32 (GicInterruptInterfaceBase + GIC_ICCEIOR, InterruptId);\r
72 return 1;\r
73 } else {\r
74 return 0;\r
75 }\r
76}\r
77\r
78UINT32\r
79EFIAPI\r
80PL390GicAcknowledgeSgi2From (\r
81 IN INTN GicInterruptInterfaceBase,\r
82 IN INTN CoreId,\r
83 IN INTN SgiId\r
84 )\r
85{\r
86 INTN InterruptId;\r
87\r
88 InterruptId = MmioRead32(GicInterruptInterfaceBase + GIC_ICCIAR);\r
89\r
90 // Check if the Interrupt ID is valid, The read from Interrupt Ack register returns CPU ID and Interrupt ID\r
91 if((((CoreId & 0x7) << 10) | (SgiId & 0x3FF)) == (InterruptId & 0x1FFF)) {\r
92 // Got SGI number 0 hence signal End of Interrupt by writing to ICCEOIR\r
93 MmioWrite32 (GicInterruptInterfaceBase + GIC_ICCEIOR, InterruptId);\r
94 return 1;\r
95 } else {\r
96 return 0;\r
97 }\r
98}\r