Zephyr Project API  3.3.0
A Scalable Open Source RTOS
icmsg.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2022 Nordic Semiconductor ASA
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#include <stddef.h>
8#include <stdint.h>
9#include <zephyr/kernel.h>
10#include <zephyr/drivers/mbox.h>
12#include <zephyr/sys/atomic.h>
14
19};
20
28};
29
31 /* Tx/Rx buffers. */
35
36 /* Callbacks for an endpoint. */
37 const struct ipc_service_cb *cb;
38 void *ctx;
39
40 /* General */
41 const struct icmsg_config_t *cfg;
45 uint8_t rx_buffer[CONFIG_IPC_SERVICE_ICMSG_CB_BUF_SIZE] __aligned(4);
46
47 /* No-copy */
48#ifdef CONFIG_IPC_SERVICE_ICMSG_NOCOPY_RX
49 atomic_t rx_buffer_held;
50#endif
51};
52
69int icmsg_init(const struct icmsg_config_t *conf,
70 struct icmsg_data_t *dev_data);
71
98int icmsg_open(const struct icmsg_config_t *conf,
99 struct icmsg_data_t *dev_data,
100 const struct ipc_service_cb *cb, void *ctx);
101
118int icmsg_close(const struct icmsg_config_t *conf,
119 struct icmsg_data_t *dev_data);
120
141int icmsg_send(const struct icmsg_config_t *conf,
142 struct icmsg_data_t *dev_data,
143 const void *msg, size_t len);
144
190int icmsg_get_tx_buffer(const struct icmsg_config_t *conf,
191 struct icmsg_data_t *dev_data,
192 void **data, size_t *size);
193
214 struct icmsg_data_t *dev_data,
215 const void *data);
216
252int icmsg_send_nocopy(const struct icmsg_config_t *conf,
253 struct icmsg_data_t *dev_data,
254 const void *msg, size_t len);
255
256#ifdef CONFIG_IPC_SERVICE_ICMSG_NOCOPY_RX
274int icmsg_hold_rx_buffer(const struct icmsg_config_t *conf,
275 struct icmsg_data_t *dev_data,
276 const void *data);
277
295int icmsg_release_rx_buffer(const struct icmsg_config_t *conf,
296 struct icmsg_data_t *dev_data,
297 const void *data);
298#endif
299
310int icmsg_clear_tx_memory(const struct icmsg_config_t *conf);
311
322int icmsg_clear_rx_memory(const struct icmsg_config_t *conf);
long atomic_t
Definition: atomic.h:22
Generic low-level multi-channel inter-processor mailbox communication API.
int icmsg_close(const struct icmsg_config_t *conf, struct icmsg_data_t *dev_data)
Close an icmsg instance.
int icmsg_send(const struct icmsg_config_t *conf, struct icmsg_data_t *dev_data, const void *msg, size_t len)
Send a message to the remote icmsg instance.
int icmsg_clear_tx_memory(const struct icmsg_config_t *conf)
Clear memory in TX buffer.
int icmsg_drop_tx_buffer(const struct icmsg_config_t *conf, struct icmsg_data_t *dev_data, const void *data)
Drop and release a TX buffer.
int icmsg_clear_rx_memory(const struct icmsg_config_t *conf)
Clear memory in RX buffer.
int icmsg_open(const struct icmsg_config_t *conf, struct icmsg_data_t *dev_data, const struct ipc_service_cb *cb, void *ctx)
Open an icmsg instance.
int icmsg_send_nocopy(const struct icmsg_config_t *conf, struct icmsg_data_t *dev_data, const void *msg, size_t len)
Send a message from a buffer obtained by icmsg_get_tx_buffer to the remote icmsg instance.
icmsg_state
Definition: icmsg.h:15
@ ICMSG_STATE_BUSY
Definition: icmsg.h:17
@ ICMSG_STATE_READY
Definition: icmsg.h:18
@ ICMSG_STATE_OFF
Definition: icmsg.h:16
int icmsg_init(const struct icmsg_config_t *conf, struct icmsg_data_t *dev_data)
Initialize an icmsg instance.
int icmsg_get_tx_buffer(const struct icmsg_config_t *conf, struct icmsg_data_t *dev_data, void **data, size_t *size)
Get an empty TX buffer to be sent using icmsg_send_nocopy.
Public kernel APIs.
__UINT8_TYPE__ uint8_t
Definition: stdint.h:88
__UINTPTR_TYPE__ uintptr_t
Definition: stdint.h:105
Definition: icmsg.h:21
size_t rx_shm_size
Definition: icmsg.h:25
size_t tx_shm_size
Definition: icmsg.h:24
uintptr_t rx_shm_addr
Definition: icmsg.h:23
struct mbox_channel mbox_rx
Definition: icmsg.h:27
uintptr_t tx_shm_addr
Definition: icmsg.h:22
struct mbox_channel mbox_tx
Definition: icmsg.h:26
Definition: icmsg.h:30
const struct ipc_service_cb * cb
Definition: icmsg.h:37
atomic_t send_buffer_reserved
Definition: icmsg.h:34
struct k_work_delayable notify_work
Definition: icmsg.h:42
uint8_t rx_buffer[CONFIG_IPC_SERVICE_ICMSG_CB_BUF_SIZE]
Definition: icmsg.h:45
const struct icmsg_config_t * cfg
Definition: icmsg.h:41
struct spsc_pbuf * tx_ib
Definition: icmsg.h:32
struct spsc_pbuf * rx_ib
Definition: icmsg.h:33
struct k_work mbox_work
Definition: icmsg.h:43
void * ctx
Definition: icmsg.h:38
atomic_t state
Definition: icmsg.h:44
Event callback structure.
Definition: ipc_service.h:144
A structure used to submit work after a delay.
Definition: kernel.h:3735
A structure used to submit work.
Definition: kernel.h:3707
Provides a type to hold an MBOX channel.
Definition: mbox.h:93
Single producer, single consumer packet buffer.
Definition: spsc_pbuf.h:100
static fdata_t data[2]
Definition: test_fifo_contexts.c:15
static void msg(uint64_t c64)
Definition: main.c:17