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