50519ce7ba
The current Generic Interrupt Controller (GIC) driver makes use of the multi-level interrupt mechanism and `irq_nextlevel` public interface. This is a less-than-ideal implementation for the following reasons: 1. The GIC is often used as the main interrupt controller for the Cortex-A and Cortex-R family SoCs and, in this case, it is not a 2nd level interrupt controller; in fact, it is the root interrupt controller and therefore should be treated as such. 2. The only reason for using `irq_nextlevel` here is to interface the architecture implementation to the interrupt controller functions. Since there is no nesting or multiple instances of an interrupt controller involved, there is really no point in adding such an abstraction. 3. 2nd level topology adds many unnecessary abstractions and results in strange coding artefacts as well as performance penalty due to additional branching. This commit refactors the GIC driver interface as follows: 1. Remove the current GIC driver interface based on the multi-level interrupt mechanism and the `irq_nextlevel` public interface. 2. Define the GIC driver interface in `include/drivers/interrupt_controller/gic.h` and allow the arch implementation to directly invoke this interface. Signed-off-by: Stephanos Ioannidis <root@stephanos.io> |
||
---|---|---|
.. | ||
CMakeLists.txt | ||
intc_arcv2_irq_unit.c | ||
intc_cavs.c | ||
intc_cavs.h | ||
intc_dw.c | ||
intc_dw.h | ||
intc_exti_stm32.c | ||
intc_gic.c | ||
intc_ioapic.c | ||
intc_ioapic_priv.h | ||
intc_loapic.c | ||
intc_loapic_spurious.S | ||
intc_plic.c | ||
intc_rv32m1_intmux.c | ||
intc_sam0_eic.c | ||
intc_sam0_eic_priv.h | ||
intc_shared_irq.c | ||
intc_swerv_pic.c | ||
intc_system_apic.c | ||
intc_vexriscv_litex.c | ||
Kconfig | ||
Kconfig.cavs | ||
Kconfig.dw | ||
Kconfig.gic | ||
Kconfig.loapic | ||
Kconfig.multilevel | ||
Kconfig.multilevel.aggregator_template | ||
Kconfig.rv32m1 | ||
Kconfig.sam0 | ||
Kconfig.shared_irq | ||
Kconfig.stm32 |