| 1 |
|
| 2 |
|
| 3 |
|
| 4 | #ifndef PVR_SYNC_H
|
| 5 | #define PVR_SYNC_H
|
| 6 |
|
| 7 | #include <uapi/drm/pvr_drm.h>
|
| 8 |
|
| 9 |
|
| 10 | struct xarray;
|
| 11 |
|
| 12 |
|
| 13 | struct drm_file;
|
| 14 |
|
| 15 |
|
| 16 | struct drm_sched_job;
|
| 17 |
|
| 18 |
|
| 19 | struct pvr_file;
|
| 20 |
|
| 21 | |
| 22 | * struct pvr_sync_signal - Object encoding a syncobj signal operation
|
| 23 | *
|
| 24 | * The job submission logic collects all signal operations in an array of
|
| 25 | * pvr_sync_signal objects. This array also serves as a cache to get the
|
| 26 | * latest dma_fence when multiple jobs are submitted at once, and one job
|
| 27 | * signals a syncobj point that's later waited on by a subsequent job.
|
| 28 |
|
| 29 | struct pvr_sync_signal {
|
| 30 |
|
| 31 | u32 handle;
|
| 32 |
|
| 33 | |
| 34 | * @point: Point to signal in the syncobj.
|
| 35 | *
|
| 36 | * Only relevant for timeline syncobjs.
|
| 37 |
|
| 38 | u64 point;
|
| 39 |
|
| 40 |
|
| 41 | struct drm_syncobj *syncobj;
|
| 42 |
|
| 43 | |
| 44 | * @chain: Chain object used to link the new fence with the
|
| 45 | * existing timeline syncobj.
|
| 46 | *
|
| 47 | * Should be zero when manipulating a regular syncobj.
|
| 48 |
|
| 49 | struct dma_fence_chain *chain;
|
| 50 |
|
| 51 | |
| 52 | * @fence: New fence object to attach to the syncobj.
|
| 53 | *
|
| 54 | * This pointer starts with the current fence bound to
|
| 55 | * the <handle,point> pair.
|
| 56 |
|
| 57 | struct dma_fence *fence;
|
| 58 | };
|
| 59 |
|
| 60 | void
|
| 61 | pvr_sync_signal_array_cleanup(struct xarray *array);
|
| 62 |
|
| 63 | int
|
| 64 | pvr_sync_signal_array_collect_ops(struct xarray *array,
|
| 65 | struct drm_file *file,
|
| 66 | u32 sync_op_count,
|
| 67 | const struct drm_pvr_sync_op *sync_ops);
|
| 68 |
|
| 69 | int
|
| 70 | pvr_sync_signal_array_update_fences(struct xarray *array,
|
| 71 | u32 sync_op_count,
|
| 72 | const struct drm_pvr_sync_op *sync_ops,
|
| 73 | struct dma_fence *finished_fence);
|
| 74 |
|
| 75 | void
|
| 76 | pvr_sync_signal_array_push_fences(struct xarray *array);
|
| 77 |
|
| 78 | int
|
| 79 | pvr_sync_add_deps_to_job(struct pvr_file *pvr_file, struct drm_sched_job *job,
|
| 80 | u32 sync_op_count,
|
| 81 | const struct drm_pvr_sync_op *sync_ops,
|
| 82 | struct xarray *signal_array);
|
| 83 |
|
| 84 | #endif
|