0001
0002
0003
0004 #ifndef __PANFROST_JOB_H__
0005 #define __PANFROST_JOB_H__
0006
0007 #include <uapi/drm/panfrost_drm.h>
0008 #include <drm/gpu_scheduler.h>
0009
0010 struct panfrost_device;
0011 struct panfrost_gem_object;
0012 struct panfrost_file_priv;
0013
0014 struct panfrost_job {
0015 struct drm_sched_job base;
0016
0017 struct kref refcount;
0018
0019 struct panfrost_device *pfdev;
0020 struct panfrost_mmu *mmu;
0021
0022
0023 struct dma_fence *done_fence;
0024
0025 __u64 jc;
0026 __u32 requirements;
0027 __u32 flush_id;
0028
0029 struct panfrost_gem_mapping **mappings;
0030 struct drm_gem_object **bos;
0031 u32 bo_count;
0032
0033
0034 struct dma_fence *render_done_fence;
0035 };
0036
0037 int panfrost_job_init(struct panfrost_device *pfdev);
0038 void panfrost_job_fini(struct panfrost_device *pfdev);
0039 int panfrost_job_open(struct panfrost_file_priv *panfrost_priv);
0040 void panfrost_job_close(struct panfrost_file_priv *panfrost_priv);
0041 int panfrost_job_get_slot(struct panfrost_job *job);
0042 int panfrost_job_push(struct panfrost_job *job);
0043 void panfrost_job_put(struct panfrost_job *job);
0044 void panfrost_job_enable_interrupts(struct panfrost_device *pfdev);
0045 int panfrost_job_is_idle(struct panfrost_device *pfdev);
0046
0047 #endif