Zephyr Project API 4.0.0
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
target_device.h
Go to the documentation of this file.
1/*
2 * Copyright 2022 Intel Corporation
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#ifndef ZEPHYR_INCLUDE_DRIVERS_I3C_TARGET_DEVICE_H_
8#define ZEPHYR_INCLUDE_DRIVERS_I3C_TARGET_DEVICE_H_
9
17#include <errno.h>
18#include <stddef.h>
19#include <stdint.h>
20
21#include <zephyr/device.h>
22#include <zephyr/sys/slist.h>
23
24#ifdef __cplusplus
25extern "C" {
26#endif
27
28struct i3c_driver_api;
29
90
117
135 int (*write_requested_cb)(struct i3c_target_config *config);
136
157 uint8_t val);
158
180 uint8_t *val);
181
203 uint8_t *val);
204
220 int (*stop_cb)(struct i3c_target_config *config);
221};
222
223__subsystem struct i3c_target_driver_api {
224 int (*driver_register)(const struct device *dev);
225 int (*driver_unregister)(const struct device *dev);
226};
227
252static inline int i3c_target_tx_write(const struct device *dev,
253 uint8_t *buf, uint16_t len, uint8_t hdr_mode)
254{
255 const struct i3c_driver_api *api =
256 (const struct i3c_driver_api *)dev->api;
257
258 if (api->target_tx_write == NULL) {
259 return -ENOSYS;
260 }
261
262 return api->target_tx_write(dev, buf, len, hdr_mode);
263}
264
288static inline int i3c_target_register(const struct device *dev,
289 struct i3c_target_config *cfg)
290{
291 const struct i3c_driver_api *api =
292 (const struct i3c_driver_api *)dev->api;
293
294 if (api->target_register == NULL) {
295 return -ENOSYS;
296 }
297
298 return api->target_register(dev, cfg);
299}
300
317static inline int i3c_target_unregister(const struct device *dev,
318 struct i3c_target_config *cfg)
319{
320 const struct i3c_driver_api *api =
321 (const struct i3c_driver_api *)dev->api;
322
323 if (api->target_unregister == NULL) {
324 return -ENOSYS;
325 }
326
327 return api->target_unregister(dev, cfg);
328}
329
330#ifdef __cplusplus
331}
332#endif
333
338#endif /* ZEPHYR_INCLUDE_DRIVERS_I3C_TARGET_DEVICE_H_ */
System error numbers.
static int i3c_target_unregister(const struct device *dev, struct i3c_target_config *cfg)
Unregisters the provided config as target device.
Definition target_device.h:317
static int i3c_target_register(const struct device *dev, struct i3c_target_config *cfg)
Registers the provided config as target device of a controller.
Definition target_device.h:288
static int i3c_target_tx_write(const struct device *dev, uint8_t *buf, uint16_t len, uint8_t hdr_mode)
Writes to the target's TX FIFO.
Definition target_device.h:252
struct _snode sys_snode_t
Single-linked list node structure.
Definition slist.h:39
#define ENOSYS
Function not implemented.
Definition errno.h:82
__UINT64_TYPE__ uint64_t
Definition stdint.h:91
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
Runtime device structure (in ROM) per driver instance.
Definition device.h:412
const void * api
Address of the API structure exposed by the device instance.
Definition device.h:418
Configuration parameters for I3C hardware to act as target device.
Definition target_device.h:36
uint8_t bcr
Bus Characteristics Register (BCR).
Definition target_device.h:71
bool pid_random
True if lower 32-bit of Provisioned ID is random.
Definition target_device.h:68
uint16_t max_read_len
Maximum Read Length (MRL).
Definition target_device.h:77
uint64_t pid
Provisioned ID.
Definition target_device.h:60
uint8_t supported_hdr
Bit mask of supported HDR modes (0 - 7).
Definition target_device.h:88
uint8_t dynamic_addr
I3C target dynamic address.
Definition target_device.h:49
uint8_t static_addr
I3C target static address.
Definition target_device.h:57
bool enable
If the hardware is to act as a target device on the bus.
Definition target_device.h:41
uint16_t max_write_len
Maximum Write Length (MWL).
Definition target_device.h:80
uint8_t dcr
Device Characteristics Register (DCR).
Definition target_device.h:74
Definition target_device.h:118
int(* stop_cb)(struct i3c_target_config *config)
Function called when a stop condition is observed after a start condition addressed to a particular d...
Definition target_device.h:220
int(* write_received_cb)(struct i3c_target_config *config, uint8_t val)
Function called when a write to the device is continued.
Definition target_device.h:156
int(* read_requested_cb)(struct i3c_target_config *config, uint8_t *val)
Function called when a read from the device is initiated.
Definition target_device.h:179
int(* write_requested_cb)(struct i3c_target_config *config)
Function called when a write to the device is initiated.
Definition target_device.h:135
int(* read_processed_cb)(struct i3c_target_config *config, uint8_t *val)
Function called when a read from the device is continued.
Definition target_device.h:202
Structure describing a device that supports the I3C target API.
Definition target_device.h:102
const struct i3c_target_callbacks * callbacks
Callback functions.
Definition target_device.h:115
sys_snode_t node
Definition target_device.h:103
uint8_t address
Address for this target device.
Definition target_device.h:112
uint8_t flags
Flags for the target device defined by I3C_TARGET_FLAGS_* constants.
Definition target_device.h:109
Definition target_device.h:223
int(* driver_unregister)(const struct device *dev)
Definition target_device.h:225
int(* driver_register)(const struct device *dev)
Definition target_device.h:224