37#if defined(__cplusplus)
42#include "rpmsg_compiler.h"
55#define RL_VERSION "5.1.4"
59#define RL_WORD_SIZE (sizeof(uint32_t))
61#define RL_WORD_ALIGN_UP(a) \
62 (((((uintptr_t)(a)) & (RL_WORD_SIZE - 1U)) != 0U) ? ((((uintptr_t)(a)) & (~(RL_WORD_SIZE - 1U))) + 4U) : \
65#define RL_WORD_ALIGN_DOWN(a) \
66 (((((uintptr_t)(a)) & (RL_WORD_SIZE - 1U)) != 0U) ? (((uintptr_t)(a)) & (~(RL_WORD_SIZE - 1U))) : ((uintptr_t)(a)))
72#define RL_NULL ((void *)0)
82#define RL_ADDR_ANY (0xFFFFFFFFU)
88#define RL_DONT_BLOCK (0)
90#define RL_BLOCK (~0UL)
94#define RL_ERRORS_BASE (-5000)
96#define RL_ERR_NO_MEM (RL_ERRORS_BASE - 1)
98#define RL_ERR_BUFF_SIZE (RL_ERRORS_BASE - 2)
100#define RL_ERR_PARAM (RL_ERRORS_BASE - 3)
102#define RL_ERR_DEV_ID (RL_ERRORS_BASE - 4)
104#define RL_ERR_MAX_VQ (RL_ERRORS_BASE - 5)
106#define RL_ERR_NO_BUFF (RL_ERRORS_BASE - 6)
108#define RL_NOT_READY (RL_ERRORS_BASE - 7)
110#define RL_ALREADY_DONE (RL_ERRORS_BASE - 8)
114#define RL_NO_FLAGS (0U)
157typedef int32_t (*
rl_ept_rx_cb_t)(
void *payload, uint32_t payload_len, uint32_t
src,
void *priv);
192#if defined(RL_USE_STATIC_API) && (RL_USE_STATIC_API == 1)
193 LOCK_STATIC_CONTEXT lock_static_ctxt;
200#if defined(RL_USE_ENVIRONMENT_CONTEXT) && (RL_USE_ENVIRONMENT_CONTEXT == 1)
204#if defined(RL_USE_STATIC_API) && (RL_USE_STATIC_API == 1)
205 struct vq_static_context vq_ctxt[2];
236#if defined(RL_USE_STATIC_API) && (RL_USE_STATIC_API == 1)
242#elif defined(RL_USE_ENVIRONMENT_CONTEXT) && (RL_USE_ENVIRONMENT_CONTEXT == 1)
244 void *shmem_addr,
size_t shmem_length, uint32_t
link_id, uint32_t init_flags,
void *env_cfg);
249 uint32_t init_flags);
270#if defined(RL_USE_STATIC_API) && (RL_USE_STATIC_API == 1)
275#elif defined(RL_USE_ENVIRONMENT_CONTEXT) && (RL_USE_ENVIRONMENT_CONTEXT == 1)
311#if defined(RL_USE_STATIC_API) && (RL_USE_STATIC_API == 1)
379#if defined(RL_API_HAS_ZEROCOPY) && (RL_API_HAS_ZEROCOPY == 1)
445#if defined(__cplusplus)
struct virtqueue_ops const * vq_ops
Definition: rpmsg_lite.h:199
uint32_t dst
Definition: rpmsg_lite.h:137
struct rpmsg_hdr_reserved reserved
Definition: rpmsg_lite.h:138
void * rx_cb_data
Definition: rpmsg_lite.h:166
struct virtqueue * rvq
Definition: rpmsg_lite.h:188
rl_ept_rx_cb_t rx_cb
Definition: rpmsg_lite.h:165
struct rpmsg_lite_endpoint ept
Definition: rpmsg_lite.h:176
struct llist * rl_endpoints
Definition: rpmsg_lite.h:190
uint32_t link_id
Definition: rpmsg_lite.h:207
uint32_t link_state
Definition: rpmsg_lite.h:195
uint16_t len
Definition: rpmsg_lite.h:139
uint16_t flags
Definition: rpmsg_lite.h:140
char * sh_mem_base
Definition: rpmsg_lite.h:196
uint32_t addr
Definition: rpmsg_lite.h:164
uint8_t data[1]
Definition: rpmsg_lite.h:151
uint32_t src
Definition: rpmsg_lite.h:136
struct llist node
Definition: rpmsg_lite.h:177
LOCK * lock
Definition: rpmsg_lite.h:191
uint32_t sh_mem_remaining
Definition: rpmsg_lite.h:197
struct rpmsg_std_hdr hdr
Definition: rpmsg_lite.h:150
void * rfu
Definition: rpmsg_lite.h:167
uint32_t sh_mem_total
Definition: rpmsg_lite.h:198
struct virtqueue * tvq
Definition: rpmsg_lite.h:189
RL_PACKED_BEGIN struct rpmsg_std_hdr RL_PACKED_END
End of packed structure.
int32_t(* rl_ept_rx_cb_t)(void *payload, uint32_t payload_len, uint32_t src, void *priv)
Receive callback function type.
Definition: rpmsg_lite.h:157
void * rpmsg_lite_alloc_tx_buffer(struct rpmsg_lite_instance *rpmsg_lite_dev, uint32_t *size, uintptr_t timeout)
Allocates the tx buffer for message payload.
int32_t rpmsg_lite_send(struct rpmsg_lite_instance *rpmsg_lite_dev, struct rpmsg_lite_endpoint *ept, uint32_t dst, char *data, uint32_t size, uintptr_t timeout)
Sends a message contained in data field of length size to the remote endpoint with address dst....
int32_t rpmsg_lite_release_rx_buffer(struct rpmsg_lite_instance *rpmsg_lite_dev, void *rxbuf)
Releases the rx buffer for future reuse in vring. This API can be called at process context when the ...
int32_t rpmsg_lite_send_nocopy(struct rpmsg_lite_instance *rpmsg_lite_dev, struct rpmsg_lite_endpoint *ept, uint32_t dst, void *data, uint32_t size)
Sends a message in tx buffer allocated by rpmsg_lite_alloc_tx_buffer()
int32_t rpmsg_lite_deinit(struct rpmsg_lite_instance *rpmsg_lite_dev)
Deinitialized the RPMsg-Lite communication stack This function always succeeds. rpmsg_lite_init() can...
struct rpmsg_lite_instance * rpmsg_lite_remote_init(void *shmem_addr, uint32_t link_id, uint32_t init_flags)
Initializes the RPMsg-Lite communication stack. Must be called prior to any other RPMsg-Lite API....
int32_t rpmsg_lite_destroy_ept(struct rpmsg_lite_instance *rpmsg_lite_dev, struct rpmsg_lite_endpoint *rl_ept)
This function deletes rpmsg endpoint and performs cleanup.
uint32_t rpmsg_lite_wait_for_link_up(struct rpmsg_lite_instance *rpmsg_lite_dev, uint32_t timeout)
Function to wait until the link is up. Returns RL_TRUE once the link_state is set or RL_FALSE in case...
struct rpmsg_lite_endpoint * rpmsg_lite_create_ept(struct rpmsg_lite_instance *rpmsg_lite_dev, uint32_t addr, rl_ept_rx_cb_t rx_cb, void *rx_cb_data)
Create a new rpmsg endpoint, which can be used for communication.
struct rpmsg_lite_instance * rpmsg_lite_master_init(void *shmem_addr, size_t shmem_length, uint32_t link_id, uint32_t init_flags)
Initializes the RPMsg-Lite communication stack. Must be called prior to any other RPMSG lite API....
uint32_t rpmsg_lite_is_link_up(struct rpmsg_lite_instance *rpmsg_lite_dev)
Function to get the link state.
Reserved field structure used in rpmsg_std_hdr.
Definition: rpmsg_lite.h:124
Definition: rpmsg_lite.h:163
Definition: rpmsg_lite.h:175
Definition: rpmsg_lite.h:187
Definition: rpmsg_lite.h:135
Definition: rpmsg_lite.h:149