# Kconfig - nanokernel 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.
#

menu "Nanokernel Options"

config BOOT_BANNER
	bool
	prompt "Boot banner"
	default n
	select PRINTK
	depends on EARLY_CONSOLE
	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 BUILD_TIMESTAMP
	bool
	prompt "Build Timestamp"
	help
	Build timestamp and add it to the boot banner.

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 int_latency_init() is invoked by an application.
	The metrics are displayed (and a new sampling interval is started)
	each time int_latency_show() 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.

config NANOKERNEL_TICKLESS_IDLE_SUPPORTED
	bool
	default n
	help
	To be selected by an architecture if it does support tickless idle in
	nanokernel systems.

config ERRNO
	bool
	prompt "Enable errno support"
	default y
	help
	Enable per-thread errno in the kernel. Application and library code must
	include errno.h provided by the C library (libc) to use the errno symbol.
	The C library must access the per-thread errno via the _get_errno() symbol.

endmenu
