Zephyr Project API 4.4.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
rtio.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2024 Intel Corporation
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#ifndef ZEPHYR_DRIVERS_I2C_RTIO_H_
8#define ZEPHYR_DRIVERS_I2C_RTIO_H_
9
10#include <zephyr/kernel.h>
11#include <zephyr/drivers/i2c.h>
12#include <zephyr/rtio/rtio.h>
13
14#ifdef __cplusplus
15extern "C" {
16#endif
17
31
39#define I2C_RTIO_DEFINE(_name, _sq_sz, _cq_sz) \
40 RTIO_DEFINE(CONCAT(_name, _r), _sq_sz, _cq_sz); \
41 static struct i2c_rtio _name = { \
42 .r = &CONCAT(_name, _r), \
43 };
44
53typedef bool (*i2c_rtio_cb_run_sync_start_async)(const struct device *dev, int *status);
54
61struct rtio_sqe *i2c_rtio_copy(struct rtio *r, struct rtio_iodev *iodev, const struct i2c_msg *msgs,
62 uint8_t num_msgs);
63
70void i2c_rtio_init(struct i2c_rtio *ctx, const struct device *dev);
71
81bool i2c_rtio_complete(struct i2c_rtio *ctx, int status);
82
89bool i2c_rtio_submit(struct i2c_rtio *ctx, struct rtio_iodev_sqe *iodev_sqe);
90
100
109int i2c_rtio_transfer(struct i2c_rtio *ctx, struct i2c_msg *msgs, uint8_t num_msgs, uint16_t addr);
110
119int i2c_rtio_recover(struct i2c_rtio *ctx);
120
131static inline bool i2c_rtio_run_sync_start_async(const struct device *dev, struct i2c_rtio *ctx,
133{
134 int status;
135
136 __ASSERT_NO_MSG(cb != NULL);
137
138 while (!cb(dev, &status)) {
139 if (!i2c_rtio_complete(ctx, status)) {
140 return false;
141 }
142 }
143
144 return true;
145}
146
147#ifdef __cplusplus
148}
149#endif
150
151#endif /* ZEPHYR_DRVIERS_I2C_RTIO_H_ */
workaround assembler barfing for ST r
Definition asm-macro-32-bit-gnu.h:27
struct rtio_sqe * i2c_rtio_copy(struct rtio *r, struct rtio_iodev *iodev, const struct i2c_msg *msgs, uint8_t num_msgs)
Copy an array of i2c_msgs to rtio submissions and a transaction.
void i2c_rtio_init(struct i2c_rtio *ctx, const struct device *dev)
Initialize an i2c rtio context.
bool i2c_rtio_complete(struct i2c_rtio *ctx, int status)
Signal that the current (ctx->txn_curr) submission has been completed.
static bool i2c_rtio_run_sync_start_async(const struct device *dev, struct i2c_rtio *ctx, i2c_rtio_cb_run_sync_start_async cb)
Process synchronous operations until an asynchronous operation is started or there are no more queued...
Definition rtio.h:131
int i2c_rtio_transfer(struct i2c_rtio *ctx, struct i2c_msg *msgs, uint8_t num_msgs, uint16_t addr)
Transfer i2c messages in a blocking call.
bool(* i2c_rtio_cb_run_sync_start_async)(const struct device *dev, int *status)
Callback to start the pending I2C operation.
Definition rtio.h:53
bool i2c_rtio_submit(struct i2c_rtio *ctx, struct rtio_iodev_sqe *iodev_sqe)
Submit, atomically, a submission to work on at some point.
int i2c_rtio_configure(struct i2c_rtio *ctx, uint32_t i2c_config)
Configure the I2C bus controller.
int i2c_rtio_recover(struct i2c_rtio *ctx)
Perform an I2C bus recovery in a blocking call.
Main header file for I2C (Inter-Integrated Circuit) driver API.
#define NULL
Definition iar_missing_defs.h:20
Public kernel APIs.
Real-Time IO device API for moving bytes with low effort.
#define bool
Definition stdbool.h:13
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__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:513
Complete I2C DT information.
Definition i2c.h:121
One I2C Message.
Definition i2c.h:230
Driver context for implementing i2c with rtio.
Definition rtio.h:21
struct k_spinlock slock
Definition rtio.h:23
struct mpsc io_q
Definition rtio.h:25
struct rtio_iodev iodev
Definition rtio.h:26
struct k_sem lock
Definition rtio.h:22
struct i2c_dt_spec dt_spec
Definition rtio.h:29
struct rtio * r
Definition rtio.h:24
struct rtio_iodev_sqe * txn_curr
Definition rtio.h:28
struct rtio_iodev_sqe * txn_head
Definition rtio.h:27
Semaphore structure.
Definition kernel.h:3798
Kernel Spin Lock.
Definition spinlock.h:45
MPSC Queue.
Definition mpsc_lockfree.h:86
IO device submission queue entry.
Definition sqe.h:394
An IO device with a function table for submitting requests.
Definition iodev.h:48
A submission queue event.
Definition sqe.h:304
uint32_t i2c_config
OP_I2C_CONFIGURE.
Definition sqe.h:366
const struct rtio_iodev * iodev
Device to operation on.
Definition sqe.h:313
An RTIO context containing what can be viewed as a pair of queues.
Definition rtio.h:70