Zephyr API Documentation 4.3.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
transport.h
Go to the documentation of this file.
1/*
2 * Copyright 2024 NXP
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
12
13#ifndef _INCLUDE_ZEPHYR_DRIVERS_FIRMWARE_SCMI_TRANSPORT_H_
14#define _INCLUDE_ZEPHYR_DRIVERS_FIRMWARE_SCMI_TRANSPORT_H_
15
16#include <zephyr/device.h>
17#include <zephyr/kernel.h>
18
25
26struct scmi_message;
27struct scmi_channel;
28
43typedef void (*scmi_channel_cb)(struct scmi_channel *chan);
44
60 struct k_mutex lock;
66 struct k_sem sem;
68 void *data;
77 bool ready;
78};
79
81 int (*init)(const struct device *transport);
82 int (*send_message)(const struct device *transport,
83 struct scmi_channel *chan,
84 struct scmi_message *msg);
85 int (*setup_chan)(const struct device *transport,
86 struct scmi_channel *chan,
87 bool tx);
88 int (*read_message)(const struct device *transport,
89 struct scmi_channel *chan,
90 struct scmi_message *msg);
91 bool (*channel_is_free)(const struct device *transport,
92 struct scmi_channel *chan);
93 struct scmi_channel *(*request_channel)(const struct device *transport,
94 uint32_t proto, bool tx);
95};
96
117static inline struct scmi_channel *
119 uint32_t proto, bool tx)
120{
121 const struct scmi_transport_api *api =
122 (const struct scmi_transport_api *)transport->api;
123
124 if (api->request_channel) {
125 return api->request_channel(transport, proto, tx);
126 }
127
128 return NULL;
129}
130
150static inline int scmi_transport_init(const struct device *transport)
151{
152 const struct scmi_transport_api *api =
153 (const struct scmi_transport_api *)transport->api;
154
155 if (api->init) {
156 return api->init(transport);
157 }
158
159 return 0;
160}
161
178static inline int scmi_transport_setup_chan(const struct device *transport,
179 struct scmi_channel *chan,
180 bool tx)
181{
182 const struct scmi_transport_api *api =
183 (const struct scmi_transport_api *)transport->api;
184
185 if (!api || !api->setup_chan) {
186 return -ENOSYS;
187 }
188
189 return api->setup_chan(transport, chan, tx);
190}
191
207static inline int scmi_transport_send_message(const struct device *transport,
208 struct scmi_channel *chan,
209 struct scmi_message *msg)
210{
211 const struct scmi_transport_api *api =
212 (const struct scmi_transport_api *)transport->api;
213
214 if (!api || !api->send_message) {
215 return -ENOSYS;
216 }
217
218 return api->send_message(transport, chan, msg);
219}
220
233static inline int scmi_transport_read_message(const struct device *transport,
234 struct scmi_channel *chan,
235 struct scmi_message *msg)
236{
237 const struct scmi_transport_api *api =
238 (const struct scmi_transport_api *)transport->api;
239
240 if (!api || !api->read_message) {
241 return -ENOSYS;
242 }
243
244 return api->read_message(transport, chan, msg);
245}
246
258static inline bool scmi_transport_channel_is_free(const struct device *transport,
259 struct scmi_channel *chan)
260{
261 const struct scmi_transport_api *api =
262 (const struct scmi_transport_api *)transport->api;
263
264 if (!api || !api->channel_is_free) {
265 return -ENOSYS;
266 }
267
268 return api->channel_is_free(transport, chan);
269}
270
280int scmi_core_transport_init(const struct device *transport);
281
285
286#endif /* _INCLUDE_ZEPHYR_DRIVERS_FIRMWARE_SCMI_TRANSPORT_H_ */
void(* scmi_channel_cb)(struct scmi_channel *chan)
Callback function for message replies.
Definition transport.h:43
static bool scmi_transport_channel_is_free(const struct device *transport, struct scmi_channel *chan)
Check if an SCMI channel is free.
Definition transport.h:258
int scmi_core_transport_init(const struct device *transport)
Perfrom SCMI core initialization.
static int scmi_transport_setup_chan(const struct device *transport, struct scmi_channel *chan, bool tx)
Setup an SCMI channel.
Definition transport.h:178
static int scmi_transport_init(const struct device *transport)
Perform initialization for the transport layer driver.
Definition transport.h:150
static int scmi_transport_send_message(const struct device *transport, struct scmi_channel *chan, struct scmi_message *msg)
Send an SCMI channel.
Definition transport.h:207
static struct scmi_channel * scmi_transport_request_channel(const struct device *transport, uint32_t proto, bool tx)
Request an SCMI channel dynamically.
Definition transport.h:118
static int scmi_transport_read_message(const struct device *transport, struct scmi_channel *chan, struct scmi_message *msg)
Read an SCMI message.
Definition transport.h:233
#define ENOSYS
Function not implemented.
Definition errno.h:82
#define NULL
Definition iar_missing_defs.h:20
Public kernel APIs.
#define bool
Definition stdbool.h:13
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
Runtime device structure (in ROM) per driver instance.
Definition device.h:513
const void * api
Address of the API structure exposed by the device instance.
Definition device.h:519
Mutex Structure.
Definition kernel.h:3336
Semaphore structure.
Definition kernel.h:3541
SCMI channel structure.
Definition transport.h:53
void * data
channel private data
Definition transport.h:68
bool ready
is the channel ready to be used by a protocol?
Definition transport.h:77
struct k_sem sem
binary semaphore.
Definition transport.h:66
struct k_mutex lock
channel lock.
Definition transport.h:60
scmi_channel_cb cb
callback function.
Definition transport.h:75
SCMI message structure.
Definition protocol.h:110
Definition transport.h:80
int(* init)(const struct device *transport)
Definition transport.h:81
int(* setup_chan)(const struct device *transport, struct scmi_channel *chan, bool tx)
Definition transport.h:85
struct scmi_channel *(* request_channel)(const struct device *transport, uint32_t proto, bool tx)
Definition transport.h:93
bool(* channel_is_free)(const struct device *transport, struct scmi_channel *chan)
Definition transport.h:91
int(* send_message)(const struct device *transport, struct scmi_channel *chan, struct scmi_message *msg)
Definition transport.h:82
int(* read_message)(const struct device *transport, struct scmi_channel *chan, struct scmi_message *msg)
Definition transport.h:88