xref: /openbsd/sys/dev/pci/drm/i915/i915_active_types.h (revision 1bb76ff1)
1*c349dbc7Sjsg /*
2*c349dbc7Sjsg  * SPDX-License-Identifier: MIT
3*c349dbc7Sjsg  *
4*c349dbc7Sjsg  * Copyright © 2019 Intel Corporation
5*c349dbc7Sjsg  */
6*c349dbc7Sjsg 
7*c349dbc7Sjsg #ifndef _I915_ACTIVE_TYPES_H_
8*c349dbc7Sjsg #define _I915_ACTIVE_TYPES_H_
9*c349dbc7Sjsg 
10*c349dbc7Sjsg #include <linux/atomic.h>
11*c349dbc7Sjsg #include <linux/dma-fence.h>
12*c349dbc7Sjsg #include <linux/llist.h>
13*c349dbc7Sjsg #include <linux/mutex.h>
14*c349dbc7Sjsg #include <linux/rbtree.h>
15*c349dbc7Sjsg #include <linux/rcupdate.h>
16*c349dbc7Sjsg #include <linux/workqueue.h>
17*c349dbc7Sjsg 
18*c349dbc7Sjsg struct i915_active_fence {
19*c349dbc7Sjsg 	struct dma_fence __rcu *fence;
20*c349dbc7Sjsg 	struct dma_fence_cb cb;
21*c349dbc7Sjsg };
22*c349dbc7Sjsg 
23*c349dbc7Sjsg struct active_node;
24*c349dbc7Sjsg 
25*c349dbc7Sjsg struct i915_active {
26*c349dbc7Sjsg 	atomic_t count;
27*c349dbc7Sjsg 	struct rwlock mutex;
28*c349dbc7Sjsg 
29*c349dbc7Sjsg 	spinlock_t tree_lock;
30*c349dbc7Sjsg 	struct active_node *cache;
31*c349dbc7Sjsg 	struct rb_root tree;
32*c349dbc7Sjsg 
33*c349dbc7Sjsg 	/* Preallocated "exclusive" node */
34*c349dbc7Sjsg 	struct i915_active_fence excl;
35*c349dbc7Sjsg 
36*c349dbc7Sjsg 	unsigned long flags;
37*c349dbc7Sjsg #define I915_ACTIVE_RETIRE_SLEEPS BIT(0)
38*c349dbc7Sjsg 
39*c349dbc7Sjsg 	int (*active)(struct i915_active *ref);
40*c349dbc7Sjsg 	void (*retire)(struct i915_active *ref);
41*c349dbc7Sjsg 
42*c349dbc7Sjsg 	struct work_struct work;
43*c349dbc7Sjsg 
44*c349dbc7Sjsg 	struct llist_head preallocated_barriers;
45*c349dbc7Sjsg };
46*c349dbc7Sjsg 
47*c349dbc7Sjsg #endif /* _I915_ACTIVE_TYPES_H_ */
48