# Copyright (c) 2022 Nordic Semiconductor (ASA)
# SPDX-License-Identifier: Apache-2.0

config IPC_SERVICE_ICMSG_SHMEM_ACCESS_SYNC
	bool "Synchronize access to shared memory"
	default y
	help
	  Provide synchronization access to shared memory at a library level.
	  This option is enabled by default to allow to use sending API from
	  multiple contexts. Mutex is used to guard access to the memory.
	  This option can be safely disabled if an application ensures data
	  are sent from single context.

config IPC_SERVICE_ICMSG_SHMEM_ACCESS_TO_MS
	int "Mutex lock timeout in milliseconds"
	depends on IPC_SERVICE_ICMSG_SHMEM_ACCESS_SYNC
	range 1 5
	default 1
	help
	  Maximum time to wait, in milliseconds, for access to send data with
	  backends basing on icmsg library. This time should be relatively low.

config IPC_SERVICE_ICMSG_BOND_NOTIFY_REPEAT_TO_MS
	int "Bond notification timeout in miliseconds"
	range 1 100
	default 1
	help
	  Time to wait for remote bonding notification before the
	  notification is repeated.

config IPC_SERVICE_BACKEND_ICMSG_WQ_ENABLE
	bool "Use dedicated workqueue"
	default y
	help
	  Enable dedicated workqueue thread for the ICMsg backend.
	  Disabling this configuration will cause the ICMsg backend to
	  process incoming data through the system workqueue context, and
	  therefore reduces the RAM footprint of the backend.
	  Disabling this config may result in deadlocks in certain usage
	  scenarios, such as when synchronous IPC is executed from the system
	  workqueue context.
	  The callbacks coming from the backend are executed from the workqueue
	  context.
	  When the option is disabled, the user must obey the restrictions
	  imposed by the system workqueue, such as never performing blocking
	  operations from within the callback.

if IPC_SERVICE_BACKEND_ICMSG_WQ_ENABLE

config IPC_SERVICE_BACKEND_ICMSG_WQ_STACK_SIZE
	int "Size of RX work queue stack"
	default 1024
	help
	  Size of stack used by work queue RX thread. This work queue is
	  created to prevent notifying service users about received data
	  from the system work queue. The queue is shared among instances.

config IPC_SERVICE_BACKEND_ICMSG_WQ_PRIORITY
	int "Priority of RX work queue thread"
	default -1
	range -256 -1
	help
	  Priority of the ICMSG RX work queue thread.
	  The ICMSG library in its simplicity requires the workqueue to execute
	  at a cooperative priority.

endif

# The Icmsg library in its simplicity requires the system workqueue to execute
# at a cooperative priority.
config SYSTEM_WORKQUEUE_PRIORITY
	range -256 -1 if !IPC_SERVICE_BACKEND_ICMSG_WQ_ENABLE

config PBUF
	bool "Packed buffer support library"
	help
	  The packet buffer implements lightweight unidirectional packet buffer
	  with read/write semantics on top of a memory region shared by the
	  reader and writer. It optionally embeds cache and memory barrier
	  management to ensure correct data access.
