| 1 | /* SPDX-License-Identifier: MIT */ |
| 2 | /* |
| 3 | * Copyright © 2021 Intel Corporation |
| 4 | */ |
| 5 | |
| 6 | #ifndef _XE_SYNC_H_ |
| 7 | #define _XE_SYNC_H_ |
| 8 | |
| 9 | #include "xe_sync_types.h" |
| 10 | |
| 11 | struct drm_syncobj; |
| 12 | struct xe_device; |
| 13 | struct xe_exec_queue; |
| 14 | struct xe_file; |
| 15 | struct xe_sched_job; |
| 16 | struct xe_vm; |
| 17 | |
| 18 | #define SYNC_PARSE_FLAG_EXEC BIT(0) |
| 19 | #define SYNC_PARSE_FLAG_LR_MODE BIT(1) |
| 20 | #define SYNC_PARSE_FLAG_DISALLOW_USER_FENCE BIT(2) |
| 21 | |
| 22 | int xe_sync_entry_parse(struct xe_device *xe, struct xe_file *xef, |
| 23 | struct xe_sync_entry *sync, |
| 24 | struct drm_xe_sync __user *sync_user, |
| 25 | struct drm_syncobj *ufence_syncobj, |
| 26 | u64 ufence_timeline_value, |
| 27 | unsigned int flags); |
| 28 | int xe_sync_entry_add_deps(struct xe_sync_entry *sync, |
| 29 | struct xe_sched_job *job); |
| 30 | void xe_sync_entry_signal(struct xe_sync_entry *sync, |
| 31 | struct dma_fence *fence); |
| 32 | void xe_sync_entry_cleanup(struct xe_sync_entry *sync); |
| 33 | struct dma_fence * |
| 34 | xe_sync_in_fence_get(struct xe_sync_entry *sync, int num_sync, |
| 35 | struct xe_exec_queue *q, struct xe_vm *vm); |
| 36 | |
| 37 | static inline bool xe_sync_is_ufence(struct xe_sync_entry *sync) |
| 38 | { |
| 39 | return !!sync->ufence; |
| 40 | } |
| 41 | |
| 42 | struct xe_user_fence *__xe_sync_ufence_get(struct xe_user_fence *ufence); |
| 43 | struct xe_user_fence *xe_sync_ufence_get(struct xe_sync_entry *sync); |
| 44 | void xe_sync_ufence_put(struct xe_user_fence *ufence); |
| 45 | int xe_sync_ufence_get_status(struct xe_user_fence *ufence); |
| 46 | |
| 47 | #endif |
| 48 | |