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

          Line data    Source code
       1           0 : /*
       2             :  * Copyright (c) 2021 Carlo Caione <ccaione@baylibre.com>
       3             :  *
       4             :  * SPDX-License-Identifier: Apache-2.0
       5             :  */
       6             : 
       7             : #ifndef ZEPHYR_INCLUDE_IPC_SERVICE_IPC_RPMSG_H_
       8             : #define ZEPHYR_INCLUDE_IPC_SERVICE_IPC_RPMSG_H_
       9             : 
      10             : #include <zephyr/ipc/ipc_service.h>
      11             : #include <openamp/open_amp.h>
      12             : #include <metal/device.h>
      13             : 
      14             : #ifdef __cplusplus
      15             : extern "C" {
      16             : #endif
      17             : 
      18             : /**
      19             :  * @brief IPC service RPMsg API
      20             :  * @defgroup ipc_service_rpmsg_api IPC service RPMsg API
      21             :  * @ingroup ipc
      22             :  * @{
      23             :  */
      24             : 
      25             : /** Number of endpoints. */
      26           1 : #define NUM_ENDPOINTS   CONFIG_IPC_SERVICE_BACKEND_RPMSG_NUM_ENDPOINTS_PER_INSTANCE
      27             : 
      28             : struct ipc_rpmsg_ept;
      29             : 
      30             : /**
      31             :  * @typedef rpmsg_ept_bound_cb
      32             :  * @brief Define the bound callback.
      33             :  *
      34             :  * This callback is defined at instance level and it is called when an endpoint
      35             :  * of the instance is bound.
      36             :  *
      37             :  * @param ept Endpoint of the instance just bound.
      38             :  */
      39           1 : typedef void (*rpmsg_ept_bound_cb)(struct ipc_rpmsg_ept *ept);
      40             : 
      41             : /** @brief Endpoint structure.
      42             :  *
      43             :  *  Used to define an endpoint to be encapsulated in an RPMsg instance.
      44             :  */
      45           1 : struct ipc_rpmsg_ept {
      46             :         /** RPMsg endpoint. */
      47           1 :         struct rpmsg_endpoint ep;
      48             : 
      49             :         /** Name of the endpoint. */
      50           1 :         char name[RPMSG_NAME_SIZE];
      51             : 
      52             :         /** Destination endpoint. */
      53           1 :         uint32_t dest;
      54             : 
      55             :         /** Bound flag. */
      56           1 :         volatile bool bound;
      57             : 
      58             :         /** Callbacks. */
      59           1 :         const struct ipc_service_cb *cb;
      60             : 
      61             :         /** Private data to be passed to the endpoint callbacks. */
      62           1 :         void *priv;
      63             : };
      64             : 
      65             : /** @brief RPMsg instance structure.
      66             :  *
      67             :  *  Struct representation of an RPMsg instance.
      68             :  */
      69           1 : struct ipc_rpmsg_instance {
      70             :         /** Endpoints in the instance. */
      71           1 :         struct ipc_rpmsg_ept endpoint[NUM_ENDPOINTS];
      72             : 
      73             :         /** RPMsg virtIO device. */
      74           1 :         struct rpmsg_virtio_device rvdev;
      75             : 
      76             :         /** SHM pool. */
      77           1 :         struct rpmsg_virtio_shm_pool shm_pool;
      78             : 
      79             :         /** EPT (instance) bound callback. */
      80           1 :         rpmsg_ept_bound_cb bound_cb;
      81             : 
      82             :         /** EPT (instance) callback. */
      83           1 :         rpmsg_ept_cb cb;
      84             : 
      85             :         /** Mutex for the instance. */
      86           1 :         struct k_mutex mtx;
      87             : };
      88             : 
      89             : /** @brief Init an RPMsg instance.
      90             :  *
      91             :  *  Init an RPMsg instance.
      92             :  *
      93             :  *  @param instance Pointer to the RPMsg instance struct.
      94             :  *  @param role Host / Remote role.
      95             :  *  @param buffer_size Size of the buffer used to send data between host and remote.
      96             :  *  @param shm_io SHM IO region pointer.
      97             :  *  @param vdev VirtIO device pointer.
      98             :  *  @param shb Shared memory region pointer.
      99             :  *  @param size Size of the shared memory region.
     100             :  *  @param ns_bind_cb callback handler for name service announcement without
     101             :  *                    local endpoints waiting to bind. If NULL the
     102             :  *                    implementation falls back to the internal implementation.
     103             :  *
     104             :  *  @retval -EINVAL When some parameter is missing.
     105             :  *  @retval 0 If successful.
     106             :  *  @retval Other errno codes depending on the OpenAMP implementation.
     107             :  */
     108           1 : int ipc_rpmsg_init(struct ipc_rpmsg_instance *instance,
     109             :                    unsigned int role,
     110             :                    unsigned int buffer_size,
     111             :                    struct metal_io_region *shm_io,
     112             :                    struct virtio_device *vdev,
     113             :                    void *shb, size_t size,
     114             :                    rpmsg_ns_bind_cb ns_bind_cb);
     115             : 
     116             : 
     117             : /** @brief
     118             :  *
     119             :  * Deinit an RPMsg instance
     120             :  *
     121             :  * @param instance Pointer to the RPMsg instance struct.
     122             :  * @param role Host / Remote role.
     123             :  *
     124             :  * @retval -EINVAL When some parameter is missing
     125             :  * @retval 0 If successful
     126             :  */
     127           1 : int ipc_rpmsg_deinit(struct ipc_rpmsg_instance *instance,
     128             :                    unsigned int role);
     129             : 
     130             : /** @brief Register an endpoint.
     131             :  *
     132             :  *  Register an endpoint to a provided RPMsg instance.
     133             :  *
     134             :  *  @param instance Pointer to the RPMsg instance struct.
     135             :  *  @param role Host / Remote role.
     136             :  *  @param ept Endpoint to register.
     137             :  *
     138             :  *  @retval -EINVAL When some parameter is missing.
     139             :  *  @retval 0 If successful.
     140             :  *  @retval Other errno codes depending on the OpenAMP implementation.
     141             :  */
     142           1 : int ipc_rpmsg_register_ept(struct ipc_rpmsg_instance *instance, unsigned int role,
     143             :                            struct ipc_rpmsg_ept *ept);
     144             : 
     145             : /**
     146             :  * @}
     147             :  */
     148             : 
     149             : #ifdef __cplusplus
     150             : }
     151             : #endif
     152             : 
     153             : #endif /* ZEPHYR_INCLUDE_IPC_SERVICE_IPC_RPMSG_H_ */

Generated by: LCOV version 1.14