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

          Line data    Source code
       1           0 : /*
       2             :  * Copyright (c) 2022 Nordic Semiconductor ASA
       3             :  *
       4             :  * SPDX-License-Identifier: Apache-2.0
       5             :  */
       6             : 
       7             : #ifndef ZEPHYR_INCLUDE_IPC_ICMSG_H_
       8             : #define ZEPHYR_INCLUDE_IPC_ICMSG_H_
       9             : 
      10             : #include <stddef.h>
      11             : #include <stdint.h>
      12             : #include <zephyr/kernel.h>
      13             : #include <zephyr/drivers/mbox.h>
      14             : #include <zephyr/ipc/ipc_service.h>
      15             : #include <zephyr/ipc/pbuf.h>
      16             : #include <zephyr/sys/atomic.h>
      17             : 
      18             : #ifdef __cplusplus
      19             : extern "C" {
      20             : #endif
      21             : 
      22             : /**
      23             :  * @brief Icmsg IPC library API
      24             :  * @defgroup ipc_icmsg_api Icmsg IPC library API
      25             :  * @ingroup ipc
      26             :  * @{
      27             :  */
      28             : 
      29           0 : enum icmsg_state {
      30             :         ICMSG_STATE_OFF,
      31             :         ICMSG_STATE_BUSY,
      32             :         ICMSG_STATE_READY,
      33             : };
      34             : 
      35           0 : struct icmsg_config_t {
      36           0 :         struct mbox_dt_spec mbox_tx;
      37           0 :         struct mbox_dt_spec mbox_rx;
      38             : };
      39             : 
      40           0 : struct icmsg_data_t {
      41             :         /* Tx/Rx buffers. */
      42           0 :         struct pbuf *tx_pb;
      43           0 :         struct pbuf *rx_pb;
      44             : #ifdef CONFIG_IPC_SERVICE_ICMSG_SHMEM_ACCESS_SYNC
      45             :         struct k_mutex tx_lock;
      46             : #endif
      47             : 
      48             :         /* Callbacks for an endpoint. */
      49           0 :         const struct ipc_service_cb *cb;
      50           0 :         void *ctx;
      51             : 
      52             :         /* General */
      53           0 :         const struct icmsg_config_t *cfg;
      54             : #ifdef CONFIG_MULTITHREADING
      55             :         struct k_work_delayable notify_work;
      56             :         struct k_work mbox_work;
      57             : #endif
      58           0 :         atomic_t state;
      59             : };
      60             : 
      61             : /** @brief Open an icmsg instance
      62             :  *
      63             :  *  Open an icmsg instance to be able to send and receive messages to a remote
      64             :  *  instance.
      65             :  *  This function is blocking until the handshake with the remote instance is
      66             :  *  completed.
      67             :  *  This function is intended to be called late in the initialization process,
      68             :  *  possibly from a thread which can be safely blocked while handshake with the
      69             :  *  remote instance is being performed.
      70             :  *
      71             :  *  @param[in] conf Structure containing configuration parameters for the icmsg
      72             :  *                  instance.
      73             :  *  @param[inout] dev_data Structure containing run-time data used by the icmsg
      74             :  *                         instance.
      75             :  *  @param[in] cb Structure containing callback functions to be called on
      76             :  *                events generated by this icmsg instance. The pointed memory
      77             :  *                must be preserved while the icmsg instance is active.
      78             :  *  @param[in] ctx Pointer to context passed as an argument to callbacks.
      79             :  *
      80             :  *
      81             :  *  @retval 0 on success.
      82             :  *  @retval -EALREADY when the instance is already opened.
      83             :  *  @retval other errno codes from dependent modules.
      84             :  */
      85           1 : int icmsg_open(const struct icmsg_config_t *conf,
      86             :                struct icmsg_data_t *dev_data,
      87             :                const struct ipc_service_cb *cb, void *ctx);
      88             : 
      89             : /** @brief Close an icmsg instance
      90             :  *
      91             :  *  Closing an icmsg instance results in releasing all resources used by given
      92             :  *  instance including the shared memory regions and mbox devices.
      93             :  *
      94             :  *  @param[in] conf Structure containing configuration parameters for the icmsg
      95             :  *                  instance being closed. Its content must be the same as used
      96             :  *                  for creating this instance with @ref icmsg_open.
      97             :  *  @param[inout] dev_data Structure containing run-time data used by the icmsg
      98             :  *                         instance.
      99             :  *
     100             :  *  @retval 0 on success.
     101             :  *  @retval other errno codes from dependent modules.
     102             :  */
     103           1 : int icmsg_close(const struct icmsg_config_t *conf,
     104             :                 struct icmsg_data_t *dev_data);
     105             : 
     106             : /** @brief Send a message to the remote icmsg instance.
     107             :  *
     108             :  *  @param[in] conf Structure containing configuration parameters for the icmsg
     109             :  *                  instance.
     110             :  *  @param[inout] dev_data Structure containing run-time data used by the icmsg
     111             :  *                         instance.
     112             :  *  @param[in] msg Pointer to a buffer containing data to send.
     113             :  *  @param[in] len Size of data in the @p msg buffer.
     114             :  *
     115             :  *
     116             :  *  @retval Number of sent bytes.
     117             :  *  @retval -EBUSY when the instance has not finished handshake with the remote
     118             :  *                 instance.
     119             :  *  @retval -ENODATA when the requested data to send is empty.
     120             :  *  @retval -EBADMSG when the requested data to send is too big.
     121             :  *  @retval -ENOBUFS when there are no TX buffers available.
     122             :  *  @retval other errno codes from dependent modules.
     123             :  */
     124           1 : int icmsg_send(const struct icmsg_config_t *conf,
     125             :                struct icmsg_data_t *dev_data,
     126             :                const void *msg, size_t len);
     127             : 
     128             : /**
     129             :  * @}
     130             :  */
     131             : 
     132             : #ifdef __cplusplus
     133             : }
     134             : #endif
     135             : 
     136             : #endif /* ZEPHYR_INCLUDE_IPC_ICMSG_H_ */

Generated by: LCOV version 1.14