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

config IPC_SERVICE_ICMSG_CB_BUF_SIZE
	int "Size of callback buffer size"
	range 1 65535
	default 255
	help
	  Size of callback buffer used for processing received data in work
	  queue thread. If you are sure that your application never sends data
	  data bigger than some size, you can safely change this option to
	  reduce RAM consumption in your application.

config IPC_SERVICE_ICMSG_NOCOPY_RX
	bool
	depends on IPC_SERVICE_ICMSG
	help
	  Enable nocopy feature for receiving path of the icmsg library that
	  might be used by backends based on icmsg.

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.

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

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.
