#
# Copyright 2014, General Dynamics C4 Systems
#
# This software may be distributed and modified according to the terms of
# the GNU General Public License version 2. Note that NO WARRANTY is provided.
# See "LICENSE_GPLv2.txt" for details.
#
# @TAG(GD_GPL)
#
menu "System Interrupt Management"
depends on PLAT_PC99
choice
prompt "IRQ Controller"
default IRQ_PIC if ARCH_IA32
default IRQ_IOAPIC if ARCH_X86_64
help
Select the IRQ controller seL4 will use. Code for others may
still be included if needed to disable at run time
config IRQ_PIC
bool "PIC"
help
Use the legacy PIC controller
config IRQ_IOAPIC
bool "IOAPIC"
help
Use one or more IOAPIC controllers
endchoice
config MAX_NUM_IOAPIC
prompt "Max supported IOAPICs"
depends on IRQ_IOAPIC
int
default 1
help
Configure the maximum number of IOAPIC controllers that can
be supported. SeL4 will detect IOAPICs regardless of whether
the IOAPIC will actually be used as the final IRQ controller
choice
prompt "Local APIC mode"
default XAPIC if ARCH_IA32
default X2APIC if ARCH_X86_64
help
Select the mode local APIC will use. Not all machines support
X2APIC mode.
config XAPIC
bool "XAPIC"
help
Use XAPIC mode for local APIC
config X2APIC
bool "X2APIC"
help
Use X2APIC mode for local APIC
endchoice
config USE_LOGICAL_IDS
bool "Use logical IDs for IPIs broadcasting"
depends on MAX_NUM_NODES != 1
default n
help
Use logical IDs to broadcast IPI between cores. Not all machines
support logical IDs. In xAPIC mode only 8 cores can be addressed
using logical IDs.
endmenu
config IOMMU
bool "IOMMU support"
depends on PLAT_PC99
default y
help
IOMMU support for VT-d enabled chipset
config VTX
bool "VTX support"
depends on PLAT_PC99
default n
help
VTX support
config MAX_VPIDS
prompt "Max VPIDs to support"
depends on VTX
range 1 65535
int
default 1024
help
The kernel maintains a mapping of 16-bit VPIDs to VCPUs. This option
should be sized as small as possible to save memory, but be at least
the number of VCPUs that will be run for optimum performance
config HUGE_PAGE
bool "Use 1GB Huge Page"
depends on ARCH_X86_64
default y
help
Add support for 1GB huge page. Not all recent processor models support
this feature.
config SUPPORT_PCID
bool "Support Process Context IDentifiers"
depends on ARCH_X86_64
default y
help
Add support for PCIDs (aka hardware ASIDs). Not all processor models
support this feature
choice
prompt "Kernel syscall style"
depends on ARCH_X86
default SYSENTER if ARCH_IA32
default SYSCALL if ARCH_X86_64
help
The kernel only ever supports one method of performing syscalls
at a time. This config should be set to the most efficient one
that is support by the hardware the system will run on
config SYSENTER
bool "sysenter+sysexit"
config SYSCALL
depends on ARCH_X86_64
bool "syscall+sysret"
endchoice
choice
prompt "FPU state implementation"
depends on ARCH_X86
default FXSAVE
help
Choose the method that FPU state is stored in. This directly
affects the method used to save and rrestore it
config FXSAVE
bool "FXSAVE"
help
This chooses the legacy 512-byte region used by the
fxsave and fxrstor functions
config XSAVE
bool "XSAVE"
help
This chooses the variable xsave region, and enables the
ability to use any of the xsave variants to save and
restore. The actual size of the region is dependent on
the features enabled.
endchoice
choice
prompt "XSAVE variant"
depends on XSAVE
default XSAVE_XSAVEOPT
help
The XSAVE area supports multiple instructions to save
and restore to it. These instructions are dependent upon
specific CPU support. See Chapter 13 of Volume 1 of the
Intel Architectures SOftware Developers Manual for
discussion on the init and modified optimizations
config XSAVE_XSAVE
bool "XSAVE"
help
Original XSAVE instruction. This is the only XSAVE
instruction that is guaranteed to exist if XSAVE
is present
config XSAVE_XSAVEC
bool "XSAVEC"
help
Save state with compaction. This compaction has
to do with minimizing the total size of XSAVE buffer,
if using non contiguous features, XSAVEC will attempt
to use the init optimization when saving
config XSAVE_XSAVEOPT
bool "XSAVEOPT"
help
Save state taking advantage of both the init
optimization and modified optimization
config XSAVE_XSAVES
bool "XSAVES"
help
Save state taking advantage of the modified
optimization. This instruction is only
available in OS code, and is the preferred
save method if it exists
endchoice
config XSAVE_FEATURE_SET
int "XSAVE feature set"
depends on XSAVE
default 3
help
XSAVE can save and restore the state for various
features through the use of the feature mask. This
config option represents the feature mask that we
want to support. The CPU must support all bits
in this feature mask. Current known bits are
0 - FPU
1 - SSE
2 - AVX
FPU and SSE is guaranteed to exist if XSAVE exists
config XSAVE_SIZE
int "XSAVE region size"
depends on ARCH_X86
default 576 if XSAVE
default 512 if !XSAVE
help
The size of the XSAVE region. This is dependent
upon the features in XSAVE_FEATURE_SET that have
been requested. Default is 576 for the FPU and
SSE state, unless XSAVE is not in use then it
should be 512 for the legacy FXSAVE region
choice
prompt "Setting FS/GS Base Addresses"
depends on ARCH_X86
default FSGSBASE_INST if ARCH_X86_64
default FSGSBASE_GDT if ARCH_IA32
help
There are three ways to to set FS/GS base addresses:
IA32_FS/GS_GDT, IA32_FS/GS_BASE_MSR, and fsgsbase instructions.
IA32_FS/GS_GDT and IA32_FS/GS_BASE_MSR are availble for 32-bit.
IA32_FS/GS_BASE_MSR and fsgsbase instructions are available for 64-bit.
config FSGSBASE_GDT
bool "IA32_FS/GS_GDT"
depends on ARCH_IA32
help
Use GDT entries.
config FSGSBASE_MSR
bool "IA32_FS/GS_BASE MSRs"
depends on ARCH_X86
help
Use MSRs to change base addresses.
config FSGSBASE_INST
bool "FSGSBASE Instructions"
depends on ARCH_X86_64
help
Use rdfs/gsbase, wrfs/gsbase instructions to change base adddresses.
endchoice
menu "Multiboot options"
depends on PLAT_PC99
choice
prompt "Multiboot graphics mode"
help
The type of graphics mode to request from the boot loader.
This is encoded into the multiboot header and is merely a hint,
the boot loader is free to ignore or set some other mode
default MULTIBOOT_GRAPHICS_MODE_NONE
config MULTIBOOT_GRAPHICS_MODE_NONE
bool "None"
help
Request no graphics mode
config MULTIBOOT_GRAPHICS_MODE_TEXT
bool "Text"
help
Request a text mode
config MULTIBOOT_GRAPHICS_MODE_LINEAR
bool "Linear"
help
Request a linear graphics mode
endchoice
config MULTIBOOT_GRAPHICS_MODE_WIDTH
int "Mode Width"
depends on MULTIBOOT_GRAPHICS_MODE_TEXT || MULTIBOOT_GRAPHICS_MODE_LINEAR
default 80 if MULTIBOOT_GRAPHICS_MODE_TEXT
default 1024 if MULTIBOOT_GRAPHICS_MODE_LINEAR
help
The width of the graphics mode to request. For a linear graphics mode this
is the number of pixels. For a text mode this is the number of characters.
Value of zero indicates no preference
config MULTIBOOT_GRAPHICS_MODE_HEIGHT
int "Mode Height"
depends on MULTIBOOT_GRAPHICS_MODE_TEXT || MULTIBOOT_GRAPHICS_MODE_LINEAR
default 25 if MULTIBOOT_GRAPHICS_MODE_TEXT
default 768 if MULTIBOOT_GRAPHICS_MODE_LINEAR
help
The height of the graphics mode to request. For a linear graphics mode this
is the number of pixels. For a text mode this is the number of characters
Value of zero indicates no preference
config MULTIBOOT_GRAPHICS_MODE_DEPTH
int "Mode Depth"
depends on MULTIBOOT_GRAPHICS_MODE_LINEAR
default 32
help
The bits per pixel of the linear graphics mode to request.
Value of zero indicates no preference
endmenu