panfrost_job.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /* Copyright 2019 Collabora ltd. */
  3. #ifndef __PANFROST_JOB_H__
  4. #define __PANFROST_JOB_H__
  5. #include <uapi/drm/panfrost_drm.h>
  6. #include <drm/gpu_scheduler.h>
  7. struct panfrost_device;
  8. struct panfrost_gem_object;
  9. struct panfrost_file_priv;
  10. struct panfrost_job {
  11. struct drm_sched_job base;
  12. struct kref refcount;
  13. struct panfrost_device *pfdev;
  14. struct panfrost_mmu *mmu;
  15. /* Fence to be signaled by IRQ handler when the job is complete. */
  16. struct dma_fence *done_fence;
  17. __u64 jc;
  18. __u32 requirements;
  19. __u32 flush_id;
  20. struct panfrost_gem_mapping **mappings;
  21. struct drm_gem_object **bos;
  22. u32 bo_count;
  23. /* Fence to be signaled by drm-sched once its done with the job */
  24. struct dma_fence *render_done_fence;
  25. };
  26. int panfrost_job_init(struct panfrost_device *pfdev);
  27. void panfrost_job_fini(struct panfrost_device *pfdev);
  28. int panfrost_job_open(struct panfrost_file_priv *panfrost_priv);
  29. void panfrost_job_close(struct panfrost_file_priv *panfrost_priv);
  30. int panfrost_job_get_slot(struct panfrost_job *job);
  31. int panfrost_job_push(struct panfrost_job *job);
  32. void panfrost_job_put(struct panfrost_job *job);
  33. void panfrost_job_enable_interrupts(struct panfrost_device *pfdev);
  34. int panfrost_job_is_idle(struct panfrost_device *pfdev);
  35. #endif