# Kconfig - x86 core configuration options

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

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.

endmenu
