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

config IPC_SERVICE_REG_BACKEND_PRIORITY
	int "Initialization priority of modules registering IPC backend"
	default 46
	help
	  The backend must be registered before the endpoint register.

config IPC_SERVICE_BACKEND_RPMSG
	bool "OpenAMP RPMSG backend with static VRINGs"
	default y
	depends on MBOX
	depends on DT_HAS_ZEPHYR_IPC_OPENAMP_STATIC_VRINGS_ENABLED
	select IPC_SERVICE_RPMSG
	select IPC_SERVICE_STATIC_VRINGS
	select OPENAMP

config IPC_SERVICE_BACKEND_ICMSG
	bool "ICMSG backend with SPSC packet buffer"
	default y
	depends on MBOX
	depends on DT_HAS_ZEPHYR_IPC_ICMSG_ENABLED
	select IPC_SERVICE_ICMSG
	help
	  Chosing this backend results in single endpoint implementation based
	  on circular packet buffer.

config IPC_SERVICE_BACKEND_ICMSG_ME_INITIATOR
	bool "ICMSG backend with multi-endpoint support in initiator role"
	depends on MBOX
	depends on DT_HAS_ZEPHYR_IPC_ICMSG_ME_INITIATOR_ENABLED
	select IPC_SERVICE_ICMSG
	select EVENTS
	help
	  Chosing this backend results in multi endpoint implementation based
	  on circular packet buffer. This enables enpoint discovery initiator
	  role.

config IPC_SERVICE_BACKEND_ICMSG_ME_FOLLOWER
	bool "ICMSG backend with multi-endpoint support in follower role"
	depends on MBOX
	depends on DT_HAS_ZEPHYR_IPC_ICMSG_ME_FOLLOWER_ENABLED
	select IPC_SERVICE_ICMSG
	select EVENTS
	help
	  Chosing this backend results in multi endpoint implementation based
	  on circular packet buffer. This enables enpoint discovery follower
	  role.

config IPC_SERVICE_RPMSG
	bool "RPMsg support library"
	help
	  "RPMsg library"

config IPC_SERVICE_STATIC_VRINGS
	bool "Static VRINGs support library"
	help
	  "Static VRINGs library"

config IPC_SERVICE_STATIC_VRINGS_ALIGNMENT
	int "VRINGs alignment"
	depends on IPC_SERVICE_STATIC_VRINGS
	default 4
	help
	  Static VRINGs alignment

config IPC_SERVICE_ICMSG
	bool
	select SPSC_PBUF
	select SPSC_PBUF_USE_CACHE
	help
	  Icmsg library

config IPC_SERVICE_ICMSG_CB_BUF_SIZE
	int "Size of callback buffer size"
	depends on IPC_SERVICE_ICMSG
	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.

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

config IPC_SERVICE_BACKEND_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.

rsource "Kconfig.icmsg_me"
rsource "Kconfig.rpmsg"
