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 drivers: add GIC V3 driver 2020-05-07 14:22:53 +02:00
Kconfig
Kconfig.cavs
Kconfig.dw
Kconfig.gic
Kconfig.loapic
Kconfig.multilevel
Kconfig.multilevel.aggregator_template
Kconfig.rv32m1
Kconfig.sam0
Kconfig.shared_irq
Kconfig.stm32 drivers/exti: stm32: Add support for STM32L5 series 2020-05-08 00:34:34 -05:00
intc_arcv2_irq_unit.c
intc_cavs.c devicetree: allow access to all nodes 2020-05-08 19:37:18 -05:00
intc_cavs.h
intc_dw.c device: Fix structure attributes access 2020-05-08 23:07:44 +02:00
intc_dw.h
intc_exti_stm32.c drivers/exti: stm32: Add support for STM32L5 series 2020-05-08 00:34:34 -05:00
intc_gic.c drivers: add GIC V3 driver 2020-05-07 14:22:53 +02:00
intc_gic_common_priv.h drivers: add GIC V3 driver 2020-05-07 14:22:53 +02:00
intc_gicv3.c drivers: add GIC V3 driver 2020-05-07 14:22:53 +02:00
intc_gicv3_priv.h drivers: add GIC V3 driver 2020-05-07 14:22:53 +02:00
intc_ioapic.c interrupt_controller: device driver can configure IO APIC delivery mode 2020-05-08 22:32:39 -04:00
intc_ioapic_priv.h
intc_loapic.c interrupt_controller: program local APIC LDR register for xAPIC 2020-05-08 22:32:39 -04:00
intc_loapic_spurious.S
intc_plic.c
intc_rv32m1_intmux.c device: Fix structure attributes access 2020-05-08 23:07:44 +02:00
intc_sam0_eic.c
intc_sam0_eic_priv.h
intc_shared_irq.c device: Fix structure attributes access 2020-05-08 23:07:44 +02:00
intc_swerv_pic.c
intc_system_apic.c
intc_vexriscv_litex.c