Zephyr API Documentation 4.4.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
ipm.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2015 Intel Corporation
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
12
13#ifndef ZEPHYR_INCLUDE_DRIVERS_IPM_H_
14#define ZEPHYR_INCLUDE_DRIVERS_IPM_H_
15
24
25#include <zephyr/kernel.h>
26#include <zephyr/device.h>
27
28#ifdef __cplusplus
29extern "C" {
30#endif
31
46typedef void (*ipm_callback_t)(const struct device *ipmdev, void *user_data,
47 uint32_t id, volatile void *data);
48
53
58typedef int (*ipm_send_t)(const struct device *ipmdev, int wait, uint32_t id,
59 const void *data, int size);
60
65typedef int (*ipm_max_data_size_get_t)(const struct device *ipmdev);
66
71typedef uint32_t (*ipm_max_id_val_get_t)(const struct device *ipmdev);
72
77typedef void (*ipm_register_callback_t)(const struct device *port,
79 void *user_data);
80
85typedef int (*ipm_set_enabled_t)(const struct device *ipmdev, int enable);
86
91typedef void (*ipm_complete_t)(const struct device *ipmdev);
92
125
128
165__syscall int ipm_send(const struct device *ipmdev, int wait, uint32_t id,
166 const void *data, int size);
167
168static inline int z_impl_ipm_send(const struct device *ipmdev, int wait,
169 uint32_t id,
170 const void *data, int size)
171{
172 return DEVICE_API_GET(ipm, ipmdev)->send(ipmdev, wait, id, data, size);
173}
174
183static inline void ipm_register_callback(const struct device *ipmdev,
184 ipm_callback_t cb, void *user_data)
185{
186 DEVICE_API_GET(ipm, ipmdev)->register_callback(ipmdev, cb, user_data);
187}
188
199__syscall int ipm_max_data_size_get(const struct device *ipmdev);
200
201static inline int z_impl_ipm_max_data_size_get(const struct device *ipmdev)
202{
203 return DEVICE_API_GET(ipm, ipmdev)->max_data_size_get(ipmdev);
204}
205
206
217__syscall uint32_t ipm_max_id_val_get(const struct device *ipmdev);
218
219static inline uint32_t z_impl_ipm_max_id_val_get(const struct device *ipmdev)
220{
221 return DEVICE_API_GET(ipm, ipmdev)->max_id_val_get(ipmdev);
222}
223
233__syscall int ipm_set_enabled(const struct device *ipmdev, int enable);
234
235static inline int z_impl_ipm_set_enabled(const struct device *ipmdev,
236 int enable)
237{
238 return DEVICE_API_GET(ipm, ipmdev)->set_enabled(ipmdev, enable);
239}
240
255__syscall void ipm_complete(const struct device *ipmdev);
256
257static inline void z_impl_ipm_complete(const struct device *ipmdev)
258{
259#ifdef CONFIG_IPM_CALLBACK_ASYNC
260 const struct ipm_driver_api *api = DEVICE_API_GET(ipm, ipmdev);
261
262 if (api->complete != NULL) {
263 api->complete(ipmdev);
264 }
265#endif
266}
267
268#ifdef __cplusplus
269}
270#endif
271
275
276#include <zephyr/syscalls/ipm.h>
277
278#endif /* ZEPHYR_INCLUDE_DRIVERS_IPM_H_ */
#define DEVICE_API_GET(_class, _dev)
Expands to the pointer of a device's API for a given class.
Definition device.h:1425
void(* ipm_complete_t)(const struct device *ipmdev)
Callback API to signal asynchronous command completion.
Definition ipm.h:91
int(* ipm_max_data_size_get_t)(const struct device *ipmdev)
Callback API to get maximum data size.
Definition ipm.h:65
int(* ipm_send_t)(const struct device *ipmdev, int wait, uint32_t id, const void *data, int size)
Callback API to send IPM messages.
Definition ipm.h:58
void(* ipm_register_callback_t)(const struct device *port, ipm_callback_t cb, void *user_data)
Callback API to register a callback for incoming messages.
Definition ipm.h:77
uint32_t(* ipm_max_id_val_get_t)(const struct device *ipmdev)
Callback API to get the ID's maximum value.
Definition ipm.h:71
int(* ipm_set_enabled_t)(const struct device *ipmdev, int enable)
Callback API to enable or disable interrupts for inbound channels.
Definition ipm.h:85
int ipm_max_data_size_get(const struct device *ipmdev)
Return the maximum number of bytes possible in an outbound message.
uint32_t ipm_max_id_val_get(const struct device *ipmdev)
Return the maximum id value possible in an outbound message.
void(* ipm_callback_t)(const struct device *ipmdev, void *user_data, uint32_t id, volatile void *data)
Callback API for incoming IPM messages.
Definition ipm.h:46
void ipm_complete(const struct device *ipmdev)
Signal asynchronous command completion.
static void ipm_register_callback(const struct device *ipmdev, ipm_callback_t cb, void *user_data)
Register a callback function for incoming messages.
Definition ipm.h:183
int ipm_set_enabled(const struct device *ipmdev, int enable)
Enable interrupts and callbacks for inbound channels.
int ipm_send(const struct device *ipmdev, int wait, uint32_t id, const void *data, int size)
Try to send a message over the IPM device.
#define NULL
Definition iar_missing_defs.h:20
Public kernel APIs.
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
Runtime device structure (in ROM) per driver instance.
Definition device.h:513
void * data
Address of the device instance private data.
Definition device.h:523
<span class="mlabel">Driver Operations</span> IPM driver operations
Definition ipm.h:96
ipm_register_callback_t register_callback
<span class="op-badge op-req" title="This operation MUST be implemented by the driver....
Definition ipm.h:104
ipm_max_data_size_get_t max_data_size_get
<span class="op-badge op-req" title="This operation MUST be implemented by the driver....
Definition ipm.h:108
ipm_max_id_val_get_t max_id_val_get
<span class="op-badge op-req" title="This operation MUST be implemented by the driver....
Definition ipm.h:112
ipm_complete_t complete
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition ipm.h:122
ipm_set_enabled_t set_enabled
<span class="op-badge op-req" title="This operation MUST be implemented by the driver....
Definition ipm.h:116
ipm_send_t send
<span class="op-badge op-req" title="This operation MUST be implemented by the driver....
Definition ipm.h:100