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