LCOV - code coverage report
Current view: top level - zephyr/ipc - ipc_static_vrings.h Coverage Total Hit
Test: new.info Lines: 95.0 % 20 19
Test Date: 2025-09-05 16:43:28

            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 2.0-1