# Kconfig - kernel configuration options

#
# Copyright (c) 2014-2015 Wind River Systems, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

choice
prompt "Kernel Type"
default MICROKERNEL

config NANOKERNEL
	bool "Nano Kernel"

config MICROKERNEL
	bool "Micro Kernel"

endchoice

menu "General Kernel Options"

config SYS_CLOCK_TICKS_PER_SEC
	int
	prompt "System tick frequency (in ticks/second)"
	default 100
	help
	This option specifies the frequency of the system clock in Hz.

config SYS_CLOCK_HW_CYCLES_PER_SEC
	int "System clock's h/w timer frequency"
	help
	This option specifies the frequency of the hardware timer used for the
	system clock (in Hz). This option is set by the platform's Kconfig file
	and the user should generally avoid modifying it via the menu configuration.

config SYS_CLOCK_EXISTS
	bool
	# omit prompt to signify a "hidden" option
	default y
	default n if (SYS_CLOCK_TICKS_PER_SEC = 0)
	help
	This option specifies that the kernel lacks timer support.

config INIT_STACKS
	bool
	prompt "Initialize stack areas"
	default n
	help
	This option instructs the kernel to initialize stack areas with a
	known value (0xaa) before they are first used, so that the high
	water mark can be easily determined. This applies to the stack areas
	for both tasks and fibers, as well as for the microkernel server's command
	stack.

config XIP
	bool
	prompt "Execute in place"
	help
	  This option allows the kernel to operate with its text and read-only
	  sections residing in ROM (or similar read-only memory). Not all platforms
	  support this option so it must be used with care; you must also
	  supply a linker command file when building your image. Enabling this
	  option increases both the code and data footprint of the image.


config RING_BUFFER
	bool
	prompt "Enable ring buffers"
	default n
	help
	Enable usage of ring buffers. Similar to nanokernel FIFOs but manage
	their own buffer memory and can store arbitrary data. For optimal
	performance, use buffer sizes that are a power of 2.

config KERNEL_EVENT_LOGGER
	bool
	prompt "Enable kernel event logger features"
	default n
	help
	This feature enables the usage of the profiling logger. Provides the
	logging of sleep events (either entering or leaving low power conditions),
	context switch events, interrupt events, boot events and a method to
	collect these event messages.

config KERNEL_EVENT_LOGGER_BUFFER_SIZE
	int
	prompt "Kernel event logger buffer size"
	default 128
	depends on KERNEL_EVENT_LOGGER
	help
	Buffer size in 32-bit words.

config KERNEL_EVENT_LOGGER_DYNAMIC
	bool
	prompt "Kernel event logger dynamic enabling"
	default n
	depends on KERNEL_EVENT_LOGGER
	help
	If enabled, kernel event logger is not logging any data to the ring buffer
	It is up to the application to set the appropriate flags to enable/disable the
	logging of each event type.

config KERNEL_EVENT_LOGGER_CUSTOM_TIMESTAMP
	bool
	prompt "Kernel event logger custom timestamp"
	default n
	depends on KERNEL_EVENT_LOGGER
	help
	This flag enables the possibility to set the timer function to be used to
	populate kernel event logger timestamp. This has to be done at runtime by
	calling sys_k_event_logger_set_timer and providing the function callback.

config THREAD_MONITOR
	bool
	prompt "Task and fiber monitoring [EXPERIMENTAL]"
	default n
	help
	  This option instructs the kernel to maintain a list of all tasks
	  and fibers (excluding those that have not yet started or have
	  already terminated).

config KERNEL_INIT_PRIORITY_DEFAULT
	int
	prompt "Default init priority"
	default 40
	help
	Defaut minimal init priority for each init level.

config KERNEL_INIT_PRIORITY_DEVICE
	int
	prompt "Default init priority for device drivers"
	default 50
	help
	Device driver, that depends on common components, such as
	interrupt controller, but does not depend on other devices,
	uses this init priority.

menu "Kernel event logging points"
depends on KERNEL_EVENT_LOGGER

config KERNEL_EVENT_LOGGER_CONTEXT_SWITCH
	bool
	prompt "Context switch event logging point"
	default n
	depends on KERNEL_EVENT_LOGGER
	help
	Enable the context switch event messages.

