Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /* Copyright 2019 Collabora ltd. */
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     /* Fence to be signaled by IRQ handler when the job is complete. */
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     /* Fence to be signaled by drm-sched once its done with the job */
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