LCOV - code coverage report
Current view: top level - include/linux - dma-fence-array.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 1 0.0 %
Date: 2023-03-27 20:00:47 Functions: 0 0 -

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0-only */
       2             : /*
       3             :  * fence-array: aggregates fence to be waited together
       4             :  *
       5             :  * Copyright (C) 2016 Collabora Ltd
       6             :  * Copyright (C) 2016 Advanced Micro Devices, Inc.
       7             :  * Authors:
       8             :  *      Gustavo Padovan <gustavo@padovan.org>
       9             :  *      Christian König <christian.koenig@amd.com>
      10             :  */
      11             : 
      12             : #ifndef __LINUX_DMA_FENCE_ARRAY_H
      13             : #define __LINUX_DMA_FENCE_ARRAY_H
      14             : 
      15             : #include <linux/dma-fence.h>
      16             : #include <linux/irq_work.h>
      17             : 
      18             : /**
      19             :  * struct dma_fence_array_cb - callback helper for fence array
      20             :  * @cb: fence callback structure for signaling
      21             :  * @array: reference to the parent fence array object
      22             :  */
      23             : struct dma_fence_array_cb {
      24             :         struct dma_fence_cb cb;
      25             :         struct dma_fence_array *array;
      26             : };
      27             : 
      28             : /**
      29             :  * struct dma_fence_array - fence to represent an array of fences
      30             :  * @base: fence base class
      31             :  * @lock: spinlock for fence handling
      32             :  * @num_fences: number of fences in the array
      33             :  * @num_pending: fences in the array still pending
      34             :  * @fences: array of the fences
      35             :  * @work: internal irq_work function
      36             :  */
      37             : struct dma_fence_array {
      38             :         struct dma_fence base;
      39             : 
      40             :         spinlock_t lock;
      41             :         unsigned num_fences;
      42             :         atomic_t num_pending;
      43             :         struct dma_fence **fences;
      44             : 
      45             :         struct irq_work work;
      46             : };
      47             : 
      48             : /**
      49             :  * to_dma_fence_array - cast a fence to a dma_fence_array
      50             :  * @fence: fence to cast to a dma_fence_array
      51             :  *
      52             :  * Returns NULL if the fence is not a dma_fence_array,
      53             :  * or the dma_fence_array otherwise.
      54             :  */
      55             : static inline struct dma_fence_array *
      56             : to_dma_fence_array(struct dma_fence *fence)
      57             : {
      58           0 :         if (!fence || !dma_fence_is_array(fence))
      59             :                 return NULL;
      60             : 
      61             :         return container_of(fence, struct dma_fence_array, base);
      62             : }
      63             : 
      64             : /**
      65             :  * dma_fence_array_for_each - iterate over all fences in array
      66             :  * @fence: current fence
      67             :  * @index: index into the array
      68             :  * @head: potential dma_fence_array object
      69             :  *
      70             :  * Test if @array is a dma_fence_array object and if yes iterate over all fences
      71             :  * in the array. If not just iterate over the fence in @array itself.
      72             :  *
      73             :  * For a deep dive iterator see dma_fence_unwrap_for_each().
      74             :  */
      75             : #define dma_fence_array_for_each(fence, index, head)                    \
      76             :         for (index = 0, fence = dma_fence_array_first(head); fence;     \
      77             :              ++(index), fence = dma_fence_array_next(head, index))
      78             : 
      79             : struct dma_fence_array *dma_fence_array_create(int num_fences,
      80             :                                                struct dma_fence **fences,
      81             :                                                u64 context, unsigned seqno,
      82             :                                                bool signal_on_any);
      83             : 
      84             : bool dma_fence_match_context(struct dma_fence *fence, u64 context);
      85             : 
      86             : struct dma_fence *dma_fence_array_first(struct dma_fence *head);
      87             : struct dma_fence *dma_fence_array_next(struct dma_fence *head,
      88             :                                        unsigned int index);
      89             : 
      90             : #endif /* __LINUX_DMA_FENCE_ARRAY_H */

Generated by: LCOV version 1.14