|  | /* | 
|  | * Sync File validation framework and debug infomation | 
|  | * | 
|  | * Copyright (C) 2012 Google, Inc. | 
|  | * | 
|  | * This program is distributed in the hope that it will be useful, | 
|  | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|  | * GNU General Public License for more details. | 
|  | * | 
|  | */ | 
|  |  | 
|  | #ifndef _LINUX_SYNC_H | 
|  | #define _LINUX_SYNC_H | 
|  |  | 
|  | #include <linux/list.h> | 
|  | #include <linux/rbtree.h> | 
|  | #include <linux/spinlock.h> | 
|  | #include <linux/dma-fence.h> | 
|  |  | 
|  | #include <linux/sync_file.h> | 
|  | #include <uapi/linux/sync_file.h> | 
|  |  | 
|  | /** | 
|  | * struct sync_timeline - sync object | 
|  | * @kref:		reference count on fence. | 
|  | * @name:		name of the sync_timeline. Useful for debugging | 
|  | * @lock:		lock protecting @pt_list and @value | 
|  | * @pt_tree:		rbtree of active (unsignaled/errored) sync_pts | 
|  | * @pt_list:		list of active (unsignaled/errored) sync_pts | 
|  | * @sync_timeline_list:	membership in global sync_timeline_list | 
|  | */ | 
|  | struct sync_timeline { | 
|  | struct kref		kref; | 
|  | char			name[32]; | 
|  |  | 
|  | /* protected by lock */ | 
|  | u64			context; | 
|  | int			value; | 
|  |  | 
|  | struct rb_root		pt_tree; | 
|  | struct list_head	pt_list; | 
|  | spinlock_t		lock; | 
|  |  | 
|  | struct list_head	sync_timeline_list; | 
|  | }; | 
|  |  | 
|  | static inline struct sync_timeline *dma_fence_parent(struct dma_fence *fence) | 
|  | { | 
|  | return container_of(fence->lock, struct sync_timeline, lock); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * struct sync_pt - sync_pt object | 
|  | * @base: base fence object | 
|  | * @link: link on the sync timeline's list | 
|  | * @node: node in the sync timeline's tree | 
|  | */ | 
|  | struct sync_pt { | 
|  | struct dma_fence base; | 
|  | struct list_head link; | 
|  | struct rb_node node; | 
|  | }; | 
|  |  | 
|  | extern const struct file_operations sw_sync_debugfs_fops; | 
|  |  | 
|  | void sync_timeline_debug_add(struct sync_timeline *obj); | 
|  | void sync_timeline_debug_remove(struct sync_timeline *obj); | 
|  | void sync_file_debug_add(struct sync_file *fence); | 
|  | void sync_file_debug_remove(struct sync_file *fence); | 
|  |  | 
|  | #endif /* _LINUX_SYNC_H */ |