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