156113504SChristian König /* 256113504SChristian König * Copyright 2016 Advanced Micro Devices, Inc. 356113504SChristian König * 456113504SChristian König * Permission is hereby granted, free of charge, to any person obtaining a 556113504SChristian König * copy of this software and associated documentation files (the "Software"), 656113504SChristian König * to deal in the Software without restriction, including without limitation 756113504SChristian König * the rights to use, copy, modify, merge, publish, distribute, sublicense, 856113504SChristian König * and/or sell copies of the Software, and to permit persons to whom the 956113504SChristian König * Software is furnished to do so, subject to the following conditions: 1056113504SChristian König * 1156113504SChristian König * The above copyright notice and this permission notice shall be included in 1256113504SChristian König * all copies or substantial portions of the Software. 1356113504SChristian König * 1456113504SChristian König * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1556113504SChristian König * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1656113504SChristian König * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 1756113504SChristian König * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 1856113504SChristian König * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 1956113504SChristian König * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 2056113504SChristian König * OTHER DEALINGS IN THE SOFTWARE. 2156113504SChristian König * 2256113504SChristian König * Authors: Christian König 2356113504SChristian König */ 2456113504SChristian König #ifndef __AMDGPU_SYNC_H__ 2556113504SChristian König #define __AMDGPU_SYNC_H__ 2656113504SChristian König 2756113504SChristian König #include <linux/hashtable.h> 2856113504SChristian König 29220196b3SDave Airlie struct dma_fence; 3052791eeeSChristian König struct dma_resv; 3156113504SChristian König struct amdgpu_device; 3256113504SChristian König struct amdgpu_ring; 33aab9cf7bSChristian König struct amdgpu_job; 3456113504SChristian König 355d319660SChristian König enum amdgpu_sync_mode { 365d319660SChristian König AMDGPU_SYNC_ALWAYS, 375d319660SChristian König AMDGPU_SYNC_NE_OWNER, 385d319660SChristian König AMDGPU_SYNC_EQ_OWNER, 395d319660SChristian König AMDGPU_SYNC_EXPLICIT 405d319660SChristian König }; 415d319660SChristian König 4256113504SChristian König /* 4356113504SChristian König * Container for fences used to sync command submissions. 4456113504SChristian König */ 4556113504SChristian König struct amdgpu_sync { 4656113504SChristian König DECLARE_HASHTABLE(fences, 4); 4756113504SChristian König }; 4856113504SChristian König 4956113504SChristian König void amdgpu_sync_create(struct amdgpu_sync *sync); 5016590745SChristian König int amdgpu_sync_fence(struct amdgpu_sync *sync, struct dma_fence *f, 5116590745SChristian König gfp_t flags); 525d319660SChristian König int amdgpu_sync_resv(struct amdgpu_device *adev, struct amdgpu_sync *sync, 535d319660SChristian König struct dma_resv *resv, enum amdgpu_sync_mode mode, 545d319660SChristian König void *owner); 55126be9b2SChristian König int amdgpu_sync_kfd(struct amdgpu_sync *sync, struct dma_resv *resv); 56220196b3SDave Airlie struct dma_fence *amdgpu_sync_peek_fence(struct amdgpu_sync *sync, 5756113504SChristian König struct amdgpu_ring *ring); 58174b328bSChristian König struct dma_fence *amdgpu_sync_get_fence(struct amdgpu_sync *sync); 593c728d3aSFelix Kuehling int amdgpu_sync_clone(struct amdgpu_sync *source, struct amdgpu_sync *clone); 60*bd22e44aSChristian König void amdgpu_sync_move(struct amdgpu_sync *src, struct amdgpu_sync *dst); 61aab9cf7bSChristian König int amdgpu_sync_push_to_job(struct amdgpu_sync *sync, struct amdgpu_job *job); 62a6583af4SHarish Kasiviswanathan int amdgpu_sync_wait(struct amdgpu_sync *sync, bool intr); 6356113504SChristian König void amdgpu_sync_free(struct amdgpu_sync *sync); 6456113504SChristian König int amdgpu_sync_init(void); 6556113504SChristian König void amdgpu_sync_fini(void); 6656113504SChristian König 6756113504SChristian König #endif 68