1 /* 2 * Copyright (c) 2006-2023, RT-Thread Development Team 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 * 6 * Change Logs: 7 * Date Author Notes 8 * 2023-01-30 GuEe-GUI first version 9 */ 10 11 #ifndef __PIC_GIC_COMMON_H__ 12 #define __PIC_GIC_COMMON_H__ 13 14 #include <rtdef.h> 15 16 #ifdef RT_PCI_MSI 17 #include <drivers/pci_msi.h> 18 #endif 19 #include <drivers/ofw.h> 20 21 #define GIC_SGI_NR 16 22 23 #define GICD_INT_DEF_PRI 0xa0U 24 #define GICD_INT_DEF_PRI_X4 \ 25 ( \ 26 (GICD_INT_DEF_PRI << 24) | \ 27 (GICD_INT_DEF_PRI << 16) | \ 28 (GICD_INT_DEF_PRI << 8) | \ 29 GICD_INT_DEF_PRI \ 30 ) 31 32 struct gic_quirk 33 { 34 const char *desc; 35 const char *compatible; 36 rt_err_t (*init)(void *data); 37 38 rt_uint32_t iidr; 39 rt_uint32_t iidr_mask; 40 }; 41 42 void gic_common_init_quirk_ofw(const struct rt_ofw_node *ic_np, const struct gic_quirk *quirks, void *data); 43 void gic_common_init_quirk_hw(rt_uint32_t iidr, const struct gic_quirk *quirks, void *data); 44 45 void gic_common_sgi_config(void *base, void *data, int irq_base); 46 rt_err_t gic_common_configure_irq(void *base, int irq, rt_uint32_t mode, void (*sync_access)(void *), void *data); 47 void gic_common_dist_config(void *base, int max_irqs, void (*sync_access)(void *), void *data); 48 void gic_common_cpu_config(void *base, int nr, void (*sync_access)(void *), void *data); 49 50 void gic_fill_ppi_affinity(rt_bitmap_t *affinity); 51 52 #ifdef RT_PIC_ARM_GIC_V2M 53 rt_err_t gicv2m_ofw_probe(struct rt_ofw_node *ic_np, const struct rt_ofw_node_id *id); 54 #endif 55 #ifdef RT_PIC_ARM_GIC_V3_ITS 56 rt_err_t gicv3_its_ofw_probe(struct rt_ofw_node *ic_np, const struct rt_ofw_node_id *id); 57 #endif 58 59 #endif /* __PIC_GIC_COMMON_H__ */ 60