| # Copyright (c) 2021 Intel Corporation | 
 | # | 
 | # SPDX-License-Identifier: Apache-2.0 | 
 |  | 
 | menu "Heap and Memory Allocation" | 
 |  | 
 | config SYS_HEAP_VALIDATE | 
 | 	bool "Internal heap validity checking" | 
 | 	help | 
 | 	  The sys_heap implementation is instrumented for extensive | 
 | 	  internal validation.  Leave this off by default, unless | 
 | 	  modifying the heap code or (maybe) when running in | 
 | 	  environments that require sensitive detection of memory | 
 | 	  corruption. | 
 |  | 
 | config SYS_HEAP_ALLOC_LOOPS | 
 | 	int "Number of tries in the inner heap allocation loop" | 
 | 	default 3 | 
 | 	help | 
 | 	  The sys_heap allocator bounds the number of tries from the | 
 | 	  smallest chunk level (the one that might not fit the | 
 | 	  requested allocation) to maintain constant time performance. | 
 | 	  Setting this to a high level will cause the heap to return | 
 | 	  more successful allocations in situations of high | 
 | 	  fragmentation, at the cost of potentially significant | 
 | 	  (linear time) searching of the free list.  The default is | 
 | 	  three, which results in an allocator with good statistical | 
 | 	  properties ("most" allocations that fit will succeed) but | 
 | 	  keeps the maximum runtime at a tight bound so that the heap | 
 | 	  is useful in locked or ISR contexts. | 
 |  | 
 | config SYS_HEAP_RUNTIME_STATS | 
 | 	bool "System heap runtime statistics" | 
 | 	help | 
 | 	  Gather system heap runtime statistics. | 
 |  | 
 | config SYS_HEAP_LISTENER | 
 | 	bool "sys_heap event notifications" | 
 | 	select HEAP_LISTENER | 
 | 	help | 
 | 	  This allows application to listen for sys_heap events, | 
 | 	  such as memory allocation and de-allocation. | 
 |  | 
 | config HEAP_LISTENER | 
 | 	bool | 
 | 	help | 
 | 	  Hidden option to enable API for registering and notifying | 
 | 	  listeners of certain events related to a heap usage, | 
 | 	  such as the heap resize. | 
 |  | 
 | choice | 
 | 	prompt "Supported heap sizes" | 
 | 	depends on !64BIT | 
 | 	default SYS_HEAP_SMALL_ONLY if (SRAM_SIZE <= 256) | 
 | 	default SYS_HEAP_AUTO | 
 | 	help | 
 | 	  Heaps using reduced-size chunk headers can accommodate so called | 
 | 	  "small" heaps with a total size of 262136 bytes or less. | 
 |  | 
 | 	  Heaps using full-size chunk headers can have a total size up to | 
 | 	  16383 megabytes. The overhead is of course bigger. | 
 |  | 
 | 	  On 32-bit system the tradeoff is selectable between: | 
 |  | 
 | 	  - "small" heaps with low memory and runtime overhead; | 
 |  | 
 | 	  - "big" heaps with bigger memory overhead even for small heaps; | 
 |  | 
 | 	  - "auto" providing optimal memory overhead in all cases but with | 
 | 	    a higher runtime overhead and somewhat bigger code footprint. | 
 |  | 
 | 	  On 64-bit systems the "big" chunk header size conveniently provides | 
 | 	  the needed alignment on returned memory allocations. Small chunk | 
 | 	  headers would require alignment padding up to the big header size | 
 | 	  anyway so "big" heap is the only option in that case. | 
 |  | 
 | config SYS_HEAP_SMALL_ONLY | 
 | 	bool "Support for small heaps only" | 
 | 	help | 
 | 	  Select this to optimize the code and memory usage if all your | 
 | 	  heaps are 262136 bytes or less. | 
 |  | 
 | config SYS_HEAP_BIG_ONLY | 
 | 	bool "Support for big heaps only" | 
 | 	help | 
 | 	  Select this to optimize the code for big heaps only. This can | 
 | 	  accommodate any heap size but memory usage won't be as | 
 | 	  efficient with small sized heaps. | 
 |  | 
 | config SYS_HEAP_AUTO | 
 | 	bool "Support for both small and big heaps at run time" | 
 | 	help | 
 | 	  This option optimizes memory usage for each heap according to | 
 | 	  their size albeit with some overhead in code size and execution. | 
 |  | 
 | endchoice | 
 |  | 
 | 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 SYS_MEM_BLOCKS | 
 | 	bool "(Yet Another) Memory Blocks Allocator" | 
 | 	help | 
 | 	  This enables support for memory block allocator where: | 
 | 	  () All memory blocks have a single fixed size. | 
 | 	  () Multiple blocks can be allocated or freed at the same time. | 
 | 	  () A group of blocks allocated together may not be contiguous. | 
 | 	     This is useful for operations such as scatter-gather DMA | 
 | 	     transfers. | 
 | 	  () Bookkeeping of allocated blocks is done outside of | 
 | 	     the associated buffer (unlike memory slab). This allows | 
 | 	     the buffer to reside in memory regions where these can be | 
 | 	     powered down to conserve energy. | 
 |  | 
 | config SYS_MEM_BLOCKS_LISTENER | 
 | 	bool "Memory Blocks Allocator event notifications" | 
 | 	depends on SYS_MEM_BLOCKS | 
 | 	select HEAP_LISTENER | 
 | 	help | 
 | 	  This allows application to listen for memory blocks allocator | 
 | 	  events, such as memory allocation and de-allocation. | 
 |  | 
 | config SYS_MEM_BLOCKS_RUNTIME_STATS | 
 | 	bool "Memory blocks runtime statistics" | 
 | 	depends on SYS_MEM_BLOCKS | 
 | 	help | 
 | 	  This option enables the tracking and reporting of the memory | 
 | 	  blocks statistics related to the current and maximum number | 
 | 	  of allocations in a given memory block. | 
 |  | 
 | endmenu |