1# Copyright (c) 2016 Intel Corporation
2# SPDX-License-Identifier: Apache-2.0
3
4menu "OS Support Library"
5
6config JSON_LIBRARY
7	bool "Build JSON library"
8	help
9	  Build a minimal JSON parsing/encoding library. Used by sample
10	  applications such as the NATS client.
11
12config RING_BUFFER
13	bool "Ring buffers"
14	help
15	  Enable usage of ring buffers. This is similar to kernel FIFOs but ring
16	  buffers manage their own buffer memory and can store arbitrary data.
17	  For optimal performance, use buffer sizes that are a power of 2.
18
19config NOTIFY
20	bool "Asynchronous Notifications"
21	help
22	  Use this API to support async transactions.
23
24config BASE64
25	bool "Base64 encoding and decoding"
26	help
27	  Enable base64 encoding and decoding functionality
28
29config CRC
30	bool "Cyclic redundancy check (CRC) Support"
31	default y
32	help
33	  Enable use of CRC.
34
35if CRC
36config CRC_SHELL
37	bool "CRC Shell"
38	depends on SHELL
39	select GETOPT
40	help
41	  Enable CRC checking for memory regions from the shell.
42endif # CRC
43
44config PRINTK_SYNC
45	bool "Serialize printk() calls"
46	default y if SMP && MP_NUM_CPUS > 1 && !(EFI_CONSOLE && LOG)
47	help
48	  When true, a spinlock will be taken around the output from a
49	  single printk() call, preventing the output data from
50	  interleaving with concurrent usage from another CPU or an
51	  preempting interrupt.
52
53config MPSC_PBUF
54	bool "Multi producer, single consumer packet buffer"
55	select TIMEOUT_64BIT
56	help
57	  Enable usage of mpsc packet buffer. Packet buffer is capable of
58	  storing variable length packets in a circular way and operate directly
59	  on the buffer memory.
60
61config ONOFF
62	bool "On-Off Manager"
63	select NOTIFY
64	help
65	  An on-off manager supports an arbitrary number of clients of a
66	  service which has a binary state.  Example applications are power
67	  rails, clocks, and binary device power management.
68
69config SPSC_PBUF
70	bool "Single producer, single consumer packet buffer"
71	help
72	  Enable usage of spsc packet buffer. Packet buffer is capable of
73	  storing variable length packets in a circular way and operate directly
74	  on the buffer memory.
75
76if SPSC_PBUF
77
78choice SPSC_PBUF_CACHE_HANDLING
79	prompt "Cache handling"
80	default SPSC_PBUF_CACHE_ALWAYS if SPSC_PBUF_USE_CACHE && !SPSC_PBUF_NO_CACHE
81	default SPSC_PBUF_CACHE_NEVER if !SPSC_PBUF_USE_CACHE && SPSC_PBUF_NO_CACHE
82	default SPSC_PBUF_CACHE_FLAG
83
84config SPSC_PBUF_CACHE_FLAG
85	bool "Use cache flag"
86	help
87	  Use instance specific configuration flag for cache handling.
88
89config SPSC_PBUF_CACHE_ALWAYS
90	bool "Always handle cache"
91	help
92	  Handle cache writeback and invalidation for all instances. Option used
93	  to avoid runtime check and thus reduce memory footprint.
94
95config SPSC_PBUF_CACHE_NEVER
96	bool "Never handle cache"
97	help
98	  Discar cache handling for all instances. Option used to avoid runtime
99	  check and thus reduce memory footprint.
100
101endchoice
102
103config SPSC_PBUF_USE_CACHE
104	bool
105
106config SPSC_PBUF_NO_CACHE
107	bool
108
109if SPSC_PBUF_CACHE_FLAG || SPSC_PBUF_CACHE_ALWAYS
110
111config SPSC_PBUF_REMOTE_DCACHE_LINE
112	int "Remote cache line size"
113	default 32
114	help
115	  If a packet buffer is used for data sharing between two cores then
116	  this value should be set to the data cache line size of the remote core.
117	  If local data cache line is detected at runtime then it should be
118	  maximum of local and remote line size.
119
120endif # SPSC_PBUF_CACHE_FLAG || SPSC_PBUF_CACHE_ALWAYS
121
122config SPSC_PBUF_UTILIZATION
123	bool "Track maximum utilization"
124	help
125	  When enabled, maximum utilization is tracked which can be used to
126	  determine the size of the packet buffer.
127
128endif # SPSC_PBUF
129
130config SHARED_MULTI_HEAP
131	bool "Shared multi-heap manager"
132	help
133	  Enable support for a shared multi-heap manager that uses the
134	  multi-heap allocator to manage a set of reserved memory regions with
135	  different capabilities / attributes (cacheable, non-cacheable,
136	  etc...) defined in the DT.
137
138config WINSTREAM
139	bool "Lockless shared memory window byte stream"
140	help
141	  Winstream is a byte stream IPC for use in shared memory
142	  "windows", generally for transmit to non-Zephyr contexts that
143	  can't share Zephyr APIs or data structures.
144
145if WINSTREAM
146config WINSTREAM_STDLIB_MEMCOPY
147	bool "Use standard memcpy() in winstream"
148	help
149	  The sys_winstream utility is sometimes used in early boot
150	  environments before the standard library is usable.  By
151	  default it uses a simple internal bytewise memcpy().  Set
152	  this to use the one from the standard library.
153endif
154
155if MPSC_PBUF
156config MPSC_CLEAR_ALLOCATED
157	bool "Clear allocated packet"
158	help
159	  When enabled packet space is zeroed before returning from allocation.
160endif
161
162config REBOOT
163	bool "Reboot functionality"
164	help
165	  Enable the sys_reboot() API. Enabling this can drag in other subsystems
166	  needed to perform a "safe" reboot (e.g. to stop the system clock before
167	  issuing a reset).
168
169config UTF8
170	bool "UTF-8 string operation supported"
171	help
172	  Enable the utf8 API. The API implements functions to specifically
173	  handle UTF-8 encoded strings.
174
175rsource "Kconfig.cbprintf"
176
177rsource "Kconfig.heap"
178
179endmenu
180