# 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_BASE_ADDRESS
	hex "IO-APIC Base Address"
	default 0xFEC00000
	depends on IOAPIC
	help
	This option specifies the base address of the IO-APIC device.

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;

source "drivers/interrupt_controller/Kconfig.stm32"

endmenu
