# 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 board'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 boards
	  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
	select RING_BUFFER
	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_OBJECTS
	int
	prompt "Kernel objects initialization priority"
	default 30
	help
	Kernel objects use this priority for initialization. This
	priority needs to be higher than minimal default initialization
	priority.

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.

config APPLICATION_INIT_PRIORITY
	int
	prompt "Default init priority for application level drivers"
	default 90
	help
	This priority level is for end-user drivers such as sensors and display
	which have no inward dependencies.

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/unified/Kconfig"

menu "Power Management"
config SYS_POWER_MANAGEMENT
	bool
	prompt "Power management"
	default n
	help
	This option enables the board 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
	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

config MDEF
	bool
	prompt "Use MDEF files for statically configured kernel objects"
	default y
	help
	Using an MDEF file can help the startup time of the application since
	the objects it lists are statically allocated and initialized, and may
	also reduce code size if no subsystem uses the initialization routines.

	Disabling this option can reduce the compilation time slightly.

	In doubt, select 'y'.

endmenu
