Zephyr API Documentation  2.7.0-rc2
A Scalable Open Source RTOS
rpmsg_multi_instance.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2021 Nordic Semiconductor ASA
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#ifndef ZEPHYR_INCLUDE_RPMSG_MULTIPLE_INSTANCE_H_
8#define ZEPHYR_INCLUDE_RPMSG_MULTIPLE_INSTANCE_H_
9
10#include <openamp/open_amp.h>
11#include <metal/sys.h>
12#include <metal/device.h>
13#include <metal/alloc.h>
14
15#ifdef __cplusplus
16extern "C" {
17#endif
18
25#define VDEV_START_ADDR CONFIG_RPMSG_MULTI_INSTANCE_SHM_BASE_ADDRESS
26#define VDEV_SIZE CONFIG_RPMSG_MULTI_INSTANCE_SHM_SIZE
27
28#define SHM_START_ADDR VDEV_START_ADDR
29#define SHM_SIZE VDEV_SIZE
30
31#define VRING_ALIGNMENT (4)
32#define VDEV_STATUS_SIZE (0x4)
44 void (*bound)(void *priv);
45
52 void (*received)(const void *data, size_t len, void *priv);
53};
54
57
59 const char *name;
60
62 struct rpmsg_endpoint ep;
63
65 struct rpmsg_mi_cb *cb;
66
68 void *priv;
69
71 volatile bool bound;
72
75};
76
79
81 const char *name;
82
84 struct rpmsg_mi_cb *cb;
85
87 void *priv;
88};
89
92 const char *name;
95
96 const struct device *ipm_tx_handle;
97 const struct device *ipm_rx_handle;
98
99 unsigned int ipm_tx_id;
100
102 struct metal_io_region *shm_io;
103 struct metal_device shm_device;
104 metal_phys_addr_t shm_physmap[1];
105
106 struct rpmsg_virtio_device rvdev;
107 struct rpmsg_virtio_shm_pool shpool;
108 struct rpmsg_device *rdev;
109
110 struct virtqueue *vq[2];
111 struct virtio_vring_info rvrings[2];
112 struct virtio_device vdev;
113
116
118};
119
123
125 size_t size;
126
128 unsigned int instance;
129};
130
133
135 const char *name;
136
139
142
145
147 const char *ipm_thread_name;
148
150 const char *ipm_tx_name;
151
153 const char *ipm_rx_name;
154
156 unsigned int ipm_tx_id;
157
160};
161
175int rpmsg_mi_ctx_init(struct rpmsg_mi_ctx *ctx, const struct rpmsg_mi_ctx_cfg *cfg);
176
189 struct rpmsg_mi_ept *ept,
190 struct rpmsg_mi_ept_cfg *cfg);
191
202int rpmsg_mi_send(struct rpmsg_mi_ept *ept, const void *data, size_t len);
203
208#ifdef __cplusplus
209}
210#endif
211
212#endif /* ZEPHYR_INCLUDE_RPMSG_MULTIPLE_INNSTANCE_H_ */
struct z_thread_stack_element k_thread_stack_t
Typedef of struct z_thread_stack_element.
Definition: arch_interface.h:44
void
Definition: eswifi_shell.c:15
int rpmsg_mi_send(struct rpmsg_mi_ept *ept, const void *data, size_t len)
Send data using given IPC endpoint.
int rpmsg_mi_ept_register(struct rpmsg_mi_ctx *ctx, struct rpmsg_mi_ept *ept, struct rpmsg_mi_ept_cfg *cfg)
Register IPC endpoint.
int rpmsg_mi_ctx_init(struct rpmsg_mi_ctx *ctx, const struct rpmsg_mi_ctx_cfg *cfg)
Initialization of RPMsg instance.
struct _slist sys_slist_t
Definition: slist.h:40
struct _snode sys_snode_t
Definition: slist.h:33
__UINTPTR_TYPE__ uintptr_t
Definition: stdint.h:75
Runtime device structure (in ROM) per driver instance.
Definition: device.h:367
A structure used to hold work until it can be processed.
Definition: kernel.h:3770
A structure used to submit work.
Definition: kernel.h:3623
Event callback structure.
Definition: rpmsg_multi_instance.h:39
void(* received)(const void *data, size_t len, void *priv)
New packet arrived.
Definition: rpmsg_multi_instance.h:52
void(* bound)(void *priv)
Bind was successful.
Definition: rpmsg_multi_instance.h:44
Configuration of the RPMsg instance.
Definition: rpmsg_multi_instance.h:132
struct rpmsg_mi_ctx_shm_cfg * shm
Definition: rpmsg_multi_instance.h:159
size_t ipm_stack_size
Definition: rpmsg_multi_instance.h:141
const char * ipm_rx_name
Definition: rpmsg_multi_instance.h:153
unsigned int ipm_tx_id
Definition: rpmsg_multi_instance.h:156
const char * ipm_tx_name
Definition: rpmsg_multi_instance.h:150
k_thread_stack_t * ipm_stack_area
Definition: rpmsg_multi_instance.h:138
const char * name
Definition: rpmsg_multi_instance.h:135
const char * ipm_thread_name
Definition: rpmsg_multi_instance.h:147
int ipm_work_q_prio
Definition: rpmsg_multi_instance.h:144
Definition: rpmsg_multi_instance.h:120
size_t size
Definition: rpmsg_multi_instance.h:125
uintptr_t addr
Definition: rpmsg_multi_instance.h:122
unsigned int instance
Definition: rpmsg_multi_instance.h:128
Struct describing the context of the RPMsg instance.
Definition: rpmsg_multi_instance.h:91
struct rpmsg_device * rdev
Definition: rpmsg_multi_instance.h:108
sys_slist_t endpoints
Definition: rpmsg_multi_instance.h:117
uintptr_t vring_tx_addr
Definition: rpmsg_multi_instance.h:114
struct metal_io_region * shm_io
Definition: rpmsg_multi_instance.h:102
struct virtio_vring_info rvrings[2]
Definition: rpmsg_multi_instance.h:111
const struct device * ipm_tx_handle
Definition: rpmsg_multi_instance.h:96
const struct device * ipm_rx_handle
Definition: rpmsg_multi_instance.h:97
unsigned int ipm_tx_id
Definition: rpmsg_multi_instance.h:99
struct rpmsg_virtio_shm_pool shpool
Definition: rpmsg_multi_instance.h:107
struct rpmsg_virtio_device rvdev
Definition: rpmsg_multi_instance.h:106
const char * name
Definition: rpmsg_multi_instance.h:92
uintptr_t vring_rx_addr
Definition: rpmsg_multi_instance.h:115
struct k_work ipm_work
Definition: rpmsg_multi_instance.h:94
struct virtqueue * vq[2]
Definition: rpmsg_multi_instance.h:110
struct k_work_q ipm_work_q
Definition: rpmsg_multi_instance.h:93
metal_phys_addr_t shm_physmap[1]
Definition: rpmsg_multi_instance.h:104
struct metal_device shm_device
Definition: rpmsg_multi_instance.h:103
struct virtio_device vdev
Definition: rpmsg_multi_instance.h:112
uintptr_t shm_status_reg_addr
Definition: rpmsg_multi_instance.h:101
Endpoint configuration.
Definition: rpmsg_multi_instance.h:78
void * priv
Definition: rpmsg_multi_instance.h:87
struct rpmsg_mi_cb * cb
Definition: rpmsg_multi_instance.h:84
const char * name
Definition: rpmsg_multi_instance.h:81
Endpoint instance.
Definition: rpmsg_multi_instance.h:56
sys_snode_t node
Definition: rpmsg_multi_instance.h:74
struct rpmsg_endpoint ep
Definition: rpmsg_multi_instance.h:62
const char * name
Definition: rpmsg_multi_instance.h:59
struct rpmsg_mi_cb * cb
Definition: rpmsg_multi_instance.h:65
void * priv
Definition: rpmsg_multi_instance.h:68
volatile bool bound
Definition: rpmsg_multi_instance.h:71
static fdata_t data[2]
Definition: test_fifo_contexts.c:15