xref: /arm-trusted-firmware/drivers/arm/gic/common/gic_common_private.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved.
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu  */
6*91f16700Schasinglulu 
7*91f16700Schasinglulu #ifndef GIC_COMMON_PRIVATE_H
8*91f16700Schasinglulu #define GIC_COMMON_PRIVATE_H
9*91f16700Schasinglulu 
10*91f16700Schasinglulu #include <stdint.h>
11*91f16700Schasinglulu 
12*91f16700Schasinglulu #include <drivers/arm/gic_common.h>
13*91f16700Schasinglulu #include <lib/mmio.h>
14*91f16700Schasinglulu 
15*91f16700Schasinglulu /*******************************************************************************
16*91f16700Schasinglulu  * GIC Distributor interface register accessors that are common to GICv3 & GICv2
17*91f16700Schasinglulu  ******************************************************************************/
18*91f16700Schasinglulu static inline unsigned int gicd_read_ctlr(uintptr_t base)
19*91f16700Schasinglulu {
20*91f16700Schasinglulu 	return mmio_read_32(base + GICD_CTLR);
21*91f16700Schasinglulu }
22*91f16700Schasinglulu 
23*91f16700Schasinglulu static inline unsigned int gicd_read_typer(uintptr_t base)
24*91f16700Schasinglulu {
25*91f16700Schasinglulu 	return mmio_read_32(base + GICD_TYPER);
26*91f16700Schasinglulu }
27*91f16700Schasinglulu 
28*91f16700Schasinglulu static inline unsigned int gicd_read_iidr(uintptr_t base)
29*91f16700Schasinglulu {
30*91f16700Schasinglulu 	return mmio_read_32(base + GICD_IIDR);
31*91f16700Schasinglulu }
32*91f16700Schasinglulu 
33*91f16700Schasinglulu static inline void gicd_write_ctlr(uintptr_t base, unsigned int val)
34*91f16700Schasinglulu {
35*91f16700Schasinglulu 	mmio_write_32(base + GICD_CTLR, val);
36*91f16700Schasinglulu }
37*91f16700Schasinglulu 
38*91f16700Schasinglulu /*******************************************************************************
39*91f16700Schasinglulu  * GIC Distributor function prototypes for accessing entire registers.
40*91f16700Schasinglulu  * Note: The raw register values correspond to multiple interrupt IDs and
41*91f16700Schasinglulu  * the number of interrupt IDs involved depends on the register accessed.
42*91f16700Schasinglulu  ******************************************************************************/
43*91f16700Schasinglulu unsigned int gicd_read_igroupr(uintptr_t base, unsigned int id);
44*91f16700Schasinglulu unsigned int gicd_read_isenabler(uintptr_t base, unsigned int id);
45*91f16700Schasinglulu unsigned int gicd_read_icenabler(uintptr_t base, unsigned int id);
46*91f16700Schasinglulu unsigned int gicd_read_ispendr(uintptr_t base, unsigned int id);
47*91f16700Schasinglulu unsigned int gicd_read_icpendr(uintptr_t base, unsigned int id);
48*91f16700Schasinglulu unsigned int gicd_read_isactiver(uintptr_t base, unsigned int id);
49*91f16700Schasinglulu unsigned int gicd_read_icactiver(uintptr_t base, unsigned int id);
50*91f16700Schasinglulu unsigned int gicd_read_ipriorityr(uintptr_t base, unsigned int id);
51*91f16700Schasinglulu unsigned int gicd_read_icfgr(uintptr_t base, unsigned int id);
52*91f16700Schasinglulu unsigned int gicd_read_nsacr(uintptr_t base, unsigned int id);
53*91f16700Schasinglulu unsigned int gicd_read_spendsgir(uintptr_t base, unsigned int id);
54*91f16700Schasinglulu unsigned int gicd_read_cpendsgir(uintptr_t base, unsigned int id);
55*91f16700Schasinglulu unsigned int gicd_read_itargetsr(uintptr_t base, unsigned int id);
56*91f16700Schasinglulu void gicd_write_igroupr(uintptr_t base, unsigned int id, unsigned int val);
57*91f16700Schasinglulu void gicd_write_isenabler(uintptr_t base, unsigned int id, unsigned int val);
58*91f16700Schasinglulu void gicd_write_icenabler(uintptr_t base, unsigned int id, unsigned int val);
59*91f16700Schasinglulu void gicd_write_ispendr(uintptr_t base, unsigned int id, unsigned int val);
60*91f16700Schasinglulu void gicd_write_icpendr(uintptr_t base, unsigned int id, unsigned int val);
61*91f16700Schasinglulu void gicd_write_isactiver(uintptr_t base, unsigned int id, unsigned int val);
62*91f16700Schasinglulu void gicd_write_icactiver(uintptr_t base, unsigned int id, unsigned int val);
63*91f16700Schasinglulu void gicd_write_ipriorityr(uintptr_t base, unsigned int id, unsigned int val);
64*91f16700Schasinglulu void gicd_write_icfgr(uintptr_t base, unsigned int id, unsigned int val);
65*91f16700Schasinglulu void gicd_write_nsacr(uintptr_t base, unsigned int id, unsigned int val);
66*91f16700Schasinglulu void gicd_write_spendsgir(uintptr_t base, unsigned int id, unsigned int val);
67*91f16700Schasinglulu void gicd_write_cpendsgir(uintptr_t base, unsigned int id, unsigned int val);
68*91f16700Schasinglulu void gicd_write_itargetsr(uintptr_t base, unsigned int id, unsigned int val);
69*91f16700Schasinglulu 
70*91f16700Schasinglulu /*******************************************************************************
71*91f16700Schasinglulu  * GIC Distributor function prototypes for accessing the GIC registers
72*91f16700Schasinglulu  * corresponding to a single interrupt ID. These functions use bitwise
73*91f16700Schasinglulu  * operations or appropriate register accesses to modify or return
74*91f16700Schasinglulu  * the bit-field corresponding the single interrupt ID.
75*91f16700Schasinglulu  ******************************************************************************/
76*91f16700Schasinglulu unsigned int gicd_get_igroupr(uintptr_t base, unsigned int id);
77*91f16700Schasinglulu void gicd_set_igroupr(uintptr_t base, unsigned int id);
78*91f16700Schasinglulu void gicd_clr_igroupr(uintptr_t base, unsigned int id);
79*91f16700Schasinglulu void gicd_set_isenabler(uintptr_t base, unsigned int id);
80*91f16700Schasinglulu void gicd_set_icenabler(uintptr_t base, unsigned int id);
81*91f16700Schasinglulu void gicd_set_ispendr(uintptr_t base, unsigned int id);
82*91f16700Schasinglulu void gicd_set_icpendr(uintptr_t base, unsigned int id);
83*91f16700Schasinglulu unsigned int gicd_get_isactiver(uintptr_t base, unsigned int id);
84*91f16700Schasinglulu void gicd_set_isactiver(uintptr_t base, unsigned int id);
85*91f16700Schasinglulu void gicd_set_icactiver(uintptr_t base, unsigned int id);
86*91f16700Schasinglulu void gicd_set_ipriorityr(uintptr_t base, unsigned int id, unsigned int pri);
87*91f16700Schasinglulu void gicd_set_icfgr(uintptr_t base, unsigned int id, unsigned int cfg);
88*91f16700Schasinglulu 
89*91f16700Schasinglulu #endif /* GIC_COMMON_PRIVATE_H */
90