Zephyr Project API 4.2.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
ipm.h
Go to the documentation of this file.
1
7/*
8 * Copyright (c) 2015 Intel Corporation
9 *
10 * SPDX-License-Identifier: Apache-2.0
11 */
12
13#ifndef ZEPHYR_INCLUDE_DRIVERS_IPM_H_
14#define ZEPHYR_INCLUDE_DRIVERS_IPM_H_
15
25#include <zephyr/kernel.h>
26#include <zephyr/device.h>
27
28#ifdef __cplusplus
29extern "C" {
30#endif
31
47typedef void (*ipm_callback_t)(const struct device *ipmdev, void *user_data,
48 uint32_t id, volatile void *data);
49
56typedef int (*ipm_send_t)(const struct device *ipmdev, int wait, uint32_t id,
57 const void *data, int size);
64typedef int (*ipm_max_data_size_get_t)(const struct device *ipmdev);
65
72typedef uint32_t (*ipm_max_id_val_get_t)(const struct device *ipmdev);
73
80typedef void (*ipm_register_callback_t)(const struct device *port,
82 void *user_data);
83
90typedef int (*ipm_set_enabled_t)(const struct device *ipmdev, int enable);
91
98typedef void (*ipm_complete_t)(const struct device *ipmdev);
99
110
147__syscall int ipm_send(const struct device *ipmdev, int wait, uint32_t id,
148 const void *data, int size);
149
150static inline int z_impl_ipm_send(const struct device *ipmdev, int wait,
151 uint32_t id,
152 const void *data, int size)
153{
154 const struct ipm_driver_api *api =
155 (const struct ipm_driver_api *)ipmdev->api;
156
157 return api->send(ipmdev, wait, id, data, size);
158}
159
168static inline void ipm_register_callback(const struct device *ipmdev,
169 ipm_callback_t cb, void *user_data)
170{
171 const struct ipm_driver_api *api =
172 (const struct ipm_driver_api *)ipmdev->api;
173
174 api->register_callback(ipmdev, cb, user_data);
175}
176
187__syscall int ipm_max_data_size_get(const struct device *ipmdev);
188
189static inline int z_impl_ipm_max_data_size_get(const struct device *ipmdev)
190{
191 const struct ipm_driver_api *api =
192 (const struct ipm_driver_api *)ipmdev->api;
193
194 return api->max_data_size_get(ipmdev);
195}
196
197
208__syscall uint32_t ipm_max_id_val_get(const struct device *ipmdev);
209
210static inline uint32_t z_impl_ipm_max_id_val_get(const struct device *ipmdev)
211{
212 const struct ipm_driver_api *api =
213 (const struct ipm_driver_api *)ipmdev->api;
214
215 return api->max_id_val_get(ipmdev);
216}
217
227__syscall int ipm_set_enabled(const struct device *ipmdev, int enable);
228
229static inline int z_impl_ipm_set_enabled(const struct device *ipmdev,
230 int enable)
231{
232 const struct ipm_driver_api *api =
233 (const struct ipm_driver_api *)ipmdev->api;
234
235 return api->set_enabled(ipmdev, enable);
236}
237
252__syscall void ipm_complete(const struct device *ipmdev);
253
254static inline void z_impl_ipm_complete(const struct device *ipmdev)
255{
256#ifdef CONFIG_IPM_CALLBACK_ASYNC
257 const struct ipm_driver_api *api =
258 (const struct ipm_driver_api *)ipmdev->api;
259
260 if (api->complete != NULL) {
261 api->complete(ipmdev);
262 }
263#endif
264}
265
266#ifdef __cplusplus
267}
268#endif
269
274#include <zephyr/syscalls/ipm.h>
275
276#endif /* ZEPHYR_INCLUDE_DRIVERS_IPM_H_ */
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_register_callback_t)(const struct device *port, ipm_callback_t cb, void *user_data)
Callback API upon registration.
Definition ipm.h:80
int(* ipm_set_enabled_t)(const struct device *ipmdev, int enable)
Callback API upon enablement of interrupts.
Definition ipm.h:90
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:168
int ipm_set_enabled(const struct device *ipmdev, int enable)
Enable interrupts and callbacks for inbound channels.
int(* ipm_max_data_size_get_t)(const struct device *ipmdev)
Callback API to get maximum data size.
Definition ipm.h:64
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:56
void(* ipm_complete_t)(const struct device *ipmdev)
Callback API upon command completion.
Definition ipm.h:98
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.
uint32_t(* ipm_max_id_val_get_t)(const struct device *ipmdev)
Callback API to get the ID's maximum value.
Definition ipm.h:72
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:47
#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:510
void * data
Address of the device instance private data.
Definition device.h:520
const void * api
Address of the API structure exposed by the device instance.
Definition device.h:516
Definition ipm.h:100
ipm_register_callback_t register_callback
Definition ipm.h:102
ipm_max_data_size_get_t max_data_size_get
Definition ipm.h:103
ipm_max_id_val_get_t max_id_val_get
Definition ipm.h:104
ipm_set_enabled_t set_enabled
Definition ipm.h:105
ipm_send_t send
Definition ipm.h:101