LCOV - code coverage report
Current view: top level - zephyr/drivers/i3c - rtio.h Coverage Total Hit
Test: new.info Lines: 52.6 % 19 10
Test Date: 2025-09-05 16:43:28

            Line data    Source code
       1            0 : /*
       2              :  * Copyright (c) 2024 Intel Corporation
       3              :  * Copyright (c) 2024 Meta Platforms
       4              :  *
       5              :  * SPDX-License-Identifier: Apache-2.0
       6              :  */
       7              : 
       8              : #ifndef ZEPHYR_DRIVERS_I3C_RTIO_H_
       9              : #define ZEPHYR_DRIVERS_I3C_RTIO_H_
      10              : 
      11              : #include <zephyr/kernel.h>
      12              : #include <zephyr/drivers/i3c.h>
      13              : #include <zephyr/rtio/rtio.h>
      14              : 
      15              : #ifdef __cplusplus
      16              : extern "C" {
      17              : #endif
      18              : 
      19              : /**
      20              :  * @brief Driver context for implementing i3c with rtio
      21              :  */
      22            1 : struct i3c_rtio {
      23            0 :         struct k_sem lock;
      24            0 :         struct k_spinlock slock;
      25            0 :         struct rtio *r;
      26            0 :         struct mpsc io_q;
      27            0 :         struct rtio_iodev iodev;
      28            0 :         struct rtio_iodev_sqe *txn_head;
      29            0 :         struct rtio_iodev_sqe *txn_curr;
      30            0 :         struct i3c_device_desc *i3c_desc;
      31              : };
      32              : 
      33              : /**
      34              :  * @brief Statically define an i3c_rtio context
      35              :  *
      36              :  * @param _name Symbolic name of the context
      37              :  * @param _sq_sz Submission queue entry pool size
      38              :  * @param _cq_sz Completion queue entry pool size
      39              :  */
      40            1 : #define I3C_RTIO_DEFINE(_name, _sq_sz, _cq_sz)          \
      41              :         RTIO_DEFINE(CONCAT(_name, _r), _sq_sz, _cq_sz); \
      42              :         static struct i3c_rtio _name = {                \
      43              :                 .r = &CONCAT(_name, _r),            \
      44              :         };
      45              : 
      46              : /**
      47              :  * @brief Copy an array of i3c_msgs to rtio submissions and a transaction
      48              :  *
      49              :  * @retval sqe Last sqe setup in the copy
      50              :  * @retval NULL Not enough memory to copy the transaction
      51              :  */
      52            1 : struct rtio_sqe *i3c_rtio_copy(struct rtio *r, struct rtio_iodev *iodev, const struct i3c_msg *msgs,
      53              :                                uint8_t num_msgs);
      54              : 
      55              : /**
      56              :  * @brief Initialize an i3c rtio context
      57              :  *
      58              :  * @param ctx I3C RTIO driver context
      59              :  */
      60            1 : void i3c_rtio_init(struct i3c_rtio *ctx);
      61              : 
      62              : /**
      63              :  * @brief Signal that the current (ctx->txn_curr) submission has been completed
      64              :  *
      65              :  * @param ctx I3C 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 i3c_rtio_complete(struct i3c_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 i3c_rtio_submit(struct i3c_rtio *ctx, struct rtio_iodev_sqe *iodev_sqe);
      80              : 
      81              : /**
      82              :  * @brief Configure the I3C bus controller
      83              :  *
      84              :  * Provides a compatible API for the existing i3c_configure API, and blocks the
      85              :  * caller until the transfer completes.
      86              :  *
      87              :  * See i3c_configure().
      88              :  */
      89            1 : int i3c_rtio_configure(struct i3c_rtio *ctx, enum i3c_config_type type, void *config);
      90              : 
      91              : /**
      92              :  * @brief Transfer i3c messages in a blocking call
      93              :  *
      94              :  * Provides a compatible API for the existing i3c_transfer API, and blocks the caller
      95              :  * until the transfer completes.
      96              :  *
      97              :  * See i3c_transfer().
      98              :  */
      99            1 : int i3c_rtio_transfer(struct i3c_rtio *ctx, struct i3c_msg *msgs, uint8_t num_msgs,
     100              :                                struct i3c_device_desc *desc);
     101              : 
     102              : /**
     103              :  * @brief Perform an I3C bus recovery in a blocking call
     104              :  *
     105              :  * Provides a compatible API for the existing i3c_recover API, and blocks the caller
     106              :  * until the process completes.
     107              :  *
     108              :  * See i3c_recover().
     109              :  */
     110            1 : int i3c_rtio_recover(struct i3c_rtio *ctx);
     111              : 
     112              : /**
     113              :  * @brief Perform an I3C CCC in a blocking call
     114              :  *
     115              :  * Provides a compatible API for the existing i3c_do_ccc API, and blocks the caller
     116              :  * until the process completes.
     117              :  *
     118              :  * See i3c_do_ccc().
     119              :  */
     120            1 : int i3c_rtio_ccc(struct i3c_rtio *ctx, struct i3c_ccc_payload *payload);
     121              : 
     122              : #ifdef __cplusplus
     123              : }
     124              : #endif
     125              : 
     126              : #endif /* ZEPHYR_DRVIERS_I3C_RTIO_H_ */
        

Generated by: LCOV version 2.0-1