zephyr/drivers/interrupt_controller
Zide Chen e8b6b86704 interrupt_controller: device driver can configure IO APIC delivery mode
Currently all IO APIC interrupts are configured at fixed delivery mode,
which is good for HEPT timer interrupt but it imposes burdens to
device drivers to properly handle the repeated interrupt sent to all
processors.

This patch makes it more flexible so that device drivers can specify
the delivery mode it desires in the IRQ connect APIs.

- Don't hard code IOAPIC_FIXED in z_ioapic_irq_set(), meaning the
  IRQ delivery mode is passed in from the 'flags' argument and
  individual device driver needs to choose delivery mode for its own
  IO APIC interrupt.

- To support different delivery mode in different IO APIC interrupts,
  need to save and restore RTE[10:8] during IOAPIC suspend and resume.

If device driver doesn't pass either IOAPIC_FIXED or IOAPIC_LOWEST
in IRQ_CONNECT()/irq_connect_dynamic() alike APIs, the delivery mode
bit fields in the target RTE register are '0' which implies fixed mode.
If the device driver wants the interrupt to be delivered to one CPU
only, it needs to explicitly specify IOAPIC_LOWEST in one of the IRQ
connect APIs.

Signed-off-by: Zide Chen <zide.chen@intel.com>
2020-05-08 22:32:39 -04:00
..
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_common_priv.h
intc_gic.c
intc_gicv3_priv.h
intc_gicv3.c
intc_ioapic_priv.h
intc_ioapic.c
intc_loapic_spurious.S
intc_loapic.c
intc_plic.c
intc_rv32m1_intmux.c
intc_sam0_eic_priv.h
intc_sam0_eic.c
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