LCOV - code coverage report
Current view: top level - vlib/dma - dma.h (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 0 19 0.0 %
Date: 2023-10-26 01:39:38 Functions: 0 5 0.0 %

          Line data    Source code
       1             : /* SPDX-License-Identifier: Apache-2.0
       2             :  * Copyright (c) 2022 Cisco Systems, Inc.
       3             :  */
       4             : 
       5             : #ifndef included_vlib_dma_h
       6             : #define included_vlib_dma_h
       7             : #include <vlib/vlib.h>
       8             : 
       9             : #define dma_log_debug(f, ...)                                                 \
      10             :   vlib_log (VLIB_LOG_LEVEL_DEBUG, dma_log.class, "%s: " f, __func__,          \
      11             :             ##__VA_ARGS__)
      12             : 
      13             : #define dma_log_info(f, ...)                                                  \
      14             :   vlib_log (VLIB_LOG_LEVEL_INFO, dma_log.class, "%s: " f, __func__,           \
      15             :             ##__VA_ARGS__)
      16             : 
      17             : struct vlib_dma_batch;
      18             : struct vlib_dma_config_data;
      19             : 
      20             : typedef int (vlib_dma_config_add_fn) (vlib_main_t *vm,
      21             :                                       struct vlib_dma_config_data *cfg);
      22             : typedef void (vlib_dma_config_del_fn) (vlib_main_t *vm,
      23             :                                        struct vlib_dma_config_data *cfg);
      24             : typedef struct vlib_dma_batch *(vlib_dma_batch_new_fn) (
      25             :   vlib_main_t *vm, struct vlib_dma_config_data *);
      26             : typedef int (vlib_dma_batch_submit_fn) (vlib_main_t *vm,
      27             :                                         struct vlib_dma_batch *b);
      28             : typedef void (vlib_dma_batch_callback_fn) (vlib_main_t *vm,
      29             :                                            struct vlib_dma_batch *b);
      30             : typedef struct
      31             : {
      32             :   union
      33             :   {
      34             :     struct
      35             :     {
      36             :       u32 barrier_before_last : 1;
      37             :       u32 sw_fallback : 1;
      38             :     };
      39             :     u32 features;
      40             :   };
      41             :   u16 max_batches;
      42             :   u16 max_transfers;
      43             :   u32 max_transfer_size;
      44             :   vlib_dma_batch_callback_fn *callback_fn;
      45             : } vlib_dma_config_t;
      46             : 
      47             : typedef struct vlib_dma_batch
      48             : {
      49             :   vlib_dma_batch_submit_fn *submit_fn;
      50             :   vlib_dma_batch_callback_fn *callback_fn;
      51             :   uword cookie;
      52             :   u16 src_ptr_off;
      53             :   u16 dst_ptr_off;
      54             :   u16 size_off;
      55             :   u16 stride;
      56             :   u16 n_enq;
      57             : } vlib_dma_batch_t;
      58             : 
      59             : typedef struct
      60             : {
      61             :   char *name;
      62             :   vlib_dma_config_add_fn *config_add_fn;
      63             :   vlib_dma_config_del_fn *config_del_fn;
      64             :   format_function_t *info_fn;
      65             : } vlib_dma_backend_t;
      66             : 
      67             : typedef struct vlib_dma_config_data
      68             : {
      69             :   vlib_dma_config_t cfg;
      70             :   vlib_dma_batch_new_fn *batch_new_fn;
      71             :   uword private_data;
      72             :   u32 backend_index;
      73             :   u32 config_index;
      74             : } vlib_dma_config_data_t;
      75             : 
      76             : typedef struct
      77             : {
      78             :   vlib_dma_backend_t *backends;
      79             :   vlib_dma_config_data_t *configs;
      80             : } vlib_dma_main_t;
      81             : 
      82             : extern vlib_dma_main_t vlib_dma_main;
      83             : 
      84             : clib_error_t *vlib_dma_register_backend (vlib_main_t *vm,
      85             :                                          vlib_dma_backend_t *b);
      86             : 
      87             : int vlib_dma_config_add (vlib_main_t *vm, vlib_dma_config_t *b);
      88             : void vlib_dma_config_del (vlib_main_t *vm, u32 config_index);
      89             : u8 *vlib_dma_config_info (u8 *s, va_list *args);
      90             : 
      91             : static_always_inline vlib_dma_batch_t *
      92           0 : vlib_dma_batch_new (vlib_main_t *vm, u32 config_index)
      93             : {
      94           0 :   vlib_dma_main_t *dm = &vlib_dma_main;
      95           0 :   vlib_dma_config_data_t *cd = pool_elt_at_index (dm->configs, config_index);
      96             : 
      97           0 :   return cd->batch_new_fn (vm, cd);
      98             : }
      99             : 
     100             : static_always_inline void
     101           0 : vlib_dma_batch_set_cookie (vlib_main_t *vm, vlib_dma_batch_t *batch,
     102             :                            uword cookie)
     103             : {
     104           0 :   batch->cookie = cookie;
     105           0 : }
     106             : 
     107             : static_always_inline uword
     108           0 : vlib_dma_batch_get_cookie (vlib_main_t *vm, vlib_dma_batch_t *batch)
     109             : {
     110           0 :   return batch->cookie;
     111             : }
     112             : 
     113             : static_always_inline void
     114           0 : vlib_dma_batch_add (vlib_main_t *vm, vlib_dma_batch_t *batch, void *dst,
     115             :                     void *src, u32 size)
     116             : {
     117           0 :   u8 *p = (u8 *) batch + batch->n_enq * batch->stride;
     118             : 
     119           0 :   *((void **) (p + batch->dst_ptr_off)) = dst;
     120           0 :   *((void **) (p + batch->src_ptr_off)) = src;
     121           0 :   *((u32 *) (p + batch->size_off)) = size;
     122             : 
     123           0 :   batch->n_enq++;
     124           0 : }
     125             : 
     126             : static_always_inline void
     127           0 : vlib_dma_batch_submit (vlib_main_t *vm, vlib_dma_batch_t *batch)
     128             : {
     129           0 :   batch->submit_fn (vm, batch);
     130           0 : }
     131             : 
     132             : #endif

Generated by: LCOV version 1.14