LCOV - code coverage report
Current view: top level - zephyr/ipc - ipc_service_backend.h Hit Total Coverage
Test: new.info Lines: 12 13 92.3 %
Date: 2024-12-22 00:14:23

          Line data    Source code
       1           0 : /*
       2             :  * Copyright (c) 2021 Nordic Semiconductor ASA
       3             :  *
       4             :  * SPDX-License-Identifier: Apache-2.0
       5             :  */
       6             : 
       7             : #ifndef ZEPHYR_INCLUDE_IPC_SERVICE_IPC_SERVICE_BACKEND_H_
       8             : #define ZEPHYR_INCLUDE_IPC_SERVICE_IPC_SERVICE_BACKEND_H_
       9             : 
      10             : #include <zephyr/ipc/ipc_service.h>
      11             : #include <zephyr/kernel.h>
      12             : #include <stdio.h>
      13             : 
      14             : #ifdef __cplusplus
      15             : extern "C" {
      16             : #endif
      17             : 
      18             : /**
      19             :  * @brief IPC service backend
      20             :  * @defgroup ipc_service_backend IPC service backend
      21             :  * @ingroup ipc
      22             :  * @{
      23             :  */
      24             : 
      25             : /** @brief IPC backend configuration structure.
      26             :  *
      27             :  *  This structure is used for configuration backend during registration.
      28             :  */
      29           1 : struct ipc_service_backend {
      30             :         /** @brief Pointer to the function that will be used to open an instance
      31             :          *
      32             :          *  @param[in] instance Instance pointer.
      33             :          *
      34             :          *  @retval -EALREADY when the instance is already opened.
      35             :          *
      36             :          *  @retval 0 on success
      37             :          *  @retval other errno codes depending on the implementation of the
      38             :          *          backend.
      39             :          */
      40           1 :         int (*open_instance)(const struct device *instance);
      41             : 
      42             :         /** @brief Pointer to the function that will be used to close an instance
      43             :          *
      44             :          *  @param[in] instance Instance pointer.
      45             :          *
      46             :          *  @retval -EALREADY when the instance is not already inited.
      47             :          *
      48             :          *  @retval 0 on success
      49             :          *  @retval other errno codes depending on the implementation of the
      50             :          *          backend.
      51             :          */
      52           1 :         int (*close_instance)(const struct device *instance);
      53             : 
      54             :         /** @brief Pointer to the function that will be used to send data to the endpoint.
      55             :          *
      56             :          *  @param[in] instance Instance pointer.
      57             :          *  @param[in] token Backend-specific token.
      58             :          *  @param[in] data Pointer to the buffer to send.
      59             :          *  @param[in] len Number of bytes to send.
      60             :          *
      61             :          *  @retval -EINVAL when instance is invalid.
      62             :          *  @retval -ENOENT when the endpoint is not registered with the instance.
      63             :          *  @retval -EBADMSG when the message is invalid.
      64             :          *  @retval -EBUSY when the instance is busy or not ready.
      65             :          *  @retval -ENOMEM when no memory / buffers are available.
      66             :          *
      67             :          *  @retval bytes number of bytes sent.
      68             :          *  @retval other errno codes depending on the implementation of the
      69             :          *          backend.
      70             :          */
      71           1 :         int (*send)(const struct device *instance, void *token,
      72             :                     const void *data, size_t len);
      73             : 
      74             :         /** @brief Pointer to the function that will be used to register endpoints.
      75             :          *
      76             :          *  @param[in] instance Instance to register the endpoint onto.
      77             :          *  @param[out] token Backend-specific token.
      78             :          *  @param[in] cfg Endpoint configuration.
      79             :          *
      80             :          *  @retval -EINVAL when the endpoint configuration or instance is invalid.
      81             :          *  @retval -EBUSY when the instance is busy or not ready.
      82             :          *
      83             :          *  @retval 0 on success
      84             :          *  @retval other errno codes depending on the implementation of the
      85             :          *          backend.
      86             :          */
      87           1 :         int (*register_endpoint)(const struct device *instance,
      88             :                                  void **token,
      89             :                                  const struct ipc_ept_cfg *cfg);
      90             : 
      91             :         /** @brief Pointer to the function that will be used to deregister endpoints
      92             :          *
      93             :          *  @param[in] instance Instance from which to deregister the endpoint.
      94             :          *  @param[in] token Backend-specific token.
      95             :          *
      96             :          *  @retval -EINVAL when the endpoint configuration or instance is invalid.
      97             :          *  @retval -ENOENT when the endpoint is not registered with the instance.
      98             :          *  @retval -EBUSY when the instance is busy or not ready.
      99             :          *
     100             :          *  @retval 0 on success
     101             :          *  @retval other errno codes depending on the implementation of the
     102             :          *      backend.
     103             :          */
     104           1 :         int (*deregister_endpoint)(const struct device *instance, void *token);
     105             : 
     106             :         /** @brief Pointer to the function that will return the TX buffer size
     107             :          *
     108             :          *  @param[in] instance Instance pointer.
     109             :          *  @param[in] token Backend-specific token.
     110             :          *
     111             :          *  @retval -EINVAL when instance is invalid.
     112             :          *  @retval -ENOENT when the endpoint is not registered with the instance.
     113             :          *  @retval -ENOTSUP when the operation is not supported.
     114             :          *
     115             :          *  @retval size TX buffer size on success.
     116             :          *  @retval other errno codes depending on the implementation of the
     117             :          *          backend.
     118             :          */
     119           1 :         int (*get_tx_buffer_size)(const struct device *instance, void *token);
     120             : 
     121             :         /** @brief Pointer to the function that will return an empty TX buffer.
     122             :          *
     123             :          *  @param[in] instance Instance pointer.
     124             :          *  @param[in] token Backend-specific token.
     125             :          *  @param[out] data Pointer to the empty TX buffer.
     126             :          *  @param[in,out] len Pointer to store the TX buffer size.
     127             :          *  @param[in] wait Timeout waiting for an available TX buffer.
     128             :          *
     129             :          *  @retval -EINVAL when instance is invalid.
     130             :          *  @retval -ENOENT when the endpoint is not registered with the instance.
     131             :          *  @retval -ENOTSUP when the operation or the timeout is not supported.
     132             :          *  @retval -ENOBUFS when there are no TX buffers available.
     133             :          *  @retval -EALREADY when a buffer was already claimed and not yet released.
     134             :          *  @retval -ENOMEM when the requested size is too big (and the size parameter
     135             :          *                  contains the maximum allowed size).
     136             :          *
     137             :          *  @retval 0 on success
     138             :          *  @retval other errno codes depending on the implementation of the
     139             :          *          backend.
     140             :          */
     141           1 :         int (*get_tx_buffer)(const struct device *instance, void *token,
     142             :                              void **data, uint32_t *len, k_timeout_t wait);
     143             : 
     144             :         /** @brief Pointer to the function that will drop a TX buffer.
     145             :          *
     146             :          *  @param[in] instance Instance pointer.
     147             :          *  @param[in] token Backend-specific token.
     148             :          *  @param[in] data Pointer to the TX buffer.
     149             :          *
     150             :          *  @retval -EINVAL when instance is invalid.
     151             :          *  @retval -ENOENT when the endpoint is not registered with the instance.
     152             :          *  @retval -ENOTSUP when this function is not supported.
     153             :          *  @retval -EALREADY when the buffer was already dropped.
     154             :          *
     155             :          *  @retval 0 on success
     156             :          *  @retval other errno codes depending on the implementation of the
     157             :          *          backend.
     158             :          */
     159           1 :         int (*drop_tx_buffer)(const struct device *instance, void *token,
     160             :                               const void *data);
     161             : 
     162             :         /** @brief Pointer to the function that will be used to send data to
     163             :          *         the endpoint when the TX buffer has been obtained using @ref
     164             :          *         ipc_service_get_tx_buffer
     165             :          *
     166             :          *  @param[in] instance Instance pointer.
     167             :          *  @param[in] token Backend-specific token.
     168             :          *  @param[in] data Pointer to the buffer to send.
     169             :          *  @param[in] len Number of bytes to send.
     170             :          *
     171             :          *  @retval -EINVAL when instance is invalid.
     172             :          *  @retval -ENOENT when the endpoint is not registered with the instance.
     173             :          *  @retval -EBADMSG when the data is invalid (i.e. invalid data format,
     174             :          *                   invalid length, ...)
     175             :          *  @retval -EBUSY when the instance is busy or not ready.
     176             :          *
     177             :          *  @retval bytes number of bytes sent.
     178             :          *  @retval other errno codes depending on the implementation of the
     179             :          *          backend.
     180             :          */
     181           1 :         int (*send_nocopy)(const struct device *instance, void *token,
     182             :                            const void *data, size_t len);
     183             : 
     184             :         /** @brief Pointer to the function that will hold the RX buffer
     185             :          *
     186             :          *  @param[in] instance Instance pointer.
     187             :          *  @param[in] token Backend-specific token.
     188             :          *  @param[in] data Pointer to the RX buffer to hold.
     189             :          *
     190             :          *  @retval -EINVAL when instance is invalid.
     191             :          *  @retval -ENOENT when the endpoint is not registered with the instance.
     192             :          *  @retval -EALREADY when the buffer data has been already hold.
     193             :          *  @retval -ENOTSUP when this function is not supported.
     194             :          *
     195             :          *  @retval 0 on success
     196             :          *  @retval other errno codes depending on the implementation of the
     197             :          *          backend.
     198             :          */
     199           1 :         int (*hold_rx_buffer)(const struct device *instance, void *token,
     200             :                               void *data);
     201             : 
     202             :         /** @brief Pointer to the function that will release the RX buffer.
     203             :          *
     204             :          *  @param[in] instance Instance pointer.
     205             :          *  @param[in] token Backend-specific token.
     206             :          *  @param[in] data Pointer to the RX buffer to release.
     207             :          *
     208             :          *  @retval -EINVAL when instance is invalid.
     209             :          *  @retval -ENOENT when the endpoint is not registered with the instance.
     210             :          *  @retval -EALREADY when the buffer data has been already released.
     211             :          *  @retval -ENOTSUP when this function is not supported.
     212             :          *
     213             :          *  @retval 0 on success
     214             :          *  @retval other errno codes depending on the implementation of the
     215             :          *          backend.
     216             :          */
     217           1 :         int (*release_rx_buffer)(const struct device *instance, void *token,
     218             :                                  void *data);
     219             : };
     220             : 
     221             : /**
     222             :  * @}
     223             :  */
     224             : 
     225             : #ifdef __cplusplus
     226             : }
     227             : #endif
     228             : 
     229             : #endif /* ZEPHYR_INCLUDE_IPC_SERVICE_IPC_SERVICE_BACKEND_H_ */

Generated by: LCOV version 1.14