# Kconfig - nanokernel configuration options

#
# Copyright (c) 2014-2015 Wind River Systems, Inc.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
#
# 2) Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# 3) Neither the name of Wind River Systems nor the names of its contributors
# may be used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#

menu "Nanokernel Options"

config BOOT_BANNER
	bool
	prompt "Boot banner"
	default n
	select PRINTK
	help
	This option outputs a banner to the console device during boot up. It
	also embeds a date & time stamp in the kernel and in each USAP image.

config INT_LATENCY_BENCHMARK
	bool
	prompt "Interrupt latency metrics [EXPERIMENTAL]"
	default n
	depends on ARCH="x86"
	help
	This option enables the tracking of interrupt latency metrics;
	the exact set of metrics being tracked is platform-dependent.
	Tracking begins when intLatencyInit() is invoked by an application.
	The metrics are displayed (and a new sampling interval is started)
	each time intLatencyShow() is called thereafter.

config MAIN_STACK_SIZE
	int
	prompt "Background task stack size (in bytes)"
	default 1024
	help
	This option specifies the size of the stack used by the kernel's
	background task, whose entry point is main().

config ISR_STACK_SIZE
	int
	prompt "ISR and initialization stack size (in bytes)"
	default 2048
	help
	This option specifies the size of the stack used by interrupt
	service routines (ISRs), and during nanokernel initialization.

config  THREAD_CUSTOM_DATA
	bool
	prompt "Task and fiber custom data"
	default n
	help
	This option allows each task and fiber to store 32 bits of custom data,
	which can be accessed using the sys_thread_custom_data_xxx() APIs.

config  NANO_TIMEOUTS
	bool
	prompt "Enable timeouts on nanokernel objects"
	default n
	depends on SYS_CLOCK_EXISTS
	help
	Allow fibers and tasks to wait on nanokernel objects with a timeout, by
	enabling the nano_xxx_wait_timeout APIs, and allow fibers to sleep for a
	period of time, by enabling the fiber_sleep API.

config  NANO_TIMERS
	bool
	prompt "Enable nanokernel timers"
	default y if NANOKERNEL
	default n
	depends on SYS_CLOCK_EXISTS
	help
	Allow fibers and tasks to wait on nanokernel timers, which can be
	accessed using the nano_timer_xxx() APIs.
endmenu
