LCOV - code coverage report
Current view: top level - zephyr/drivers/i2c - rtio.h Coverage Total Hit
Test: new.info Lines: 50.0 % 18 9
Test Date: 2025-09-05 16:43:28

            Line data    Source code
       1            0 : /*
       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
      15              : extern "C" {
      16              : #endif
      17              : 
      18              : /**
      19              :  * @brief Driver context for implementing i2c with rtio
      20              :  */
      21            1 : struct i2c_rtio {
      22            0 :         struct k_sem lock;
      23            0 :         struct k_spinlock slock;
      24            0 :         struct rtio *r;
      25            0 :         struct mpsc io_q;
      26            0 :         struct rtio_iodev iodev;
      27            0 :         struct rtio_iodev_sqe *txn_head;
      28            0 :         struct rtio_iodev_sqe *txn_curr;
      29            0 :         struct i2c_dt_spec dt_spec;
      30              : };
      31              : 
      32              : /**
      33              :  * @brief Statically define an i2c_rtio context
      34              :  *
      35              :  * @param _name Symbolic name of the context
      36              :  * @param _sq_sz Submission queue entry pool size
      37              :  * @param _cq_sz Completion queue entry pool size
      38              :  */
      39            1 : #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              : 
      45              : /**
      46              :  * @brief Copy an array of i2c_msgs to rtio submissions and a transaction
      47              :  *
      48              :  * @retval sqe Last sqe setup in the copy
      49              :  * @retval NULL Not enough memory to copy the transaction
      50              :  */
      51            1 : struct rtio_sqe *i2c_rtio_copy(struct rtio *r, struct rtio_iodev *iodev, const struct i2c_msg *msgs,
      52              :                                uint8_t num_msgs);
      53              : 
      54              : /**
      55              :  * @brief Initialize an i2c rtio context
      56              :  *
      57              :  * @param ctx I2C RTIO driver context
      58              :  * @param dev I2C bus
      59              :  */
      60            1 : void i2c_rtio_init(struct i2c_rtio *ctx, const struct device *dev);
      61              : 
      62              : /**
      63              :  * @brief Signal that the current (ctx->txn_curr) submission has been completed
      64              :  *
      65              :  * @param ctx I2C RTIO driver context
      66              :  * @param status Completion status, negative values are errors
      67              :  *
      68              :  * @retval true Next submission is ready to start
      69              :  * @retval false No more submissions to work on
      70              :  */
      71            1 : bool i2c_rtio_complete(struct i2c_rtio *ctx, int status);
      72              : 
      73              : /**
      74              :  * @brief Submit, atomically, a submission to work on at some point
      75              :  *
      76              :  * @retval true Next submission is ready to start
      77              :  * @retval false No new submission to start or submissions are in progress already
      78              :  */
      79            1 : bool i2c_rtio_submit(struct i2c_rtio *ctx, struct rtio_iodev_sqe *iodev_sqe);
      80              : 
      81              : /**
      82              :  * @brief Configure the I2C bus controller
      83              :  *
      84              :  * Provides a compatible API for the existing i2c_configure API, and blocks the
      85              :  * caller until the transfer completes.
      86              :  *
      87              :  * See i2c_configure().
      88              :  */
      89            1 : int i2c_rtio_configure(struct i2c_rtio *ctx, uint32_t i2c_config);
      90              : 
      91              : /**
      92              :  * @brief Transfer i2c messages in a blocking call
      93              :  *
      94              :  * Provides a compatible API for the existing i2c_transfer API, and blocks the caller
      95              :  * until the transfer completes.
      96              :  *
      97              :  * See i2c_transfer().
      98              :  */
      99            1 : int i2c_rtio_transfer(struct i2c_rtio *ctx, struct i2c_msg *msgs, uint8_t num_msgs, uint16_t addr);
     100              : 
     101              : /**
     102              :  * @brief Perform an I2C bus recovery in a blocking call
     103              :  *
     104              :  * Provides a compatible API for the existing i2c_recover API, and blocks the caller
     105              :  * until the process completes.
     106              :  *
     107              :  * See i2c_recover().
     108              :  */
     109            1 : int i2c_rtio_recover(struct i2c_rtio *ctx);
     110              : 
     111              : #ifdef __cplusplus
     112              : }
     113              : #endif
     114              : 
     115              : #endif /* ZEPHYR_DRVIERS_I2C_RTIO_H_ */
        

Generated by: LCOV version 2.0-1