# Kconfig - interrupt controller configuration options

#
# Copyright (c) 2015 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0
#


menu "Interrupt Controllers"

config LOAPIC
	bool "LOAPIC"
	default n
	select IOAPIC
	depends on X86
	help
	  This option selects local APIC as the interrupt controller.

config LOAPIC_BASE_ADDRESS
	hex "Local APIC Base Address"
	default 0xFEE00000
	depends on LOAPIC
	help
	  This option specifies the base address of the Local APIC device.

config LOAPIC_SPURIOUS_VECTOR
	bool "Handle LOAPIC spurious interrupts"
	default n
	depends on LOAPIC
	help
	  A special situation may occur when a processor raises its task
	  priority to be greater than or equal to the level of the
	  interrupt for which the processor INTR signal is currently being
	  asserted. If at the time the INTA cycle is issued, the
	  interrupt that was to be dispensed has become masked (programmed
	  by software), the local APIC will deliver a spurious-interrupt
	  vector. Dispensing the spurious-interrupt vector does not affect
	  the ISR, so the handler for this vector should return without an EOI.
	  From x86 manual Volume 3 Section 10.9.

config LOAPIC_SPURIOUS_VECTOR_ID
	int "LOAPIC spurious vector ID"
	default -1
	depends on LOAPIC_SPURIOUS_VECTOR
	help
	  IDT vector to use for spurious LOAPIC interrupts. Note that some
	  arches (P6, Pentium) ignore the low 4 bits and fix them at 0xF.
	  If this value is left at -1 the last entry in the IDT will be used.

config IOAPIC
	bool "IO-APIC"
	default y
	depends on LOAPIC
	help
	  This option signifies that the target has an IO-APIC device. This
	  capability allows IO-APIC-dependent code to be included.

config IOAPIC_DEBUG
	bool "IO-APIC Debugging"
	default n
	depends on IOAPIC
	help
	  Enable debugging for IO-APIC driver.

config IOAPIC_NUM_RTES
	int "Number of Redirection Table Entries available"
	default 24
	depends on IOAPIC
	help
	  This option indicates the maximum number of Redirection Table Entries
	  (RTEs) (one per IRQ available to the IO-APIC) made available to the
	  kernel, regardless of the number provided by the hardware itself. For
	  most efficient usage of memory, it should match the number of IRQ lines
	  needed by devices connected to the IO-APIC.

config IOAPIC_MASK_RTE
	bool "Mask out RTE entries on boot"
	default y
	depends on IOAPIC
	help
	  At boot, mask all IOAPIC RTEs if they may be in an undefined state.
	  You don't need this if the RTEs are either all guaranteed to be masked
	  when the OS starts up, or a previous boot stage has done some IOAPIC
	  configuration that needs to be preserved.

config MVIC
	bool "Intel Quark D2000 Interrupt Controller (MVIC)"
	default n
	depends on X86
	select X86_FIXED_IRQ_MAPPING
	help
	  The MVIC (Intel Quark microcontroller D2000 Interrupt Controller) is
	  configured by default to support 32 external interrupt lines. Unlike the
	  traditional IA LAPIC/IOAPIC, the interrupt vectors in MVIC are fixed and
	  not programmable. In addition, the priorities of these interrupt
	  lines are also fixed.

config MVIC_TIMER_IRQ
	int "IRQ line to use for timer interrupt"
	range 0 15
	default 10
	depends on MVIC
	help
	  Specify the IRQ line to use for the timer interrupt. This should be
	  an IRQ line unused by any hardware. If nested interrupts are enabled,
	  higher interrupt lines have priority.

config ARCV2_INTERRUPT_UNIT
	bool "ARCv2 Interrupt Unit"
	default y
	depends on ARC
	help
	  The ARCv2 interrupt unit has 16 allocated exceptions associated with
	  vectors 0 to 15 and 240 interrupts associated with vectors 16 to 255.
	  The interrupt unit is optional in the ARCv2-based processors. When
	  building a processor, you can configure the processor to include an
	  interrupt unit. The ARCv2 interrupt unit is highly programmable.

config PLIC_FE310
	bool "SiFive Freedom E310 Platform Level Interrupt Controller (PLIC)"
	default y
	depends on SOC_RISCV32_FE310
	select RISCV_HAS_PLIC
	help
	  SiFive Freedom E310 Platform Level Interrupt Controller provides support
	  for external interrupt lines defined by the FE310 SOC;

config DW_ICTL
	bool "Designware Interrupt Controller"
	default n
	depends on MULTI_LEVEL_INTERRUPTS
	help
	  Designware Interrupt Controller can be used as a 2nd level interrupt
	  controller which combines several sources of interrupt into one line
	  that is then routed to the 1st level interrupt controller.

config DW_ICTL_NAME
	string "Name for Designware Interrupt Controller"
	depends on DW_ICTL
	default "DW_ICTL"
	help
	  Give a name for the instance of Designware Interrupt Controller

config DW_ICTL_OFFSET
	hex "Parent interrupt number to which DW_ICTL maps"
	default 0x00
	depends on DW_ICTL
	help
	  Parent interrupt number to which DW_ICTL maps

config DW_ISR_TBL_OFFSET
	int "Offset in the SW ISR Table"
	default 0
	depends on DW_ICTL
	help
	  This indicates the offset in the SW_ISR_TABLE beginning from where
	  the ISRs for Designware Interrupt Controller are assigned.

config DW_ICTL_INIT_PRIORITY
	int "Init priority for DW interrupt controller"
	default 60
	depends on DW_ICTL
	help
	  DesignWare Interrupt Controller initialization priority.

source "drivers/interrupt_controller/Kconfig.stm32"

source "drivers/interrupt_controller/Kconfig.multilevel"

source "drivers/interrupt_controller/Kconfig.s1000"

endmenu
