1 /* SPDX-License-Identifier: MIT */
2 /*
3  * Copyright © 2022 Intel Corporation
4  */
5 
6 #ifndef _XE_SCHED_JOB_TYPES_H_
7 #define _XE_SCHED_JOB_TYPES_H_
8 
9 #include <linux/kref.h>
10 
11 #include <drm/gpu_scheduler.h>
12 
13 struct xe_exec_queue;
14 
15 /**
16  * struct xe_sched_job - XE schedule job (batch buffer tracking)
17  */
18 struct xe_sched_job {
19 	/** @drm: base DRM scheduler job */
20 	struct drm_sched_job drm;
21 	/** @q: Exec queue */
22 	struct xe_exec_queue *q;
23 	/** @refcount: ref count of this job */
24 	struct kref refcount;
25 	/**
26 	 * @fence: dma fence to indicate completion. 1 way relationship - job
27 	 * can safely reference fence, fence cannot safely reference job.
28 	 */
29 #define JOB_FLAG_SUBMIT		DMA_FENCE_FLAG_USER_BITS
30 	struct dma_fence *fence;
31 	/** @user_fence: write back value when BB is complete */
32 	struct {
33 		/** @used: user fence is used */
34 		bool used;
35 		/** @addr: address to write to */
36 		u64 addr;
37 		/** @value: write back value */
38 		u64 value;
39 	} user_fence;
40 	/** @migrate_flush_flags: Additional flush flags for migration jobs */
41 	u32 migrate_flush_flags;
42 	/** @batch_addr: batch buffer address of job */
43 	u64 batch_addr[];
44 };
45 
46 #endif
47