Zephyr API Documentation  3.5.0
A Scalable Open Source RTOS
3.5.0
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
ivshmem.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2020 Intel Corporation
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#ifndef ZEPHYR_INCLUDE_DRIVERS_VIRTUALIZATION_IVSHMEM_H_
8#define ZEPHYR_INCLUDE_DRIVERS_VIRTUALIZATION_IVSHMEM_H_
9
17#include <zephyr/types.h>
18#include <stddef.h>
19#include <zephyr/device.h>
20#include <zephyr/kernel.h>
21
22#ifdef __cplusplus
23extern "C" {
24#endif
25
26#define IVSHMEM_V2_PROTO_UNDEFINED 0x0000
27#define IVSHMEM_V2_PROTO_NET 0x0001
28
29typedef size_t (*ivshmem_get_mem_f)(const struct device *dev,
30 uintptr_t *memmap);
31
32typedef uint32_t (*ivshmem_get_id_f)(const struct device *dev);
33
34typedef uint16_t (*ivshmem_get_vectors_f)(const struct device *dev);
35
36typedef int (*ivshmem_int_peer_f)(const struct device *dev,
37 uint32_t peer_id, uint16_t vector);
38
39typedef int (*ivshmem_register_handler_f)(const struct device *dev,
40 struct k_poll_signal *signal,
41 uint16_t vector);
42
43#ifdef CONFIG_IVSHMEM_V2
44
45typedef size_t (*ivshmem_get_rw_mem_section_f)(const struct device *dev,
46 uintptr_t *memmap);
47
48typedef size_t (*ivshmem_get_output_mem_section_f)(const struct device *dev,
49 uint32_t peer_id,
50 uintptr_t *memmap);
51
52typedef uint32_t (*ivshmem_get_state_f)(const struct device *dev,
53 uint32_t peer_id);
54
55typedef int (*ivshmem_set_state_f)(const struct device *dev,
57
58typedef uint32_t (*ivshmem_get_max_peers_f)(const struct device *dev);
59
60typedef uint16_t (*ivshmem_get_protocol_f)(const struct device *dev);
61
62typedef int (*ivshmem_enable_interrupts_f)(const struct device *dev,
63 bool enable);
64
65#endif /* CONFIG_IVSHMEM_V2 */
66
67__subsystem struct ivshmem_driver_api {
73#ifdef CONFIG_IVSHMEM_V2
74 ivshmem_get_rw_mem_section_f get_rw_mem_section;
75 ivshmem_get_output_mem_section_f get_output_mem_section;
76 ivshmem_get_state_f get_state;
77 ivshmem_set_state_f set_state;
78 ivshmem_get_max_peers_f get_max_peers;
79 ivshmem_get_protocol_f get_protocol;
80 ivshmem_enable_interrupts_f enable_interrupts;
81#endif
82};
83
92__syscall size_t ivshmem_get_mem(const struct device *dev,
93 uintptr_t *memmap);
94
95static inline size_t z_impl_ivshmem_get_mem(const struct device *dev,
96 uintptr_t *memmap)
97{
98 const struct ivshmem_driver_api *api =
99 (const struct ivshmem_driver_api *)dev->api;
100
101 return api->get_mem(dev, memmap);
102}
103
111__syscall uint32_t ivshmem_get_id(const struct device *dev);
112
113static inline uint32_t z_impl_ivshmem_get_id(const struct device *dev)
114{
115 const struct ivshmem_driver_api *api =
116 (const struct ivshmem_driver_api *)dev->api;
117
118 return api->get_id(dev);
119}
120
128__syscall uint16_t ivshmem_get_vectors(const struct device *dev);
129
130static inline uint16_t z_impl_ivshmem_get_vectors(const struct device *dev)
131{
132 const struct ivshmem_driver_api *api =
133 (const struct ivshmem_driver_api *)dev->api;
134
135 return api->get_vectors(dev);
136}
137
147__syscall int ivshmem_int_peer(const struct device *dev,
148 uint32_t peer_id, uint16_t vector);
149
150static inline int z_impl_ivshmem_int_peer(const struct device *dev,
151 uint32_t peer_id, uint16_t vector)
152{
153 const struct ivshmem_driver_api *api =
154 (const struct ivshmem_driver_api *)dev->api;
155
156 return api->int_peer(dev, peer_id, vector);
157}
158
174__syscall int ivshmem_register_handler(const struct device *dev,
175 struct k_poll_signal *signal,
176 uint16_t vector);
177
178static inline int z_impl_ivshmem_register_handler(const struct device *dev,
179 struct k_poll_signal *signal,
180 uint16_t vector)
181{
182 const struct ivshmem_driver_api *api =
183 (const struct ivshmem_driver_api *)dev->api;
184
185 return api->register_handler(dev, signal, vector);
186}
187
188#ifdef CONFIG_IVSHMEM_V2
189
198__syscall size_t ivshmem_get_rw_mem_section(const struct device *dev,
199 uintptr_t *memmap);
200
201static inline size_t z_impl_ivshmem_get_rw_mem_section(const struct device *dev,
202 uintptr_t *memmap)
203{
204 const struct ivshmem_driver_api *api =
205 (const struct ivshmem_driver_api *)dev->api;
206
207 return api->get_rw_mem_section(dev, memmap);
208}
209
219__syscall size_t ivshmem_get_output_mem_section(const struct device *dev,
220 uint32_t peer_id,
221 uintptr_t *memmap);
222
223static inline size_t z_impl_ivshmem_get_output_mem_section(const struct device *dev,
224 uint32_t peer_id,
225 uintptr_t *memmap)
226{
227 const struct ivshmem_driver_api *api =
228 (const struct ivshmem_driver_api *)dev->api;
229
230 return api->get_output_mem_section(dev, peer_id, memmap);
231}
232
241__syscall uint32_t ivshmem_get_state(const struct device *dev,
242 uint32_t peer_id);
243
244static inline uint32_t z_impl_ivshmem_get_state(const struct device *dev,
245 uint32_t peer_id)
246{
247 const struct ivshmem_driver_api *api =
248 (const struct ivshmem_driver_api *)dev->api;
249
250 return api->get_state(dev, peer_id);
251}
252
261__syscall int ivshmem_set_state(const struct device *dev,
263
264static inline int z_impl_ivshmem_set_state(const struct device *dev,
266{
267 const struct ivshmem_driver_api *api =
268 (const struct ivshmem_driver_api *)dev->api;
269
270 return api->set_state(dev, state);
271}
272
280__syscall uint32_t ivshmem_get_max_peers(const struct device *dev);
281
282static inline uint32_t z_impl_ivshmem_get_max_peers(const struct device *dev)
283{
284 const struct ivshmem_driver_api *api =
285 (const struct ivshmem_driver_api *)dev->api;
286
287 return api->get_max_peers(dev);
288}
289
297__syscall uint16_t ivshmem_get_protocol(const struct device *dev);
298
299static inline uint16_t z_impl_ivshmem_get_protocol(const struct device *dev)
300{
301 const struct ivshmem_driver_api *api =
302 (const struct ivshmem_driver_api *)dev->api;
303
304 return api->get_protocol(dev);
305}
306
315__syscall int ivshmem_enable_interrupts(const struct device *dev,
316 bool enable);
317
318static inline int z_impl_ivshmem_enable_interrupts(const struct device *dev,
319 bool enable)
320{
321 const struct ivshmem_driver_api *api =
322 (const struct ivshmem_driver_api *)dev->api;
323
324 return api->enable_interrupts(dev, enable);
325}
326
327#endif /* CONFIG_IVSHMEM_V2 */
328
329#ifdef __cplusplus
330}
331#endif
332
337#include <syscalls/ivshmem.h>
338
339#endif /* ZEPHYR_INCLUDE_DRIVERS_VIRTUALIZATION_IVSHMEM_H_ */
int(* ivshmem_int_peer_f)(const struct device *dev, uint32_t peer_id, uint16_t vector)
Definition: ivshmem.h:36
uint16_t(* ivshmem_get_vectors_f)(const struct device *dev)
Definition: ivshmem.h:34
int(* ivshmem_register_handler_f)(const struct device *dev, struct k_poll_signal *signal, uint16_t vector)
Definition: ivshmem.h:39
int ivshmem_register_handler(const struct device *dev, struct k_poll_signal *signal, uint16_t vector)
Register a vector notification (interrupt) handler.
uint32_t(* ivshmem_get_id_f)(const struct device *dev)
Definition: ivshmem.h:32
uint32_t ivshmem_get_id(const struct device *dev)
Get our VM ID.
int ivshmem_int_peer(const struct device *dev, uint32_t peer_id, uint16_t vector)
Interrupt another VM.
size_t ivshmem_get_mem(const struct device *dev, uintptr_t *memmap)
Get the inter-VM shared memory.
size_t(* ivshmem_get_mem_f)(const struct device *dev, uintptr_t *memmap)
Definition: ivshmem.h:29
uint16_t ivshmem_get_vectors(const struct device *dev)
Get the number of interrupt vectors we can use.
Public kernel APIs.
state
Definition: parser_state.h:29
Size of off_t must be equal or less than size of size_t
Definition: retained_mem.h:28
__UINT32_TYPE__ uint32_t
Definition: stdint.h:90
__UINTPTR_TYPE__ uintptr_t
Definition: stdint.h:105
__UINT16_TYPE__ uint16_t
Definition: stdint.h:89
Runtime device structure (in ROM) per driver instance.
Definition: device.h:381
const void * api
Address of the API structure exposed by the device instance.
Definition: device.h:387
Definition: ivshmem.h:67
ivshmem_register_handler_f register_handler
Definition: ivshmem.h:72
ivshmem_get_id_f get_id
Definition: ivshmem.h:69
ivshmem_int_peer_f int_peer
Definition: ivshmem.h:71
ivshmem_get_vectors_f get_vectors
Definition: ivshmem.h:70
ivshmem_get_mem_f get_mem
Definition: ivshmem.h:68
Definition: kernel.h:5627