config KERNEL_EVENT_LOGGER_INTERRUPT
	bool
	prompt "Interrupt event logging point"
	default n
	depends on KERNEL_EVENT_LOGGER
	help
	Enable interrupt event messages. These messages provide the following
	information: The time when interrupts occur.

config KERNEL_EVENT_LOGGER_SLEEP
	bool
	prompt "Sleep event logging point"
	default n
	depends on KERNEL_EVENT_LOGGER && ((MICROKERNEL && SYS_POWER_MANAGEMENT) || NANOKERNEL)
	help
	Enable low power condition event messages. These messages provide the
	following information:

		- When the CPU went to sleep mode.
		- When the CPU woke up.
		- The ID of the interrupt that woke the CPU up.
endmenu

menu "Security Options"

config STACK_CANARIES
	bool
	prompt "Compiler stack canaries"
	default n
	help
	This option enables compiler stack canaries support kernel functions.

	If stack canaries are supported by the compiler, it will emit
	extra code that inserts a canary value into the stack frame when
	a function is entered and validates this value upon exit.
	Stack corruption (such as that caused by buffer overflow) results
	in a fatal error condition for the running entity.
	Enabling this option can result in a significant increase
	in footprint and an associated decrease in performance.

	If stack canaries are not supported by the compiler, enabling this
	option has no effect.
endmenu

endmenu

source "kernel/nanokernel/Kconfig"

if MICROKERNEL
source "kernel/microkernel/Kconfig"
endif

menu "Power Management"
config SYS_POWER_MANAGEMENT
	bool
	prompt "Power management"
	default n
	help
	This option enables the platform to implement extra power management
	policies whenever the kernel becomes idle. The kernel informs the
	power management subsystem of the number of ticks until the next kernel
	timer is due to expire.

menu "Power Management Features"
	depends on SYS_POWER_MANAGEMENT

config SYS_POWER_LOW_POWER_STATE
	bool
	prompt "Low power state"
	default n
	depends on MICROKERNEL && SYS_POWER_MANAGEMENT && SYS_POWER_LOW_POWER_STATE_SUPPORTED
	help
	This option enables the kernel to interface with a power manager
	application.  This permits the system to enter a custom CPU low power
	state when the kernel becomes idle. The low power state could be any of
	the CPU low power states supported by the processor.  Generally the one
	saving most power.

config SYS_POWER_DEEP_SLEEP
	bool
	prompt "Deep sleep state"
	default n
	depends on MICROKERNEL && SYS_POWER_MANAGEMENT && SYS_POWER_DEEP_SLEEP_SUPPORTED
	help
	This option enables the kernel to interface with a power manager
	application. This permits the system to enter a Deep sleep state
	supported by the SOC where the system clock is turned off while RAM is
	retained. This state would be entered when the kernel becomes idle for
	extended periods and would have a high wake latency.  Resume would be
	from the reset vector same as cold boot. The interface allows
	restoration of states that were saved at the time of suspend.

config DEVICE_POWER_MANAGEMENT
	bool
	prompt "Device power management"
	default n
	depends on MICROKERNEL && SYS_POWER_MANAGEMENT
	help
	This option enables the device power management interface.  The
	interface consists of hook functions implemented by device drivers
	that get called by the power manager application when the system
	is going to suspend state or resuming from suspend state. This allows
	device drivers to do any necessary power management operations
	like turning off device clocks and peripherals. The device drivers
	may also save and restore states in these hook functions.

config TICKLESS_IDLE
	bool
	prompt "Tickless idle"
	default y
	depends on MICROKERNEL || NANOKERNEL_TICKLESS_IDLE_SUPPORTED
	help
	This option suppresses periodic system clock interrupts whenever the
	kernel becomes idle. This permits the system to remain in a power
	saving state for extended periods without having to wake up to
	service each tick as it occurs.

	As a policy, an architecture should always provide support for tickless in
	the microkernel. If an architecture also provides support for nanokernel
	systems, it must select the NANOKERNEL_TICKLESS_IDLE_SUPPORTED kconfig
	option.

config TICKLESS_IDLE_THRESH
	int
	prompt "Tickless idle threshold"
	default 3
	depends on TICKLESS_IDLE
	help
	This option enables clock interrupt suppression when the kernel idles
	for only a short period of time. It specifies the minimum number of
	ticks that must occur before the next kernel timer expires in order
	for suppression to happen.

endmenu

endmenu
