pic-gic-common.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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. #ifndef __PIC_GIC_COMMON_H__
  11. #define __PIC_GIC_COMMON_H__
  12. #include <rtdef.h>
  13. #ifdef RT_PCI_MSI
  14. #include <drivers/pci_msi.h>
  15. #endif
  16. #include <drivers/ofw.h>
  17. #define GIC_SGI_NR 16
  18. #define GICD_INT_DEF_PRI 0xa0U
  19. #define GICD_INT_DEF_PRI_X4 \
  20. ( \
  21. (GICD_INT_DEF_PRI << 24) | \
  22. (GICD_INT_DEF_PRI << 16) | \
  23. (GICD_INT_DEF_PRI << 8) | \
  24. GICD_INT_DEF_PRI \
  25. )
  26. struct gic_quirk
  27. {
  28. const char *desc;
  29. const char *compatible;
  30. rt_err_t (*init)(void *data);
  31. rt_uint32_t iidr;
  32. rt_uint32_t iidr_mask;
  33. };
  34. void gic_common_init_quirk_ofw(const struct rt_ofw_node *ic_np, const struct gic_quirk *quirks, void *data);
  35. void gic_common_init_quirk_hw(rt_uint32_t iidr, const struct gic_quirk *quirks, void *data);
  36. void gic_common_sgi_config(void *base, void *data, int irq_base);
  37. rt_err_t gic_common_configure_irq(void *base, int irq, rt_uint32_t mode, void (*sync_access)(void *), void *data);
  38. void gic_common_dist_config(void *base, int max_irqs, void (*sync_access)(void *), void *data);
  39. void gic_common_cpu_config(void *base, int nr, void (*sync_access)(void *), void *data);
  40. void gic_fill_ppi_affinity(rt_bitmap_t *affinity);
  41. #ifdef RT_PIC_ARM_GIC_V2M
  42. rt_err_t gicv2m_ofw_probe(struct rt_ofw_node *ic_np, const struct rt_ofw_node_id *id);
  43. #endif
  44. #ifdef RT_PIC_ARM_GIC_V3_ITS
  45. rt_err_t gicv3_its_ofw_probe(struct rt_ofw_node *ic_np, const struct rt_ofw_node_id *id);
  46. #endif
  47. #endif /* __PIC_GIC_COMMON_H__ */