1/* $NetBSD: dma-fence-array.h,v 1.6 2021/12/19 12:23:50 riastradh Exp $ */ 2 3/*- 4 * Copyright (c) 2018 The NetBSD Foundation, Inc. 5 * All rights reserved. 6 * 7 * This code is derived from software contributed to The NetBSD Foundation 8 * by Taylor R. Campbell. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 * POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32#ifndef _LINUX_DMA_FENCE_ARRAY_H_ 33#define _LINUX_DMA_FENCE_ARRAY_H_ 34 35#include <sys/stdbool.h> 36 37#include <linux/dma-fence.h> 38#include <linux/irq_work.h> 39 40#define dma_fence_array_create linux_dma_fence_array_create 41#define dma_fence_is_array linux_dma_fence_is_array 42#define to_dma_fence_array linux_to_dma_fence_array 43 44struct dma_fence_array_cb { 45 struct dma_fence_array *dfac_array; 46 struct dma_fence_cb dfac_cb; 47}; 48 49struct dma_fence_array { 50 struct dma_fence base; 51 struct dma_fence **fences; 52 unsigned num_fences; 53 54 spinlock_t dfa_lock; 55 int dfa_npending; 56 struct irq_work dfa_work; 57 struct dma_fence_array_cb dfa_cb[]; 58}; 59 60struct dma_fence_array * 61 dma_fence_array_create(int, struct dma_fence **, unsigned, unsigned, 62 bool); 63 64bool dma_fence_is_array(struct dma_fence *); 65struct dma_fence_array * 66 to_dma_fence_array(struct dma_fence *); 67 68#endif /* _LINUX_DMA_FENCE_ARRAY_H_ */ 69