1c22a4ed0SFrancois Dugast /* SPDX-License-Identifier: MIT */
2c22a4ed0SFrancois Dugast /*
3c22a4ed0SFrancois Dugast * Copyright © 2021 Intel Corporation
4c22a4ed0SFrancois Dugast */
5c22a4ed0SFrancois Dugast
69b9529ceSFrancois Dugast #ifndef _XE_EXEC_QUEUE_H_
79b9529ceSFrancois Dugast #define _XE_EXEC_QUEUE_H_
8c22a4ed0SFrancois Dugast
99b9529ceSFrancois Dugast #include "xe_exec_queue_types.h"
10c22a4ed0SFrancois Dugast #include "xe_vm_types.h"
11c22a4ed0SFrancois Dugast
12c22a4ed0SFrancois Dugast struct drm_device;
13c22a4ed0SFrancois Dugast struct drm_file;
14c22a4ed0SFrancois Dugast struct xe_device;
15c22a4ed0SFrancois Dugast struct xe_file;
16c22a4ed0SFrancois Dugast
179b9529ceSFrancois Dugast struct xe_exec_queue *xe_exec_queue_create(struct xe_device *xe, struct xe_vm *vm,
18c22a4ed0SFrancois Dugast u32 logical_mask, u16 width,
1925ce7c50SBrian Welty struct xe_hw_engine *hw_engine, u32 flags,
2025ce7c50SBrian Welty u64 extensions);
219b9529ceSFrancois Dugast struct xe_exec_queue *xe_exec_queue_create_class(struct xe_device *xe, struct xe_gt *gt,
22c22a4ed0SFrancois Dugast struct xe_vm *vm,
23852856e3SMatthew Brost enum xe_engine_class class,
24852856e3SMatthew Brost u32 flags, u64 extensions);
25852856e3SMatthew Brost struct xe_exec_queue *xe_exec_queue_create_bind(struct xe_device *xe,
26852856e3SMatthew Brost struct xe_tile *tile,
27852856e3SMatthew Brost u32 flags, u64 extensions);
28c22a4ed0SFrancois Dugast
299b9529ceSFrancois Dugast void xe_exec_queue_fini(struct xe_exec_queue *q);
309b9529ceSFrancois Dugast void xe_exec_queue_destroy(struct kref *ref);
310b1d1473SDaniele Ceraolo Spurio void xe_exec_queue_assign_name(struct xe_exec_queue *q, u32 instance);
32c22a4ed0SFrancois Dugast
338ed9aaaeSRodrigo Vivi static inline struct xe_exec_queue *
xe_exec_queue_get_unless_zero(struct xe_exec_queue * q)348ed9aaaeSRodrigo Vivi xe_exec_queue_get_unless_zero(struct xe_exec_queue *q)
358ed9aaaeSRodrigo Vivi {
368ed9aaaeSRodrigo Vivi if (kref_get_unless_zero(&q->refcount))
378ed9aaaeSRodrigo Vivi return q;
388ed9aaaeSRodrigo Vivi
398ed9aaaeSRodrigo Vivi return NULL;
408ed9aaaeSRodrigo Vivi }
418ed9aaaeSRodrigo Vivi
429b9529ceSFrancois Dugast struct xe_exec_queue *xe_exec_queue_lookup(struct xe_file *xef, u32 id);
43c22a4ed0SFrancois Dugast
xe_exec_queue_get(struct xe_exec_queue * q)449b9529ceSFrancois Dugast static inline struct xe_exec_queue *xe_exec_queue_get(struct xe_exec_queue *q)
45c22a4ed0SFrancois Dugast {
469b9529ceSFrancois Dugast kref_get(&q->refcount);
479b9529ceSFrancois Dugast return q;
48c22a4ed0SFrancois Dugast }
49c22a4ed0SFrancois Dugast
xe_exec_queue_put(struct xe_exec_queue * q)509b9529ceSFrancois Dugast static inline void xe_exec_queue_put(struct xe_exec_queue *q)
51c22a4ed0SFrancois Dugast {
529b9529ceSFrancois Dugast kref_put(&q->refcount, xe_exec_queue_destroy);
53c22a4ed0SFrancois Dugast }
54c22a4ed0SFrancois Dugast
xe_exec_queue_is_parallel(struct xe_exec_queue * q)559b9529ceSFrancois Dugast static inline bool xe_exec_queue_is_parallel(struct xe_exec_queue *q)
56c22a4ed0SFrancois Dugast {
579b9529ceSFrancois Dugast return q->width > 1;
58c22a4ed0SFrancois Dugast }
59c22a4ed0SFrancois Dugast
xe_exec_queue_uses_pxp(struct xe_exec_queue * q)60*72d47960SDaniele Ceraolo Spurio static inline bool xe_exec_queue_uses_pxp(struct xe_exec_queue *q)
61*72d47960SDaniele Ceraolo Spurio {
62*72d47960SDaniele Ceraolo Spurio return q->pxp.type;
63*72d47960SDaniele Ceraolo Spurio }
64*72d47960SDaniele Ceraolo Spurio
659b9529ceSFrancois Dugast bool xe_exec_queue_is_lr(struct xe_exec_queue *q);
66c22a4ed0SFrancois Dugast
679b9529ceSFrancois Dugast bool xe_exec_queue_ring_full(struct xe_exec_queue *q);
68c22a4ed0SFrancois Dugast
699b9529ceSFrancois Dugast bool xe_exec_queue_is_idle(struct xe_exec_queue *q);
70c22a4ed0SFrancois Dugast
719b9529ceSFrancois Dugast void xe_exec_queue_kill(struct xe_exec_queue *q);
72c22a4ed0SFrancois Dugast
739b9529ceSFrancois Dugast int xe_exec_queue_create_ioctl(struct drm_device *dev, void *data,
74c22a4ed0SFrancois Dugast struct drm_file *file);
759b9529ceSFrancois Dugast int xe_exec_queue_destroy_ioctl(struct drm_device *dev, void *data,
76c22a4ed0SFrancois Dugast struct drm_file *file);
779b9529ceSFrancois Dugast int xe_exec_queue_get_property_ioctl(struct drm_device *dev, void *data,
78c22a4ed0SFrancois Dugast struct drm_file *file);
799b9529ceSFrancois Dugast enum xe_exec_queue_priority xe_exec_queue_device_get_max_priority(struct xe_device *xe);
80c22a4ed0SFrancois Dugast
81e669f10cSMatthew Brost void xe_exec_queue_last_fence_put(struct xe_exec_queue *e, struct xe_vm *vm);
82e669f10cSMatthew Brost void xe_exec_queue_last_fence_put_unlocked(struct xe_exec_queue *e);
83e669f10cSMatthew Brost struct dma_fence *xe_exec_queue_last_fence_get(struct xe_exec_queue *e,
84e669f10cSMatthew Brost struct xe_vm *vm);
850d92cd89SFrancois Dugast struct dma_fence *xe_exec_queue_last_fence_get_for_resume(struct xe_exec_queue *e,
860d92cd89SFrancois Dugast struct xe_vm *vm);
87e669f10cSMatthew Brost void xe_exec_queue_last_fence_set(struct xe_exec_queue *e, struct xe_vm *vm,
88e669f10cSMatthew Brost struct dma_fence *fence);
8996e7ebb2SMatthew Brost int xe_exec_queue_last_fence_test_dep(struct xe_exec_queue *q,
9096e7ebb2SMatthew Brost struct xe_vm *vm);
9145bb564dSUmesh Nerlige Ramappa void xe_exec_queue_update_run_ticks(struct xe_exec_queue *q);
92e669f10cSMatthew Brost
93c22a4ed0SFrancois Dugast #endif
94