# Copyright (c) 2021,2023 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0

menu "Memory Blocks"

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.

config OBJ_CORE_SYS_MEM_BLOCKS
	bool "Kernel object for memory blocks"
	depends on SYS_MEM_BLOCKS && OBJ_CORE
	default y if SYS_MEM_BLOCKS && OBJ_CORE
	help
	  This option allows object cores to be integrated into memory block
	  objects.

config OBJ_CORE_STATS_SYS_MEM_BLOCKS
	bool "Object core statistics for memory blocks"
	depends on SYS_MEM_BLOCKS && OBJ_CORE_STATS
	default y if SYS_MEM_BLOCKS && OBJ_CORE_STATS
	select SYS_MEM_BLOCKS_RUNTIME_STATS
	help
	  This option integrates the object core statistics framework into
	  the memory blocks.

endmenu
