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

menuconfig LOAPIC
	bool "LOAPIC"
	depends on X86
	help
	  This option selects local APIC as the interrupt controller.

if LOAPIC

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

config X2APIC
	bool "Access local APIC in x2APIC mode"
	help
	  If your local APIC supports x2APIC mode, turn this on.

config LOAPIC_SPURIOUS_VECTOR
	bool "Handle LOAPIC spurious interrupts"
	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
	help
	  This option signifies that the target has an IO-APIC device. This
	  capability allows IO-APIC-dependent code to be included.

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.

endif # LOAPIC
