# Kconfig - x86 core configuration options

#
# Copyright (c) 2014-2015 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#

menu "x86 Core Options"

config NESTED_INTERRUPTS
	bool
	prompt "Enable nested interrupts"
	default y
	help
	This option enables support for nested interrupts.

config EXCEPTION_DEBUG
	bool
	prompt "Unhandled exception debugging"
	default y
	depends on PRINTK
	help
	Install handlers for various CPU exception/trap vectors to
	make debugging them easier, at a small expense in code size.
	This prints out the specific exception vector and any associated
	error codes.

menu "Memory Layout Options"

config IDT_NUM_VECTORS
	int
	prompt "Number of IDT vectors"
	default 256
	range 32 256
	help
	This option specifies the number of interrupt vector entries in the
	Interrupt Descriptor Table (IDT). By default all 256 vectors are
	supported in an IDT requiring 2048 bytes of memory.

config MAX_IRQ_LINES
	int
	prompt "Number of IRQ lines"
	default 128
	range 0 256
	help
	This option specifies the number of IRQ lines in the system.
	It can be tuned to save some bytes in ROM, as it determines the
	size of the _irq_to_interrupt_vector_table, which is used at runtime
	to program to the PIC the association between vectors and
	interrupts.

if !HAS_DTS
config PHYS_LOAD_ADDR
	hex "Physical load address"
	# Default value must be supplied by platform
	help
	This option specifies the physical address where the kernel is loaded.
endif

if !HAS_DTS
config PHYS_RAM_ADDR
	hex "Physical RAM address"
	# Default value must be supplied by platform
	help
	This option specifies the physical RAM address of the selected SoC.
endif

config RAM_SIZE
	int "Amount of RAM given to the kernel (in kB)"
	help
	This option specifies the amount of RAM given to the kernel. It must
	not exceed the amount available on the target.  When running an XIP
	kernel, it must be large enough to contain the data, bss and noinit
	sections.  When not running an XIP kernel, it must be large enough to
	contain the full image.

	The default value is specified by the board.

config ROM_SIZE
	int "Amount of ROM given to the kernel (in kB)" if XIP
	help
	This option specifies the amount of ROM given to the kernel. It must
	not exceed the amount available on the target.  It must also be large
	enough to contain the full image.

	The default value is specified by the board.

config SET_GDT
	bool
	prompt "Setup GDT as part of boot process"
	default y
	help
	This option sets up the GDT as part of the boot process. However,
	this may conflict with some security scenarios where the GDT is
	already appropriately set by an earlier bootloader stage, in which
	case this should be disabled. If disabled, the global _gdt pointer
	will not be available.

config GDT_DYNAMIC
	bool
	prompt "Store GDT in RAM so that it can be modified"
	depends on SET_GDT
	default n
	help
	This option stores the GDT in RAM instead of ROM, so that it may
	be modified at runtime at the expense of some memory.

config DEBUG_IRQS
	bool
	prompt "Extra interrupt debugging functionality"
	default n
	help
	Enable additional debugging services for interrupts. May nontrivially
	increase ROM size, so use only when you need it.

endmenu

endmenu
