The icmsg and icmsg_me backends has limitations in context of concurrent access to single instance. Some limitations are: * sending by more thread at the same time may cause -EBUSY * allocating TX buffer will cause errors in other threads that want to allocate before first thread sent the message, * during no-copy receive, when RX buffer is on hold receiving is totally blocked. This backend resolves those limitations by adding dynamically allocated buffers on shared memory next to ICmsg circular buffer. The data is passed using those buffers, so concurrency is not a problem. The ICmsg is used only to pass short 2-byte messages containing references to those buffers. The backend also supports multiple endpoint. The ipc/icmsg_me sample was modified to support this backend. Signed-off-by: Dominik Kilian <Dominik.Kilian@nordicsemi.no>
54 lines
1.6 KiB
Plaintext
54 lines
1.6 KiB
Plaintext
# 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"
|
|
default y
|
|
depends on MBOX
|
|
depends on DT_HAS_ZEPHYR_IPC_ICMSG_ME_INITIATOR_ENABLED
|
|
select IPC_SERVICE_ICMSG_ME
|
|
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"
|
|
default y
|
|
depends on MBOX
|
|
depends on DT_HAS_ZEPHYR_IPC_ICMSG_ME_FOLLOWER_ENABLED
|
|
select IPC_SERVICE_ICMSG_ME
|
|
help
|
|
Chosing this backend results in multi endpoint implementation based
|
|
on circular packet buffer. This enables enpoint discovery follower
|
|
role.
|
|
|
|
rsource "Kconfig.icmsg_me"
|
|
rsource "Kconfig.icbmsg"
|
|
rsource "Kconfig.rpmsg"
|