xref: /linux/drivers/gpu/drm/i915/i915_active_types.h (revision 03ab8e6297acd1bc0eedaa050e2a1635c576fd11)
164d6c500SChris Wilson /*
264d6c500SChris Wilson  * SPDX-License-Identifier: MIT
364d6c500SChris Wilson  *
464d6c500SChris Wilson  * Copyright © 2019 Intel Corporation
564d6c500SChris Wilson  */
664d6c500SChris Wilson 
764d6c500SChris Wilson #ifndef _I915_ACTIVE_TYPES_H_
864d6c500SChris Wilson #define _I915_ACTIVE_TYPES_H_
964d6c500SChris Wilson 
1012c255b5SChris Wilson #include <linux/atomic.h>
112850748eSChris Wilson #include <linux/dma-fence.h>
12ce476c80SChris Wilson #include <linux/llist.h>
1312c255b5SChris Wilson #include <linux/mutex.h>
1464d6c500SChris Wilson #include <linux/rbtree.h>
1521950ee7SChris Wilson #include <linux/rcupdate.h>
16274cbf20SChris Wilson #include <linux/workqueue.h>
17274cbf20SChris Wilson 
18b1e3177bSChris Wilson struct i915_active_fence {
19b1e3177bSChris Wilson 	struct dma_fence __rcu *fence;
20b1e3177bSChris Wilson 	struct dma_fence_cb cb;
2121950ee7SChris Wilson };
2264d6c500SChris Wilson 
2312c255b5SChris Wilson struct active_node;
2412c255b5SChris Wilson 
2564d6c500SChris Wilson struct i915_active {
26b1e3177bSChris Wilson 	atomic_t count;
27b1e3177bSChris Wilson 	struct mutex mutex;
2864d6c500SChris Wilson 
29*c9ad602fSChris Wilson 	spinlock_t tree_lock;
3012c255b5SChris Wilson 	struct active_node *cache;
3164d6c500SChris Wilson 	struct rb_root tree;
3264d6c500SChris Wilson 
332850748eSChris Wilson 	/* Preallocated "exclusive" node */
34b1e3177bSChris Wilson 	struct i915_active_fence excl;
352850748eSChris Wilson 
3679c7a28eSChris Wilson 	unsigned long flags;
37274cbf20SChris Wilson #define I915_ACTIVE_RETIRE_SLEEPS BIT(0)
3879c7a28eSChris Wilson 
3912c255b5SChris Wilson 	int (*active)(struct i915_active *ref);
4064d6c500SChris Wilson 	void (*retire)(struct i915_active *ref);
41ce476c80SChris Wilson 
42274cbf20SChris Wilson 	struct work_struct work;
43274cbf20SChris Wilson 
44d8af05ffSChris Wilson 	struct llist_head preallocated_barriers;
4564d6c500SChris Wilson };
4664d6c500SChris Wilson 
4764d6c500SChris Wilson #endif /* _I915_ACTIVE_TYPES_H_ */
48