# Copyright (c) 2016 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

menu "OS Support Library"

config JSON_LIBRARY
	bool "Build JSON library"
	help
	  Build a minimal JSON parsing/encoding library. Used by sample
	  applications such as the NATS client.

config RING_BUFFER
	bool "Ring buffers"
	help
	  Enable usage of ring buffers. This is similar to kernel FIFOs but ring
	  buffers manage their own buffer memory and can store arbitrary data.
	  For optimal performance, use buffer sizes that are a power of 2.

config NOTIFY
	bool "Asynchronous Notifications"
	help
	  Use this API to support async transactions.

config BASE64
	bool "Base64 encoding and decoding"
	help
	  Enable base64 encoding and decoding functionality

config CRC
	bool "Cyclic redundancy check (CRC) Support"
	default y
	help
	  Enable use of CRC.

if CRC
config CRC_SHELL
	bool "CRC Shell"
	depends on SHELL
	select GETOPT
	help
	  Enable CRC checking for memory regions from the shell.
endif # CRC

config PRINTK_SYNC
	bool "Serialize printk() calls"
	default y if SMP && MP_NUM_CPUS > 1 && !(EFI_CONSOLE && LOG)
	help
	  When true, a spinlock will be taken around the output from a
	  single printk() call, preventing the output data from
	  interleaving with concurrent usage from another CPU or an
	  preempting interrupt.

config MPSC_PBUF
	bool "Multi producer, single consumer packet buffer"
	select TIMEOUT_64BIT
	help
	  Enable usage of mpsc packet buffer. Packet buffer is capable of
	  storing variable length packets in a circular way and operate directly
	  on the buffer memory.

config ONOFF
	bool "On-Off Manager"
	select NOTIFY
	help
	  An on-off manager supports an arbitrary number of clients of a
	  service which has a binary state.  Example applications are power
	  rails, clocks, and binary device power management.

config SPSC_PBUF
	bool "Single producer, single consumer packet buffer"
	help
	  Enable usage of spsc packet buffer. Packet buffer is capable of
	  storing variable length packets in a circular way and operate directly
	  on the buffer memory.

if SPSC_PBUF

choice SPSC_PBUF_CACHE_HANDLING
	prompt "Cache handling"
	default SPSC_PBUF_CACHE_ALWAYS if SPSC_PBUF_USE_CACHE && !SPSC_PBUF_NO_CACHE
	default SPSC_PBUF_CACHE_NEVER if !SPSC_PBUF_USE_CACHE && SPSC_PBUF_NO_CACHE
	default SPSC_PBUF_CACHE_FLAG

config SPSC_PBUF_CACHE_FLAG
	bool "Use cache flag"
	help
	  Use instance specific configuration flag for cache handling.

config SPSC_PBUF_CACHE_ALWAYS
	bool "Always handle cache"
	help
	  Handle cache writeback and invalidation for all instances. Option used
	  to avoid runtime check and thus reduce memory footprint.

config SPSC_PBUF_CACHE_NEVER
	bool "Never handle cache"
	help
	  Discar cache handling for all instances. Option used to avoid runtime
	  check and thus reduce memory footprint.

endchoice

config SPSC_PBUF_USE_CACHE
	bool

config SPSC_PBUF_NO_CACHE
	bool

if SPSC_PBUF_CACHE_FLAG || SPSC_PBUF_CACHE_ALWAYS

config SPSC_PBUF_REMOTE_DCACHE_LINE
	int "Remote cache line size"
	default 32
	help
	  If a packet buffer is used for data sharing between two cores then
	  this value should be set to the data cache line size of the remote core.
	  If local data cache line is detected at runtime then it should be
	  maximum of local and remote line size.

endif # SPSC_PBUF_CACHE_FLAG || SPSC_PBUF_CACHE_ALWAYS

config SPSC_PBUF_UTILIZATION
	bool "Track maximum utilization"
	help
	  When enabled, maximum utilization is tracked which can be used to
	  determine the size of the packet buffer.

endif # SPSC_PBUF

config SHARED_MULTI_HEAP
	bool "Shared multi-heap manager"
	help
	  Enable support for a shared multi-heap manager that uses the
	  multi-heap allocator to manage a set of reserved memory regions with
	  different capabilities / attributes (cacheable, non-cacheable,
	  etc...) defined in the DT.

config WINSTREAM
	bool "Lockless shared memory window byte stream"
	help
	  Winstream is a byte stream IPC for use in shared memory
	  "windows", generally for transmit to non-Zephyr contexts that
	  can't share Zephyr APIs or data structures.

if WINSTREAM
config WINSTREAM_STDLIB_MEMCOPY
	bool "Use standard memcpy() in winstream"
	help
	  The sys_winstream utility is sometimes used in early boot
	  environments before the standard library is usable.  By
	  default it uses a simple internal bytewise memcpy().  Set
	  this to use the one from the standard library.
endif

if MPSC_PBUF
config MPSC_CLEAR_ALLOCATED
	bool "Clear allocated packet"
	help
	  When enabled packet space is zeroed before returning from allocation.
endif

config REBOOT
	bool "Reboot functionality"
	help
	  Enable the sys_reboot() API. Enabling this can drag in other subsystems
	  needed to perform a "safe" reboot (e.g. to stop the system clock before
	  issuing a reset).

config UTF8
	bool "UTF-8 string operation supported"
	help
	  Enable the utf8 API. The API implements functions to specifically
	  handle UTF-8 encoded strings.

rsource "Kconfig.cbprintf"

rsource "Kconfig.heap"

endmenu
