LCOV - code coverage report
Current view: top level - zephyr/ipc - ipc_static_vrings.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_STATIC_VRINGS_H_
       8             : #define ZEPHYR_INCLUDE_IPC_SERVICE_IPC_STATIC_VRINGS_H_
       9             : 
      10             : #include <zephyr/ipc/ipc_service.h>
      11             : #include <openamp/open_amp.h>
      12             : 
      13             : #ifdef __cplusplus
      14             : extern "C" {
      15             : #endif
      16             : 
      17             : /**
      18             :  * @brief IPC service static VRINGs API
      19             :  * @defgroup ipc_service_static_vrings_api IPC service static VRINGs API
      20             :  * @ingroup ipc
      21             :  * @{
      22             :  */
      23             : 
      24             : /** Number of used VRING buffers. */
      25           1 : #define VRING_COUNT     (2)
      26             : 
      27             : /**
      28             :  * Memory alignment.
      29             :  *
      30             :  * This should take into account the cache line if the cache is enabled, otherwise
      31             :  * it should be naturally aligned to the machine word size.
      32             :  */
      33           1 : #define MEM_ALIGNMENT   CONFIG_IPC_SERVICE_STATIC_VRINGS_MEM_ALIGNMENT
      34             : 
      35             : /**
      36             :  * @typedef ipc_notify_cb
      37             :  * @brief Define the notify callback.
      38             :  *
      39             :  * This callback is defined at instance level and it is called on virtqueue notify.
      40             :  *
      41             :  * @param vq Virtqueue.
      42             :  * @param priv Priv data.
      43             :  */
      44           1 : typedef void (*ipc_notify_cb)(struct virtqueue *vq, void *priv);
      45             : 
      46             : /** @brief Static VRINGs structure.
      47             :  *
      48             :  *  Struct used to represent and carry information about static allocation of VRINGs.
      49             :  */
      50           1 : struct ipc_static_vrings {
      51             :         /** virtIO device. */
      52           1 :         struct virtio_device vdev;
      53             : 
      54             :         /** SHM physmap. */
      55           1 :         metal_phys_addr_t shm_physmap[1];
      56             : 
      57             :         /** SHM and addresses. */
      58           1 :         uintptr_t status_reg_addr;
      59             : 
      60             :         /** TX VRING address. */
      61           1 :         uintptr_t tx_addr;
      62             : 
      63             :         /** RX VRING address. */
      64           1 :         uintptr_t rx_addr;
      65             : 
      66             :         /** VRING size. */
      67           1 :         size_t vring_size;
      68             : 
      69             :         /** Shared memory region address. */
      70           1 :         uintptr_t shm_addr;
      71             : 
      72             :         /** Share memory region size. */
      73           1 :         size_t shm_size;
      74             : 
      75             :         /** SHM IO region. */
      76           1 :         struct metal_io_region shm_io;
      77             : 
      78             :         /** VRINGs */
      79           1 :         struct virtio_vring_info rvrings[VRING_COUNT];
      80             : 
      81             :         /** Virtqueues. */
      82           1 :         struct virtqueue *vq[VRING_COUNT];
      83             : 
      84             :         /** Private data to be passed to the notify callback. */
      85           1 :         void *priv;
      86             : 
      87             :         /** Notify callback. */
      88           1 :         ipc_notify_cb notify_cb;
      89             : };
      90             : 
      91             : /** @brief Init the static VRINGs.
      92             :  *
      93             :  *  Init VRINGs and Virtqueues of an OpenAMP / RPMsg instance.
      94             :  *
      95             :  *  @param vr Pointer to the VRINGs instance struct.
      96             :  *  @param role Host / Remote role.
      97             :  *
      98             :  *  @retval -EINVAL When some parameter is missing.
      99             :  *  @retval -ENOMEM When memory is not enough for VQs allocation.
     100             :  *  @retval 0 If successful.
     101             :  *  @retval Other errno codes depending on the OpenAMP implementation.
     102             :  */
     103           1 : int ipc_static_vrings_init(struct ipc_static_vrings *vr, unsigned int role);
     104             : 
     105             : /** @brief Deinitialise the static VRINGs.
     106             :  *
     107             :  *  Deinitialise VRINGs and Virtqueues of an OpenAMP / RPMsg instance.
     108             :  *
     109             :  *  @param vr Pointer to the VRINGs instance struct.
     110             :  *  @param role Host / Remote role.
     111             :  *
     112             :  *  @retval 0 If successful.
     113             :  *  @retval Other errno codes depending on the OpenAMP implementation.
     114             :  */
     115           1 : int ipc_static_vrings_deinit(struct ipc_static_vrings *vr, unsigned int role);
     116             : 
     117             : /**
     118             :  * @}
     119             :  */
     120             : 
     121             : #ifdef __cplusplus
     122             : }
     123             : #endif
     124             : 
     125             : #endif /* ZEPHYR_INCLUDE_IPC_SERVICE_IPC_STATIC_VRINGS_H_ */

Generated by: LCOV version 1.14