1/*	$NetBSD: i915_sw_fence_work.h,v 1.2 2021/12/18 23:45:28 riastradh Exp $	*/
2
3/* SPDX-License-Identifier: MIT */
4
5/*
6 * Copyright �� 2019 Intel Corporation
7 */
8
9#ifndef I915_SW_FENCE_WORK_H
10#define I915_SW_FENCE_WORK_H
11
12#include <linux/dma-fence.h>
13#include <linux/spinlock.h>
14#include <linux/workqueue.h>
15
16#include "i915_sw_fence.h"
17
18struct dma_fence_work;
19
20struct dma_fence_work_ops {
21	const char *name;
22	int (*work)(struct dma_fence_work *f);
23	void (*release)(struct dma_fence_work *f);
24};
25
26struct dma_fence_work {
27	struct dma_fence dma;
28	spinlock_t lock;
29
30	struct i915_sw_fence chain;
31	struct i915_sw_dma_fence_cb cb;
32
33	struct work_struct work;
34	const struct dma_fence_work_ops *ops;
35};
36
37void dma_fence_work_init(struct dma_fence_work *f,
38			 const struct dma_fence_work_ops *ops);
39int dma_fence_work_chain(struct dma_fence_work *f, struct dma_fence *signal);
40
41static inline void dma_fence_work_commit(struct dma_fence_work *f)
42{
43	i915_sw_fence_commit(&f->chain);
44}
45
46#endif /* I915_SW_FENCE_WORK_H */
47