13d0407baSopenharmony_ci/* 23d0407baSopenharmony_ci * Sync File validation framework and debug infomation 33d0407baSopenharmony_ci * 43d0407baSopenharmony_ci * Copyright (C) 2012 Google, Inc. 53d0407baSopenharmony_ci * 63d0407baSopenharmony_ci * This program is distributed in the hope that it will be useful, 73d0407baSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of 83d0407baSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 93d0407baSopenharmony_ci * GNU General Public License for more details. 103d0407baSopenharmony_ci * 113d0407baSopenharmony_ci */ 123d0407baSopenharmony_ci 133d0407baSopenharmony_ci#ifndef LINUX_SYNC_H 143d0407baSopenharmony_ci#define LINUX_SYNC_H 153d0407baSopenharmony_ci 163d0407baSopenharmony_ci#include <linux/list.h> 173d0407baSopenharmony_ci#include <linux/rbtree.h> 183d0407baSopenharmony_ci#include <linux/spinlock.h> 193d0407baSopenharmony_ci#include <linux/dma-fence.h> 203d0407baSopenharmony_ci 213d0407baSopenharmony_ci#include <linux/sync_file.h> 223d0407baSopenharmony_ci#include <uapi/linux/sync_file.h> 233d0407baSopenharmony_ci 243d0407baSopenharmony_ci/** 253d0407baSopenharmony_ci * struct sync_timeline - sync object 263d0407baSopenharmony_ci * @kref: reference count on fence. 273d0407baSopenharmony_ci * @name: name of the sync_timeline. Useful for debugging 283d0407baSopenharmony_ci * @lock: lock protecting @pt_list and @value 293d0407baSopenharmony_ci * @pt_tree: rbtree of active (unsignaled/errored) sync_pts 303d0407baSopenharmony_ci * @pt_list: list of active (unsignaled/errored) sync_pts 313d0407baSopenharmony_ci * @sync_timeline_list: membership in global sync_timeline_list 323d0407baSopenharmony_ci */ 333d0407baSopenharmony_cistruct sync_timeline { 343d0407baSopenharmony_ci struct kref kref; 353d0407baSopenharmony_ci char name[32]; 363d0407baSopenharmony_ci 373d0407baSopenharmony_ci /* protected by lock */ 383d0407baSopenharmony_ci u64 context; 393d0407baSopenharmony_ci int value; 403d0407baSopenharmony_ci 413d0407baSopenharmony_ci struct rb_root pt_tree; 423d0407baSopenharmony_ci struct list_head pt_list; 433d0407baSopenharmony_ci spinlock_t lock; 443d0407baSopenharmony_ci 453d0407baSopenharmony_ci struct list_head sync_timeline_list; 463d0407baSopenharmony_ci}; 473d0407baSopenharmony_ci 483d0407baSopenharmony_cistatic inline struct sync_timeline *dma_fence_parent(struct dma_fence *fence) 493d0407baSopenharmony_ci{ 503d0407baSopenharmony_ci return container_of(fence->lock, struct sync_timeline, lock); 513d0407baSopenharmony_ci} 523d0407baSopenharmony_ci 533d0407baSopenharmony_ci/** 543d0407baSopenharmony_ci * struct sync_pt - sync_pt object 553d0407baSopenharmony_ci * @base: base fence object 563d0407baSopenharmony_ci * @link: link on the sync timeline's list 573d0407baSopenharmony_ci * @node: node in the sync timeline's tree 583d0407baSopenharmony_ci */ 593d0407baSopenharmony_cistruct sync_pt { 603d0407baSopenharmony_ci struct dma_fence base; 613d0407baSopenharmony_ci struct list_head link; 623d0407baSopenharmony_ci struct rb_node node; 633d0407baSopenharmony_ci}; 643d0407baSopenharmony_ci 653d0407baSopenharmony_ci#ifdef CONFIG_DEBUG_FS 663d0407baSopenharmony_ciextern const struct file_operations sw_sync_debugfs_fops; 673d0407baSopenharmony_ci 683d0407baSopenharmony_civoid sync_timeline_debug_add(struct sync_timeline *obj); 693d0407baSopenharmony_civoid sync_timeline_debug_remove(struct sync_timeline *obj); 703d0407baSopenharmony_civoid sync_file_debug_add(struct sync_file *fence); 713d0407baSopenharmony_civoid sync_file_debug_remove(struct sync_file *fence); 723d0407baSopenharmony_ci#else 733d0407baSopenharmony_cistatic inline void sync_timeline_debug_add(struct sync_timeline *obj) 743d0407baSopenharmony_ci{ 753d0407baSopenharmony_ci} 763d0407baSopenharmony_cistatic inline void sync_timeline_debug_remove(struct sync_timeline *obj) 773d0407baSopenharmony_ci{ 783d0407baSopenharmony_ci} 793d0407baSopenharmony_cistatic inline void sync_file_debug_add(struct sync_file *fence) 803d0407baSopenharmony_ci{ 813d0407baSopenharmony_ci} 823d0407baSopenharmony_cistatic inline void sync_file_debug_remove(struct sync_file *fence) 833d0407baSopenharmony_ci{ 843d0407baSopenharmony_ci} 853d0407baSopenharmony_ci#endif 863d0407baSopenharmony_ci 873d0407baSopenharmony_ci#endif /* _LINUX_SYNC_H */ 88